@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.
Files changed (107) hide show
  1. package/README.md +41 -0
  2. package/dist/index.d.ts +24 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +23 -0
  5. package/dist/index.js.map +1 -0
  6. package/index.css +145 -0
  7. package/package.json +37 -0
  8. package/styles/dimensions/checklist.css +43 -0
  9. package/styles/dimensions/cover.css +91 -0
  10. package/styles/dimensions/guest-posture.css +19 -0
  11. package/styles/dimensions/media.css +38 -0
  12. package/styles/dimensions/metadata.css +66 -0
  13. package/styles/dimensions/sections.css +22 -0
  14. package/styles/dimensions/sequence.css +109 -0
  15. package/styles/dimensions/state.css +28 -0
  16. package/styles/global.css +37 -0
  17. package/styles/layouts/blog.css +38 -0
  18. package/styles/layouts/default.css +51 -0
  19. package/styles/layouts/docs.css +82 -0
  20. package/styles/layouts/mobile.css +39 -0
  21. package/styles/layouts/on-this-page.css +4 -0
  22. package/styles/layouts/plan.css +103 -0
  23. package/styles/layouts/search.css +80 -0
  24. package/styles/layouts/split.css +127 -0
  25. package/styles/layouts/theme-toggle.css +26 -0
  26. package/styles/layouts/version-switcher.css +10 -0
  27. package/styles/runes/accordion.css +55 -0
  28. package/styles/runes/aggregate.css +13 -0
  29. package/styles/runes/annotate.css +55 -0
  30. package/styles/runes/audio.css +70 -0
  31. package/styles/runes/bento.css +118 -0
  32. package/styles/runes/bg.css +29 -0
  33. package/styles/runes/blog.css +13 -0
  34. package/styles/runes/bond.css +36 -0
  35. package/styles/runes/breadcrumb.css +16 -0
  36. package/styles/runes/budget.css +42 -0
  37. package/styles/runes/card.css +37 -0
  38. package/styles/runes/cast.css +33 -0
  39. package/styles/runes/changelog.css +9 -0
  40. package/styles/runes/character.css +22 -0
  41. package/styles/runes/chart.css +32 -0
  42. package/styles/runes/codegroup.css +25 -0
  43. package/styles/runes/collection.css +51 -0
  44. package/styles/runes/compare.css +19 -0
  45. package/styles/runes/comparison.css +54 -0
  46. package/styles/runes/conversation.css +29 -0
  47. package/styles/runes/cta.css +46 -0
  48. package/styles/runes/datatable.css +16 -0
  49. package/styles/runes/design-context.css +6 -0
  50. package/styles/runes/details.css +19 -0
  51. package/styles/runes/diagram.css +17 -0
  52. package/styles/runes/diff.css +40 -0
  53. package/styles/runes/drawer.css +118 -0
  54. package/styles/runes/embed.css +20 -0
  55. package/styles/runes/event.css +5 -0
  56. package/styles/runes/expand.css +7 -0
  57. package/styles/runes/faction.css +13 -0
  58. package/styles/runes/feature.css +56 -0
  59. package/styles/runes/figure.css +23 -0
  60. package/styles/runes/file-ref.css +2 -0
  61. package/styles/runes/form.css +55 -0
  62. package/styles/runes/gallery.css +128 -0
  63. package/styles/runes/grid.css +62 -0
  64. package/styles/runes/hero.css +130 -0
  65. package/styles/runes/hint.css +28 -0
  66. package/styles/runes/howto.css +35 -0
  67. package/styles/runes/itinerary.css +41 -0
  68. package/styles/runes/juxtapose.css +61 -0
  69. package/styles/runes/lore.css +12 -0
  70. package/styles/runes/map.css +45 -0
  71. package/styles/runes/mediatext.css +37 -0
  72. package/styles/runes/milestone.css +31 -0
  73. package/styles/runes/mockup.css +144 -0
  74. package/styles/runes/nav.css +258 -0
  75. package/styles/runes/organization.css +6 -0
  76. package/styles/runes/page-section.css +12 -0
  77. package/styles/runes/pagination.css +39 -0
  78. package/styles/runes/palette.css +33 -0
  79. package/styles/runes/placeholder.css +7 -0
  80. package/styles/runes/plan-history.css +38 -0
  81. package/styles/runes/plan-progress.css +10 -0
  82. package/styles/runes/playlist.css +61 -0
  83. package/styles/runes/plot.css +23 -0
  84. package/styles/runes/preview.css +45 -0
  85. package/styles/runes/pricing.css +40 -0
  86. package/styles/runes/progress.css +22 -0
  87. package/styles/runes/pullquote.css +39 -0
  88. package/styles/runes/realm.css +14 -0
  89. package/styles/runes/recipe.css +40 -0
  90. package/styles/runes/relationships.css +49 -0
  91. package/styles/runes/reveal.css +29 -0
  92. package/styles/runes/sandbox.css +30 -0
  93. package/styles/runes/section.css +36 -0
  94. package/styles/runes/showcase.css +12 -0
  95. package/styles/runes/spacing.css +45 -0
  96. package/styles/runes/steps.css +65 -0
  97. package/styles/runes/storyboard.css +22 -0
  98. package/styles/runes/swatch.css +12 -0
  99. package/styles/runes/symbol.css +8 -0
  100. package/styles/runes/tabs.css +28 -0
  101. package/styles/runes/testimonial.css +13 -0
  102. package/styles/runes/textblock.css +25 -0
  103. package/styles/runes/timeline.css +31 -0
  104. package/styles/runes/toc.css +10 -0
  105. package/styles/runes/track.css +55 -0
  106. package/styles/runes/typography.css +33 -0
  107. package/styles/runes/xref.css +5 -0
@@ -0,0 +1,33 @@
1
+ /* cast — structure. The members list reset, grid/list arrangements, name/role
2
+ * block display, empty-body hide, the avatar box (size/crop/display), and the list
3
+ * variant flex. Surface chrome, type, radii, and margins are skin. */
4
+ .rf-cast__members { list-style: none; }
5
+ .rf-cast--grid .rf-cast__members {
6
+ display: grid;
7
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
8
+ }
9
+ .rf-cast--list .rf-cast__members {
10
+ display: flex;
11
+ flex-direction: column;
12
+ }
13
+ .rf-cast-member__name { display: block; }
14
+ .rf-cast-member__role { display: block; }
15
+ .rf-cast-member__body:empty { display: none; }
16
+ .rf-cast-member img {
17
+ width: 80px;
18
+ height: 80px;
19
+ object-fit: cover;
20
+ display: block;
21
+ }
22
+ .rf-cast--list .rf-cast-member {
23
+ display: flex;
24
+ align-items: center;
25
+ }
26
+ .rf-cast--list .rf-cast-member img {
27
+ width: 48px;
28
+ height: 48px;
29
+ flex-shrink: 0;
30
+ }
31
+ .rf-cast--list .rf-cast-member__body {
32
+ flex: 1;
33
+ }
@@ -0,0 +1,9 @@
1
+ /* changelog — structure. The display:contents passthroughs (the releases list and
2
+ * each release body project their children into the flow) and the block date /
3
+ * inline-block badge displays. Spacing, borders, type, and colour are skin
4
+ * (Lumina's styles/runes/changelog.css). */
5
+
6
+ .rf-changelog__releases { display: contents; }
7
+ .rf-changelog-release__body { display: contents; }
8
+ .rf-changelog-release time { display: block; }
9
+ .rf-changelog-release strong { display: inline-block; }
@@ -0,0 +1,22 @@
1
+ /* character — structure. The float-containment, the floated portrait box (float +
2
+ * size + clip), the avatar fill, the sections flex column, and the section-name
3
+ * block. Portrait margins/radius, type, borders, and list indents are skin. */
4
+ .rf-character { display: flow-root; }
5
+ .rf-character__portrait {
6
+ float: right;
7
+ width: 120px;
8
+ height: 120px;
9
+ overflow: hidden;
10
+ }
11
+ .rf-character__portrait img {
12
+ width: 100%;
13
+ height: 100%;
14
+ object-fit: cover;
15
+ }
16
+ .rf-character__sections {
17
+ display: flex;
18
+ flex-direction: column;
19
+ }
20
+ .rf-character-section__name {
21
+ display: block;
22
+ }
@@ -0,0 +1,32 @@
1
+ /* chart — structure. The chart block, the responsive SVG + container, the legend
2
+ * flex, the legend-swatch box, and the sr-only data table once rendered. The
3
+ * --rf-chart-* theming contract (palette + geometry values), all SVG paint, the
4
+ * data-table chrome, and type stay skin (Lumina's styles/runes/chart.css). */
5
+
6
+ .rf-chart { display: block; }
7
+ .rf-chart__container { width: 100%; }
8
+ .rf-chart__svg { width: 100%; height: auto; }
9
+ .rf-chart__legend {
10
+ display: flex;
11
+ justify-content: center;
12
+ }
13
+ .rf-chart__legend-item {
14
+ display: flex;
15
+ align-items: center;
16
+ }
17
+ .rf-chart__legend-color {
18
+ width: 12px;
19
+ height: 12px;
20
+ }
21
+ /* Rendered: the data table becomes the sr-only source of truth. */
22
+ .rf-chart[data-rendered] .rf-chart__data {
23
+ position: absolute;
24
+ width: 1px;
25
+ height: 1px;
26
+ padding: 0;
27
+ margin: -1px;
28
+ overflow: hidden;
29
+ clip: rect(0, 0, 0, 0);
30
+ white-space: nowrap;
31
+ border: 0;
32
+ }
@@ -0,0 +1,25 @@
1
+ /* codegroup — structure. The wrapper clip, the topbar flex, the list reset, the
2
+ * scrollable tab strip (display + overflow), and the tab-button flex. The strip's
3
+ * `display: flex` is what guest-posture's hide rule overrides. The surface chrome,
4
+ * the window-dot decoration, type, borders, and all pre/code treatment are skin
5
+ * (Lumina's styles/runes/codegroup.css) — the pre/code rules deliberately override
6
+ * elements/code.css by source order, so they must stay skin. */
7
+
8
+ .rf-codegroup { overflow: hidden; }
9
+
10
+ .rf-codegroup__topbar {
11
+ display: flex;
12
+ align-items: center;
13
+ }
14
+
15
+ .rf-codegroup ul { list-style: none; }
16
+
17
+ .rf-codegroup__tabs {
18
+ display: flex;
19
+ overflow-x: auto;
20
+ overflow-y: hidden;
21
+ }
22
+
23
+ .rf-codegroup__tab {
24
+ flex: 0 0 auto;
25
+ }
@@ -0,0 +1,51 @@
1
+ /* collection — structure. The list/grid arrangement (items flex/grid, grouped-grid
2
+ * passthrough, uniform-height item flex, the grid group + title span), the card
3
+ * flex column, and the block-content item display reset. Spacing, gaps, card
4
+ * chrome, type, and the table cell treatment are skin (Lumina's
5
+ * styles/runes/collection.css). The table width/border-collapse stays skin (the
6
+ * same value-identical contention with the table element + global table as
7
+ * comparison). */
8
+
9
+ .rf-collection__items {
10
+ display: flex;
11
+ flex-direction: column;
12
+ }
13
+ .rf-collection[data-layout='grid'] .rf-collection__items {
14
+ display: grid;
15
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
16
+ align-items: stretch;
17
+ }
18
+ .rf-collection[data-layout='grid'] .rf-collection__item {
19
+ display: flex;
20
+ }
21
+ .rf-collection[data-layout='grid'] .rf-collection__item > * {
22
+ flex: 1;
23
+ min-width: 0;
24
+ }
25
+ .rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-collection__group),
26
+ .rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-accordion) {
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+ .rf-collection[data-layout='grid'] .rf-collection__group {
31
+ display: grid;
32
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
33
+ align-items: stretch;
34
+ }
35
+ .rf-collection[data-layout='grid'] .rf-collection__group-title {
36
+ grid-column: 1 / -1;
37
+ }
38
+ .rf-collection__item {
39
+ min-width: 0;
40
+ }
41
+ .rf-collection__card {
42
+ display: flex;
43
+ flex-direction: column;
44
+ }
45
+ .rf-collection__group {
46
+ display: flex;
47
+ flex-direction: column;
48
+ }
49
+ .rf-collection__item[data-block] {
50
+ display: block;
51
+ }
@@ -0,0 +1,19 @@
1
+ /* compare — structure. The wrapper clip, the side-by-side grid / stacked flex
2
+ * panels, the panel min-width + scroll, and the label block. Borders, header/label
3
+ * chrome, and code resets are skin. */
4
+ .rf-compare { overflow: hidden; }
5
+ .rf-compare--side-by-side .rf-compare__panels {
6
+ display: grid;
7
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
8
+ }
9
+ .rf-compare--stacked .rf-compare__panels {
10
+ display: flex;
11
+ flex-direction: column;
12
+ }
13
+ .rf-compare [data-panel] {
14
+ min-width: 0;
15
+ overflow: auto;
16
+ }
17
+ .rf-compare [data-label] {
18
+ display: block;
19
+ }
@@ -0,0 +1,54 @@
1
+ /* comparison — structure. The display:contents grid passthroughs, the table scroll
2
+ * + sticky-head geometry, the cards grid, the card flex rows + badge positioning,
3
+ * list resets, the fixed label-col width, and metadata/strong-label hiding.
4
+ * Surface chrome, type, colour, borders, spacing, table cell sizing, and the
5
+ * highlight transform stay skin (Lumina's styles/runes/comparison.css). The table
6
+ * width/border-collapse stays skin too (it contends with the table element
7
+ * override + global table by value-identical rules). */
8
+
9
+ .rf-comparison__grid { display: contents; }
10
+ .rf-comparison-column__body,
11
+ .rf-comparison-row__body { display: contents; }
12
+
13
+ .rf-comparison > meta,
14
+ .rf-comparison > span[property] { display: none; }
15
+
16
+ /* Table layout */
17
+ .rf-comparison__table-wrapper {
18
+ overflow-x: auto;
19
+ -webkit-overflow-scrolling: touch;
20
+ }
21
+ .rf-comparison__table thead {
22
+ position: sticky;
23
+ top: 0;
24
+ z-index: 1;
25
+ }
26
+ .rf-comparison__recommended-badge { display: block; }
27
+ .rf-comparison__label-col { width: 1%; }
28
+ .rf-comparison__cell strong { display: none; }
29
+ .rf-comparison__callout-badge { display: inline-block; }
30
+
31
+ /* Cards layout */
32
+ .rf-comparison__cards {
33
+ display: grid;
34
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
35
+ align-items: start;
36
+ }
37
+ .rf-comparison-card { position: relative; }
38
+ .rf-comparison-card__badge {
39
+ position: absolute;
40
+ top: -0.625rem;
41
+ left: 50%;
42
+ transform: translateX(-50%);
43
+ }
44
+ .rf-comparison-card__rows { list-style: none; }
45
+ .rf-comparison-card__row {
46
+ display: flex;
47
+ align-items: baseline;
48
+ }
49
+ .rf-comparison-card__row p { display: inline; }
50
+
51
+ /* Responsive */
52
+ @media (max-width: 640px) {
53
+ .rf-comparison__cards { grid-template-columns: 1fr; }
54
+ }
@@ -0,0 +1,29 @@
1
+ /* conversation — structure. The column stack, the message bubble flex + width +
2
+ * side alignment, and the data-carrier hides. Bubble chrome, type, and gaps are
3
+ * skin (Lumina's styles/runes/conversation.css). */
4
+
5
+ .rf-conversation {
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+ .rf-conversation__messages {
10
+ display: flex;
11
+ flex-direction: column;
12
+ }
13
+ .rf-conversation-message {
14
+ display: flex;
15
+ flex-direction: column;
16
+ max-width: 80%;
17
+ }
18
+ .rf-conversation-message--left {
19
+ align-self: flex-start;
20
+ align-items: flex-start;
21
+ }
22
+ .rf-conversation-message--right {
23
+ align-self: flex-end;
24
+ align-items: flex-end;
25
+ }
26
+ .rf-conversation-message > span[data-field="speaker"],
27
+ .rf-conversation-message > meta[data-field] { display: none; }
28
+ .rf-conversation-message__body > span[data-field],
29
+ .rf-conversation-message__body > meta { display: none; }
@@ -0,0 +1,46 @@
1
+ /* cta — structure. The preamble layout + stretched-link eyebrow, the action-button
2
+ * flex row + its mobile stack, list resets. All spacing, type, the headline
3
+ * gradient, surface chrome, and colour stay skin (Lumina's styles/runes/cta.css). */
4
+
5
+ .rf-cta__preamble {
6
+ flex-direction: column;
7
+ align-items: center;
8
+ }
9
+
10
+ /* Linked eyebrow → pill with a stretched link (chrome is skin). */
11
+ .rf-cta .rf-cta__eyebrow:has(a) {
12
+ display: inline-block;
13
+ position: relative;
14
+ }
15
+ .rf-cta .rf-cta__eyebrow:has(a) a::before {
16
+ content: '';
17
+ position: absolute;
18
+ inset: 0;
19
+ }
20
+
21
+ /* Action-button row. */
22
+ .rf-cta ul {
23
+ display: flex;
24
+ justify-content: center;
25
+ flex-wrap: wrap;
26
+ list-style: none;
27
+ }
28
+ .rf-cta li a,
29
+ .rf-cta nav a {
30
+ display: inline-flex;
31
+ align-items: center;
32
+ }
33
+
34
+ /* Mobile: stack action buttons full-width so multi-button CTAs line up. */
35
+ @media (max-width: 640px) {
36
+ .rf-cta ul {
37
+ flex-direction: column;
38
+ align-items: stretch;
39
+ }
40
+ .rf-cta li a,
41
+ .rf-cta nav a {
42
+ justify-content: center;
43
+ width: 100%;
44
+ box-sizing: border-box;
45
+ }
46
+ }
@@ -0,0 +1,16 @@
1
+ /* datatable — structure. The toolbar + pagination flex rows and the full-width
2
+ * search input. The table chrome, type, borders, and the table overflow/width
3
+ * overrides (which override the table element wrapper by source order) stay skin
4
+ * (Lumina's styles/runes/datatable.css). */
5
+
6
+ .rf-datatable__toolbar {
7
+ display: flex;
8
+ }
9
+ .rf-datatable__input {
10
+ width: 100%;
11
+ }
12
+ .rf-datatable__pagination {
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: space-between;
16
+ }
@@ -0,0 +1,6 @@
1
+ /* design-context — structure. The sections flex column. The title type and the
2
+ * child card-reset chrome are skin. */
3
+ .rf-design-context__sections {
4
+ display: flex;
5
+ flex-direction: column;
6
+ }
@@ -0,0 +1,19 @@
1
+ /* details — structure. The summary flex + native-marker hide, the disclosure
2
+ * marker box (push + flex-shrink) and its open-rotate, and the list reset. Type,
3
+ * spacing, colour, the marker glyph, and transitions are skin (Lumina's
4
+ * styles/runes/details.css). */
5
+
6
+ .rf-details__summary {
7
+ display: flex;
8
+ align-items: center;
9
+ list-style: none;
10
+ }
11
+ .rf-details__summary::-webkit-details-marker { display: none; }
12
+ .rf-details__summary::marker { display: none; content: ''; }
13
+ .rf-details__summary::after {
14
+ flex-shrink: 0;
15
+ margin-left: auto;
16
+ }
17
+ .rf-details[open] .rf-details__summary::after {
18
+ transform: rotate(90deg);
19
+ }
@@ -0,0 +1,17 @@
1
+ /* diagram — structure. The block + clip, the centered scrollable container, and
2
+ * the responsive SVG. Surface chrome, padding, type, text-align, and the Mermaid
3
+ * SVG colour overrides are skin (Lumina's styles/runes/diagram.css). */
4
+
5
+ .rf-diagram {
6
+ display: block;
7
+ overflow: hidden;
8
+ }
9
+ .rf-diagram__container {
10
+ display: flex;
11
+ justify-content: center;
12
+ overflow-x: auto;
13
+ }
14
+ .rf-diagram__container svg {
15
+ max-width: 100%;
16
+ height: auto;
17
+ }
@@ -0,0 +1,40 @@
1
+ /* diff — structure. The horizontal-scroll container, the sticky header pin, the
2
+ * split-panel grid, the rows max-content grid, the line flex + gutter sizing.
3
+ * Borders, radii, code background, the line-status tints, and type stay skin
4
+ * (Lumina's styles/runes/diff.css). */
5
+
6
+ .rf-diff {
7
+ overflow-x: auto;
8
+ overflow-y: hidden;
9
+ overscroll-behavior-x: contain;
10
+ }
11
+ .rf-diff__header {
12
+ position: sticky;
13
+ left: 0;
14
+ }
15
+ .rf-diff__split-container {
16
+ display: grid;
17
+ grid-template-columns: 1fr 1fr;
18
+ min-width: 40rem;
19
+ }
20
+ .rf-diff__code {
21
+ overflow-x: auto;
22
+ overscroll-behavior-x: contain;
23
+ }
24
+ .rf-diff__rows {
25
+ display: grid;
26
+ min-width: max-content;
27
+ }
28
+ .rf-diff__line {
29
+ display: flex;
30
+ min-height: 1.6em;
31
+ }
32
+ .rf-diff__gutter-num {
33
+ flex-shrink: 0;
34
+ width: 2.5em;
35
+ min-height: 1.6em;
36
+ }
37
+ .rf-diff__line-content {
38
+ flex: 1 0 auto;
39
+ min-height: 1.6em;
40
+ }
@@ -0,0 +1,118 @@
1
+ /* drawer — structure (SPEC-060). The scroll-lock, the in-flow header/footer flex,
2
+ * the dialog box model + flex column layout, the per-side inset positioning, and
3
+ * the size presets. Surface chrome (bg/fg/border/radius/shadow vars), the in-flow
4
+ * callout treatment, padding, the backdrop, and the slide animations + keyframes
5
+ * stay skin (Lumina's styles/runes/drawer.css) — the animation has no cross-layer
6
+ * competitor, so it lives with the motion-tuning vars. */
7
+
8
+ .rf-drawer {
9
+ --rf-drawer-size-sm: 22rem;
10
+ --rf-drawer-size-md: 36rem;
11
+ --rf-drawer-size-lg: 52rem;
12
+ }
13
+
14
+ /* Body-scroll lock while any drawer is open. */
15
+ html.rf-drawer-open,
16
+ html.rf-drawer-open body {
17
+ overflow: hidden;
18
+ }
19
+
20
+ /* In-flow header/footer layout. */
21
+ section.rf-drawer .rf-drawer__header {
22
+ display: flex;
23
+ align-items: baseline;
24
+ justify-content: space-between;
25
+ }
26
+ section.rf-drawer .rf-drawer__footer {
27
+ display: block;
28
+ }
29
+
30
+ /* Dialog box model + flex column (display:flex scoped to [open] so the closed
31
+ * dialog keeps the UA display:none). */
32
+ dialog.rf-drawer {
33
+ box-sizing: border-box;
34
+ overflow: hidden;
35
+ max-width: calc(100vw - 2 * var(--rf-drawer-gutter));
36
+ max-height: calc(100vh - 2 * var(--rf-drawer-gutter));
37
+ }
38
+ dialog.rf-drawer[open] {
39
+ display: flex;
40
+ flex-direction: column;
41
+ }
42
+ dialog.rf-drawer .rf-drawer__header {
43
+ flex: 0 0 auto;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: space-between;
47
+ }
48
+ dialog.rf-drawer .rf-drawer__close {
49
+ flex-shrink: 0;
50
+ }
51
+ dialog.rf-drawer .rf-drawer__body {
52
+ flex: 1 1 auto;
53
+ overflow-y: auto;
54
+ min-height: 0;
55
+ }
56
+ dialog.rf-drawer .rf-drawer__footer {
57
+ flex: 0 0 auto;
58
+ }
59
+
60
+ /* Per-side inset positioning. */
61
+ dialog.rf-drawer[data-side="right"] {
62
+ inset:
63
+ var(--rf-drawer-gutter)
64
+ var(--rf-drawer-gutter)
65
+ var(--rf-drawer-gutter)
66
+ auto;
67
+ height: auto;
68
+ }
69
+ dialog.rf-drawer[data-side="left"] {
70
+ inset:
71
+ var(--rf-drawer-gutter)
72
+ auto
73
+ var(--rf-drawer-gutter)
74
+ var(--rf-drawer-gutter);
75
+ height: auto;
76
+ }
77
+ dialog.rf-drawer[data-side="top"] {
78
+ inset:
79
+ var(--rf-drawer-gutter)
80
+ var(--rf-drawer-gutter)
81
+ auto
82
+ var(--rf-drawer-gutter);
83
+ width: auto;
84
+ }
85
+ dialog.rf-drawer[data-side="bottom"] {
86
+ inset:
87
+ auto
88
+ var(--rf-drawer-gutter)
89
+ var(--rf-drawer-gutter)
90
+ var(--rf-drawer-gutter);
91
+ width: auto;
92
+ }
93
+
94
+ /* Size presets (dialog mode). */
95
+ dialog.rf-drawer[data-side="right"][data-size="sm"],
96
+ dialog.rf-drawer[data-side="left"][data-size="sm"] {
97
+ width: var(--rf-drawer-size-sm);
98
+ }
99
+ dialog.rf-drawer[data-side="right"][data-size="md"],
100
+ dialog.rf-drawer[data-side="left"][data-size="md"] {
101
+ width: var(--rf-drawer-size-md);
102
+ }
103
+ dialog.rf-drawer[data-side="right"][data-size="lg"],
104
+ dialog.rf-drawer[data-side="left"][data-size="lg"] {
105
+ width: var(--rf-drawer-size-lg);
106
+ }
107
+ dialog.rf-drawer[data-side="top"][data-size="sm"],
108
+ dialog.rf-drawer[data-side="bottom"][data-size="sm"] {
109
+ height: var(--rf-drawer-size-sm);
110
+ }
111
+ dialog.rf-drawer[data-side="top"][data-size="md"],
112
+ dialog.rf-drawer[data-side="bottom"][data-size="md"] {
113
+ height: var(--rf-drawer-size-md);
114
+ }
115
+ dialog.rf-drawer[data-side="top"][data-size="lg"],
116
+ dialog.rf-drawer[data-side="bottom"][data-size="lg"] {
117
+ height: var(--rf-drawer-size-lg);
118
+ }
@@ -0,0 +1,20 @@
1
+ /* embed — structure. The responsive iframe wrapper (the position/overflow box + the
2
+ * absolutely-filled iframe) and the empty-fallback hide. Radius, surface, the
3
+ * iframe border reset, and fallback type are skin (Lumina's styles/runes/embed.css). */
4
+
5
+ .rf-embed__wrapper {
6
+ position: relative;
7
+ width: 100%;
8
+ height: 0;
9
+ overflow: hidden;
10
+ }
11
+ .rf-embed__wrapper iframe {
12
+ position: absolute;
13
+ top: 0;
14
+ left: 0;
15
+ width: 100%;
16
+ height: 100%;
17
+ }
18
+ .rf-embed__fallback:empty {
19
+ display: none;
20
+ }
@@ -0,0 +1,5 @@
1
+ /* event — structure. Only the register CTA's inline-block button box; the button
2
+ * chrome, the def-list top margin, body spacing, and links are skin. */
3
+ .rf-event__register a {
4
+ display: inline-block;
5
+ }
@@ -0,0 +1,7 @@
1
+ /* expand — structure. Only the inline-block canonical-link box; everything else
2
+ * (the peer-document treatment, heading scale, error chrome, spacing) is skin
3
+ * (Lumina's styles/runes/expand.css). */
4
+
5
+ .rf-expand__canonical-link {
6
+ display: inline-block;
7
+ }
@@ -0,0 +1,13 @@
1
+ /* faction — structure (mirrors realm). The stacked-top flex flip, the sections flex
2
+ * column, and the section-name block. Inset padding + gaps + chrome stay skin. */
3
+ .rf-faction[data-media-position="top"] {
4
+ display: flex;
5
+ flex-direction: column;
6
+ }
7
+ .rf-faction__sections {
8
+ display: flex;
9
+ flex-direction: column;
10
+ }
11
+ .rf-faction-section__name {
12
+ display: block;
13
+ }
@@ -0,0 +1,56 @@
1
+ /* feature — structure. The preamble flex + eyebrow stretched-link, the content
2
+ * display reset, the definitions grid, the feature-item icon stack, and the
3
+ * media-position flip. Spacing, type, surface chrome, alignment (text-align), and
4
+ * colour stay skin (Lumina's styles/runes/feature.css). */
5
+
6
+ .rf-feature__preamble {
7
+ flex-direction: column;
8
+ align-items: flex-start;
9
+ }
10
+
11
+ .rf-feature__eyebrow:has(a) {
12
+ display: inline-block;
13
+ position: relative;
14
+ }
15
+ .rf-feature__eyebrow:has(a) a::before {
16
+ content: '';
17
+ position: absolute;
18
+ inset: 0;
19
+ }
20
+
21
+ .rf-feature__content {
22
+ display: contents;
23
+ }
24
+
25
+ /* Definitions stack by default; the grid modifier tiles them. */
26
+ .rf-feature__definitions {
27
+ display: block;
28
+ }
29
+ .rf-feature--definitions-grid .rf-feature__definitions {
30
+ display: grid;
31
+ grid-template-columns: repeat(auto-fit, minmax(max(240px, calc((100% - 3rem) / 3)), 1fr));
32
+ }
33
+
34
+ /* Beside layouts: definitions stay stacked inside the content track. */
35
+ .rf-feature[data-media-position="start"] .rf-feature__content,
36
+ .rf-feature[data-media-position="end"] .rf-feature__content {
37
+ display: block;
38
+ }
39
+
40
+ .rf-feature__feature-item dt:has(> .rf-icon) {
41
+ display: flex;
42
+ flex-direction: column;
43
+ }
44
+ .rf-feature__feature-item dt > .rf-icon {
45
+ width: 1.5rem;
46
+ height: 1.5rem;
47
+ }
48
+
49
+ /* BUG-001 — content-first DOM inverts the shared media-first stacked contract. */
50
+ .rf-feature[data-media-position="bottom"] {
51
+ display: block;
52
+ }
53
+ .rf-feature[data-media-position="top"] {
54
+ display: flex;
55
+ flex-direction: column-reverse;
56
+ }
@@ -0,0 +1,23 @@
1
+ /* figure — structure. The image box (block + responsive max-width + centering),
2
+ * the frame-aspect fill, the named size max-widths, and the alignment auto-margins.
3
+ * The image radius and the caption type are skin (Lumina's styles/runes/figure.css). */
4
+
5
+ .rf-figure :is(img, .rf-placeholder) {
6
+ display: block;
7
+ max-width: 100%;
8
+ height: auto;
9
+ margin-inline: auto;
10
+ }
11
+ .rf-figure[style*="--frame-aspect"] :is(img, .rf-placeholder) {
12
+ width: 100%;
13
+ height: 100%;
14
+ object-fit: cover;
15
+ margin: 0;
16
+ }
17
+ .rf-figure--small { max-width: 320px; }
18
+ .rf-figure--medium { max-width: 640px; }
19
+ .rf-figure--large { max-width: 960px; }
20
+ .rf-figure--full { max-width: 100%; }
21
+ .rf-figure--left { margin-right: auto; }
22
+ .rf-figure--center { margin-left: auto; margin-right: auto; }
23
+ .rf-figure--right { margin-left: auto; }