@cohiva/support-widget 1.1.1 → 1.1.2

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/dist/index.cjs CHANGED
@@ -725,7 +725,7 @@ function buildFeedbackDescription(formData, diagnostics) {
725
725
  }
726
726
 
727
727
  // src/components/SupportWidget.tsx
728
- var import_widget = require("./widget-E4MWTWY5.css");
728
+ var import_widget = require("./widget-IHSQAQI2.css");
729
729
 
730
730
  // src/utils/classNames.ts
731
731
  function classNames(...items) {
package/dist/index.d.cts CHANGED
@@ -196,4 +196,4 @@ interface GitHubIssueProxyClientOptions {
196
196
  }
197
197
  declare function createGitHubIssueProxyClient(options: GitHubIssueProxyClientOptions): (payload: SubmitFeedbackRequest) => Promise<SubmitResult>;
198
198
 
199
- export { type DiagnosticsConfig, type DiagnosticsSnapshot, type FeedbackFormData, type FeedbackType, type SubmissionConfig, type SubmissionMode, type SubmitFeedbackRequest, type SubmitResult, SupportWidget, type SupportWidgetConfig, type SupportWidgetProps, buildExperienceDetailsPayload, buildFeedbackDescription, clearFeedbackDiagnostics, createCentralFeedbackClient, createEmptyFeedbackForm, createGitHubIssueProxyClient, feedbackFieldLabels, feedbackTypes, getFeedbackDiagnosticsSnapshot, getRequiredFeedbackFields, installFeedbackDiagnostics, recordFeedbackRouteVisit, validateFeedbackForm };
199
+ export { type DiagnosticsConfig, type DiagnosticsEntry, type DiagnosticsSnapshot, type FeedbackFormData, type FeedbackType, type SubmissionConfig, type SubmissionMode, type SubmitFeedbackRequest, type SubmitResult, SupportWidget, type SupportWidgetConfig, type SupportWidgetProps, buildExperienceDetailsPayload, buildFeedbackDescription, clearFeedbackDiagnostics, createCentralFeedbackClient, createEmptyFeedbackForm, createGitHubIssueProxyClient, feedbackFieldLabels, feedbackTypes, getFeedbackDiagnosticsSnapshot, getRequiredFeedbackFields, installFeedbackDiagnostics, recordFeedbackRouteVisit, validateFeedbackForm };
package/dist/index.d.ts CHANGED
@@ -196,4 +196,4 @@ interface GitHubIssueProxyClientOptions {
196
196
  }
197
197
  declare function createGitHubIssueProxyClient(options: GitHubIssueProxyClientOptions): (payload: SubmitFeedbackRequest) => Promise<SubmitResult>;
198
198
 
199
- export { type DiagnosticsConfig, type DiagnosticsSnapshot, type FeedbackFormData, type FeedbackType, type SubmissionConfig, type SubmissionMode, type SubmitFeedbackRequest, type SubmitResult, SupportWidget, type SupportWidgetConfig, type SupportWidgetProps, buildExperienceDetailsPayload, buildFeedbackDescription, clearFeedbackDiagnostics, createCentralFeedbackClient, createEmptyFeedbackForm, createGitHubIssueProxyClient, feedbackFieldLabels, feedbackTypes, getFeedbackDiagnosticsSnapshot, getRequiredFeedbackFields, installFeedbackDiagnostics, recordFeedbackRouteVisit, validateFeedbackForm };
199
+ export { type DiagnosticsConfig, type DiagnosticsEntry, type DiagnosticsSnapshot, type FeedbackFormData, type FeedbackType, type SubmissionConfig, type SubmissionMode, type SubmitFeedbackRequest, type SubmitResult, SupportWidget, type SupportWidgetConfig, type SupportWidgetProps, buildExperienceDetailsPayload, buildFeedbackDescription, clearFeedbackDiagnostics, createCentralFeedbackClient, createEmptyFeedbackForm, createGitHubIssueProxyClient, feedbackFieldLabels, feedbackTypes, getFeedbackDiagnosticsSnapshot, getRequiredFeedbackFields, installFeedbackDiagnostics, recordFeedbackRouteVisit, validateFeedbackForm };
package/dist/index.js CHANGED
@@ -686,7 +686,7 @@ function buildFeedbackDescription(formData, diagnostics) {
686
686
  }
687
687
 
688
688
  // src/components/SupportWidget.tsx
689
- import "./widget-E4MWTWY5.css";
689
+ import "./widget-IHSQAQI2.css";
690
690
 
691
691
  // src/utils/classNames.ts
692
692
  function classNames(...items) {
package/dist/styles.css CHANGED
@@ -7,8 +7,8 @@
7
7
  --sw-color-text: #0f172a;
8
8
  --sw-color-text-muted: #475569;
9
9
  --sw-color-border: #cbd5e1;
10
- --sw-color-primary: #0f766e;
11
- --sw-color-primary-hover: #115e59;
10
+ --sw-color-primary: #8b5cf6;
11
+ --sw-color-primary-hover: #7c3aed;
12
12
  --sw-color-danger: #b91c1c;
13
13
  --sw-shadow-elevated: 0 20px 35px rgba(15, 23, 42, 0.25);
14
14
  }
@@ -240,10 +240,19 @@
240
240
  color: #ffffff;
241
241
  background: var(--sw-color-primary);
242
242
  border-color: var(--sw-color-primary);
243
+ border-radius: 999px;
244
+ font-weight: 600;
245
+ font-size: 1rem;
246
+ padding: 0.75rem;
247
+ display: inline-flex;
248
+ align-items: center;
249
+ justify-content: center;
250
+ gap: 0.4rem;
243
251
  }
244
252
 
245
- .sw-actions button[type='submit']:hover {
253
+ .sw-actions button[type='submit']:hover:not(:disabled) {
246
254
  background: var(--sw-color-primary-hover);
255
+ border-color: var(--sw-color-primary-hover);
247
256
  }
248
257
 
249
258
  .sw-actions button:disabled {
@@ -7,8 +7,8 @@
7
7
  --sw-color-text: #0f172a;
8
8
  --sw-color-text-muted: #475569;
9
9
  --sw-color-border: #cbd5e1;
10
- --sw-color-primary: #0f766e;
11
- --sw-color-primary-hover: #115e59;
10
+ --sw-color-primary: #8b5cf6;
11
+ --sw-color-primary-hover: #7c3aed;
12
12
  --sw-color-danger: #b91c1c;
13
13
  --sw-shadow-elevated: 0 20px 35px rgba(15, 23, 42, 0.25);
14
14
  }
@@ -240,10 +240,19 @@
240
240
  color: #ffffff;
241
241
  background: var(--sw-color-primary);
242
242
  border-color: var(--sw-color-primary);
243
+ border-radius: 999px;
244
+ font-weight: 600;
245
+ font-size: 1rem;
246
+ padding: 0.75rem;
247
+ display: inline-flex;
248
+ align-items: center;
249
+ justify-content: center;
250
+ gap: 0.4rem;
243
251
  }
244
252
 
245
- .sw-actions button[type='submit']:hover {
253
+ .sw-actions button[type='submit']:hover:not(:disabled) {
246
254
  background: var(--sw-color-primary-hover);
255
+ border-color: var(--sw-color-primary-hover);
247
256
  }
248
257
 
249
258
  .sw-actions button:disabled {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cohiva/support-widget",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Reusable Support Ticket widget with diagnostics capture and typed payload generation",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -1,252 +0,0 @@
1
- :root {
2
- --sw-color-launcher-bg: #6d28d9;
3
- --sw-color-launcher-bg-hover: #5b21b6;
4
- --sw-color-launcher-border: #8b5cf6;
5
- --sw-color-surface: #ffffff;
6
- --sw-color-surface-muted: #f8fafc;
7
- --sw-color-text: #0f172a;
8
- --sw-color-text-muted: #475569;
9
- --sw-color-border: #cbd5e1;
10
- --sw-color-primary: #0f766e;
11
- --sw-color-primary-hover: #115e59;
12
- --sw-color-danger: #b91c1c;
13
- --sw-shadow-elevated: 0 20px 35px rgba(15, 23, 42, 0.25);
14
- }
15
-
16
- .sw-sr-only {
17
- border: 0;
18
- clip: rect(0, 0, 0, 0);
19
- height: 1px;
20
- margin: -1px;
21
- overflow: hidden;
22
- padding: 0;
23
- position: absolute;
24
- width: 1px;
25
- }
26
-
27
- .sw-launcher {
28
- position: fixed;
29
- right: 1.5rem;
30
- bottom: 1.5rem;
31
- z-index: 1000;
32
- display: inline-flex;
33
- align-items: center;
34
- gap: 0.5rem;
35
- border-radius: 999px;
36
- border: 2px solid var(--sw-color-launcher-border);
37
- background: var(--sw-color-launcher-bg);
38
- color: #ffffff;
39
- font-size: 0.875rem;
40
- font-weight: 700;
41
- padding: 0.625rem 1rem;
42
- box-shadow: 0 10px 24px rgba(76, 29, 149, 0.38);
43
- transition: transform 150ms ease, background 150ms ease;
44
- }
45
-
46
- .sw-launcher:hover {
47
- transform: scale(1.05);
48
- background: var(--sw-color-launcher-bg-hover);
49
- }
50
-
51
- .sw-launcher-icon {
52
- width: 1.25rem;
53
- height: 1.25rem;
54
- display: inline-flex;
55
- align-items: center;
56
- justify-content: center;
57
- }
58
-
59
- .sw-overlay {
60
- position: fixed;
61
- inset: 0;
62
- z-index: 1100;
63
- background: rgba(2, 6, 23, 0.7);
64
- display: flex;
65
- align-items: center;
66
- justify-content: center;
67
- padding: 1rem;
68
- }
69
-
70
- .sw-modal {
71
- width: min(100%, 56rem);
72
- max-height: calc(100dvh - 2rem);
73
- display: flex;
74
- flex-direction: column;
75
- overflow: hidden;
76
- position: relative;
77
- border-radius: 1rem;
78
- border: 1px solid var(--sw-color-border);
79
- background: var(--sw-color-surface);
80
- color: var(--sw-color-text);
81
- box-shadow: var(--sw-shadow-elevated);
82
- }
83
-
84
- .sw-modal-body {
85
- flex: 1;
86
- overflow-y: auto;
87
- overscroll-behavior: contain;
88
- padding: 1.25rem;
89
- }
90
-
91
- .sw-close {
92
- position: absolute;
93
- right: 0.75rem;
94
- top: 0.75rem;
95
- width: 2rem;
96
- height: 2rem;
97
- border-radius: 0.5rem;
98
- border: 1px solid var(--sw-color-border);
99
- background: transparent;
100
- }
101
-
102
- .sw-header h2 {
103
- margin: 0;
104
- font-size: 1.25rem;
105
- }
106
-
107
- .sw-header p {
108
- margin: 0.3rem 0 1rem;
109
- color: var(--sw-color-text-muted);
110
- }
111
-
112
- .sw-type-grid {
113
- display: grid;
114
- grid-template-columns: repeat(2, minmax(0, 1fr));
115
- gap: 0.75rem;
116
- }
117
-
118
- .sw-type-card {
119
- text-align: left;
120
- border: 2px solid var(--sw-color-border);
121
- border-radius: 0.75rem;
122
- background: #ffffff;
123
- padding: 0.85rem;
124
- display: grid;
125
- gap: 0.4rem;
126
- transition: border-color 150ms ease, background 150ms ease;
127
- }
128
-
129
- .sw-type-card:hover {
130
- border-color: var(--sw-color-primary);
131
- background: var(--sw-color-surface-muted);
132
- }
133
-
134
- .sw-type-card span {
135
- color: var(--sw-color-text-muted);
136
- font-size: 0.85rem;
137
- }
138
-
139
- .sw-form {
140
- display: grid;
141
- gap: 0.8rem;
142
- }
143
-
144
- .sw-field {
145
- display: grid;
146
- gap: 0.35rem;
147
- }
148
-
149
- .sw-field textarea,
150
- .sw-form input,
151
- .sw-form select {
152
- border: 1px solid var(--sw-color-border);
153
- border-radius: 0.5rem;
154
- padding: 0.6rem;
155
- font: inherit;
156
- }
157
-
158
- .sw-row {
159
- display: grid;
160
- grid-template-columns: repeat(2, minmax(0, 1fr));
161
- gap: 0.75rem;
162
- }
163
-
164
- .sw-section {
165
- border: 1px solid var(--sw-color-border);
166
- border-radius: 0.75rem;
167
- background: var(--sw-color-surface-muted);
168
- padding: 0.8rem;
169
- }
170
-
171
- .sw-section h3 {
172
- margin-top: 0;
173
- margin-bottom: 0.6rem;
174
- font-size: 1rem;
175
- }
176
-
177
- .sw-rating {
178
- display: grid;
179
- gap: 0.45rem;
180
- }
181
-
182
- .sw-rating-button {
183
- border: 1px solid var(--sw-color-border);
184
- border-radius: 0.3rem;
185
- background: transparent;
186
- color: #94a3b8;
187
- margin-right: 0.35rem;
188
- }
189
-
190
- .sw-rating-button.is-active {
191
- color: #f59e0b;
192
- border-color: #f59e0b;
193
- }
194
-
195
- .sw-diagnostics-note {
196
- border: 1px dashed var(--sw-color-border);
197
- border-radius: 0.55rem;
198
- font-size: 0.8rem;
199
- color: var(--sw-color-text-muted);
200
- padding: 0.65rem;
201
- }
202
-
203
- .sw-error {
204
- color: var(--sw-color-danger);
205
- margin: 0;
206
- }
207
-
208
- .sw-actions {
209
- display: flex;
210
- gap: 0.75rem;
211
- }
212
-
213
- .sw-actions button {
214
- flex: 1;
215
- border: 1px solid var(--sw-color-border);
216
- border-radius: 0.5rem;
217
- padding: 0.6rem;
218
- font: inherit;
219
- background: #ffffff;
220
- }
221
-
222
- .sw-actions button[type='submit'] {
223
- color: #ffffff;
224
- background: var(--sw-color-primary);
225
- border-color: var(--sw-color-primary);
226
- }
227
-
228
- .sw-actions button[type='submit']:hover {
229
- background: var(--sw-color-primary-hover);
230
- }
231
-
232
- .sw-actions button:disabled {
233
- opacity: 0.5;
234
- cursor: not-allowed;
235
- }
236
-
237
- .sw-success {
238
- text-align: center;
239
- padding: 3rem 1rem;
240
- }
241
-
242
- @media (max-width: 640px) {
243
- .sw-type-grid,
244
- .sw-row {
245
- grid-template-columns: 1fr;
246
- }
247
-
248
- .sw-launcher {
249
- right: 1rem;
250
- bottom: 1rem;
251
- }
252
- }
@@ -1,243 +0,0 @@
1
- :root {
2
- --sw-color-launcher-bg: #6d28d9;
3
- --sw-color-launcher-bg-hover: #5b21b6;
4
- --sw-color-launcher-border: #8b5cf6;
5
- --sw-color-surface: #ffffff;
6
- --sw-color-surface-muted: #f8fafc;
7
- --sw-color-text: #0f172a;
8
- --sw-color-text-muted: #475569;
9
- --sw-color-border: #cbd5e1;
10
- --sw-color-primary: #0f766e;
11
- --sw-color-primary-hover: #115e59;
12
- --sw-color-danger: #b91c1c;
13
- --sw-shadow-elevated: 0 20px 35px rgba(15, 23, 42, 0.25);
14
- }
15
-
16
- .sw-sr-only {
17
- border: 0;
18
- clip: rect(0, 0, 0, 0);
19
- height: 1px;
20
- margin: -1px;
21
- overflow: hidden;
22
- padding: 0;
23
- position: absolute;
24
- width: 1px;
25
- }
26
-
27
- .sw-launcher {
28
- position: fixed;
29
- right: 1.5rem;
30
- bottom: 1.5rem;
31
- z-index: 1000;
32
- display: inline-flex;
33
- align-items: center;
34
- gap: 0.5rem;
35
- border-radius: 999px;
36
- border: 2px solid var(--sw-color-launcher-border);
37
- background: var(--sw-color-launcher-bg);
38
- color: #ffffff;
39
- font-size: 0.875rem;
40
- font-weight: 700;
41
- padding: 0.625rem 1rem;
42
- box-shadow: 0 10px 24px rgba(76, 29, 149, 0.38);
43
- transition: transform 150ms ease, background 150ms ease;
44
- }
45
-
46
- .sw-launcher:hover {
47
- transform: scale(1.05);
48
- background: var(--sw-color-launcher-bg-hover);
49
- }
50
-
51
- .sw-launcher-icon {
52
- width: 1.25rem;
53
- height: 1.25rem;
54
- display: inline-flex;
55
- align-items: center;
56
- justify-content: center;
57
- }
58
-
59
- .sw-overlay {
60
- position: fixed;
61
- inset: 0;
62
- z-index: 1100;
63
- background: rgba(2, 6, 23, 0.7);
64
- display: grid;
65
- place-items: center;
66
- padding: 1rem;
67
- }
68
-
69
- .sw-modal {
70
- width: min(100%, 56rem);
71
- max-height: 92vh;
72
- overflow: auto;
73
- position: relative;
74
- border-radius: 1rem;
75
- border: 1px solid var(--sw-color-border);
76
- background: var(--sw-color-surface);
77
- color: var(--sw-color-text);
78
- padding: 1.25rem;
79
- box-shadow: var(--sw-shadow-elevated);
80
- }
81
-
82
- .sw-close {
83
- position: absolute;
84
- right: 0.75rem;
85
- top: 0.75rem;
86
- width: 2rem;
87
- height: 2rem;
88
- border-radius: 0.5rem;
89
- border: 1px solid var(--sw-color-border);
90
- background: transparent;
91
- }
92
-
93
- .sw-header h2 {
94
- margin: 0;
95
- font-size: 1.25rem;
96
- }
97
-
98
- .sw-header p {
99
- margin: 0.3rem 0 1rem;
100
- color: var(--sw-color-text-muted);
101
- }
102
-
103
- .sw-type-grid {
104
- display: grid;
105
- grid-template-columns: repeat(2, minmax(0, 1fr));
106
- gap: 0.75rem;
107
- }
108
-
109
- .sw-type-card {
110
- text-align: left;
111
- border: 2px solid var(--sw-color-border);
112
- border-radius: 0.75rem;
113
- background: #ffffff;
114
- padding: 0.85rem;
115
- display: grid;
116
- gap: 0.4rem;
117
- transition: border-color 150ms ease, background 150ms ease;
118
- }
119
-
120
- .sw-type-card:hover {
121
- border-color: var(--sw-color-primary);
122
- background: var(--sw-color-surface-muted);
123
- }
124
-
125
- .sw-type-card span {
126
- color: var(--sw-color-text-muted);
127
- font-size: 0.85rem;
128
- }
129
-
130
- .sw-form {
131
- display: grid;
132
- gap: 0.8rem;
133
- }
134
-
135
- .sw-field {
136
- display: grid;
137
- gap: 0.35rem;
138
- }
139
-
140
- .sw-field textarea,
141
- .sw-form input,
142
- .sw-form select {
143
- border: 1px solid var(--sw-color-border);
144
- border-radius: 0.5rem;
145
- padding: 0.6rem;
146
- font: inherit;
147
- }
148
-
149
- .sw-row {
150
- display: grid;
151
- grid-template-columns: repeat(2, minmax(0, 1fr));
152
- gap: 0.75rem;
153
- }
154
-
155
- .sw-section {
156
- border: 1px solid var(--sw-color-border);
157
- border-radius: 0.75rem;
158
- background: var(--sw-color-surface-muted);
159
- padding: 0.8rem;
160
- }
161
-
162
- .sw-section h3 {
163
- margin-top: 0;
164
- margin-bottom: 0.6rem;
165
- font-size: 1rem;
166
- }
167
-
168
- .sw-rating {
169
- display: grid;
170
- gap: 0.45rem;
171
- }
172
-
173
- .sw-rating-button {
174
- border: 1px solid var(--sw-color-border);
175
- border-radius: 0.3rem;
176
- background: transparent;
177
- color: #94a3b8;
178
- margin-right: 0.35rem;
179
- }
180
-
181
- .sw-rating-button.is-active {
182
- color: #f59e0b;
183
- border-color: #f59e0b;
184
- }
185
-
186
- .sw-diagnostics-note {
187
- border: 1px dashed var(--sw-color-border);
188
- border-radius: 0.55rem;
189
- font-size: 0.8rem;
190
- color: var(--sw-color-text-muted);
191
- padding: 0.65rem;
192
- }
193
-
194
- .sw-error {
195
- color: var(--sw-color-danger);
196
- margin: 0;
197
- }
198
-
199
- .sw-actions {
200
- display: flex;
201
- gap: 0.75rem;
202
- }
203
-
204
- .sw-actions button {
205
- flex: 1;
206
- border: 1px solid var(--sw-color-border);
207
- border-radius: 0.5rem;
208
- padding: 0.6rem;
209
- font: inherit;
210
- background: #ffffff;
211
- }
212
-
213
- .sw-actions button[type='submit'] {
214
- color: #ffffff;
215
- background: var(--sw-color-primary);
216
- border-color: var(--sw-color-primary);
217
- }
218
-
219
- .sw-actions button[type='submit']:hover {
220
- background: var(--sw-color-primary-hover);
221
- }
222
-
223
- .sw-actions button:disabled {
224
- opacity: 0.5;
225
- cursor: not-allowed;
226
- }
227
-
228
- .sw-success {
229
- text-align: center;
230
- padding: 3rem 1rem;
231
- }
232
-
233
- @media (max-width: 640px) {
234
- .sw-type-grid,
235
- .sw-row {
236
- grid-template-columns: 1fr;
237
- }
238
-
239
- .sw-launcher {
240
- right: 1rem;
241
- bottom: 1rem;
242
- }
243
- }
@@ -1,247 +0,0 @@
1
- :root {
2
- --sw-color-launcher-bg: #6d28d9;
3
- --sw-color-launcher-bg-hover: #5b21b6;
4
- --sw-color-launcher-border: #8b5cf6;
5
- --sw-color-surface: #ffffff;
6
- --sw-color-surface-muted: #f8fafc;
7
- --sw-color-text: #0f172a;
8
- --sw-color-text-muted: #475569;
9
- --sw-color-border: #cbd5e1;
10
- --sw-color-primary: #0f766e;
11
- --sw-color-primary-hover: #115e59;
12
- --sw-color-danger: #b91c1c;
13
- --sw-shadow-elevated: 0 20px 35px rgba(15, 23, 42, 0.25);
14
- }
15
-
16
- .sw-sr-only {
17
- border: 0;
18
- clip: rect(0, 0, 0, 0);
19
- height: 1px;
20
- margin: -1px;
21
- overflow: hidden;
22
- padding: 0;
23
- position: absolute;
24
- width: 1px;
25
- }
26
-
27
- .sw-launcher {
28
- position: fixed;
29
- right: 1.5rem;
30
- bottom: 1.5rem;
31
- z-index: 1000;
32
- display: inline-flex;
33
- align-items: center;
34
- gap: 0.5rem;
35
- border-radius: 999px;
36
- border: 2px solid var(--sw-color-launcher-border);
37
- background: var(--sw-color-launcher-bg);
38
- color: #ffffff;
39
- font-size: 0.875rem;
40
- font-weight: 700;
41
- padding: 0.625rem 1rem;
42
- box-shadow: 0 10px 24px rgba(76, 29, 149, 0.38);
43
- transition: transform 150ms ease, background 150ms ease;
44
- }
45
-
46
- .sw-launcher:hover {
47
- transform: scale(1.05);
48
- background: var(--sw-color-launcher-bg-hover);
49
- }
50
-
51
- .sw-launcher-icon {
52
- width: 1.25rem;
53
- height: 1.25rem;
54
- display: inline-flex;
55
- align-items: center;
56
- justify-content: center;
57
- }
58
-
59
- .sw-overlay {
60
- position: fixed;
61
- inset: 0;
62
- z-index: 1100;
63
- background: rgba(2, 6, 23, 0.7);
64
- overflow-y: auto;
65
- }
66
-
67
- .sw-modal-wrapper {
68
- display: flex;
69
- min-height: 100%;
70
- align-items: center;
71
- justify-content: center;
72
- padding: 1rem;
73
- }
74
-
75
- .sw-modal {
76
- width: min(100%, 56rem);
77
- position: relative;
78
- border-radius: 1rem;
79
- border: 1px solid var(--sw-color-border);
80
- background: var(--sw-color-surface);
81
- color: var(--sw-color-text);
82
- padding: 1.25rem;
83
- box-shadow: var(--sw-shadow-elevated);
84
- }
85
-
86
- .sw-close {
87
- position: absolute;
88
- right: 0.75rem;
89
- top: 0.75rem;
90
- width: 2rem;
91
- height: 2rem;
92
- border-radius: 0.5rem;
93
- border: 1px solid var(--sw-color-border);
94
- background: transparent;
95
- }
96
-
97
- .sw-header h2 {
98
- margin: 0;
99
- font-size: 1.25rem;
100
- }
101
-
102
- .sw-header p {
103
- margin: 0.3rem 0 1rem;
104
- color: var(--sw-color-text-muted);
105
- }
106
-
107
- .sw-type-grid {
108
- display: grid;
109
- grid-template-columns: repeat(2, minmax(0, 1fr));
110
- gap: 0.75rem;
111
- }
112
-
113
- .sw-type-card {
114
- text-align: left;
115
- border: 2px solid var(--sw-color-border);
116
- border-radius: 0.75rem;
117
- background: #ffffff;
118
- padding: 0.85rem;
119
- display: grid;
120
- gap: 0.4rem;
121
- transition: border-color 150ms ease, background 150ms ease;
122
- }
123
-
124
- .sw-type-card:hover {
125
- border-color: var(--sw-color-primary);
126
- background: var(--sw-color-surface-muted);
127
- }
128
-
129
- .sw-type-card span {
130
- color: var(--sw-color-text-muted);
131
- font-size: 0.85rem;
132
- }
133
-
134
- .sw-form {
135
- display: grid;
136
- gap: 0.8rem;
137
- }
138
-
139
- .sw-field {
140
- display: grid;
141
- gap: 0.35rem;
142
- }
143
-
144
- .sw-field textarea,
145
- .sw-form input,
146
- .sw-form select {
147
- border: 1px solid var(--sw-color-border);
148
- border-radius: 0.5rem;
149
- padding: 0.6rem;
150
- font: inherit;
151
- }
152
-
153
- .sw-row {
154
- display: grid;
155
- grid-template-columns: repeat(2, minmax(0, 1fr));
156
- gap: 0.75rem;
157
- }
158
-
159
- .sw-section {
160
- border: 1px solid var(--sw-color-border);
161
- border-radius: 0.75rem;
162
- background: var(--sw-color-surface-muted);
163
- padding: 0.8rem;
164
- }
165
-
166
- .sw-section h3 {
167
- margin-top: 0;
168
- margin-bottom: 0.6rem;
169
- font-size: 1rem;
170
- }
171
-
172
- .sw-rating {
173
- display: grid;
174
- gap: 0.45rem;
175
- }
176
-
177
- .sw-rating-button {
178
- border: 1px solid var(--sw-color-border);
179
- border-radius: 0.3rem;
180
- background: transparent;
181
- color: #94a3b8;
182
- margin-right: 0.35rem;
183
- }
184
-
185
- .sw-rating-button.is-active {
186
- color: #f59e0b;
187
- border-color: #f59e0b;
188
- }
189
-
190
- .sw-diagnostics-note {
191
- border: 1px dashed var(--sw-color-border);
192
- border-radius: 0.55rem;
193
- font-size: 0.8rem;
194
- color: var(--sw-color-text-muted);
195
- padding: 0.65rem;
196
- }
197
-
198
- .sw-error {
199
- color: var(--sw-color-danger);
200
- margin: 0;
201
- }
202
-
203
- .sw-actions {
204
- display: flex;
205
- gap: 0.75rem;
206
- }
207
-
208
- .sw-actions button {
209
- flex: 1;
210
- border: 1px solid var(--sw-color-border);
211
- border-radius: 0.5rem;
212
- padding: 0.6rem;
213
- font: inherit;
214
- background: #ffffff;
215
- }
216
-
217
- .sw-actions button[type='submit'] {
218
- color: #ffffff;
219
- background: var(--sw-color-primary);
220
- border-color: var(--sw-color-primary);
221
- }
222
-
223
- .sw-actions button[type='submit']:hover {
224
- background: var(--sw-color-primary-hover);
225
- }
226
-
227
- .sw-actions button:disabled {
228
- opacity: 0.5;
229
- cursor: not-allowed;
230
- }
231
-
232
- .sw-success {
233
- text-align: center;
234
- padding: 3rem 1rem;
235
- }
236
-
237
- @media (max-width: 640px) {
238
- .sw-type-grid,
239
- .sw-row {
240
- grid-template-columns: 1fr;
241
- }
242
-
243
- .sw-launcher {
244
- right: 1rem;
245
- bottom: 1rem;
246
- }
247
- }