@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,40 @@
1
+ /* pricing — structure. The tiers grid, the tier flex-column (so CTAs drop to a
2
+ * common baseline via margin-top:auto), the preamble/eyebrow layout +
3
+ * stretched-link, and list resets. All spacing, type, surface chrome, colour, and
4
+ * shadow stay skin (Lumina's styles/runes/pricing.css). */
5
+
6
+ .rf-pricing > header,
7
+ .rf-pricing__preamble {
8
+ flex-direction: column;
9
+ align-items: flex-start;
10
+ }
11
+
12
+ /* Linked eyebrow → pill with a stretched link (chrome is skin). */
13
+ .rf-pricing__eyebrow:has(a) {
14
+ display: inline-block;
15
+ position: relative;
16
+ }
17
+ .rf-pricing__eyebrow:has(a) a::before {
18
+ content: '';
19
+ position: absolute;
20
+ inset: 0;
21
+ }
22
+
23
+ .rf-pricing__tiers,
24
+ .rf-pricing > ul[data-layout="grid"] {
25
+ display: grid;
26
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
27
+ list-style: none;
28
+ }
29
+
30
+ .rf-tier {
31
+ display: flex;
32
+ flex-direction: column;
33
+ }
34
+
35
+ .rf-tier__body { flex: 1; }
36
+ .rf-tier__body ul { list-style: none; }
37
+ .rf-tier__body a {
38
+ display: block;
39
+ margin-top: auto;
40
+ }
@@ -0,0 +1,22 @@
1
+ /* progress — structure. The label/value flex row (+ value auto-push), the track
2
+ * box (full-row basis + fixed height + clip), and the fill box. Colours, radii,
3
+ * type, gaps, and the fill transition are skin (Lumina's styles/runes/progress.css). */
4
+
5
+ .rf-progress {
6
+ display: flex;
7
+ flex-wrap: wrap;
8
+ align-items: baseline;
9
+ }
10
+ .rf-progress__value {
11
+ margin-left: auto;
12
+ }
13
+ .rf-progress__track {
14
+ flex-basis: 100%;
15
+ height: 0.5rem;
16
+ overflow: hidden;
17
+ }
18
+ .rf-progress__fill {
19
+ display: block;
20
+ height: 100%;
21
+ width: var(--rf-progress, 0%);
22
+ }
@@ -0,0 +1,39 @@
1
+ /* pullquote — structure. The relative root (glyph anchor), the decorative-glyph
2
+ * positioning + the per-variant glyph hides + centred glyph re-centre, the
3
+ * centre/right auto-margins, and the float modes (+ responsive). The quote glyph,
4
+ * type, borders, backgrounds, and the inner-blockquote reset are skin. */
5
+ .rf-pullquote { position: relative; }
6
+ .rf-pullquote::before {
7
+ position: absolute;
8
+ top: -0.25rem;
9
+ left: 0;
10
+ }
11
+ .rf-pullquote--center {
12
+ margin-left: auto;
13
+ margin-right: auto;
14
+ }
15
+ .rf-pullquote--center::before {
16
+ left: 50%;
17
+ transform: translateX(-50%);
18
+ }
19
+ .rf-pullquote--left::before { display: none; }
20
+ .rf-pullquote--right {
21
+ margin-left: auto;
22
+ }
23
+ .rf-pullquote--right::before { display: none; }
24
+ .rf-pullquote[data-align="left"] {
25
+ float: left;
26
+ width: 40%;
27
+ }
28
+ .rf-pullquote[data-align="right"] {
29
+ float: right;
30
+ width: 40%;
31
+ }
32
+ .rf-pullquote--editorial::before { display: none; }
33
+ @media (max-width: 768px) {
34
+ .rf-pullquote[data-align="left"],
35
+ .rf-pullquote[data-align="right"] {
36
+ float: none;
37
+ width: 100%;
38
+ }
39
+ }
@@ -0,0 +1,14 @@
1
+ /* realm — structure. The stacked-top flex flip, the sections flex column, and the
2
+ * section-name block. The thin-edge inset padding + split gaps (which compete with
3
+ * the surface/split layers, like card) plus all chrome stay skin. */
4
+ .rf-realm[data-media-position="top"] {
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
8
+ .rf-realm__sections {
9
+ display: flex;
10
+ flex-direction: column;
11
+ }
12
+ .rf-realm-section__name {
13
+ display: block;
14
+ }
@@ -0,0 +1,40 @@
1
+ /* recipe — structure. The content flex column, the steps list reset + counter, the
2
+ * step item counter + positioning, the step-number box placement/centring, and the
3
+ * metadata dense-tile grid (+ mobile). The thin-edge inset padding + split gaps,
4
+ * the ingredients list chrome, the step-number glyph + chrome, tip callouts, media
5
+ * radius, and type stay skin. */
6
+ .rf-recipe__content {
7
+ display: flex;
8
+ flex-direction: column;
9
+ }
10
+ .rf-recipe__content ol {
11
+ list-style: none;
12
+ counter-reset: recipe-step;
13
+ }
14
+ .rf-recipe__content ol > li {
15
+ counter-increment: recipe-step;
16
+ position: relative;
17
+ }
18
+ .rf-recipe__content ol > li::before {
19
+ content: counter(recipe-step);
20
+ position: absolute;
21
+ left: 0;
22
+ top: 0.625rem;
23
+ width: 1.5rem;
24
+ height: 1.5rem;
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ }
29
+ .rf-recipe__metadata {
30
+ grid-template-columns: repeat(auto-fit, minmax(6rem, 1fr));
31
+ }
32
+ @media (max-width: 48rem) {
33
+ .rf-recipe__metadata {
34
+ grid-template-columns: repeat(auto-fit, minmax(6rem, 1fr));
35
+ align-items: normal;
36
+ }
37
+ .rf-recipe__metadata > [data-name="row"] {
38
+ display: flex;
39
+ }
40
+ }
@@ -0,0 +1,49 @@
1
+ /* relationships — structure (mirrors collection). The items flex/grid arrangement,
2
+ * grid item flex + grouped-grid passthrough + grid group/title span, the base group
3
+ * flex, the item flex/block reset, and the card flex column. Gaps, margins, card
4
+ * chrome, and type are skin. */
5
+ .rf-relationships__items {
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+ .rf-relationships[data-layout='grid'] .rf-relationships__items {
10
+ display: grid;
11
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
12
+ align-items: stretch;
13
+ }
14
+ .rf-relationships[data-layout='grid'] .rf-relationships__item {
15
+ display: flex;
16
+ }
17
+ .rf-relationships[data-layout='grid'] .rf-relationships__item > * {
18
+ flex: 1;
19
+ min-width: 0;
20
+ }
21
+ .rf-relationships[data-layout='grid'] .rf-relationships__items:has(.rf-relationships__group),
22
+ .rf-relationships[data-layout='grid'] .rf-relationships__items:has(.rf-accordion) {
23
+ display: flex;
24
+ flex-direction: column;
25
+ }
26
+ .rf-relationships[data-layout='grid'] .rf-relationships__group {
27
+ display: grid;
28
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
29
+ align-items: stretch;
30
+ }
31
+ .rf-relationships[data-layout='grid'] .rf-relationships__group-title {
32
+ grid-column: 1 / -1;
33
+ }
34
+ .rf-relationships__group {
35
+ display: flex;
36
+ flex-direction: column;
37
+ }
38
+ .rf-relationships__item {
39
+ display: flex;
40
+ flex-wrap: wrap;
41
+ align-items: baseline;
42
+ }
43
+ .rf-relationships__item[data-block] {
44
+ display: block;
45
+ }
46
+ .rf-relationships__card {
47
+ display: flex;
48
+ flex-direction: column;
49
+ }
@@ -0,0 +1,29 @@
1
+ /* reveal — structure. The eyebrow stretched-link, the steps flex column, the
2
+ * hidden-step collapse (height/overflow), the metadata hide, and the control
3
+ * button flex. The animation (opacity/transform/transition), spacing, type,
4
+ * borders, and surface chrome are skin (Lumina's styles/runes/reveal.css). */
5
+
6
+ .rf-reveal__eyebrow:has(a) {
7
+ display: inline-block;
8
+ position: relative;
9
+ }
10
+ .rf-reveal__eyebrow:has(a) a::before {
11
+ content: '';
12
+ position: absolute;
13
+ inset: 0;
14
+ }
15
+ .rf-reveal__steps {
16
+ display: flex;
17
+ flex-direction: column;
18
+ }
19
+ .rf-reveal-step--hidden {
20
+ height: 0;
21
+ overflow: hidden;
22
+ }
23
+ .rf-reveal-step__body > span[property],
24
+ .rf-reveal-step__body > meta { display: none; }
25
+ .rf-reveal__next,
26
+ .rf-reveal__reset {
27
+ display: inline-flex;
28
+ align-items: center;
29
+ }
@@ -0,0 +1,30 @@
1
+ /* sandbox — structure. The iframe clip + fill, and the banner / poster / activate
2
+ * layout (positioning, flex, sizing). Radii, surface, borders, type, and the play
3
+ * glyph stay skin (Lumina's styles/runes/sandbox.css). */
4
+
5
+ .rf-sandbox { overflow: hidden; }
6
+ .rf-sandbox iframe {
7
+ display: block;
8
+ width: 100%;
9
+ }
10
+ .rf-sandbox__untrusted-banner { display: block; }
11
+ .rf-sandbox__poster {
12
+ position: relative;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ min-height: 150px;
17
+ }
18
+ .rf-sandbox__poster-image {
19
+ position: absolute;
20
+ inset: 0;
21
+ width: 100%;
22
+ height: 100%;
23
+ object-fit: cover;
24
+ }
25
+ .rf-sandbox__activate {
26
+ position: relative;
27
+ z-index: 1;
28
+ display: inline-flex;
29
+ align-items: center;
30
+ }
@@ -0,0 +1,36 @@
1
+ /* section — structure. The column stack, the preamble flex + eyebrow stretched-
2
+ * link, the responsive image box, the full-width body, and the header alignment
3
+ * (align-items + auto-margins). Type, gaps, max-width, radii, and text-align are
4
+ * skin. */
5
+ .rf-section {
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+ .rf-section__preamble {
10
+ display: flex;
11
+ flex-direction: column;
12
+ }
13
+ .rf-section__eyebrow:has(a) {
14
+ display: inline-block;
15
+ position: relative;
16
+ }
17
+ .rf-section__eyebrow:has(a) a::before {
18
+ content: '';
19
+ position: absolute;
20
+ inset: 0;
21
+ }
22
+ .rf-section__image {
23
+ max-width: 100%;
24
+ height: auto;
25
+ }
26
+ .rf-section__body {
27
+ width: 100%;
28
+ }
29
+ .rf-section[data-align="center"] .rf-section__preamble {
30
+ align-items: center;
31
+ margin-inline: auto;
32
+ }
33
+ .rf-section[data-align="end"] .rf-section__preamble {
34
+ align-items: flex-end;
35
+ margin-inline-start: auto;
36
+ }
@@ -0,0 +1,12 @@
1
+ /* showcase — structure. The relative root + viewport (frame anchors), the breakout
2
+ * overflow on a non-clipping host, and the bento-cell fill. The spacing/inset axes
3
+ * (margins/padding values) and the mobile bleed reset are skin. */
4
+ .rf-showcase { position: relative; }
5
+ .rf-showcase__viewport { position: relative; }
6
+ :has(> .rf-showcase[data-displace]:not(.rf-showcase--in-bento-cell)) {
7
+ overflow: visible;
8
+ }
9
+ .rf-showcase--in-bento-cell {
10
+ flex: 1;
11
+ min-height: 0;
12
+ }
@@ -0,0 +1,45 @@
1
+ /* spacing — structure. The scale flex column + item flex, the scale-bar sizing, the
2
+ * scale-label flex-shrink, the radii/shadows flex-wrap rows + item columns, and the
3
+ * radius/shadow sample sizing. Colours, radii, borders, gaps, and type are skin. */
4
+ .rf-spacing__scale {
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
8
+ .rf-spacing__scale-item {
9
+ display: flex;
10
+ align-items: center;
11
+ }
12
+ .rf-spacing__scale-bar {
13
+ height: 1.25rem;
14
+ min-width: 4px;
15
+ }
16
+ .rf-spacing__scale-label {
17
+ flex-shrink: 0;
18
+ }
19
+ .rf-spacing__radii {
20
+ display: flex;
21
+ flex-wrap: wrap;
22
+ align-items: flex-end;
23
+ }
24
+ .rf-spacing__radius-item {
25
+ display: flex;
26
+ flex-direction: column;
27
+ align-items: center;
28
+ }
29
+ .rf-spacing__radius-sample {
30
+ width: 3.5rem;
31
+ height: 3.5rem;
32
+ }
33
+ .rf-spacing__shadows {
34
+ display: flex;
35
+ flex-wrap: wrap;
36
+ }
37
+ .rf-spacing__shadow-item {
38
+ display: flex;
39
+ flex-direction: column;
40
+ align-items: center;
41
+ }
42
+ .rf-spacing__shadow-sample {
43
+ width: 5rem;
44
+ height: 3.5rem;
45
+ }
@@ -0,0 +1,65 @@
1
+ /* steps — structure. The step counter mechanism, the step item positioning, the
2
+ * counter-badge box placement, the preamble/eyebrow layout + stretched-link, list
3
+ * resets, and the media-position flip. All spacing, type, surface, and the badge
4
+ * chrome stay skin (Lumina's styles/runes/steps.css). */
5
+
6
+ .rf-steps { counter-reset: step; }
7
+
8
+ .rf-steps__preamble {
9
+ flex-direction: column;
10
+ align-items: flex-start;
11
+ }
12
+
13
+ /* Linked eyebrow → pill with a stretched link (chrome is skin). */
14
+ .rf-steps__eyebrow:has(a) {
15
+ display: inline-block;
16
+ position: relative;
17
+ }
18
+ .rf-steps__eyebrow:has(a) a::before {
19
+ content: '';
20
+ position: absolute;
21
+ inset: 0;
22
+ }
23
+
24
+ .rf-steps ol { list-style: none; }
25
+
26
+ .rf-step__content { display: contents; }
27
+
28
+ .rf-step {
29
+ counter-increment: step;
30
+ position: relative;
31
+ }
32
+
33
+ .rf-step::before {
34
+ content: counter(step);
35
+ position: absolute;
36
+ left: 0;
37
+ top: 0.625rem;
38
+ width: 1.5rem;
39
+ height: 1.5rem;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ }
44
+
45
+ .rf-step h1,
46
+ .rf-step h2,
47
+ .rf-step h3,
48
+ .rf-step h4,
49
+ .rf-step h5,
50
+ .rf-step h6,
51
+ .rf-step strong {
52
+ display: block;
53
+ }
54
+
55
+ .rf-step__media { overflow: hidden; }
56
+
57
+ /* BUG-001 — content-first DOM inverts the shared media-first stacked contract
58
+ * (layouts/split.css): counter it so the labels are truthful. */
59
+ .rf-step[data-media-position="bottom"] {
60
+ display: block;
61
+ }
62
+ .rf-step[data-media-position="top"] {
63
+ display: flex;
64
+ flex-direction: column-reverse;
65
+ }
@@ -0,0 +1,22 @@
1
+ /* storyboard — structure. The panels grid (+ responsive column counts), the
2
+ * panel clip for the clean/comic styles, the panel image fill, and the metadata
3
+ * hide. Borders, radii, the comic tilt, polaroid chrome, type, and gaps are skin. */
4
+ .rf-storyboard__panels {
5
+ display: grid;
6
+ grid-template-columns: repeat(var(--sb-columns, 3), 1fr);
7
+ }
8
+ .rf-storyboard--clean .rf-storyboard-panel { overflow: hidden; }
9
+ .rf-storyboard--comic .rf-storyboard-panel { overflow: hidden; }
10
+ .rf-storyboard-panel img {
11
+ width: 100%;
12
+ height: auto;
13
+ display: block;
14
+ }
15
+ .rf-storyboard-panel__body > span[property],
16
+ .rf-storyboard-panel__body > meta { display: none; }
17
+ @media (max-width: 768px) {
18
+ .rf-storyboard__panels { grid-template-columns: repeat(2, 1fr) !important; }
19
+ }
20
+ @media (max-width: 480px) {
21
+ .rf-storyboard__panels { grid-template-columns: 1fr !important; }
22
+ }
@@ -0,0 +1,12 @@
1
+ /* swatch — structure. The inline-flex chip row and the colour-chip box. Borders,
2
+ * radii, gap, padding, and type are skin. */
3
+ .rf-swatch {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ }
7
+ .rf-swatch__chip {
8
+ display: inline-block;
9
+ width: 0.875em;
10
+ height: 0.875em;
11
+ flex-shrink: 0;
12
+ }
@@ -0,0 +1,8 @@
1
+ /* symbol — structure. Only the list display resets on the symbol-body and member
2
+ * lists. The signature-bar geometry comes from the shared [data-zone-layout="bar"]
3
+ * (already skeleton); everything else here — bar padding, doc-prose spacing,
4
+ * borders, type, the blockquote reset — is skin (Lumina's styles/runes/symbol.css). */
5
+
6
+ .rf-symbol__body > div > ul { list-style: none; }
7
+ .rf-symbol__body > div > ul > li > ul { list-style: none; }
8
+ .rf-symbol-member ul { list-style: none; }
@@ -0,0 +1,28 @@
1
+ /* tabs — structure. The eyebrow stretched-link, the scrollable tab strip (display
2
+ * + overflow), and the tab-button flex. The strip's `display: flex` is what
3
+ * guest-posture's hide rule overrides — now both skeleton, resolved by specificity.
4
+ * Type, colour, borders, spacing, and the active treatment are skin (Lumina's
5
+ * styles/runes/tabs.css). */
6
+
7
+ .rf-tabs__eyebrow:has(a) {
8
+ display: inline-block;
9
+ position: relative;
10
+ }
11
+ .rf-tabs__eyebrow:has(a) a::before {
12
+ content: '';
13
+ position: absolute;
14
+ inset: 0;
15
+ }
16
+
17
+ /* Tab bar — the scrollable strip. */
18
+ .rf-tabs__tabs {
19
+ display: flex;
20
+ overflow-x: auto;
21
+ overflow-y: hidden;
22
+ -webkit-overflow-scrolling: touch;
23
+ }
24
+
25
+ /* Tab buttons — fixed-basis flex items. */
26
+ .rf-tab {
27
+ flex: 0 0 auto;
28
+ }
@@ -0,0 +1,13 @@
1
+ /* testimonial — structure. The author name/role block display and the fixed
2
+ * avatar box (size + crop). Surface, type, the quote treatment, the blockquote
3
+ * `::before` reset, and the avatar radius/margin stay skin (Lumina's
4
+ * styles/runes/testimonial.css) — the `blockquote::before { display:none }` reset
5
+ * must stay skin to override elements/blockquote.css by source order. */
6
+
7
+ .rf-testimonial__author-name { display: block; }
8
+ .rf-testimonial__author-role { display: block; }
9
+ .rf-testimonial :is(img, .rf-placeholder) {
10
+ width: 48px;
11
+ height: 48px;
12
+ object-fit: cover;
13
+ }
@@ -0,0 +1,25 @@
1
+ /* textblock — structure. The body block, the drop-cap float, and the multi-column
2
+ * counts (+ responsive). The drop-cap/lead type, column gap/rule, and text-align
3
+ * are skin. */
4
+ .rf-textblock__body {
5
+ display: block;
6
+ }
7
+ .rf-textblock--dropcap .rf-textblock__body > p:first-child::first-letter {
8
+ float: left;
9
+ }
10
+ .rf-textblock[data-columns="2"] .rf-textblock__body { column-count: 2; }
11
+ .rf-textblock[data-columns="3"] .rf-textblock__body { column-count: 3; }
12
+ .rf-textblock[data-columns="4"] .rf-textblock__body { column-count: 4; }
13
+ @media (max-width: 768px) {
14
+ .rf-textblock[data-columns="3"] .rf-textblock__body,
15
+ .rf-textblock[data-columns="4"] .rf-textblock__body {
16
+ column-count: 2;
17
+ }
18
+ }
19
+ @media (max-width: 480px) {
20
+ .rf-textblock[data-columns="2"] .rf-textblock__body,
21
+ .rf-textblock[data-columns="3"] .rf-textblock__body,
22
+ .rf-textblock[data-columns="4"] .rf-textblock__body {
23
+ column-count: 1;
24
+ }
25
+ }
@@ -0,0 +1,31 @@
1
+ /* timeline — structure. The list reset, entry positioning, date/title block
2
+ * display, the marker box placement (vertical + horizontal), the horizontal flex
3
+ * scroll, and the horizontal entry min-width. Connector borders, marker chrome,
4
+ * type, and spacing are skin. */
5
+ .rf-timeline ol { list-style: none; }
6
+ .rf-timeline-entry { position: relative; }
7
+ .rf-timeline-entry > time { display: block; }
8
+ .rf-timeline-entry > span { display: block; }
9
+ .rf-timeline--vertical .rf-timeline-entry::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-timeline--horizontal ol {
18
+ display: flex;
19
+ overflow-x: auto;
20
+ }
21
+ .rf-timeline--horizontal .rf-timeline-entry {
22
+ min-width: 12rem;
23
+ }
24
+ .rf-timeline--horizontal .rf-timeline-entry::before {
25
+ content: '';
26
+ position: absolute;
27
+ top: -0.4375rem;
28
+ left: 0.5rem;
29
+ width: 0.75rem;
30
+ height: 0.75rem;
31
+ }
@@ -0,0 +1,10 @@
1
+ /* toc — structure. The list reset and the inline-block link box. The surface
2
+ * chrome, type, indents, and colour are skin (Lumina's styles/runes/toc.css). */
3
+
4
+ .rf-toc ul,
5
+ .rf-toc ol {
6
+ list-style: none;
7
+ }
8
+ .rf-toc a {
9
+ display: inline-block;
10
+ }
@@ -0,0 +1,55 @@
1
+ /* track — structure. The row flex + counter, the number box, the cell flex sizing
2
+ * + ellipsis overflow + duration auto-push, the description/cue full-row + wrap,
3
+ * the chapter row flex + time auto-push, and the narrow-screen hides. The
4
+ * number/separator glyphs, type, borders, and spacing stay skin. */
5
+ .rf-track {
6
+ display: flex;
7
+ align-items: center;
8
+ counter-increment: track;
9
+ }
10
+ .rf-track::before {
11
+ content: counter(track);
12
+ min-width: 1.5rem;
13
+ flex-shrink: 0;
14
+ }
15
+ .rf-track__track-name {
16
+ flex: 1;
17
+ min-width: 0;
18
+ overflow: hidden;
19
+ }
20
+ .rf-track__track-artist {
21
+ flex-shrink: 0;
22
+ }
23
+ .rf-track__track-duration {
24
+ flex-shrink: 0;
25
+ margin-left: auto;
26
+ min-width: 3rem;
27
+ }
28
+ .rf-track__track-meta {
29
+ flex-shrink: 0;
30
+ }
31
+ .rf-track__track-description {
32
+ flex-basis: 100%;
33
+ }
34
+ .rf-track:has(.rf-track__track-description) {
35
+ flex-wrap: wrap;
36
+ }
37
+ .rf-track [data-name="lyrics"],
38
+ .rf-track [data-name="chapters"] {
39
+ flex-basis: 100%;
40
+ list-style: none;
41
+ }
42
+ .rf-track [data-name="chapters"] li {
43
+ display: flex;
44
+ }
45
+ .rf-track [data-name="chapter-time"] {
46
+ margin-left: auto;
47
+ }
48
+ @media (max-width: 480px) {
49
+ .rf-track__track-artist {
50
+ display: none;
51
+ }
52
+ .rf-track__track-meta {
53
+ display: none;
54
+ }
55
+ }
@@ -0,0 +1,33 @@
1
+ /* typography — structure. The specimens flex column, the specimen-header flex, the
2
+ * sizes flex column, the size-sample flex + ellipsis clip, the size-label sizing,
3
+ * the weights flex-wrap, and the weight-sample flex column. Borders, radii,
4
+ * padding, and type are skin. */
5
+ .rf-typography__specimens {
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+ .rf-typography__specimen-header {
10
+ display: flex;
11
+ align-items: baseline;
12
+ }
13
+ .rf-typography__sizes {
14
+ display: flex;
15
+ flex-direction: column;
16
+ }
17
+ .rf-typography__size-sample {
18
+ display: flex;
19
+ align-items: baseline;
20
+ overflow: hidden;
21
+ }
22
+ .rf-typography__size-label {
23
+ flex-shrink: 0;
24
+ min-width: 3rem;
25
+ }
26
+ .rf-typography__weights {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ }
30
+ .rf-typography__weight-sample {
31
+ display: flex;
32
+ flex-direction: column;
33
+ }
@@ -0,0 +1,5 @@
1
+ /* xref — structure. The external-indicator pseudo display box; the glyph + colour
2
+ * + unresolved treatment are skin. */
3
+ .rf-xref--external::after {
4
+ display: inline-block;
5
+ }