@echodial/deck 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1327 -0
  3. package/bin/deck.mjs +219 -0
  4. package/build.mjs +338 -0
  5. package/dist/api-buckets.json +10486 -0
  6. package/dist/api.json +57896 -0
  7. package/dist/brand/deck-apple-touch-icon.png +0 -0
  8. package/dist/brand/deck-logo-dark.svg +1 -0
  9. package/dist/brand/deck-logo-light.svg +1 -0
  10. package/dist/brand/deck-logo-stacked.svg +1 -0
  11. package/dist/brand/deck-logo.svg +1 -0
  12. package/dist/brand/deck-mark.svg +7 -0
  13. package/dist/brand/deck-og.png +0 -0
  14. package/dist/collisions.json +223 -0
  15. package/dist/deck-adapters.js +482 -0
  16. package/dist/deck-adapters.min.js +23 -0
  17. package/dist/deck-extras.js +823 -0
  18. package/dist/deck-extras.min.js +5 -0
  19. package/dist/deck-icons.svg +184 -0
  20. package/dist/deck.bundle.js +2638 -0
  21. package/dist/deck.bundle.min.js +86 -0
  22. package/dist/deck.css +7904 -0
  23. package/dist/deck.esm.js +2644 -0
  24. package/dist/deck.js +1331 -0
  25. package/dist/deck.min.css +32 -0
  26. package/dist/deck.min.js +60 -0
  27. package/dist/layers/anchor.css +192 -0
  28. package/dist/layers/buttons.css +210 -0
  29. package/dist/layers/charts.css +337 -0
  30. package/dist/layers/combobox.css +248 -0
  31. package/dist/layers/components.css +868 -0
  32. package/dist/layers/container.css +199 -0
  33. package/dist/layers/datagrid.css +335 -0
  34. package/dist/layers/datepicker.css +305 -0
  35. package/dist/layers/forms.css +401 -0
  36. package/dist/layers/gradients.css +302 -0
  37. package/dist/layers/inputs.css +522 -0
  38. package/dist/layers/layers.css +87 -0
  39. package/dist/layers/layout.css +235 -0
  40. package/dist/layers/logical.css +226 -0
  41. package/dist/layers/media.css +400 -0
  42. package/dist/layers/mobile.css +245 -0
  43. package/dist/layers/motion.css +379 -0
  44. package/dist/layers/nav.css +771 -0
  45. package/dist/layers/perf.css +234 -0
  46. package/dist/layers/print.css +198 -0
  47. package/dist/layers/reset.css +103 -0
  48. package/dist/layers/space3d.css +280 -0
  49. package/dist/layers/toasts.css +201 -0
  50. package/dist/layers/tokens.css +229 -0
  51. package/dist/layers/type.css +114 -0
  52. package/dist/layers/utilities.css +241 -0
  53. package/dist/sizes.json +52 -0
  54. package/dist/usage.json +6340 -0
  55. package/package.json +94 -0
  56. package/src/00-layers.css +87 -0
  57. package/src/01-tokens.css +229 -0
  58. package/src/02-reset.css +103 -0
  59. package/src/03-type.css +114 -0
  60. package/src/04-layout.css +235 -0
  61. package/src/05-buttons.css +210 -0
  62. package/src/06-forms.css +401 -0
  63. package/src/07-components.css +868 -0
  64. package/src/08-mobile.css +245 -0
  65. package/src/09-utilities.css +241 -0
  66. package/src/10-datepicker.css +305 -0
  67. package/src/11-combobox.css +248 -0
  68. package/src/12-datagrid.css +335 -0
  69. package/src/13-toasts.css +201 -0
  70. package/src/14-charts.css +337 -0
  71. package/src/16-motion.css +379 -0
  72. package/src/18-container.css +199 -0
  73. package/src/19-logical.css +226 -0
  74. package/src/20-gradients.css +302 -0
  75. package/src/21-space3d.css +280 -0
  76. package/src/22-nav.css +771 -0
  77. package/src/23-inputs.css +522 -0
  78. package/src/24-media.css +400 -0
  79. package/src/25-anchor.css +192 -0
  80. package/src/26-perf.css +234 -0
  81. package/src/99-print.css +198 -0
  82. package/src/brand/deck-apple-touch-icon.png +0 -0
  83. package/src/brand/deck-logo-dark.svg +1 -0
  84. package/src/brand/deck-logo-light.svg +1 -0
  85. package/src/brand/deck-logo-stacked.svg +1 -0
  86. package/src/brand/deck-logo.svg +1 -0
  87. package/src/brand/deck-mark.svg +7 -0
  88. package/src/brand/deck-og.png +0 -0
  89. package/src/brand/sources.json +7 -0
  90. package/src/deck-icons.svg +184 -0
  91. package/src/js/deck-adapters.js +482 -0
  92. package/src/js/deck-extras.js +823 -0
  93. package/src/js/deck.js +1331 -0
@@ -0,0 +1,229 @@
1
+ /* ==========================================================================
2
+ Deck — 01 Tokens
3
+ Everything is a custom property. Change a hue, retheme the whole app.
4
+ No build step. No purge. No config file.
5
+ ========================================================================== */
6
+
7
+ /* Layer order is declared in 00-layers.css. */
8
+
9
+ @layer deck.tokens {
10
+
11
+ :root {
12
+ color-scheme: light dark;
13
+
14
+ /* --- Hue control -------------------------------------------------------
15
+ These six numbers are the whole palette. Set --hue-brand to 12 and the
16
+ framework becomes rust. Set it to 265 and it becomes violet. Buttons,
17
+ focus rings, links, charts, and shadows all follow.
18
+ ---------------------------------------------------------------------- */
19
+ --hue-brand: 196; /* harbor teal */
20
+ --hue-accent: 42; /* signal amber */
21
+ --hue-good: 152; /* starboard */
22
+ --hue-warn: 74; /* caution */
23
+ --hue-bad: 24; /* port light */
24
+ --hue-neutral: 232; /* chart ink */
25
+
26
+ --chroma-brand: .118;
27
+ --chroma-accent: .142;
28
+ --chroma-status: .132;
29
+ --chroma-neutral: .012; /* neutrals carry a trace of the ink hue */
30
+
31
+ /* --- Brand ramp -------------------------------------------------------- */
32
+ --brand-50: oklch(97.4% calc(var(--chroma-brand) * .16) var(--hue-brand));
33
+ --brand-100: oklch(94.2% calc(var(--chroma-brand) * .30) var(--hue-brand));
34
+ --brand-200: oklch(88.6% calc(var(--chroma-brand) * .48) var(--hue-brand));
35
+ --brand-300: oklch(80.4% calc(var(--chroma-brand) * .70) var(--hue-brand));
36
+ --brand-400: oklch(70.2% calc(var(--chroma-brand) * .90) var(--hue-brand));
37
+ --brand-500: oklch(60.8% var(--chroma-brand) var(--hue-brand));
38
+ --brand-600: oklch(51.6% var(--chroma-brand) var(--hue-brand));
39
+ --brand-700: oklch(43.4% calc(var(--chroma-brand) * .92) var(--hue-brand));
40
+ --brand-800: oklch(35.6% calc(var(--chroma-brand) * .78) var(--hue-brand));
41
+ --brand-900: oklch(28.2% calc(var(--chroma-brand) * .62) var(--hue-brand));
42
+ --brand-950: oklch(20.4% calc(var(--chroma-brand) * .46) var(--hue-brand));
43
+
44
+ /* --- Neutral ramp ------------------------------------------------------ */
45
+ --ink-0: oklch(100% 0 0);
46
+ --ink-25: oklch(99.1% calc(var(--chroma-neutral) * .5) var(--hue-neutral));
47
+ --ink-50: oklch(97.8% var(--chroma-neutral) var(--hue-neutral));
48
+ --ink-100: oklch(95.4% calc(var(--chroma-neutral) * 1.4) var(--hue-neutral));
49
+ --ink-200: oklch(91.2% calc(var(--chroma-neutral) * 1.8) var(--hue-neutral));
50
+ --ink-300: oklch(84.6% calc(var(--chroma-neutral) * 2.2) var(--hue-neutral));
51
+ --ink-400: oklch(70.8% calc(var(--chroma-neutral) * 2.6) var(--hue-neutral));
52
+ --ink-500: oklch(58.4% calc(var(--chroma-neutral) * 2.8) var(--hue-neutral));
53
+ --ink-600: oklch(47.6% calc(var(--chroma-neutral) * 2.8) var(--hue-neutral));
54
+ --ink-700: oklch(38.2% calc(var(--chroma-neutral) * 2.6) var(--hue-neutral));
55
+ --ink-800: oklch(29.4% calc(var(--chroma-neutral) * 2.4) var(--hue-neutral));
56
+ --ink-900: oklch(22.6% calc(var(--chroma-neutral) * 2.2) var(--hue-neutral));
57
+ --ink-950: oklch(16.2% calc(var(--chroma-neutral) * 2.0) var(--hue-neutral));
58
+ --ink-1000: oklch(11.4% calc(var(--chroma-neutral) * 1.8) var(--hue-neutral));
59
+
60
+ /* --- Status ------------------------------------------------------------ */
61
+ --good-100: oklch(94% calc(var(--chroma-status) * .3) var(--hue-good));
62
+ --good-500: oklch(62% var(--chroma-status) var(--hue-good));
63
+ --good-600: oklch(52% var(--chroma-status) var(--hue-good));
64
+ --good-700: oklch(44% var(--chroma-status) var(--hue-good));
65
+ --warn-100: oklch(95% calc(var(--chroma-status) * .32) var(--hue-warn));
66
+ --warn-500: oklch(76% var(--chroma-status) var(--hue-warn));
67
+ --warn-700: oklch(50% var(--chroma-status) var(--hue-warn));
68
+ --bad-100: oklch(94.5% calc(var(--chroma-status) * .3) var(--hue-bad));
69
+ --bad-500: oklch(58% calc(var(--chroma-status) * 1.25) var(--hue-bad));
70
+ --bad-600: oklch(52% calc(var(--chroma-status) * 1.25) var(--hue-bad));
71
+ --bad-700: oklch(44% calc(var(--chroma-status) * 1.1) var(--hue-bad));
72
+ --accent-100: oklch(95% calc(var(--chroma-accent) * .3) var(--hue-accent));
73
+ --accent-500: oklch(74% var(--chroma-accent) var(--hue-accent));
74
+ --accent-700: oklch(52% calc(var(--chroma-accent) * .9) var(--hue-accent));
75
+
76
+ /* --- Semantic surfaces (auto light/dark) -------------------------------- */
77
+ --bg: light-dark(var(--ink-50), var(--ink-1000));
78
+ --bg-sunken: light-dark(var(--ink-100), oklch(8.6% .012 var(--hue-neutral)));
79
+ --surface: light-dark(var(--ink-0), var(--ink-950));
80
+ --surface-2: light-dark(var(--ink-25), var(--ink-900));
81
+ --surface-hover:light-dark(var(--ink-50), var(--ink-900));
82
+ --line: light-dark(var(--ink-200), oklch(28% .016 var(--hue-neutral)));
83
+ --line-strong: light-dark(var(--ink-300), oklch(36% .018 var(--hue-neutral)));
84
+
85
+ --text: light-dark(var(--ink-900), var(--ink-100));
86
+ --text-muted: light-dark(var(--ink-600), var(--ink-400));
87
+ --text-faint: light-dark(var(--ink-500), var(--ink-500));
88
+ /* --- Ink on a coloured surface ----------------------------------------
89
+ One per saturated surface. These are the static values: they are correct
90
+ for the shipped hues but they are guesses about any hue you set, which
91
+ is what the @supports block below fixes.
92
+ -------------------------------------------------------------------- */
93
+ --text-on-brand: oklch(99% .01 var(--hue-brand));
94
+ --text-on-accent: oklch(24% .06 var(--hue-accent));
95
+ --text-on-good: oklch(99% .01 var(--hue-good));
96
+ --text-on-warn: oklch(24% .06 var(--hue-warn));
97
+ --text-on-bad: oklch(99% .01 var(--hue-bad));
98
+
99
+ --brand: light-dark(var(--brand-600), var(--brand-400));
100
+ --brand-hover: light-dark(var(--brand-700), var(--brand-300));
101
+ --brand-soft: light-dark(var(--brand-50), oklch(26% .05 var(--hue-brand)));
102
+ --brand-soft-text: light-dark(var(--brand-800), var(--brand-200));
103
+
104
+ --focus: light-dark(var(--brand-500), var(--brand-300));
105
+
106
+ /* --- Space: 4px base, plus fluid steps for page rhythm ------------------ */
107
+ --space-0: 0;
108
+ --space-px: 1px;
109
+ --space-1: .25rem;
110
+ --space-2: .5rem;
111
+ --space-3: .75rem;
112
+ --space-4: 1rem;
113
+ --space-5: 1.25rem;
114
+ --space-6: 1.5rem;
115
+ --space-8: 2rem;
116
+ --space-10: 2.5rem;
117
+ --space-12: 3rem;
118
+ --space-16: 4rem;
119
+ --space-20: 5rem;
120
+ --space-24: 6rem;
121
+ --space-section: clamp(2.5rem, 1.4rem + 5.5vw, 6rem);
122
+ --space-gutter: clamp(1rem, .55rem + 2.2vw, 2rem);
123
+
124
+ /* --- Radius: intentionally not one value ------------------------------- */
125
+ --r-xs: 4px; /* chips, tags, kbd */
126
+ --r-sm: 7px; /* inputs, buttons */
127
+ --r-md: 12px; /* cards, menus */
128
+ --r-lg: 18px; /* sheets, modals, hero panels */
129
+ --r-full: 999px;
130
+
131
+ /* --- Elevation: tinted with the ink hue, never flat black -------------- */
132
+ --shadow-color: var(--hue-neutral);
133
+ --shadow-1: 0 1px 2px oklch(20% .03 var(--shadow-color) / .06),
134
+ 0 1px 1px oklch(20% .03 var(--shadow-color) / .04);
135
+ --shadow-2: 0 2px 4px oklch(20% .03 var(--shadow-color) / .05),
136
+ 0 4px 12px oklch(20% .03 var(--shadow-color) / .07);
137
+ --shadow-3: 0 4px 8px oklch(20% .03 var(--shadow-color) / .06),
138
+ 0 12px 28px oklch(20% .03 var(--shadow-color) / .10);
139
+ --shadow-4: 0 8px 16px oklch(20% .03 var(--shadow-color) / .08),
140
+ 0 24px 56px oklch(20% .03 var(--shadow-color) / .14);
141
+ --shadow-inset: inset 0 1px 0 oklch(100% 0 0 / .6);
142
+
143
+ /* A legible floor for text over a photo. Eased rather than a flat wash: a
144
+ 50% black overlay dulls the whole image, while this only darkens where
145
+ the text actually sits. Shared by .g-scrim and .carousel-caption so the
146
+ two cannot drift apart. */
147
+ --scrim: linear-gradient(to top,
148
+ oklch(12% .02 var(--hue-neutral) / .82) 0%,
149
+ oklch(12% .02 var(--hue-neutral) / .62) 22%,
150
+ oklch(12% .02 var(--hue-neutral) / .28) 48%,
151
+ transparent 78%);
152
+
153
+ /* --- Type -------------------------------------------------------------- */
154
+ --font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text",
155
+ "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
156
+ --font-mono: ui-monospace, "SF Mono", "Cascadia Mono", "Roboto Mono",
157
+ Menlo, Consolas, monospace;
158
+ --font-display: var(--font-sans);
159
+
160
+ --text-2xs: .6875rem;
161
+ --text-xs: .75rem;
162
+ --text-sm: .8125rem;
163
+ --text-base: .9375rem;
164
+ --text-md: 1.0625rem;
165
+ --text-lg: clamp(1.125rem, 1.06rem + .32vw, 1.3125rem);
166
+ --text-xl: clamp(1.3125rem, 1.19rem + .62vw, 1.625rem);
167
+ --text-2xl: clamp(1.5625rem, 1.33rem + 1.16vw, 2.125rem);
168
+ --text-3xl: clamp(1.875rem, 1.44rem + 2.16vw, 2.875rem);
169
+ --text-4xl: clamp(2.25rem, 1.5rem + 3.75vw, 3.75rem);
170
+
171
+ --leading-tight: 1.12;
172
+ --leading-snug: 1.3;
173
+ --leading-normal: 1.55;
174
+ --leading-loose: 1.72;
175
+ --measure: 68ch;
176
+
177
+ /* --- Motion ------------------------------------------------------------ */
178
+ --ease-out: cubic-bezier(.22, 1, .36, 1);
179
+ --ease-in-out: cubic-bezier(.65, 0, .35, 1);
180
+ --ease-spring: linear(0, .18 6%, .53 14%, .89 24%, 1.04 32%, 1.06 40%, 1);
181
+ --dur-1: 110ms;
182
+ --dur-2: 190ms;
183
+ --dur-3: 300ms;
184
+
185
+ /* --- Controls ---------------------------------------------------------- */
186
+ --tap: 44px; /* minimum touch target, everywhere */
187
+ --control-h-sm: 34px;
188
+ --control-h: 42px;
189
+ --control-h-lg: 50px;
190
+ --ring: 0 0 0 3px light-dark(oklch(from var(--focus) l c h / .32),
191
+ oklch(from var(--focus) l c h / .42));
192
+
193
+ --z-sticky: 100;
194
+ --z-nav: 200;
195
+ --z-sheet: 300;
196
+ --z-modal: 400;
197
+ --z-toast: 500;
198
+ }
199
+
200
+ /* contrast-color() resolves against the colour as it actually computes, so
201
+ these follow --hue-brand and friends wherever they are dragged. It returns
202
+ only black or white and it aims at AA (4.5:1), which is why every surface
203
+ that carries text is kept out of the 55-65% lightness band -- see
204
+ --good-600 and --bad-600 above. Baseline Newly Available, so the static
205
+ values in :root stand in where it is missing. */
206
+ @supports (color: contrast-color(red)) {
207
+ :root {
208
+ --text-on-brand: contrast-color(var(--brand-600));
209
+ --text-on-accent: contrast-color(var(--accent-500));
210
+ --text-on-good: contrast-color(var(--good-600));
211
+ --text-on-warn: contrast-color(var(--warn-500));
212
+ --text-on-bad: contrast-color(var(--bad-600));
213
+ }
214
+ }
215
+
216
+ /* Explicit theme override beats the OS setting */
217
+ [data-theme="light"] { color-scheme: light; }
218
+ [data-theme="dark"] { color-scheme: dark; }
219
+
220
+ /* Dark mode wants slightly less shadow and slightly more border */
221
+ @media (prefers-color-scheme: dark) {
222
+ :root {
223
+ --shadow-2: 0 2px 4px oklch(0% 0 0 / .3), 0 4px 12px oklch(0% 0 0 / .34);
224
+ --shadow-3: 0 4px 10px oklch(0% 0 0 / .34), 0 14px 30px oklch(0% 0 0 / .4);
225
+ --shadow-4: 0 10px 20px oklch(0% 0 0 / .4), 0 28px 60px oklch(0% 0 0 / .5);
226
+ --shadow-inset: inset 0 1px 0 oklch(100% 0 0 / .06);
227
+ }
228
+ }
229
+ }
@@ -0,0 +1,114 @@
1
+ /* ==========================================================================
2
+ Deck — 03 Type
3
+ ========================================================================== */
4
+
5
+ @layer deck.type {
6
+
7
+ h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
8
+ font-family: var(--font-display);
9
+ font-weight: 640;
10
+ line-height: var(--leading-tight);
11
+ letter-spacing: -.021em;
12
+ color: var(--text);
13
+ }
14
+
15
+ h1, .h1 { font-size: var(--text-3xl); letter-spacing: -.031em; }
16
+ h2, .h2 { font-size: var(--text-2xl); letter-spacing: -.026em; }
17
+ h3, .h3 { font-size: var(--text-xl); }
18
+ h4, .h4 { font-size: var(--text-lg); letter-spacing: -.014em; }
19
+ h5, .h5 { font-size: var(--text-md); letter-spacing: -.008em; font-weight: 620; }
20
+ h6, .h6 { font-size: var(--text-base); letter-spacing: 0; font-weight: 640; }
21
+
22
+ .display {
23
+ font-size: var(--text-4xl);
24
+ font-weight: 700;
25
+ line-height: 1.04;
26
+ letter-spacing: -.036em;
27
+ }
28
+
29
+ .lede {
30
+ font-size: var(--text-md);
31
+ line-height: var(--leading-loose);
32
+ color: var(--text-muted);
33
+ max-inline-size: var(--measure);
34
+ }
35
+
36
+ small { font-size: var(--text-sm); }
37
+
38
+ strong, b { font-weight: 640; }
39
+
40
+ a {
41
+ color: var(--brand);
42
+ text-decoration-thickness: 1px;
43
+ text-underline-offset: .18em;
44
+ text-decoration-color: color-mix(in oklab, currentColor 40%, transparent);
45
+ transition: color var(--dur-1) var(--ease-out),
46
+ text-decoration-color var(--dur-1) var(--ease-out);
47
+ }
48
+ a:hover { color: var(--brand-hover); text-decoration-color: currentColor; }
49
+
50
+ .link-quiet { color: var(--text); text-decoration: none; }
51
+ .link-quiet:hover { color: var(--brand); text-decoration: underline; }
52
+
53
+ code, kbd, samp, pre { font-family: var(--font-mono); font-size: .92em; }
54
+
55
+ :not(pre) > code {
56
+ background: var(--surface-2);
57
+ border: 1px solid var(--line);
58
+ border-radius: var(--r-xs);
59
+ padding: .12em .38em;
60
+ color: light-dark(var(--brand-800), var(--brand-200));
61
+ }
62
+
63
+ pre {
64
+ background: var(--ink-950);
65
+ color: var(--ink-100);
66
+ padding: var(--space-4);
67
+ border-radius: var(--r-md);
68
+ overflow-x: auto;
69
+ line-height: 1.6;
70
+ font-size: var(--text-sm);
71
+ -webkit-overflow-scrolling: touch;
72
+ }
73
+ pre code { background: none; border: 0; padding: 0; color: inherit; }
74
+
75
+ kbd {
76
+ display: inline-block;
77
+ background: var(--surface);
78
+ border: 1px solid var(--line-strong);
79
+ border-block-end-width: 2px;
80
+ border-radius: var(--r-xs);
81
+ padding: .1em .42em;
82
+ font-size: var(--text-xs);
83
+ line-height: 1.5;
84
+ color: var(--text-muted);
85
+ }
86
+
87
+ blockquote {
88
+ border-inline-start: 3px solid var(--brand-300);
89
+ padding-inline-start: var(--space-4);
90
+ color: var(--text-muted);
91
+ font-size: var(--text-md);
92
+ line-height: var(--leading-loose);
93
+ }
94
+
95
+ mark {
96
+ background: var(--accent-100);
97
+ color: light-dark(var(--ink-900), var(--ink-900));
98
+ padding: .05em .2em;
99
+ border-radius: var(--r-xs);
100
+ }
101
+
102
+ abbr[title] { text-decoration: underline dotted; cursor: help; }
103
+
104
+ /* Prose: for anything that came out of a WYSIWYG or markdown */
105
+ .prose { max-inline-size: var(--measure); }
106
+ .prose > * + * { margin-block-start: var(--space-4); }
107
+ .prose > * + :is(h2, h3, h4) { margin-block-start: var(--space-8); }
108
+ .prose :is(ul, ol) { padding-inline-start: var(--space-6); display: grid; gap: var(--space-2); }
109
+ .prose ul { list-style: disc; }
110
+ .prose ol { list-style: decimal; }
111
+ .prose li::marker { color: var(--text-faint); }
112
+ .prose img { border-radius: var(--r-md); }
113
+ .prose hr { margin-block: var(--space-8); }
114
+ }
@@ -0,0 +1,241 @@
1
+ /* ==========================================================================
2
+ Deck — 09 Utilities
3
+ A short list on purpose. Utilities are for the last 10 percent of a layout,
4
+ not for rebuilding a button out of fourteen class names.
5
+ ========================================================================== */
6
+
7
+ @layer deck.utilities {
8
+
9
+ /* --- Display ------------------------------------------------------------ */
10
+ .hidden { display: none; }
11
+ .block { display: block; }
12
+ .inline-block { display: inline-block; }
13
+ .flex { display: flex; }
14
+ .inline-flex { display: inline-flex; }
15
+ .contents { display: contents; }
16
+
17
+ /* --- Flex and grid ------------------------------------------------------ */
18
+ .flex-row { flex-direction: row; }
19
+ .flex-col { flex-direction: column; }
20
+ .wrap { flex-wrap: wrap; }
21
+ .nowrap { flex-wrap: nowrap; white-space: nowrap; }
22
+ .items-start { align-items: flex-start; }
23
+ .items-center { align-items: center; }
24
+ .items-end { align-items: flex-end; }
25
+ .items-stretch { align-items: stretch; }
26
+ .items-baseline { align-items: baseline; }
27
+ .justify-start { justify-content: flex-start; }
28
+ .justify-center { justify-content: center; }
29
+ .justify-end { justify-content: flex-end; }
30
+ .justify-between { justify-content: space-between; }
31
+ .place-center { place-items: center; }
32
+ .grow { flex: 1 1 auto; min-inline-size: 0; }
33
+ .shrink-0 { flex: 0 0 auto; }
34
+ /* Pushes this element and everything after it to the far end of a flex
35
+ row. The one-class replacement for a spacer div. */
36
+ .push { margin-inline-start: auto; }
37
+
38
+ .gap-0 { gap: 0; }
39
+ .gap-1 { gap: var(--space-1); }
40
+ .gap-2 { gap: var(--space-2); }
41
+ .gap-3 { gap: var(--space-3); }
42
+ .gap-4 { gap: var(--space-4); }
43
+ .gap-6 { gap: var(--space-6); }
44
+ .gap-8 { gap: var(--space-8); }
45
+
46
+ /* --- Spacing ------------------------------------------------------------ */
47
+ /* The scale is 0 1 2 3 4 6 8, declared in 04-layout.css. Every family below
48
+ implements all seven, so a step that exists anywhere exists everywhere. */
49
+ .p-0 { padding: 0; } .p-1 { padding: var(--space-1); }
50
+ .p-2 { padding: var(--space-2); } .p-3 { padding: var(--space-3); }
51
+ .p-4 { padding: var(--space-4); } .p-6 { padding: var(--space-6); }
52
+ .p-8 { padding: var(--space-8); }
53
+
54
+ .px-0 { padding-inline: 0; } .px-1 { padding-inline: var(--space-1); }
55
+ .px-2 { padding-inline: var(--space-2); } .px-3 { padding-inline: var(--space-3); }
56
+ .px-4 { padding-inline: var(--space-4); } .px-6 { padding-inline: var(--space-6); }
57
+ .px-8 { padding-inline: var(--space-8); }
58
+
59
+ .py-0 { padding-block: 0; } .py-1 { padding-block: var(--space-1); }
60
+ .py-2 { padding-block: var(--space-2); } .py-3 { padding-block: var(--space-3); }
61
+ .py-4 { padding-block: var(--space-4); } .py-6 { padding-block: var(--space-6); }
62
+ .py-8 { padding-block: var(--space-8); }
63
+
64
+ .m-0 { margin: 0; }
65
+ .mt-0 { margin-block-start: 0; } .mt-1 { margin-block-start: var(--space-1); }
66
+ .mt-2 { margin-block-start: var(--space-2); } .mt-3 { margin-block-start: var(--space-3); }
67
+ .mt-4 { margin-block-start: var(--space-4); } .mt-6 { margin-block-start: var(--space-6); }
68
+ .mt-8 { margin-block-start: var(--space-8); }
69
+ .mb-0 { margin-block-end: 0; } .mb-1 { margin-block-end: var(--space-1); }
70
+ .mb-2 { margin-block-end: var(--space-2); } .mb-3 { margin-block-end: var(--space-3); }
71
+ .mb-4 { margin-block-end: var(--space-4); } .mb-6 { margin-block-end: var(--space-6); }
72
+ .mb-8 { margin-block-end: var(--space-8); }
73
+ .mx-auto { margin-inline: auto; }
74
+
75
+ /* --- Sizing ------------------------------------------------------------- */
76
+ .w-full { inline-size: 100%; }
77
+ .w-auto { inline-size: auto; }
78
+ .h-full { block-size: 100%; }
79
+ .min-h-screen { min-block-size: 100dvh; }
80
+ .max-w-prose { max-inline-size: var(--measure); }
81
+ .max-w-sm { max-inline-size: 24rem; }
82
+ .max-w-md { max-inline-size: 34rem; }
83
+ .max-w-lg { max-inline-size: 48rem; }
84
+ .square { aspect-ratio: 1; }
85
+
86
+ /* --- Type --------------------------------------------------------------- */
87
+ .text-2xs { font-size: var(--text-2xs); }
88
+ .text-xs { font-size: var(--text-xs); }
89
+ /* One step down the type scale, for secondary text and dense rows. */
90
+ .text-sm { font-size: var(--text-sm); }
91
+ .text-base { font-size: var(--text-base); }
92
+ .text-md { font-size: var(--text-md); }
93
+ .text-lg { font-size: var(--text-lg); }
94
+ .text-xl { font-size: var(--text-xl); }
95
+ .text-2xl { font-size: var(--text-2xl); }
96
+
97
+ .fw-normal { font-weight: 400; }
98
+ .fw-medium { font-weight: 540; }
99
+ /* Semibold. The weight for a label or a name that needs to lead without
100
+ becoming a heading. */
101
+ .fw-semi { font-weight: 620; }
102
+ .fw-bold { font-weight: 700; }
103
+
104
+ .text-start { text-align: start; }
105
+ .text-center { text-align: center; }
106
+ .text-end { text-align: end; }
107
+
108
+ /* Secondary text colour. Still meets contrast against every surface Deck
109
+ defines, so it is safe for body copy rather than decoration only. */
110
+ .text-muted { color: var(--text-muted); }
111
+ .text-faint { color: var(--text-faint); }
112
+ .text-brand { color: var(--brand); }
113
+ .text-good { color: var(--good-700); }
114
+ .text-warn { color: var(--warn-700); }
115
+ .text-bad { color: var(--bad-700); }
116
+ .text-inherit { color: inherit; }
117
+
118
+ /* Tabular figures, so numbers line up in a column and do not jitter when
119
+ they change. */
120
+ .nums { font-variant-numeric: tabular-nums; }
121
+ .mono { font-family: var(--font-mono); }
122
+ .uppercase { text-transform: uppercase; letter-spacing: .04em; }
123
+ .capitalize { text-transform: capitalize; }
124
+ .no-underline { text-decoration: none; }
125
+
126
+ .truncate {
127
+ overflow: hidden;
128
+ text-overflow: ellipsis;
129
+ white-space: nowrap;
130
+ min-inline-size: 0;
131
+ }
132
+ .clamp-2, .clamp-3 {
133
+ display: -webkit-box;
134
+ -webkit-box-orient: vertical;
135
+ overflow: hidden;
136
+ }
137
+ .clamp-2 { -webkit-line-clamp: 2; line-clamp: 2; }
138
+ .clamp-3 { -webkit-line-clamp: 3; line-clamp: 3; }
139
+
140
+ /* --- Surfaces ----------------------------------------------------------- */
141
+ .bg-surface { background: var(--surface); }
142
+ .bg-sunken { background: var(--bg-sunken); }
143
+ .bg-brand { background: var(--brand-600); color: var(--text-on-brand); }
144
+ .bg-soft { background: var(--brand-soft); color: var(--brand-soft-text); }
145
+ .bg-none { background: none; }
146
+
147
+ .border { border: 1px solid var(--line); }
148
+ .border-t { border-block-start: 1px solid var(--line); }
149
+ .border-b { border-block-end: 1px solid var(--line); }
150
+ .border-brand { border-color: var(--brand-400); }
151
+ .border-0 { border: 0; }
152
+
153
+ .r-xs { border-radius: var(--r-xs); }
154
+ .r-sm { border-radius: var(--r-sm); }
155
+ .r-md { border-radius: var(--r-md); }
156
+ .r-lg { border-radius: var(--r-lg); }
157
+ .r-full { border-radius: var(--r-full); }
158
+
159
+ .shadow-0 { box-shadow: none; }
160
+ .shadow-1 { box-shadow: var(--shadow-1); }
161
+ .shadow-2 { box-shadow: var(--shadow-2); }
162
+ .shadow-3 { box-shadow: var(--shadow-3); }
163
+ .shadow-4 { box-shadow: var(--shadow-4); }
164
+
165
+ /* --- Position and overflow ---------------------------------------------- */
166
+ .relative { position: relative; }
167
+ .absolute { position: absolute; }
168
+ .fixed { position: fixed; }
169
+ .sticky { position: sticky; }
170
+ .inset-0 { inset: 0; }
171
+ .z-1 { z-index: 1; }
172
+ .overflow-hidden { overflow: hidden; }
173
+ .overflow-auto { overflow: auto; }
174
+ .overflow-clip { overflow: clip; }
175
+
176
+ .opacity-60 { opacity: .6; }
177
+ .pointer-none { pointer-events: none; }
178
+ .no-select { user-select: none; }
179
+ .cursor-pointer { cursor: pointer; }
180
+
181
+ /* --- Accessibility ------------------------------------------------------ */
182
+ .sr-only {
183
+ position: absolute;
184
+ inline-size: 1px;
185
+ block-size: 1px;
186
+ padding: 0;
187
+ margin: -1px;
188
+ overflow: hidden;
189
+ clip-path: inset(50%);
190
+ white-space: nowrap;
191
+ border: 0;
192
+ }
193
+ .skip-link {
194
+ position: absolute;
195
+ inset-block-start: -100%;
196
+ inset-inline-start: var(--space-4);
197
+ z-index: var(--z-toast);
198
+ background: var(--brand-600);
199
+ color: var(--text-on-brand);
200
+ padding: var(--space-3) var(--space-4);
201
+ border-radius: var(--r-sm);
202
+ }
203
+ .skip-link:focus { inset-block-start: var(--space-4); }
204
+
205
+ /* --- Responsive variants (mobile first: these turn ON at the breakpoint) - */
206
+ @media (min-width: 40rem) {
207
+ .sm\:hidden { display: none; }
208
+ .sm\:block { display: block; }
209
+ .sm\:flex { display: flex; }
210
+ .sm\:row { flex-direction: row; }
211
+ .sm\:w-auto { inline-size: auto; }
212
+ .sm\:text-start { text-align: start; }
213
+ }
214
+ @media (min-width: 48rem) {
215
+ .md\:hidden { display: none; }
216
+ .md\:block { display: block; }
217
+ .md\:flex { display: flex; }
218
+ .md\:grid-d { display: grid; }
219
+ .md\:row { flex-direction: row; }
220
+ .md\:col { flex-direction: column; }
221
+ .md\:items-center { align-items: center; }
222
+ .md\:justify-between { justify-content: space-between; }
223
+ .md\:w-auto { inline-size: auto; }
224
+ .md\:text-center { text-align: center; }
225
+ .md\:p-8 { padding: var(--space-8); }
226
+ .md\:gap-6 { gap: var(--space-6); }
227
+ }
228
+ @media (min-width: 64rem) {
229
+ .lg\:hidden { display: none; }
230
+ .lg\:block { display: block; }
231
+ .lg\:flex { display: flex; }
232
+ .lg\:grid-d { display: grid; }
233
+ .lg\:row { flex-direction: row; }
234
+ .lg\:gap-8 { gap: var(--space-8); }
235
+ }
236
+
237
+ /* Show only to one input type */
238
+ @media (pointer: fine) { .touch-only { display: none; } }
239
+ @media (pointer: coarse) { .mouse-only { display: none; } }
240
+ @media print { .no-print { display: none !important; } }
241
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "note": "Generated by build.mjs. Do not edit. Brotli is quality 11 with a size hint.",
4
+ "files": {
5
+ "deck.min.css": {
6
+ "raw": 172846,
7
+ "gzip": 32710,
8
+ "brotli": 26693
9
+ },
10
+ "deck-icons.svg": {
11
+ "raw": 110032,
12
+ "gzip": 33559,
13
+ "brotli": 27148
14
+ },
15
+ "deck.min.js": {
16
+ "raw": 32556,
17
+ "gzip": 10003,
18
+ "brotli": 8897
19
+ },
20
+ "deck-extras.min.js": {
21
+ "raw": 15854,
22
+ "gzip": 6497,
23
+ "brotli": 5692
24
+ },
25
+ "deck-adapters.min.js": {
26
+ "raw": 11294,
27
+ "gzip": 4518,
28
+ "brotli": 3974
29
+ },
30
+ "deck.bundle.min.js": {
31
+ "raw": 59728,
32
+ "gzip": 19515,
33
+ "brotli": 17297
34
+ }
35
+ },
36
+ "totals": {
37
+ "core": {
38
+ "gzip": 76272,
39
+ "brotli": 62738
40
+ },
41
+ "bundle": {
42
+ "gzip": 85784,
43
+ "brotli": 71138
44
+ }
45
+ },
46
+ "sample": {
47
+ "icons": 12,
48
+ "raw": 19419,
49
+ "gzip": 6927,
50
+ "brotli": 5705
51
+ }
52
+ }