daftcss 1.3.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.
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Table styles
3
+ */
4
+
5
+ table {
6
+ width: 100%;
7
+ border-collapse: collapse;
8
+ margin-bottom: var(--spacing);
9
+ font-size: var(--text-sm);
10
+ font-variant-numeric: tabular-nums;
11
+ }
12
+
13
+ /* Table headers */
14
+ thead {
15
+ border-bottom: var(--border-width) solid var(--border);
16
+ }
17
+
18
+ th {
19
+ height: 2.5rem;
20
+ padding: var(--spacing-sm);
21
+ font-weight: var(--font-medium);
22
+ text-align: left;
23
+ color: var(--muted-foreground);
24
+ background-color: transparent;
25
+ }
26
+
27
+ /* Table body */
28
+ tbody tr {
29
+ border-bottom: var(--border-width) solid var(--border);
30
+ transition: background-color var(--transition-default);
31
+ }
32
+
33
+ tbody tr:last-child {
34
+ border-bottom: none;
35
+ }
36
+
37
+ tbody tr:hover {
38
+ background-color: color-mix(in oklch, var(--muted) 50%, transparent);
39
+ }
40
+
41
+ td {
42
+ padding: var(--spacing-sm);
43
+ vertical-align: middle;
44
+ }
45
+
46
+ /* Table footer */
47
+ tfoot {
48
+ border-top: var(--border-width) solid var(--border);
49
+ }
50
+
51
+ tfoot td,
52
+ tfoot th {
53
+ padding: var(--spacing-sm);
54
+ font-weight: var(--font-medium);
55
+ color: var(--muted-foreground);
56
+ }
57
+
58
+ /* Striped table */
59
+ table.striped tbody tr:nth-child(odd) {
60
+ background-color: color-mix(in oklch, var(--muted) 30%, transparent);
61
+ }
62
+
63
+ table.striped tbody tr:nth-child(odd):hover {
64
+ background-color: color-mix(in oklch, var(--muted) 60%, transparent);
65
+ }
66
+
67
+ /* Caption */
68
+ caption {
69
+ padding: var(--spacing-md) 0;
70
+ font-size: var(--text-sm);
71
+ color: var(--muted-foreground);
72
+ text-align: left;
73
+ caption-side: bottom;
74
+ }
75
+
76
+ /* Table inside figure (allows overflow) */
77
+ figure > table {
78
+ margin-bottom: 0;
79
+ }
80
+
81
+ /* Responsive table wrapper */
82
+ .overflow-auto > table,
83
+ figure > table {
84
+ margin-bottom: 0;
85
+ }
86
+
87
+ /* Sortable column indicator (optional) */
88
+ th[aria-sort] {
89
+ cursor: pointer;
90
+ user-select: none;
91
+ }
92
+
93
+ th[aria-sort]::after {
94
+ content: "";
95
+ display: inline-block;
96
+ width: 0.75em;
97
+ height: 0.75em;
98
+ margin-left: var(--spacing-xs);
99
+ vertical-align: middle;
100
+ opacity: 0.5;
101
+ }
102
+
103
+ th[aria-sort="ascending"]::after {
104
+ content: "↑";
105
+ opacity: 1;
106
+ }
107
+
108
+ th[aria-sort="descending"]::after {
109
+ content: "↓";
110
+ opacity: 1;
111
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Tooltip styles
3
+ * Uses data-tooltip attribute for tooltip content
4
+ * Uses data-placement for positioning (top, bottom, left, right)
5
+ */
6
+
7
+ [data-tooltip] {
8
+ position: relative;
9
+ cursor: help;
10
+ }
11
+
12
+ /* Tooltip bubble */
13
+ [data-tooltip]::before {
14
+ content: attr(data-tooltip);
15
+ position: absolute;
16
+ z-index: 50;
17
+ padding: var(--spacing-sm) var(--spacing-md);
18
+ font-size: var(--text-xs);
19
+ font-weight: var(--font-medium);
20
+ line-height: var(--line-height-sm);
21
+ color: var(--background);
22
+ background-color: var(--foreground);
23
+ border-radius: var(--tooltip-radius);
24
+ white-space: nowrap;
25
+ pointer-events: none;
26
+ opacity: 0;
27
+ transition: opacity var(--transition-fast) var(--ease-default);
28
+ }
29
+
30
+ /* Default position: top */
31
+ [data-tooltip]:not([data-placement])::before,
32
+ [data-tooltip][data-placement="top"]::before {
33
+ bottom: 100%;
34
+ left: 50%;
35
+ transform: translateX(-50%);
36
+ margin-bottom: var(--spacing-sm);
37
+ }
38
+
39
+ /* Position: bottom */
40
+ [data-tooltip][data-placement="bottom"]::before {
41
+ top: 100%;
42
+ left: 50%;
43
+ transform: translateX(-50%);
44
+ margin-top: var(--spacing-sm);
45
+ }
46
+
47
+ /* Position: left */
48
+ [data-tooltip][data-placement="left"]::before {
49
+ right: 100%;
50
+ top: 50%;
51
+ transform: translateY(-50%);
52
+ margin-right: var(--spacing-sm);
53
+ }
54
+
55
+ /* Position: right */
56
+ [data-tooltip][data-placement="right"]::before {
57
+ left: 100%;
58
+ top: 50%;
59
+ transform: translateY(-50%);
60
+ margin-left: var(--spacing-sm);
61
+ }
62
+
63
+ /* Show tooltip on hover/focus */
64
+ [data-tooltip]:hover::before,
65
+ [data-tooltip]:focus-visible::before {
66
+ opacity: 1;
67
+ }
68
+
69
+ /* Button with tooltip */
70
+ button[data-tooltip] {
71
+ cursor: pointer;
72
+ }
73
+
74
+ /* Link with tooltip */
75
+ a[data-tooltip] {
76
+ cursor: pointer;
77
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Code and preformatted text styles
3
+ * Code, pre, kbd, samp, var
4
+ */
5
+
6
+ /* Inline code */
7
+ code {
8
+ font-family: var(--font-mono);
9
+ font-size: 0.875em;
10
+ font-weight: var(--font-medium);
11
+ background-color: var(--muted);
12
+ color: var(--foreground);
13
+ padding: 0.2em 0.4em;
14
+ border-radius: var(--radius-sm);
15
+ white-space: nowrap;
16
+ }
17
+
18
+ /* Code inside links */
19
+ a > code {
20
+ color: inherit;
21
+ }
22
+
23
+ /* Code blocks */
24
+ pre {
25
+ font-family: var(--font-mono);
26
+ font-size: var(--text-sm);
27
+ line-height: var(--line-height-lg);
28
+ background-color: var(--muted);
29
+ color: var(--foreground);
30
+ padding: var(--spacing);
31
+ border-radius: var(--radius-lg);
32
+ overflow-x: auto;
33
+ -webkit-overflow-scrolling: touch;
34
+ margin-bottom: var(--spacing);
35
+ tab-size: 2;
36
+
37
+ /* Reset inline code styles when inside pre */
38
+ & > code {
39
+ font-size: inherit;
40
+ background: none;
41
+ padding: 0;
42
+ border-radius: 0;
43
+ white-space: pre;
44
+ }
45
+ }
46
+
47
+ /* Dark mode code blocks get slightly different background */
48
+ [data-theme="dark"] pre {
49
+ background-color: oklch(0.18 0 0);
50
+ }
51
+
52
+ @media (prefers-color-scheme: dark) {
53
+ :root:not([data-theme="light"]) pre {
54
+ background-color: oklch(0.18 0 0);
55
+ }
56
+ }
57
+
58
+ /* Keyboard input */
59
+ kbd {
60
+ font-family: var(--font-mono);
61
+ font-size: 0.875em;
62
+ font-weight: var(--font-medium);
63
+ background-color: var(--muted);
64
+ color: var(--foreground);
65
+ padding: 0.2em 0.4em;
66
+ border-radius: var(--radius-sm);
67
+ border: var(--border-width) solid var(--border);
68
+ box-shadow: 0 2px 0 var(--border);
69
+ }
70
+
71
+ /* Nested kbd (for key combinations) */
72
+ kbd > kbd {
73
+ border: none;
74
+ box-shadow: none;
75
+ padding: 0;
76
+ background: none;
77
+ }
78
+
79
+ /* Sample output */
80
+ samp {
81
+ font-family: var(--font-mono);
82
+ font-size: 0.875em;
83
+ background-color: var(--muted);
84
+ color: var(--muted-foreground);
85
+ padding: 0.2em 0.4em;
86
+ border-radius: var(--radius-sm);
87
+ }
88
+
89
+ /* Variable */
90
+ var {
91
+ font-family: var(--font-mono);
92
+ font-style: italic;
93
+ color: var(--primary);
94
+ }
95
+
96
+ /* Data element */
97
+ data {
98
+ font-variant-numeric: tabular-nums;
99
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Embedded content styles
3
+ * Images, figures, video, audio, and iframe
4
+ */
5
+
6
+ /* Images */
7
+ img {
8
+ height: auto;
9
+ max-width: 100%;
10
+ border-radius: var(--radius-md);
11
+ }
12
+
13
+ /* Figures */
14
+ figure {
15
+ margin: var(--spacing) 0;
16
+
17
+ & > img,
18
+ & > picture > img,
19
+ & > video,
20
+ & > iframe {
21
+ border-radius: var(--radius-lg);
22
+ }
23
+
24
+ & > figcaption {
25
+ font-size: var(--text-sm);
26
+ color: var(--muted-foreground);
27
+ margin-top: var(--spacing-sm);
28
+ text-align: center;
29
+ }
30
+ }
31
+
32
+ /* Allow figure to wrap tables with overflow */
33
+ figure:has(> table) {
34
+ overflow-x: auto;
35
+ -webkit-overflow-scrolling: touch;
36
+
37
+ & > table {
38
+ margin: 0;
39
+ }
40
+ }
41
+
42
+ /* Picture element */
43
+ picture {
44
+ display: block;
45
+ }
46
+
47
+ /* Video */
48
+ video {
49
+ max-width: 100%;
50
+ height: auto;
51
+ border-radius: var(--radius-lg);
52
+ }
53
+
54
+ /* Audio */
55
+ audio {
56
+ width: 100%;
57
+ }
58
+
59
+ /* Iframe */
60
+ iframe {
61
+ border: var(--border-width) solid var(--border);
62
+ border-radius: var(--radius-lg);
63
+ max-width: 100%;
64
+ }
65
+
66
+ /* SVG */
67
+ svg {
68
+ fill: currentColor;
69
+ }
70
+
71
+ svg:not([width]) {
72
+ width: 1em;
73
+ height: 1em;
74
+ }
75
+
76
+ /* Object and embed */
77
+ object,
78
+ embed {
79
+ max-width: 100%;
80
+ }
81
+
82
+ /* Canvas */
83
+ canvas {
84
+ display: block;
85
+ }
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Typography styles
3
+ * Headings, paragraphs, and inline text elements
4
+ */
5
+
6
+ /* Headings */
7
+ h1, h2, h3, h4, h5, h6 {
8
+ color: var(--foreground);
9
+ font-weight: var(--font-semibold);
10
+ line-height: var(--line-height-sm);
11
+ letter-spacing: -0.025em;
12
+ margin-top: var(--spacing-sm);
13
+ margin-bottom: var(--spacing-sm);
14
+ }
15
+
16
+ h1 {
17
+ font-size: var(--text-4xl);
18
+ font-weight: var(--font-extrabold);
19
+ line-height: 1;
20
+ }
21
+
22
+ h2 {
23
+ font-size: var(--text-3xl);
24
+ }
25
+
26
+ h3 {
27
+ font-size: var(--text-2xl);
28
+ }
29
+
30
+ h4 {
31
+ font-size: var(--text-xl);
32
+ }
33
+
34
+ h5 {
35
+ font-size: var(--text-lg);
36
+ }
37
+
38
+ h6 {
39
+ font-size: var(--text-base);
40
+ }
41
+
42
+ /* Heading groups */
43
+ hgroup {
44
+ margin-bottom: var(--spacing);
45
+
46
+ & > h1, & > h2, & > h3, & > h4, & > h5, & > h6 {
47
+ margin-bottom: var(--spacing-sm);
48
+ }
49
+
50
+ & > p {
51
+ color: var(--muted-foreground);
52
+ margin-bottom: 0;
53
+ }
54
+ }
55
+
56
+ /* Paragraphs */
57
+ p {
58
+ margin-bottom: var(--spacing);
59
+ line-height: var(--line-height-lg);
60
+ }
61
+
62
+ /* Remove margin from last child */
63
+ p:last-child,
64
+ h1:last-child,
65
+ h2:last-child,
66
+ h3:last-child,
67
+ h4:last-child,
68
+ h5:last-child,
69
+ h6:last-child {
70
+ margin-bottom: 0;
71
+ }
72
+
73
+ /* Inline elements */
74
+ strong, b {
75
+ font-weight: var(--font-semibold);
76
+ }
77
+
78
+ em, i {
79
+ font-style: italic;
80
+ }
81
+
82
+ small {
83
+ font-size: var(--text-sm);
84
+ }
85
+
86
+ /* Links */
87
+ a {
88
+ color: var(--primary);
89
+ text-decoration: underline;
90
+ text-underline-offset: 0.2em;
91
+ transition: color var(--transition-default);
92
+
93
+ &:hover {
94
+ color: color-mix(in oklch, var(--primary) 80%, var(--foreground));
95
+ }
96
+
97
+ &:focus-visible {
98
+ outline: var(--outline-width) solid var(--ring);
99
+ outline-offset: var(--outline-offset);
100
+ border-radius: var(--radius-sm);
101
+ }
102
+ }
103
+
104
+ /* Semantic text elements */
105
+ mark {
106
+ background-color: color-mix(in oklch, var(--muted) 40%, transparent);
107
+ color: var(--foreground);
108
+ padding: 0.125em 0.25em;
109
+ border-radius: var(--radius-sm);
110
+ }
111
+
112
+ del {
113
+ text-decoration: line-through;
114
+ color: var(--muted-foreground);
115
+ }
116
+
117
+ ins {
118
+ text-decoration: underline;
119
+ text-decoration-style: wavy;
120
+ text-decoration-color: var(--primary);
121
+ }
122
+
123
+ u {
124
+ text-decoration: underline;
125
+ text-underline-offset: 0.2em;
126
+ }
127
+
128
+ s {
129
+ text-decoration: line-through;
130
+ }
131
+
132
+ abbr[title] {
133
+ text-decoration: underline dotted;
134
+ cursor: help;
135
+ }
136
+
137
+ cite {
138
+ font-style: italic;
139
+ }
140
+
141
+ dfn {
142
+ font-style: italic;
143
+ font-weight: var(--font-medium);
144
+ }
145
+
146
+ sub, sup {
147
+ font-size: 0.75em;
148
+ line-height: 0;
149
+ position: relative;
150
+ vertical-align: baseline;
151
+ }
152
+
153
+ sub {
154
+ bottom: -0.25em;
155
+ }
156
+
157
+ sup {
158
+ top: -0.5em;
159
+ }
160
+
161
+ /* Horizontal rule */
162
+ hr {
163
+ border: none;
164
+ height: var(--border-width);
165
+ background-color: var(--border);
166
+ margin: var(--spacing-lg) 0;
167
+ }
168
+
169
+ /* Blockquote */
170
+ blockquote {
171
+ border-left: 4px solid var(--border);
172
+ padding-left: var(--spacing);
173
+ margin: var(--spacing) 0;
174
+ font-style: italic;
175
+ color: var(--muted-foreground);
176
+
177
+ & > p {
178
+ margin-bottom: var(--spacing-sm);
179
+ }
180
+
181
+ & > footer {
182
+ font-size: var(--text-sm);
183
+ color: var(--muted-foreground);
184
+ font-style: normal;
185
+ }
186
+ }
187
+
188
+ /* Lists */
189
+ ul, ol {
190
+ margin-bottom: var(--spacing);
191
+ padding-left: calc(var(--spacing) * 1.25);
192
+ }
193
+
194
+ ul {
195
+ list-style-type: disc;
196
+ }
197
+
198
+ ol {
199
+ list-style-type: decimal;
200
+ }
201
+
202
+ li {
203
+ line-height: var(--line-height-lg);
204
+ }
205
+
206
+ /* Nested lists */
207
+ ul ul, ol ol, ul ol, ol ul {
208
+ margin-top: var(--spacing-xs);
209
+ margin-bottom: 0;
210
+ }
211
+
212
+ /* Definition lists */
213
+ dl {
214
+ margin-bottom: var(--spacing);
215
+ }
216
+
217
+ dt {
218
+ font-weight: var(--font-semibold);
219
+ margin-bottom: var(--spacing-xs);
220
+ }
221
+
222
+ dd {
223
+ margin-left: var(--spacing);
224
+ margin-bottom: var(--spacing-md);
225
+ color: var(--muted-foreground);
226
+ }
227
+
228
+ dd:last-child {
229
+ margin-bottom: 0;
230
+ }
231
+
232
+ /* Address */
233
+ address {
234
+ font-style: normal;
235
+ margin-bottom: var(--spacing);
236
+ }
237
+
238
+ /* Time */
239
+ time {
240
+ font-variant-numeric: tabular-nums;
241
+ }
package/src/daft.css ADDED
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Daft CSS v1.0.0
3
+ * A semantic-first, utility-second CSS framework
4
+ * https://github.com/pietz/daft-css
5
+ */
6
+
7
+ /* Define layer order for specificity management */
8
+ @layer tokens, reset, base, layout, content, forms, components, utilities;
9
+
10
+ /* Design tokens (first in output) */
11
+ @import "base/variables.css" layer(tokens);
12
+
13
+ /* Base */
14
+ @import "base/reset.css" layer(reset);
15
+ @import "base/root.css" layer(base);
16
+ @import "base/document.css" layer(base);
17
+
18
+ /* Content */
19
+ @import "content/typography.css" layer(content);
20
+ @import "content/embedded.css" layer(content);
21
+ @import "content/code.css" layer(content);
22
+
23
+ /* Layout */
24
+ @import "layout/container.css" layer(layout);
25
+ @import "layout/landmarks.css" layer(layout);
26
+ @import "layout/grid.css" layer(layout);
27
+ @import "layout/overflow.css" layer(layout);
28
+
29
+ /* Forms */
30
+ @import "forms/input.css" layer(forms);
31
+ @import "forms/checkbox.css" layer(forms);
32
+ @import "forms/range.css" layer(forms);
33
+ @import "forms/validation.css" layer(forms);
34
+
35
+ /* Components */
36
+ @import "components/button.css" layer(components);
37
+ @import "components/table.css" layer(components);
38
+ @import "components/card.css" layer(components);
39
+ @import "components/accordion.css" layer(components);
40
+ @import "components/dropdown.css" layer(components);
41
+ @import "components/modal.css" layer(components);
42
+ @import "components/nav.css" layer(components);
43
+ @import "components/progress.css" layer(components);
44
+ @import "components/loading.css" layer(components);
45
+ @import "components/tooltip.css" layer(components);
46
+ @import "components/group.css" layer(components);
47
+ @import "components/badge.css" layer(components);
48
+ @import "layout/sidebar.css" layer(components);
49
+
50
+ /* Utilities */
51
+ @import "utilities/helpers.css" layer(utilities);