@refrakt-md/skeleton 0.22.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.
- package/README.md +41 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/index.css +145 -0
- package/package.json +37 -0
- package/styles/dimensions/checklist.css +43 -0
- package/styles/dimensions/cover.css +91 -0
- package/styles/dimensions/guest-posture.css +19 -0
- package/styles/dimensions/media.css +38 -0
- package/styles/dimensions/metadata.css +66 -0
- package/styles/dimensions/sections.css +22 -0
- package/styles/dimensions/sequence.css +109 -0
- package/styles/dimensions/state.css +28 -0
- package/styles/global.css +37 -0
- package/styles/layouts/blog.css +38 -0
- package/styles/layouts/default.css +51 -0
- package/styles/layouts/docs.css +82 -0
- package/styles/layouts/mobile.css +39 -0
- package/styles/layouts/on-this-page.css +4 -0
- package/styles/layouts/plan.css +103 -0
- package/styles/layouts/search.css +80 -0
- package/styles/layouts/split.css +127 -0
- package/styles/layouts/theme-toggle.css +26 -0
- package/styles/layouts/version-switcher.css +10 -0
- package/styles/runes/accordion.css +55 -0
- package/styles/runes/aggregate.css +13 -0
- package/styles/runes/annotate.css +55 -0
- package/styles/runes/audio.css +70 -0
- package/styles/runes/bento.css +118 -0
- package/styles/runes/bg.css +29 -0
- package/styles/runes/blog.css +13 -0
- package/styles/runes/bond.css +36 -0
- package/styles/runes/breadcrumb.css +16 -0
- package/styles/runes/budget.css +42 -0
- package/styles/runes/card.css +37 -0
- package/styles/runes/cast.css +33 -0
- package/styles/runes/changelog.css +9 -0
- package/styles/runes/character.css +22 -0
- package/styles/runes/chart.css +32 -0
- package/styles/runes/codegroup.css +25 -0
- package/styles/runes/collection.css +51 -0
- package/styles/runes/compare.css +19 -0
- package/styles/runes/comparison.css +54 -0
- package/styles/runes/conversation.css +29 -0
- package/styles/runes/cta.css +46 -0
- package/styles/runes/datatable.css +16 -0
- package/styles/runes/design-context.css +6 -0
- package/styles/runes/details.css +19 -0
- package/styles/runes/diagram.css +17 -0
- package/styles/runes/diff.css +40 -0
- package/styles/runes/drawer.css +118 -0
- package/styles/runes/embed.css +20 -0
- package/styles/runes/event.css +5 -0
- package/styles/runes/expand.css +7 -0
- package/styles/runes/faction.css +13 -0
- package/styles/runes/feature.css +56 -0
- package/styles/runes/figure.css +23 -0
- package/styles/runes/file-ref.css +2 -0
- package/styles/runes/form.css +55 -0
- package/styles/runes/gallery.css +128 -0
- package/styles/runes/grid.css +62 -0
- package/styles/runes/hero.css +130 -0
- package/styles/runes/hint.css +28 -0
- package/styles/runes/howto.css +35 -0
- package/styles/runes/itinerary.css +41 -0
- package/styles/runes/juxtapose.css +61 -0
- package/styles/runes/lore.css +12 -0
- package/styles/runes/map.css +45 -0
- package/styles/runes/mediatext.css +37 -0
- package/styles/runes/milestone.css +31 -0
- package/styles/runes/mockup.css +144 -0
- package/styles/runes/nav.css +258 -0
- package/styles/runes/organization.css +6 -0
- package/styles/runes/page-section.css +12 -0
- package/styles/runes/pagination.css +39 -0
- package/styles/runes/palette.css +33 -0
- package/styles/runes/placeholder.css +7 -0
- package/styles/runes/plan-history.css +38 -0
- package/styles/runes/plan-progress.css +10 -0
- package/styles/runes/playlist.css +61 -0
- package/styles/runes/plot.css +23 -0
- package/styles/runes/preview.css +45 -0
- package/styles/runes/pricing.css +40 -0
- package/styles/runes/progress.css +22 -0
- package/styles/runes/pullquote.css +39 -0
- package/styles/runes/realm.css +14 -0
- package/styles/runes/recipe.css +40 -0
- package/styles/runes/relationships.css +49 -0
- package/styles/runes/reveal.css +29 -0
- package/styles/runes/sandbox.css +30 -0
- package/styles/runes/section.css +36 -0
- package/styles/runes/showcase.css +12 -0
- package/styles/runes/spacing.css +45 -0
- package/styles/runes/steps.css +65 -0
- package/styles/runes/storyboard.css +22 -0
- package/styles/runes/swatch.css +12 -0
- package/styles/runes/symbol.css +8 -0
- package/styles/runes/tabs.css +28 -0
- package/styles/runes/testimonial.css +13 -0
- package/styles/runes/textblock.css +25 -0
- package/styles/runes/timeline.css +31 -0
- package/styles/runes/toc.css +10 -0
- package/styles/runes/track.css +55 -0
- package/styles/runes/typography.css +33 -0
- package/styles/runes/xref.css +5 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* form — structure. The form/body flex columns, the meta + honeypot hide, the
|
|
2
|
+
* inline-variant flex + field sizing + submit align, the field flex, the control
|
|
3
|
+
* full-width box, the textarea min-height, the choice flex, and the submit
|
|
4
|
+
* self-align. Type, borders, backgrounds, padding, and focus chrome are skin. */
|
|
5
|
+
.rf-form {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
}
|
|
9
|
+
.rf-form__body {
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
}
|
|
13
|
+
.rf-form meta { display: none; }
|
|
14
|
+
.rf-form__hp {
|
|
15
|
+
position: absolute;
|
|
16
|
+
left: -9999px;
|
|
17
|
+
opacity: 0;
|
|
18
|
+
height: 0;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
}
|
|
21
|
+
.rf-form--inline .rf-form__body {
|
|
22
|
+
flex-direction: row;
|
|
23
|
+
flex-wrap: wrap;
|
|
24
|
+
align-items: flex-end;
|
|
25
|
+
}
|
|
26
|
+
.rf-form--inline .rf-form-field {
|
|
27
|
+
flex: 1;
|
|
28
|
+
min-width: 10rem;
|
|
29
|
+
}
|
|
30
|
+
.rf-form--inline .rf-form__submit {
|
|
31
|
+
align-self: flex-end;
|
|
32
|
+
}
|
|
33
|
+
.rf-form-field {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
}
|
|
37
|
+
.rf-form-field input,
|
|
38
|
+
.rf-form-field textarea,
|
|
39
|
+
.rf-form-field select {
|
|
40
|
+
width: 100%;
|
|
41
|
+
box-sizing: border-box;
|
|
42
|
+
}
|
|
43
|
+
.rf-form-field textarea {
|
|
44
|
+
min-height: 6rem;
|
|
45
|
+
}
|
|
46
|
+
.rf-form-choice {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
}
|
|
50
|
+
.rf-form-choice input {
|
|
51
|
+
width: auto;
|
|
52
|
+
}
|
|
53
|
+
.rf-form__submit {
|
|
54
|
+
align-self: flex-start;
|
|
55
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/* gallery — structure. The grid/carousel/masonry layouts, item positioning + media
|
|
2
|
+
* fill, the carousel/lightbox/nav positioning, and the responsive column counts.
|
|
3
|
+
* The thin-edge/gap vars, radii, scrim, and nav/lightbox chrome stay skin
|
|
4
|
+
* (Lumina's styles/runes/gallery.css). */
|
|
5
|
+
|
|
6
|
+
.rf-gallery { position: relative; }
|
|
7
|
+
.rf-gallery__items {
|
|
8
|
+
display: grid;
|
|
9
|
+
grid-template-columns: repeat(var(--gallery-columns, 3), 1fr);
|
|
10
|
+
}
|
|
11
|
+
.rf-gallery__item {
|
|
12
|
+
position: relative;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
}
|
|
15
|
+
.rf-gallery__item :is(img, .rf-placeholder) {
|
|
16
|
+
width: 100%;
|
|
17
|
+
height: 100%;
|
|
18
|
+
object-fit: cover;
|
|
19
|
+
display: block;
|
|
20
|
+
}
|
|
21
|
+
.rf-gallery__item figcaption {
|
|
22
|
+
position: absolute;
|
|
23
|
+
bottom: 0;
|
|
24
|
+
left: 0;
|
|
25
|
+
right: 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Carousel */
|
|
29
|
+
.rf-gallery[data-layout="carousel"] .rf-gallery__items {
|
|
30
|
+
display: flex;
|
|
31
|
+
overflow-x: auto;
|
|
32
|
+
scroll-snap-type: x mandatory;
|
|
33
|
+
-webkit-overflow-scrolling: touch;
|
|
34
|
+
}
|
|
35
|
+
.rf-gallery[data-layout="carousel"] .rf-gallery__item {
|
|
36
|
+
flex: 0 0 calc(100% / var(--gallery-columns, 3));
|
|
37
|
+
scroll-snap-align: start;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Carousel nav buttons */
|
|
41
|
+
.rf-gallery__nav {
|
|
42
|
+
position: absolute;
|
|
43
|
+
top: 50%;
|
|
44
|
+
transform: translateY(-50%);
|
|
45
|
+
z-index: 2;
|
|
46
|
+
width: 2.5rem;
|
|
47
|
+
height: 2.5rem;
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
justify-content: center;
|
|
51
|
+
}
|
|
52
|
+
.rf-gallery__nav--prev {
|
|
53
|
+
left: calc(var(--rf-gallery-edge) + 0.5rem);
|
|
54
|
+
}
|
|
55
|
+
.rf-gallery__nav--next {
|
|
56
|
+
right: calc(var(--rf-gallery-edge) + 0.5rem);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Masonry */
|
|
60
|
+
.rf-gallery[data-layout="masonry"] .rf-gallery__items {
|
|
61
|
+
display: block;
|
|
62
|
+
column-count: var(--gallery-columns, 3);
|
|
63
|
+
}
|
|
64
|
+
.rf-gallery[data-layout="masonry"] .rf-gallery__item {
|
|
65
|
+
break-inside: avoid;
|
|
66
|
+
}
|
|
67
|
+
.rf-gallery[data-layout="masonry"] .rf-gallery__item :is(img, .rf-placeholder) {
|
|
68
|
+
height: auto;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Lightbox */
|
|
72
|
+
.rf-gallery__lightbox {
|
|
73
|
+
position: fixed;
|
|
74
|
+
inset: 0;
|
|
75
|
+
z-index: 9999;
|
|
76
|
+
display: flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
}
|
|
80
|
+
.rf-gallery__lightbox img {
|
|
81
|
+
max-width: 90vw;
|
|
82
|
+
max-height: 90vh;
|
|
83
|
+
object-fit: contain;
|
|
84
|
+
}
|
|
85
|
+
.rf-gallery__lightbox-close {
|
|
86
|
+
position: absolute;
|
|
87
|
+
top: 1rem;
|
|
88
|
+
right: 1rem;
|
|
89
|
+
width: 2.5rem;
|
|
90
|
+
height: 2.5rem;
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
justify-content: center;
|
|
94
|
+
}
|
|
95
|
+
.rf-gallery__lightbox-nav {
|
|
96
|
+
position: absolute;
|
|
97
|
+
top: 50%;
|
|
98
|
+
transform: translateY(-50%);
|
|
99
|
+
width: 3rem;
|
|
100
|
+
height: 3rem;
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
justify-content: center;
|
|
104
|
+
}
|
|
105
|
+
.rf-gallery__lightbox-nav--prev {
|
|
106
|
+
left: 1rem;
|
|
107
|
+
}
|
|
108
|
+
.rf-gallery__lightbox-nav--next {
|
|
109
|
+
right: 1rem;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Responsive column counts */
|
|
113
|
+
@media (max-width: 768px) {
|
|
114
|
+
.rf-gallery {
|
|
115
|
+
--gallery-columns: 2 !important;
|
|
116
|
+
}
|
|
117
|
+
.rf-gallery[data-layout="carousel"] .rf-gallery__item {
|
|
118
|
+
flex-basis: 80%;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
@media (max-width: 480px) {
|
|
122
|
+
.rf-gallery {
|
|
123
|
+
--gallery-columns: 1 !important;
|
|
124
|
+
}
|
|
125
|
+
.rf-gallery[data-layout="carousel"] .rf-gallery__item {
|
|
126
|
+
flex-basis: 100%;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* grid — structure. The whole grid system: the auto-fit track, explicit column
|
|
2
|
+
* counts, flow, spans, auto/masonry modes, aspect-ratio cells, stack order, and
|
|
3
|
+
* the collapse breakpoints. Only the gap and the cell prose margins are skin
|
|
4
|
+
* (Lumina's styles/runes/grid.css). */
|
|
5
|
+
|
|
6
|
+
.rf-grid [data-layout="grid"] {
|
|
7
|
+
display: grid;
|
|
8
|
+
grid-template-columns: var(--grid-ratio, repeat(auto-fit, minmax(250px, 1fr)));
|
|
9
|
+
align-items: var(--grid-valign, stretch);
|
|
10
|
+
}
|
|
11
|
+
/* Explicit column counts override auto-fit */
|
|
12
|
+
.rf-grid [data-columns="1"] { grid-template-columns: 1fr; }
|
|
13
|
+
.rf-grid [data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
|
|
14
|
+
.rf-grid [data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
|
|
15
|
+
.rf-grid [data-columns="4"] { grid-template-columns: repeat(4, 1fr); }
|
|
16
|
+
.rf-grid [data-columns="5"] { grid-template-columns: repeat(5, 1fr); }
|
|
17
|
+
.rf-grid [data-columns="6"] { grid-template-columns: repeat(6, 1fr); }
|
|
18
|
+
/* Flow */
|
|
19
|
+
.rf-grid [data-flow="column"] { grid-auto-flow: column; }
|
|
20
|
+
.rf-grid [data-flow="dense"] { grid-auto-flow: dense; }
|
|
21
|
+
.rf-grid [data-flow="row dense"] { grid-auto-flow: row dense; }
|
|
22
|
+
.rf-grid [data-flow="column dense"] { grid-auto-flow: column dense; }
|
|
23
|
+
/* Spans */
|
|
24
|
+
.rf-grid [data-colspan="2"] { grid-column: span 2; }
|
|
25
|
+
.rf-grid [data-colspan="3"] { grid-column: span 3; }
|
|
26
|
+
.rf-grid [data-colspan="4"] { grid-column: span 4; }
|
|
27
|
+
.rf-grid [data-rowspan="2"] { grid-row: span 2; }
|
|
28
|
+
.rf-grid [data-rowspan="3"] { grid-row: span 3; }
|
|
29
|
+
.rf-grid [data-rowspan="4"] { grid-row: span 4; }
|
|
30
|
+
/* Auto mode — responsive auto-fill */
|
|
31
|
+
.rf-grid[data-mode="auto"] [data-layout="grid"] {
|
|
32
|
+
grid-template-columns: repeat(auto-fill, minmax(var(--grid-min, 250px), 1fr));
|
|
33
|
+
}
|
|
34
|
+
/* Masonry mode — progressive enhancement */
|
|
35
|
+
.rf-grid[data-mode="masonry"] [data-layout="grid"] {
|
|
36
|
+
grid-template-rows: masonry;
|
|
37
|
+
}
|
|
38
|
+
/* Aspect ratio enforcement on cells */
|
|
39
|
+
.rf-grid[data-aspect] [data-name="cell"] {
|
|
40
|
+
aspect-ratio: var(--grid-aspect);
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
}
|
|
43
|
+
.rf-grid[data-aspect] [data-name="cell"] > img,
|
|
44
|
+
.rf-grid[data-aspect] [data-name="cell"] > video {
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 100%;
|
|
47
|
+
object-fit: cover;
|
|
48
|
+
}
|
|
49
|
+
/* Stack order when collapsed */
|
|
50
|
+
.rf-grid[data-stack="reverse"] [data-name="cell"]:last-child {
|
|
51
|
+
order: -1;
|
|
52
|
+
}
|
|
53
|
+
/* Collapse breakpoints */
|
|
54
|
+
@media (max-width: 640px) {
|
|
55
|
+
.rf-grid[data-collapse="sm"] [data-layout="grid"] { grid-template-columns: 1fr; }
|
|
56
|
+
}
|
|
57
|
+
@media (max-width: 768px) {
|
|
58
|
+
.rf-grid[data-collapse="md"] [data-layout="grid"] { grid-template-columns: 1fr; }
|
|
59
|
+
}
|
|
60
|
+
@media (max-width: 1024px) {
|
|
61
|
+
.rf-grid[data-collapse="lg"] [data-layout="grid"] { grid-template-columns: 1fr; }
|
|
62
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/* hero — structure. The relative root (scrim/overlay anchor), the preamble +
|
|
2
|
+
* eyebrow stretched-link, the actions/button flex rows and their alignment via
|
|
3
|
+
* auto-margins + the mobile stack, the media-position flip, the responsive image
|
|
4
|
+
* box, and the cover-band height/containment authority (which wins over the
|
|
5
|
+
* shared cover layer by specificity). All spacing, type, the headline gradient,
|
|
6
|
+
* surface chrome, scrim, radii, and text-align stay skin (Lumina's
|
|
7
|
+
* styles/runes/hero.css). */
|
|
8
|
+
|
|
9
|
+
.rf-hero { position: relative; }
|
|
10
|
+
|
|
11
|
+
.rf-hero__preamble {
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
align-items: center;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Linked eyebrow → pill with a stretched link (chrome is skin). */
|
|
17
|
+
.rf-hero .rf-hero__eyebrow:has(a) {
|
|
18
|
+
display: inline-block;
|
|
19
|
+
position: relative;
|
|
20
|
+
}
|
|
21
|
+
.rf-hero .rf-hero__eyebrow:has(a) a::before {
|
|
22
|
+
content: '';
|
|
23
|
+
position: absolute;
|
|
24
|
+
inset: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.rf-hero__actions {
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
flex-wrap: wrap;
|
|
31
|
+
margin: 0 auto;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Alignment — auto-margins + flex alignment position the preamble/actions. */
|
|
35
|
+
.rf-hero[data-align="center"] .rf-hero__actions {
|
|
36
|
+
margin: 0 auto;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
}
|
|
39
|
+
.rf-hero[data-align="left"] .rf-hero__preamble {
|
|
40
|
+
align-items: flex-start;
|
|
41
|
+
}
|
|
42
|
+
.rf-hero[data-align="left"] .rf-hero__actions {
|
|
43
|
+
margin: 0;
|
|
44
|
+
}
|
|
45
|
+
.rf-hero[data-align="right"] .rf-hero__preamble {
|
|
46
|
+
align-items: flex-end;
|
|
47
|
+
}
|
|
48
|
+
.rf-hero[data-align="right"] .rf-hero__actions {
|
|
49
|
+
margin: 0 0 0 auto;
|
|
50
|
+
}
|
|
51
|
+
.rf-hero[data-align="center"] > p,
|
|
52
|
+
.rf-hero[data-align="center"] .rf-hero__blurb {
|
|
53
|
+
margin-left: auto;
|
|
54
|
+
margin-right: auto;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.rf-hero ul,
|
|
58
|
+
.rf-hero nav {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-wrap: wrap;
|
|
61
|
+
list-style: none;
|
|
62
|
+
}
|
|
63
|
+
.rf-hero[data-align="center"] ul,
|
|
64
|
+
.rf-hero[data-align="center"] nav {
|
|
65
|
+
justify-content: center;
|
|
66
|
+
}
|
|
67
|
+
.rf-hero li a,
|
|
68
|
+
.rf-hero nav a {
|
|
69
|
+
display: inline-flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* BUG-001 — content-first DOM inverts the shared media-first stacked contract. */
|
|
74
|
+
.rf-hero[data-media-position="bottom"] {
|
|
75
|
+
display: block;
|
|
76
|
+
}
|
|
77
|
+
.rf-hero[data-media-position="top"] {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column-reverse;
|
|
80
|
+
}
|
|
81
|
+
.rf-hero__media img {
|
|
82
|
+
display: block;
|
|
83
|
+
width: 100%;
|
|
84
|
+
height: auto;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* ── Cover mode (SPEC-101) — band height + containment authority. These win over
|
|
88
|
+
* the shared cover layer (dimensions/cover.css) by selector specificity. ── */
|
|
89
|
+
.rf-hero--cover {
|
|
90
|
+
--cover-aspect: auto;
|
|
91
|
+
min-height: clamp(22rem, 55vh, 40rem);
|
|
92
|
+
}
|
|
93
|
+
.rf-hero--cover[data-aspect] {
|
|
94
|
+
min-height: 0;
|
|
95
|
+
}
|
|
96
|
+
.rf-hero--cover[data-media-position="cover"][data-cover-scope="full"] {
|
|
97
|
+
container-type: normal;
|
|
98
|
+
}
|
|
99
|
+
.rf-hero--cover[data-height="sm"] { min-height: 20rem; }
|
|
100
|
+
.rf-hero--cover[data-height="md"] { min-height: 28rem; }
|
|
101
|
+
.rf-hero--cover[data-height="lg"] { min-height: 36rem; }
|
|
102
|
+
.rf-hero--cover[data-height="xl"] { min-height: 44rem; }
|
|
103
|
+
/* Centre-band default: seat the overlay mid-well unless anchored. */
|
|
104
|
+
.rf-hero--cover[data-media-position="cover"]:is([data-content-place="auto"], :not([data-content-place])) > [data-name="content"] {
|
|
105
|
+
align-self: center;
|
|
106
|
+
justify-self: stretch;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Mobile: stack actions full-width so the code block and button line up. */
|
|
110
|
+
@media (max-width: 640px) {
|
|
111
|
+
.rf-hero__actions {
|
|
112
|
+
flex-direction: column;
|
|
113
|
+
align-items: stretch;
|
|
114
|
+
}
|
|
115
|
+
.rf-hero__actions pre {
|
|
116
|
+
width: 100%;
|
|
117
|
+
box-sizing: border-box;
|
|
118
|
+
}
|
|
119
|
+
.rf-hero ul,
|
|
120
|
+
.rf-hero nav {
|
|
121
|
+
flex-direction: column;
|
|
122
|
+
align-items: stretch;
|
|
123
|
+
}
|
|
124
|
+
.rf-hero li a,
|
|
125
|
+
.rf-hero nav a {
|
|
126
|
+
justify-content: center;
|
|
127
|
+
width: 100%;
|
|
128
|
+
box-sizing: border-box;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* hint — structure. The header's icon+label inline-flex row, the icon display, and
|
|
2
|
+
* the glyph-mask box mechanism (the mask box + which registry glyph fills it). The
|
|
3
|
+
* header→body margin, the body reset, surface, colours, gaps, and type stay skin
|
|
4
|
+
* (Lumina's styles/runes/hint.css) — the header margin overrides sections.css
|
|
5
|
+
* `[data-section="header"]` (skin) by source order. The glyph *shapes* come from
|
|
6
|
+
* the icon registry as --rf-icon-hint-* mask custom properties (WORK-437). */
|
|
7
|
+
|
|
8
|
+
/* The lone hintType field renders icon + label in one inline-flex span (the gap
|
|
9
|
+
* is skin). */
|
|
10
|
+
.rf-hint__header > span {
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
}
|
|
14
|
+
.rf-hint__header [data-icon-group="hint"] { display: block; }
|
|
15
|
+
.rf-hint__header [data-icon-group="hint"]::before {
|
|
16
|
+
content: '';
|
|
17
|
+
display: block;
|
|
18
|
+
width: 1.25rem;
|
|
19
|
+
height: 1.25rem;
|
|
20
|
+
-webkit-mask-size: contain;
|
|
21
|
+
mask-size: contain;
|
|
22
|
+
-webkit-mask-repeat: no-repeat;
|
|
23
|
+
mask-repeat: no-repeat;
|
|
24
|
+
}
|
|
25
|
+
[data-icon-group="hint"][data-icon="note"]::before { -webkit-mask-image: var(--rf-icon-hint-note); mask-image: var(--rf-icon-hint-note); }
|
|
26
|
+
[data-icon-group="hint"][data-icon="warning"]::before { -webkit-mask-image: var(--rf-icon-hint-warning); mask-image: var(--rf-icon-hint-warning); }
|
|
27
|
+
[data-icon-group="hint"][data-icon="caution"]::before { -webkit-mask-image: var(--rf-icon-hint-caution); mask-image: var(--rf-icon-hint-caution); }
|
|
28
|
+
[data-icon-group="hint"][data-icon="check"]::before { -webkit-mask-image: var(--rf-icon-hint-check); mask-image: var(--rf-icon-hint-check); }
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* howto — structure. The steps list reset + counter, the step item counter +
|
|
2
|
+
* positioning, the step-number box placement/centring, and the metadata dense-tile
|
|
3
|
+
* grid (+ mobile). The surfaced tools list chrome, the step-number glyph + chrome,
|
|
4
|
+
* tip callouts, and type/spacing stay skin. */
|
|
5
|
+
.rf-howto__content ol {
|
|
6
|
+
list-style: none;
|
|
7
|
+
counter-reset: howto-step;
|
|
8
|
+
}
|
|
9
|
+
.rf-howto__content ol > li {
|
|
10
|
+
counter-increment: howto-step;
|
|
11
|
+
position: relative;
|
|
12
|
+
}
|
|
13
|
+
.rf-howto__content ol > li::before {
|
|
14
|
+
content: counter(howto-step);
|
|
15
|
+
position: absolute;
|
|
16
|
+
left: 0;
|
|
17
|
+
top: 0.625rem;
|
|
18
|
+
width: 1.5rem;
|
|
19
|
+
height: 1.5rem;
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
}
|
|
24
|
+
.rf-howto__metadata {
|
|
25
|
+
grid-template-columns: repeat(auto-fit, minmax(6rem, 1fr));
|
|
26
|
+
}
|
|
27
|
+
@media (max-width: 48rem) {
|
|
28
|
+
.rf-howto__metadata {
|
|
29
|
+
grid-template-columns: repeat(auto-fit, minmax(6rem, 1fr));
|
|
30
|
+
align-items: normal;
|
|
31
|
+
}
|
|
32
|
+
.rf-howto__metadata > [data-name="row"] {
|
|
33
|
+
display: flex;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/* itinerary — structure. The empty-day-header hide, the stops list reset, stop
|
|
2
|
+
* positioning + marker box placement (vertical + horizontal), the time/location
|
|
3
|
+
* block display, the duration-badge placement, the horizontal flex-scroll + stop
|
|
4
|
+
* min-width, and the compact display toggles. Connector borders, marker chrome,
|
|
5
|
+
* the duration text, type, and spacing are skin. */
|
|
6
|
+
.rf-itinerary-day__header:empty { display: none; }
|
|
7
|
+
.rf-itinerary-day ol { list-style: none; }
|
|
8
|
+
.rf-itinerary-stop { position: relative; }
|
|
9
|
+
.rf-itinerary-stop::before {
|
|
10
|
+
content: '';
|
|
11
|
+
position: absolute;
|
|
12
|
+
left: -0.4375rem;
|
|
13
|
+
top: 0.25rem;
|
|
14
|
+
width: 0.75rem;
|
|
15
|
+
height: 0.75rem;
|
|
16
|
+
}
|
|
17
|
+
.rf-itinerary-stop__time { display: block; }
|
|
18
|
+
.rf-itinerary-stop__location { display: block; }
|
|
19
|
+
.rf-itinerary-stop[data-duration]::after {
|
|
20
|
+
position: absolute;
|
|
21
|
+
top: 0.15rem;
|
|
22
|
+
right: 0;
|
|
23
|
+
}
|
|
24
|
+
.rf-itinerary--horizontal .rf-itinerary-day ol {
|
|
25
|
+
display: flex;
|
|
26
|
+
overflow-x: auto;
|
|
27
|
+
}
|
|
28
|
+
.rf-itinerary--horizontal .rf-itinerary-stop {
|
|
29
|
+
min-width: 14rem;
|
|
30
|
+
}
|
|
31
|
+
.rf-itinerary--horizontal .rf-itinerary-stop::before {
|
|
32
|
+
left: 0.5rem;
|
|
33
|
+
top: -0.4375rem;
|
|
34
|
+
}
|
|
35
|
+
.rf-itinerary--horizontal .rf-itinerary-stop[data-duration]::after {
|
|
36
|
+
position: static;
|
|
37
|
+
display: inline-block;
|
|
38
|
+
}
|
|
39
|
+
.rf-itinerary--compact .rf-itinerary-stop__body { display: none; }
|
|
40
|
+
.rf-itinerary--compact .rf-itinerary-stop__location { display: inline; }
|
|
41
|
+
.rf-itinerary--compact .rf-itinerary-stop__time { display: inline; }
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/* juxtapose — structure. The panel clip + relative positioning, the panel-label
|
|
2
|
+
* absolute placement, the media fill, the slider divider + handle positioning, the
|
|
3
|
+
* toggle-bar flex, and the meta/label hides. Radii, surface, chrome, glyphs, and
|
|
4
|
+
* the toggle-button styling stay skin (Lumina's styles/runes/juxtapose.css). */
|
|
5
|
+
|
|
6
|
+
.rf-juxtapose__panels { overflow: hidden; }
|
|
7
|
+
.rf-juxtapose-panel {
|
|
8
|
+
position: relative;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
}
|
|
11
|
+
.rf-juxtapose-panel__name {
|
|
12
|
+
position: absolute;
|
|
13
|
+
bottom: 0.5rem;
|
|
14
|
+
pointer-events: none;
|
|
15
|
+
}
|
|
16
|
+
.rf-juxtapose-panel:first-child .rf-juxtapose-panel__name { left: 0.5rem; }
|
|
17
|
+
.rf-juxtapose-panel:last-child .rf-juxtapose-panel__name { right: 0.5rem; }
|
|
18
|
+
.rf-juxtapose-panel__body :is(img, .rf-placeholder) {
|
|
19
|
+
display: block;
|
|
20
|
+
width: 100%;
|
|
21
|
+
height: auto;
|
|
22
|
+
object-fit: cover;
|
|
23
|
+
}
|
|
24
|
+
.rf-juxtapose-panel > meta { display: none; }
|
|
25
|
+
.rf-juxtapose--toggle .rf-juxtapose-panel__name { display: none; }
|
|
26
|
+
|
|
27
|
+
/* Slider divider (injected by behavior) */
|
|
28
|
+
.rf-juxtapose__divider {
|
|
29
|
+
position: absolute;
|
|
30
|
+
z-index: 10;
|
|
31
|
+
touch-action: none;
|
|
32
|
+
}
|
|
33
|
+
.rf-juxtapose:not([data-orientation="horizontal"]) .rf-juxtapose__divider {
|
|
34
|
+
top: 0;
|
|
35
|
+
bottom: 0;
|
|
36
|
+
width: 3px;
|
|
37
|
+
transform: translateX(-50%);
|
|
38
|
+
}
|
|
39
|
+
.rf-juxtapose[data-orientation="horizontal"] .rf-juxtapose__divider {
|
|
40
|
+
left: 0;
|
|
41
|
+
right: 0;
|
|
42
|
+
height: 3px;
|
|
43
|
+
transform: translateY(-50%);
|
|
44
|
+
}
|
|
45
|
+
.rf-juxtapose__divider-handle {
|
|
46
|
+
position: absolute;
|
|
47
|
+
top: 50%;
|
|
48
|
+
left: 50%;
|
|
49
|
+
transform: translate(-50%, -50%);
|
|
50
|
+
width: 2.5rem;
|
|
51
|
+
height: 2.5rem;
|
|
52
|
+
display: flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Toggle bar (injected by behavior) */
|
|
58
|
+
.rf-juxtapose__toggle-bar {
|
|
59
|
+
display: flex;
|
|
60
|
+
width: fit-content;
|
|
61
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* lore — structure. The relative root (spoiler-overlay anchor), the title block,
|
|
2
|
+
* and the spoiler-overlay positioning. The blur effect, overlay chrome, glyph, and
|
|
3
|
+
* type stay skin. */
|
|
4
|
+
.rf-lore { position: relative; }
|
|
5
|
+
.rf-lore > span[property="title"] { display: block; }
|
|
6
|
+
.rf-lore--spoiler::after {
|
|
7
|
+
position: absolute;
|
|
8
|
+
top: 50%;
|
|
9
|
+
left: 50%;
|
|
10
|
+
transform: translate(-50%, -50%);
|
|
11
|
+
z-index: 1;
|
|
12
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* map — structure. The wrapper clip, the per-size container heights, the container
|
|
2
|
+
* box (width/positioning/isolation stacking context), the fallback list reset, the
|
|
3
|
+
* sr-only pins list, the pin-group inline box, metadata hide, the media-guest fill,
|
|
4
|
+
* and the popup-title block. Margins, radii, surface, fallback type, and the
|
|
5
|
+
* Leaflet popup chrome are skin. */
|
|
6
|
+
.rf-map { overflow: hidden; }
|
|
7
|
+
.rf-map--small .rf-map__container { height: 200px; }
|
|
8
|
+
.rf-map--medium .rf-map__container { height: 400px; }
|
|
9
|
+
.rf-map--large .rf-map__container { height: 600px; }
|
|
10
|
+
.rf-map--full .rf-map__container { height: 80vh; min-height: 400px; }
|
|
11
|
+
.rf-map__container {
|
|
12
|
+
width: 100%;
|
|
13
|
+
position: relative;
|
|
14
|
+
isolation: isolate;
|
|
15
|
+
}
|
|
16
|
+
.rf-map__fallback {
|
|
17
|
+
list-style: decimal inside;
|
|
18
|
+
}
|
|
19
|
+
.rf-map__pins {
|
|
20
|
+
position: absolute;
|
|
21
|
+
width: 1px;
|
|
22
|
+
height: 1px;
|
|
23
|
+
padding: 0;
|
|
24
|
+
margin: -1px;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
clip: rect(0, 0, 0, 0);
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
border: 0;
|
|
29
|
+
}
|
|
30
|
+
.rf-map-pin__group {
|
|
31
|
+
display: inline-block;
|
|
32
|
+
}
|
|
33
|
+
.rf-map meta,
|
|
34
|
+
.rf-map span[property] {
|
|
35
|
+
display: none;
|
|
36
|
+
}
|
|
37
|
+
[data-section="media"] > .rf-map {
|
|
38
|
+
height: 100%;
|
|
39
|
+
}
|
|
40
|
+
[data-section="media"] > .rf-map > .rf-map__container {
|
|
41
|
+
height: 100%;
|
|
42
|
+
}
|
|
43
|
+
.rf-map .leaflet-popup-content strong {
|
|
44
|
+
display: block;
|
|
45
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* mediatext — structure. The grid layout + ratios, the right-order swap, the media
|
|
2
|
+
* image box, the wrap-mode media widths + floats + clearfix (and the responsive
|
|
3
|
+
* collapse). Gaps, radii, and body margins are skin. */
|
|
4
|
+
.rf-mediatext:not([data-wrap="true"]) {
|
|
5
|
+
display: grid;
|
|
6
|
+
align-items: start;
|
|
7
|
+
}
|
|
8
|
+
.rf-mediatext[data-ratio="1:1"]:not([data-wrap="true"]) { grid-template-columns: 1fr 1fr; }
|
|
9
|
+
.rf-mediatext[data-ratio="1:2"]:not([data-wrap="true"]) { grid-template-columns: 1fr 2fr; }
|
|
10
|
+
.rf-mediatext[data-ratio="2:1"]:not([data-wrap="true"]) { grid-template-columns: 2fr 1fr; }
|
|
11
|
+
.rf-mediatext--right:not([data-wrap="true"]) .rf-mediatext__media { order: 1; }
|
|
12
|
+
.rf-mediatext__media :is(img, .rf-placeholder) {
|
|
13
|
+
max-width: 100%;
|
|
14
|
+
height: auto;
|
|
15
|
+
}
|
|
16
|
+
.rf-mediatext[data-ratio="1:1"][data-wrap="true"] .rf-mediatext__media { max-width: 50%; }
|
|
17
|
+
.rf-mediatext[data-ratio="1:2"][data-wrap="true"] .rf-mediatext__media { max-width: 33.333%; }
|
|
18
|
+
.rf-mediatext[data-ratio="2:1"][data-wrap="true"] .rf-mediatext__media { max-width: 66.666%; }
|
|
19
|
+
.rf-mediatext--left[data-wrap="true"] .rf-mediatext__media { float: left; }
|
|
20
|
+
.rf-mediatext--right[data-wrap="true"] .rf-mediatext__media { float: right; }
|
|
21
|
+
.rf-mediatext[data-wrap="true"]::after {
|
|
22
|
+
content: '';
|
|
23
|
+
display: table;
|
|
24
|
+
clear: both;
|
|
25
|
+
}
|
|
26
|
+
@media (max-width: 768px) {
|
|
27
|
+
.rf-mediatext:not([data-wrap="true"]) {
|
|
28
|
+
grid-template-columns: 1fr !important;
|
|
29
|
+
}
|
|
30
|
+
.rf-mediatext--right:not([data-wrap="true"]) .rf-mediatext__media {
|
|
31
|
+
order: 0;
|
|
32
|
+
}
|
|
33
|
+
.rf-mediatext[data-wrap="true"] .rf-mediatext__media {
|
|
34
|
+
float: none;
|
|
35
|
+
max-width: 100%;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* milestone — structure. The backlog tab strip (scrollable flex) + tab flex, and
|
|
2
|
+
* the aggregate-progress flex + bar box + fill. The eyebrow/title/metadata/body
|
|
3
|
+
* spacing, tab chrome, and bar colours are skin. */
|
|
4
|
+
.rf-milestone__tabs {
|
|
5
|
+
display: flex;
|
|
6
|
+
overflow-x: auto;
|
|
7
|
+
overflow-y: hidden;
|
|
8
|
+
-webkit-overflow-scrolling: touch;
|
|
9
|
+
}
|
|
10
|
+
.rf-milestone__tab {
|
|
11
|
+
flex: 0 0 auto;
|
|
12
|
+
}
|
|
13
|
+
.rf-milestone__progress {
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
}
|
|
17
|
+
.rf-milestone__progress-header {
|
|
18
|
+
display: flex;
|
|
19
|
+
justify-content: space-between;
|
|
20
|
+
align-items: baseline;
|
|
21
|
+
}
|
|
22
|
+
.rf-milestone__progress-bar {
|
|
23
|
+
height: 0.375rem;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
}
|
|
26
|
+
.rf-milestone__progress-bar::after {
|
|
27
|
+
content: '';
|
|
28
|
+
display: block;
|
|
29
|
+
height: 100%;
|
|
30
|
+
width: var(--rf-progress, 0%);
|
|
31
|
+
}
|