@refrakt-md/lumina 0.25.1 → 0.28.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/base.css CHANGED
@@ -30,6 +30,7 @@
30
30
  @import './styles/dimensions/metadata.css';
31
31
  @import './styles/dimensions/density.css';
32
32
  @import './styles/dimensions/sections.css';
33
+ @import './styles/dimensions/reading.css';
33
34
  @import './styles/dimensions/state.css';
34
35
  @import './styles/dimensions/media.css';
35
36
  @import './styles/dimensions/surfaces.css';
@@ -183,6 +183,14 @@
183
183
  "{content}"
184
184
  ]
185
185
  },
186
+ "Data": {
187
+ "block": "data",
188
+ "root": ".rf-data",
189
+ "dataRune": "data",
190
+ "childOrder": [
191
+ "{content}"
192
+ ]
193
+ },
186
194
  "Expand": {
187
195
  "block": "expand",
188
196
  "root": ".rf-expand",
@@ -913,11 +921,6 @@
913
921
  "{content}"
914
922
  ],
915
923
  "modifiers": {
916
- "dropcap": {
917
- "source": "meta",
918
- "classPattern": ".rf-textblock--{value}",
919
- "dataAttribute": "data-dropcap"
920
- },
921
924
  "columns": {
922
925
  "source": "meta",
923
926
  "classPattern": ".rf-textblock--{value}",
@@ -1636,6 +1639,14 @@
1636
1639
  "default": "bottom",
1637
1640
  "dataAttribute": "data-media-position"
1638
1641
  },
1642
+ "layout": {
1643
+ "source": "meta",
1644
+ "dataAttribute": "data-layout"
1645
+ },
1646
+ "collapse-to": {
1647
+ "source": "meta",
1648
+ "dataAttribute": "data-collapse-to"
1649
+ },
1639
1650
  "align": {
1640
1651
  "source": "meta",
1641
1652
  "default": "center",
@@ -1691,9 +1702,9 @@
1691
1702
  "selector": ".rf-feature__image",
1692
1703
  "source": "autoLabel"
1693
1704
  },
1694
- "definitions": {
1705
+ "items": {
1695
1706
  "tag": "dl",
1696
- "selector": ".rf-feature__definitions",
1707
+ "selector": ".rf-feature__items",
1697
1708
  "source": "autoLabel"
1698
1709
  }
1699
1710
  },
@@ -1701,182 +1712,6 @@
1701
1712
  "valign": {
1702
1713
  "prop": "--split-valign"
1703
1714
  }
1704
- },
1705
- "variants": {
1706
- "media-position": {
1707
- "top": {
1708
- "block": "feature",
1709
- "root": ".rf-feature",
1710
- "dataRune": "feature",
1711
- "childOrder": [
1712
- "{content}"
1713
- ],
1714
- "modifiers": {
1715
- "media-position": {
1716
- "source": "meta",
1717
- "default": "bottom",
1718
- "dataAttribute": "data-media-position"
1719
- },
1720
- "align": {
1721
- "source": "meta",
1722
- "default": "center",
1723
- "classPattern": ".rf-feature--{value}",
1724
- "dataAttribute": "data-align"
1725
- },
1726
- "media-ratio": {
1727
- "source": "meta",
1728
- "dataAttribute": "data-media-ratio"
1729
- },
1730
- "valign": {
1731
- "source": "meta",
1732
- "dataAttribute": "data-valign"
1733
- },
1734
- "collapse": {
1735
- "source": "meta",
1736
- "dataAttribute": "data-collapse"
1737
- }
1738
- },
1739
- "contextModifiers": {
1740
- "hero": {
1741
- "suffix": "in-hero",
1742
- "selector": ".rf-feature--in-hero"
1743
- },
1744
- "grid": {
1745
- "suffix": "in-grid",
1746
- "selector": ".rf-feature--in-grid"
1747
- }
1748
- },
1749
- "staticModifiers": [
1750
- {
1751
- "name": "definitions-grid",
1752
- "selector": ".rf-feature--definitions-grid"
1753
- }
1754
- ],
1755
- "elements": {
1756
- "preamble": {
1757
- "tag": "header",
1758
- "selector": ".rf-feature__preamble",
1759
- "source": "autoLabel"
1760
- },
1761
- "eyebrow": {
1762
- "tag": "eyebrow",
1763
- "selector": ".rf-feature__eyebrow",
1764
- "source": "autoLabel"
1765
- },
1766
- "headline": {
1767
- "tag": "headline",
1768
- "selector": ".rf-feature__headline",
1769
- "source": "autoLabel"
1770
- },
1771
- "blurb": {
1772
- "tag": "blurb",
1773
- "selector": ".rf-feature__blurb",
1774
- "source": "autoLabel"
1775
- },
1776
- "image": {
1777
- "tag": "image",
1778
- "selector": ".rf-feature__image",
1779
- "source": "autoLabel"
1780
- },
1781
- "definitions": {
1782
- "tag": "dl",
1783
- "selector": ".rf-feature__definitions",
1784
- "source": "autoLabel"
1785
- }
1786
- },
1787
- "inlineStyles": {
1788
- "valign": {
1789
- "prop": "--split-valign"
1790
- }
1791
- }
1792
- },
1793
- "bottom": {
1794
- "block": "feature",
1795
- "root": ".rf-feature",
1796
- "dataRune": "feature",
1797
- "childOrder": [
1798
- "{content}"
1799
- ],
1800
- "modifiers": {
1801
- "media-position": {
1802
- "source": "meta",
1803
- "default": "bottom",
1804
- "dataAttribute": "data-media-position"
1805
- },
1806
- "align": {
1807
- "source": "meta",
1808
- "default": "center",
1809
- "classPattern": ".rf-feature--{value}",
1810
- "dataAttribute": "data-align"
1811
- },
1812
- "media-ratio": {
1813
- "source": "meta",
1814
- "dataAttribute": "data-media-ratio"
1815
- },
1816
- "valign": {
1817
- "source": "meta",
1818
- "dataAttribute": "data-valign"
1819
- },
1820
- "collapse": {
1821
- "source": "meta",
1822
- "dataAttribute": "data-collapse"
1823
- }
1824
- },
1825
- "contextModifiers": {
1826
- "hero": {
1827
- "suffix": "in-hero",
1828
- "selector": ".rf-feature--in-hero"
1829
- },
1830
- "grid": {
1831
- "suffix": "in-grid",
1832
- "selector": ".rf-feature--in-grid"
1833
- }
1834
- },
1835
- "staticModifiers": [
1836
- {
1837
- "name": "definitions-grid",
1838
- "selector": ".rf-feature--definitions-grid"
1839
- }
1840
- ],
1841
- "elements": {
1842
- "preamble": {
1843
- "tag": "header",
1844
- "selector": ".rf-feature__preamble",
1845
- "source": "autoLabel"
1846
- },
1847
- "eyebrow": {
1848
- "tag": "eyebrow",
1849
- "selector": ".rf-feature__eyebrow",
1850
- "source": "autoLabel"
1851
- },
1852
- "headline": {
1853
- "tag": "headline",
1854
- "selector": ".rf-feature__headline",
1855
- "source": "autoLabel"
1856
- },
1857
- "blurb": {
1858
- "tag": "blurb",
1859
- "selector": ".rf-feature__blurb",
1860
- "source": "autoLabel"
1861
- },
1862
- "image": {
1863
- "tag": "image",
1864
- "selector": ".rf-feature__image",
1865
- "source": "autoLabel"
1866
- },
1867
- "definitions": {
1868
- "tag": "dl",
1869
- "selector": ".rf-feature__definitions",
1870
- "source": "autoLabel"
1871
- }
1872
- },
1873
- "inlineStyles": {
1874
- "valign": {
1875
- "prop": "--split-valign"
1876
- }
1877
- }
1878
- }
1879
- }
1880
1715
  }
1881
1716
  },
1882
1717
  "Definition": {
@@ -3875,6 +3710,10 @@
3875
3710
  "classPattern": ".rf-spec--{value}",
3876
3711
  "dataAttribute": "data-supersedes"
3877
3712
  },
3713
+ "released-in": {
3714
+ "source": "meta",
3715
+ "dataAttribute": "data-released-in"
3716
+ },
3878
3717
  "tags": {
3879
3718
  "source": "meta",
3880
3719
  "dataAttribute": "data-tags"
@@ -3907,6 +3746,7 @@
3907
3746
  "fields": [
3908
3747
  "version",
3909
3748
  "supersedes",
3749
+ "released-in",
3910
3750
  "created",
3911
3751
  "modified"
3912
3752
  ]
@@ -3971,6 +3811,14 @@
3971
3811
  "source": "meta",
3972
3812
  "dataAttribute": "data-source"
3973
3813
  },
3814
+ "supersedes": {
3815
+ "source": "meta",
3816
+ "dataAttribute": "data-supersedes"
3817
+ },
3818
+ "pr": {
3819
+ "source": "meta",
3820
+ "dataAttribute": "data-pr"
3821
+ },
3974
3822
  "tags": {
3975
3823
  "source": "meta",
3976
3824
  "dataAttribute": "data-tags"
@@ -4006,6 +3854,8 @@
4006
3854
  "assignee",
4007
3855
  "milestone",
4008
3856
  "source",
3857
+ "supersedes",
3858
+ "pr",
4009
3859
  "created",
4010
3860
  "modified"
4011
3861
  ]
@@ -4064,6 +3914,10 @@
4064
3914
  "source": "meta",
4065
3915
  "dataAttribute": "data-source"
4066
3916
  },
3917
+ "pr": {
3918
+ "source": "meta",
3919
+ "dataAttribute": "data-pr"
3920
+ },
4067
3921
  "tags": {
4068
3922
  "source": "meta",
4069
3923
  "dataAttribute": "data-tags"
@@ -4098,6 +3952,7 @@
4098
3952
  "assignee",
4099
3953
  "milestone",
4100
3954
  "source",
3955
+ "pr",
4101
3956
  "created",
4102
3957
  "modified"
4103
3958
  ]
package/index.css CHANGED
@@ -38,6 +38,7 @@
38
38
  @import './styles/dimensions/metadata.css';
39
39
  @import './styles/dimensions/density.css';
40
40
  @import './styles/dimensions/sections.css';
41
+ @import './styles/dimensions/reading.css';
41
42
  @import './styles/dimensions/state.css';
42
43
  @import './styles/dimensions/media.css';
43
44
  @import './styles/dimensions/surfaces.css';
@@ -92,6 +93,7 @@
92
93
  @import './styles/runes/figure.css';
93
94
  @import './styles/runes/placeholder.css';
94
95
  @import './styles/runes/gallery.css';
96
+ @import './styles/runes/carousel.css';
95
97
  @import './styles/runes/form.css';
96
98
  @import './styles/runes/grid.css';
97
99
  @import './styles/runes/hero.css';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/lumina",
3
3
  "description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and layout configs",
4
- "version": "0.25.1",
4
+ "version": "0.28.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -86,10 +86,10 @@
86
86
  "generate-tokens": "node scripts/generate-tokens.mjs"
87
87
  },
88
88
  "dependencies": {
89
- "@refrakt-md/runes": "0.25.1",
90
- "@refrakt-md/skeleton": "0.25.1",
91
- "@refrakt-md/transform": "0.25.1",
92
- "@refrakt-md/types": "0.25.1"
89
+ "@refrakt-md/runes": "0.28.0",
90
+ "@refrakt-md/skeleton": "0.28.0",
91
+ "@refrakt-md/transform": "0.28.0",
92
+ "@refrakt-md/types": "0.28.0"
93
93
  },
94
94
  "devDependencies": {
95
95
  "postcss": "^8.4.0"
@@ -0,0 +1,35 @@
1
+ @layer skin {
2
+ /* Reading register (SPEC-108) — Lumina's editorial treatment of `[data-reading]`.
3
+ * The measure cap + niceties are structural (skeleton); this is the type, rhythm,
4
+ * and drop-cap glyph. `ui` (the default) is left to the base body styling. */
5
+
6
+ /* Prose — long-form reading. */
7
+ [data-reading="prose"] {
8
+ line-height: var(--rf-leading-relaxed);
9
+ }
10
+ [data-reading="prose"] > p {
11
+ margin-bottom: 1em;
12
+ }
13
+ [data-reading="prose"] a {
14
+ text-underline-offset: 0.15em;
15
+ }
16
+
17
+ /* Drop-cap glyph — the theme owns the treatment; the author owns where (the
18
+ * `dropcap` opt-in, honoured only on a prose body). */
19
+ [data-reading="prose"][data-dropcap] > p:first-child::first-letter {
20
+ font-size: 3.5em;
21
+ font-weight: var(--rf-weight-bold);
22
+ line-height: 0.8;
23
+ padding-right: 0.1em;
24
+ margin-top: 0.05em;
25
+ color: var(--rf-color-primary);
26
+ font-family: Georgia, 'Times New Roman', serif;
27
+ }
28
+
29
+ /* Fine print — captions, footnotes, asides: smaller and quieter. */
30
+ [data-reading="fine"] {
31
+ font-size: var(--rf-text-sm);
32
+ line-height: var(--rf-leading-normal);
33
+ color: var(--rf-color-muted);
34
+ }
35
+ }
@@ -0,0 +1,18 @@
1
+ @layer skin {
2
+ /* Carousel — shared nav chrome (SPEC-100). The track structure + nav positioning
3
+ * are skeleton (styles/runes/carousel.css); this is the skin (colour/shape). */
4
+ .rf-carousel__nav {
5
+ border-radius: 50%;
6
+ border: none;
7
+ background: var(--rf-color-surface);
8
+ color: var(--rf-color-text);
9
+ box-shadow: var(--rf-shadow-md);
10
+ cursor: pointer;
11
+ font-size: var(--rf-text-xl);
12
+ opacity: 0.8;
13
+ transition: opacity 0.2s;
14
+ }
15
+ .rf-carousel__nav:hover {
16
+ opacity: 1;
17
+ }
18
+ }
@@ -2,18 +2,18 @@
2
2
  /* Cast */
3
3
 
4
4
  /* Members list — base */
5
- .rf-cast__members {
5
+ .rf-cast__items {
6
6
  padding: 0;
7
7
  margin: 0;
8
8
  }
9
9
 
10
10
  /* Grid layout (default) */
11
- .rf-cast--grid .rf-cast__members {
11
+ .rf-cast--grid .rf-cast__items {
12
12
  gap: 1rem;
13
13
  }
14
14
 
15
15
  /* List layout */
16
- .rf-cast--list .rf-cast__members {
16
+ .rf-cast--list .rf-cast__items {
17
17
  gap: 0.75rem;
18
18
  }
19
19
 
@@ -1,6 +1,7 @@
1
1
  @layer skin {
2
- /* Feature — skin. The preamble/eyebrow/content/definitions-grid/icon layout and
3
- * the media-position flip live in @refrakt-md/skeleton (styles/runes/feature.css). */
2
+ /* Feature — skin. The preamble/eyebrow/content/definitions/icon layout, the
3
+ * `[data-layout]` arrangement, and the media-position flip live in
4
+ * @refrakt-md/skeleton (styles/runes/feature.css). */
4
5
  .rf-feature {
5
6
  padding: 2.5rem 0 2rem;
6
7
  }
@@ -55,24 +56,24 @@
55
56
  .rf-feature[data-align="right"] h2 {
56
57
  text-align: right;
57
58
  }
58
- /* Definitions stack in a single column by default; the `--definitions-grid`
59
- * modifier (SPEC-091 media-position variant: top/bottom) tiles them as a grid. */
60
- .rf-feature__definitions {
59
+ /* Definitions skin. Arrangement + item chrome follow the `layout` axis
60
+ * (SPEC-099): `grid` tiles carded items; `list` stacks flat rows. */
61
+ .rf-feature__items {
61
62
  margin: 0;
62
63
  }
63
- .rf-feature--definitions-grid .rf-feature__definitions {
64
+ .rf-feature[data-layout="grid"] .rf-feature__items,
65
+ .rf-feature[data-layout="carousel"] .rf-feature__items {
64
66
  gap: 1.5rem;
65
67
  }
66
- /* Beside layouts (media on start/end): definitions stay stacked (no grid
67
- * modifier) inside the content track. */
68
+ /* Beside layouts (media on start/end): left-align the heading/preamble. */
68
69
  .rf-feature[data-media-position="start"] .rf-feature__preamble,
69
70
  .rf-feature[data-media-position="end"] .rf-feature__preamble,
70
71
  .rf-feature[data-media-position="start"] h2,
71
72
  .rf-feature[data-media-position="end"] h2 {
72
73
  text-align: left;
73
74
  }
74
- .rf-feature[data-media-position="start"] .rf-feature__feature-item,
75
- .rf-feature[data-media-position="end"] .rf-feature__feature-item {
75
+ /* List arrangement: items are flat rows, not carded tiles. */
76
+ .rf-feature[data-layout="list"] .rf-feature__feature-item {
76
77
  background: none;
77
78
  border: none;
78
79
  border-radius: 0;
@@ -27,20 +27,7 @@
27
27
  text-align: center;
28
28
  font-style: italic;
29
29
  }
30
- .rf-gallery__nav {
31
- border-radius: 50%;
32
- border: none;
33
- background: var(--rf-color-surface);
34
- color: var(--rf-color-text);
35
- box-shadow: var(--rf-shadow-md);
36
- cursor: pointer;
37
- font-size: var(--rf-text-xl);
38
- opacity: 0.8;
39
- transition: opacity 0.2s;
40
- }
41
- .rf-gallery__nav:hover {
42
- opacity: 1;
43
- }
30
+ /* Carousel nav chrome is now the shared `.rf-carousel__nav` (styles/runes/carousel.css). */
44
31
  .rf-gallery[data-layout="masonry"] .rf-gallery__items {
45
32
  column-gap: var(--rf-gallery-gap);
46
33
  }
@@ -4,9 +4,10 @@
4
4
  margin: 2rem 0;
5
5
  }
6
6
 
7
- /* Toolbar — transparent, controls float above the canvas */
7
+ /* Toolbar — transparent, controls float above the canvas (flush to the canvas
8
+ * edges, no horizontal inset). */
8
9
  .rf-preview__toolbar {
9
- padding: 0.25rem 0.25rem 0.5rem;
10
+ padding: 0.25rem 0 0.5rem;
10
11
  }
11
12
  .rf-preview__title {
12
13
  font-size: var(--rf-text-xs);
@@ -16,7 +17,8 @@
16
17
  letter-spacing: var(--rf-tracking-wider);
17
18
  }
18
19
 
19
- /* Controls container (view toggle + theme toggle) */
20
+ /* Toolbar groups view-mode toggle on the left, preview-only controls (viewport
21
+ * + theme) on the right. */
20
22
  .rf-preview__controls {
21
23
  gap: 0.5rem;
22
24
  }
@@ -1,15 +1,8 @@
1
1
  @layer skin {
2
2
 
3
- /* Drop cap decorative first letter */
4
- .rf-textblock--dropcap .rf-textblock__body > p:first-child::first-letter {
5
- font-size: 3.5em;
6
- font-weight: var(--rf-weight-bold);
7
- line-height: 0.8;
8
- padding-right: 0.1em;
9
- margin-top: 0.05em;
10
- color: var(--rf-color-primary);
11
- font-family: Georgia, 'Times New Roman', serif;
12
- }
3
+ /* Drop cap is now the universal SPEC-108 opt-in, styled on
4
+ * `[data-reading="prose"][data-dropcap]` (dimensions/reading.css); textblock's
5
+ * body reads as prose, so it inherits the treatment. */
13
6
 
14
7
  /* Lead paragraph — emphasized opening text */
15
8
  .rf-textblock--lead .rf-textblock__body > p:first-child {