@softwareone/spi-sv5-library 1.14.4 → 1.15.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 (79) hide show
  1. package/dist/components/accordion/Accordion.svelte +14 -23
  2. package/dist/components/announcement/Announcement.svelte +53 -61
  3. package/dist/components/avatar/Avatar.svelte +30 -12
  4. package/dist/components/avatar/Avatar.svelte.d.ts +2 -2
  5. package/dist/components/button/Button.svelte +43 -46
  6. package/dist/components/card/Card.svelte +4 -6
  7. package/dist/components/chips/Chips.svelte +37 -36
  8. package/dist/components/chips/Chips.svelte.d.ts +1 -1
  9. package/dist/components/confirmation/Confirmation.svelte +1 -1
  10. package/dist/components/controls/attach-file/AttachFile.svelte +18 -41
  11. package/dist/components/controls/attach-file/FileManager.svelte +16 -30
  12. package/dist/components/controls/attach-file/Warnings.svelte +13 -15
  13. package/dist/components/controls/input/Input.svelte +46 -72
  14. package/dist/components/controls/input/InputIcon.svelte +13 -13
  15. package/dist/components/controls/label/Label.svelte +5 -9
  16. package/dist/components/controls/radio-group/RadioGroup.svelte +25 -39
  17. package/dist/components/controls/select/Select.svelte +49 -71
  18. package/dist/components/controls/textarea/TextArea.svelte +36 -45
  19. package/dist/components/controls/toggle/Toggle.svelte +35 -37
  20. package/dist/components/delete-confirmation/DeleteConfirmation.svelte +1 -1
  21. package/dist/components/error-page/ErrorPage.svelte +9 -18
  22. package/dist/components/footer/Footer.svelte +6 -7
  23. package/dist/components/form/Form.svelte +1 -1
  24. package/dist/components/header/Header.svelte +39 -45
  25. package/dist/components/header/HeaderAccount.svelte +21 -33
  26. package/dist/components/header/HeaderLoader.svelte +13 -8
  27. package/dist/components/highlight-panel/HighlightPanel.svelte +29 -34
  28. package/dist/components/home/Home.svelte +18 -36
  29. package/dist/components/link/Link.svelte +1 -1
  30. package/dist/components/menu/Menu.svelte +12 -12
  31. package/dist/components/menu/MenuItem.svelte +25 -29
  32. package/dist/components/menu/Sidebar.svelte +32 -40
  33. package/dist/components/modal/Modal.svelte +8 -12
  34. package/dist/components/modal/ModalContent.svelte +3 -3
  35. package/dist/components/modal/ModalFooter.svelte +5 -5
  36. package/dist/components/modal/ModalHeader.svelte +6 -11
  37. package/dist/components/notification/Notification.svelte +20 -27
  38. package/dist/components/processing/Processing.svelte +9 -16
  39. package/dist/components/progress-page/ProgressPage.svelte +13 -18
  40. package/dist/components/progress-wizard/ProgressWizard.svelte +43 -54
  41. package/dist/components/search/Search.svelte +24 -29
  42. package/dist/components/spinner/Spinner.svelte +1 -1
  43. package/dist/components/switcher/Switcher.svelte +14 -23
  44. package/dist/components/table/ActionsColumn.svelte +13 -33
  45. package/dist/components/table/AdvancedFilter.svelte +39 -74
  46. package/dist/components/table/Body.svelte +9 -18
  47. package/dist/components/table/ColumnVisibilityDropdown.svelte +24 -55
  48. package/dist/components/table/Footer.svelte +2 -4
  49. package/dist/components/table/Header.svelte +23 -44
  50. package/dist/components/table/PageSize.svelte +24 -36
  51. package/dist/components/table/Pagination.svelte +49 -35
  52. package/dist/components/table/RowCheckBox.svelte +5 -12
  53. package/dist/components/table/Skeleton.svelte +16 -25
  54. package/dist/components/table/Table.svelte +50 -38
  55. package/dist/components/table/Table.svelte.d.ts +5 -1
  56. package/dist/components/table/types.d.ts +9 -1
  57. package/dist/components/table/utils.d.ts +5 -1
  58. package/dist/components/table/utils.js +8 -8
  59. package/dist/components/tabs/Tabs.svelte +16 -20
  60. package/dist/components/toast/Toast.svelte +27 -30
  61. package/dist/components/tooltip/Tooltip.svelte +15 -19
  62. package/dist/components/waffle/Waffle.svelte +9 -13
  63. package/dist/components/waffle/WaffleItems.svelte +10 -13
  64. package/dist/styles/index.css +3 -0
  65. package/dist/styles/reset.css +19 -0
  66. package/dist/styles/tokens/index.css +2 -0
  67. package/dist/styles/tokens/primitives/borders.css +17 -0
  68. package/dist/styles/tokens/primitives/colors.css +41 -0
  69. package/dist/styles/tokens/primitives/index.css +7 -0
  70. package/dist/styles/tokens/primitives/motion.css +11 -0
  71. package/dist/styles/tokens/primitives/opacity.css +6 -0
  72. package/dist/styles/tokens/primitives/shadows.css +11 -0
  73. package/dist/styles/tokens/primitives/sizing.css +19 -0
  74. package/dist/styles/tokens/primitives/typography.css +13 -0
  75. package/dist/styles/tokens/semantic/colors.css +78 -0
  76. package/dist/styles/tokens/semantic/index.css +2 -0
  77. package/dist/styles/tokens/semantic/shadows.css +9 -0
  78. package/dist/styles/utilities.css +73 -0
  79. package/package.json +3 -2
@@ -55,6 +55,7 @@
55
55
  bind:value
56
56
  class={[
57
57
  'form-textarea',
58
+ 'spi-text-regular-2',
58
59
  props.disabled && 'form-textarea-disabled',
59
60
  props.readonly && 'form-textarea-readonly',
60
61
  !resize && 'form-textarea-no-resize'
@@ -67,18 +68,18 @@
67
68
  <div class="form-footer">
68
69
  <div class="form-messages">
69
70
  {#if description}
70
- <p class="form-message form-message-description">
71
+ <p class="form-message form-message-description spi-text-regular-1">
71
72
  {description}
72
73
  </p>
73
74
  {/if}
74
75
  {#if errorMessage}
75
- <p class="form-message form-message-error">
76
+ <p class="form-message form-message-error spi-text-regular-1">
76
77
  {Array.isArray(errorMessage) ? errorMessage[0] : errorMessage}
77
78
  </p>
78
79
  {/if}
79
80
  </div>
80
81
  {#if maximumCharactersAllowed}
81
- <div class={['form-character-count', isOverLimit && 'error']}>
82
+ <div class={['form-character-count', 'spi-text-regular-1', isOverLimit && 'error']}>
82
83
  {currentTextLength} / {maximumCharactersAllowed}
83
84
  </div>
84
85
  {/if}
@@ -90,23 +91,17 @@
90
91
  .form-container {
91
92
  display: flex;
92
93
  flex-direction: column;
93
- gap: 8px;
94
- font-size: 14px;
95
- line-height: 20px;
96
- }
97
-
98
- .form-message {
99
- font-size: 12px;
94
+ gap: var(--spi-size-2);
100
95
  }
101
96
 
102
97
  .form-textarea-wrapper {
103
98
  position: relative;
104
99
  display: flex;
105
100
  width: 100%;
106
- border-radius: 8px;
107
- border: 1px solid #6b7180;
108
- background: #fff;
109
- transition: all 0.2s ease-in-out;
101
+ border-radius: var(--spi-rounded-lg);
102
+ border: var(--spi-border-1) solid var(--spi-color-border-strong);
103
+ background: var(--spi-color-surface-default);
104
+ transition: all var(--spi-duration-normal) var(--spi-ease-in-out);
110
105
  overflow: hidden;
111
106
  }
112
107
 
@@ -114,24 +109,22 @@
114
109
  :has(.form-textarea:read-only)
115
110
  ),
116
111
  .form-textarea-wrapper:focus-within {
117
- border-color: #472aff;
112
+ border-color: var(--spi-color-border-focus);
118
113
  }
119
114
 
120
115
  .form-textarea-wrapper:focus-within {
121
- box-shadow: 0px 0px 0px 3px rgba(149, 155, 255, 0.3);
116
+ box-shadow: var(--spi-shadow-focus-primary);
122
117
  }
123
118
 
124
119
  .form-textarea {
125
- font-size: 14px;
126
- line-height: 20px;
127
120
  display: flex;
128
121
  width: 100%;
129
- min-height: 80px;
130
- padding: 8px 16px;
122
+ min-height: var(--spi-size-20);
123
+ padding: var(--spi-size-2) var(--spi-size-4);
131
124
  border: none;
132
- border-radius: 8px;
133
- color: #000;
134
- transition: all 0.2s ease-in-out;
125
+ border-radius: var(--spi-rounded-lg);
126
+ color: var(--spi-color-text-primary);
127
+ transition: all var(--spi-duration-normal) var(--spi-ease-in-out);
135
128
  font-family: inherit;
136
129
  }
137
130
 
@@ -140,15 +133,14 @@
140
133
  }
141
134
 
142
135
  .form-textarea-disabled {
143
- background-color: #f3f4f6;
144
- border-color: #d1d5db;
145
- color: #6b7180;
136
+ background-color: var(--spi-color-disabled-bg);
137
+ border-color: var(--spi-color-disabled-border);
146
138
  cursor: not-allowed;
147
139
  }
148
140
 
149
141
  .form-textarea-readonly {
150
- background-color: #f9fafb;
151
- border-color: #d1d5db;
142
+ background-color: var(--spi-color-surface-subtle);
143
+ border-color: var(--spi-color-border-default);
152
144
  cursor: default;
153
145
  }
154
146
 
@@ -158,41 +150,40 @@
158
150
 
159
151
  .form-textarea::placeholder,
160
152
  .form-textarea:disabled::placeholder {
161
- color: #6b7180;
162
- opacity: 1;
153
+ color: var(--spi-color-text-placeholder);
154
+ opacity: var(--spi-opacity-100);
163
155
  }
164
156
 
165
157
  .form-footer {
166
158
  display: flex;
167
159
  justify-content: space-between;
168
160
  align-items: flex-start;
169
- gap: 8px;
161
+ gap: var(--spi-size-2);
170
162
  }
171
163
 
172
164
  .form-messages {
173
165
  display: flex;
174
166
  flex-direction: column;
175
- gap: 4px;
167
+ gap: var(--spi-size-1);
176
168
  flex: 1;
177
169
  }
178
170
 
179
171
  .form-message-error {
180
- color: #dc2626;
172
+ color: var(--spi-color-text-danger);
181
173
  }
182
174
 
183
175
  .form-message-description {
184
- color: #6b7180;
176
+ color: var(--spi-color-text-muted);
185
177
  }
186
178
 
187
179
  .form-character-count {
188
- font-size: 12px;
189
- color: #6b7180;
190
180
  white-space: nowrap;
181
+ color: var(--spi-color-text-muted);
191
182
  flex-shrink: 0;
192
183
  }
193
184
 
194
185
  .form-character-count.error {
195
- color: #dc2626;
186
+ color: var(--spi-color-text-danger);
196
187
  }
197
188
 
198
189
  .form-textarea-wrapper.error,
@@ -200,11 +191,11 @@
200
191
  :has(.form-textarea:read-only)
201
192
  ),
202
193
  .form-textarea-wrapper.error:focus-within {
203
- border-color: #dc2626;
194
+ border-color: var(--spi-color-border-danger);
204
195
  }
205
196
 
206
197
  .form-textarea-wrapper.error:focus-within {
207
- box-shadow: 0px 0px 0px 3px rgba(220, 38, 38, 0.2);
198
+ box-shadow: var(--spi-shadow-focus-danger);
208
199
  }
209
200
 
210
201
  .form-textarea-wrapper.success,
@@ -212,27 +203,27 @@
212
203
  :has(.form-textarea:read-only)
213
204
  ),
214
205
  .form-textarea-wrapper.success:focus-within {
215
- border-color: #008556;
206
+ border-color: var(--spi-color-border-success);
216
207
  }
217
208
 
218
209
  .form-textarea-wrapper.success:focus-within {
219
- box-shadow: 0px 0px 0px 3px rgba(16, 185, 129, 0.15);
210
+ box-shadow: var(--spi-shadow-focus-success);
220
211
  }
221
212
 
222
213
  .form-textarea-wrapper:has(.form-textarea:disabled),
223
214
  .form-textarea-wrapper:has(.form-textarea:read-only) {
224
- border-color: #d1d5db !important;
215
+ border-color: var(--spi-color-disabled-border) !important;
225
216
  box-shadow: none !important;
226
217
  }
227
218
 
228
219
  @media (prefers-contrast: high) {
229
220
  .form-textarea {
230
- border-width: 2px;
221
+ border-width: var(--spi-border-2);
231
222
  }
232
223
 
233
224
  .form-textarea:focus {
234
- outline: 2px solid;
235
- outline-offset: 2px;
225
+ outline: var(--spi-border-2) solid;
226
+ outline-offset: var(--spi-border-2);
236
227
  }
237
228
  }
238
229
 
@@ -32,7 +32,7 @@
32
32
  role="switch"
33
33
  />
34
34
  <div class={['toggle-slider', checked && 'checked', disabled && 'disabled']}>
35
- <span class="material-icons-outlined toggle-icon">
35
+ <span class="material-icons-outlined toggle-icon spi-text-regular-1">
36
36
  {#if checked}
37
37
  done
38
38
  {:else}
@@ -49,7 +49,7 @@
49
49
  display: flex;
50
50
  flex-direction: row;
51
51
  align-items: center;
52
- gap: 8px;
52
+ gap: var(--spi-size-2);
53
53
  }
54
54
 
55
55
  .container.vertical {
@@ -64,90 +64,88 @@
64
64
  .container.vertical label {
65
65
  order: 1;
66
66
  }
67
+
67
68
  .toggle-container {
68
69
  position: relative;
69
70
  }
70
71
 
71
72
  .toggle-input {
72
73
  position: absolute;
73
- opacity: 0;
74
+ opacity: var(--spi-opacity-0);
74
75
  width: 0;
75
76
  height: 0;
76
77
  }
77
78
 
78
79
  .toggle-slider {
79
80
  display: flex;
80
- width: 40px;
81
+ width: var(--spi-size-10);
81
82
  padding: 2px;
82
83
  align-items: center;
83
- border-radius: 12px;
84
- border: 2px solid #6b7180;
85
- background: #fff;
86
- transition: all 0.3s ease;
84
+ border-radius: var(--spi-rounded-xl);
85
+ border: var(--spi-border-2) solid var(--spi-color-neutral-dark);
86
+ background: var(--spi-color-surface-default);
87
+ transition: all var(--spi-duration-slow) var(--spi-ease-default);
87
88
  cursor: pointer;
88
89
  }
89
90
 
90
91
  .toggle-slider.checked {
91
92
  justify-content: flex-end;
92
- border: 2px solid #472aff;
93
- background: #472aff;
93
+ border: var(--spi-border-2) solid var(--spi-color-primary-base);
94
+ background: var(--spi-color-primary-base);
94
95
  }
95
96
 
96
97
  .toggle-slider.disabled {
97
98
  cursor: not-allowed;
98
- border: 2px solid #6b7180;
99
- background: #e0e5e8;
99
+ border: var(--spi-border-2) solid var(--spi-color-neutral-dark);
100
+ background: var(--spi-color-surface-muted);
100
101
  }
101
102
 
102
103
  .toggle-slider.disabled.checked {
103
- border: 2px solid #6b7180;
104
- background: #6b7180;
104
+ border: var(--spi-border-2) solid var(--spi-color-neutral-dark);
105
+ background: var(--spi-color-neutral-dark);
105
106
  }
106
107
 
107
108
  .toggle-icon {
108
109
  display: flex;
109
- font-size: 12px;
110
- flex-direction: column;
111
110
  align-items: center;
112
- justify-content: center;
113
- border-radius: 16px;
114
- border: 2px solid #6b7180;
115
- background: #6b7180;
116
- color: #fff;
117
- transition: all 0.3s ease;
118
- cursor: pointer;
111
+ line-height: normal;
112
+ border-radius: var(--spi-rounded-2xl);
113
+ border: var(--spi-border-2) solid var(--spi-color-neutral-dark);
114
+ background: var(--spi-color-neutral-dark);
115
+ color: var(--spi-color-text-inverse);
116
+ transition: all var(--spi-duration-slow) var(--spi-ease-default);
119
117
  }
120
118
 
121
119
  .toggle-slider.checked .toggle-icon {
122
- border: 2px solid #fff;
123
- background: #fff;
124
- color: #472aff;
120
+ border: var(--spi-border-2) solid var(--spi-color-surface-default);
121
+ background: var(--spi-color-surface-default);
122
+ color: var(--spi-color-primary-base);
125
123
  }
126
124
 
127
125
  .toggle-slider.disabled .toggle-icon {
128
126
  cursor: not-allowed;
129
- border: 2px solid #6b7180;
130
- background: #6b7180;
131
- color: #fff;
127
+ border: var(--spi-border-2) solid var(--spi-color-neutral-dark);
128
+ background: var(--spi-color-neutral-dark);
129
+ color: var(--spi-color-text-inverse);
132
130
  }
133
131
 
134
132
  .toggle-slider.disabled.checked .toggle-icon {
135
- border: 2px solid #fff;
136
- background: #fff;
137
- color: #6b7180;
133
+ border: var(--spi-border-2) solid var(--spi-color-surface-default);
134
+ background: var(--spi-color-surface-default);
135
+ color: var(--spi-color-neutral-dark);
138
136
  }
139
137
 
140
138
  .toggle-container:hover .toggle-slider:not(.disabled).checked {
141
- background: #3520bf;
142
- border: 2px solid #3520bf;
139
+ background: var(--spi-color-primary-dark);
140
+ border: var(--spi-border-2) solid var(--spi-color-primary-dark);
143
141
  }
144
142
 
145
143
  .toggle-container:hover .toggle-slider:not(.disabled):not(.checked) {
146
- border: 2px solid #434952;
144
+ border: var(--spi-border-2) solid var(--spi-color-neutral-darker);
147
145
  }
148
146
 
149
147
  .toggle-container:hover .toggle-slider:not(.disabled):not(.checked) .toggle-icon {
150
- border: 2px solid #434952;
151
- background: #434952;
148
+ border: var(--spi-border-2) solid var(--spi-color-neutral-darker);
149
+ background: var(--spi-color-neutral-darker);
152
150
  }
153
151
  </style>
@@ -71,7 +71,7 @@
71
71
  .content {
72
72
  display: flex;
73
73
  flex-direction: column;
74
- gap: 16px;
74
+ gap: var(--spi-size-4);
75
75
  width: 100%;
76
76
  }
77
77
 
@@ -19,11 +19,11 @@
19
19
  };
20
20
  </script>
21
21
 
22
- <section class="feedback-container">
22
+ <section class="feedback-container spi-text-regular-2">
23
23
  <img src={FeedbackIcon} class="feedback-icon" alt="Feedback icon" />
24
24
 
25
25
  <div class="feedback-detail">
26
- <h1>{title || errorTitle[status]}</h1>
26
+ <h1 class="spi-text-bold-6">{title || errorTitle[status]}</h1>
27
27
  {#if status === 404}
28
28
  <div>
29
29
  <p>We couldn’t find the page:</p>
@@ -53,17 +53,13 @@
53
53
  margin-left: auto;
54
54
  margin-right: auto;
55
55
  width: 350px;
56
- padding: 24px;
57
- gap: 32px;
58
- border-radius: 16px;
59
- background-color: #fff;
60
- box-shadow:
61
- 0px 1px 16px rgba(107, 113, 128, 0.1),
62
- 0px 1px 3px rgba(107, 113, 128, 0.2);
56
+ padding: var(--spi-size-6);
57
+ gap: var(--spi-size-8);
58
+ border-radius: var(--spi-rounded-2xl);
59
+ background-color: var(--spi-color-surface-default);
60
+ box-shadow: var(--spi-shadow-card);
63
61
  align-items: center;
64
62
  text-align: center;
65
- font-size: 14px;
66
- line-height: 20px;
67
63
  }
68
64
 
69
65
  .feedback-icon {
@@ -74,12 +70,7 @@
74
70
  .feedback-detail {
75
71
  display: flex;
76
72
  flex-direction: column;
77
- gap: 8px;
78
- }
79
-
80
- .feedback-detail > h1 {
81
- font-size: 24px;
82
- font-weight: bold;
73
+ gap: var(--spi-size-2);
83
74
  }
84
75
 
85
76
  .feedback-detail .link {
@@ -94,6 +85,6 @@
94
85
  }
95
86
 
96
87
  .link {
97
- color: #472aff;
88
+ color: var(--spi-color-text-link);
98
89
  }
99
90
  </style>
@@ -12,7 +12,7 @@
12
12
  }: Props = $props();
13
13
  </script>
14
14
 
15
- <footer class="footer-section">
15
+ <footer class="footer-section spi-text-regular-2">
16
16
  <a href={homeUrl} title="Home">
17
17
  <FooterLogo />
18
18
  </a>
@@ -39,21 +39,20 @@
39
39
 
40
40
  <style>
41
41
  .footer-section {
42
- background-color: #25282d;
42
+ background-color: var(--spi-color-neutral-darkest);
43
43
  display: flex;
44
- gap: 50px;
44
+ gap: var(--spi-size-12);
45
45
  align-items: center;
46
46
  justify-content: center;
47
- padding: 10px;
48
- color: white;
47
+ padding: var(--spi-size-3);
48
+ color: var(--spi-color-text-inverse);
49
49
  }
50
50
 
51
51
  .footer-section .links,
52
52
  .footer-section .legal {
53
53
  display: flex;
54
54
  flex-direction: column;
55
- gap: 3px;
56
- font-size: 14px;
55
+ gap: var(--spi-size-1);
57
56
  }
58
57
 
59
58
  .footer-section a:hover {
@@ -12,8 +12,8 @@
12
12
 
13
13
  import { addToast, Spinner } from '../../index.js';
14
14
  import { getFormContext } from './context.js';
15
- import { isEqual } from './utils.js';
16
15
  import type { FormError } from './types.js';
16
+ import { isEqual } from './utils.js';
17
17
 
18
18
  type Schema = z.infer<typeof schema>;
19
19
  type FormEncodingType = 'application/x-www-form-urlencoded' | 'multipart/form-data';
@@ -92,7 +92,7 @@
92
92
  aria-label="Waffle Component"
93
93
  aria-expanded={showWaffle}
94
94
  >
95
- <span class="material-icons icon-span">apps</span>
95
+ <span class="material-icons icon-span spi-text-regular-6">apps</span>
96
96
  </button>
97
97
  <Waffle items={waffleItems} bind:showWaffle />
98
98
  {/if}
@@ -104,7 +104,7 @@
104
104
  aria-label="menu button"
105
105
  aria-expanded={showMenu}
106
106
  >
107
- <span class="material-icons icon-span menu-icon">menu</span>
107
+ <span class="material-icons icon-span menu-icon spi-text-regular-6">menu</span>
108
108
  </button>
109
109
  <Menu {menuItems} bind:showMenu />
110
110
  {/if}
@@ -112,7 +112,7 @@
112
112
  <HeaderLogo />
113
113
  </a>
114
114
  </div>
115
- <h2 class="header-title">
115
+ <h2 class="header-title spi-text-medium-6">
116
116
  {title}
117
117
  </h2>
118
118
  </nav>
@@ -126,10 +126,12 @@
126
126
  aria-label="Announcement"
127
127
  aria-expanded={showAnnouncement}
128
128
  >
129
- <span class="material-icons-outlined icon-span menu-icon">notifications</span>
129
+ <span class="material-icons-outlined icon-span menu-icon spi-text-regular-6"
130
+ >notifications</span
131
+ >
130
132
  {#if unreadCount > 0}
131
133
  <div class="notification-badge">
132
- <span class="badge-count">{unreadCount}</span>
134
+ <span class="badge-count spi-text-medium-1">{unreadCount}</span>
133
135
  </div>
134
136
  {/if}
135
137
  </button>
@@ -144,66 +146,61 @@
144
146
  </header>
145
147
 
146
148
  <style>
149
+ .header-container {
150
+ display: flex;
151
+ gap: var(--spi-size-6);
152
+ justify-content: space-between;
153
+ align-items: center;
154
+ padding: var(--spi-size-5) var(--spi-size-4);
155
+ background: var(--spi-color-surface-default);
156
+ box-shadow: var(--spi-shadow-card);
157
+ position: relative;
158
+ z-index: 50;
159
+ }
160
+
161
+ .header-section {
162
+ display: flex;
163
+ align-items: center;
164
+ gap: var(--spi-size-8);
165
+ }
166
+
147
167
  .header-button {
148
168
  position: relative;
149
169
  display: flex;
150
170
  justify-content: center;
151
171
  align-items: center;
152
- border-radius: 50%;
172
+ border-radius: var(--spi-rounded-full);
153
173
  background: transparent;
154
174
  z-index: 40;
155
175
  cursor: pointer;
156
176
  border: none;
157
- width: 40px;
158
- height: 40px;
159
- transition: background-color 0.2s ease-in-out;
160
- padding: 8px;
177
+ width: var(--spi-size-10);
178
+ height: var(--spi-size-10);
179
+ transition: background-color var(--spi-duration-normal) var(--spi-ease-in-out);
180
+ padding: var(--spi-size-2);
161
181
  }
162
182
 
163
183
  .header-button:hover {
164
- background: #e0e5e8;
184
+ background: var(--spi-color-surface-muted);
165
185
  }
166
186
 
167
187
  .header-button.active {
168
- background: #fff;
169
- color: #374151;
188
+ background: var(--spi-color-surface-default);
189
+ color: var(--spi-color-text-secondary);
170
190
  }
171
191
 
172
192
  .icon-span {
173
- font-size: 24px;
174
- color: #6b7180;
175
- }
176
-
177
- .header-container {
178
- display: flex;
179
- gap: 24px;
180
- justify-content: space-between;
181
- align-items: center;
182
- padding: 20px 16px;
183
- background: #fff;
184
- box-shadow:
185
- 0 1px 3px 0 rgba(107, 113, 128, 0.2),
186
- 0 1px 16px 0 rgba(107, 113, 128, 0.1);
187
- position: relative;
188
- z-index: 50;
189
- }
190
-
191
- .header-section {
192
- display: flex;
193
- align-items: center;
194
- gap: 32px;
193
+ color: var(--spi-color-text-muted);
195
194
  }
196
195
 
197
196
  .header-buttons-container {
198
197
  display: flex;
199
198
  align-items: center;
200
- gap: 12px;
199
+ gap: var(--spi-size-3);
201
200
  }
202
201
 
203
202
  .header-title {
204
- color: #000;
205
- font-size: 24px;
206
- font-weight: 500;
203
+ color: var(--spi-color-text-primary);
207
204
  cursor: default;
208
205
  }
209
206
 
@@ -214,16 +211,13 @@
214
211
  transform: translate(5px, 2px);
215
212
  display: flex;
216
213
  justify-content: center;
217
- background-color: #472aff;
218
- border-radius: 4px;
214
+ background-color: var(--spi-color-primary-base);
215
+ border-radius: var(--spi-rounded-sm);
219
216
  min-width: 19px;
220
217
  padding: 0 3px;
221
218
  }
222
219
 
223
220
  .badge-count {
224
- color: #ffffff;
225
- font-weight: 500;
226
- font-size: 12px;
227
- line-height: 16px;
221
+ color: var(--spi-color-text-inverse);
228
222
  }
229
223
  </style>