@skygraph/styles 0.0.0-placeholder.0 → 0.2.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 +114 -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 +435 -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 +166 -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 +185 -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 +95 -0
  43. package/components/rate.css +34 -0
  44. package/components/resource-calendar.css +224 -0
  45. package/components/result.css +45 -0
  46. package/components/schema-form-editor.css +433 -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 +75 -0
  55. package/components/table.css +1023 -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,95 @@
1
+ /* Radio — custom painted dot on top of a visually-hidden native input.
2
+ *
3
+ * Like Checkbox, the native `<input type="radio">` stays in the DOM for
4
+ * keyboard / form / a11y but is visually hidden. `.sg-radio-box` paints
5
+ * the circle so demos can rebrand through `--sg-radio-*` tokens without
6
+ * fighting `accent-color` limitations across browsers. */
7
+
8
+ .sg-radio-group {
9
+ display: flex;
10
+ gap: var(--sg-padding-md);
11
+ }
12
+
13
+ .sg-radio-group-vertical {
14
+ flex-direction: column;
15
+ }
16
+
17
+ .sg-radio {
18
+ --sg-radio-size: 16px;
19
+ --sg-radio-border: var(--sg-color-border);
20
+ --sg-radio-border-hover: var(--sg-color-primary);
21
+ --sg-radio-bg: var(--sg-color-bg);
22
+ --sg-radio-bg-checked: var(--sg-color-primary);
23
+ --sg-radio-dot-color: var(--sg-color-white);
24
+
25
+ position: relative;
26
+ display: inline-flex;
27
+ align-items: center;
28
+ gap: var(--sg-padding-xs);
29
+ cursor: pointer;
30
+ font-size: var(--sg-font-size);
31
+ color: var(--sg-color-text);
32
+ line-height: var(--sg-line-height);
33
+ }
34
+
35
+ .sg-radio-disabled {
36
+ color: var(--sg-color-text-disabled);
37
+ cursor: not-allowed;
38
+ }
39
+
40
+ .sg-radio-input {
41
+ position: absolute;
42
+ width: var(--sg-radio-size);
43
+ height: var(--sg-radio-size);
44
+ margin: 0;
45
+ opacity: 0;
46
+ pointer-events: none;
47
+ }
48
+
49
+ .sg-radio-box {
50
+ position: relative;
51
+ flex-shrink: 0;
52
+ display: inline-block;
53
+ width: var(--sg-radio-size);
54
+ height: var(--sg-radio-size);
55
+ border: 1px solid var(--sg-radio-border);
56
+ border-radius: 50%;
57
+ background: var(--sg-radio-bg);
58
+ transition:
59
+ background var(--sg-transition-duration) var(--sg-transition-timing),
60
+ border-color var(--sg-transition-duration) var(--sg-transition-timing);
61
+ }
62
+
63
+ .sg-radio:hover .sg-radio-box {
64
+ border-color: var(--sg-radio-border-hover);
65
+ }
66
+
67
+ .sg-radio-input:focus-visible ~ .sg-radio-box {
68
+ outline: 2px solid var(--sg-color-primary);
69
+ outline-offset: 2px;
70
+ }
71
+
72
+ .sg-radio-input:checked ~ .sg-radio-box {
73
+ background: var(--sg-radio-bg-checked);
74
+ border-color: var(--sg-radio-bg-checked);
75
+ }
76
+
77
+ .sg-radio-input:checked ~ .sg-radio-box::after {
78
+ content: '';
79
+ position: absolute;
80
+ top: 50%;
81
+ left: 50%;
82
+ width: 6px;
83
+ height: 6px;
84
+ border-radius: 50%;
85
+ background: var(--sg-radio-dot-color);
86
+ transform: translate(-50%, -50%);
87
+ }
88
+
89
+ .sg-radio-label {
90
+ user-select: none;
91
+ }
92
+
93
+ .sg-radio-group-loading {
94
+ --sg-spin-color: var(--sg-color-text-tertiary);
95
+ }
@@ -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,224 @@
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
+ /* Clip absolutely positioned blocks (assignments / ticks) so they
75
+ * can't bleed onto the sidebar when their dates fall outside the
76
+ * visible `range`. Interactive drag also clamps to range, so this
77
+ * is a safety net for props-supplied out-of-range assignments. */
78
+ overflow: hidden;
79
+ }
80
+
81
+ .sg-rcal-header {
82
+ background: var(--sg-color-bg-elevated);
83
+ border-bottom: 1px solid var(--sg-color-border);
84
+ }
85
+
86
+ .sg-rcal-tick {
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: flex-start;
90
+ padding: 0 var(--sg-padding-xs);
91
+ font-size: var(--sg-font-size-sm);
92
+ color: var(--sg-color-text-secondary);
93
+ border-right: 1px solid var(--sg-color-border-secondary);
94
+ box-sizing: border-box;
95
+ }
96
+
97
+ .sg-rcal-row {
98
+ /* Lane separators are rendered via the new `--sg-rcal-lane-divider`
99
+ * token, which is currently aliased to `--sg-color-border-secondary`
100
+ * but lets a theme dial it down independently when bookings get
101
+ * dense. */
102
+ border-bottom: 1px solid var(--sg-rcal-lane-divider);
103
+ }
104
+
105
+ .sg-rcal-row:nth-child(even) {
106
+ background: var(--sg-color-bg-secondary);
107
+ }
108
+
109
+ .sg-rcal-slot {
110
+ /* Vertical divider — kept softer than the row separator so the
111
+ * grid feels horizontal-first (booking rows read left-to-right). */
112
+ border-right: 1px solid var(--sg-rcal-lane-divider);
113
+ box-sizing: border-box;
114
+ }
115
+
116
+ .sg-rcal-availability-off {
117
+ background-color: var(--sg-rcal-availability-off-bg);
118
+ background-image: repeating-linear-gradient(
119
+ 45deg,
120
+ transparent,
121
+ transparent 6px,
122
+ var(--sg-color-border-secondary) 6px,
123
+ var(--sg-color-border-secondary) 7px
124
+ );
125
+ opacity: 0.55;
126
+ }
127
+
128
+ .sg-rcal-assignment {
129
+ background: var(--sg-rcal-tentative-bg);
130
+ border: 1px solid var(--sg-rcal-tentative-border);
131
+ color: var(--sg-color-text);
132
+ border-radius: var(--sg-border-radius-sm);
133
+ display: flex;
134
+ align-items: center;
135
+ padding: 0 var(--sg-padding-xs);
136
+ font-size: var(--sg-font-size-sm);
137
+ white-space: nowrap;
138
+ overflow: hidden;
139
+ /* Reuse the gantt-bar shadow so resource bookings and gantt task bars
140
+ * feel like the same primitive rendered in two contexts. */
141
+ box-shadow: var(--sg-gantt-bar-shadow);
142
+ box-sizing: border-box;
143
+ transition:
144
+ box-shadow var(--sg-transition-medium),
145
+ transform var(--sg-transition-medium),
146
+ filter var(--sg-transition-fast);
147
+ }
148
+
149
+ .sg-rcal-assignment:hover {
150
+ box-shadow: var(--sg-gantt-bar-shadow-hover);
151
+ transform: translateY(-1px);
152
+ filter: brightness(1.04);
153
+ }
154
+
155
+ .sg-rcal-assignment-tentative {
156
+ background: var(--sg-rcal-tentative-bg);
157
+ border-color: var(--sg-rcal-tentative-border);
158
+ border-style: dashed;
159
+ }
160
+
161
+ .sg-rcal-assignment-confirmed {
162
+ background: var(--sg-rcal-confirmed-bg);
163
+ border-color: var(--sg-rcal-confirmed-bg);
164
+ color: var(--sg-rcal-confirmed-text);
165
+ }
166
+
167
+ .sg-rcal-assignment-conflict {
168
+ /* The conflict overlay now layers a flat tint underneath the diagonal
169
+ * stripes (via `--sg-rcal-conflict-overlay-bg`) so the warning reads
170
+ * even on small bookings where the stripe pattern barely shows. */
171
+ background-color: var(--sg-rcal-conflict-overlay-bg);
172
+ background-image: repeating-linear-gradient(
173
+ 45deg,
174
+ transparent,
175
+ transparent 5px,
176
+ var(--sg-rcal-conflict-color) 5px,
177
+ var(--sg-rcal-conflict-color) 6px
178
+ );
179
+ border: 2px solid var(--sg-rcal-conflict-color);
180
+ color: var(--sg-color-text);
181
+ /* Conflict bookings should never feel "promoted" by hover lift,
182
+ * so we suppress the parent transform. The brightness boost still
183
+ * communicates interactivity. */
184
+ box-shadow: 0 0 0 1px var(--sg-rcal-conflict-color);
185
+ }
186
+
187
+ .sg-rcal-assignment-conflict:hover {
188
+ transform: none;
189
+ box-shadow:
190
+ 0 0 0 1px var(--sg-rcal-conflict-color),
191
+ 0 2px 6px rgba(245, 34, 45, 0.2);
192
+ }
193
+
194
+ .sg-rcal-assignment-draggable {
195
+ cursor: grab;
196
+ }
197
+
198
+ .sg-rcal-assignment-draggable:active {
199
+ cursor: grabbing;
200
+ }
201
+
202
+ .sg-rcal-assignment-title {
203
+ text-overflow: ellipsis;
204
+ overflow: hidden;
205
+ }
206
+
207
+ .sg-rcal-assignment-resize-start,
208
+ .sg-rcal-assignment-resize-end {
209
+ background: transparent;
210
+ opacity: 0;
211
+ transition: opacity 120ms ease;
212
+ }
213
+
214
+ .sg-rcal-assignment:hover .sg-rcal-assignment-resize-start,
215
+ .sg-rcal-assignment:hover .sg-rcal-assignment-resize-end {
216
+ opacity: 0.6;
217
+ }
218
+
219
+ .sg-rcal-assignment-resize-start:hover,
220
+ .sg-rcal-assignment-resize-end:hover,
221
+ .sg-rcal-assignment-resize-start:focus-visible,
222
+ .sg-rcal-assignment-resize-end:focus-visible {
223
+ opacity: 1;
224
+ }
@@ -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
+ }