optimized-react-component-library-xyz123 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +102 -0
  2. package/package.json +64 -0
  3. package/src/global.css +721 -0
package/README.md ADDED
@@ -0,0 +1,102 @@
1
+
2
+ # ai-optimera-komponentbibliotek
3
+
4
+ Ett modernt, best practice React-komponentbibliotek med TypeScript. Förberett för npm-publicering.
5
+
6
+ ## Funktioner
7
+ - TypeScript
8
+ - ESLint & Prettier
9
+ - Vitest för tester
10
+ - tsup för bundling
11
+ - Exempelkomponenter: `TextInput`, `Checkbox`
12
+ - Klar för npm publish
13
+
14
+
15
+ ## Komponenter
16
+
17
+ ### TextInput
18
+ En standard textinput med props:
19
+ - `value: string` (obligatorisk)
20
+ - `onChange: (event) => void` (obligatorisk)
21
+ - `placeholder?: string`
22
+
23
+ **Exempel:**
24
+ ```tsx
25
+ import { TextInput } from 'ai-optimera-komponentbibliotek';
26
+
27
+ <TextInput value={text} onChange={handleChange} placeholder="Skriv här" />
28
+ ```
29
+
30
+ ### Checkbox
31
+ En standard checkbox med props:
32
+ - `checked: boolean` (obligatorisk)
33
+ - `onChange: (event) => void` (obligatorisk)
34
+ - `label?: string`
35
+
36
+ **Exempel:**
37
+ ```tsx
38
+ import { Checkbox } from 'ai-optimera-komponentbibliotek';
39
+
40
+ <Checkbox checked={isChecked} onChange={handleCheck} label="Godkänn villkor" />
41
+ ```
42
+
43
+ ### TextFieldStandard
44
+ En avancerad textfält-komponent med stöd för validering, preview och extra attribut.
45
+ Props (via `TextFieldStandardProps`):
46
+ - `question: IQuestion` (obligatorisk)
47
+ - `isTouched: (event, question) => void` (obligatorisk)
48
+ - `showPreview?: boolean`
49
+ - `activatedLanguage?: string`
50
+
51
+ **Exempel:**
52
+ ```tsx
53
+ import TextFieldStandard from 'ai-optimera-komponentbibliotek/NewInputComponentStandard/TextFieldStandard/TextFieldStandard';
54
+
55
+ <TextFieldStandard
56
+ question={question}
57
+ isTouched={handleTouched}
58
+ showPreview={false}
59
+ activatedLanguage="sv"
60
+ />
61
+ ```
62
+
63
+ ### TextAreaStandard
64
+ En textarea-komponent med liknande props som TextFieldStandard.
65
+
66
+ **Exempel:**
67
+ ```tsx
68
+ import TextAreaStandard from 'ai-optimera-komponentbibliotek/NewInputComponentStandard/TextAreaStandard/TextAreaStandard';
69
+
70
+ <TextAreaStandard
71
+ question={question}
72
+ isTouched={handleTouched}
73
+ showPreview={false}
74
+ activatedLanguage="sv"
75
+ />
76
+ ```
77
+
78
+ ## Kom igång
79
+
80
+ 1. Installera beroenden:
81
+ ```sh
82
+ npm install
83
+ ```
84
+ 2. Bygg biblioteket:
85
+ ```sh
86
+ npm run build
87
+ ```
88
+ 3. Kör tester:
89
+ ```sh
90
+ npm test
91
+ ```
92
+ 4. Lint och formatera:
93
+ ```sh
94
+ npm run lint
95
+ npm run format
96
+ ```
97
+ 5. Publicera till npm:
98
+ - Uppdatera fält i `package.json` (`name`, `author`, `repository`)
99
+ - Kör:
100
+ ```sh
101
+ npm publish --access public
102
+ ```
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "optimized-react-component-library-xyz123",
3
+ "version": "0.0.1",
4
+ "description": "A modern React component library using TypeScript.",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.mjs",
10
+ "require": "./dist/index.js"
11
+ },
12
+ "./global.css": "./src/global.css"
13
+ },
14
+ "types": "dist/index.d.ts",
15
+ "files": [
16
+ "dist",
17
+ "src/global.css"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsup src/index.tsx --dts --format esm,cjs --out-dir dist",
21
+ "lint": "eslint src --ext .ts,.tsx",
22
+ "format": "prettier --write .",
23
+ "test": "vitest",
24
+ "prepare": "husky install",
25
+ "release": "standard-version"
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/YOUR_USERNAME/ai-optimera-komponentbibliotek.git"
30
+ },
31
+ "keywords": [
32
+ "react",
33
+ "component-library",
34
+ "typescript",
35
+ "npm",
36
+ "boilerplate"
37
+ ],
38
+ "author": "YOUR NAME",
39
+ "license": "MIT",
40
+ "peerDependencies": {
41
+ "react": ">=17.0.0",
42
+ "react-dom": ">=17.0.0"
43
+ },
44
+ "devDependencies": {
45
+ "@testing-library/jest-dom": "^6.8.0",
46
+ "@testing-library/react": "^16.3.0",
47
+ "@types/dompurify": "^3.0.5",
48
+ "@types/react": "^18.0.0",
49
+ "@types/react-dom": "^18.0.0",
50
+ "eslint": "^8.0.0",
51
+ "eslint-config-prettier": "^9.0.0",
52
+ "eslint-plugin-react": "^7.0.0",
53
+ "husky": "^9.0.0",
54
+ "jsdom": "^26.1.0",
55
+ "prettier": "^3.0.0",
56
+ "standard-version": "^9.5.0",
57
+ "tsup": "^8.0.0",
58
+ "typescript": "^5.0.0",
59
+ "vitest": "^1.0.0"
60
+ },
61
+ "dependencies": {
62
+ "dompurify": "^3.2.6"
63
+ }
64
+ }
package/src/global.css ADDED
@@ -0,0 +1,721 @@
1
+ /* Globala stilar för alla komponenter */
2
+ @import url('https://assets.soracom.io/fonts/aeonik/Aeonik.css');
3
+
4
+ /* ---------- GENERAL ---------- */
5
+
6
+ html {
7
+ font-size: 62.5%; /* 1rem = 10px */
8
+ }
9
+
10
+ body {
11
+ margin: 0;
12
+ font-family: Arial;
13
+ font-size: 1.6rem;
14
+ font-weight: 400;
15
+ background-color: #dddddd;
16
+ display: flex;
17
+ flex-direction: column;
18
+ min-height: 100vh;
19
+ }
20
+
21
+ body a {
22
+ text-decoration: underline;
23
+ text-underline-offset: 0.3rem;
24
+
25
+ display: inline-flex;
26
+ align-items: center;
27
+ color: #6e3282;
28
+ }
29
+
30
+ body a:hover {
31
+ text-decoration: underline 0.2rem;
32
+ }
33
+
34
+ h1,
35
+ h2,
36
+ h3 {
37
+ margin: 0;
38
+ margin-bottom: 3.6rem;
39
+ }
40
+
41
+ h1 {
42
+ font-size: 3rem;
43
+ }
44
+
45
+ h2 {
46
+ font-size: 2.4rem;
47
+ width: 100%;
48
+ }
49
+
50
+ h3 {
51
+ font-size: 2rem;
52
+ }
53
+
54
+ h4 {
55
+ margin: 0;
56
+ font-size: 1.6rem;
57
+ }
58
+
59
+ #main-content {
60
+ padding-top: 3.6rem;
61
+ padding-bottom: 6.4rem;
62
+ max-width: 860px;
63
+ margin-left: auto;
64
+ margin-right: auto;
65
+ }
66
+
67
+ section {
68
+ display: flex;
69
+ flex-direction: column;
70
+ background-color: #ffffff;
71
+ padding: 3.6rem;
72
+ margin-bottom: 1.6rem;
73
+ border-radius: 0.4rem;
74
+ margin-left: 0.8rem;
75
+ margin-right: 0.8rem;
76
+ }
77
+
78
+ .pts-first-category-section {
79
+ padding-top: 0;
80
+ border-top-left-radius: 0;
81
+ border-top-right-radius: 0;
82
+ }
83
+
84
+ .pts-form-step-header {
85
+ display: flex;
86
+ flex-direction: column;
87
+ background-color: #ffffff;
88
+ padding: 3.6rem;
89
+ margin-bottom: 0;
90
+ border-radius: 0.4rem;
91
+ margin-left: 0.8rem;
92
+ margin-right: 0.8rem;
93
+ padding-bottom: 0;
94
+ border-bottom-left-radius: 0;
95
+ border-bottom-right-radius: 0;
96
+ }
97
+
98
+ .pts-form-step-header p {
99
+ margin: 0px;
100
+ margin-bottom: 36px;
101
+ }
102
+
103
+ fieldset {
104
+ border: none;
105
+ padding: 0;
106
+ margin: 0;
107
+ }
108
+
109
+ .pts-root-question {
110
+ display: flex;
111
+ flex-direction: column;
112
+ margin-bottom: 1.6rem;
113
+ max-width: 624px;
114
+ }
115
+
116
+ .pts-root-categoryDescription,
117
+ .pts-root-stepDescription {
118
+ margin-bottom: 3.6rem;
119
+ }
120
+
121
+ .pts-root-question legend,
122
+ .pts-root-question label,
123
+ .pts-radio-option {
124
+ margin-bottom: 0.8rem;
125
+ }
126
+
127
+ .pts-root-about {
128
+ font-size: 1.4rem;
129
+ color: #545454;
130
+ margin: 0;
131
+ margin-bottom: 0.4rem;
132
+ }
133
+
134
+ .pts-root-question input[type='text']:focus,
135
+ .pts-root-question input[type='email']:focus,
136
+ .pts-root-question input[type='tel']:focus {
137
+ border: 0.2rem solid #6e3282;
138
+ }
139
+
140
+ .pts-root-error {
141
+ display: flex;
142
+ margin-top: 0.4rem;
143
+ }
144
+
145
+ .errorDot {
146
+ display: flex;
147
+ font-size: 1.6rem;
148
+ font-weight: 700;
149
+ width: 1.8rem;
150
+ height: 1.8rem;
151
+ border-radius: 1rem;
152
+ justify-content: center;
153
+ color: #ffffff;
154
+ background-color: #8e0039;
155
+ margin-right: 9px;
156
+ }
157
+
158
+ .errorText,
159
+ .pts-root-mandatoryAsterisk {
160
+ color: #8e0039;
161
+ }
162
+
163
+ .pts-root-question-input-error-border,
164
+ .pts-root-question-input-error-border,
165
+ .pts-root-question-input-error-border {
166
+ border: 0.2rem solid #8e0039 !important;
167
+ }
168
+
169
+ .sr-only {
170
+ position: absolute;
171
+ width: 1px;
172
+ height: 1px;
173
+ padding: 0;
174
+ margin: -1px;
175
+ overflow: hidden;
176
+ clip: rect(0, 0, 0, 0);
177
+ white-space: nowrap;
178
+ border: 0;
179
+ }
180
+
181
+ button:focus-visible,
182
+ a:focus-visible,
183
+ input:focus-visible,
184
+ textarea:focus-visible,
185
+ .filePickLabel:focus-visible {
186
+ outline-offset: 0 !important;
187
+ outline-style: solid !important;
188
+ outline-color: #fff !important;
189
+ outline-width: 2px !important;
190
+ box-shadow: 0 0 0 4px #000 !important;
191
+ }
192
+
193
+ .using-mouse input:focus-visible,
194
+ .using-mouse button:focus-visible,
195
+ .using-mouse textarea:focus-visible,
196
+ .using-mouse a:focus-visible,
197
+ .using-mouse .filePickLabel:focus-visible {
198
+ outline: none;
199
+ outline-width: 0px !important;
200
+ box-shadow: 0 0 0 0px #000 !important;
201
+ }
202
+
203
+ .pts-radioMultiple-container,
204
+ .pts-multipleCheckboxes-container {
205
+ padding-bottom: 2rem;
206
+ }
207
+
208
+ .pts-root-question input[type='text'],
209
+ .pts-root-question input[type='email'],
210
+ .pts-root-question input[type='tel'] {
211
+ max-width: 100%;
212
+ font-size: 1.6rem;
213
+ padding-left: 1.6rem;
214
+ padding-right: 1.6rem;
215
+ border-radius: 0.8rem;
216
+ border: 1px solid #545454;
217
+ height: 4.8rem;
218
+ }
219
+
220
+ /* ---------- SERVICE HEADLINE AND BODY ---------- */
221
+
222
+ .pts-serviceHeadlineAndBody-container li {
223
+ margin-bottom: 0.8rem;
224
+ }
225
+
226
+ .pts-serviceHeadlineAndBody-container ul {
227
+ padding-left: 2rem;
228
+ }
229
+
230
+ .pts-serviceHeadlineAndBody-container a {
231
+ margin-bottom: 2.8rem;
232
+ }
233
+
234
+ .pts-moreinfo-list {
235
+ margin: 0 !important;
236
+ list-style: none;
237
+ padding: 0 !important;
238
+ }
239
+
240
+ .pts-moreinfo-list svg {
241
+ width: 1.6rem;
242
+ height: 1.6rem;
243
+ background-color: #6e3282;
244
+ border-radius: 50%;
245
+ padding: 0.4rem;
246
+ flex-shrink: 0;
247
+ margin-right: 1.6rem;
248
+ }
249
+
250
+ /* ---------- STEPPER ---------- */
251
+
252
+ .pts-stepper-container {
253
+ display: flex;
254
+ width: 100%;
255
+ }
256
+
257
+ .pts-stepper-step {
258
+ display: flex;
259
+ flex-direction: column;
260
+ align-items: center;
261
+ flex: 1;
262
+ position: relative;
263
+ }
264
+
265
+ .pts-stepperDot {
266
+ width: 2.4rem;
267
+ height: 2.4rem;
268
+ line-height: 2.4rem;
269
+ font-size: 1.8rem;
270
+ background-color: #747474;
271
+ color: #ffffff;
272
+ border-radius: 50%;
273
+ margin-bottom: 1.2rem;
274
+ display: flex;
275
+ justify-content: center;
276
+ align-items: center;
277
+ }
278
+
279
+ .pts-stepperDotActive {
280
+ background-color: #dc7d0a;
281
+ }
282
+
283
+ .pts-stepperDotDone {
284
+ background-color: #6e3282;
285
+ }
286
+
287
+ .pts-stepper-step:not(:last-child)::after {
288
+ content: '';
289
+ position: absolute;
290
+ top: 1.2rem;
291
+ left: calc(50% + 3.6rem);
292
+ right: calc(-50% + 3.6rem);
293
+ height: 0.2rem;
294
+ background-color: #747474;
295
+ }
296
+
297
+ /* ---------- STEPPER BUTTON ---------- */
298
+
299
+ .pts-stepperButtons-container {
300
+ display: flex;
301
+ justify-content: end;
302
+ margin-right: 0.8rem;
303
+ }
304
+
305
+ .pts-forwardButton,
306
+ .pts-backButton {
307
+ background-color: #6e3282;
308
+ border: 2px solid #6e3282;
309
+ color: #ffffff;
310
+ padding: 8px 20px;
311
+ border-radius: 8px;
312
+ font-size: 16px;
313
+ cursor: pointer;
314
+ margin-left: 1.6rem;
315
+ }
316
+
317
+ .pts-backButton:focus,
318
+ .pts-backButton:hover,
319
+ .pts-forwardButton:focus,
320
+ .pts-forwardButton:hover,
321
+ .btn-upload:focus,
322
+ .btn-upload:hover {
323
+ background-color: #ffffff;
324
+ border: 2px solid #6e3282;
325
+ color: #6e3282;
326
+ transition: 0.2s;
327
+ }
328
+
329
+ /* ---------- RADIO MULTIPLE ---------- */
330
+
331
+ .pts-radioMultiple-container input[type='radio'] {
332
+ appearance: none;
333
+ width: 1.8rem;
334
+ height: 1.8rem;
335
+ border: 1.5px solid #545454;
336
+ border-radius: 3.1rem;
337
+ margin: 0;
338
+ margin-right: 0.8rem;
339
+ vertical-align: -2px;
340
+ position: relative;
341
+ cursor: pointer;
342
+ }
343
+
344
+ .pts-radioMultiple-container input[type='radio']:checked::before {
345
+ content: '';
346
+ position: absolute;
347
+ top: 50%;
348
+ left: 50%;
349
+ transform: translate(-50%, -50%);
350
+ width: 1rem;
351
+ height: 1rem;
352
+ border-radius: 50%;
353
+ background-color: #6e3282;
354
+ }
355
+
356
+ .pts-radioMultiple-container label {
357
+ position: relative;
358
+ top: -1px;
359
+ cursor: pointer;
360
+ }
361
+
362
+ /* ---------- MULTIPLE CHECKBOXES ---------- */
363
+
364
+ .pts-multipleCheckboxes-container input[type='checkbox'] {
365
+ -webkit-appearance: none;
366
+
367
+ width: 1.8rem;
368
+ height: 1.8rem;
369
+ margin-right: 0.8rem;
370
+ flex-shrink: 0;
371
+
372
+ background-color: #ffffff;
373
+ border: 0.15rem solid #545454;
374
+ border-radius: 0.2rem;
375
+
376
+ cursor: pointer;
377
+ }
378
+
379
+ .pts-multipleCheckboxes-container input[type='checkbox']:checked {
380
+ background-color: #6e3282;
381
+ border: none;
382
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e") !important;
383
+ }
384
+
385
+ .pts-multipleCheckboxes-container label {
386
+ cursor: pointer;
387
+ margin: 0;
388
+ padding-top: 0.1rem;
389
+ }
390
+
391
+ .pts-multipleCheckboxes-container ul {
392
+ padding-left: unset;
393
+ margin-top: 0;
394
+ margin-bottom: 0.8rem;
395
+ }
396
+
397
+ .pts-multipleCheckboxes-container li {
398
+ display: flex;
399
+ margin-bottom: 0.8rem;
400
+ align-items: center;
401
+ }
402
+
403
+ /* ---------- HEADER ---------- */
404
+
405
+ .pts-skipLink-container a {
406
+ position: absolute;
407
+ top: -1000px;
408
+ left: 1.8rem;
409
+ transition: top 0.3s ease-in-out;
410
+ background-color: #ffffff;
411
+ color: #6e3282;
412
+ }
413
+
414
+ .pts-skipLink-container a:focus {
415
+ top: 1.8rem;
416
+ }
417
+
418
+ .pts-header-container {
419
+ display: flex;
420
+ height: 80px;
421
+ padding: 0px 70px;
422
+ align-items: center;
423
+ justify-content: space-between;
424
+ background-color: #ffffff;
425
+ }
426
+
427
+ .pts-languageButton {
428
+ display: flex;
429
+ background: transparent;
430
+ border: transparent;
431
+ color: #6e3282;
432
+ }
433
+
434
+ /* ---------- FOOTER ---------- */
435
+
436
+ .pts-footer-container {
437
+ display: flex;
438
+ height: 14rem;
439
+ align-items: center;
440
+ width: 100%;
441
+ background-color: #200827;
442
+ }
443
+
444
+ .pts-footer-logo {
445
+ width: 154.444px;
446
+ height: 40px;
447
+ padding-left: 70px;
448
+ flex-shrink: 0;
449
+ position: absolute;
450
+ }
451
+
452
+ .pts-footer-linkList {
453
+ flex: 1;
454
+ justify-content: center;
455
+ }
456
+
457
+ .pts-footer-linkList ul {
458
+ padding: 0;
459
+ padding-top: 15px;
460
+ margin: 0;
461
+ list-style: none;
462
+ display: flex;
463
+ justify-content: center;
464
+ line-height: 25px;
465
+ }
466
+
467
+ .pts-footer-linkList a {
468
+ color: #ffffff;
469
+ text-underline-offset: 3px;
470
+ }
471
+
472
+ .pts-footer-linkList a span {
473
+ padding-left: 36px;
474
+ padding-right: 36px;
475
+ color: #ffffff;
476
+ }
477
+
478
+ .pts-footer-container .pts-footer-linkList ul li:not(:last-child)::after {
479
+ content: '';
480
+ width: 1px;
481
+ height: 24px;
482
+ border: 0.5px solid;
483
+ color: #ffffff;
484
+ position: absolute;
485
+ box-sizing: border-box;
486
+ }
487
+
488
+ /* ---------- TEXTFIELD / TEXTAREA ABOUT ---------- */
489
+
490
+ .pts-question-hasAbout label {
491
+ margin-bottom: 0.4rem;
492
+ line-height: 1.4rem;
493
+ }
494
+
495
+ .pts-about {
496
+ margin-bottom: 0.4rem;
497
+ color: #545454;
498
+ font-size: 1.4rem;
499
+ }
500
+
501
+ /* ---------- TEXTAREA ---------- */
502
+
503
+ .pts-textArea-container textarea {
504
+ height: 16rem;
505
+ padding: 1.2rem 1.6rem;
506
+ flex-shrink: 0;
507
+ font-family: arial;
508
+ font-size: 1.6rem;
509
+ border-radius: 8px;
510
+ border: 0.1px solid #545454;
511
+ }
512
+
513
+ .pts-textArea-container textarea:focus {
514
+ border: 0.2rem solid #6e3282;
515
+ }
516
+
517
+ .pts-textarea-counter-error-container {
518
+ display: flex;
519
+ }
520
+
521
+ .pts-character-counter {
522
+ text-align: right;
523
+ width: 100%;
524
+ margin-top: 0.4rem;
525
+ }
526
+
527
+ .pts-textarea-counter-error-container .pts-root-error {
528
+ width: 100%;
529
+ }
530
+
531
+ /* ---------- EDIT PREVIEW LINK ---------- */
532
+
533
+ .pts-editPreviewLink-container {
534
+ display: flex;
535
+ justify-content: end;
536
+ width: 100%;
537
+ margin-left: 1rem;
538
+ align-self: flex-start;
539
+ }
540
+
541
+ .pts-editPreviewLink-container button {
542
+ display: flex;
543
+ align-items: center;
544
+ background-color: transparent;
545
+ color: #6e3282;
546
+ border: none;
547
+ cursor: pointer;
548
+ font-size: 1.3rem;
549
+ gap: 0.2rem;
550
+ }
551
+
552
+ .pts-editPreviewLink-container svg {
553
+ height: 1.6rem;
554
+ width: 1.6rem;
555
+ flex-shrink: 0;
556
+ }
557
+
558
+ /* ---------- GRANSKA ---------- */
559
+
560
+ .pts-question-preview,
561
+ .addFilesPreviewContainer {
562
+ display: flex;
563
+ justify-content: space-between;
564
+ border-bottom: 1px solid #ddd;
565
+ margin-bottom: 24px;
566
+ margin-top: 0;
567
+ }
568
+
569
+ .pts-question-preview h4,
570
+ .addFilesPreviewContainer h4 {
571
+ margin-bottom: 8px;
572
+ width: 33%;
573
+ padding-right: 3.6rem;
574
+ }
575
+
576
+ .pts-root-answer,
577
+ .answer {
578
+ width: 66%;
579
+ margin-bottom: 8px;
580
+ }
581
+
582
+ .pts-root-answer ul {
583
+ margin: 0;
584
+ padding: 0;
585
+ }
586
+
587
+ .pts-root-answer li {
588
+ margin-bottom: 0.8rem;
589
+ }
590
+
591
+ .stepInfoText {
592
+ margin: 0;
593
+ margin-bottom: 36px;
594
+ }
595
+
596
+ .h3andPreviewLink {
597
+ display: flex;
598
+ align-items: center;
599
+ justify-content: space-between;
600
+ width: 100%;
601
+ }
602
+
603
+ #section-heading-0 {
604
+ width: 100%;
605
+ }
606
+
607
+ .no-answer-preview-page {
608
+ color: #545454;
609
+ }
610
+
611
+ .pts-preview-header {
612
+ display: flex;
613
+ justify-content: space-between;
614
+ align-items: baseline;
615
+ }
616
+
617
+ /* ---------- TEXT HEADLINE AND BODY / SERVICE HEADLINE AND BODY ---------- */
618
+
619
+ .pts-textHeadlineAndBody-container .notFirstInList {
620
+ margin-top: 0.8rem;
621
+ }
622
+
623
+ .pts-serviceHeadlineAndBody-container .notFirstInList {
624
+ margin-top: 0.8rem;
625
+ }
626
+
627
+ /* ---------- MODAL ---------- */
628
+
629
+ .pts-modal-overlay {
630
+ position: fixed;
631
+ top: 0;
632
+ left: 0;
633
+ width: 100%;
634
+ height: 100%;
635
+ background-color: rgba(0, 0, 0, 0.5);
636
+ display: flex;
637
+ align-items: center;
638
+ justify-content: center;
639
+ z-index: 999;
640
+ }
641
+
642
+ .pts-modal-content {
643
+ background: white;
644
+ color: black;
645
+ padding: 3.7rem;
646
+ border-radius: 4px;
647
+ max-width: 600px;
648
+ width: 90%;
649
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
650
+ }
651
+
652
+ .pts-spinner-border {
653
+ display: block;
654
+ width: 9.4rem;
655
+ height: 9.4rem;
656
+ margin: 0 auto 0 auto;
657
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='94' height='94' viewBox='0 0 94 94' fill='none'%3e%3cpath d='M47 11.75C66.4682 11.75 82.25 27.532 82.25 47C82.25 66.4682 66.4682 82.25 47 82.25C27.532 82.25 11.75 66.4682 11.75 47C11.75 27.532 27.532 11.75 47 11.75Z' stroke='%236E3282' stroke-opacity='0.25' stroke-width='7.83333' stroke-linecap='round'/%3e%3cpath d='M47 11.75C66.4682 11.75 82.25 27.532 82.25 47' stroke='%236E3282' stroke-width='7.83333' stroke-linecap='round'/%3e%3c/svg%3e");
658
+ background-size: contain;
659
+ background-repeat: no-repeat;
660
+ background-position: center;
661
+ animation: pts-spinner-border 0.75s linear infinite;
662
+ }
663
+
664
+ .pts-modal-content h1 {
665
+ margin: 0;
666
+ margin-bottom: 0.8rem;
667
+ }
668
+
669
+ .pts-modal-content p {
670
+ margin: 0;
671
+ margin-bottom: 3.6rem;
672
+ }
673
+
674
+ @keyframes pts-spinner-border {
675
+ 100% {
676
+ transform: rotate(360deg);
677
+ }
678
+ }
679
+
680
+ /* ---------- ERROR SUMMARY ---------- */
681
+
682
+ .pts-errorSummary-container {
683
+ padding: 1.6rem 2.4rem 1.6rem 2.4rem;
684
+ margin-top: 3.6rem;
685
+ border-radius: 0.8rem;
686
+ border: 0.1rem solid #8e0039;
687
+ border-left: 4rem solid #8e0039;
688
+ position: relative;
689
+ }
690
+
691
+ .pts-errorSummary-container .errorDot {
692
+ position: absolute;
693
+ top: 2.1rem;
694
+ left: -2.8rem;
695
+ width: 1.6rem;
696
+ height: 1.6rem;
697
+ border-radius: 50%;
698
+ background-color: #ffffff;
699
+ color: #8e0039;
700
+ align-items: center;
701
+ font-size: 1.4rem;
702
+ }
703
+
704
+ .pts-errorSummary-container h2 {
705
+ margin-bottom: 0;
706
+ }
707
+
708
+ .pts-errorSummary-container ul {
709
+ padding: 0;
710
+ margin: 0;
711
+ }
712
+
713
+ .pts-errorSummary-container li {
714
+ display: flex;
715
+ cursor: pointer;
716
+ padding-top: 1.6rem;
717
+ }
718
+
719
+ .errorSummary-text {
720
+ color: #8e0039;
721
+ }