lutra 0.1.0 → 0.1.5

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 (154) hide show
  1. package/dist/components/Avatar.svelte +105 -0
  2. package/dist/components/Avatar.svelte.d.ts +14 -0
  3. package/dist/components/Close.svelte +76 -0
  4. package/dist/components/Close.svelte.d.ts +7 -0
  5. package/dist/components/ContextTip.svelte +41 -0
  6. package/dist/components/ContextTip.svelte.d.ts +7 -0
  7. package/dist/components/Icon.svelte +62 -0
  8. package/dist/components/Icon.svelte.d.ts +8 -0
  9. package/dist/components/IconButton.svelte +120 -0
  10. package/dist/components/IconButton.svelte.d.ts +16 -0
  11. package/dist/components/Image.svelte +172 -0
  12. package/dist/components/Image.svelte.d.ts +56 -0
  13. package/dist/components/Indicator.svelte +387 -0
  14. package/dist/components/Indicator.svelte.d.ts +12 -0
  15. package/dist/components/Inset.svelte +23 -0
  16. package/dist/components/Inset.svelte.d.ts +7 -0
  17. package/dist/components/Layout.svelte +2 -1
  18. package/dist/components/MenuDropdown.svelte +195 -0
  19. package/dist/components/MenuDropdown.svelte.d.ts +16 -0
  20. package/dist/components/MenuItem.svelte +159 -0
  21. package/dist/components/MenuItem.svelte.d.ts +11 -0
  22. package/dist/components/MenuItemContent.svelte +25 -0
  23. package/dist/components/MenuItemContent.svelte.d.ts +10 -0
  24. package/dist/components/MenuTypes.d.ts +79 -0
  25. package/dist/components/MenuTypes.js +1 -0
  26. package/dist/components/Modal.svelte +149 -0
  27. package/dist/components/Modal.svelte.d.ts +16 -0
  28. package/dist/components/Notification.svelte +115 -0
  29. package/dist/components/Notification.svelte.d.ts +12 -0
  30. package/dist/components/Overlay.svelte +31 -0
  31. package/dist/components/Overlay.svelte.d.ts +14 -0
  32. package/dist/components/OverlayContainer.svelte +31 -0
  33. package/dist/components/OverlayContainer.svelte.d.ts +18 -0
  34. package/dist/components/OverlayLayer.svelte +168 -0
  35. package/dist/components/OverlayLayer.svelte.d.ts +8 -0
  36. package/dist/components/PageContent.svelte +4 -82
  37. package/dist/components/PageContent.svelte.d.ts +0 -31
  38. package/dist/components/TabbedContent.svelte +74 -0
  39. package/dist/components/TabbedContent.svelte.d.ts +11 -0
  40. package/dist/components/TabbedContentItem.svelte +33 -0
  41. package/dist/components/TabbedContentItem.svelte.d.ts +10 -0
  42. package/dist/components/Table.svelte +41 -0
  43. package/dist/components/Table.svelte.d.ts +13 -0
  44. package/dist/components/Tabs.svelte +216 -0
  45. package/dist/components/Tabs.svelte.d.ts +20 -0
  46. package/dist/components/Tag.svelte +120 -0
  47. package/dist/components/Tag.svelte.d.ts +21 -0
  48. package/dist/components/Theme.svelte +32 -14
  49. package/dist/components/Tooltip.svelte +8 -8
  50. package/dist/components/UIContent.svelte +19 -0
  51. package/dist/components/UIContent.svelte.d.ts +7 -0
  52. package/dist/components/index.d.ts +28 -0
  53. package/dist/components/index.js +29 -0
  54. package/dist/components/notifications.svelte.d.ts +21 -0
  55. package/dist/components/notifications.svelte.js +30 -0
  56. package/dist/components/overlays.svelte.d.ts +36 -0
  57. package/dist/components/overlays.svelte.js +44 -0
  58. package/dist/css/1-props.css +389 -724
  59. package/dist/css/2-base.css +257 -123
  60. package/dist/css/3-typo.css +74 -34
  61. package/dist/css/4-layout.css +364 -1
  62. package/dist/css/5-media.css +106 -11
  63. package/dist/css/lutra.css +2 -1
  64. package/dist/css/themes/DefaultTheme.css +209 -0
  65. package/dist/form/Button.svelte +58 -0
  66. package/dist/form/Button.svelte.d.ts +15 -0
  67. package/dist/form/Datepicker.svelte +311 -0
  68. package/dist/form/Datepicker.svelte.d.ts +9 -0
  69. package/dist/form/FieldContent.svelte +178 -0
  70. package/dist/form/FieldContent.svelte.d.ts +21 -0
  71. package/dist/form/FieldError.svelte +24 -0
  72. package/dist/form/FieldError.svelte.d.ts +7 -0
  73. package/dist/form/Fieldset.svelte +103 -0
  74. package/dist/form/Fieldset.svelte.d.ts +20 -0
  75. package/dist/form/Form.svelte +220 -0
  76. package/dist/form/Form.svelte.d.ts +38 -0
  77. package/dist/form/FormActions.svelte +80 -0
  78. package/dist/form/FormActions.svelte.d.ts +9 -0
  79. package/dist/form/FormSection.svelte +96 -0
  80. package/dist/form/FormSection.svelte.d.ts +9 -0
  81. package/dist/form/ImageUpload.svelte +299 -0
  82. package/dist/form/ImageUpload.svelte.d.ts +20 -0
  83. package/dist/form/Input.svelte +444 -0
  84. package/dist/form/Input.svelte.d.ts +108 -0
  85. package/dist/form/InputLength.svelte +42 -0
  86. package/dist/form/InputLength.svelte.d.ts +9 -0
  87. package/dist/form/Label.svelte +88 -0
  88. package/dist/form/Label.svelte.d.ts +16 -0
  89. package/dist/form/LogoUpload.svelte +115 -0
  90. package/dist/form/LogoUpload.svelte.d.ts +18 -0
  91. package/dist/form/Select.svelte +186 -0
  92. package/dist/form/Select.svelte.d.ts +59 -0
  93. package/dist/form/Textarea.svelte +265 -0
  94. package/dist/form/Textarea.svelte.d.ts +95 -0
  95. package/dist/form/Toggle.svelte +4 -0
  96. package/dist/form/Toggle.svelte.d.ts +18 -0
  97. package/dist/form/client.svelte.d.ts +45 -0
  98. package/dist/form/client.svelte.js +102 -0
  99. package/dist/form/form.d.ts +55 -0
  100. package/dist/form/form.js +345 -0
  101. package/dist/form/index.d.ts +17 -0
  102. package/dist/form/index.js +17 -0
  103. package/dist/form/types.d.ts +55 -0
  104. package/dist/form/types.js +1 -0
  105. package/dist/icons/IconAlert.svelte +3 -0
  106. package/dist/icons/IconAlert.svelte.d.ts +26 -0
  107. package/dist/icons/IconCopy.svelte +3 -0
  108. package/dist/icons/IconCopy.svelte.d.ts +26 -0
  109. package/dist/icons/IconDone.svelte +3 -0
  110. package/dist/icons/IconDone.svelte.d.ts +26 -0
  111. package/dist/icons/IconError.svelte +3 -0
  112. package/dist/icons/IconError.svelte.d.ts +26 -0
  113. package/dist/icons/IconHelp.svelte +3 -0
  114. package/dist/icons/IconHelp.svelte.d.ts +26 -0
  115. package/dist/icons/IconHide.svelte +3 -0
  116. package/dist/icons/IconHide.svelte.d.ts +26 -0
  117. package/dist/icons/IconInfo.svelte +3 -0
  118. package/dist/icons/IconInfo.svelte.d.ts +26 -0
  119. package/dist/icons/IconLink.svelte +3 -0
  120. package/dist/icons/IconLink.svelte.d.ts +26 -0
  121. package/dist/icons/IconMenuBurger.svelte +3 -0
  122. package/dist/icons/IconMenuBurger.svelte.d.ts +26 -0
  123. package/dist/icons/IconMenuDots.svelte +3 -0
  124. package/dist/icons/IconMenuDots.svelte.d.ts +26 -0
  125. package/dist/icons/IconSearch.svelte +3 -0
  126. package/dist/icons/IconSearch.svelte.d.ts +26 -0
  127. package/dist/icons/IconShow.svelte +3 -0
  128. package/dist/icons/IconShow.svelte.d.ts +26 -0
  129. package/dist/icons/IconSuccess.svelte +3 -0
  130. package/dist/icons/IconSuccess.svelte.d.ts +26 -0
  131. package/dist/icons/IconWarning.svelte +3 -0
  132. package/dist/icons/IconWarning.svelte.d.ts +26 -0
  133. package/dist/icons/index.d.ts +14 -0
  134. package/dist/icons/index.js +14 -0
  135. package/dist/index.d.ts +3 -5
  136. package/dist/index.js +3 -5
  137. package/dist/util/StringOrComponent.svelte +20 -0
  138. package/dist/util/StringOrComponent.svelte.d.ts +8 -0
  139. package/dist/util/StringOrSnippet.svelte +16 -0
  140. package/dist/util/StringOrSnippet.svelte.d.ts +8 -0
  141. package/dist/util/attr.d.ts +5 -0
  142. package/dist/util/attr.js +21 -0
  143. package/dist/util/color.d.ts +51 -0
  144. package/dist/util/color.js +97 -0
  145. package/dist/util/dom.d.ts +15 -0
  146. package/dist/util/dom.js +73 -0
  147. package/dist/util/keyboard.svelte.d.ts +22 -0
  148. package/dist/util/keyboard.svelte.js +161 -0
  149. package/dist/util/locale.d.ts +1 -0
  150. package/dist/util/locale.js +47 -0
  151. package/dist/util/settings.d.ts +4 -0
  152. package/dist/util/settings.js +1 -0
  153. package/package.json +20 -11
  154. package/dist/css/0-layers.css +0 -1
@@ -1,5 +1,368 @@
1
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 */
2
29
  p {
3
- margin-bottom: calc(var(--margin-base) * var(--margin-multiplier));
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;
4
367
  }
5
368
  }
@@ -1,21 +1,116 @@
1
- @media(prefers-reduced-motion: reduce) {
2
- * {
3
- transition-duration: 0s !important;
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;
4
48
  }
5
49
  }
6
50
 
7
- /*
8
- @media(max-width: 1280px) {
51
+ /* Large mobile devices and small desktops */
52
+ @media (min-width: 481px) and (max-width: 1440px) {
9
53
  :root {
10
- --font-size-base: 14px;
11
- --space-ratio: 1.2;
54
+ --font-size-base: 1em;
55
+ --base-size: 16px;
12
56
  }
13
57
  }
14
58
 
15
- @media(max-width: 640px) {
59
+ /* Large desktop screens
60
+ @media (min-width: 1441px) {
16
61
  :root {
17
- --font-size-base: 12px;
18
- --space-ratio: 1.1;
62
+ --font-size-base: 1.1em;
63
+ --base-size: 18px;
19
64
  }
20
65
  }
21
- */
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
+ }
@@ -1,4 +1,5 @@
1
- @import "./0-layers.css";
1
+ @layer l-base, base, l-typo, typo, l-layout, layout, theme, l-media, media, misc;
2
+
2
3
  @import "./1-props.css";
3
4
  @import "./2-base.css" layer(l-base);
4
5
  @import "./3-typo.css" layer(l-typo);
@@ -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
+ }