@visns-studio/visns-components 6.0.3 → 6.0.5
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 +1 -1
- package/src/components/DataGrid.jsx +30 -12
- package/src/components/auth/Login.jsx +203 -175
- package/src/components/columns/ColumnRenderers.jsx +34 -0
- package/src/components/generic/GenericFormBuilder.jsx +550 -25
- package/src/components/generic/GenericIndex.jsx +15 -5
- package/src/components/styles/DataGrid.module.scss +38 -22
- package/src/components/styles/Form.module.scss +32 -33
- package/src/components/styles/GenericDetail.module.scss +28 -30
- package/src/components/styles/GenericDynamic.module.scss +7 -21
- package/src/components/styles/GenericEditableTable.module.scss +5 -22
- package/src/components/styles/GenericFormBuilder.module.scss +545 -30
- package/src/components/styles/GenericIndex.module.scss +17 -32
- package/src/components/styles/GenericMain.module.scss +18 -6
- package/src/components/styles/GenericQuote.module.scss +7 -22
- package/src/components/styles/GenericReport.module.scss +5 -37
- package/src/components/styles/Login.module.scss +415 -239
- package/src/components/styles/Navigation.module.scss +124 -35
- package/src/components/styles/Profile.module.scss +5 -26
- package/src/components/styles/QuickAction.module.scss +34 -29
- package/src/components/styles/_controls.scss +139 -0
- package/src/components/styles/global.css +54 -15
|
@@ -1,322 +1,498 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Prime Builders sign in.
|
|
3
|
+
*
|
|
4
|
+
* An asymmetric split: the company's own completed work on the left, the form
|
|
5
|
+
* on the right. Colours are taken from that photograph and the logo rather
|
|
6
|
+
* than a stock palette — the navy is the console's own #1A589D, the neutral is
|
|
7
|
+
* warmed toward the interior light in the shot, and the logo's red appears
|
|
8
|
+
* exactly once so it still reads as an accent.
|
|
9
|
+
*
|
|
10
|
+
* Type is Barlow throughout, already loaded locally by the app via
|
|
11
|
+
* @fontsource, so there is no webfont request to fail.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
.auth {
|
|
15
|
+
/* Local aliases only — every brand value comes from the consuming app's
|
|
16
|
+
token layer so this library stays reusable. The fallbacks are neutral
|
|
17
|
+
on purpose: a project that defines nothing gets a plain, working sign
|
|
18
|
+
in rather than Prime's colours. */
|
|
19
|
+
--ink: var(--header-color, #10192a);
|
|
20
|
+
--navy: var(--primary-color, #26364a);
|
|
21
|
+
--navy-deep: var(--primary-color-darker, #16202e);
|
|
22
|
+
--flag: var(--accent-color, #8a8f98);
|
|
23
|
+
--paper: var(--surface-color, #ffffff);
|
|
24
|
+
--warm: var(--hover-color, #f4f4f2);
|
|
25
|
+
--line: var(--border-color, #e4e1dc);
|
|
26
|
+
--muted: var(--muted-color, #6b7688);
|
|
6
27
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
28
|
+
position: fixed;
|
|
29
|
+
inset: 0;
|
|
30
|
+
display: grid;
|
|
31
|
+
// Asymmetric on purpose. A 50/50 split reads as a template; giving the
|
|
32
|
+
// photograph the larger share makes it the subject and the form the task.
|
|
33
|
+
grid-template-columns: 52fr 48fr;
|
|
34
|
+
background: var(--paper);
|
|
35
|
+
font-family: 'Barlow', system-ui, sans-serif;
|
|
36
|
+
color: var(--ink);
|
|
37
|
+
|
|
38
|
+
@media (max-width: 900px) {
|
|
39
|
+
grid-template-columns: 1fr;
|
|
11
40
|
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* --- Brand panel --------------------------------------------------------- */
|
|
44
|
+
|
|
45
|
+
.brand {
|
|
46
|
+
position: relative;
|
|
47
|
+
background-color: var(--navy-deep);
|
|
48
|
+
background-size: cover;
|
|
49
|
+
background-position: center 62%;
|
|
50
|
+
overflow: hidden;
|
|
12
51
|
|
|
13
|
-
|
|
52
|
+
// A scrim anchored to the bottom-left, where the copy sits — not a flat
|
|
53
|
+
// wash over the whole image, which would dull the dusk light that makes
|
|
54
|
+
// the photograph worth using.
|
|
55
|
+
&::after {
|
|
56
|
+
content: '';
|
|
14
57
|
position: absolute;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
58
|
+
inset: 0;
|
|
59
|
+
background:
|
|
60
|
+
linear-gradient(
|
|
61
|
+
to top,
|
|
62
|
+
rgba(16, 25, 42, 0.92) 0%,
|
|
63
|
+
rgba(16, 25, 42, 0.55) 32%,
|
|
64
|
+
rgba(16, 25, 42, 0.08) 62%
|
|
65
|
+
),
|
|
66
|
+
linear-gradient(
|
|
67
|
+
to right,
|
|
68
|
+
rgba(16, 25, 42, 0.5) 0%,
|
|
69
|
+
rgba(16, 25, 42, 0) 55%
|
|
70
|
+
);
|
|
23
71
|
}
|
|
24
72
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
opacity: 0.8;
|
|
28
|
-
left: 0;
|
|
29
|
-
padding: 19px 13px;
|
|
30
|
-
border-radius: 0.5rem;
|
|
31
|
-
border: 1px solid #e5e7eb;
|
|
32
|
-
box-shadow: none;
|
|
73
|
+
@media (max-width: 900px) {
|
|
74
|
+
display: none;
|
|
33
75
|
}
|
|
76
|
+
}
|
|
34
77
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
78
|
+
.brandInk {
|
|
79
|
+
position: absolute;
|
|
80
|
+
left: clamp(2rem, 4vw, 3.5rem);
|
|
81
|
+
right: clamp(2rem, 4vw, 3.5rem);
|
|
82
|
+
bottom: clamp(2rem, 5vh, 3.5rem);
|
|
83
|
+
z-index: 1;
|
|
84
|
+
color: #fff;
|
|
85
|
+
animation: rise 0.7s cubic-bezier(0.2, 0.7, 0.3, 1) both;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.eyebrow {
|
|
89
|
+
margin: 0 0 0.75rem;
|
|
90
|
+
font-size: 0.72rem;
|
|
91
|
+
font-weight: 700;
|
|
92
|
+
letter-spacing: 0.22em;
|
|
93
|
+
text-transform: uppercase;
|
|
94
|
+
color: rgba(255, 255, 255, 0.75);
|
|
95
|
+
// The single use of the logo's red in the whole screen.
|
|
96
|
+
padding-left: 2.1rem;
|
|
97
|
+
position: relative;
|
|
41
98
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
top:
|
|
99
|
+
&::before {
|
|
100
|
+
content: '';
|
|
101
|
+
position: absolute;
|
|
102
|
+
left: 0;
|
|
103
|
+
top: 50%;
|
|
104
|
+
width: 1.5rem;
|
|
105
|
+
height: 2px;
|
|
106
|
+
background: var(--flag);
|
|
47
107
|
}
|
|
48
108
|
}
|
|
49
109
|
|
|
50
|
-
.
|
|
51
|
-
.
|
|
52
|
-
|
|
53
|
-
|
|
110
|
+
.brandLine {
|
|
111
|
+
margin: 0 0 0.6rem;
|
|
112
|
+
font-size: clamp(2.4rem, 4.2vw, 3.6rem);
|
|
113
|
+
font-weight: 700;
|
|
114
|
+
line-height: 1;
|
|
115
|
+
// Tight tracking at display size — Barlow opens up as it scales.
|
|
116
|
+
letter-spacing: -0.02em;
|
|
117
|
+
text-wrap: balance;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.brandSub {
|
|
121
|
+
margin: 0;
|
|
122
|
+
max-width: 34ch;
|
|
123
|
+
font-size: 1rem;
|
|
124
|
+
font-weight: 300;
|
|
125
|
+
line-height: 1.5;
|
|
126
|
+
color: rgba(255, 255, 255, 0.82);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* --- Form panel ---------------------------------------------------------- */
|
|
130
|
+
|
|
131
|
+
.panel {
|
|
132
|
+
display: flex;
|
|
133
|
+
align-items: center;
|
|
134
|
+
justify-content: center;
|
|
135
|
+
padding: 2rem clamp(1.5rem, 5vw, 4.5rem);
|
|
136
|
+
background: var(--paper);
|
|
137
|
+
overflow-y: auto;
|
|
138
|
+
|
|
139
|
+
@media (max-width: 900px) {
|
|
140
|
+
// Stacked, the warm neutral stops the screen being a blank white sheet.
|
|
141
|
+
background:
|
|
142
|
+
linear-gradient(var(--warm), var(--paper) 22rem);
|
|
143
|
+
}
|
|
54
144
|
}
|
|
55
145
|
|
|
56
|
-
.
|
|
146
|
+
.panelInner {
|
|
57
147
|
width: 100%;
|
|
148
|
+
max-width: 24rem;
|
|
149
|
+
// Left aligned, not centred. Centred text over a form is a template look,
|
|
150
|
+
// and the eye has to travel back and forth to read labels and fields.
|
|
151
|
+
text-align: left;
|
|
152
|
+
animation: rise 0.55s cubic-bezier(0.2, 0.7, 0.3, 1) both;
|
|
153
|
+
animation-delay: 0.08s;
|
|
58
154
|
}
|
|
59
155
|
|
|
60
|
-
.
|
|
156
|
+
.logo {
|
|
61
157
|
display: block;
|
|
62
|
-
width:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
margin: 0 auto;
|
|
66
|
-
padding-bottom: 1.5rem;
|
|
158
|
+
width: auto;
|
|
159
|
+
height: 3.1rem;
|
|
160
|
+
margin-bottom: 2.4rem;
|
|
67
161
|
}
|
|
68
162
|
|
|
69
|
-
.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
background-color: #f9fafb;
|
|
163
|
+
.title {
|
|
164
|
+
margin: 0 0 0.35rem;
|
|
165
|
+
font-size: 1.9rem;
|
|
166
|
+
font-weight: 700;
|
|
167
|
+
letter-spacing: -0.02em;
|
|
168
|
+
line-height: 1.1;
|
|
76
169
|
}
|
|
77
170
|
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
width: 18px;
|
|
96
|
-
height: 18px;
|
|
97
|
-
right: 14px;
|
|
98
|
-
top: 14px;
|
|
99
|
-
opacity: 0.4;
|
|
100
|
-
color: #6b7280;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
171
|
+
.subtitle {
|
|
172
|
+
margin: 0 0 2rem;
|
|
173
|
+
font-size: 0.95rem;
|
|
174
|
+
font-weight: 400;
|
|
175
|
+
color: var(--muted);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.form {
|
|
179
|
+
display: flex;
|
|
180
|
+
flex-direction: column;
|
|
181
|
+
gap: 0.9rem;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* Floating label. The label sits in the field until it holds something, so
|
|
185
|
+
the field is self-describing without a separate line of text above it. */
|
|
186
|
+
.field {
|
|
187
|
+
position: relative;
|
|
103
188
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
189
|
+
input {
|
|
190
|
+
width: 100%;
|
|
191
|
+
height: 3.35rem;
|
|
192
|
+
padding: 1.15rem 0.9rem 0.4rem;
|
|
193
|
+
border: 1px solid var(--line);
|
|
194
|
+
border-radius: 0.6rem;
|
|
195
|
+
background: var(--paper);
|
|
196
|
+
font-family: inherit;
|
|
197
|
+
font-size: 1rem;
|
|
198
|
+
color: var(--ink);
|
|
199
|
+
transition:
|
|
200
|
+
border-color 0.15s ease,
|
|
201
|
+
box-shadow 0.15s ease;
|
|
107
202
|
|
|
108
|
-
|
|
109
|
-
|
|
203
|
+
&:hover {
|
|
204
|
+
border-color: #c9c5be;
|
|
110
205
|
}
|
|
111
206
|
|
|
112
|
-
|
|
113
|
-
|
|
207
|
+
&:focus {
|
|
208
|
+
outline: none;
|
|
209
|
+
border-color: var(--navy);
|
|
210
|
+
// A ring rather than a thicker border, so nothing shifts on focus.
|
|
211
|
+
box-shadow: 0 0 0 3px var(--focus-ring-soft, rgba(38, 54, 74, 0.16));
|
|
114
212
|
}
|
|
115
213
|
}
|
|
214
|
+
|
|
215
|
+
label {
|
|
216
|
+
position: absolute;
|
|
217
|
+
left: 0.95rem;
|
|
218
|
+
top: 1.05rem;
|
|
219
|
+
font-size: 1rem;
|
|
220
|
+
font-weight: 400;
|
|
221
|
+
color: var(--muted);
|
|
222
|
+
pointer-events: none;
|
|
223
|
+
transition:
|
|
224
|
+
transform 0.14s ease,
|
|
225
|
+
font-size 0.14s ease,
|
|
226
|
+
color 0.14s ease;
|
|
227
|
+
transform-origin: 0 0;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// :not(:placeholder-shown) is why every input carries placeholder=" ".
|
|
231
|
+
input:focus + label,
|
|
232
|
+
input:not(:placeholder-shown) + label {
|
|
233
|
+
transform: translateY(-0.72rem);
|
|
234
|
+
font-size: 0.72rem;
|
|
235
|
+
font-weight: 600;
|
|
236
|
+
letter-spacing: 0.02em;
|
|
237
|
+
color: var(--navy);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Room for the reveal button so long values do not run underneath it.
|
|
241
|
+
&:has(.reveal) input {
|
|
242
|
+
padding-right: 3rem;
|
|
243
|
+
}
|
|
116
244
|
}
|
|
117
245
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
color: #
|
|
122
|
-
|
|
123
|
-
|
|
246
|
+
/* Set imperatively by the login handler on a failed attempt, so it is a plain
|
|
247
|
+
global class rather than a module one. */
|
|
248
|
+
:global(.inputError) {
|
|
249
|
+
border-color: var(--danger-color, #b3261e) !important;
|
|
250
|
+
box-shadow: 0 0 0 3px var(--danger-ring, rgba(179, 38, 30, 0.14)) !important;
|
|
251
|
+
}
|
|
124
252
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
253
|
+
.reveal {
|
|
254
|
+
position: absolute;
|
|
255
|
+
right: 0.55rem;
|
|
256
|
+
top: 50%;
|
|
257
|
+
transform: translateY(-50%);
|
|
258
|
+
display: flex;
|
|
259
|
+
align-items: center;
|
|
260
|
+
justify-content: center;
|
|
261
|
+
width: 2.1rem;
|
|
262
|
+
height: 2.1rem;
|
|
263
|
+
border: none;
|
|
264
|
+
border-radius: 0.4rem;
|
|
265
|
+
background: none;
|
|
266
|
+
color: var(--muted);
|
|
267
|
+
cursor: pointer;
|
|
129
268
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
269
|
+
&:hover {
|
|
270
|
+
background: var(--warm);
|
|
271
|
+
color: var(--ink);
|
|
133
272
|
}
|
|
134
273
|
}
|
|
135
274
|
|
|
136
|
-
.
|
|
275
|
+
.row {
|
|
137
276
|
display: flex;
|
|
138
277
|
align-items: center;
|
|
139
278
|
justify-content: space-between;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
box-sizing: border-box;
|
|
143
|
-
margin-top: -0.5rem;
|
|
279
|
+
gap: 1rem;
|
|
280
|
+
margin: 0.1rem 0 0.5rem;
|
|
144
281
|
}
|
|
145
282
|
|
|
146
|
-
.
|
|
283
|
+
.remember {
|
|
147
284
|
display: flex;
|
|
148
285
|
align-items: center;
|
|
149
|
-
|
|
150
|
-
|
|
286
|
+
gap: 0.5rem;
|
|
287
|
+
font-size: 0.88rem;
|
|
288
|
+
color: var(--muted);
|
|
289
|
+
cursor: pointer;
|
|
290
|
+
|
|
291
|
+
input {
|
|
292
|
+
width: 1rem;
|
|
293
|
+
height: 1rem;
|
|
294
|
+
accent-color: var(--navy);
|
|
295
|
+
cursor: pointer;
|
|
296
|
+
}
|
|
151
297
|
}
|
|
152
298
|
|
|
153
|
-
.
|
|
299
|
+
.link {
|
|
300
|
+
font-size: 0.88rem;
|
|
301
|
+
font-weight: 600;
|
|
302
|
+
color: var(--navy);
|
|
303
|
+
text-decoration: none;
|
|
304
|
+
|
|
305
|
+
&:hover {
|
|
306
|
+
text-decoration: underline;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/* Secondary. Microsoft is the primary action above, so this is outlined —
|
|
311
|
+
two filled buttons on one screen give no answer to "which one". */
|
|
312
|
+
.submit {
|
|
313
|
+
width: 100%;
|
|
314
|
+
height: 3.1rem;
|
|
315
|
+
border: 1px solid var(--line);
|
|
316
|
+
border-radius: 0.6rem;
|
|
317
|
+
background: var(--paper);
|
|
318
|
+
color: var(--ink);
|
|
319
|
+
font-family: inherit;
|
|
320
|
+
font-size: 0.95rem;
|
|
321
|
+
font-weight: 600;
|
|
322
|
+
letter-spacing: 0.01em;
|
|
154
323
|
cursor: pointer;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
324
|
+
transition:
|
|
325
|
+
border-color 0.15s ease,
|
|
326
|
+
background 0.15s ease,
|
|
327
|
+
transform 0.08s ease;
|
|
328
|
+
|
|
329
|
+
&:hover:not(:disabled) {
|
|
330
|
+
border-color: #c9c5be;
|
|
331
|
+
background: var(--warm);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
&:active:not(:disabled) {
|
|
335
|
+
transform: translateY(1px);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
&:focus-visible {
|
|
339
|
+
outline: 3px solid var(--focus-ring-strong, rgba(38, 54, 74, 0.3));
|
|
340
|
+
outline-offset: 2px;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
&:disabled {
|
|
344
|
+
opacity: 0.65;
|
|
345
|
+
cursor: default;
|
|
346
|
+
}
|
|
159
347
|
}
|
|
160
348
|
|
|
161
|
-
.
|
|
162
|
-
|
|
163
|
-
|
|
349
|
+
/* A quiet way down to the secondary path. Not a link — it performs an action
|
|
350
|
+
on this page rather than navigating anywhere. */
|
|
351
|
+
.altToggle {
|
|
352
|
+
display: block;
|
|
353
|
+
width: 100%;
|
|
354
|
+
margin-top: 1rem;
|
|
355
|
+
padding: 0.6rem;
|
|
356
|
+
border: none;
|
|
357
|
+
border-radius: 0.5rem;
|
|
358
|
+
background: none;
|
|
359
|
+
font-family: inherit;
|
|
360
|
+
font-size: 0.9rem;
|
|
361
|
+
font-weight: 600;
|
|
362
|
+
color: var(--navy);
|
|
164
363
|
cursor: pointer;
|
|
165
|
-
position: relative;
|
|
166
|
-
accent-color: var(--primary-color, #4f46e5);
|
|
167
|
-
border-radius: 0.25rem;
|
|
168
|
-
margin-right: 0.5rem;
|
|
169
364
|
|
|
170
365
|
&:hover {
|
|
171
|
-
|
|
366
|
+
background: var(--warm);
|
|
172
367
|
}
|
|
173
368
|
|
|
174
|
-
&:focus {
|
|
175
|
-
outline:
|
|
369
|
+
&:focus-visible {
|
|
370
|
+
outline: 3px solid var(--focus-ring-strong, rgba(38, 54, 74, 0.3));
|
|
176
371
|
outline-offset: 2px;
|
|
177
372
|
}
|
|
178
373
|
}
|
|
179
374
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
375
|
+
/* Animates 0fr -> 1fr, so it opens to whatever height the form needs rather
|
|
376
|
+
than a hardcoded max-height that would either clip or overshoot. */
|
|
377
|
+
.collapse {
|
|
378
|
+
display: grid;
|
|
379
|
+
grid-template-rows: 0fr;
|
|
380
|
+
opacity: 0;
|
|
381
|
+
transition:
|
|
382
|
+
grid-template-rows 0.28s cubic-bezier(0.2, 0.7, 0.3, 1),
|
|
383
|
+
opacity 0.22s ease;
|
|
186
384
|
}
|
|
187
385
|
|
|
188
|
-
.
|
|
189
|
-
|
|
190
|
-
|
|
386
|
+
.collapseInner {
|
|
387
|
+
// Required for the row to be able to collapse to nothing.
|
|
388
|
+
overflow: hidden;
|
|
389
|
+
min-height: 0;
|
|
191
390
|
}
|
|
192
391
|
|
|
193
|
-
.
|
|
392
|
+
.collapseOpen {
|
|
393
|
+
grid-template-rows: 1fr;
|
|
194
394
|
opacity: 1;
|
|
195
|
-
position: fixed;
|
|
196
|
-
overflow: hidden;
|
|
197
|
-
height: 101%;
|
|
198
|
-
width: var(--sidebar-width);
|
|
199
395
|
}
|
|
200
396
|
|
|
201
|
-
.
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
397
|
+
.divider {
|
|
398
|
+
display: flex;
|
|
399
|
+
align-items: center;
|
|
400
|
+
gap: 0.9rem;
|
|
401
|
+
margin: 1.4rem 0;
|
|
402
|
+
color: var(--muted);
|
|
403
|
+
font-size: 0.78rem;
|
|
404
|
+
letter-spacing: 0.08em;
|
|
405
|
+
text-transform: uppercase;
|
|
406
|
+
|
|
407
|
+
&::before,
|
|
408
|
+
&::after {
|
|
409
|
+
content: '';
|
|
410
|
+
flex: 1;
|
|
411
|
+
height: 1px;
|
|
412
|
+
background: var(--line);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/* Primary. This is how Prime staff actually sign in, so it carries the fill
|
|
417
|
+
and sits above the fold of the form. */
|
|
418
|
+
.sso {
|
|
419
|
+
display: flex;
|
|
420
|
+
align-items: center;
|
|
421
|
+
justify-content: center;
|
|
422
|
+
gap: 0.65rem;
|
|
423
|
+
width: 100%;
|
|
424
|
+
height: 3.4rem;
|
|
425
|
+
border: none;
|
|
426
|
+
border-radius: 0.6rem;
|
|
427
|
+
background: var(--navy);
|
|
428
|
+
font-family: inherit;
|
|
429
|
+
font-size: 1rem;
|
|
430
|
+
font-weight: 600;
|
|
431
|
+
color: #fff;
|
|
206
432
|
cursor: pointer;
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
text-decoration: none;
|
|
211
|
-
overflow: hidden;
|
|
212
|
-
background: var(--primary-color, #4f46e5);
|
|
213
|
-
border: 1px solid var(--primary-color, #4f46e5);
|
|
214
|
-
border-radius: 0.5rem;
|
|
215
|
-
outline: none;
|
|
216
|
-
transition: all 0.2s ease;
|
|
217
|
-
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
433
|
+
transition:
|
|
434
|
+
background 0.15s ease,
|
|
435
|
+
transform 0.08s ease;
|
|
218
436
|
|
|
219
437
|
&:hover {
|
|
220
|
-
background: var(--
|
|
221
|
-
border-color: var(--secondary-color, #3cbf7d);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
&:focus {
|
|
225
|
-
box-shadow: 0 0 0 2px rgba(var(--secondary-rgb, 60, 191, 125), 0.25);
|
|
438
|
+
background: var(--navy-deep);
|
|
226
439
|
}
|
|
227
|
-
}
|
|
228
440
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
.logincontainer,
|
|
232
|
-
.lcontainer {
|
|
233
|
-
/* Input, textarea, and select styling */
|
|
234
|
-
input:not(:placeholder-shown) + .fi__span,
|
|
235
|
-
textarea:not(:placeholder-shown) + .fi__span,
|
|
236
|
-
select:not(:placeholder-shown) + .fi__span {
|
|
237
|
-
transform: translateY(-135%) translateX(10px) scale(0.85);
|
|
238
|
-
opacity: 1;
|
|
239
|
-
padding: 0;
|
|
240
|
-
background: white;
|
|
241
|
-
font-weight: 500;
|
|
242
|
-
transition: all 0.3s ease;
|
|
243
|
-
color: var(--primary-color, #4f46e5) !important;
|
|
441
|
+
&:active {
|
|
442
|
+
transform: translateY(1px);
|
|
244
443
|
}
|
|
245
444
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
color: var(--primary-color, #4f46e5) !important;
|
|
445
|
+
&:focus-visible {
|
|
446
|
+
outline: 3px solid var(--focus-ring-strong, rgba(38, 54, 74, 0.3));
|
|
447
|
+
outline-offset: 2px;
|
|
250
448
|
}
|
|
449
|
+
}
|
|
251
450
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
451
|
+
/* The Microsoft squares are drawn for a white ground, so they keep one
|
|
452
|
+
instead of sitting straight on the navy. */
|
|
453
|
+
.ssoMark {
|
|
454
|
+
display: flex;
|
|
455
|
+
align-items: center;
|
|
456
|
+
justify-content: center;
|
|
457
|
+
width: 1.65rem;
|
|
458
|
+
height: 1.65rem;
|
|
459
|
+
border-radius: 0.3rem;
|
|
460
|
+
background: #fff;
|
|
461
|
+
flex: none;
|
|
462
|
+
}
|
|
259
463
|
|
|
260
|
-
|
|
261
|
-
.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
margin: 1rem 0;
|
|
266
|
-
color: #9ca3af;
|
|
267
|
-
font-size: 0.875rem;
|
|
268
|
-
}
|
|
464
|
+
.foot {
|
|
465
|
+
margin: 2.5rem 0 0;
|
|
466
|
+
font-size: 0.78rem;
|
|
467
|
+
color: var(--muted);
|
|
468
|
+
}
|
|
269
469
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
470
|
+
/* One entrance, staggered between the two panels. Anything more would be
|
|
471
|
+
decoration on a screen people pass through several times a day. */
|
|
472
|
+
@keyframes rise {
|
|
473
|
+
from {
|
|
474
|
+
opacity: 0;
|
|
475
|
+
transform: translateY(0.75rem);
|
|
275
476
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
477
|
+
to {
|
|
478
|
+
opacity: 1;
|
|
479
|
+
transform: none;
|
|
279
480
|
}
|
|
481
|
+
}
|
|
280
482
|
|
|
281
|
-
|
|
282
|
-
|
|
483
|
+
@media (prefers-reduced-motion: reduce) {
|
|
484
|
+
.brandInk,
|
|
485
|
+
.panelInner {
|
|
486
|
+
animation: none;
|
|
283
487
|
}
|
|
284
488
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
display: flex;
|
|
288
|
-
align-items: center;
|
|
289
|
-
justify-content: center;
|
|
290
|
-
width: 100%;
|
|
291
|
-
padding: 0.75rem 1rem;
|
|
292
|
-
background-color: white;
|
|
293
|
-
border: 1px solid #e5e7eb;
|
|
294
|
-
border-radius: 0.5rem;
|
|
295
|
-
font-size: 0.875rem;
|
|
296
|
-
font-weight: 500;
|
|
297
|
-
color: #374151;
|
|
298
|
-
transition: all 0.2s ease;
|
|
299
|
-
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
300
|
-
|
|
301
|
-
&:hover {
|
|
302
|
-
background-color: var(--bg-color, #f5f3ef);
|
|
303
|
-
border-color: var(--border-color, #e1e1e1);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
img {
|
|
307
|
-
margin-right: 0.5rem;
|
|
308
|
-
}
|
|
489
|
+
.collapse {
|
|
490
|
+
transition: none;
|
|
309
491
|
}
|
|
310
492
|
|
|
311
|
-
.
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
&:focus {
|
|
318
|
-
outline: 2px solid rgba(var(--primary-rgb), 0.25) !important;
|
|
319
|
-
outline-offset: 2px !important;
|
|
320
|
-
}
|
|
493
|
+
.submit,
|
|
494
|
+
.field input,
|
|
495
|
+
.field label {
|
|
496
|
+
transition: none;
|
|
321
497
|
}
|
|
322
498
|
}
|