clampography 2.0.0-beta.24 → 2.0.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/css/forms.min.css CHANGED
@@ -1 +1 @@
1
- @layer base{:root :where(button, [type='button'], [type='reset'], [type='submit']){display:inline-flex;align-items:center;justify-content:center;gap:0.375em;padding:var(--spacing-xs) var(--spacing-sm);background-color:var(--clampography-surface);color:var(--clampography-text);border:1px solid var(--clampography-border);border-radius:0.375rem;font-weight:500;white-space:nowrap;transition-property:background-color, border-color, color, box-shadow;transition-duration:150ms}:root :where(button, [type='button'], [type='reset'], [type='submit']):hover{background-color:var(--clampography-background);border-color:var(--clampography-primary)}:root :where(button, [type='button'], [type='submit']).primary, :root [type='submit']{background-color:var(--clampography-primary);color:var(--clampography-background);border-color:var(--clampography-primary)}:root :where(button, [type='button'], [type='submit']).primary:hover, :root [type='submit']:hover{filter:brightness(1.1)}:root :where(input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']), textarea, select){display:block;width:100%;padding:var(--spacing-xs) var(--spacing-sm);background-color:var(--clampography-background);color:var(--clampography-text);border:1px solid var(--clampography-border);border-radius:0.375rem;transition-property:border-color, box-shadow;transition-duration:150ms}:root :where(input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']), textarea, select):focus{outline:none;border-color:var(--clampography-primary);box-shadow:0 0 0 3px color-mix(in oklab, var(--clampography-primary) 20%, transparent)}:root :where(input, textarea, select):disabled{opacity:0.5;cursor:not-allowed}:root :where(input, textarea, select)[readonly]{background-color:color-mix(in oklab, var(--clampography-surface) 50%, transparent);cursor:default}:root :where(input, textarea, select):user-invalid{border-color:var(--clampography-error)}:root :where(input, textarea, select):user-invalid:focus{box-shadow:0 0 0 3px color-mix(in oklab, var(--clampography-error) 20%, transparent)}:root [type='search']::-webkit-search-cancel-button, :root [type='search']::-webkit-search-decoration{-webkit-appearance:none;appearance:none}:root [type='number']::-webkit-inner-spin-button, :root [type='number']::-webkit-outer-spin-button{height:auto}:root :where(input, textarea, select)::placeholder{color:var(--clampography-muted)}:root select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");background-position:right 0.5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem}:root [type='file']{padding:0;background-color:transparent;border:none;cursor:pointer}:root [type='file']::file-selector-button{display:inline-flex;align-items:center;padding:var(--spacing-xs) var(--spacing-sm);margin-right:var(--spacing-sm);background-color:var(--clampography-surface);color:var(--clampography-text);border:1px solid var(--clampography-border);border-radius:0.375rem;font-family:inherit;font-size:inherit;cursor:pointer;transition-property:background-color, border-color;transition-duration:150ms}:root [type='file']:hover::file-selector-button{background-color:var(--clampography-background);border-color:var(--clampography-primary)}:root [type='checkbox'], :root [type='radio']{width:1em;height:1em;accent-color:var(--clampography-primary);vertical-align:middle;cursor:pointer}:root [type='checkbox']:focus-visible, :root [type='radio']:focus-visible{outline:2px solid var(--clampography-primary);outline-offset:2px}:root [type='range']{accent-color:var(--clampography-primary);width:100%;cursor:pointer}:root [type='color']{padding:0.125rem;width:2.5rem;height:2.5rem;border:1px solid var(--clampography-border);border-radius:0.375rem;background-color:var(--clampography-background);cursor:pointer}:root fieldset{border:1px solid var(--clampography-border);border-radius:0.5rem;background-color:var(--clampography-surface)}:root legend{color:var(--clampography-heading)}:root label{color:var(--clampography-text)}:root output{color:var(--clampography-primary);font-weight:600}:root :where(meter, progress){accent-color:var(--clampography-primary);width:100%}}
1
+ @layer base{:root :where(button, [type='button'], [type='reset'], [type='submit']){display:inline-flex;align-items:center;justify-content:center;gap:0.375em;padding:var(--spacing-xs) var(--spacing-sm);background-color:var(--clampography-surface);color:var(--clampography-text);border:1px solid var(--clampography-border);border-radius:0.375rem;font-weight:500;white-space:nowrap;transition-property:background-color, border-color, color, box-shadow;transition-duration:150ms}:root :where(button, [type='button'], [type='reset'], [type='submit']):hover{background-color:var(--clampography-background);border-color:var(--clampography-primary)}:root :where(button, [type='button'], [type='submit']).primary, :root [type='submit']{background-color:var(--clampography-primary);color:var(--clampography-background);border-color:var(--clampography-primary)}:root :where(button, [type='button'], [type='submit']).primary:hover, :root [type='submit']:hover{filter:brightness(1.1)}:root :where(input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']), textarea, select){display:block;width:100%;padding:var(--spacing-xs) var(--spacing-sm);background-color:var(--clampography-background);color:var(--clampography-text);border:1px solid var(--clampography-border);border-radius:0.375rem;transition-property:border-color, box-shadow;transition-duration:150ms}:root :where(input:not([type='checkbox'], [type='radio'], [type='range'], [type='color']), textarea, select):focus{outline:none;border-color:var(--clampography-primary);box-shadow:0 0 0 3px color-mix(in oklab, var(--clampography-primary) 20%, transparent)}:root :where(input, textarea, select):disabled{opacity:0.5;cursor:not-allowed}:root :where(input, textarea, select)[readonly]{background-color:color-mix(in oklab, var(--clampography-surface) 50%, transparent);cursor:default}:root :where(input, textarea, select):user-invalid{border-color:var(--clampography-error)}:root :where(input, textarea, select):user-invalid:focus{box-shadow:0 0 0 3px color-mix(in oklab, var(--clampography-error) 20%, transparent)}:root [type='search']::-webkit-search-cancel-button, :root [type='search']::-webkit-search-decoration{-webkit-appearance:none;appearance:none}:root [type='number']::-webkit-inner-spin-button, :root [type='number']::-webkit-outer-spin-button{height:auto}:root :where(input, textarea, select)::placeholder{color:var(--clampography-muted)}:root select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");background-position:right 0.5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem}:root [type='file']{padding:0;background-color:transparent;border:none;cursor:pointer}:root [type='file']::file-selector-button{display:inline-flex;align-items:center;padding:var(--spacing-xs) var(--spacing-sm);margin-right:var(--spacing-sm);background-color:var(--clampography-surface);color:var(--clampography-text);border:1px solid var(--clampography-border);border-radius:0.375rem;font-family:inherit;font-size:inherit;cursor:pointer;transition-property:background-color, border-color;transition-duration:150ms}:root [type='file']:hover::file-selector-button{background-color:var(--clampography-background);border-color:var(--clampography-primary)}:root [type='checkbox'], :root [type='radio']{width:1em;height:1em;accent-color:var(--clampography-primary);vertical-align:middle;cursor:pointer}:root [type='checkbox']:focus-visible, :root [type='radio']:focus-visible{outline:2px solid var(--clampography-primary);outline-offset:2px}:root [type='range']{accent-color:var(--clampography-primary);width:100%;cursor:pointer}:root [type='color']{padding:0.125rem;width:2.5rem;height:2.5rem;border:1px solid var(--clampography-border);border-radius:0.375rem;background-color:var(--clampography-background);cursor:pointer}:root fieldset{border:1px solid var(--clampography-border);border-radius:0.5rem;background-color:var(--clampography-surface)}:root legend{color:var(--clampography-heading)}:root label{color:var(--clampography-text)}:root output{color:var(--clampography-primary);font-weight:600}:root progress{-webkit-appearance:none;appearance:none;width:100%;height:1em;background:transparent}:root progress::-webkit-progress-bar{background:color-mix(in oklab, var(--clampography-text) 20%, transparent)}:root progress::-webkit-progress-value{background:var(--clampography-success)}:root progress::-moz-progress-bar{background:var(--clampography-success)}:root meter{-webkit-appearance:none;appearance:none;width:100%;height:1em;background:transparent}@supports (-moz-appearance: none){:root progress{background:color-mix(in oklab, var(--clampography-text) 20%, transparent)}:root meter{background:color-mix(in oklab, var(--clampography-text) 20%, transparent)}}:root meter::-webkit-meter-inner-element{display:flex;align-items:stretch;height:1em}:root meter::-webkit-meter-bar{background:color-mix(in oklab, var(--clampography-text) 20%, transparent);height:100%}:root meter::-webkit-meter-optimum-value{background:var(--clampography-success);height:100%}:root meter:-moz-meter-optimum::-moz-meter-bar{background:var(--clampography-success)}:root meter::-webkit-meter-suboptimum-value{background:var(--clampography-warning);height:100%}:root meter:-moz-meter-sub-optimum::-moz-meter-bar{background:var(--clampography-warning)}:root meter::-webkit-meter-even-less-good-value{background:var(--clampography-error);height:100%}:root meter:-moz-meter-sub-sub-optimum::-moz-meter-bar{background:var(--clampography-error)}}
package/css/kbd.css CHANGED
@@ -3,7 +3,7 @@
3
3
  :root kbd {
4
4
  display: inline-block;
5
5
  padding: 0.1em 0.45em;
6
- min-width: 1.6em;
6
+ min-width: 2em;
7
7
  text-align: center;
8
8
  font-size: 0.8em;
9
9
  font-weight: 700;
package/css/kbd.min.css CHANGED
@@ -1 +1 @@
1
- @layer base{:root kbd{display:inline-block;padding:0.1em 0.45em;min-width:1.6em;text-align:center;font-size:0.8em;font-weight:700;line-height:1.5;white-space:nowrap;vertical-align:0.1em;cursor:default;user-select:none;background-color:var(--clampography-surface, oklch(94% 0.004 264));color:var(--clampography-text, oklch(18% 0.015 264));border:1px solid var(--clampography-border, oklch(76% 0.008 264));border-radius:4px;box-shadow:0 2px 0 color-mix(in oklab, var(--clampography-border, oklch(60% 0.008 264)) 100%, black 18%), 0 3px 2px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.5);transition-property:box-shadow, transform, border-bottom-width;transition-duration:80ms}:root kbd:active{transform:translateY(2px);box-shadow:0 0 0 color-mix(in oklab, var(--clampography-border, oklch(60% 0.008 264)) 100%, black 18%), 0 1px 1px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)}}
1
+ @layer base{:root kbd{display:inline-block;padding:0.1em 0.45em;min-width:2em;text-align:center;font-size:0.8em;font-weight:700;line-height:1.5;white-space:nowrap;vertical-align:0.1em;cursor:default;user-select:none;background-color:var(--clampography-surface, oklch(94% 0.004 264));color:var(--clampography-text, oklch(18% 0.015 264));border:1px solid var(--clampography-border, oklch(76% 0.008 264));border-radius:4px;box-shadow:0 2px 0 color-mix(in oklab, var(--clampography-border, oklch(60% 0.008 264)) 100%, black 18%), 0 3px 2px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.5);transition-property:box-shadow, transform, border-bottom-width;transition-duration:80ms}:root kbd:active{transform:translateY(2px);box-shadow:0 0 0 color-mix(in oklab, var(--clampography-border, oklch(60% 0.008 264)) 100%, black 18%), 0 1px 1px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)}}
package/css/theme.css ADDED
@@ -0,0 +1,90 @@
1
+ @layer base {
2
+
3
+ :where(:root), [data-theme="light"] {
4
+ color-scheme: light;
5
+ --clampography-background: oklch(100% 0 0);
6
+ --clampography-border: oklch(92% 0.003 264);
7
+ --clampography-error: oklch(63% 0.22 27);
8
+ --clampography-heading: oklch(15% 0.02 264);
9
+ --clampography-info: oklch(63% 0.258 262);
10
+ --clampography-link: oklch(43% 0.19 264);
11
+ --clampography-muted: oklch(52% 0.014 258);
12
+ --clampography-primary: oklch(63% 0.258 262);
13
+ --clampography-secondary: oklch(55% 0.28 300);
14
+ --clampography-success: oklch(65% 0.17 165);
15
+ --clampography-surface: oklch(96% 0.003 264);
16
+ --clampography-text: oklch(31% 0.02 257);
17
+ --clampography-warning: oklch(72% 0.17 65);
18
+ }
19
+
20
+ @media (prefers-color-scheme: dark) {
21
+
22
+ :root {
23
+ color-scheme: dark;
24
+ --clampography-background: oklch(10% 0 0);
25
+ --clampography-border: oklch(31% 0.03 254);
26
+ --clampography-error: oklch(63% 0.22 27);
27
+ --clampography-heading: oklch(98% 0.003 264);
28
+ --clampography-info: oklch(72% 0.17 254);
29
+ --clampography-link: oklch(72% 0.17 254);
30
+ --clampography-muted: oklch(68% 0.024 254);
31
+ --clampography-primary: oklch(63% 0.258 262);
32
+ --clampography-secondary: oklch(63% 0.25 300);
33
+ --clampography-success: oklch(65% 0.17 165);
34
+ --clampography-surface: oklch(12% 0 0);
35
+ --clampography-text: oklch(95% 0 0);
36
+ --clampography-warning: oklch(72% 0.17 65);
37
+ }
38
+
39
+ [data-theme="dark"] {
40
+ color-scheme: dark;
41
+ --clampography-background: oklch(10% 0 0);
42
+ --clampography-border: oklch(31% 0.03 254);
43
+ --clampography-error: oklch(63% 0.22 27);
44
+ --clampography-heading: oklch(98% 0.003 264);
45
+ --clampography-info: oklch(72% 0.17 254);
46
+ --clampography-link: oklch(72% 0.17 254);
47
+ --clampography-muted: oklch(68% 0.024 254);
48
+ --clampography-primary: oklch(63% 0.258 262);
49
+ --clampography-secondary: oklch(63% 0.25 300);
50
+ --clampography-success: oklch(65% 0.17 165);
51
+ --clampography-surface: oklch(12% 0 0);
52
+ --clampography-text: oklch(95% 0 0);
53
+ --clampography-warning: oklch(72% 0.17 65);
54
+ }
55
+
56
+ [data-theme="light"] {
57
+ color-scheme: light;
58
+ --clampography-background: oklch(100% 0 0);
59
+ --clampography-border: oklch(92% 0.003 264);
60
+ --clampography-error: oklch(63% 0.22 27);
61
+ --clampography-heading: oklch(15% 0.02 264);
62
+ --clampography-info: oklch(63% 0.258 262);
63
+ --clampography-link: oklch(43% 0.19 264);
64
+ --clampography-muted: oklch(52% 0.014 258);
65
+ --clampography-primary: oklch(63% 0.258 262);
66
+ --clampography-secondary: oklch(55% 0.28 300);
67
+ --clampography-success: oklch(65% 0.17 165);
68
+ --clampography-surface: oklch(96% 0.003 264);
69
+ --clampography-text: oklch(31% 0.02 257);
70
+ --clampography-warning: oklch(72% 0.17 65);
71
+ }
72
+ }
73
+
74
+ [data-theme="dark"] {
75
+ color-scheme: dark;
76
+ --clampography-background: oklch(10% 0 0);
77
+ --clampography-border: oklch(31% 0.03 254);
78
+ --clampography-error: oklch(63% 0.22 27);
79
+ --clampography-heading: oklch(98% 0.003 264);
80
+ --clampography-info: oklch(72% 0.17 254);
81
+ --clampography-link: oklch(72% 0.17 254);
82
+ --clampography-muted: oklch(68% 0.024 254);
83
+ --clampography-primary: oklch(63% 0.258 262);
84
+ --clampography-secondary: oklch(63% 0.25 300);
85
+ --clampography-success: oklch(65% 0.17 165);
86
+ --clampography-surface: oklch(12% 0 0);
87
+ --clampography-text: oklch(95% 0 0);
88
+ --clampography-warning: oklch(72% 0.17 65);
89
+ }
90
+ }
@@ -0,0 +1 @@
1
+ @layer base{:where(:root), [data-theme="light"]{color-scheme:light;--clampography-background:oklch(100% 0 0);--clampography-border:oklch(92% 0.003 264);--clampography-error:oklch(63% 0.22 27);--clampography-heading:oklch(15% 0.02 264);--clampography-info:oklch(63% 0.258 262);--clampography-link:oklch(43% 0.19 264);--clampography-muted:oklch(52% 0.014 258);--clampography-primary:oklch(63% 0.258 262);--clampography-secondary:oklch(55% 0.28 300);--clampography-success:oklch(65% 0.17 165);--clampography-surface:oklch(96% 0.003 264);--clampography-text:oklch(31% 0.02 257);--clampography-warning:oklch(72% 0.17 65)}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--clampography-background:oklch(10% 0 0);--clampography-border:oklch(31% 0.03 254);--clampography-error:oklch(63% 0.22 27);--clampography-heading:oklch(98% 0.003 264);--clampography-info:oklch(72% 0.17 254);--clampography-link:oklch(72% 0.17 254);--clampography-muted:oklch(68% 0.024 254);--clampography-primary:oklch(63% 0.258 262);--clampography-secondary:oklch(63% 0.25 300);--clampography-success:oklch(65% 0.17 165);--clampography-surface:oklch(12% 0 0);--clampography-text:oklch(95% 0 0);--clampography-warning:oklch(72% 0.17 65)}[data-theme="dark"]{color-scheme:dark;--clampography-background:oklch(10% 0 0);--clampography-border:oklch(31% 0.03 254);--clampography-error:oklch(63% 0.22 27);--clampography-heading:oklch(98% 0.003 264);--clampography-info:oklch(72% 0.17 254);--clampography-link:oklch(72% 0.17 254);--clampography-muted:oklch(68% 0.024 254);--clampography-primary:oklch(63% 0.258 262);--clampography-secondary:oklch(63% 0.25 300);--clampography-success:oklch(65% 0.17 165);--clampography-surface:oklch(12% 0 0);--clampography-text:oklch(95% 0 0);--clampography-warning:oklch(72% 0.17 65)}[data-theme="light"]{color-scheme:light;--clampography-background:oklch(100% 0 0);--clampography-border:oklch(92% 0.003 264);--clampography-error:oklch(63% 0.22 27);--clampography-heading:oklch(15% 0.02 264);--clampography-info:oklch(63% 0.258 262);--clampography-link:oklch(43% 0.19 264);--clampography-muted:oklch(52% 0.014 258);--clampography-primary:oklch(63% 0.258 262);--clampography-secondary:oklch(55% 0.28 300);--clampography-success:oklch(65% 0.17 165);--clampography-surface:oklch(96% 0.003 264);--clampography-text:oklch(31% 0.02 257);--clampography-warning:oklch(72% 0.17 65)}}[data-theme="dark"]{color-scheme:dark;--clampography-background:oklch(10% 0 0);--clampography-border:oklch(31% 0.03 254);--clampography-error:oklch(63% 0.22 27);--clampography-heading:oklch(98% 0.003 264);--clampography-info:oklch(72% 0.17 254);--clampography-link:oklch(72% 0.17 254);--clampography-muted:oklch(68% 0.024 254);--clampography-primary:oklch(63% 0.258 262);--clampography-secondary:oklch(63% 0.25 300);--clampography-success:oklch(65% 0.17 165);--clampography-surface:oklch(12% 0 0);--clampography-text:oklch(95% 0 0);--clampography-warning:oklch(72% 0.17 65)}}
package/package.json CHANGED
@@ -62,8 +62,11 @@
62
62
  },
63
63
  "scripts": {
64
64
  "build": "bun src/convert.js",
65
- "test": "bun test"
65
+ "test": "bun test",
66
+ "dev:css": "bunx @tailwindcss/cli -i ./dev/input.css -o ./dev/output.css --watch",
67
+ "dev:server": "bun run dev/server.js",
68
+ "dev": "bun run dev/server.js"
66
69
  },
67
70
  "type": "module",
68
- "version": "2.0.0-beta.24"
71
+ "version": "2.0.0-beta.26"
69
72
  }
package/src/base.js CHANGED
@@ -34,11 +34,11 @@ export default (options = {}) => {
34
34
  return {
35
35
  // ROOT CONFIGURATION
36
36
  [root]: {
37
- "--spacing-xs": "clamp(0.5rem, 0.375rem + 0.625vw, 0.75rem)",
38
- "--spacing-sm": "clamp(0.75rem, 0.5625rem + 0.9375vw, 1.25rem)",
39
- "--spacing-md": "clamp(1rem, 0.75rem + 1.25vw, 1.5rem)",
40
- "--spacing-lg": "clamp(1.5rem, 1.125rem + 1.875vw, 2.5rem)",
41
- "--spacing-xl": "clamp(2rem, 1.5rem + 2.5vw, 3rem)",
37
+ "--spacing-xs": "clamp(0.25rem, 1.25vw, 0.75rem)",
38
+ "--spacing-sm": "clamp(0.375rem, -0.0625rem + 2.1875vw, 1.25rem)",
39
+ "--spacing-md": "clamp(0.5rem, 2.5vw, 1.5rem)",
40
+ "--spacing-lg": "clamp(0.75rem, -0.125rem + 4.375vw, 2.5rem)",
41
+ "--spacing-xl": "clamp(1rem, 5vw, 3rem)",
42
42
  "--list-indent": "clamp(1.5rem, 1.25rem + 1.25vw, 2rem)",
43
43
  "--scroll-offset": "5rem",
44
44
  "--font-family-base":
@@ -202,6 +202,7 @@ export default (options = {}) => {
202
202
 
203
203
  [scope("abbr[title]")]: {
204
204
  "text-decoration": "underline dotted",
205
+ "text-underline-offset": "4px",
205
206
  cursor: "help",
206
207
  },
207
208
 
@@ -386,7 +387,7 @@ export default (options = {}) => {
386
387
  [scope("fieldset")]: {
387
388
  "margin-top": "var(--spacing-md)",
388
389
  "margin-bottom": "var(--spacing-md)",
389
- padding: "var(--spacing-md)",
390
+ padding: "var(--spacing-sm)",
390
391
  },
391
392
 
392
393
  [scope("legend")]: {
package/src/convert.js CHANGED
@@ -9,7 +9,7 @@ import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "fs
9
9
  import { basename, resolve } from "path";
10
10
 
11
11
  // Configuration
12
- const FILES_TO_CONVERT = ["base.js", "extra.js", "forms.js", "kbd.js"];
12
+ const FILES_TO_CONVERT = ["base.js", "theme.js", "extra.js", "forms.js", "kbd.js"];
13
13
  const OUTPUT_DIR = "css";
14
14
 
15
15
  // Options passed to the JS functions (simulating plugin config)
package/src/extra.js CHANGED
@@ -87,7 +87,7 @@ export default (options = {}) => {
87
87
  "background-color": "var(--clampography-surface)",
88
88
  "border": "1px solid var(--clampography-border)",
89
89
  "border-radius": "0.375rem",
90
- "padding": "1rem",
90
+ "padding": "var(--spacing-md)",
91
91
  },
92
92
 
93
93
  // Tables
@@ -121,8 +121,8 @@ export default (options = {}) => {
121
121
  [scope("hr")]: {
122
122
  "height": "1px",
123
123
  "border-width": "0",
124
- "margin-top": "3rem",
125
- "margin-bottom": "3rem",
124
+ "margin-top": "var(--spacing-xl)",
125
+ "margin-bottom": "var(--spacing-xl)",
126
126
  "background-color": "var(--clampography-border)",
127
127
  },
128
128
 
@@ -131,7 +131,7 @@ export default (options = {}) => {
131
131
  "border-left-width": "4px",
132
132
  "border-left-color": "var(--clampography-primary)",
133
133
  "background-color": "var(--clampography-surface)",
134
- "padding": "1rem",
134
+ "padding": "var(--spacing-md)",
135
135
  "border-radius": "0.25rem",
136
136
  "font-style": "italic",
137
137
  "color": "var(--clampography-heading)",
@@ -155,16 +155,17 @@ export default (options = {}) => {
155
155
  [scope("details")]: {
156
156
  "border": "1px solid var(--clampography-border)",
157
157
  "border-radius": "0.375rem",
158
- "padding": "0.5rem",
158
+ "padding": "var(--spacing-sm)",
159
159
  },
160
160
 
161
161
  [scope("summary")]: {
162
162
  "color": "var(--clampography-heading)",
163
+ "border-bottom": "0px solid var(--clampography-border)",
163
164
  },
164
165
 
165
166
  [scope("details[open] > summary")]: {
166
- "border-bottom": "1px solid var(--clampography-border)",
167
- "padding-bottom": "0.5rem",
167
+ "border-bottom-width": "1px",
168
+ "padding-bottom": "var(--spacing-sm)",
168
169
  },
169
170
  };
170
171
  };
package/src/forms.js CHANGED
@@ -205,10 +205,94 @@ export default (options = {}) => {
205
205
  "font-weight": "600",
206
206
  },
207
207
 
208
- // ── Meter & Progress ──────────────────────────────────────────────────────
209
- [scope(":where(meter, progress)")]: {
210
- "accent-color": "var(--clampography-primary)",
208
+ // ── Progress ──────────────────────────────────────────────────────────────
209
+ [scope("progress")]: {
210
+ "-webkit-appearance": "none",
211
+ "appearance": "none",
211
212
  "width": "100%",
213
+ "height": "1em",
214
+ "background": "transparent",
212
215
  },
216
+
217
+ // WebKit progress track
218
+ [scope("progress::-webkit-progress-bar")]: {
219
+ "background": "color-mix(in oklab, var(--clampography-text) 20%, transparent)",
220
+ },
221
+
222
+ // WebKit progress value
223
+ [scope("progress::-webkit-progress-value")]: {
224
+ "background": "var(--clampography-success)",
225
+ },
226
+
227
+ // Firefox progress value
228
+ [scope("progress::-moz-progress-bar")]: {
229
+ "background": "var(--clampography-success)",
230
+ },
231
+
232
+ // ── Meter ─────────────────────────────────────────────────────────────────
233
+ // Custom styling for <meter> (accent-color does not work on meter)
234
+ [scope("meter")]: {
235
+ "-webkit-appearance": "none",
236
+ "appearance": "none",
237
+ "width": "100%",
238
+ "height": "1em",
239
+ "background": "transparent",
240
+ },
241
+
242
+ // Firefox track (restored via Firefox-only feature query)
243
+ // @supports (-moz-appearance: none) is ignored by all WebKit/Blink browsers
244
+ "@supports (-moz-appearance: none)": {
245
+ [scope("progress")]: {
246
+ "background": "color-mix(in oklab, var(--clampography-text) 20%, transparent)",
247
+ },
248
+ [scope("meter")]: {
249
+ "background": "color-mix(in oklab, var(--clampography-text) 20%, transparent)",
250
+ },
251
+ },
252
+
253
+ // Re-establish height context for WebKit shadow DOM
254
+ // appearance:none breaks Chrome's flex layout; inner elements can't resolve height:100%
255
+ // without a concrete parent height set here.
256
+ // display:flex + align-items:stretch forces the child bar to fill the full height
257
+ // without top-anchoring it the way display:block would.
258
+ [scope("meter::-webkit-meter-inner-element")]: {
259
+ "display": "flex",
260
+ "align-items": "stretch",
261
+ "height": "1em",
262
+ },
263
+
264
+ // WebKit inner track
265
+ [scope("meter::-webkit-meter-bar")]: {
266
+ "background": "color-mix(in oklab, var(--clampography-text) 20%, transparent)",
267
+ "height": "100%",
268
+ },
269
+
270
+ // 1. Optimum (Success)
271
+ [scope("meter::-webkit-meter-optimum-value")]: {
272
+ "background": "var(--clampography-success)",
273
+ "height": "100%",
274
+ },
275
+ [scope("meter:-moz-meter-optimum::-moz-meter-bar")]: {
276
+ "background": "var(--clampography-success)",
277
+ },
278
+
279
+ // 2. Sub-optimum (Warning)
280
+ [scope("meter::-webkit-meter-suboptimum-value")]: {
281
+ "background": "var(--clampography-warning)",
282
+ "height": "100%",
283
+ },
284
+ [scope("meter:-moz-meter-sub-optimum::-moz-meter-bar")]: {
285
+ "background": "var(--clampography-warning)",
286
+ },
287
+
288
+ // 3. Even less good (Error)
289
+ [scope("meter::-webkit-meter-even-less-good-value")]: {
290
+ "background": "var(--clampography-error)",
291
+ "height": "100%",
292
+ },
293
+ [scope("meter:-moz-meter-sub-sub-optimum::-moz-meter-bar")]: {
294
+ "background": "var(--clampography-error)",
295
+ },
296
+
213
297
  };
214
298
  };
package/src/kbd.js CHANGED
@@ -44,7 +44,7 @@ export default (options = {}) => {
44
44
  [scope("kbd")]: {
45
45
  "display": "inline-block",
46
46
  "padding": "0.1em 0.45em",
47
- "min-width": "1.6em",
47
+ "min-width": "2em",
48
48
  "text-align": "center",
49
49
  "font-size": "0.8em",
50
50
  "font-weight": "700",
package/src/theme.js ADDED
@@ -0,0 +1,34 @@
1
+ import { themes } from "./themes.js";
2
+
3
+ /**
4
+ * CDN Theme Generator
5
+ * Extracts light/dark themes from themes.js and structures them
6
+ * for the Vanilla CSS build process.
7
+ */
8
+ export default (options = {}) => {
9
+ const root = options.root || ":root";
10
+ const themeStyles = {};
11
+
12
+ // 1. Default Theme (Light)
13
+ if (themes["light"]) {
14
+ // :where() lowers specificity so users can override it easily
15
+ themeStyles[`:where(${root}), [data-theme="light"]`] = themes["light"];
16
+ }
17
+
18
+ // 2. Dark Mode (prefers-color-scheme)
19
+ if (themes["dark"]) {
20
+ themeStyles["@media (prefers-color-scheme: dark)"] = {
21
+ // Default to dark if system prefers dark
22
+ [root]: themes["dark"],
23
+ // Keep data-theme="dark" inside media query for completeness
24
+ [`[data-theme="dark"]`]: themes["dark"],
25
+ // Allow overriding back to light even if system is dark
26
+ [`[data-theme="light"]`]: themes["light"]
27
+ };
28
+
29
+ // 3. Explicit Data Theme (Dark) - works regardless of system preference
30
+ themeStyles[`[data-theme="dark"]`] = themes["dark"];
31
+ }
32
+
33
+ return themeStyles;
34
+ };