@refrakt-md/lumina 0.7.1 → 0.8.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 (40) hide show
  1. package/contracts/structures.json +670 -94
  2. package/dist/config.d.ts +1 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +75 -1
  5. package/dist/config.js.map +1 -1
  6. package/index.css +12 -0
  7. package/package.json +5 -5
  8. package/styles/base/attributes.css +20 -0
  9. package/styles/global.css +2 -2
  10. package/styles/layouts/default.css +131 -5
  11. package/styles/layouts/split.css +34 -0
  12. package/styles/runes/accordion.css +36 -0
  13. package/styles/runes/annotate.css +2 -2
  14. package/styles/runes/audio.css +199 -0
  15. package/styles/runes/bento.css +81 -4
  16. package/styles/runes/bg.css +53 -0
  17. package/styles/runes/budget.css +2 -2
  18. package/styles/runes/cast.css +1 -1
  19. package/styles/runes/codegroup.css +9 -0
  20. package/styles/runes/comparison.css +2 -2
  21. package/styles/runes/conversation.css +4 -4
  22. package/styles/runes/cta.css +58 -4
  23. package/styles/runes/feature.css +63 -17
  24. package/styles/runes/gallery.css +182 -0
  25. package/styles/runes/grid.css +39 -5
  26. package/styles/runes/hero.css +78 -13
  27. package/styles/runes/itinerary.css +2 -0
  28. package/styles/runes/mockup.css +539 -0
  29. package/styles/runes/page-section.css +1 -0
  30. package/styles/runes/playlist.css +88 -0
  31. package/styles/runes/preview.css +3 -4
  32. package/styles/runes/pricing.css +34 -2
  33. package/styles/runes/reveal.css +38 -2
  34. package/styles/runes/showcase.css +94 -0
  35. package/styles/runes/steps.css +38 -10
  36. package/styles/runes/storyboard.css +2 -2
  37. package/styles/runes/tabs.css +36 -0
  38. package/styles/runes/tint.css +203 -0
  39. package/styles/runes/track.css +118 -0
  40. package/tokens/base.css +21 -1
@@ -1,10 +1,52 @@
1
1
  /* Hero */
2
2
  .rf-hero {
3
3
  position: relative;
4
- padding: 5rem 2rem 4.5rem;
4
+ padding: 7rem 2rem 6.5rem;
5
5
  background-size: cover;
6
6
  background-position: center;
7
- overflow: hidden;
7
+ }
8
+ .rf-hero__header {
9
+ margin-bottom: 2rem;
10
+ }
11
+ /* Higher specificity needed to override .rf-hero p (0,1,1) */
12
+ .rf-hero .rf-hero__eyebrow {
13
+ font-size: 0.875rem;
14
+ font-weight: 600;
15
+ letter-spacing: 0.05em;
16
+ text-transform: uppercase;
17
+ color: var(--rf-color-primary);
18
+ margin: 0 0 1rem;
19
+ max-width: none;
20
+ }
21
+ /* Pill-badge variant when eyebrow contains a link */
22
+ .rf-hero .rf-hero__eyebrow:has(a) {
23
+ display: inline-block;
24
+ position: relative;
25
+ padding: 0.25rem 0.875rem;
26
+ border: 1px solid var(--rf-color-border);
27
+ border-radius: var(--rf-radius-full);
28
+ color: var(--rf-color-text);
29
+ font-weight: 400;
30
+ text-transform: none;
31
+ letter-spacing: 0;
32
+ transition: border-color 150ms ease;
33
+ }
34
+ .rf-hero .rf-hero__eyebrow:has(a):hover {
35
+ border-color: var(--rf-color-muted);
36
+ }
37
+ .rf-hero .rf-hero__eyebrow:has(a) a {
38
+ color: var(--rf-color-primary);
39
+ font-weight: 600;
40
+ text-decoration: none;
41
+ }
42
+ .rf-hero .rf-hero__eyebrow:has(a) a::before {
43
+ content: '';
44
+ position: absolute;
45
+ inset: 0;
46
+ border-radius: inherit;
47
+ }
48
+ .rf-hero__image {
49
+ margin-bottom: 1.5rem;
8
50
  }
9
51
  .rf-hero__actions {
10
52
  max-width: 720px;
@@ -14,23 +56,29 @@
14
56
  gap: 0.75rem;
15
57
  flex-wrap: wrap;
16
58
  }
17
- .rf-hero--center {
59
+ .rf-hero[data-align="center"] .rf-hero__header,
60
+ .rf-hero[data-align="center"] > h1,
61
+ .rf-hero[data-align="center"] > p {
18
62
  text-align: center;
19
63
  }
20
- .rf-hero--center .rf-hero__actions {
64
+ .rf-hero[data-align="center"] .rf-hero__actions {
21
65
  margin: 0 auto;
22
66
  justify-content: center;
23
67
  }
24
- .rf-hero--left {
68
+ .rf-hero[data-align="left"] .rf-hero__header,
69
+ .rf-hero[data-align="left"] > h1,
70
+ .rf-hero[data-align="left"] > p {
25
71
  text-align: left;
26
72
  }
27
- .rf-hero--left .rf-hero__actions {
73
+ .rf-hero[data-align="left"] .rf-hero__actions {
28
74
  margin: 0;
29
75
  }
30
- .rf-hero--right {
76
+ .rf-hero[data-align="right"] .rf-hero__header,
77
+ .rf-hero[data-align="right"] > h1,
78
+ .rf-hero[data-align="right"] > p {
31
79
  text-align: right;
32
80
  }
33
- .rf-hero--right .rf-hero__actions {
81
+ .rf-hero[data-align="right"] .rf-hero__actions {
34
82
  margin: 0 0 0 auto;
35
83
  }
36
84
  .rf-hero__actions pre {
@@ -43,7 +91,8 @@
43
91
  border: 1px solid var(--rf-color-border);
44
92
  white-space: nowrap;
45
93
  }
46
- .rf-hero h1 {
94
+ .rf-hero h1,
95
+ .rf-hero__headline {
47
96
  font-size: 3.25rem;
48
97
  font-weight: 800;
49
98
  letter-spacing: -0.035em;
@@ -54,13 +103,17 @@
54
103
  -webkit-text-fill-color: transparent;
55
104
  background-clip: text;
56
105
  }
57
- .rf-hero p {
106
+ /* Higher specificity needed to override .rf-hero p (0,1,1) */
107
+ .rf-hero p,
108
+ .rf-hero .rf-hero__blurb {
58
109
  font-size: 1.2rem;
59
110
  line-height: 1.65;
60
111
  color: var(--rf-color-muted);
61
112
  margin: 0 0 2rem;
113
+ max-width: 40rem;
62
114
  }
63
- .rf-hero--center p {
115
+ .rf-hero[data-align="center"] > p,
116
+ .rf-hero[data-align="center"] .rf-hero__blurb {
64
117
  max-width: 560px;
65
118
  margin-left: auto;
66
119
  margin-right: auto;
@@ -75,8 +128,8 @@
75
128
  padding: 0;
76
129
  margin: 0;
77
130
  }
78
- .rf-hero--center ul,
79
- .rf-hero--center nav {
131
+ .rf-hero[data-align="center"] ul,
132
+ .rf-hero[data-align="center"] nav {
80
133
  justify-content: center;
81
134
  }
82
135
  .rf-hero li {
@@ -115,3 +168,15 @@
115
168
  border-color: var(--rf-color-surface-active);
116
169
  text-decoration: none;
117
170
  }
171
+ .rf-hero__media {
172
+ margin-top: 3rem;
173
+ border-radius: var(--rf-radius-lg);
174
+ }
175
+ .rf-hero__media img {
176
+ display: block;
177
+ width: 100%;
178
+ height: auto;
179
+ }
180
+ .rf-hero__media pre {
181
+ margin: 0;
182
+ }
@@ -1,6 +1,8 @@
1
1
  /* Itinerary */
2
2
  .rf-itinerary {
3
3
  margin: 2rem 0;
4
+ padding-left: 0.75rem;
5
+ padding-right: 0.75rem;
4
6
  }
5
7
  .rf-itinerary > header {
6
8
  margin-bottom: 1.5rem;
@@ -0,0 +1,539 @@
1
+ /* Mockup — Device frame chrome around content */
2
+
3
+ .rf-mockup {
4
+ --mockup-bezel-dark: #1a1a1a;
5
+ --mockup-bezel-light: #e5e5e5;
6
+ --mockup-bezel: var(--mockup-bezel-dark);
7
+ --mockup-chrome: #2a2a2a;
8
+ --mockup-chrome-text: #999;
9
+ --mockup-scale: 1;
10
+ display: block;
11
+ width: 100%;
12
+ container-type: inline-size;
13
+ margin: 1.5rem 0;
14
+ background-color: transparent;
15
+ }
16
+
17
+ /* Inside a placed showcase, let device frame use natural width */
18
+ .rf-showcase[data-place] .rf-mockup {
19
+ width: auto;
20
+ max-width: 100%;
21
+ container-type: normal;
22
+ }
23
+ .rf-showcase[data-place] .rf-mockup__frame {
24
+ zoom: var(--mockup-scale, 1);
25
+ }
26
+
27
+ /* ── Fit mode: none (native pixel size) ── */
28
+
29
+ .rf-mockup[data-fit="none"] {
30
+ display: inline-block;
31
+ width: auto;
32
+ container-type: normal;
33
+ }
34
+
35
+ .rf-mockup[data-fit="none"] .rf-mockup__frame {
36
+ zoom: normal;
37
+ transform: scale(var(--mockup-scale, 1));
38
+ transform-origin: top center;
39
+ margin-inline: 0;
40
+ }
41
+
42
+ .rf-mockup[data-fit="none"].rf-mockup--browser,
43
+ .rf-mockup[data-fit="none"].rf-mockup--browser-dark {
44
+ display: block;
45
+ }
46
+
47
+ /* ── Color modifiers ── */
48
+
49
+ .rf-mockup--dark {
50
+ --mockup-bezel: var(--mockup-bezel-dark);
51
+ --mockup-chrome: #2a2a2a;
52
+ --mockup-chrome-text: #999;
53
+ }
54
+
55
+ .rf-mockup--light {
56
+ --mockup-bezel: var(--mockup-bezel-light);
57
+ --mockup-chrome: #f5f5f5;
58
+ --mockup-chrome-text: #666;
59
+ }
60
+
61
+ .rf-mockup--auto {
62
+ --mockup-bezel: var(--mockup-bezel-dark);
63
+ --mockup-chrome: #2a2a2a;
64
+ --mockup-chrome-text: #999;
65
+ }
66
+
67
+ /* ── Frame (wraps everything) ── */
68
+
69
+ .rf-mockup__frame {
70
+ position: relative;
71
+ margin-inline: auto;
72
+ zoom: calc(var(--mockup-scale, 1) * min(1, tan(atan2(100cqi, var(--mockup-device-width, 100cqi)))));
73
+ }
74
+
75
+ /* ── Viewport (content area) ── */
76
+
77
+ .rf-mockup__viewport {
78
+ overflow: auto;
79
+ background: var(--rf-color-bg);
80
+ }
81
+ .rf-mockup__viewport img {
82
+ display: block;
83
+ }
84
+
85
+ .rf-mockup__viewport > *:first-child {
86
+ margin-top: 0;
87
+ }
88
+
89
+ .rf-mockup__viewport > *:last-child {
90
+ margin-bottom: 0;
91
+ }
92
+
93
+ /* ── Label ── */
94
+
95
+ .rf-mockup__label {
96
+ text-align: center;
97
+ font-size: 0.75rem;
98
+ font-weight: 500;
99
+ color: var(--rf-color-muted);
100
+ margin-top: 0.75rem;
101
+ }
102
+
103
+ /* ═══════════════════════════════════════
104
+ MOBILE DEVICES
105
+ ═══════════════════════════════════════ */
106
+
107
+ /* ── Bezel (mobile/tablet outer shell) ── */
108
+
109
+ .rf-mockup__bezel {
110
+ background: var(--mockup-bezel);
111
+ display: flex;
112
+ flex-direction: column;
113
+ overflow: hidden;
114
+ }
115
+
116
+ /* ── Notch variants ── */
117
+
118
+ .rf-mockup__notch {
119
+ position: absolute;
120
+ top: 0;
121
+ left: 50%;
122
+ transform: translateX(-50%);
123
+ z-index: 2;
124
+ }
125
+
126
+ .rf-mockup__notch--dynamic-island {
127
+ width: 120px;
128
+ height: 34px;
129
+ top: 12px;
130
+ background: #000;
131
+ border-radius: 20px;
132
+ }
133
+
134
+ .rf-mockup__notch--classic {
135
+ width: 150px;
136
+ height: 28px;
137
+ top: 0;
138
+ background: var(--mockup-bezel);
139
+ border-radius: 0 0 20px 20px;
140
+ }
141
+
142
+ .rf-mockup__notch--punch-hole {
143
+ width: 12px;
144
+ height: 12px;
145
+ top: 16px;
146
+ background: #000;
147
+ border-radius: var(--rf-radius-full);
148
+ }
149
+
150
+ /* ── Status bar ── */
151
+
152
+ .rf-mockup__status-bar {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: space-between;
156
+ padding: 0 1.5rem;
157
+ height: 44px;
158
+ font-size: 0.75rem;
159
+ font-weight: 600;
160
+ color: var(--rf-color-text);
161
+ background: var(--rf-color-bg);
162
+ position: relative;
163
+ z-index: 1;
164
+ }
165
+
166
+ .rf-mockup__status-time {
167
+ font-variant-numeric: tabular-nums;
168
+ }
169
+
170
+ .rf-mockup__status-icons::after {
171
+ content: '\25CF\25CF\25CF \25AE 100%';
172
+ font-size: 0.625rem;
173
+ letter-spacing: 0.05em;
174
+ color: var(--rf-color-muted);
175
+ }
176
+
177
+ /* ── Home indicator ── */
178
+
179
+ .rf-mockup__home-indicator {
180
+ display: flex;
181
+ justify-content: center;
182
+ align-items: center;
183
+ height: 32px;
184
+ background: var(--rf-color-bg);
185
+ }
186
+
187
+ .rf-mockup__home-indicator::after {
188
+ content: '';
189
+ display: block;
190
+ width: 134px;
191
+ height: 5px;
192
+ background: var(--rf-color-text);
193
+ border-radius: var(--rf-radius-full);
194
+ opacity: 0.2;
195
+ }
196
+
197
+ /* ── iPhone 15 ── */
198
+
199
+ .rf-mockup--iphone-15 .rf-mockup__frame {
200
+ --mockup-device-width: 393px;
201
+ width: 393px;
202
+ border-radius: 55px;
203
+ }
204
+
205
+ .rf-mockup--iphone-15 .rf-mockup__bezel {
206
+ border-radius: 55px;
207
+ border: 10px solid var(--mockup-bezel);
208
+ }
209
+
210
+ .rf-mockup--iphone-15 .rf-mockup__viewport {
211
+ height: 852px;
212
+ border-radius: 0;
213
+ }
214
+
215
+ /* ── iPhone SE ── */
216
+
217
+ .rf-mockup--iphone-se .rf-mockup__frame {
218
+ --mockup-device-width: 375px;
219
+ width: 375px;
220
+ border-radius: 40px;
221
+ }
222
+
223
+ .rf-mockup--iphone-se .rf-mockup__bezel {
224
+ border-radius: 40px;
225
+ border: 10px solid var(--mockup-bezel);
226
+ padding-bottom: 60px;
227
+ }
228
+
229
+ .rf-mockup--iphone-se .rf-mockup__notch--classic {
230
+ position: relative;
231
+ top: auto;
232
+ left: auto;
233
+ transform: none;
234
+ width: 100%;
235
+ height: 60px;
236
+ background: var(--mockup-bezel);
237
+ border-radius: 0;
238
+ }
239
+
240
+ .rf-mockup--iphone-se .rf-mockup__bezel::after {
241
+ content: '';
242
+ position: absolute;
243
+ bottom: 14px;
244
+ left: 50%;
245
+ transform: translateX(-50%);
246
+ width: 36px;
247
+ height: 36px;
248
+ border: 2px solid var(--mockup-chrome-text);
249
+ border-radius: var(--rf-radius-full);
250
+ opacity: 0.5;
251
+ }
252
+
253
+ .rf-mockup--iphone-se .rf-mockup__viewport {
254
+ height: 667px;
255
+ }
256
+
257
+ /* ── Pixel ── */
258
+
259
+ .rf-mockup--pixel .rf-mockup__frame {
260
+ --mockup-device-width: 412px;
261
+ width: 412px;
262
+ border-radius: 40px;
263
+ }
264
+
265
+ .rf-mockup--pixel .rf-mockup__bezel {
266
+ border-radius: 40px;
267
+ border: 8px solid var(--mockup-bezel);
268
+ }
269
+
270
+ .rf-mockup--pixel .rf-mockup__viewport {
271
+ height: 915px;
272
+ }
273
+
274
+ /* ── Generic phone ── */
275
+
276
+ .rf-mockup--phone .rf-mockup__frame {
277
+ --mockup-device-width: 390px;
278
+ width: 390px;
279
+ border-radius: 48px;
280
+ }
281
+
282
+ .rf-mockup--phone .rf-mockup__bezel {
283
+ border-radius: 48px;
284
+ border: 10px solid var(--mockup-bezel);
285
+ }
286
+
287
+ .rf-mockup--phone .rf-mockup__viewport {
288
+ height: 844px;
289
+ }
290
+
291
+ /* ═══════════════════════════════════════
292
+ TABLET DEVICES
293
+ ═══════════════════════════════════════ */
294
+
295
+ /* ── iPad ── */
296
+
297
+ .rf-mockup--ipad .rf-mockup__frame {
298
+ --mockup-device-width: 820px;
299
+ width: 820px;
300
+ border-radius: 24px;
301
+ }
302
+
303
+ .rf-mockup--ipad .rf-mockup__bezel {
304
+ border-radius: 24px;
305
+ border: 12px solid var(--mockup-bezel);
306
+ }
307
+
308
+ .rf-mockup--ipad .rf-mockup__viewport {
309
+ height: 1180px;
310
+ }
311
+
312
+ /* ── Generic tablet ── */
313
+
314
+ .rf-mockup--tablet .rf-mockup__frame {
315
+ --mockup-device-width: 800px;
316
+ width: 800px;
317
+ border-radius: 20px;
318
+ }
319
+
320
+ .rf-mockup--tablet .rf-mockup__bezel {
321
+ border-radius: 20px;
322
+ border: 14px solid var(--mockup-bezel);
323
+ }
324
+
325
+ .rf-mockup--tablet .rf-mockup__viewport {
326
+ height: 1100px;
327
+ }
328
+
329
+ /* ═══════════════════════════════════════
330
+ DESKTOP DEVICES
331
+ ═══════════════════════════════════════ */
332
+
333
+ /* ── Title bar (browser / macbook) ── */
334
+
335
+ .rf-mockup__title-bar {
336
+ display: flex;
337
+ align-items: center;
338
+ gap: 0.75rem;
339
+ padding: 0.625rem 1rem;
340
+ background: var(--mockup-chrome);
341
+ min-height: 2.5rem;
342
+ }
343
+
344
+ /* ── Traffic lights ── */
345
+
346
+ .rf-mockup__traffic-lights {
347
+ display: flex;
348
+ gap: 0.5rem;
349
+ flex-shrink: 0;
350
+ }
351
+
352
+ .rf-mockup__traffic-light {
353
+ display: block;
354
+ width: 12px;
355
+ height: 12px;
356
+ border-radius: var(--rf-radius-full);
357
+ }
358
+
359
+ .rf-mockup__traffic-light--close {
360
+ background: #ff5f57;
361
+ }
362
+
363
+ .rf-mockup__traffic-light--minimize {
364
+ background: #febc2e;
365
+ }
366
+
367
+ .rf-mockup__traffic-light--maximize {
368
+ background: #28c840;
369
+ }
370
+
371
+ /* ── Address bar (browser only) ── */
372
+
373
+ .rf-mockup__address-bar {
374
+ flex: 1;
375
+ display: flex;
376
+ align-items: center;
377
+ max-width: 60%;
378
+ margin: 0 auto;
379
+ padding: 0.25rem 0.75rem;
380
+ background: rgba(255, 255, 255, 0.08);
381
+ border-radius: var(--rf-radius-sm);
382
+ min-height: 1.75rem;
383
+ }
384
+
385
+ .rf-mockup__url {
386
+ font-size: 0.75rem;
387
+ font-family: var(--rf-font-sans);
388
+ color: var(--mockup-chrome-text);
389
+ white-space: nowrap;
390
+ overflow: hidden;
391
+ text-overflow: ellipsis;
392
+ }
393
+
394
+ /* ── Browser ── */
395
+
396
+ .rf-mockup--browser .rf-mockup__frame {
397
+ width: 100%;
398
+ border-radius: var(--rf-radius-lg) var(--rf-radius-lg) 0 0;
399
+ overflow: hidden;
400
+ }
401
+
402
+ .rf-mockup--browser .rf-mockup__title-bar {
403
+ border-radius: var(--rf-radius-lg) var(--rf-radius-lg) 0 0;
404
+ }
405
+
406
+ .rf-mockup--browser .rf-mockup__viewport {
407
+ min-height: 12rem;
408
+ border: 1px solid var(--rf-color-border);
409
+ border-top: none;
410
+ }
411
+
412
+ /* ── Browser dark ── */
413
+
414
+ .rf-mockup--browser-dark .rf-mockup__frame {
415
+ width: 100%;
416
+ border-radius: var(--rf-radius-lg) var(--rf-radius-lg) 0 0;
417
+ overflow: hidden;
418
+ }
419
+
420
+ .rf-mockup--browser-dark .rf-mockup__title-bar {
421
+ background: #1a1a1a;
422
+ border-radius: var(--rf-radius-lg) var(--rf-radius-lg) 0 0;
423
+ }
424
+
425
+ .rf-mockup--browser-dark .rf-mockup__address-bar {
426
+ background: rgba(255, 255, 255, 0.06);
427
+ }
428
+
429
+ .rf-mockup--browser-dark .rf-mockup__viewport {
430
+ min-height: 12rem;
431
+ border: 1px solid rgba(255, 255, 255, 0.1);
432
+ border-top: none;
433
+ }
434
+
435
+ /* ── MacBook ── */
436
+
437
+ .rf-mockup--macbook .rf-mockup__frame {
438
+ --mockup-device-width: 1440px;
439
+ width: 1440px;
440
+ }
441
+
442
+ .rf-mockup--macbook .rf-mockup__title-bar {
443
+ border-radius: var(--rf-radius-md) var(--rf-radius-md) 0 0;
444
+ border: 3px solid var(--mockup-bezel);
445
+ border-bottom: none;
446
+ }
447
+
448
+ .rf-mockup--macbook .rf-mockup__viewport {
449
+ min-height: 12rem;
450
+ border: 3px solid var(--mockup-bezel);
451
+ border-top: none;
452
+ border-bottom: none;
453
+ }
454
+
455
+ /* ── Keyboard ── */
456
+
457
+ .rf-mockup__keyboard {
458
+ background: linear-gradient(to bottom, var(--mockup-bezel), color-mix(in srgb, var(--mockup-bezel), #000 15%));
459
+ padding: 0.5rem 2rem 0.75rem;
460
+ border-radius: 0 0 var(--rf-radius-md) var(--rf-radius-md);
461
+ display: flex;
462
+ justify-content: center;
463
+ }
464
+
465
+ .rf-mockup__trackpad {
466
+ width: 40%;
467
+ height: 6px;
468
+ background: color-mix(in srgb, var(--mockup-bezel), #fff 10%);
469
+ border-radius: var(--rf-radius-full);
470
+ margin-top: 0.25rem;
471
+ }
472
+
473
+ /* ═══════════════════════════════════════
474
+ SPECIAL DEVICES
475
+ ═══════════════════════════════════════ */
476
+
477
+ /* ── Watch ── */
478
+
479
+ .rf-mockup--watch .rf-mockup__frame {
480
+ --mockup-device-width: 198px;
481
+ width: 198px;
482
+ border-radius: 40px;
483
+ position: relative;
484
+ }
485
+
486
+ .rf-mockup--watch .rf-mockup__bezel {
487
+ border-radius: 40px;
488
+ border: 14px solid var(--mockup-bezel);
489
+ }
490
+
491
+ .rf-mockup--watch .rf-mockup__bezel::after {
492
+ content: '';
493
+ position: absolute;
494
+ right: -6px;
495
+ top: 35%;
496
+ width: 6px;
497
+ height: 28px;
498
+ background: var(--mockup-bezel);
499
+ border-radius: 0 3px 3px 0;
500
+ }
501
+
502
+ .rf-mockup--watch .rf-mockup__viewport {
503
+ height: 242px;
504
+ border-radius: 26px;
505
+ }
506
+
507
+ /* ── None (no frame) ── */
508
+
509
+ .rf-mockup--none .rf-mockup__viewport {
510
+ border: 1px dashed var(--rf-color-border);
511
+ border-radius: var(--rf-radius-sm);
512
+ }
513
+
514
+ /* ═══════════════════════════════════════
515
+ CONTEXT: inside preview
516
+ ═══════════════════════════════════════ */
517
+
518
+ .rf-grid .rf-mockup {
519
+ justify-self: center;
520
+ }
521
+ .rf-preview .rf-mockup {
522
+ margin: 0;
523
+ }
524
+
525
+ /* ═══════════════════════════════════════
526
+ DARK MODE
527
+ ═══════════════════════════════════════ */
528
+
529
+ @media (prefers-color-scheme: dark) {
530
+ .rf-mockup--auto {
531
+ --mockup-bezel: var(--mockup-bezel-light);
532
+ --mockup-chrome: #3a3a3a;
533
+ --mockup-chrome-text: #aaa;
534
+ }
535
+
536
+ .rf-mockup--light .rf-mockup__address-bar {
537
+ background: rgba(0, 0, 0, 0.15);
538
+ }
539
+ }
@@ -12,6 +12,7 @@
12
12
  gap: 3rem;
13
13
  align-items: start;
14
14
  }
15
+
15
16
  @media (max-width: 768px) {
16
17
  .rf-page-section--split {
17
18
  grid-template-columns: 1fr;