@fpkit/acss 0.6.2 → 1.0.0-beta.1

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 (109) hide show
  1. package/libs/components/alert/alert.css +1 -1
  2. package/libs/components/alert/alert.css.map +1 -1
  3. package/libs/components/alert/alert.min.css +2 -2
  4. package/libs/components/badge/badge.css +1 -1
  5. package/libs/components/badge/badge.css.map +1 -1
  6. package/libs/components/badge/badge.min.css +2 -2
  7. package/libs/components/breadcrumbs/breadcrumb.css +1 -1
  8. package/libs/components/breadcrumbs/breadcrumb.css.map +1 -1
  9. package/libs/components/breadcrumbs/breadcrumb.min.css +2 -2
  10. package/libs/components/buttons/button.css +1 -1
  11. package/libs/components/buttons/button.css.map +1 -1
  12. package/libs/components/buttons/button.min.css +2 -2
  13. package/libs/components/cards/card.css +1 -1
  14. package/libs/components/cards/card.css.map +1 -1
  15. package/libs/components/cards/card.min.css +2 -2
  16. package/libs/components/details/details.css +1 -1
  17. package/libs/components/details/details.css.map +1 -1
  18. package/libs/components/details/details.min.css +2 -2
  19. package/libs/components/dialog/dialog.css +1 -1
  20. package/libs/components/dialog/dialog.css.map +1 -1
  21. package/libs/components/dialog/dialog.min.css +2 -2
  22. package/libs/components/form/form.css +1 -1
  23. package/libs/components/form/form.css.map +1 -1
  24. package/libs/components/form/form.min.css +2 -2
  25. package/libs/components/icons/icon.d.cts +32 -32
  26. package/libs/components/icons/icon.d.ts +32 -32
  27. package/libs/components/images/img.css +1 -1
  28. package/libs/components/images/img.css.map +1 -1
  29. package/libs/components/images/img.min.css +2 -2
  30. package/libs/components/layout/landmarks.css +1 -1
  31. package/libs/components/layout/landmarks.css.map +1 -1
  32. package/libs/components/layout/landmarks.min.css +2 -2
  33. package/libs/components/link/link.css +1 -1
  34. package/libs/components/link/link.css.map +1 -1
  35. package/libs/components/link/link.min.css +2 -2
  36. package/libs/components/nav/nav.css +1 -1
  37. package/libs/components/nav/nav.css.map +1 -1
  38. package/libs/components/nav/nav.min.css +2 -2
  39. package/libs/components/progress/progress.css +1 -1
  40. package/libs/components/progress/progress.css.map +1 -1
  41. package/libs/components/progress/progress.min.css +2 -2
  42. package/libs/components/tag/tag.css +1 -1
  43. package/libs/components/tag/tag.css.map +1 -1
  44. package/libs/components/tag/tag.min.css +2 -2
  45. package/libs/index.css +1 -1
  46. package/libs/index.css.map +1 -1
  47. package/package.json +1 -1
  48. package/src/components/alert/alert.scss +4 -4
  49. package/src/components/alert/alert.scss.backup +184 -0
  50. package/src/components/alert/alert.stories.tsx +53 -2
  51. package/src/components/badge/badge.scss +2 -2
  52. package/src/components/badge/badge.scss.backup +39 -0
  53. package/src/components/badge/badge.stories.tsx +40 -0
  54. package/src/components/breadcrumbs/breadcrumb.scss +5 -5
  55. package/src/components/breadcrumbs/breadcrumb.scss.backup +35 -0
  56. package/src/components/breadcrumbs/breadcrumb.stories.tsx +17 -1
  57. package/src/components/buttons/button.scss +27 -27
  58. package/src/components/buttons/button.scss.backup +145 -0
  59. package/src/components/buttons/button.stories.tsx +188 -2
  60. package/src/components/cards/card.scss +39 -5
  61. package/src/components/cards/card.scss.backup +67 -0
  62. package/src/components/cards/card.stories.tsx +183 -0
  63. package/src/components/details/details.scss +14 -14
  64. package/src/components/details/details.scss.backup +126 -0
  65. package/src/components/details/details.stories.tsx +40 -0
  66. package/src/components/dialog/dialog.scss +3 -3
  67. package/src/components/dialog/dialog.scss.backup +126 -0
  68. package/src/components/form/form.scss +25 -9
  69. package/src/components/form/form.scss.backup +87 -0
  70. package/src/components/form/form.stories.tsx +271 -0
  71. package/src/components/form/input.stories.tsx +158 -0
  72. package/src/components/images/figure.stories.tsx +41 -1
  73. package/src/components/images/img.scss +8 -8
  74. package/src/components/images/img.scss.backup +59 -0
  75. package/src/components/layout/_header.scss +14 -14
  76. package/src/components/layout/_header.scss.backup +72 -0
  77. package/src/components/layout/landmarks.scss +7 -7
  78. package/src/components/layout/landmarks.scss.backup +51 -0
  79. package/src/components/layout/landmarks.stories.tsx +42 -0
  80. package/src/components/link/link.scss +5 -5
  81. package/src/components/link/link.scss.backup +145 -0
  82. package/src/components/link/link.stories.tsx +38 -2
  83. package/src/components/nav/nav.scss +17 -17
  84. package/src/components/nav/nav.scss.backup +123 -0
  85. package/src/components/nav/nav.stories.tsx +35 -1
  86. package/src/components/progress/progress.scss +7 -7
  87. package/src/components/progress/progress.scss.backup +70 -0
  88. package/src/components/tag/tag.scss +10 -10
  89. package/src/components/tag/tag.scss.backup +130 -0
  90. package/src/components/tag/tag.stories.tsx +23 -2
  91. package/src/styles/alert/alert.css +4 -4
  92. package/src/styles/badge/badge.css +2 -2
  93. package/src/styles/breadcrumbs/breadcrumb.css +5 -5
  94. package/src/styles/buttons/button.css +26 -27
  95. package/src/styles/buttons/button.css.map +1 -1
  96. package/src/styles/cards/card.css +35 -5
  97. package/src/styles/cards/card.css.map +1 -1
  98. package/src/styles/details/details.css +14 -14
  99. package/src/styles/dialog/dialog.css +3 -3
  100. package/src/styles/form/form.css +20 -10
  101. package/src/styles/form/form.css.map +1 -1
  102. package/src/styles/images/img.css +8 -8
  103. package/src/styles/index.css +170 -131
  104. package/src/styles/index.css.map +1 -1
  105. package/src/styles/layout/landmarks.css +21 -21
  106. package/src/styles/link/link.css +5 -5
  107. package/src/styles/nav/nav.css +17 -17
  108. package/src/styles/progress/progress.css +6 -6
  109. package/src/styles/tag/tag.css +4 -4
@@ -181,8 +181,8 @@ export const DisabledCustom: Story = {
181
181
  classes: "my-custom-button",
182
182
  styles: {
183
183
  "--btn-fs": "1.25rem",
184
- "--btn-py": "0.75rem",
185
- "--btn-px": "1.5rem",
184
+ "--btn-padding-block": "0.75rem",
185
+ "--btn-padding-inline": "1.5rem",
186
186
  },
187
187
  children: "Custom Disabled",
188
188
  },
@@ -225,3 +225,189 @@ Try clicking - only enabled button responds.
225
225
  },
226
226
  },
227
227
  } as Story;
228
+
229
+ /**
230
+ * CSS Variable Customization
231
+ *
232
+ * Demonstrates how to customize button appearance using the new standardized
233
+ * CSS custom property naming convention.
234
+ *
235
+ * New variable naming patterns:
236
+ * - Size tokens: `--btn-size-{xs|sm|md|lg}`
237
+ * - Logical properties: `--btn-padding-inline`, `--btn-padding-block`
238
+ * - Full property names: `--btn-radius`, `--btn-color`, `--btn-display`, `--btn-border`
239
+ * - Approved abbreviations: `--btn-fs` (font-size), `--btn-bg` (background), `--btn-fw` (font-weight)
240
+ */
241
+ export const Customization: Story = {
242
+ render: () => (
243
+ <div style={{ display: "flex", flexDirection: "column", gap: "2rem" }}>
244
+ {/* Custom brand colors */}
245
+ <div>
246
+ <h4>Custom Brand Colors</h4>
247
+ <Button
248
+ type="button"
249
+ styles={{
250
+ "--btn-bg": "#0066cc",
251
+ "--btn-color": "white",
252
+ "--btn-radius": "0.5rem",
253
+ "--btn-padding-inline": "2rem",
254
+ "--btn-padding-block": "0.75rem",
255
+ }}
256
+ >
257
+ Brand Button
258
+ </Button>
259
+ </div>
260
+
261
+ {/* Custom sizes using logical properties */}
262
+ <div>
263
+ <h4>Custom Padding (Logical Properties)</h4>
264
+ <div style={{ display: "flex", gap: "1rem", flexWrap: "wrap" }}>
265
+ <Button
266
+ type="button"
267
+ styles={{
268
+ "--btn-padding-inline": "0.5rem",
269
+ "--btn-padding-block": "0.25rem",
270
+ "--btn-fs": "0.875rem",
271
+ }}
272
+ >
273
+ Compact
274
+ </Button>
275
+ <Button
276
+ type="button"
277
+ styles={{
278
+ "--btn-padding-inline": "3rem",
279
+ "--btn-padding-block": "1rem",
280
+ "--btn-fs": "1.125rem",
281
+ }}
282
+ >
283
+ Spacious
284
+ </Button>
285
+ </div>
286
+ </div>
287
+
288
+ {/* Custom hover effects */}
289
+ <div>
290
+ <h4>Custom Hover Effects</h4>
291
+ <Button
292
+ type="button"
293
+ styles={{
294
+ "--btn-bg": "#28a745",
295
+ "--btn-color": "white",
296
+ "--btn-hover-filter": "brightness(1.1)",
297
+ "--btn-hover-transform": "translateY(-2px)",
298
+ }}
299
+ >
300
+ Hover Me
301
+ </Button>
302
+ </div>
303
+
304
+ {/* Custom borders and shapes */}
305
+ <div>
306
+ <h4>Custom Borders & Shapes</h4>
307
+ <div style={{ display: "flex", gap: "1rem", flexWrap: "wrap" }}>
308
+ <Button
309
+ type="button"
310
+ styles={{
311
+ "--btn-bg": "transparent",
312
+ "--btn-color": "#0066cc",
313
+ "--btn-border": "2px solid currentColor",
314
+ "--btn-radius": "0",
315
+ }}
316
+ >
317
+ Square Outline
318
+ </Button>
319
+ <Button
320
+ type="button"
321
+ styles={{
322
+ "--btn-bg": "#dc3545",
323
+ "--btn-color": "white",
324
+ "--btn-radius": "100rem",
325
+ "--btn-padding-inline": "2rem",
326
+ }}
327
+ >
328
+ Pill Shape
329
+ </Button>
330
+ </div>
331
+ </div>
332
+
333
+ {/* Dark theme example */}
334
+ <div
335
+ style={{
336
+ background: "#1a1a1a",
337
+ padding: "1.5rem",
338
+ borderRadius: "0.5rem",
339
+ }}
340
+ >
341
+ <h4 style={{ color: "white", marginTop: 0 }}>Dark Theme Example</h4>
342
+ <div style={{ display: "flex", gap: "1rem", flexWrap: "wrap" }}>
343
+ <Button
344
+ type="button"
345
+ styles={{
346
+ "--btn-bg": "#3b82f6",
347
+ "--btn-color": "white",
348
+ "--btn-hover-filter": "brightness(1.2)",
349
+ }}
350
+ >
351
+ Primary
352
+ </Button>
353
+ <Button
354
+ type="button"
355
+ styles={{
356
+ "--btn-bg": "transparent",
357
+ "--btn-color": "#e5e7eb",
358
+ "--btn-border": "1px solid #4b5563",
359
+ "--btn-hover-filter": "brightness(1.3)",
360
+ }}
361
+ >
362
+ Secondary
363
+ </Button>
364
+ </div>
365
+ </div>
366
+ </div>
367
+ ),
368
+ parameters: {
369
+ docs: {
370
+ description: {
371
+ story: `
372
+ ## Available CSS Variables
373
+
374
+ ### Size Tokens
375
+ - \`--btn-size-xs\`: 0.6875rem (11px)
376
+ - \`--btn-size-sm\`: 0.8125rem (13px)
377
+ - \`--btn-size-md\`: 0.9375rem (15px)
378
+ - \`--btn-size-lg\`: 1.125rem (18px)
379
+
380
+ ### Base Properties
381
+ - \`--btn-padding-inline\`: Horizontal padding (logical property)
382
+ - \`--btn-padding-block\`: Vertical padding (logical property)
383
+ - \`--btn-radius\`: Border radius
384
+ - \`--btn-color\`: Text color
385
+ - \`--btn-bg\`: Background color
386
+ - \`--btn-border\`: Border style
387
+ - \`--btn-display\`: Display property
388
+ - \`--btn-whitespace\`: White-space handling
389
+ - \`--btn-spacing\`: Margin/spacing
390
+
391
+ ### Typography (Approved Abbreviations)
392
+ - \`--btn-fs\`: Font size
393
+ - \`--btn-fw\`: Font weight
394
+
395
+ ### State Variables
396
+ - \`--btn-hover-filter\`: Filter on hover
397
+ - \`--btn-hover-transform\`: Transform on hover
398
+ - \`--btn-hover-outline\`: Outline on hover
399
+
400
+ ### Migration from Old Names
401
+ - ❌ \`--btn-px\` → ✅ \`--btn-padding-inline\`
402
+ - ❌ \`--btn-py\` → ✅ \`--btn-padding-block\`
403
+ - ❌ \`--btn-rds\` → ✅ \`--btn-radius\`
404
+ - ❌ \`--btn-cl\` → ✅ \`--btn-color\`
405
+ - ❌ \`--btn-dsp\` → ✅ \`--btn-display\`
406
+ - ❌ \`--btn-bdr\` → ✅ \`--btn-border\`
407
+ - ❌ \`--btn-wspc\` → ✅ \`--btn-whitespace\`
408
+ - ❌ \`--btn-spc\` → ✅ \`--btn-spacing\`
409
+ `,
410
+ },
411
+ },
412
+ },
413
+ } as Story;
@@ -1,11 +1,23 @@
1
1
  :root {
2
- --card-p: 2rem;
2
+ // Base card properties
3
+ --card-padding: 2rem;
3
4
  --card-bg: #fff;
4
- --card-radius: calc(var(--card-p) / 4);
5
+ --card-radius: calc(var(--card-padding) / 4);
5
6
  --card-position: relative;
6
7
  --card-display: flex;
7
8
  --card-direction: column;
8
9
  --card-gap: 1rem;
10
+
11
+ // Element-specific variables (NEW - for complex card layouts)
12
+ --card-header-padding: 1rem 1.5rem;
13
+ --card-header-bg: #f8f9fa;
14
+ --card-header-border-bottom: 1px solid #dee2e6;
15
+
16
+ --card-body-padding: 1.5rem;
17
+
18
+ --card-footer-padding: 1rem 1.5rem;
19
+ --card-footer-bg: #f8f9fa;
20
+ --card-footer-border-top: 1px solid #dee2e6;
9
21
  }
10
22
 
11
23
  [data-card],
@@ -32,14 +44,36 @@
32
44
  }
33
45
 
34
46
  > *:not(img) {
35
- padding-inline: var(--card-p);
47
+ padding-inline: var(--card-padding);
36
48
  }
37
49
  > *:last-child:not(img) {
38
50
  // margin-block-end: 0;
39
- padding-block-end: var(--card-p);
51
+ padding-block-end: var(--card-padding);
40
52
  }
41
53
  > *:first-child:not(img) {
42
- padding-block-start: calc(var(--card-p) - 0.5rem);
54
+ padding-block-start: calc(var(--card-padding) - 0.5rem);
55
+ }
56
+
57
+ // Element-specific styling (using new scoped variables)
58
+ > header,
59
+ > [data-card-header] {
60
+ padding: var(--card-header-padding);
61
+ background-color: var(--card-header-bg);
62
+ border-bottom: var(--card-header-border-bottom);
63
+ border-radius: var(--card-radius) var(--card-radius) 0 0;
64
+ }
65
+
66
+ > [data-card-body] {
67
+ padding: var(--card-body-padding);
68
+ flex: 1;
69
+ }
70
+
71
+ > footer,
72
+ > [data-card-footer] {
73
+ padding: var(--card-footer-padding);
74
+ background-color: var(--card-footer-bg);
75
+ border-top: var(--card-footer-border-top);
76
+ border-radius: 0 0 var(--card-radius) var(--card-radius);
43
77
  }
44
78
  }
45
79
 
@@ -0,0 +1,67 @@
1
+ :root {
2
+ --card-p: 2rem;
3
+ --card-bg: #fff;
4
+ --card-radius: calc(var(--card-p) / 4);
5
+ --card-position: relative;
6
+ --card-display: flex;
7
+ --card-direction: column;
8
+ --card-gap: 1rem;
9
+ }
10
+
11
+ [data-card],
12
+ [data-component~='card'] {
13
+ display: var(--card-display);
14
+ flex-direction: var(--card-direction);
15
+ gap: var(--card-gap);
16
+ border-radius: var(--card-radius);
17
+ background-color: var(--card-bg);
18
+ text-align: var(--card-align, left);
19
+
20
+ h3,
21
+ h2 {
22
+ margin-block-end: 0;
23
+ padding-block-end: 0;
24
+ }
25
+ + div {
26
+ margin-block-start: 0;
27
+ }
28
+ > article {
29
+ display: flex;
30
+ flex-direction: column;
31
+ flex: 2;
32
+ }
33
+
34
+ > *:not(img) {
35
+ padding-inline: var(--card-p);
36
+ }
37
+ > *:last-child:not(img) {
38
+ // margin-block-end: 0;
39
+ padding-block-end: var(--card-p);
40
+ }
41
+ > *:first-child:not(img) {
42
+ padding-block-start: calc(var(--card-p) - 0.5rem);
43
+ }
44
+ }
45
+
46
+ // Interactive card styles - WCAG 2.4.7 compliant focus indicators
47
+ [data-card="interactive"] {
48
+ cursor: pointer;
49
+ transition: box-shadow 0.2s ease, transform 0.2s ease;
50
+
51
+ &:hover {
52
+ transform: translateY(-2px);
53
+ box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.15);
54
+ }
55
+
56
+ // Visible focus indicator with 3:1 minimum contrast (WCAG 2.4.7)
57
+ &:focus-visible {
58
+ outline: 0.125rem solid var(--focus-color, #0066CC);
59
+ outline-offset: 0.125rem;
60
+ }
61
+
62
+ // Hide outline for mouse users (modern browsers)
63
+ &:focus:not(:focus-visible) {
64
+ outline: none;
65
+ }
66
+ }
67
+
@@ -307,3 +307,186 @@ export const CustomHeadingLevels: Story = {
307
307
  },
308
308
  },
309
309
  } as Story;
310
+
311
+ /**
312
+ * CSS Variable Customization
313
+ *
314
+ * Demonstrates how to customize card appearance using the new standardized
315
+ * CSS custom property naming convention.
316
+ *
317
+ * New variable naming patterns:
318
+ * - Base properties: `--card-padding`, `--card-radius`, `--card-bg`, `--card-gap`
319
+ * - Element-specific: `--card-header-*`, `--card-body-*`, `--card-footer-*`
320
+ * - Full property names (no single-letter abbreviations)
321
+ */
322
+ export const Customization: Story = {
323
+ render: () => (
324
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '2rem' }}>
325
+ {/* Custom padding and spacing */}
326
+ <div>
327
+ <h4>Custom Padding & Spacing</h4>
328
+ <Card styles={{
329
+ "--card-padding": "3rem",
330
+ "--card-radius": "1rem",
331
+ "--card-gap": "1.5rem",
332
+ }}>
333
+ <Card.Title>Spacious Card</Card.Title>
334
+ <Card.Content>
335
+ <p>This card uses custom padding (3rem) and larger border radius (1rem).</p>
336
+ </Card.Content>
337
+ </Card>
338
+ </div>
339
+
340
+ {/* Compact card */}
341
+ <div>
342
+ <h4>Compact Card</h4>
343
+ <Card styles={{
344
+ "--card-padding": "1rem",
345
+ "--card-radius": "0.25rem",
346
+ "--card-gap": "0.5rem",
347
+ }}>
348
+ <Card.Title>Compact Card</Card.Title>
349
+ <Card.Content>
350
+ <p>This card uses minimal padding and smaller gaps for a compact layout.</p>
351
+ </Card.Content>
352
+ </Card>
353
+ </div>
354
+
355
+ {/* Custom header/footer styling */}
356
+ <div>
357
+ <h4>Element-Specific Customization (Header, Body, Footer)</h4>
358
+ <div style={{ display: 'flex', gap: '1rem', flexWrap: 'wrap' }}>
359
+ <Card styles={{
360
+ "--card-header-padding": "1.5rem 2rem",
361
+ "--card-header-bg": "#0066cc",
362
+ "--card-header-border-bottom": "none",
363
+ "--card-body-padding": "2rem",
364
+ "--card-footer-padding": "1rem 2rem",
365
+ "--card-footer-bg": "#f0f0f0",
366
+ "--card-footer-border-top": "2px solid #ddd",
367
+ }}>
368
+ <header data-card-header style={{ color: 'white' }}>
369
+ <h3 style={{ margin: 0 }}>Custom Header</h3>
370
+ </header>
371
+ <div data-card-body>
372
+ <p>This card demonstrates element-specific customization using the new scoped variables.</p>
373
+ <p>Header has custom blue background, body has custom padding, footer has custom gray background.</p>
374
+ </div>
375
+ <footer data-card-footer>
376
+ <small>Custom Footer Content</small>
377
+ </footer>
378
+ </Card>
379
+
380
+ <Card styles={{
381
+ "--card-header-padding": "0.75rem 1.25rem",
382
+ "--card-header-bg": "#28a745",
383
+ "--card-header-border-bottom": "3px solid #1e7e34",
384
+ "--card-body-padding": "1.25rem",
385
+ "--card-footer-padding": "0.75rem 1.25rem",
386
+ "--card-footer-bg": "#e7f5ea",
387
+ }}>
388
+ <header data-card-header style={{ color: 'white' }}>
389
+ <h3 style={{ margin: 0 }}>Green Theme</h3>
390
+ </header>
391
+ <div data-card-body>
392
+ <p>Another example with green theme and custom element spacing.</p>
393
+ </div>
394
+ <footer data-card-footer>
395
+ <small>Footer with light green background</small>
396
+ </footer>
397
+ </Card>
398
+ </div>
399
+ </div>
400
+
401
+ {/* Dark theme card */}
402
+ <div
403
+ style={{
404
+ background: "#1a1a1a",
405
+ padding: "1.5rem",
406
+ borderRadius: "0.5rem",
407
+ }}
408
+ >
409
+ <h4 style={{ color: "white", marginTop: 0 }}>Dark Theme Example</h4>
410
+ <Card styles={{
411
+ "--card-bg": "#2a2a2a",
412
+ "--card-padding": "2rem",
413
+ "--card-radius": "0.75rem",
414
+ "--card-header-bg": "#3a3a3a",
415
+ "--card-header-border-bottom": "1px solid #4a4a4a",
416
+ "--card-footer-bg": "#3a3a3a",
417
+ "--card-footer-border-top": "1px solid #4a4a4a",
418
+ }}>
419
+ <header data-card-header>
420
+ <h3 style={{ margin: 0, color: 'white' }}>Dark Mode Card</h3>
421
+ </header>
422
+ <div data-card-body style={{ color: '#e5e7eb' }}>
423
+ <p>This card demonstrates dark theme customization with all element-specific variables.</p>
424
+ </div>
425
+ <footer data-card-footer style={{ color: '#9ca3af' }}>
426
+ <small>Styled with CSS custom properties</small>
427
+ </footer>
428
+ </Card>
429
+ </div>
430
+
431
+ {/* Brand card */}
432
+ <div>
433
+ <h4>Brand Card (No Radius, Custom Colors)</h4>
434
+ <Card styles={{
435
+ "--card-bg": "#fff5e6",
436
+ "--card-radius": "0",
437
+ "--card-padding": "2.5rem",
438
+ "--card-gap": "2rem",
439
+ "--card-header-bg": "#ff9800",
440
+ "--card-header-border-bottom": "4px solid #f57c00",
441
+ }}>
442
+ <header data-card-header>
443
+ <h3 style={{ margin: 0, color: 'white' }}>Brand Card</h3>
444
+ </header>
445
+ <div data-card-body>
446
+ <p>This card uses brand colors and no border radius for a distinct look.</p>
447
+ </div>
448
+ </Card>
449
+ </div>
450
+ </div>
451
+ ),
452
+ parameters: {
453
+ docs: {
454
+ description: {
455
+ story: `
456
+ ## Available CSS Variables
457
+
458
+ ### Base Properties
459
+ - \`--card-padding\`: Main card padding (default: 2rem)
460
+ - \`--card-bg\`: Background color (default: #fff)
461
+ - \`--card-radius\`: Border radius (default: calc(var(--card-padding) / 4))
462
+ - \`--card-display\`: Display property (default: flex)
463
+ - \`--card-direction\`: Flex direction (default: column)
464
+ - \`--card-gap\`: Gap between child elements (default: 1rem)
465
+
466
+ ### Element-Specific Variables (NEW)
467
+ #### Header
468
+ - \`--card-header-padding\`: Header padding (default: 1rem 1.5rem)
469
+ - \`--card-header-bg\`: Header background color (default: #f8f9fa)
470
+ - \`--card-header-border-bottom\`: Header bottom border (default: 1px solid #dee2e6)
471
+
472
+ #### Body
473
+ - \`--card-body-padding\`: Body content padding (default: 1.5rem)
474
+
475
+ #### Footer
476
+ - \`--card-footer-padding\`: Footer padding (default: 1rem 1.5rem)
477
+ - \`--card-footer-bg\`: Footer background color (default: #f8f9fa)
478
+ - \`--card-footer-border-top\`: Footer top border (default: 1px solid #dee2e6)
479
+
480
+ ### Migration from Old Names
481
+ - ❌ \`--card-p\` → ✅ \`--card-padding\`
482
+
483
+ ### Usage with Element Selectors
484
+ Element-specific variables work with:
485
+ - \`<header>\` or \`[data-card-header]\`
486
+ - \`[data-card-body]\`
487
+ - \`<footer>\` or \`[data-card-footer]\`
488
+ `,
489
+ },
490
+ },
491
+ },
492
+ } as Story;
@@ -3,14 +3,14 @@ details {
3
3
  --details-direction: column;
4
4
  --details-display: flex;
5
5
  --details-gap: 0rem;
6
- --details-h: max-content;
6
+ --details-height: max-content;
7
7
  --details-justify: flex-start;
8
- --details-px: 1.5rem;
9
- --details-py: 1rem;
8
+ --details-padding-inline: 1.5rem;
9
+ --details-padding-block: 1rem;
10
10
  --details-radius: 0;
11
- --details-w: 100%;
12
- --max-h-closed: 6.25rem;
13
- --max-h-open: 50rem;
11
+ --details-width: 100%;
12
+ --details-max-height-closed: 6.25rem;
13
+ --details-max-height-open: 50rem;
14
14
  --summary-align: center;
15
15
  --summary-cursor: pointer;
16
16
  --summary-display: flex;
@@ -23,12 +23,12 @@ details {
23
23
  flex-direction: var(--details-direction);
24
24
  justify-content: var(--details-justify);
25
25
  gap: var(--details-gap);
26
- width: var(--details-w);
26
+ width: var(--details-width);
27
27
  border: var(--details-border);
28
28
  border-left: none;
29
29
  border-right: none;
30
30
  transition: var(--summary-transitions);
31
- max-height: var(--max-h-closed);
31
+ max-height: var(--details-max-height-closed);
32
32
  overflow: clip;
33
33
 
34
34
  @starting-style {
@@ -62,8 +62,8 @@ details {
62
62
  display: var(--summary-display);
63
63
  justify-content: var(--summary-justify);
64
64
  align-items: var(--summary-align);
65
- padding-inline: var(--summary-px, var(--details-px));
66
- padding-block: var(--summary-py, var(--details-py));
65
+ padding-inline: var(--summary-padding-inline, var(--details-padding-inline));
66
+ padding-block: var(--summary-padding-block, var(--details-padding-block));
67
67
  gap: var(--summary-gap);
68
68
  list-style: none;
69
69
  border-top-left-radius: var(--details-radius);
@@ -85,7 +85,7 @@ details {
85
85
  cursor: var(--summary-cursor);
86
86
  }
87
87
  > section {
88
- width: var(--details-w);
88
+ width: var(--details-width);
89
89
  }
90
90
  }
91
91
 
@@ -97,8 +97,8 @@ details {
97
97
  }
98
98
 
99
99
  > section {
100
- padding-inline: var(--details-px);
101
- padding-block: var(--details-py);
100
+ padding-inline: var(--details-padding-inline);
101
+ padding-block: var(--details-padding-block);
102
102
  margin-block-start: 0;
103
103
  border: 1px transparent solid;
104
104
  }
@@ -110,7 +110,7 @@ details {
110
110
  border-bottom: var(--details-border);
111
111
  }
112
112
  > section {
113
- max-height: var(--max-h-open);
113
+ max-height: var(--details-max-height-open);
114
114
  @starting-style {
115
115
  max-height: 0;
116
116
  }