sakana-element 2.3.0 → 2.4.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 (119) hide show
  1. package/README.md +5 -5
  2. package/dist/es/{Alert-BwTsp4X3.js → Alert-DRIDwear.js} +2 -2
  3. package/dist/es/{Avatar-CJu6JYV3.js → Avatar-Dkvvhw_D.js} +1 -1
  4. package/dist/es/{Badge-BmxZXX8k.js → Badge-CLNacHVq.js} +2 -2
  5. package/dist/es/{Breadcrumb-BP8MSklj.js → Breadcrumb-CfJA9NZz.js} +2 -2
  6. package/dist/es/{Button-BJHtN7gh.js → Button-Dj1DIvXh.js} +3 -3
  7. package/dist/es/{Card-DJHkCmsz.js → Card-meh7F1e2.js} +1 -1
  8. package/dist/es/ChatBubble-Ccr3wzoK.js +9 -0
  9. package/dist/es/{Checkbox-DX8L3fyp.js → Checkbox-vOcwl1OX.js} +3 -3
  10. package/dist/es/{Collapse-Ir3V9CuO.js → Collapse-BG58s0uJ.js} +4 -4
  11. package/dist/es/{ConfigProvider-CsbSqwwi.js → ConfigProvider-Cr8Hpzf2.js} +2 -2
  12. package/dist/es/Diff-KQ44cDcY.js +64 -0
  13. package/dist/es/{Divider-C7PtODSK.js → Divider-CYYeUqYc.js} +1 -1
  14. package/dist/es/{Drawer-C2eVmvUp.js → Drawer-CDXFDfrf.js} +2 -2
  15. package/dist/es/{Dropdown-CVg_c2fB.js → Dropdown-CPZtzHPx.js} +9 -9
  16. package/dist/es/{FileInput-BE26BmXm.js → FileInput-Ram4-wy2.js} +3 -3
  17. package/dist/es/Filter-CLLkrn-W.js +40 -0
  18. package/dist/es/{Form-7lZt5ehf.js → Form-po3aIrSN.js} +62 -61
  19. package/dist/es/{Icon-BLDDdSU-.js → Icon-XJfGGAMY.js} +1 -1
  20. package/dist/es/{Indicator-B-en-MgG.js → Indicator-vsSp5r5K.js} +1 -1
  21. package/dist/es/{Input-C5HuVehE.js → Input-KrNqNZMe.js} +5 -5
  22. package/dist/es/Kbd-CtCGx7_s.js +13 -0
  23. package/dist/es/{Link-Av9RdcFv.js → Link-Bbwdgs74.js} +1 -1
  24. package/dist/es/{Loading-CBNDUWQd.js → Loading-DiyIiKxO.js} +3 -3
  25. package/dist/es/{Message-DgnyyuXn.js → Message-BoNCtMo7.js} +14 -14
  26. package/dist/es/{Notification-LYRXnVAf.js → Notification-CFY-yvRf.js} +13 -13
  27. package/dist/es/{Overlay-CpvMhnuU.js → Overlay-DoFA2lgP.js} +1 -1
  28. package/dist/es/Pixelate-dqwHc6nX.js +39 -0
  29. package/dist/es/{Popconfirm-DvxFdLrw.js → Popconfirm-DPOujyiA.js} +12 -12
  30. package/dist/es/{Progress-Bc5INMhJ.js → Progress-B0oYE8Z3.js} +1 -1
  31. package/dist/es/{Radio-263_rtRl.js → Radio-C-Ot7pLA.js} +3 -3
  32. package/dist/es/Resizable-G5KVHayx.js +151 -0
  33. package/dist/es/{Select-7ZxUCS8z.js → Select-DqxPeAKK.js} +14 -14
  34. package/dist/es/Skeleton-4SeKRKn9.js +15 -0
  35. package/dist/es/{Switch-DiCsMJT3.js → Switch-C_tBxZtT.js} +3 -3
  36. package/dist/es/{Table-BvA_xzDe.js → Table-Cr6HFL4_.js} +1 -1
  37. package/dist/es/{Tooltip-J3ji6weH.js → Tooltip-rak4BryQ.js} +3 -3
  38. package/dist/es/Validator-DKVfknvI.js +40 -0
  39. package/dist/es/{hooks-BqobYUzS.js → hooks-pTjI-j9o.js} +51 -53
  40. package/dist/es/index.js +119 -90
  41. package/dist/es/utils-DzOow9K9.js +155 -0
  42. package/dist/es/{vendor-DXmGx29U.js → vendor-DrBJKLFW.js} +254 -210
  43. package/dist/index.css +1 -1
  44. package/dist/{es/theme → theme}/Badge.css +151 -151
  45. package/dist/{es/theme → theme}/Button.css +92 -8
  46. package/dist/theme/ChatBubble.css +218 -0
  47. package/dist/{es/theme → theme}/Checkbox.css +138 -18
  48. package/dist/{es/theme → theme}/Collapse.css +96 -96
  49. package/dist/theme/Diff.css +110 -0
  50. package/dist/{es/theme → theme}/Divider.css +42 -3
  51. package/dist/{es/theme → theme}/Dropdown.css +2 -2
  52. package/dist/{es/theme → theme}/FileInput.css +32 -0
  53. package/dist/theme/Filter.css +598 -0
  54. package/dist/{es/theme → theme}/Input.css +414 -407
  55. package/dist/theme/Kbd.css +104 -0
  56. package/dist/{es/theme → theme}/Message.css +1 -1
  57. package/dist/{es/theme → theme}/Notification.css +44 -44
  58. package/dist/{es/theme → theme}/Radio.css +114 -48
  59. package/dist/theme/Resizable.css +95 -0
  60. package/dist/{es/theme → theme}/Select.css +198 -88
  61. package/dist/theme/Skeleton.css +192 -0
  62. package/dist/{es/theme → theme}/Switch.css +22 -3
  63. package/dist/theme/Validator.css +25 -0
  64. package/dist/types/components/ChatBubble/constants.d.ts +2 -0
  65. package/dist/types/components/ChatBubble/index.d.ts +27 -0
  66. package/dist/types/components/ChatBubble/types.d.ts +10 -0
  67. package/dist/types/components/Diff/constants.d.ts +4 -0
  68. package/dist/types/components/Diff/index.d.ts +67 -0
  69. package/dist/types/components/Diff/types.d.ts +29 -0
  70. package/dist/types/components/Dropdown/index.d.ts +3 -3
  71. package/dist/types/components/Filter/constants.d.ts +5 -0
  72. package/dist/types/components/Filter/index.d.ts +59 -0
  73. package/dist/types/components/Filter/types.d.ts +38 -0
  74. package/dist/types/components/Icon/index.d.ts +1 -0
  75. package/dist/types/components/Kbd/constants.d.ts +3 -0
  76. package/dist/types/components/Kbd/index.d.ts +24 -0
  77. package/dist/types/components/Kbd/types.d.ts +10 -0
  78. package/dist/types/components/Pixelate/index.d.ts +3 -3
  79. package/dist/types/components/Popconfirm/index.d.ts +3 -3
  80. package/dist/types/components/Resizable/constants.d.ts +3 -0
  81. package/dist/types/components/Resizable/index.d.ts +135 -0
  82. package/dist/types/components/Resizable/types.d.ts +52 -0
  83. package/dist/types/components/Select/index.d.ts +3 -3
  84. package/dist/types/components/Skeleton/index.d.ts +36 -0
  85. package/dist/types/components/Skeleton/types.d.ts +12 -0
  86. package/dist/types/components/Tooltip/index.d.ts +3 -3
  87. package/dist/types/components/Validator/index.d.ts +52 -0
  88. package/dist/types/components/Validator/types.d.ts +13 -0
  89. package/dist/types/components/index.d.ts +8 -1
  90. package/dist/types/core/index.d.ts +1 -1
  91. package/dist/types/hooks/index.d.ts +2 -0
  92. package/dist/types/hooks/useFocusController.d.ts +1 -1
  93. package/dist/types/utils/index.d.ts +1 -0
  94. package/dist/types/utils/pixelate.d.ts +10 -0
  95. package/dist/types/utils/style.d.ts +1 -0
  96. package/dist/umd/index.css +1 -1
  97. package/dist/umd/index.css.gz +0 -0
  98. package/dist/umd/index.umd.cjs +3 -3
  99. package/dist/umd/index.umd.cjs.gz +0 -0
  100. package/package.json +4 -4
  101. package/dist/es/Pixelate-BPypBgJU.js +0 -67
  102. package/dist/es/utils-BS5vsvlM.js +0 -101
  103. /package/dist/{es/theme → theme}/Alert.css +0 -0
  104. /package/dist/{es/theme → theme}/Avatar.css +0 -0
  105. /package/dist/{es/theme → theme}/Breadcrumb.css +0 -0
  106. /package/dist/{es/theme → theme}/Card.css +0 -0
  107. /package/dist/{es/theme → theme}/Drawer.css +0 -0
  108. /package/dist/{es/theme → theme}/Form.css +0 -0
  109. /package/dist/{es/theme → theme}/Icon.css +0 -0
  110. /package/dist/{es/theme → theme}/Indicator.css +0 -0
  111. /package/dist/{es/theme → theme}/Link.css +0 -0
  112. /package/dist/{es/theme → theme}/Loading.css +0 -0
  113. /package/dist/{es/theme → theme}/Overlay.css +0 -0
  114. /package/dist/{es/theme → theme}/Popconfirm.css +0 -0
  115. /package/dist/{es/theme → theme}/Progress.css +0 -0
  116. /package/dist/{es/theme → theme}/Table.css +0 -0
  117. /package/dist/{es/theme → theme}/Tooltip.css +0 -0
  118. /package/dist/{es/theme → theme}/fonts/zpix.woff2 +0 -0
  119. /package/dist/{es/theme → theme}/index.css +0 -0
@@ -0,0 +1,218 @@
1
+ /* ChatBubble Variables */
2
+ .px-chat[data-v-c022026d] {
3
+ --px-chat-bubble-bg-color: var(--px-fill-color-light);
4
+ --px-chat-bubble-text-color: var(--px-text-color-primary);
5
+ --px-chat-bubble-border-color: var(--px-border-color);
6
+ --px-chat-bubble-shadow-color: var(--px-shadow-color);
7
+ --px-chat-header-color: var(--px-text-color-secondary);
8
+ --px-chat-footer-color: var(--px-text-color-placeholder);
9
+
10
+ /* Beveled inset for 3D raised-bubble depth */
11
+ --px-chat-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
12
+ --px-chat-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.06);
13
+ }
14
+ /* Base ChatBubble Styles - Pixel Game Aesthetic */
15
+ .px-chat[data-v-c022026d] {
16
+ display: flex;
17
+ align-items: flex-start;
18
+ gap: 8px;
19
+ font-family: var(--px-font-family);
20
+ font-size: var(--px-font-size-base);
21
+ box-sizing: border-box;
22
+ transition: none;
23
+ }
24
+ /* Placement variants */
25
+ .px-chat--start[data-v-c022026d] {
26
+ flex-direction: row;
27
+ }
28
+ .px-chat--start .px-chat__header[data-v-c022026d] {
29
+ text-align: left;
30
+ }
31
+ .px-chat--start .px-chat__footer[data-v-c022026d] {
32
+ text-align: left;
33
+ }
34
+ /* Tail pointing left — positioned inside bubble */
35
+ .px-chat--start .px-chat__tail[data-v-c022026d] {
36
+ left: -6px;
37
+
38
+ /* Border layer: 4-step staircase pointing left */
39
+ background: var(--px-chat-bubble-border-color);
40
+ clip-path: polygon(
41
+ 6px 0, 8px 0,
42
+ 8px 8px,
43
+ 0 8px, 0 6px,
44
+ 2px 6px, 2px 4px,
45
+ 4px 4px, 4px 2px,
46
+ 6px 2px
47
+ );
48
+ }
49
+ /* Fill layer */
50
+ .px-chat--start .px-chat__tail[data-v-c022026d]::after {
51
+ content: '';
52
+ position: absolute;
53
+ inset: 0;
54
+ background: var(--px-chat-bubble-bg-color);
55
+ clip-path: polygon(
56
+ 6px 2px, 8px 2px,
57
+ 8px 6px,
58
+ 4px 6px, 4px 4px,
59
+ 6px 4px
60
+ );
61
+ }
62
+ .px-chat--end[data-v-c022026d] {
63
+ flex-direction: row-reverse;
64
+ }
65
+ .px-chat--end .px-chat__header[data-v-c022026d] {
66
+ text-align: right;
67
+ }
68
+ .px-chat--end .px-chat__footer[data-v-c022026d] {
69
+ text-align: right;
70
+ }
71
+ /* Tail pointing right — mirror of left */
72
+ .px-chat--end .px-chat__tail[data-v-c022026d] {
73
+ right: -6px;
74
+ left: auto;
75
+
76
+ /* Border layer: 4-step staircase pointing right */
77
+ background: var(--px-chat-bubble-border-color);
78
+ clip-path: polygon(
79
+ 0 0, 2px 0,
80
+ 2px 2px, 4px 2px,
81
+ 4px 4px, 6px 4px,
82
+ 6px 6px, 8px 6px,
83
+ 8px 8px, 0 8px
84
+ );
85
+ }
86
+ /* Fill layer */
87
+ .px-chat--end .px-chat__tail[data-v-c022026d]::after {
88
+ content: '';
89
+ position: absolute;
90
+ inset: 0;
91
+ background: var(--px-chat-bubble-bg-color);
92
+ clip-path: polygon(
93
+ 0 2px, 2px 2px,
94
+ 2px 4px, 4px 4px,
95
+ 4px 6px, 0 6px
96
+ );
97
+ }
98
+ /* Avatar */
99
+ .px-chat__avatar[data-v-c022026d] {
100
+ flex-shrink: 0;
101
+ }
102
+ /* Content wrapper */
103
+ .px-chat__content[data-v-c022026d] {
104
+ position: relative;
105
+ display: flex;
106
+ flex-direction: column;
107
+ gap: 4px;
108
+ max-width: 80%;
109
+ }
110
+ /* Header */
111
+ .px-chat__header[data-v-c022026d] {
112
+ display: flex;
113
+ align-items: center;
114
+ gap: 8px;
115
+ font-size: var(--px-font-size-small);
116
+ color: var(--px-chat-header-color);
117
+ line-height: 1.2;
118
+ }
119
+ .px-chat__name[data-v-c022026d] {
120
+ font-weight: 600;
121
+ }
122
+ .px-chat__time[data-v-c022026d] {
123
+ font-size: var(--px-font-size-extra-small);
124
+ opacity: 0.7;
125
+ }
126
+ /* Tail — positioned inside bubble (which is position:relative) */
127
+ .px-chat__tail[data-v-c022026d] {
128
+ position: absolute;
129
+ top: 8px;
130
+ width: 8px;
131
+ height: 8px;
132
+ z-index: 1;
133
+ }
134
+ /* Bubble — pixel border via pseudo-elements */
135
+ .px-chat__bubble[data-v-c022026d] {
136
+ position: relative;
137
+ padding: 8px 12px;
138
+ color: var(--px-chat-bubble-text-color);
139
+ background: transparent;
140
+ border: none;
141
+ line-height: 1.5;
142
+ word-break: break-word;
143
+
144
+ filter: drop-shadow(2px 2px 0px var(--px-chat-bubble-shadow-color));
145
+ }
146
+ /* Border layer */
147
+ .px-chat__bubble[data-v-c022026d]::before {
148
+ content: '';
149
+ position: absolute;
150
+ inset: 0;
151
+ background: var(--px-chat-bubble-border-color);
152
+ clip-path: polygon(
153
+ 0 2px, 2px 2px, 2px 0,
154
+ calc(100% - 2px) 0, calc(100% - 2px) 2px, 100% 2px,
155
+ 100% calc(100% - 2px), calc(100% - 2px) calc(100% - 2px), calc(100% - 2px) 100%,
156
+ 2px 100%, 2px calc(100% - 2px), 0 calc(100% - 2px)
157
+ );
158
+ z-index: -1;
159
+ }
160
+ /* Fill layer */
161
+ .px-chat__bubble[data-v-c022026d]::after {
162
+ content: '';
163
+ position: absolute;
164
+ inset: 2px;
165
+ background: var(--px-chat-bubble-bg-color);
166
+ clip-path: polygon(
167
+ 0 2px, 2px 2px, 2px 0,
168
+ calc(100% - 2px) 0, calc(100% - 2px) 2px, 100% 2px,
169
+ 100% calc(100% - 2px), calc(100% - 2px) calc(100% - 2px), calc(100% - 2px) 100%,
170
+ 2px 100%, 2px calc(100% - 2px), 0 calc(100% - 2px)
171
+ );
172
+ box-shadow: var(--px-chat-inset-highlight), var(--px-chat-inset-shadow);
173
+ z-index: -1;
174
+ }
175
+ /* Footer */
176
+ .px-chat__footer[data-v-c022026d] {
177
+ font-size: var(--px-font-size-extra-small);
178
+ color: var(--px-chat-footer-color);
179
+ line-height: 1.2;
180
+ }
181
+ /* Type variants */
182
+ .px-chat--primary[data-v-c022026d] {
183
+ --px-chat-bubble-text-color: var(--px-color-white);
184
+ --px-chat-bubble-bg-color: var(--px-color-primary);
185
+ --px-chat-bubble-border-color: var(--px-color-primary-dark);
186
+ --px-chat-bubble-shadow-color: var(--px-color-primary-dark);
187
+ }
188
+ .px-chat--success[data-v-c022026d] {
189
+ --px-chat-bubble-text-color: var(--px-color-white);
190
+ --px-chat-bubble-bg-color: var(--px-color-success);
191
+ --px-chat-bubble-border-color: var(--px-color-success-dark);
192
+ --px-chat-bubble-shadow-color: var(--px-color-success-dark);
193
+ }
194
+ .px-chat--info[data-v-c022026d] {
195
+ --px-chat-bubble-text-color: var(--px-color-white);
196
+ --px-chat-bubble-bg-color: var(--px-color-info);
197
+ --px-chat-bubble-border-color: var(--px-color-info-dark);
198
+ --px-chat-bubble-shadow-color: var(--px-color-info-dark);
199
+ }
200
+ .px-chat--warning[data-v-c022026d] {
201
+ --px-chat-bubble-text-color: var(--px-color-white);
202
+ --px-chat-bubble-bg-color: var(--px-color-warning);
203
+ --px-chat-bubble-border-color: var(--px-color-warning-dark);
204
+ --px-chat-bubble-shadow-color: var(--px-color-warning-dark);
205
+ }
206
+ .px-chat--danger[data-v-c022026d] {
207
+ --px-chat-bubble-text-color: var(--px-color-white);
208
+ --px-chat-bubble-bg-color: var(--px-color-danger);
209
+ --px-chat-bubble-border-color: var(--px-color-danger-dark);
210
+ --px-chat-bubble-shadow-color: var(--px-color-danger-dark);
211
+ }
212
+ /* Dark mode */
213
+ html.dark .px-chat[data-v-c022026d],
214
+ .px-dark .px-chat[data-v-c022026d] {
215
+ --px-chat-bubble-bg-color: var(--px-fill-color-light);
216
+ --px-chat-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
217
+ --px-chat-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.15);
218
+ }
@@ -6,6 +6,10 @@
6
6
  --px-checkbox-border-color: var(--px-border-color);
7
7
  --px-checkbox-bg-color: var(--px-fill-color-blank);
8
8
  --px-checkbox-shadow-color: var(--px-shadow-color);
9
+
10
+ /* 3D bevel — sunken look (unchecked) */
11
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
12
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
9
13
  }
10
14
  /* Base Checkbox Styles */
11
15
  .px-checkbox {
@@ -36,12 +40,25 @@
36
40
  .px-checkbox.is-checked .px-checkbox__inner .px-checkbox__tick, .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
37
41
  opacity: 1;
38
42
  }
39
- /* Checked state */
43
+ /* Checked state — raised bevel */
44
+ .px-checkbox.is-checked {
45
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
46
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
47
+ }
40
48
  .px-checkbox.is-checked .px-checkbox__input {
41
49
  filter: drop-shadow(
42
50
  var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-checkbox-checked-border-color)
43
51
  );
44
52
  }
53
+ /* Hover feedback */
54
+ .px-checkbox:hover:not(.is-disabled) .px-checkbox__inner::after {
55
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
56
+ }
57
+ /* Active/pressed feedback */
58
+ .px-checkbox:active:not(.is-disabled) .px-checkbox__inner::after {
59
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
60
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.15);
61
+ }
45
62
  /* Indeterminate state */
46
63
  .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
47
64
  /* Override checkmark with a pixel-art horizontal dash */
@@ -152,13 +169,16 @@
152
169
  clip-path: var(--px-checkbox-pixel-corners);
153
170
  z-index: 0;
154
171
  }
155
- /* Fill layer - pixel shape */
172
+ /* Fill layer - pixel shape with 3D bevel */
156
173
  .px-checkbox__inner::after {
157
174
  content: "";
158
175
  position: absolute;
159
176
  inset: 2px;
160
177
  background: var(--px-checkbox-bg-color);
161
178
  clip-path: var(--px-checkbox-pixel-corners);
179
+ box-shadow:
180
+ var(--px-checkbox-inset-highlight),
181
+ var(--px-checkbox-inset-shadow);
162
182
  z-index: 0;
163
183
  }
164
184
  /* Pixel checkmark */
@@ -168,14 +188,45 @@
168
188
  width: 10px;
169
189
  height: 10px;
170
190
  opacity: 0;
171
- /* Pixel-art checkmark (✓) via clip-path */
191
+ /* Pixel staircase checkmark (✓) stepped 2px increments */
172
192
  clip-path: polygon(
173
- 15% 50%,
174
- 35% 70%,
175
- 85% 20%,
176
- 85% 40%,
177
- 35% 90%,
178
- 15% 70%
193
+ /* Left arm descending */
194
+ 10% 40%,
195
+ 10% 60%,
196
+ 20% 60%,
197
+ 20% 70%,
198
+ 30% 70%,
199
+ 30% 80%,
200
+ /* Bottom vertex */
201
+ 40% 80%,
202
+ 40% 90%,
203
+ 50% 90%,
204
+ 50% 80%,
205
+ /* Right arm ascending */
206
+ 60% 80%,
207
+ 60% 70%,
208
+ 70% 70%,
209
+ 70% 60%,
210
+ 80% 60%,
211
+ 80% 50%,
212
+ 90% 50%,
213
+ 90% 30%,
214
+ /* Top of right arm */
215
+ 80% 30%,
216
+ 80% 40%,
217
+ 70% 40%,
218
+ 70% 50%,
219
+ 60% 50%,
220
+ 60% 60%,
221
+ 50% 60%,
222
+ 50% 70%,
223
+ /* Return along inner edge */
224
+ 40% 70%,
225
+ 40% 60%,
226
+ 30% 60%,
227
+ 30% 50%,
228
+ 20% 50%,
229
+ 20% 40%
179
230
  );
180
231
  background: var(--px-fill-color-blank);
181
232
  }
@@ -233,6 +284,15 @@
233
284
  var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
234
285
  );
235
286
  }
287
+ /* Dark mode bevel adjustment */
288
+ html.dark .px-checkbox {
289
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.08);
290
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
291
+ }
292
+ html.dark .px-checkbox.is-checked {
293
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
294
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
295
+ }
236
296
  /* Checkbox Group */
237
297
  .px-checkbox-group {
238
298
  display: inline-flex;
@@ -248,6 +308,10 @@
248
308
  --px-checkbox-border-color: var(--px-border-color);
249
309
  --px-checkbox-bg-color: var(--px-fill-color-blank);
250
310
  --px-checkbox-shadow-color: var(--px-shadow-color);
311
+
312
+ /* 3D bevel — sunken look (unchecked) */
313
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
314
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.1);
251
315
  }
252
316
  /* Base Checkbox Styles */
253
317
  .px-checkbox {
@@ -278,12 +342,25 @@
278
342
  .px-checkbox.is-checked .px-checkbox__inner .px-checkbox__tick, .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
279
343
  opacity: 1;
280
344
  }
281
- /* Checked state */
345
+ /* Checked state — raised bevel */
346
+ .px-checkbox.is-checked {
347
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.2);
348
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.1);
349
+ }
282
350
  .px-checkbox.is-checked .px-checkbox__input {
283
351
  filter: drop-shadow(
284
352
  var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-checkbox-checked-border-color)
285
353
  );
286
354
  }
355
+ /* Hover feedback */
356
+ .px-checkbox:hover:not(.is-disabled) .px-checkbox__inner::after {
357
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.35);
358
+ }
359
+ /* Active/pressed feedback */
360
+ .px-checkbox:active:not(.is-disabled) .px-checkbox__inner::after {
361
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.2);
362
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.15);
363
+ }
287
364
  /* Indeterminate state */
288
365
  .px-checkbox.is-indeterminate .px-checkbox__inner .px-checkbox__tick {
289
366
  /* Override checkmark with a pixel-art horizontal dash */
@@ -394,13 +471,16 @@
394
471
  clip-path: var(--px-checkbox-pixel-corners);
395
472
  z-index: 0;
396
473
  }
397
- /* Fill layer - pixel shape */
474
+ /* Fill layer - pixel shape with 3D bevel */
398
475
  .px-checkbox__inner::after {
399
476
  content: "";
400
477
  position: absolute;
401
478
  inset: 2px;
402
479
  background: var(--px-checkbox-bg-color);
403
480
  clip-path: var(--px-checkbox-pixel-corners);
481
+ box-shadow:
482
+ var(--px-checkbox-inset-highlight),
483
+ var(--px-checkbox-inset-shadow);
404
484
  z-index: 0;
405
485
  }
406
486
  /* Pixel checkmark */
@@ -410,14 +490,45 @@
410
490
  width: 10px;
411
491
  height: 10px;
412
492
  opacity: 0;
413
- /* Pixel-art checkmark (✓) via clip-path */
493
+ /* Pixel staircase checkmark (✓) stepped 2px increments */
414
494
  clip-path: polygon(
415
- 15% 50%,
416
- 35% 70%,
417
- 85% 20%,
418
- 85% 40%,
419
- 35% 90%,
420
- 15% 70%
495
+ /* Left arm descending */
496
+ 10% 40%,
497
+ 10% 60%,
498
+ 20% 60%,
499
+ 20% 70%,
500
+ 30% 70%,
501
+ 30% 80%,
502
+ /* Bottom vertex */
503
+ 40% 80%,
504
+ 40% 90%,
505
+ 50% 90%,
506
+ 50% 80%,
507
+ /* Right arm ascending */
508
+ 60% 80%,
509
+ 60% 70%,
510
+ 70% 70%,
511
+ 70% 60%,
512
+ 80% 60%,
513
+ 80% 50%,
514
+ 90% 50%,
515
+ 90% 30%,
516
+ /* Top of right arm */
517
+ 80% 30%,
518
+ 80% 40%,
519
+ 70% 40%,
520
+ 70% 50%,
521
+ 60% 50%,
522
+ 60% 60%,
523
+ 50% 60%,
524
+ 50% 70%,
525
+ /* Return along inner edge */
526
+ 40% 70%,
527
+ 40% 60%,
528
+ 30% 60%,
529
+ 30% 50%,
530
+ 20% 50%,
531
+ 20% 40%
421
532
  );
422
533
  background: var(--px-fill-color-blank);
423
534
  }
@@ -475,6 +586,15 @@
475
586
  var(--px-shadow-offset-x) var(--px-shadow-offset-y) 0px var(--px-color-danger-dark)
476
587
  );
477
588
  }
589
+ /* Dark mode bevel adjustment */
590
+ html.dark .px-checkbox {
591
+ --px-checkbox-inset-highlight: inset -2px -2px 0 0 rgba(255, 255, 255, 0.08);
592
+ --px-checkbox-inset-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.2);
593
+ }
594
+ html.dark .px-checkbox.is-checked {
595
+ --px-checkbox-inset-highlight: inset 2px 2px 0 0 rgba(255, 255, 255, 0.08);
596
+ --px-checkbox-inset-shadow: inset -2px -2px 0 0 rgba(0, 0, 0, 0.2);
597
+ }
478
598
  /* Checkbox Group */
479
599
  .px-checkbox-group {
480
600
  display: inline-flex;