pr360-questionnaire 2.1.11 → 2.3.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/css/app.scss CHANGED
@@ -19,6 +19,9 @@
19
19
  @import './components/grid';
20
20
  @import './components/questionnaire';
21
21
  @import './components/site-rules';
22
+ @import './components/network-live';
23
+ @import './components/dropdown';
24
+ @import './components/booking';
22
25
 
23
26
  // Imported last to take precedence in the cascade
24
27
  @import './base/utilities';
@@ -9,30 +9,84 @@ body {
9
9
  header,
10
10
  .header {
11
11
  display: grid;
12
- gap: $space-sm;
13
- align-items: end;
14
- grid-template-columns: 1fr auto auto auto auto auto;
12
+ gap: $space-xs;
13
+ grid-template-columns: auto 1fr;
14
+ grid-template-areas: "logo nav";
15
15
  font-size: $small-font-size;
16
16
  padding: $space-sm $space-md;
17
17
  margin-bottom: $space-md;
18
18
  background-color: $white;
19
19
  box-shadow: 5px 5px 20px 3px rgba(131, 131, 131, 0.198);
20
20
 
21
+ .logo {
22
+ grid-area: logo;
23
+ font-weight: bold;
24
+ align-self: center;
25
+ margin: 0;
26
+ }
27
+
28
+ .main-nav {
29
+ grid-area: nav;
30
+ display: flex;
31
+ gap: $space-lg;
32
+ align-items: center;
33
+ justify-content: flex-end;
34
+
35
+ a {
36
+ white-space: nowrap;
37
+ }
38
+ }
39
+
40
+ // User menu dropdown styling in nav bar
41
+ .user-menu-dropdown {
42
+ .dropdown__toggle {
43
+ background-color: transparent;
44
+ border: 1px solid $gray-lighter;
45
+ font-size: 0.8125rem;
46
+ font-weight: 600;
47
+ color: $gray-dark;
48
+ padding: $space-xs $space-sm;
49
+
50
+ &:hover {
51
+ background-color: $gray-lightest;
52
+ border-color: $gray-light;
53
+ }
54
+ }
55
+
56
+ .dropdown__menu {
57
+ min-width: 200px;
58
+ }
59
+ }
60
+
21
61
  @media screen and (max-width: $screen-tablet) {
22
- grid-template-columns: auto auto auto auto 1fr;
62
+ grid-template-columns: 1fr;
23
63
  grid-template-rows: auto auto;
24
- grid-template-areas: "logo settings"
25
- "nav nav";
64
+ grid-template-areas:
65
+ "logo"
66
+ "nav";
26
67
 
27
- nav {
28
- grid-area: nav;
68
+ .logo {
69
+ text-align: center;
29
70
  margin-bottom: $space-xs;
30
71
  }
31
72
 
32
- .logo {grid-area: logo;}
73
+ .main-nav {
74
+ justify-content: center;
75
+ flex-wrap: wrap;
76
+ }
77
+ }
33
78
 
34
- .user-links {grid-area: settings;}
79
+ // Public header variant (no navigation)
80
+ &--public {
81
+ display: flex;
82
+ justify-content: center;
83
+ padding: $space-md;
35
84
 
85
+ .logo {
86
+ text-align: center;
87
+ font-size: 1.25rem;
88
+ color: $color-primary;
89
+ }
36
90
  }
37
91
  }
38
92
 
@@ -0,0 +1,449 @@
1
+ // Booking Page - matches questionnaire styling
2
+ // Colors from questionnaire.lit.scss
3
+ $booking-primary: #3B6A8B;
4
+ $booking-bg: #F0F5F7;
5
+ $booking-white: #FFFFFF;
6
+ $booking-gray: rgb(132, 132, 132);
7
+ $booking-border: #8c8c8c;
8
+ $booking-hover: #D6E2E5;
9
+ $booking-light: #EDF3F4;
10
+
11
+ .booking-page {
12
+ background-color: $booking-bg;
13
+ min-height: 100vh;
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: flex-start;
17
+ padding: 55px 20px;
18
+ font-family: 'Lato', Helvetica, sans-serif;
19
+ }
20
+
21
+ .booking-card {
22
+ width: 45vw;
23
+ min-height: 55vh;
24
+ background-color: $booking-white;
25
+ padding: 50px;
26
+ border-radius: 45px;
27
+ box-shadow: 7px 7px 5px 0px rgba(0, 0, 0, 0.1);
28
+ position: relative;
29
+
30
+ @media screen and (max-width: 1210px) {
31
+ width: 55vw;
32
+ }
33
+
34
+ @media screen and (max-width: 900px) {
35
+ width: 75vw;
36
+ padding: 30px;
37
+ }
38
+
39
+ @media screen and (max-width: 600px) {
40
+ width: 90vw;
41
+ padding: 25px 20px;
42
+ border-radius: 25px;
43
+ }
44
+
45
+ h1 {
46
+ font-size: 1.5rem;
47
+ font-weight: 700;
48
+ color: rgba(24, 24, 24, 0.88);
49
+ text-align: center;
50
+ margin: 0 0 5px;
51
+ }
52
+
53
+ h2 {
54
+ font-weight: 400;
55
+ margin: 0;
56
+ font-size: 1rem;
57
+ line-height: 1.2rem;
58
+ color: $booking-primary;
59
+ text-align: center;
60
+ }
61
+
62
+ h3 {
63
+ font-weight: 600;
64
+ font-size: 1rem;
65
+ color: rgba(24, 24, 24, 0.88);
66
+ margin: 0 0 10px;
67
+ }
68
+ }
69
+
70
+ .booking-subtitle {
71
+ font-size: 0.9rem;
72
+ color: $booking-gray;
73
+ text-align: center;
74
+ margin: 8px 0 25px;
75
+ }
76
+
77
+ // Navigation buttons
78
+ .booking-nav {
79
+ display: flex;
80
+ justify-content: space-between;
81
+ margin-bottom: 20px;
82
+ }
83
+
84
+ .booking-nav-btn {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 6px;
88
+ background: transparent;
89
+ border: none;
90
+ color: $booking-primary;
91
+ font-family: 'Lato', Helvetica, sans-serif;
92
+ font-size: 0.875rem;
93
+ font-weight: 400;
94
+ cursor: pointer;
95
+ padding: 8px 12px;
96
+ border-radius: 5px;
97
+ transition: background-color 0.2s ease;
98
+
99
+ &:hover {
100
+ background-color: $booking-light;
101
+ }
102
+
103
+ svg {
104
+ width: 16px;
105
+ height: 16px;
106
+ }
107
+ }
108
+
109
+ .booking-nav-spacer {
110
+ width: 80px;
111
+ }
112
+
113
+ // Days list
114
+ .booking-days {
115
+ display: flex;
116
+ flex-direction: column;
117
+ gap: 12px;
118
+ }
119
+
120
+ .booking-day {
121
+ border: 1px solid $booking-border;
122
+ border-radius: 5px;
123
+ overflow: hidden;
124
+ transition: border-color 0.2s ease;
125
+
126
+ &.expanded {
127
+ border-color: $booking-primary;
128
+ }
129
+ }
130
+
131
+ .booking-day-header {
132
+ display: flex;
133
+ justify-content: space-between;
134
+ align-items: center;
135
+ width: 100%;
136
+ padding: 15px 20px;
137
+ background: $booking-white;
138
+ border: none;
139
+ cursor: pointer;
140
+ font-family: 'Lato', Helvetica, sans-serif;
141
+ transition: background-color 0.2s ease;
142
+
143
+ &:hover {
144
+ background-color: $booking-light;
145
+ }
146
+
147
+ .expanded & {
148
+ background-color: $booking-light;
149
+ border-bottom: 1px solid $booking-border;
150
+ }
151
+ }
152
+
153
+ .booking-day-info {
154
+ display: flex;
155
+ flex-direction: column;
156
+ align-items: flex-start;
157
+ gap: 2px;
158
+ }
159
+
160
+ .booking-day-name {
161
+ font-size: 1rem;
162
+ font-weight: 600;
163
+ color: rgba(24, 24, 24, 0.88);
164
+ }
165
+
166
+ .booking-day-date {
167
+ font-size: 0.875rem;
168
+ color: $booking-gray;
169
+ }
170
+
171
+ .booking-day-count {
172
+ font-size: 0.875rem;
173
+ color: $booking-primary;
174
+ font-weight: 400;
175
+ }
176
+
177
+ // Slots container
178
+ .booking-day-slots {
179
+ display: none;
180
+ padding: 15px 20px;
181
+ background: $booking-light;
182
+ flex-wrap: wrap;
183
+ gap: 10px;
184
+
185
+ .expanded & {
186
+ display: flex;
187
+ }
188
+ }
189
+
190
+ .booking-slot {
191
+ font-family: 'Lato', Helvetica, sans-serif;
192
+ font-size: 0.9rem;
193
+ font-weight: 400;
194
+ padding: 10px 18px;
195
+ background: $booking-white;
196
+ border: 1px solid $booking-border;
197
+ border-radius: 5px;
198
+ cursor: pointer;
199
+ transition: all 0.2s ease;
200
+ color: rgba(24, 24, 24, 0.88);
201
+
202
+ &:hover {
203
+ border-color: $booking-primary;
204
+ background-color: $booking-white;
205
+ }
206
+
207
+ &.selected {
208
+ background-color: $booking-primary;
209
+ border-color: $booking-primary;
210
+ color: $booking-white;
211
+ }
212
+ }
213
+
214
+ .booking-slot-duration {
215
+ color: $booking-gray;
216
+ font-size: 0.8rem;
217
+
218
+ .selected & {
219
+ color: rgba(255, 255, 255, 0.8);
220
+ }
221
+ }
222
+
223
+ // Empty state
224
+ .booking-empty {
225
+ text-align: center;
226
+ padding: 40px 20px;
227
+
228
+ p {
229
+ font-size: 1rem;
230
+ color: $booking-gray;
231
+ margin-bottom: 20px;
232
+ }
233
+ }
234
+
235
+ // Actions
236
+ .booking-actions {
237
+ margin-top: 30px;
238
+ display: flex;
239
+ flex-direction: column;
240
+ align-items: center;
241
+ }
242
+
243
+ .booking-selection-summary {
244
+ font-size: 0.875rem;
245
+ color: $booking-primary;
246
+ margin-top: 10px;
247
+ text-align: center;
248
+ }
249
+
250
+ // Buttons matching questionnaire style
251
+ .booking-page .button {
252
+ font-family: sofia-pro, SofiaProWeb, Helvetica, Arial, sans-serif;
253
+ background-color: $booking-light;
254
+ border-radius: 0.5rem;
255
+ color: $booking-primary;
256
+ font-size: 1rem;
257
+ font-weight: 300;
258
+ transition: transform 150ms, background-color 150ms;
259
+ padding: 10px 35px;
260
+ min-width: 150px;
261
+ width: 25vw;
262
+ min-height: 55px;
263
+ border: unset;
264
+ cursor: pointer;
265
+
266
+ @media screen and (max-width: 1210px) {
267
+ width: 35vw;
268
+ }
269
+
270
+ @media screen and (max-width: 700px) {
271
+ width: 60vw;
272
+ }
273
+
274
+ &:hover:not(:disabled) {
275
+ background-color: $booking-hover;
276
+ }
277
+
278
+ &--primary {
279
+ background-color: $booking-primary;
280
+ color: $booking-white;
281
+
282
+ &:hover:not(:disabled) {
283
+ background-color: darken($booking-primary, 8%);
284
+ }
285
+ }
286
+
287
+ &--disabled {
288
+ opacity: 0.5;
289
+ cursor: not-allowed;
290
+ }
291
+ }
292
+
293
+ // Modal styling
294
+ .booking-confirm-modal {
295
+ text-align: center;
296
+ padding: 20px 0;
297
+
298
+ h1 {
299
+ font-size: 1.5rem;
300
+ font-weight: 700;
301
+ color: rgba(24, 24, 24, 0.88);
302
+ margin: 0 0 5px;
303
+ }
304
+
305
+ h2 {
306
+ font-weight: 400;
307
+ margin: 0 0 25px;
308
+ font-size: 1rem;
309
+ color: $booking-primary;
310
+ }
311
+ }
312
+
313
+ .booking-confirm-details {
314
+ background: $booking-light;
315
+ border-radius: 10px;
316
+ padding: 20px 25px;
317
+ margin-bottom: 25px;
318
+ }
319
+
320
+ .booking-confirm-row {
321
+ display: flex;
322
+ justify-content: space-between;
323
+ padding: 10px 0;
324
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
325
+
326
+ &:last-child {
327
+ border-bottom: none;
328
+ }
329
+ }
330
+
331
+ .booking-confirm-label {
332
+ font-size: 0.875rem;
333
+ color: $booking-gray;
334
+ }
335
+
336
+ .booking-confirm-value {
337
+ font-size: 0.875rem;
338
+ font-weight: 600;
339
+ color: rgba(24, 24, 24, 0.88);
340
+ }
341
+
342
+ .booking-confirm-actions {
343
+ display: flex;
344
+ justify-content: center;
345
+ gap: 15px;
346
+
347
+ .button {
348
+ width: auto;
349
+ min-width: 120px;
350
+ }
351
+ }
352
+
353
+ // Confirmation page (show)
354
+ .booking-card--confirmed {
355
+ text-align: center;
356
+
357
+ .booking-confirm-details {
358
+ text-align: left;
359
+ margin: 25px 0;
360
+ }
361
+ }
362
+
363
+ .booking-success-icon {
364
+ width: 80px;
365
+ height: 80px;
366
+ margin: 0 auto 20px;
367
+ color: #22c55e;
368
+
369
+ svg {
370
+ width: 100%;
371
+ height: 100%;
372
+ }
373
+ }
374
+
375
+ .booking-next-steps {
376
+ background: $booking-light;
377
+ border-radius: 10px;
378
+ padding: 25px;
379
+ margin-top: 25px;
380
+ text-align: left;
381
+
382
+ h3 {
383
+ margin-bottom: 15px;
384
+ }
385
+
386
+ p {
387
+ font-size: 0.9rem;
388
+ line-height: 1.6;
389
+ color: $booking-gray;
390
+ margin: 0 0 12px;
391
+
392
+ &:last-child {
393
+ margin-bottom: 0;
394
+ }
395
+ }
396
+ }
397
+
398
+ // Info icon for existing appointments
399
+ .booking-info-icon {
400
+ width: 80px;
401
+ height: 80px;
402
+ margin: 0 auto 20px;
403
+ color: $booking-primary;
404
+
405
+ svg {
406
+ width: 100%;
407
+ height: 100%;
408
+ }
409
+ }
410
+
411
+ // Contact information section
412
+ .booking-contact-info {
413
+ background: $booking-white;
414
+ border: 1px solid $booking-border;
415
+ border-radius: 8px;
416
+ padding: 15px 20px;
417
+ margin: 15px 0;
418
+ }
419
+
420
+ .booking-contact-row {
421
+ display: flex;
422
+ align-items: center;
423
+ gap: 12px;
424
+ padding: 8px 0;
425
+ font-size: 0.9rem;
426
+ color: rgba(24, 24, 24, 0.88);
427
+
428
+ &:not(:last-child) {
429
+ border-bottom: 1px solid rgba(0, 0, 0, 0.08);
430
+ }
431
+
432
+ .contact-icon {
433
+ width: 20px;
434
+ height: 20px;
435
+ color: $booking-primary;
436
+ flex-shrink: 0;
437
+ }
438
+
439
+ span {
440
+ font-weight: 500;
441
+ }
442
+ }
443
+
444
+ .booking-contact-note {
445
+ font-size: 0.8rem !important;
446
+ font-style: italic;
447
+ color: $booking-gray;
448
+ margin-top: 15px !important;
449
+ }
@@ -28,5 +28,87 @@ button, .button {
28
28
  background-color: transparent;
29
29
 
30
30
  }
31
+
32
+ &--compact {
33
+ padding: 8px 12px;
34
+ font-size: 14px;
35
+ }
31
36
 
32
- }
37
+ }
38
+
39
+ .toggle-filter {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ gap: 12px;
43
+ padding: 8px 12px;
44
+ border: 1px solid #e5e7eb;
45
+ border-radius: 6px;
46
+ background-color: #f9fafb;
47
+ cursor: pointer;
48
+ transition: background-color 0.15s ease;
49
+
50
+ &:hover {
51
+ background-color: #f3f4f6;
52
+ }
53
+
54
+ &__label {
55
+ font-size: 13px;
56
+ font-weight: 500;
57
+ color: #374151;
58
+ user-select: none;
59
+ }
60
+ }
61
+
62
+ .toggle-switch {
63
+ position: relative;
64
+ width: 44px;
65
+ height: 24px;
66
+ cursor: pointer;
67
+
68
+ input[type="checkbox"] {
69
+ opacity: 0;
70
+ width: 0;
71
+ height: 0;
72
+ position: absolute;
73
+
74
+ &:checked + .toggle-switch__slider {
75
+ background-color: $color-primary;
76
+
77
+ &:before {
78
+ transform: translateX(20px);
79
+ }
80
+ }
81
+ }
82
+
83
+ &__slider {
84
+ position: absolute;
85
+ top: 0;
86
+ left: 0;
87
+ right: 0;
88
+ bottom: 0;
89
+ background-color: #cbd5e1;
90
+ border-radius: 24px;
91
+ transition: all 0.3s ease;
92
+
93
+ &:before {
94
+ content: "";
95
+ position: absolute;
96
+ height: 18px;
97
+ width: 18px;
98
+ left: 3px;
99
+ bottom: 3px;
100
+ background-color: white;
101
+ border-radius: 50%;
102
+ transition: transform 0.3s ease;
103
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
104
+ }
105
+ }
106
+
107
+ &:hover .toggle-switch__slider {
108
+ background-color: #94a3b8;
109
+ }
110
+
111
+ input[type="checkbox"]:checked + .toggle-switch__slider:hover {
112
+ background-color: darken($color-primary, 10%);
113
+ }
114
+ }