sid-ui 0.1.2 → 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.
@@ -0,0 +1,304 @@
1
+ /* MotionCard, FlipCard, ExpandableCard — cards that move. All motion is CSS driven by custom
2
+ properties; prefers-reduced-motion keeps light and color, drops movement. */
3
+
4
+ /* ---------- MotionCard ---------- */
5
+
6
+ .os-mc {
7
+ --os-mc-x: 50%;
8
+ --os-mc-y: 50%;
9
+ --os-mc-rx: 0deg;
10
+ --os-mc-ry: 0deg;
11
+ --_glow: var(--os-mc-glow, var(--color-accent));
12
+ position: relative;
13
+ isolation: isolate;
14
+ box-sizing: border-box;
15
+ max-width: 100%;
16
+ border-radius: var(--radius-container);
17
+ background: var(--color-background-surface);
18
+ box-shadow:
19
+ inset 0 0 0 1px var(--color-border),
20
+ 0 1px 2px color-mix(in srgb, var(--color-text-primary) 6%, transparent);
21
+ transition:
22
+ transform 0.35s cubic-bezier(0.22, 1, 0.36, 1),
23
+ box-shadow 0.35s cubic-bezier(0.22, 1, 0.36, 1);
24
+ }
25
+
26
+ .os-mc-body {
27
+ position: relative;
28
+ z-index: 1;
29
+ padding: var(--os-mc-pad);
30
+ }
31
+
32
+ .os-mc-light {
33
+ position: absolute;
34
+ inset: 0;
35
+ z-index: 0;
36
+ border-radius: inherit;
37
+ pointer-events: none;
38
+ opacity: 0;
39
+ transition: opacity 0.3s;
40
+ }
41
+
42
+ .os-mc:hover .os-mc-light {
43
+ opacity: 1;
44
+ }
45
+
46
+ /* lift */
47
+ .os-mc-lift:hover {
48
+ transform: translateY(-6px);
49
+ box-shadow:
50
+ inset 0 0 0 1px var(--color-border),
51
+ 0 18px 36px -18px color-mix(in srgb, var(--color-text-primary) 35%, transparent);
52
+ }
53
+
54
+ /* tilt: lean toward the pointer, with a glare that tracks it */
55
+ .os-mc-tilt {
56
+ transform: perspective(900px) rotateX(var(--os-mc-rx)) rotateY(var(--os-mc-ry));
57
+ transform-style: preserve-3d;
58
+ transition:
59
+ transform 0.5s cubic-bezier(0.22, 1, 0.36, 1),
60
+ box-shadow 0.35s;
61
+ }
62
+
63
+ .os-mc-tilt:hover {
64
+ transition:
65
+ transform 0.08s linear,
66
+ box-shadow 0.35s;
67
+ box-shadow:
68
+ inset 0 0 0 1px var(--color-border),
69
+ 0 24px 48px -24px color-mix(in srgb, var(--color-text-primary) 45%, transparent);
70
+ }
71
+
72
+ .os-mc-tilt .os-mc-body {
73
+ transform: translateZ(28px);
74
+ }
75
+
76
+ .os-mc-tilt .os-mc-light {
77
+ z-index: 2;
78
+ background: radial-gradient(
79
+ circle at var(--os-mc-x) var(--os-mc-y),
80
+ rgb(255 255 255 / 0.38),
81
+ transparent 55%
82
+ );
83
+ mix-blend-mode: soft-light;
84
+ }
85
+
86
+ /* spotlight: a soft glow under the pointer and a lit edge */
87
+ .os-mc-spotlight .os-mc-light {
88
+ background: radial-gradient(
89
+ 420px circle at var(--os-mc-x) var(--os-mc-y),
90
+ color-mix(in srgb, var(--_glow) 14%, transparent),
91
+ transparent 45%
92
+ );
93
+ }
94
+
95
+ .os-mc-spotlight::before {
96
+ content: "";
97
+ position: absolute;
98
+ inset: 0;
99
+ z-index: 2;
100
+ padding: 1px;
101
+ border-radius: inherit;
102
+ background: radial-gradient(
103
+ 260px circle at var(--os-mc-x) var(--os-mc-y),
104
+ var(--_glow),
105
+ transparent 60%
106
+ );
107
+ -webkit-mask:
108
+ linear-gradient(#000 0 0) content-box,
109
+ linear-gradient(#000 0 0);
110
+ -webkit-mask-composite: xor;
111
+ mask:
112
+ linear-gradient(#000 0 0) content-box exclude,
113
+ linear-gradient(#000 0 0);
114
+ opacity: 0;
115
+ transition: opacity 0.3s;
116
+ pointer-events: none;
117
+ }
118
+
119
+ .os-mc-spotlight:hover::before {
120
+ opacity: 1;
121
+ }
122
+
123
+ /* ---------- FlipCard ---------- */
124
+
125
+ .os-flip {
126
+ position: relative;
127
+ max-width: 100%;
128
+ perspective: 1200px;
129
+ }
130
+
131
+ .os-flip-inner {
132
+ position: relative;
133
+ width: 100%;
134
+ height: 100%;
135
+ transform-style: preserve-3d;
136
+ transition: transform 0.7s cubic-bezier(0.34, 1.3, 0.64, 1);
137
+ }
138
+
139
+ .os-flip-horizontal.os-flip-on .os-flip-inner {
140
+ transform: rotateY(180deg);
141
+ }
142
+
143
+ .os-flip-vertical.os-flip-on .os-flip-inner {
144
+ transform: rotateX(180deg);
145
+ }
146
+
147
+ .os-flip-face {
148
+ position: absolute;
149
+ inset: 0;
150
+ box-sizing: border-box;
151
+ overflow: hidden;
152
+ border-radius: var(--radius-container);
153
+ background: var(--color-background-surface);
154
+ box-shadow:
155
+ inset 0 0 0 1px var(--color-border),
156
+ 0 10px 30px -18px color-mix(in srgb, var(--color-text-primary) 40%, transparent);
157
+ backface-visibility: hidden;
158
+ -webkit-backface-visibility: hidden;
159
+ }
160
+
161
+ .os-flip-horizontal .os-flip-back {
162
+ transform: rotateY(180deg);
163
+ }
164
+
165
+ .os-flip-vertical .os-flip-back {
166
+ transform: rotateX(180deg);
167
+ }
168
+
169
+ .os-flip-toggle {
170
+ position: absolute;
171
+ top: var(--spacing-2);
172
+ inset-inline-end: var(--spacing-2);
173
+ z-index: 3;
174
+ display: grid;
175
+ place-items: center;
176
+ width: 2rem;
177
+ height: 2rem;
178
+ padding: 0;
179
+ border: 0;
180
+ border-radius: var(--radius-full);
181
+ background: color-mix(in srgb, var(--color-background-surface) 80%, transparent);
182
+ box-shadow: inset 0 0 0 1px var(--color-border);
183
+ color: var(--color-text-secondary);
184
+ cursor: pointer;
185
+ backdrop-filter: blur(6px);
186
+ transition:
187
+ transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
188
+ color 0.15s;
189
+ }
190
+
191
+ .os-flip-toggle:hover {
192
+ color: var(--color-text-primary);
193
+ transform: rotate(-90deg);
194
+ }
195
+
196
+ .os-flip-toggle:focus-visible {
197
+ outline: 2px solid var(--color-accent);
198
+ outline-offset: 2px;
199
+ }
200
+
201
+ /* ---------- ExpandableCard ---------- */
202
+
203
+ .os-xcard {
204
+ box-sizing: border-box;
205
+ max-width: 100%;
206
+ overflow: hidden;
207
+ border-radius: var(--radius-container);
208
+ background: var(--color-background-surface);
209
+ box-shadow: inset 0 0 0 1px var(--color-border);
210
+ transition: box-shadow 0.3s;
211
+ }
212
+
213
+ .os-xcard-open {
214
+ box-shadow:
215
+ inset 0 0 0 1px var(--color-border),
216
+ 0 14px 30px -20px color-mix(in srgb, var(--color-text-primary) 40%, transparent);
217
+ }
218
+
219
+ .os-xcard-head {
220
+ display: flex;
221
+ align-items: center;
222
+ gap: var(--spacing-3);
223
+ width: 100%;
224
+ padding: var(--spacing-4);
225
+ border: 0;
226
+ background: none;
227
+ color: inherit;
228
+ font: inherit;
229
+ text-align: start;
230
+ cursor: pointer;
231
+ }
232
+
233
+ .os-xcard-head:hover {
234
+ background: color-mix(in srgb, var(--color-text-primary) 4%, transparent);
235
+ }
236
+
237
+ .os-xcard-head:focus-visible {
238
+ outline: 2px solid var(--color-accent);
239
+ outline-offset: -2px;
240
+ }
241
+
242
+ .os-xcard-title {
243
+ flex: 1;
244
+ min-width: 0;
245
+ }
246
+
247
+ .os-xcard-chevron {
248
+ display: grid;
249
+ place-items: center;
250
+ width: 1.75rem;
251
+ height: 1.75rem;
252
+ border-radius: var(--radius-full);
253
+ background: color-mix(in srgb, var(--color-text-primary) 6%, transparent);
254
+ color: var(--color-text-secondary);
255
+ transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
256
+ }
257
+
258
+ .os-xcard-open .os-xcard-chevron {
259
+ transform: rotate(180deg);
260
+ }
261
+
262
+ .os-xcard-panel {
263
+ display: grid;
264
+ grid-template-rows: 0fr;
265
+ transition: grid-template-rows 0.35s cubic-bezier(0.22, 1, 0.36, 1);
266
+ }
267
+
268
+ .os-xcard-open .os-xcard-panel {
269
+ grid-template-rows: 1fr;
270
+ }
271
+
272
+ .os-xcard-body {
273
+ min-height: 0;
274
+ overflow: hidden;
275
+ padding-inline: var(--spacing-4);
276
+ opacity: 0;
277
+ transform: translateY(-6px);
278
+ transition:
279
+ opacity 0.25s,
280
+ transform 0.35s cubic-bezier(0.22, 1, 0.36, 1),
281
+ padding 0.35s;
282
+ }
283
+
284
+ .os-xcard-open .os-xcard-body {
285
+ padding-bottom: var(--spacing-4);
286
+ opacity: 1;
287
+ transform: none;
288
+ }
289
+
290
+ @media (prefers-reduced-motion: reduce) {
291
+ .os-mc,
292
+ .os-mc-lift:hover,
293
+ .os-mc-tilt,
294
+ .os-mc-tilt .os-mc-body {
295
+ transform: none !important;
296
+ }
297
+
298
+ .os-flip-inner,
299
+ .os-xcard-panel,
300
+ .os-xcard-body,
301
+ .os-xcard-chevron {
302
+ transition: none;
303
+ }
304
+ }