lutra 0.0.33 → 0.1.4

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 (274) hide show
  1. package/README.md +4 -24
  2. package/dist/components/AspectRatio.svelte +26 -0
  3. package/dist/components/AspectRatio.svelte.d.ts +8 -0
  4. package/dist/components/Avatar.svelte +105 -0
  5. package/dist/components/Avatar.svelte.d.ts +14 -0
  6. package/dist/{display → components}/Close.svelte +25 -7
  7. package/dist/components/Close.svelte.d.ts +7 -0
  8. package/dist/components/ContextTip.svelte +41 -0
  9. package/dist/components/ContextTip.svelte.d.ts +7 -0
  10. package/dist/components/Dialog.svelte +78 -0
  11. package/dist/components/Dialog.svelte.d.ts +14 -0
  12. package/dist/components/Icon.svelte +62 -0
  13. package/dist/components/Icon.svelte.d.ts +8 -0
  14. package/dist/{display → components}/IconButton.svelte +43 -14
  15. package/dist/components/IconButton.svelte.d.ts +16 -0
  16. package/dist/components/Image.svelte +172 -0
  17. package/dist/components/Image.svelte.d.ts +56 -0
  18. package/dist/{display → components}/Indicator.svelte +44 -9
  19. package/dist/components/Indicator.svelte.d.ts +12 -0
  20. package/dist/{display → components}/Inset.svelte +8 -3
  21. package/dist/components/Inset.svelte.d.ts +7 -0
  22. package/dist/components/Layout.svelte +33 -0
  23. package/dist/components/Layout.svelte.d.ts +11 -0
  24. package/dist/components/MenuDropdown.svelte +195 -0
  25. package/dist/components/MenuDropdown.svelte.d.ts +16 -0
  26. package/dist/{nav → components}/MenuItem.svelte +46 -38
  27. package/dist/components/MenuItem.svelte.d.ts +11 -0
  28. package/dist/components/MenuItemContent.svelte +25 -0
  29. package/dist/components/MenuItemContent.svelte.d.ts +10 -0
  30. package/dist/{nav → components}/MenuTypes.d.ts +19 -5
  31. package/dist/components/Modal.svelte +149 -0
  32. package/dist/components/Modal.svelte.d.ts +16 -0
  33. package/dist/{display → components}/Notification.svelte +33 -22
  34. package/dist/components/Notification.svelte.d.ts +12 -0
  35. package/dist/components/Overlay.svelte +31 -0
  36. package/dist/components/Overlay.svelte.d.ts +14 -0
  37. package/dist/{layout → components}/OverlayContainer.svelte +6 -3
  38. package/dist/{layout → components}/OverlayContainer.svelte.d.ts +4 -1
  39. package/dist/components/OverlayLayer.svelte +168 -0
  40. package/dist/components/OverlayLayer.svelte.d.ts +8 -0
  41. package/dist/components/PageContent.svelte +108 -0
  42. package/dist/components/PageContent.svelte.d.ts +38 -0
  43. package/dist/components/TabbedContent.svelte +74 -0
  44. package/dist/components/TabbedContent.svelte.d.ts +11 -0
  45. package/dist/components/TabbedContentItem.svelte +33 -0
  46. package/dist/components/TabbedContentItem.svelte.d.ts +10 -0
  47. package/dist/components/Table.svelte +41 -0
  48. package/dist/components/Table.svelte.d.ts +13 -0
  49. package/dist/{nav → components}/Tabs.svelte +99 -41
  50. package/dist/components/Tabs.svelte.d.ts +20 -0
  51. package/dist/components/Tag.svelte +120 -0
  52. package/dist/components/Tag.svelte.d.ts +21 -0
  53. package/dist/components/Theme.svelte +105 -0
  54. package/dist/components/Theme.svelte.d.ts +17 -0
  55. package/dist/{display → components}/Tooltip.svelte +41 -16
  56. package/dist/components/Tooltip.svelte.d.ts +12 -0
  57. package/dist/components/UIContent.svelte +19 -0
  58. package/dist/components/UIContent.svelte.d.ts +7 -0
  59. package/dist/components/index.d.ts +28 -0
  60. package/dist/components/index.js +29 -0
  61. package/dist/{display → components}/notifications.svelte.d.ts +1 -1
  62. package/dist/{display → components}/notifications.svelte.js +3 -4
  63. package/dist/{layout → components}/overlays.svelte.d.ts +4 -2
  64. package/dist/config.d.ts +30 -0
  65. package/dist/config.js +18 -0
  66. package/dist/css/1-props.css +440 -0
  67. package/dist/css/2-base.css +343 -0
  68. package/dist/css/3-typo.css +106 -0
  69. package/dist/css/4-layout.css +368 -0
  70. package/dist/css/5-media.css +116 -0
  71. package/dist/css/lutra.css +7 -0
  72. package/dist/css/themes/DefaultTheme.css +209 -0
  73. package/dist/form/Button.svelte +35 -16
  74. package/dist/form/Button.svelte.d.ts +8 -19
  75. package/dist/form/Datepicker.svelte +311 -0
  76. package/dist/form/Datepicker.svelte.d.ts +9 -0
  77. package/dist/form/FieldContent.svelte +69 -44
  78. package/dist/form/FieldContent.svelte.d.ts +7 -17
  79. package/dist/form/FieldError.svelte +16 -6
  80. package/dist/form/FieldError.svelte.d.ts +4 -15
  81. package/dist/form/Fieldset.svelte +48 -13
  82. package/dist/form/Fieldset.svelte.d.ts +5 -16
  83. package/dist/form/Form.svelte +158 -74
  84. package/dist/form/Form.svelte.d.ts +17 -17
  85. package/dist/form/{FieldActions.svelte → FormActions.svelte} +29 -17
  86. package/dist/form/FormActions.svelte.d.ts +9 -0
  87. package/dist/form/FormSection.svelte +96 -0
  88. package/dist/form/FormSection.svelte.d.ts +9 -0
  89. package/dist/form/ImageUpload.svelte +134 -94
  90. package/dist/form/ImageUpload.svelte.d.ts +5 -16
  91. package/dist/form/Input.svelte +254 -136
  92. package/dist/form/Input.svelte.d.ts +12 -21
  93. package/dist/form/InputLength.svelte +15 -5
  94. package/dist/form/InputLength.svelte.d.ts +4 -15
  95. package/dist/form/Label.svelte +55 -11
  96. package/dist/form/Label.svelte.d.ts +6 -15
  97. package/dist/form/LogoUpload.svelte +36 -21
  98. package/dist/form/LogoUpload.svelte.d.ts +4 -15
  99. package/dist/form/Select.svelte +100 -50
  100. package/dist/form/Select.svelte.d.ts +5 -16
  101. package/dist/form/Textarea.svelte +200 -98
  102. package/dist/form/Textarea.svelte.d.ts +11 -24
  103. package/dist/form/Toggle.svelte +3 -1
  104. package/dist/form/Toggle.svelte.d.ts +4 -1
  105. package/dist/form/client.svelte.d.ts +1 -0
  106. package/dist/form/client.svelte.js +6 -2
  107. package/dist/form/form.d.ts +10 -9
  108. package/dist/form/form.js +37 -32
  109. package/dist/form/index.d.ts +3 -4
  110. package/dist/form/index.js +3 -4
  111. package/dist/form/types.d.ts +9 -16
  112. package/dist/icons/IconAlert.svelte.d.ts +4 -1
  113. package/dist/icons/IconCopy.svelte.d.ts +4 -1
  114. package/dist/icons/IconDone.svelte.d.ts +4 -1
  115. package/dist/icons/IconError.svelte.d.ts +4 -1
  116. package/dist/icons/IconHelp.svelte.d.ts +4 -1
  117. package/dist/icons/IconHide.svelte.d.ts +4 -1
  118. package/dist/icons/IconInfo.svelte.d.ts +4 -1
  119. package/dist/icons/IconLink.svelte.d.ts +4 -1
  120. package/dist/icons/IconMenuBurger.svelte.d.ts +4 -1
  121. package/dist/icons/IconMenuDots.svelte.d.ts +4 -1
  122. package/dist/icons/IconSearch.svelte.d.ts +4 -1
  123. package/dist/icons/IconShow.svelte.d.ts +4 -1
  124. package/dist/icons/IconSuccess.svelte.d.ts +4 -1
  125. package/dist/icons/IconWarning.svelte.d.ts +4 -1
  126. package/dist/index.d.ts +3 -1
  127. package/dist/index.js +3 -2
  128. package/dist/types.d.ts +39 -0
  129. package/dist/types.js +25 -0
  130. package/dist/util/StringOrComponent.svelte +20 -0
  131. package/dist/util/StringOrComponent.svelte.d.ts +8 -0
  132. package/dist/util/StringOrSnippet.svelte +16 -0
  133. package/dist/util/StringOrSnippet.svelte.d.ts +8 -0
  134. package/dist/{utils → util}/dom.js +1 -2
  135. package/dist/util/locale.d.ts +1 -0
  136. package/dist/util/locale.js +47 -0
  137. package/dist/util/settings.d.ts +4 -0
  138. package/package.json +35 -79
  139. package/dist/color.css +0 -0
  140. package/dist/display/Avatar.svelte +0 -61
  141. package/dist/display/Avatar.svelte.d.ts +0 -19
  142. package/dist/display/Badge.svelte +0 -91
  143. package/dist/display/Badge.svelte.d.ts +0 -30
  144. package/dist/display/Callout.svelte +0 -109
  145. package/dist/display/Callout.svelte.d.ts +0 -28
  146. package/dist/display/Close.svelte.d.ts +0 -18
  147. package/dist/display/Code.svelte +0 -190
  148. package/dist/display/Code.svelte.d.ts +0 -32
  149. package/dist/display/ContextTip.svelte +0 -23
  150. package/dist/display/ContextTip.svelte.d.ts +0 -18
  151. package/dist/display/DataList.svelte +0 -16
  152. package/dist/display/DataList.svelte.d.ts +0 -21
  153. package/dist/display/Details.svelte +0 -49
  154. package/dist/display/Details.svelte.d.ts +0 -27
  155. package/dist/display/Hero.svelte +0 -50
  156. package/dist/display/Hero.svelte.d.ts +0 -26
  157. package/dist/display/Icon.svelte +0 -39
  158. package/dist/display/Icon.svelte.d.ts +0 -19
  159. package/dist/display/IconButton.svelte.d.ts +0 -27
  160. package/dist/display/Image.svelte +0 -91
  161. package/dist/display/Image.svelte.d.ts +0 -26
  162. package/dist/display/Indicator.svelte.d.ts +0 -23
  163. package/dist/display/Inset.svelte.d.ts +0 -18
  164. package/dist/display/LineChart.svelte +0 -385
  165. package/dist/display/LineChart.svelte.d.ts +0 -24
  166. package/dist/display/LoadingIndicator.svelte +0 -33
  167. package/dist/display/LoadingIndicator.svelte.d.ts +0 -15
  168. package/dist/display/Modal.svelte +0 -116
  169. package/dist/display/Modal.svelte.d.ts +0 -27
  170. package/dist/display/Notification.svelte.d.ts +0 -23
  171. package/dist/display/Panel.svelte +0 -23
  172. package/dist/display/Panel.svelte.d.ts +0 -19
  173. package/dist/display/Popup.svelte +0 -111
  174. package/dist/display/Popup.svelte.d.ts +0 -25
  175. package/dist/display/Stat.svelte +0 -81
  176. package/dist/display/Stat.svelte.d.ts +0 -30
  177. package/dist/display/Table.svelte +0 -28
  178. package/dist/display/Table.svelte.d.ts +0 -24
  179. package/dist/display/TablePaginator.svelte +0 -51
  180. package/dist/display/TablePaginator.svelte.d.ts +0 -21
  181. package/dist/display/Tag.svelte +0 -90
  182. package/dist/display/Tag.svelte.d.ts +0 -32
  183. package/dist/display/Tooltip.svelte.d.ts +0 -23
  184. package/dist/display/chart.d.ts +0 -78
  185. package/dist/display/chart.js +0 -212
  186. package/dist/display/index.d.ts +0 -24
  187. package/dist/display/index.js +0 -24
  188. package/dist/form/FieldActions.svelte.d.ts +0 -20
  189. package/dist/form/FieldContainer.svelte +0 -37
  190. package/dist/form/FieldContainer.svelte.d.ts +0 -19
  191. package/dist/form/FieldSection.svelte +0 -86
  192. package/dist/form/FieldSection.svelte.d.ts +0 -20
  193. package/dist/layout/Layout.svelte +0 -47
  194. package/dist/layout/Layout.svelte.d.ts +0 -22
  195. package/dist/layout/LayoutFooter.svelte +0 -21
  196. package/dist/layout/LayoutFooter.svelte.d.ts +0 -18
  197. package/dist/layout/LayoutGrid.svelte +0 -51
  198. package/dist/layout/LayoutGrid.svelte.d.ts +0 -27
  199. package/dist/layout/LayoutHeader.svelte +0 -97
  200. package/dist/layout/LayoutHeader.svelte.d.ts +0 -34
  201. package/dist/layout/LayoutSideMenu.svelte +0 -55
  202. package/dist/layout/LayoutSideMenu.svelte.d.ts +0 -21
  203. package/dist/layout/LayoutTypes.d.ts +0 -15
  204. package/dist/layout/LayoutTypes.js +0 -9
  205. package/dist/layout/Overlay.svelte +0 -20
  206. package/dist/layout/Overlay.svelte.d.ts +0 -25
  207. package/dist/layout/OverlayLayer.svelte +0 -140
  208. package/dist/layout/OverlayLayer.svelte.d.ts +0 -19
  209. package/dist/layout/PageContent.svelte +0 -82
  210. package/dist/layout/PageContent.svelte.d.ts +0 -25
  211. package/dist/layout/Theme.svelte +0 -243
  212. package/dist/layout/Theme.svelte.d.ts +0 -19
  213. package/dist/layout/UIContent.svelte +0 -15
  214. package/dist/layout/UIContent.svelte.d.ts +0 -18
  215. package/dist/layout/index.d.ts +0 -11
  216. package/dist/layout/index.js +0 -11
  217. package/dist/nav/Breadcrumb.svelte +0 -82
  218. package/dist/nav/Breadcrumb.svelte.d.ts +0 -28
  219. package/dist/nav/Menu.svelte +0 -170
  220. package/dist/nav/Menu.svelte.d.ts +0 -27
  221. package/dist/nav/MenuItem.svelte.d.ts +0 -22
  222. package/dist/nav/NavMenu.svelte +0 -181
  223. package/dist/nav/NavMenu.svelte.d.ts +0 -19
  224. package/dist/nav/TabbedContent.svelte +0 -43
  225. package/dist/nav/TabbedContent.svelte.d.ts +0 -23
  226. package/dist/nav/Tabs.svelte.d.ts +0 -25
  227. package/dist/nav/index.d.ts +0 -7
  228. package/dist/nav/index.js +0 -6
  229. package/dist/style.css +0 -950
  230. package/dist/typo/Clamp.svelte +0 -25
  231. package/dist/typo/Clamp.svelte.d.ts +0 -24
  232. package/dist/typo/H.svelte +0 -52
  233. package/dist/typo/H.svelte.d.ts +0 -28
  234. package/dist/typo/H1.svelte +0 -14
  235. package/dist/typo/H1.svelte.d.ts +0 -26
  236. package/dist/typo/H2.svelte +0 -14
  237. package/dist/typo/H2.svelte.d.ts +0 -26
  238. package/dist/typo/H3.svelte +0 -14
  239. package/dist/typo/H3.svelte.d.ts +0 -26
  240. package/dist/typo/H4.svelte +0 -14
  241. package/dist/typo/H4.svelte.d.ts +0 -26
  242. package/dist/typo/H5.svelte +0 -14
  243. package/dist/typo/H5.svelte.d.ts +0 -26
  244. package/dist/typo/H6.svelte +0 -14
  245. package/dist/typo/H6.svelte.d.ts +0 -26
  246. package/dist/typo/P.svelte +0 -34
  247. package/dist/typo/P.svelte.d.ts +0 -26
  248. package/dist/typo/index.d.ts +0 -9
  249. package/dist/typo/index.js +0 -9
  250. package/dist/utils/StringOrComponent.svelte +0 -14
  251. package/dist/utils/StringOrComponent.svelte.d.ts +0 -19
  252. package/dist/utils/StringOrSnippet.svelte +0 -11
  253. package/dist/utils/StringOrSnippet.svelte.d.ts +0 -19
  254. package/dist/utils/defaults.d.ts +0 -4
  255. package/dist/utils/hooks.server.d.ts +0 -2
  256. package/dist/utils/hooks.server.js +0 -16
  257. package/dist/utils/id.d.ts +0 -1
  258. package/dist/utils/id.js +0 -3
  259. package/dist/utils/index.d.ts +0 -9
  260. package/dist/utils/index.js +0 -6
  261. package/dist/utils/isSnippet.d.ts +0 -3
  262. package/dist/utils/isSnippet.js +0 -11
  263. /package/dist/{nav → components}/MenuTypes.js +0 -0
  264. /package/dist/{layout → components}/overlays.svelte.js +0 -0
  265. /package/dist/{utils → util}/attr.d.ts +0 -0
  266. /package/dist/{utils → util}/attr.js +0 -0
  267. /package/dist/{utils → util}/color.d.ts +0 -0
  268. /package/dist/{utils → util}/color.js +0 -0
  269. /package/dist/{utils → util}/dom.d.ts +0 -0
  270. /package/dist/{utils → util}/keyboard.svelte.d.ts +0 -0
  271. /package/dist/{utils → util}/keyboard.svelte.js +0 -0
  272. /package/dist/{utils/defaults.js → util/settings.js} +0 -0
  273. /package/dist/{utils → util}/transitions.d.ts +0 -0
  274. /package/dist/{utils → util}/transitions.js +0 -0
@@ -0,0 +1,368 @@
1
+ @scope (.PageContent) to (.UIContent) {
2
+ /* Heading spacing for proper markdown hierarchy */
3
+ h1, h2, h3, h4, h5, h6 {
4
+ margin-block: var(--space-lg) var(--space-md);
5
+
6
+ /* No top margin for first heading or when following another heading */
7
+ &:first-child,
8
+ &:has(+ :is(h1, h2, h3, h4, h5, h6)) {
9
+ margin-block-start: 0;
10
+ }
11
+
12
+ /* Larger spacing before headings that follow non-heading content */
13
+ &:not(:first-child):not(:is(h1, h2, h3, h4, h5, h6) + *) {
14
+ margin-block-start: var(--space-xl);
15
+ }
16
+
17
+ & + * {
18
+ margin-block-start: 0;
19
+ }
20
+ }
21
+
22
+ /* h1 and h2 get extra spacing */
23
+ h1, h2 {
24
+ margin-block-start: var(--space-xl);
25
+ margin-block-end: var(--space-lg);
26
+ }
27
+
28
+ /* Paragraph spacing with smart adjustments */
29
+ p {
30
+ margin-block: 0 var(--space-md);
31
+
32
+ /* Paragraphs with images get extra spacing */
33
+ &:has(img) {
34
+ margin-block: var(--space-lg);
35
+ }
36
+
37
+ /* Paragraphs with only a small element get reduced spacing */
38
+ &:has(> small:only-child) {
39
+ margin-block: var(--space-xs);
40
+ }
41
+
42
+ /* Paragraphs immediately before a paragraph that contains only a small element get reduced bottom margin */
43
+ &:has(+ p > small:only-child),
44
+ &:has(+ li > small:only-child) {
45
+ margin-block-end: var(--space-xs);
46
+ }
47
+
48
+ /* Paragraphs immediately after lists get reduced spacing */
49
+ :is(ul, ol) + & {
50
+ margin-block-start: var(--space-sm);
51
+ }
52
+ }
53
+
54
+ /* List spacing with contextual adjustments */
55
+ :is(ul, ol) {
56
+ margin-block: 0 var(--space-md);
57
+ padding-inline-start: var(--space-xl);
58
+
59
+ /* Lists following paragraphs get closer spacing */
60
+ p + & {
61
+ margin-block-start: var(--space-sm);
62
+ }
63
+
64
+ /* Nested lists */
65
+ & :is(ul, ol) {
66
+ margin-block: var(--space-sm) 0;
67
+ }
68
+
69
+ /* Lists inside blockquotes */
70
+ blockquote & {
71
+ margin-block: var(--space-sm) 0;
72
+ }
73
+ }
74
+
75
+ /* List item spacing */
76
+ li {
77
+ margin-block-end: var(--space-xs);
78
+
79
+ &:last-child {
80
+ margin-block-end: 0;
81
+ }
82
+
83
+ /* List items containing only text get tighter spacing */
84
+ &:not(:has(:is(p, ul, ol, blockquote, pre))) {
85
+ margin-block-end: var(--space-xs);
86
+ }
87
+ }
88
+
89
+ /* Block quotes with contextual spacing */
90
+ blockquote {
91
+ border-inline-start: var(--space-xs) solid var(--border-color);
92
+ padding-inline-start: var(--space-md);
93
+ padding-block: var(--space-sm);
94
+ margin-block: var(--space-lg);
95
+ margin-inline: 0;
96
+ color: var(--text-color-p-subtle);
97
+
98
+ /* Nested blockquotes get reduced spacing */
99
+ & blockquote {
100
+ margin-block: var(--space-md);
101
+ border-inline-start-width: var(--space-xs);
102
+ }
103
+
104
+ /* Internal content spacing */
105
+ & > :first-child { margin-block-start: 0; }
106
+ & > :last-child { margin-block-end: 0; }
107
+
108
+ /* Blockquotes containing only a single paragraph */
109
+ &:has(> p:only-child) {
110
+ padding-block: var(--space-xs);
111
+ }
112
+ }
113
+
114
+ /* Code blocks with smart spacing */
115
+ pre {
116
+ background-color: var(--code-background);
117
+ color: var(--text-color-p);
118
+ border: var(--code-border-size) var(--code-border-style) var(--code-border-color);
119
+ padding-inline: var(--code-padding-inline);
120
+ padding-block: var(--code-padding-block);
121
+ border-radius: var(--code-border-radius);
122
+ overflow-x: auto;
123
+ line-height: var(--font-line-height);
124
+ margin-block: var(--space-lg);
125
+
126
+ /* Code blocks following lists get extra spacing */
127
+ :is(ul, ol) + & {
128
+ margin-block-start: var(--space-xl);
129
+ }
130
+
131
+ /* Code blocks inside blockquotes */
132
+ blockquote & {
133
+ margin-block: var(--space-md);
134
+ }
135
+ }
136
+
137
+ /* Inline code with contextual styling */
138
+ code {
139
+ background-color: var(--code-background);
140
+ color: var(--code-color);
141
+ padding-inline: calc(var(--code-padding-inline) * 0.5);
142
+ padding-block: calc(var(--code-padding-block) * 0.5);
143
+ border-radius: var(--code-border-radius);
144
+ font-family: var(--font-family-mono);
145
+ font-size: var(--font-size-sm);
146
+
147
+ /* Code inside headings gets different styling */
148
+ :is(h1, h2, h3, h4, h5, h6) & {
149
+ font-size: var(--font-size-sm);
150
+ padding-inline: var(--code-padding-inline);
151
+ padding-block: var(--code-padding-block);
152
+ }
153
+
154
+ /* Code inside pre blocks resets styling */
155
+ pre & {
156
+ padding: 0;
157
+ background-color: transparent;
158
+ border: none;
159
+ font-size: inherit;
160
+ }
161
+ }
162
+
163
+ /* Horizontal rules with contextual spacing */
164
+ hr {
165
+ border: none;
166
+ border-block-start: var(--border-size-thick) var(--border-style) var(--border-color);
167
+ margin-block: var(--space-xl);
168
+
169
+ /* HRs following headings get reduced spacing */
170
+ :is(h1, h2, h3, h4, h5, h6) + & {
171
+ margin-block-start: var(--space-md);
172
+ }
173
+
174
+ /* HRs at the end of content */
175
+ &:last-child {
176
+ margin-block-end: 0;
177
+ }
178
+ }
179
+
180
+ /* Table with responsive and contextual styling */
181
+ table {
182
+ margin-block: var(--space-lg);
183
+ border-collapse: collapse;
184
+ width: 100%;
185
+
186
+ /* Tables immediately following text get closer spacing */
187
+ p + & {
188
+ margin-block-start: var(--space-md);
189
+ }
190
+
191
+ /* Tables inside other containers */
192
+ :is(blockquote, li) & {
193
+ margin-block: var(--space-md);
194
+ }
195
+ }
196
+
197
+ :is(th, td) {
198
+ padding: var(--space-sm);
199
+ border: var(--border-size-thin) var(--border-style) var(--border-color);
200
+ text-align: start;
201
+
202
+ /* First/last cells get adjusted padding */
203
+ &:first-child { padding-inline-start: var(--space-md); }
204
+ &:last-child { padding-inline-end: var(--space-md); }
205
+ }
206
+
207
+ th {
208
+ background-color: var(--background-color-subtle);
209
+ font-weight: var(--font-weight-semibold);
210
+ }
211
+
212
+ /* Smart image spacing */
213
+ img {
214
+ max-width: 100%;
215
+ height: auto;
216
+
217
+ /* Inline images (in paragraphs) get minimal spacing */
218
+ p & {
219
+ margin-block: var(--space-xs);
220
+ vertical-align: middle;
221
+ }
222
+
223
+ /* Block images get more spacing */
224
+ &:not(p *) {
225
+ margin-block: var(--space-lg);
226
+ display: block;
227
+ }
228
+
229
+ /* Images in lists */
230
+ li & {
231
+ margin-block: var(--space-sm);
232
+ }
233
+ }
234
+
235
+ /* Figure with enhanced spacing logic */
236
+ figure {
237
+ margin-block: var(--space-lg);
238
+ margin-inline: 0;
239
+
240
+ /* Figures containing only images */
241
+ &:has(> img:only-child) {
242
+ margin-block: var(--space-xl);
243
+ }
244
+
245
+ /* Figures in lists or blockquotes */
246
+ :is(li, blockquote) & {
247
+ margin-block: var(--space-md);
248
+ }
249
+ }
250
+
251
+ figcaption {
252
+ margin-block-start: var(--space-sm);
253
+ font-size: var(--font-size-sm);
254
+ color: var(--text-color-p-subtle);
255
+ text-align: center;
256
+ }
257
+
258
+ /* Enhanced definition lists */
259
+ dl {
260
+ margin-block: var(--space-md);
261
+
262
+ /* DLs with many terms get more spacing */
263
+ &:has(dt:nth-of-type(n+4)) {
264
+ margin-block: var(--space-lg);
265
+
266
+ dt {
267
+ margin-block-start: var(--space-md);
268
+ &:first-child { margin-block-start: 0; }
269
+ }
270
+ }
271
+ }
272
+
273
+ dt {
274
+ font-weight: var(--font-weight-semibold);
275
+ margin-block: var(--space-sm) var(--space-xs);
276
+
277
+ &:first-child { margin-block-start: 0; }
278
+ }
279
+
280
+ dd {
281
+ margin-inline-start: var(--space-xl);
282
+ margin-block-end: var(--space-sm);
283
+
284
+ &:last-child { margin-block-end: 0; }
285
+
286
+ /* Multiple DDs for one DT get tighter spacing */
287
+ & + dd {
288
+ margin-block-start: var(--space-xs);
289
+ }
290
+ }
291
+
292
+ /* Enhanced link styling with context awareness */
293
+ a {
294
+ color: var(--link-color);
295
+ text-decoration: var(--link-text-decoration);
296
+
297
+ /* Links in headings get subtle styling */
298
+ :is(h1, h2, h3, h4, h5, h6) & {
299
+ color: inherit;
300
+ text-decoration: underline;
301
+ text-decoration-color: var(--link-color);
302
+ text-underline-offset: var(--space-xs);
303
+ }
304
+
305
+ /* Links containing only images */
306
+ &:has(> img:only-child) {
307
+ text-decoration: none;
308
+ display: inline-block;
309
+ }
310
+
311
+ /* External links (starting with http) */
312
+ &[href^="http"]::after {
313
+ content: " ↗";
314
+ font-size: 0.8em;
315
+ color: var(--text-color-p-subtler);
316
+ }
317
+
318
+ &:hover {
319
+ color: var(--link-color-hover);
320
+ text-decoration: var(--link-text-decoration-hover);
321
+
322
+ :is(h1, h2, h3, h4, h5, h6) & {
323
+ text-decoration-color: var(--link-color-hover);
324
+ }
325
+ }
326
+
327
+ &:active {
328
+ color: var(--link-color-active);
329
+ }
330
+
331
+ &:visited {
332
+ color: var(--link-color-visited);
333
+ }
334
+ }
335
+
336
+ /* Smart container edge handling */
337
+ > :first-child,
338
+ > :is(h1, h2, h3, h4, h5, h6):first-child {
339
+ margin-block-start: 0;
340
+ }
341
+
342
+ > :last-child {
343
+ margin-block-end: 0;
344
+ }
345
+
346
+ /* Content flow improvements */
347
+ :is(p, li):has(+ :is(h2, h3, h4, h5, h6)) {
348
+ margin-block-end: var(--space-sm); /* Reduce space before section headings */
349
+ }
350
+
351
+ /* Adjacent similar elements get reduced spacing */
352
+ :is(ul, ol) + :is(ul, ol) {
353
+ margin-block-start: var(--space-sm);
354
+ }
355
+
356
+ blockquote + blockquote {
357
+ margin-block-start: var(--space-md);
358
+ }
359
+
360
+ pre + pre {
361
+ margin-block-start: var(--space-md);
362
+ }
363
+
364
+ /* Elements with no content get minimal presence */
365
+ :is(p, li, blockquote):empty {
366
+ display: none;
367
+ }
368
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Accessibility preferences
3
+ */
4
+
5
+ @media (prefers-reduced-motion: reduce) {
6
+ *,
7
+ *::before,
8
+ *::after {
9
+ animation-duration: 0 !important;
10
+ animation-iteration-count: 1 !important;
11
+ transition-duration: 0 !important;
12
+ scroll-behavior: auto !important;
13
+ }
14
+ }
15
+
16
+ @media (prefers-reduced-motion: no-preference) {
17
+ :root {
18
+ scroll-behavior: smooth;
19
+ }
20
+ }
21
+
22
+ @media (prefers-contrast: high) {
23
+ :root {
24
+ --field-border-size: 2px;
25
+ --button-border-size: 2px;
26
+ --section-border-size: 2px;
27
+ --focus-ring-size: 3px;
28
+ }
29
+ }
30
+
31
+ @media (prefers-reduced-transparency: reduce) {
32
+ :root {
33
+ --overlay-backdrop-filter: none;
34
+ --overlay-bg-color: rgba(0, 0, 0, 0.9);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Responsive scaling - mobile first approach
40
+ * Adjusts base font size and spacing scale for optimal experience
41
+ */
42
+
43
+ /* Small mobile devices */
44
+ @media (max-width: 480px) {
45
+ :root {
46
+ --font-size-base: 0.9em;
47
+ --base-size: 14px;
48
+ }
49
+ }
50
+
51
+ /* Large mobile devices and small desktops */
52
+ @media (min-width: 481px) and (max-width: 1440px) {
53
+ :root {
54
+ --font-size-base: 1em;
55
+ --base-size: 16px;
56
+ }
57
+ }
58
+
59
+ /* Large desktop screens
60
+ @media (min-width: 1441px) {
61
+ :root {
62
+ --font-size-base: 1.1em;
63
+ --base-size: 18px;
64
+ }
65
+ }
66
+ */
67
+
68
+ /**
69
+ * High density displays
70
+ */
71
+ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
72
+ :root {
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Touch device optimizations
78
+ */
79
+ @media (hover: none) and (pointer: coarse) {
80
+ :root {
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Print styles
86
+ */
87
+ @media print {
88
+ :root {
89
+ --font-size-base: 12pt;
90
+ --spacing-xs: 0.25em;
91
+ --spacing-sm: 0.5em;
92
+ --spacing-base: 1em;
93
+ --spacing-lg: 1.5em;
94
+ --spacing-xl: 2em;
95
+ --spacing-2xl: 3em;
96
+ --spacing-3xl: 4em;
97
+ --text-color: #000;
98
+ --background-color: #fff;
99
+ --section-border-color: #000;
100
+ --field-border-color: #000;
101
+ }
102
+
103
+ * {
104
+ background: transparent !important;
105
+ box-shadow: none !important;
106
+ text-shadow: none !important;
107
+ }
108
+
109
+ @scope (.PageContent) to (.UIContent) {
110
+ a[href^="http"]::after {
111
+ content: " (" attr(href) ")";
112
+ font-size: 0.8em;
113
+ color: var(--text-color-subtle);
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,7 @@
1
+ @layer l-base, base, l-typo, typo, l-layout, layout, theme, l-media, media, misc;
2
+
3
+ @import "./1-props.css";
4
+ @import "./2-base.css" layer(l-base);
5
+ @import "./3-typo.css" layer(l-typo);
6
+ @import "./4-layout.css" layer(l-layout);
7
+ @import "./5-media.css" layer(l-media);
@@ -0,0 +1,209 @@
1
+ @layer theme {
2
+ :root {
3
+ --hue: 240deg;
4
+ --chroma: 0.5;
5
+
6
+ /*
7
+ * Primary theme color
8
+ */
9
+
10
+ --lutra-primary-color: oklch(0.5 var(--chroma) var(--hue));
11
+
12
+ /*
13
+ * Background colors
14
+ */
15
+
16
+ --background-body: light-dark(
17
+ white,
18
+ oklch(from var(--lutra-primary-color) calc(l * 0.4) calc(c * 0.025) h)
19
+ );
20
+
21
+ --background-main: light-dark(
22
+ oklch(from var(--lutra-primary-color) calc(l * 0.95) calc(c * 0.025) h),
23
+ oklch(from var(--lutra-primary-color) calc(l * 0.5) calc(c * 0.025) h)
24
+ );
25
+
26
+ --background-selected: light-dark(
27
+ oklch(from var(--lutra-primary-color) calc(l * 0.95) calc(c * 0.15) h),
28
+ oklch(from var(--lutra-primary-color) calc(l * 0.8) calc(c * 0.15) h)
29
+ );
30
+
31
+ /*
32
+ * Text
33
+ */
34
+
35
+ --text-color-p: light-dark(
36
+ rgba(0, 0, 0, 0.87),
37
+ rgba(255, 255, 255, 0.87)
38
+ );
39
+
40
+ --text-color-p-subtle: light-dark(
41
+ rgba(0, 0, 0, 0.5),
42
+ rgba(255, 255, 255, 0.5)
43
+ );
44
+
45
+ --text-color-p-subtler: light-dark(
46
+ rgba(0, 0, 0, 0.4),
47
+ rgba(255, 255, 255, 0.4)
48
+ );
49
+
50
+ --text-color-p-subtlest: light-dark(
51
+ rgba(0, 0, 0, 0.3),
52
+ rgba(255, 255, 255, 0.3)
53
+ );
54
+
55
+ --text-color-heading: light-dark(
56
+ rgba(0, 0, 0, 0.95),
57
+ rgba(255, 255, 255, 0.95)
58
+ );
59
+
60
+ --link-color: light-dark(
61
+ oklch(from var(--lutra-primary-color) calc(l * 0.35) calc(c * 0.01) h),
62
+ oklch(from var(--lutra-primary-color) calc(l * 1.25) calc(c * 0.35) h)
63
+ );
64
+
65
+ --link-color-hover: light-dark(
66
+ oklch(from var(--link-color) calc(l * 0.35) c h),
67
+ oklch(from var(--link-color) calc(l * 1.35) c h)
68
+ );
69
+
70
+ /*
71
+ * Code
72
+ */
73
+
74
+ --code-background: light-dark(
75
+ oklch(from var(--lutra-primary-color) calc(l * 1.92) calc(c * 0.02) h),
76
+ oklch(from var(--lutra-primary-color) calc(l * 0.5) calc(c * 0.02) h)
77
+ );
78
+
79
+ --code-border-color: var(--code-background);
80
+
81
+ --code-color: light-dark(
82
+ oklch(from var(--lutra-primary-color) calc(l * 0.35) calc(c * 0.01) h),
83
+ oklch(from var(--lutra-primary-color) calc(l * 1.65) calc(c * 0.01) h)
84
+ );
85
+
86
+ --code-border-radius: var(--border-radius-base);
87
+ --code-border-size: var(--border-size-thin);
88
+ --code-border-style: var(--border-style);
89
+
90
+ /*
91
+ * Buttons
92
+ */
93
+
94
+ /* Submit */
95
+ --button-submit-base-color: light-dark(oklch(from var(--lutra-primary-color) l calc(c * 0.5) h), oklch(from var(--lutra-primary-color) l calc(c * 0.5) h));
96
+ --button-submit-base-color-hover: light-dark(oklch(from var(--button-submit-base-color) calc(l * 0.85) c h), oklch(from var(--button-submit-base-color) calc(l * 1.15) c h));
97
+
98
+ --button-submit-color: light-dark(oklch(from var(--button-submit-base-color) 0.98 0.01 h), oklch(from var(--button-submit-base-color-hover) 0.98 0.01 h));
99
+ --button-submit-color-hover: light-dark(oklch(from var(--button-submit-base-color-hover) 1 0.01 h), oklch(from var(--button-submit-base-color-hover) 1 0.01 h));
100
+ --button-submit-background: var(--button-submit-base-color);
101
+ --button-submit-background-hover: var(--button-submit-base-color-hover);
102
+ --button-submit-border-color: var(--button-submit-base-color);
103
+ --button-submit-border-color-hover: var(--button-submit-base-color-hover);
104
+ --button-submit-border-color-disabled: var(--button-submit-base-color);
105
+ --button-submit-border-color-focus: var(--button-submit-base-color);
106
+ --button-submit-border-color-loading: var(--button-submit-base-color);
107
+
108
+ /* Action */
109
+ --button-action-base-color: light-dark(oklch(from var(--lutra-primary-color) calc(l * 0.5) calc(c * 0.1) h), oklch(from var(--lutra-primary-color) calc(l * 2) calc(c * 0.01) h));
110
+ --button-action-base-color-hover: light-dark(oklch(from var(--button-action-base-color) calc(l * 0.1) calc(c * 0.01) h), oklch(from var(--button-action-base-color) calc(l * 0.9) c h));
111
+
112
+ --button-action-color: light-dark(oklch(from var(--button-action-base-color) 0.98 0.01 h), oklch(from var(--button-action-base-color-hover) 0.01 0.01 h));
113
+ --button-action-color-hover: light-dark(oklch(from var(--button-action-base-color-hover) 1 0.01 h), oklch(from var(--button-action-base-color-hover) 0.01 0.01 h));
114
+ --button-action-background: var(--button-action-base-color);
115
+ --button-action-background-hover: var(--button-action-base-color-hover);
116
+ --button-action-border-color: var(--button-action-base-color);
117
+ --button-action-border-color-hover: var(--button-action-base-color-hover);
118
+
119
+ /* Success */
120
+ --button-success-base-color: light-dark(hsl(120, 100%, 35%), hsl(120, 100%, 35%));
121
+ --button-success-base-color-hover: light-dark(oklch(from var(--button-success-base-color) calc(l * 0.85) c h), oklch(from var(--button-success-base-color) calc(l * 0.9) c h));
122
+
123
+ --button-success-color: white;
124
+ --button-success-color-hover: white;
125
+ --button-success-background: var(--button-success-base-color);
126
+ --button-success-background-hover: var(--button-success-base-color-hover);
127
+ --button-success-border-color: var(--button-success-base-color);
128
+ --button-success-border-color-hover: var(--button-success-base-color-hover);
129
+
130
+ /* Danger */
131
+ --button-danger-base-color: light-dark(hsl(0, 100%, 50%), hsl(0, 100%, 50%));
132
+ --button-danger-base-color-hover: light-dark(oklch(from var(--button-danger-base-color) calc(l * 0.85) c h), oklch(from var(--button-danger-base-color) calc(l * 0.9) c h));
133
+ --button-danger-color: white;
134
+ --button-danger-color-hover: white;
135
+ --button-danger-background: var(--button-danger-base-color);
136
+ --button-danger-background-hover: var(--button-danger-base-color-hover);
137
+ --button-danger-border-color: var(--button-danger-base-color);
138
+ --button-danger-border-color-hover: var(--button-danger-base-color-hover);
139
+
140
+ /**
141
+ * Fields
142
+ */
143
+
144
+ --field-background: transparent;
145
+ --field-placeholder-color: light-dark(
146
+ rgba(0, 0, 0, 0.35),
147
+ rgba(255, 255, 255, 0.35)
148
+ );
149
+
150
+ --field-label-color: var(--text-color-p);
151
+
152
+ --form-background-actions: light-dark(
153
+ oklch(from var(--lutra-primary-color) calc(l * 1.75) calc(c * 0.05) h / 0.35),
154
+ oklch(from var(--lutra-primary-color) calc(l * 0.75) calc(c * 0.05) h / 0.35)
155
+ );
156
+
157
+ /**
158
+ * Borders
159
+ */
160
+
161
+ --border-color: light-dark(
162
+ oklch(from var(--lutra-primary-color) calc(l * 1.75) calc(c * 0.025) h),
163
+ oklch(from var(--lutra-primary-color) calc(l * 1) calc(c * 0.025) h)
164
+ );
165
+
166
+ --border-color-subtle: light-dark(
167
+ oklch(from var(--border-color) l c h / 0.75),
168
+ oklch(from var(--border-color) l c h / 0.75)
169
+ );
170
+
171
+ --border-color-subtler: light-dark(
172
+ oklch(from var(--border-color) l c h / 0.5),
173
+ oklch(from var(--border-color) l c h / 0.5)
174
+ );
175
+
176
+ /**
177
+ * Links
178
+ */
179
+
180
+ --link-color: var(--button-submit-base-color);
181
+ --link-color-hover: var(--button-submit-base-color-hover);
182
+ --link-color-active: var(--button-submit-base-color-active);
183
+
184
+ /**
185
+ * Notifications
186
+ */
187
+
188
+ --notification-background-color: var(--background-body);
189
+ --notification-border-color: var(--border-color);
190
+ --notification-border-size: var(--border-size-thin);
191
+ --notification-border-style: var(--border-style);
192
+ --notification-border-radius: var(--border-radius-base);
193
+
194
+ /**
195
+ * Menus
196
+ */
197
+
198
+ --menu-background-color: var(--background-body);
199
+ --menu-background-color-hover: light-dark(
200
+ oklch(from var(--lutra-primary-color) l calc(c * 0.5) h / 0.1),
201
+ oklch(from var(--lutra-primary-color) calc(l * 2) calc(c * 0.25) h / 0.15)
202
+ );
203
+ --menu-border-color: var(--border-color-subtle);
204
+ --menu-border-size: var(--border-size-thin);
205
+ --menu-border-style: var(--border-style);
206
+ --menu-border-radius: var(--border-radius-base);
207
+
208
+ }
209
+ }