@skygraph/styles 0.0.0-placeholder.0 → 0.1.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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +92 -6
  3. package/components/autocomplete.css +33 -0
  4. package/components/avatar.css +37 -0
  5. package/components/badge.css +102 -0
  6. package/components/breadcrumb.css +29 -0
  7. package/components/button.css +181 -0
  8. package/components/calendar.css +408 -0
  9. package/components/carousel.css +102 -0
  10. package/components/cascader.css +354 -0
  11. package/components/charts.css +408 -0
  12. package/components/checkbox.css +29 -0
  13. package/components/collapse.css +166 -0
  14. package/components/colorpicker.css +252 -0
  15. package/components/context-menu.css +95 -0
  16. package/components/dashboard.css +299 -0
  17. package/components/datagrid.css +86 -0
  18. package/components/datepicker.css +601 -0
  19. package/components/descriptions.css +82 -0
  20. package/components/diagram.css +422 -0
  21. package/components/drawer.css +103 -0
  22. package/components/dropdown.css +93 -0
  23. package/components/empty.css +25 -0
  24. package/components/event-timeline.css +100 -0
  25. package/components/field.css +35 -0
  26. package/components/form.css +115 -0
  27. package/components/gantt.css +161 -0
  28. package/components/inline-edit.css +113 -0
  29. package/components/input-group.css +79 -0
  30. package/components/input-number.css +76 -0
  31. package/components/input-password.css +104 -0
  32. package/components/input.css +110 -0
  33. package/components/list.css +357 -0
  34. package/components/mentions.css +54 -0
  35. package/components/menu.css +309 -0
  36. package/components/modal.css +77 -0
  37. package/components/notification.css +128 -0
  38. package/components/pagination.css +162 -0
  39. package/components/pin-input.css +71 -0
  40. package/components/popconfirm.css +95 -0
  41. package/components/progress.css +116 -0
  42. package/components/radio.css +38 -0
  43. package/components/rate.css +34 -0
  44. package/components/resource-calendar.css +219 -0
  45. package/components/result.css +45 -0
  46. package/components/schema-form-editor.css +425 -0
  47. package/components/search-input.css +112 -0
  48. package/components/segmented.css +76 -0
  49. package/components/select.css +172 -0
  50. package/components/skeleton.css +68 -0
  51. package/components/slider.css +51 -0
  52. package/components/spin.css +86 -0
  53. package/components/steps.css +185 -0
  54. package/components/switch.css +69 -0
  55. package/components/table.css +984 -0
  56. package/components/tabs.css +117 -0
  57. package/components/tag-input.css +94 -0
  58. package/components/tag.css +61 -0
  59. package/components/textarea.css +22 -0
  60. package/components/timeline.css +169 -0
  61. package/components/timepicker.css +213 -0
  62. package/components/tooltip.css +91 -0
  63. package/components/transfer.css +140 -0
  64. package/components/tree.css +574 -0
  65. package/components/treeselect.css +219 -0
  66. package/components/upload.css +124 -0
  67. package/index.css +69 -3
  68. package/index.d.ts +9 -0
  69. package/package.json +102 -18
  70. package/print.css +88 -0
  71. package/reset.css +17 -0
  72. package/themes/dark.css +17 -0
  73. package/themes/default.css +14 -0
  74. package/tokens.css +312 -0
  75. package/transitions.css +158 -0
@@ -0,0 +1,71 @@
1
+ /* PinInput */
2
+ .sg-pin-input {
3
+ display: inline-flex;
4
+ gap: var(--sg-padding-sm);
5
+ }
6
+
7
+ .sg-pin-input-cell {
8
+ width: var(--sg-height-md);
9
+ height: var(--sg-height-md);
10
+ text-align: center;
11
+ font-size: var(--sg-font-size-lg);
12
+ font-family: inherit;
13
+ font-weight: 600;
14
+ color: var(--sg-color-text);
15
+ background: var(--sg-color-bg-container);
16
+ border: 1px solid var(--sg-color-border);
17
+ border-radius: var(--sg-border-radius);
18
+ outline: none;
19
+ caret-color: var(--sg-color-primary);
20
+ transition: border-color var(--sg-transition-duration) var(--sg-transition-timing),
21
+ box-shadow var(--sg-transition-duration) var(--sg-transition-timing);
22
+ }
23
+
24
+ .sg-pin-input-cell::placeholder {
25
+ color: var(--sg-color-text-quaternary);
26
+ font-weight: 400;
27
+ }
28
+
29
+ .sg-pin-input-cell:hover {
30
+ border-color: var(--sg-color-primary-hover);
31
+ }
32
+
33
+ .sg-pin-input-cell:focus {
34
+ border-color: var(--sg-color-primary);
35
+ box-shadow: 0 0 0 2px var(--sg-color-primary-bg);
36
+ }
37
+
38
+ .sg-pin-input-cell-filled {
39
+ border-color: var(--sg-color-primary);
40
+ }
41
+
42
+ .sg-pin-input-cell:disabled {
43
+ background: var(--sg-color-bg-disabled);
44
+ color: var(--sg-color-text-disabled);
45
+ cursor: not-allowed;
46
+ }
47
+
48
+ /* Sizes */
49
+ .sg-pin-input-cell-small {
50
+ width: var(--sg-height-sm);
51
+ height: var(--sg-height-sm);
52
+ font-size: var(--sg-font-size);
53
+ }
54
+
55
+ .sg-pin-input-cell-large {
56
+ width: var(--sg-height-lg);
57
+ height: var(--sg-height-lg);
58
+ font-size: var(--sg-font-size-xl);
59
+ }
60
+
61
+ .sg-pin-input-small {
62
+ gap: var(--sg-padding-xs);
63
+ }
64
+
65
+ .sg-pin-input-large {
66
+ gap: var(--sg-padding-md);
67
+ }
68
+
69
+ .sg-pin-input-disabled {
70
+ opacity: 0.65;
71
+ }
@@ -0,0 +1,95 @@
1
+ .sg-popconfirm-wrapper {
2
+ position: relative;
3
+ display: inline-block;
4
+ }
5
+
6
+ .sg-popconfirm {
7
+ position: absolute;
8
+ z-index: 1030;
9
+ min-width: 200px;
10
+ }
11
+
12
+ .sg-popconfirm-top {
13
+ bottom: calc(100% + 8px);
14
+ left: 50%;
15
+ transform: translateX(-50%);
16
+ }
17
+
18
+ .sg-popconfirm-bottom {
19
+ top: calc(100% + 8px);
20
+ left: 50%;
21
+ transform: translateX(-50%);
22
+ }
23
+
24
+ .sg-popconfirm-left {
25
+ right: calc(100% + 8px);
26
+ top: 50%;
27
+ transform: translateY(-50%);
28
+ }
29
+
30
+ .sg-popconfirm-right {
31
+ left: calc(100% + 8px);
32
+ top: 50%;
33
+ transform: translateY(-50%);
34
+ }
35
+
36
+ .sg-popconfirm-arrow {
37
+ position: absolute;
38
+ width: 8px;
39
+ height: 8px;
40
+ background: var(--sg-color-bg-elevated);
41
+ border: 1px solid var(--sg-color-border-secondary);
42
+ transform: rotate(45deg);
43
+ }
44
+
45
+ .sg-popconfirm-top .sg-popconfirm-arrow {
46
+ bottom: -5px;
47
+ left: 50%;
48
+ margin-left: -4px;
49
+ border-top: none;
50
+ border-left: none;
51
+ }
52
+
53
+ .sg-popconfirm-bottom .sg-popconfirm-arrow {
54
+ top: -5px;
55
+ left: 50%;
56
+ margin-left: -4px;
57
+ border-bottom: none;
58
+ border-right: none;
59
+ }
60
+
61
+ .sg-popconfirm-inner {
62
+ background: var(--sg-color-bg-elevated);
63
+ border-radius: var(--sg-border-radius-lg);
64
+ box-shadow: var(--sg-shadow-lg);
65
+ border: 1px solid var(--sg-color-border-secondary);
66
+ padding: var(--sg-padding-md);
67
+ }
68
+
69
+ .sg-popconfirm-title {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: var(--sg-padding-sm);
73
+ font-size: var(--sg-font-size);
74
+ font-weight: 500;
75
+ color: var(--sg-color-text);
76
+ }
77
+
78
+ .sg-popconfirm-icon {
79
+ color: var(--sg-color-warning);
80
+ font-size: var(--sg-font-size-lg);
81
+ }
82
+
83
+ .sg-popconfirm-description {
84
+ font-size: var(--sg-font-size-sm);
85
+ color: var(--sg-color-text-secondary);
86
+ margin-top: var(--sg-margin-xs);
87
+ margin-left: 24px;
88
+ }
89
+
90
+ .sg-popconfirm-buttons {
91
+ display: flex;
92
+ justify-content: flex-end;
93
+ gap: var(--sg-padding-sm);
94
+ margin-top: var(--sg-padding-sm);
95
+ }
@@ -0,0 +1,116 @@
1
+ /* Line progress */
2
+ .sg-progress-line {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: var(--sg-padding-sm);
6
+ width: 100%;
7
+ }
8
+
9
+ .sg-progress-outer {
10
+ flex: 1;
11
+ min-width: 0;
12
+ }
13
+
14
+ .sg-progress-inner {
15
+ background: var(--sg-color-bg-hover);
16
+ border-radius: 100px;
17
+ overflow: hidden;
18
+ }
19
+
20
+ .sg-progress-bg {
21
+ height: 100%;
22
+ border-radius: 100px;
23
+ background: var(--sg-color-primary);
24
+ /*
25
+ * We deliberately avoid `transition: width` here. The previous transition
26
+ * would interpolate from the layout-default `width: 0` to the inline
27
+ * `width: X%`, which made the bar look empty until the animation finished —
28
+ * users perceived it as "no progress bar, just numbers" on initial paint.
29
+ * Width now snaps to its target value; live updates (e.g. demo dynamic %)
30
+ * still re-paint in the same frame.
31
+ */
32
+ }
33
+
34
+ .sg-progress-text {
35
+ flex-shrink: 0;
36
+ font-size: var(--sg-font-size-sm);
37
+ color: var(--sg-color-text-secondary);
38
+ min-width: 36px;
39
+ text-align: right;
40
+ }
41
+
42
+ /* Status colors */
43
+ .sg-progress-success .sg-progress-bg {
44
+ background: var(--sg-color-success);
45
+ }
46
+ .sg-progress-error .sg-progress-bg {
47
+ background: var(--sg-color-error);
48
+ }
49
+
50
+ .sg-progress-success .sg-progress-text {
51
+ color: var(--sg-color-success);
52
+ }
53
+ .sg-progress-error .sg-progress-text {
54
+ color: var(--sg-color-error);
55
+ }
56
+
57
+ /* Active animation */
58
+ .sg-progress-active .sg-progress-bg {
59
+ position: relative;
60
+ }
61
+
62
+ .sg-progress-active .sg-progress-bg::after {
63
+ content: '';
64
+ position: absolute;
65
+ inset: 0;
66
+ border-radius: inherit;
67
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
68
+ animation: sg-progress-active-anim 2s ease-in-out infinite;
69
+ }
70
+
71
+ @keyframes sg-progress-active-anim {
72
+ 0% {
73
+ transform: translateX(-100%);
74
+ }
75
+ 100% {
76
+ transform: translateX(100%);
77
+ }
78
+ }
79
+
80
+ /* Circle progress */
81
+ .sg-progress-circle {
82
+ position: relative;
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ }
87
+
88
+ .sg-progress-circle-trail {
89
+ stroke: var(--sg-color-bg-hover);
90
+ }
91
+
92
+ .sg-progress-circle-path {
93
+ stroke: var(--sg-color-primary);
94
+ transition: stroke-dashoffset var(--sg-transition-duration) var(--sg-transition-timing);
95
+ }
96
+
97
+ .sg-progress-success .sg-progress-circle-path {
98
+ stroke: var(--sg-color-success);
99
+ }
100
+ .sg-progress-error .sg-progress-circle-path {
101
+ stroke: var(--sg-color-error);
102
+ }
103
+
104
+ .sg-progress-circle-text {
105
+ position: absolute;
106
+ font-size: var(--sg-font-size-xl);
107
+ font-weight: 500;
108
+ color: var(--sg-color-text);
109
+ }
110
+
111
+ .sg-progress-success .sg-progress-circle-text {
112
+ color: var(--sg-color-success);
113
+ }
114
+ .sg-progress-error .sg-progress-circle-text {
115
+ color: var(--sg-color-error);
116
+ }
@@ -0,0 +1,38 @@
1
+ .sg-radio-group {
2
+ display: flex;
3
+ gap: var(--sg-padding-md);
4
+ }
5
+
6
+ .sg-radio-group-vertical {
7
+ flex-direction: column;
8
+ }
9
+
10
+ .sg-radio {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ gap: var(--sg-padding-xs);
14
+ cursor: pointer;
15
+ font-size: var(--sg-font-size);
16
+ color: var(--sg-color-text);
17
+ }
18
+
19
+ .sg-radio-disabled {
20
+ color: var(--sg-color-text-disabled);
21
+ cursor: not-allowed;
22
+ }
23
+
24
+ .sg-radio-input {
25
+ width: 16px;
26
+ height: 16px;
27
+ margin: 0;
28
+ accent-color: var(--sg-color-primary);
29
+ cursor: inherit;
30
+ }
31
+
32
+ .sg-radio-label {
33
+ user-select: none;
34
+ }
35
+
36
+ .sg-radio-group-loading {
37
+ --sg-spin-color: var(--sg-color-text-tertiary);
38
+ }
@@ -0,0 +1,34 @@
1
+ .sg-rate {
2
+ /* Component-local variable: empty (inactive) symbol opacity. Colour
3
+ * emoji ignore CSS `color`, so opacity is the only signal that
4
+ * separates active vs inactive characters. Override globally for
5
+ * monochrome glyphs by setting it to `1`. */
6
+ --sg-rate-symbol-empty-opacity: 0.42;
7
+
8
+ display: inline-flex;
9
+ gap: var(--sg-padding-xs);
10
+ font-size: var(--sg-font-size-xl);
11
+ }
12
+
13
+ .sg-rate-disabled {
14
+ pointer-events: none;
15
+ opacity: 0.5;
16
+ }
17
+
18
+ .sg-rate-star {
19
+ cursor: pointer;
20
+ color: var(--sg-color-border);
21
+ opacity: var(--sg-rate-symbol-empty-opacity);
22
+ transition:
23
+ color var(--sg-transition-duration),
24
+ opacity var(--sg-transition-duration),
25
+ transform var(--sg-transition-duration);
26
+ user-select: none;
27
+ }
28
+
29
+ .sg-rate-star:hover { transform: scale(1.15); }
30
+ .sg-rate-star-full {
31
+ color: var(--sg-color-star);
32
+ opacity: 1;
33
+ }
34
+ .sg-rate-star-half { color: var(--sg-color-star); opacity: 0.5; }
@@ -0,0 +1,219 @@
1
+ /* Resource Calendar — shifts / bookings per resource lane.
2
+ *
3
+ * All colours route through `--sg-*` global tokens. Component-local
4
+ * variables are scoped under `.sg-rcal` so external themes can
5
+ * override them per-instance without bleeding to other components.
6
+ */
7
+
8
+ .sg-rcal {
9
+ /* Component-local tokens — derived from global ones, redirect freely. */
10
+ --sg-rcal-availability-off-bg: var(--sg-color-bg-disabled);
11
+ --sg-rcal-conflict-color: var(--sg-color-error);
12
+ --sg-rcal-conflict-bg: var(--sg-color-error-bg);
13
+ --sg-rcal-tentative-bg: var(--sg-color-primary-bg);
14
+ --sg-rcal-tentative-border: var(--sg-color-primary);
15
+ --sg-rcal-confirmed-bg: var(--sg-color-primary);
16
+ --sg-rcal-confirmed-text: var(--sg-color-white);
17
+ --sg-rcal-marker-size: 10px;
18
+
19
+ background: var(--sg-color-bg);
20
+ border: 1px solid var(--sg-color-border);
21
+ border-radius: var(--sg-border-radius);
22
+ font-size: var(--sg-font-size);
23
+ color: var(--sg-color-text);
24
+ font-family: inherit;
25
+ }
26
+
27
+ .sg-rcal-sidebar {
28
+ background: var(--sg-color-bg-container);
29
+ border-right: 1px solid var(--sg-color-border);
30
+ overflow: hidden;
31
+ }
32
+
33
+ .sg-rcal-sidebar-header {
34
+ border-bottom: 1px solid var(--sg-color-border);
35
+ background: var(--sg-color-bg-elevated);
36
+ }
37
+
38
+ .sg-rcal-sidebar-row {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: var(--sg-padding-sm);
42
+ padding: 0 var(--sg-padding-md);
43
+ border-bottom: 1px solid var(--sg-color-border-secondary);
44
+ color: var(--sg-color-text);
45
+ font-size: var(--sg-font-size-sm);
46
+ white-space: nowrap;
47
+ overflow: hidden;
48
+ text-overflow: ellipsis;
49
+ }
50
+
51
+ .sg-rcal-sidebar-marker {
52
+ display: inline-block;
53
+ flex-shrink: 0;
54
+ width: var(--sg-rcal-marker-size);
55
+ height: var(--sg-rcal-marker-size);
56
+ border-radius: 50%;
57
+ background: var(--sg-color-primary);
58
+ }
59
+
60
+ .sg-rcal-sidebar-name {
61
+ flex: 1;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
64
+ }
65
+
66
+ .sg-rcal-sidebar-capacity {
67
+ color: var(--sg-color-text-tertiary);
68
+ font-size: var(--sg-font-size-sm);
69
+ }
70
+
71
+ .sg-rcal-main {
72
+ background: var(--sg-color-bg);
73
+ position: relative;
74
+ }
75
+
76
+ .sg-rcal-header {
77
+ background: var(--sg-color-bg-elevated);
78
+ border-bottom: 1px solid var(--sg-color-border);
79
+ }
80
+
81
+ .sg-rcal-tick {
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: flex-start;
85
+ padding: 0 var(--sg-padding-xs);
86
+ font-size: var(--sg-font-size-sm);
87
+ color: var(--sg-color-text-secondary);
88
+ border-right: 1px solid var(--sg-color-border-secondary);
89
+ box-sizing: border-box;
90
+ }
91
+
92
+ .sg-rcal-row {
93
+ /* Lane separators are rendered via the new `--sg-rcal-lane-divider`
94
+ * token, which is currently aliased to `--sg-color-border-secondary`
95
+ * but lets a theme dial it down independently when bookings get
96
+ * dense. */
97
+ border-bottom: 1px solid var(--sg-rcal-lane-divider);
98
+ }
99
+
100
+ .sg-rcal-row:nth-child(even) {
101
+ background: var(--sg-color-bg-secondary);
102
+ }
103
+
104
+ .sg-rcal-slot {
105
+ /* Vertical divider — kept softer than the row separator so the
106
+ * grid feels horizontal-first (booking rows read left-to-right). */
107
+ border-right: 1px solid var(--sg-rcal-lane-divider);
108
+ box-sizing: border-box;
109
+ }
110
+
111
+ .sg-rcal-availability-off {
112
+ background-color: var(--sg-rcal-availability-off-bg);
113
+ background-image: repeating-linear-gradient(
114
+ 45deg,
115
+ transparent,
116
+ transparent 6px,
117
+ var(--sg-color-border-secondary) 6px,
118
+ var(--sg-color-border-secondary) 7px
119
+ );
120
+ opacity: 0.55;
121
+ }
122
+
123
+ .sg-rcal-assignment {
124
+ background: var(--sg-rcal-tentative-bg);
125
+ border: 1px solid var(--sg-rcal-tentative-border);
126
+ color: var(--sg-color-text);
127
+ border-radius: var(--sg-border-radius-sm);
128
+ display: flex;
129
+ align-items: center;
130
+ padding: 0 var(--sg-padding-xs);
131
+ font-size: var(--sg-font-size-sm);
132
+ white-space: nowrap;
133
+ overflow: hidden;
134
+ /* Reuse the gantt-bar shadow so resource bookings and gantt task bars
135
+ * feel like the same primitive rendered in two contexts. */
136
+ box-shadow: var(--sg-gantt-bar-shadow);
137
+ box-sizing: border-box;
138
+ transition:
139
+ box-shadow var(--sg-transition-medium),
140
+ transform var(--sg-transition-medium),
141
+ filter var(--sg-transition-fast);
142
+ }
143
+
144
+ .sg-rcal-assignment:hover {
145
+ box-shadow: var(--sg-gantt-bar-shadow-hover);
146
+ transform: translateY(-1px);
147
+ filter: brightness(1.04);
148
+ }
149
+
150
+ .sg-rcal-assignment-tentative {
151
+ background: var(--sg-rcal-tentative-bg);
152
+ border-color: var(--sg-rcal-tentative-border);
153
+ border-style: dashed;
154
+ }
155
+
156
+ .sg-rcal-assignment-confirmed {
157
+ background: var(--sg-rcal-confirmed-bg);
158
+ border-color: var(--sg-rcal-confirmed-bg);
159
+ color: var(--sg-rcal-confirmed-text);
160
+ }
161
+
162
+ .sg-rcal-assignment-conflict {
163
+ /* The conflict overlay now layers a flat tint underneath the diagonal
164
+ * stripes (via `--sg-rcal-conflict-overlay-bg`) so the warning reads
165
+ * even on small bookings where the stripe pattern barely shows. */
166
+ background-color: var(--sg-rcal-conflict-overlay-bg);
167
+ background-image: repeating-linear-gradient(
168
+ 45deg,
169
+ transparent,
170
+ transparent 5px,
171
+ var(--sg-rcal-conflict-color) 5px,
172
+ var(--sg-rcal-conflict-color) 6px
173
+ );
174
+ border: 2px solid var(--sg-rcal-conflict-color);
175
+ color: var(--sg-color-text);
176
+ /* Conflict bookings should never feel "promoted" by hover lift,
177
+ * so we suppress the parent transform. The brightness boost still
178
+ * communicates interactivity. */
179
+ box-shadow: 0 0 0 1px var(--sg-rcal-conflict-color);
180
+ }
181
+
182
+ .sg-rcal-assignment-conflict:hover {
183
+ transform: none;
184
+ box-shadow:
185
+ 0 0 0 1px var(--sg-rcal-conflict-color),
186
+ 0 2px 6px rgba(245, 34, 45, 0.20);
187
+ }
188
+
189
+ .sg-rcal-assignment-draggable {
190
+ cursor: grab;
191
+ }
192
+
193
+ .sg-rcal-assignment-draggable:active {
194
+ cursor: grabbing;
195
+ }
196
+
197
+ .sg-rcal-assignment-title {
198
+ text-overflow: ellipsis;
199
+ overflow: hidden;
200
+ }
201
+
202
+ .sg-rcal-assignment-resize-start,
203
+ .sg-rcal-assignment-resize-end {
204
+ background: transparent;
205
+ opacity: 0;
206
+ transition: opacity 120ms ease;
207
+ }
208
+
209
+ .sg-rcal-assignment:hover .sg-rcal-assignment-resize-start,
210
+ .sg-rcal-assignment:hover .sg-rcal-assignment-resize-end {
211
+ opacity: 0.6;
212
+ }
213
+
214
+ .sg-rcal-assignment-resize-start:hover,
215
+ .sg-rcal-assignment-resize-end:hover,
216
+ .sg-rcal-assignment-resize-start:focus-visible,
217
+ .sg-rcal-assignment-resize-end:focus-visible {
218
+ opacity: 1;
219
+ }
@@ -0,0 +1,45 @@
1
+ .sg-result {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ padding: var(--sg-padding-xl) var(--sg-padding-lg);
6
+ text-align: center;
7
+ }
8
+
9
+ .sg-result-icon {
10
+ margin-bottom: var(--sg-margin-lg);
11
+ line-height: 1;
12
+ }
13
+
14
+ .sg-result-icon svg {
15
+ display: block;
16
+ }
17
+
18
+ .sg-result-title {
19
+ font-size: var(--sg-font-size-xl);
20
+ font-weight: 600;
21
+ color: var(--sg-color-text);
22
+ line-height: 1.4;
23
+ margin-bottom: var(--sg-margin-sm);
24
+ }
25
+
26
+ .sg-result-subtitle {
27
+ font-size: var(--sg-font-size);
28
+ color: var(--sg-color-text-secondary);
29
+ line-height: var(--sg-line-height);
30
+ margin-bottom: var(--sg-margin-lg);
31
+ }
32
+
33
+ .sg-result-extra {
34
+ display: flex;
35
+ gap: var(--sg-padding-sm);
36
+ justify-content: center;
37
+ margin-bottom: var(--sg-margin-lg);
38
+ }
39
+
40
+ .sg-result-content {
41
+ width: 100%;
42
+ padding: var(--sg-padding-lg);
43
+ background: var(--sg-color-bg-secondary);
44
+ border-radius: var(--sg-border-radius);
45
+ }