@fangxinyan/lumina 0.6.2 → 0.6.4

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 (284) hide show
  1. package/README.md +2 -1
  2. package/dist/{Alert-JJ7GB3UU.css → Alert-HVPI6L4V.css} +9 -2
  3. package/dist/Alert.cjs +3 -3
  4. package/dist/Alert.d.cts +3 -2
  5. package/dist/Alert.d.ts +3 -2
  6. package/dist/Alert.js +2 -2
  7. package/dist/{AppShell-RCALXUCZ.css → AppShell-FZCD4C56.css} +4 -4
  8. package/dist/AppShell.cjs +5 -5
  9. package/dist/AppShell.js +1 -1
  10. package/dist/{AutoComplete-P5KZMZO5.css → AutoComplete-4YZBMW4E.css} +2 -2
  11. package/dist/AutoComplete.cjs +5 -5
  12. package/dist/AutoComplete.js +4 -4
  13. package/dist/{Avatar-R5A4AFKZ.css → Avatar-TNPOHVY5.css} +1 -1
  14. package/dist/Avatar.cjs +2 -2
  15. package/dist/Avatar.js +1 -1
  16. package/dist/Badge.cjs +2 -2
  17. package/dist/Badge.d.cts +1 -0
  18. package/dist/Badge.d.ts +1 -0
  19. package/dist/Badge.js +1 -1
  20. package/dist/Button-TUMZUQLI.css +118 -0
  21. package/dist/Button.cjs +3 -3
  22. package/dist/Button.d.cts +6 -5
  23. package/dist/Button.d.ts +6 -5
  24. package/dist/Button.js +2 -2
  25. package/dist/{Calendar-LHZELUDL.css → Calendar-RUTPKREW.css} +4 -4
  26. package/dist/Calendar.cjs +3 -3
  27. package/dist/Calendar.js +2 -2
  28. package/dist/{Card-6RMVIHWX.css → Card-MA6SV7D5.css} +6 -6
  29. package/dist/Card.cjs +2 -2
  30. package/dist/Card.js +1 -1
  31. package/dist/{Cascader-C2DFSMKJ.css → Cascader-ANEQUPMI.css} +21 -8
  32. package/dist/Cascader.cjs +5 -5
  33. package/dist/Cascader.d.cts +4 -2
  34. package/dist/Cascader.d.ts +4 -2
  35. package/dist/Cascader.js +4 -4
  36. package/dist/{Checkbox-U5EUDSYS.css → Checkbox-EDNPZRIP.css} +3 -3
  37. package/dist/Checkbox.cjs +3 -3
  38. package/dist/Checkbox.js +2 -2
  39. package/dist/{Collapse-66U5YJFY.css → Collapse-UNBHEPYP.css} +2 -2
  40. package/dist/Collapse.cjs +3 -3
  41. package/dist/Collapse.js +2 -2
  42. package/dist/{ColorPicker-SDDQGHCM.css → ColorPicker-LPG6QPYF.css} +7 -7
  43. package/dist/ColorPicker.cjs +2 -2
  44. package/dist/ColorPicker.js +1 -1
  45. package/dist/{CommandPalette-T45DBMPY.css → CommandPalette-RTKWNH2D.css} +3 -3
  46. package/dist/CommandPalette.cjs +5 -5
  47. package/dist/CommandPalette.js +4 -4
  48. package/dist/{ContextMenu-FKW6CQW4.css → ContextMenu-WRR2SSWL.css} +3 -3
  49. package/dist/ContextMenu.cjs +2 -2
  50. package/dist/ContextMenu.js +1 -1
  51. package/dist/{Divider-OEE4Q2KS.css → Divider-RPQCVH3J.css} +2 -2
  52. package/dist/Divider.cjs +2 -2
  53. package/dist/Divider.js +1 -1
  54. package/dist/{Drawer-IPGB4CXH.css → Drawer-7N3URAJ6.css} +8 -5
  55. package/dist/Drawer.cjs +3 -3
  56. package/dist/Drawer.js +2 -2
  57. package/dist/{Empty-DC2LPORC.css → Empty-CZTRZMZQ.css} +1 -1
  58. package/dist/Empty.cjs +2 -2
  59. package/dist/Empty.js +1 -1
  60. package/dist/{Form-5GRVZNDO.css → Form-NGCQWTMZ.css} +1 -1
  61. package/dist/Form.cjs +4 -4
  62. package/dist/Form.js +1 -1
  63. package/dist/Icon.cjs +55 -47
  64. package/dist/Icon.d.cts +9 -1
  65. package/dist/Icon.d.ts +9 -1
  66. package/dist/Icon.js +1 -1
  67. package/dist/{Image-4MN34O6P.css → Image-SGSRTHQX.css} +81 -3
  68. package/dist/Image.cjs +12 -4
  69. package/dist/Image.d.cts +79 -6
  70. package/dist/Image.d.ts +79 -6
  71. package/dist/Image.js +2 -2
  72. package/dist/{Input-3G4ONWNU.css → Input-7GDPGP3E.css} +22 -12
  73. package/dist/Input.cjs +5 -5
  74. package/dist/Input.d.cts +4 -3
  75. package/dist/Input.d.ts +4 -3
  76. package/dist/Input.js +3 -3
  77. package/dist/InputNumber.cjs +5 -5
  78. package/dist/InputNumber.js +4 -4
  79. package/dist/{List-W5BW4D2P.css → List-LSMU5QAC.css} +3 -3
  80. package/dist/List.cjs +2 -2
  81. package/dist/List.js +1 -1
  82. package/dist/{Message-2MZ3LFPU.css → Message-H222YGR6.css} +1 -1
  83. package/dist/Message.cjs +6 -6
  84. package/dist/Message.js +2 -2
  85. package/dist/{Modal-2QNDW4SO.css → Modal-MCFDYVUQ.css} +3 -3
  86. package/dist/Modal.cjs +4 -4
  87. package/dist/Modal.d.cts +1 -0
  88. package/dist/Modal.d.ts +1 -0
  89. package/dist/Modal.js +3 -3
  90. package/dist/{Pagination-YIRYJUXP.css → Pagination-YSZSNFHG.css} +5 -5
  91. package/dist/Pagination.cjs +7 -7
  92. package/dist/Pagination.js +6 -6
  93. package/dist/{Popover-DVGQGWX6.css → Popover-Y3LDCJPW.css} +1 -1
  94. package/dist/Popover.cjs +2 -2
  95. package/dist/Popover.js +1 -1
  96. package/dist/{Progress-CHV7DN6Y.css → Progress-CZNXCYGW.css} +1 -1
  97. package/dist/Progress.cjs +2 -2
  98. package/dist/Progress.js +1 -1
  99. package/dist/{Radio-GVFDPAZM.css → Radio-IQKASYDF.css} +4 -4
  100. package/dist/Radio.cjs +3 -3
  101. package/dist/Radio.js +1 -1
  102. package/dist/{Select-JVBQAZBG.css → Select-YZ2NUJSX.css} +44 -19
  103. package/dist/Select.cjs +6 -6
  104. package/dist/Select.d.cts +4 -3
  105. package/dist/Select.d.ts +4 -3
  106. package/dist/Select.js +5 -5
  107. package/dist/Skeleton.cjs +2 -2
  108. package/dist/Skeleton.js +1 -1
  109. package/dist/{Slider-3JKA5EW6.css → Slider-UM2IZZBH.css} +7 -7
  110. package/dist/Slider.cjs +2 -2
  111. package/dist/Slider.js +1 -1
  112. package/dist/{Spin-3GJNMSIH.css → Spin-GONGPV4Q.css} +1 -1
  113. package/dist/Spin.cjs +2 -2
  114. package/dist/Spin.js +1 -1
  115. package/dist/Splitter.cjs +2 -2
  116. package/dist/Splitter.js +1 -1
  117. package/dist/{StatusBar-CDS2GPSI.css → StatusBar-FJKEEPXU.css} +3 -7
  118. package/dist/StatusBar.cjs +3 -3
  119. package/dist/StatusBar.js +1 -1
  120. package/dist/Surface-UDDN3DGL.css +42 -0
  121. package/dist/Surface.cjs +16 -0
  122. package/dist/Surface.d.cts +60 -0
  123. package/dist/Surface.d.ts +60 -0
  124. package/dist/Surface.js +3 -0
  125. package/dist/{Switch-36KJNDXM.css → Switch-COAQIOMH.css} +8 -5
  126. package/dist/Switch.cjs +2 -2
  127. package/dist/Switch.js +1 -1
  128. package/dist/{Table-ATJJQLKU.css → Table-IYJTPY6J.css} +16 -16
  129. package/dist/Table.cjs +9 -9
  130. package/dist/Table.js +8 -8
  131. package/dist/{TablePro-3XVHYLSL.css → TablePro-JRSBPXB5.css} +1 -1
  132. package/dist/TablePro.cjs +10 -10
  133. package/dist/TablePro.js +9 -9
  134. package/dist/{Tabs-BLSNI2T5.css → Tabs-X5U5PCPV.css} +2 -2
  135. package/dist/Tabs.cjs +2 -2
  136. package/dist/Tabs.js +1 -1
  137. package/dist/{Tag-LB3OOJAO.css → Tag-G2XWAL7A.css} +15 -2
  138. package/dist/Tag.cjs +3 -3
  139. package/dist/Tag.d.cts +4 -3
  140. package/dist/Tag.d.ts +4 -3
  141. package/dist/Tag.js +2 -2
  142. package/dist/{Textarea-YNET7IBH.css → Textarea-YHWKHIFE.css} +3 -3
  143. package/dist/Textarea.cjs +4 -4
  144. package/dist/Textarea.js +2 -2
  145. package/dist/Theme.cjs +14 -10
  146. package/dist/Theme.d.cts +34 -7
  147. package/dist/Theme.d.ts +34 -7
  148. package/dist/Theme.js +1 -1
  149. package/dist/ThemePanel-76LB3YA5.css +509 -0
  150. package/dist/ThemePanel.cjs +29 -0
  151. package/dist/ThemePanel.d.cts +80 -0
  152. package/dist/ThemePanel.d.ts +80 -0
  153. package/dist/ThemePanel.js +12 -0
  154. package/dist/{Timeline-3ZHOHPXT.css → Timeline-ZIM7QFQC.css} +1 -1
  155. package/dist/Timeline.cjs +3 -3
  156. package/dist/Timeline.js +2 -2
  157. package/dist/{Tooltip-DMKUPC24.css → Tooltip-WI23DSRQ.css} +1 -1
  158. package/dist/Tooltip.cjs +2 -2
  159. package/dist/Tooltip.js +1 -1
  160. package/dist/{Typography-NKPWTJCV.css → Typography-GQNIJ4XD.css} +5 -5
  161. package/dist/Typography.cjs +7 -7
  162. package/dist/Typography.d.cts +1 -0
  163. package/dist/Typography.d.ts +1 -0
  164. package/dist/Typography.js +2 -2
  165. package/dist/chunk-2NT5QKEX.js +243 -0
  166. package/dist/{chunk-6BWELOCT.js → chunk-2SCXQ7QS.js} +2 -2
  167. package/dist/{chunk-5WAXZJG5.cjs → chunk-2ZADGBUN.cjs} +6 -6
  168. package/dist/{chunk-7NGMQIST.js → chunk-2ZFJTMEF.js} +4 -4
  169. package/dist/{chunk-UMDGS4BP.js → chunk-3YP7CBJT.js} +5 -5
  170. package/dist/{chunk-UUHFKIWP.cjs → chunk-4UKM4KAC.cjs} +2 -2
  171. package/dist/{chunk-WGZ2KJTZ.js → chunk-56PHETWO.js} +3 -3
  172. package/dist/{chunk-MQV2XN4B.cjs → chunk-5JPAUQ5H.cjs} +7 -7
  173. package/dist/{chunk-OQBDU5I2.cjs → chunk-5NFSDFBB.cjs} +4 -4
  174. package/dist/{chunk-SKMP2A5O.cjs → chunk-66GXZQKL.cjs} +4 -4
  175. package/dist/{chunk-TZJH5HBT.cjs → chunk-66T76GII.cjs} +6 -6
  176. package/dist/chunk-6EOSMK34.cjs +194 -0
  177. package/dist/{chunk-WNM5RVXR.cjs → chunk-6GQPF3EI.cjs} +2 -2
  178. package/dist/{chunk-TJII7BQ2.cjs → chunk-6LARTGLP.cjs} +11 -1
  179. package/dist/chunk-6SPMHY54.js +191 -0
  180. package/dist/{chunk-YLIQ37KY.cjs → chunk-6XVLERA3.cjs} +2 -2
  181. package/dist/{chunk-WKKSAGYH.js → chunk-7D76MI37.js} +8 -8
  182. package/dist/chunk-7NZ2A4MA.js +495 -0
  183. package/dist/{chunk-KLEKKZ73.js → chunk-7ZNGHWVS.js} +1 -1
  184. package/dist/{chunk-4WTU5P3O.cjs → chunk-ACQSRMLF.cjs} +5 -5
  185. package/dist/{chunk-FFZ6OMZI.js → chunk-AJH2O4WC.js} +3 -3
  186. package/dist/{chunk-CXWEOAVU.js → chunk-BCFCSVGJ.js} +3 -3
  187. package/dist/{chunk-NTS5L4NQ.cjs → chunk-BJ6WUVEG.cjs} +4 -4
  188. package/dist/{chunk-S3VXH5L4.cjs → chunk-C24W6PTJ.cjs} +2 -2
  189. package/dist/{chunk-GMN74OEY.cjs → chunk-CBKJXKVI.cjs} +2 -2
  190. package/dist/{chunk-33NCTOEB.js → chunk-CEZ2DR4R.js} +3 -3
  191. package/dist/{chunk-JD7A6VM3.js → chunk-CNGKJYGZ.js} +6 -6
  192. package/dist/{chunk-TEG7NJHS.cjs → chunk-D5PCIVID.cjs} +4 -4
  193. package/dist/{chunk-K2KYM7LW.cjs → chunk-D64IPDUE.cjs} +4 -4
  194. package/dist/chunk-DYHNOYRC.cjs +271 -0
  195. package/dist/{chunk-CUXV6QNN.cjs → chunk-DYSGXQUK.cjs} +7 -7
  196. package/dist/{chunk-3YJU3D5S.cjs → chunk-F3LHLYX6.cjs} +2 -2
  197. package/dist/{chunk-HPFQXYKG.cjs → chunk-GBKUGKIY.cjs} +11 -11
  198. package/dist/{chunk-MUXP7ASL.js → chunk-GUZ2DNDC.js} +3 -3
  199. package/dist/{chunk-K6F25JXT.js → chunk-GZCU6HXD.js} +2 -2
  200. package/dist/{chunk-USQ43DJ5.js → chunk-HFUHQUPQ.js} +2 -2
  201. package/dist/{chunk-7JN6FJ55.js → chunk-HU7T64Y3.js} +2 -2
  202. package/dist/{chunk-OYMJVU66.cjs → chunk-IDJCFYPP.cjs} +16 -16
  203. package/dist/{chunk-KD4YYIIO.cjs → chunk-IHK2FRTS.cjs} +2 -2
  204. package/dist/{chunk-Q5SZIU7Z.cjs → chunk-JFQ53MO4.cjs} +1 -1
  205. package/dist/{chunk-7PQJCLIR.js → chunk-KMG7OMOS.js} +2 -2
  206. package/dist/{chunk-MT7UWY6T.cjs → chunk-L27C5O4W.cjs} +4 -4
  207. package/dist/chunk-LFTCK2VM.cjs +1194 -0
  208. package/dist/{chunk-EJBHR2P5.js → chunk-LI4XJTEA.js} +3 -3
  209. package/dist/{chunk-45VJGBGN.js → chunk-LQLOOUS3.js} +2 -2
  210. package/dist/{chunk-PL6DRFUO.cjs → chunk-MOMLQP7B.cjs} +2 -2
  211. package/dist/{chunk-OF7JIYBY.cjs → chunk-MYHBC3HA.cjs} +2 -2
  212. package/dist/{chunk-LKK2AA7W.js → chunk-MYRLCN6V.js} +2 -2
  213. package/dist/{chunk-6ACKL3WH.cjs → chunk-N2BTMKF2.cjs} +5 -5
  214. package/dist/chunk-N2COYOXE.cjs +526 -0
  215. package/dist/{chunk-2TL37AP5.cjs → chunk-N3OLFKV5.cjs} +1 -1
  216. package/dist/{chunk-5JSDQ6QQ.cjs → chunk-NDO22RER.cjs} +2 -2
  217. package/dist/{chunk-XD3JGL5O.js → chunk-NE7IUGMK.js} +3 -3
  218. package/dist/{chunk-F6RYCBQG.js → chunk-NFXHIO3G.js} +1 -1
  219. package/dist/chunk-NJCHFXGC.js +1170 -0
  220. package/dist/chunk-NT6CJYI3.cjs +129 -0
  221. package/dist/chunk-O43DOE7V.js +106 -0
  222. package/dist/{chunk-GNEZD7KE.cjs → chunk-O4BOBOYV.cjs} +2 -2
  223. package/dist/{chunk-3AS5B7MQ.cjs → chunk-OGPDCBPD.cjs} +12 -12
  224. package/dist/{chunk-6YQTMI55.js → chunk-OHFZ7L4T.js} +2 -2
  225. package/dist/{chunk-CEJ7VBR6.js → chunk-OHIFKN4E.js} +4 -4
  226. package/dist/{chunk-46VXFTEC.js → chunk-OQU3TJCF.js} +3 -3
  227. package/dist/{chunk-5TKC6IEN.js → chunk-PEJLXJQD.js} +1 -1
  228. package/dist/{chunk-HWFM4MAT.js → chunk-PKHITACT.js} +2 -2
  229. package/dist/{chunk-CHMCL7AV.js → chunk-PNZJFLMY.js} +3 -3
  230. package/dist/{chunk-XRR3CYQL.js → chunk-QP7RXZES.js} +2 -2
  231. package/dist/{chunk-QGHYQCF3.cjs → chunk-QY76WTO5.cjs} +9 -9
  232. package/dist/{chunk-EIY7KEJ3.cjs → chunk-R74TZKJS.cjs} +4 -4
  233. package/dist/{chunk-GNEZQMKH.js → chunk-REMJWNAT.js} +5 -5
  234. package/dist/{chunk-SWBWZIL4.cjs → chunk-S6OKX4H7.cjs} +2 -2
  235. package/dist/{chunk-EC4WGEAJ.js → chunk-SABWUELE.js} +2 -2
  236. package/dist/{chunk-QKQHZIF3.cjs → chunk-SG42F5VB.cjs} +2 -2
  237. package/dist/{chunk-5C2AI2SD.js → chunk-SQIWPU6V.js} +2 -2
  238. package/dist/{chunk-ZIP7F4UF.cjs → chunk-SYWTT5TY.cjs} +5 -5
  239. package/dist/{chunk-OBEKX4VR.js → chunk-TVUBGXWA.js} +2 -2
  240. package/dist/{chunk-7PNJI5UE.cjs → chunk-U2H4DRMV.cjs} +2 -2
  241. package/dist/{chunk-6LZ54NPO.cjs → chunk-VAXWWJJP.cjs} +34 -24
  242. package/dist/{chunk-DQTSTJ6O.js → chunk-VNNQYJLT.js} +4 -4
  243. package/dist/{chunk-KGSADAOD.cjs → chunk-VSUMJX6Z.cjs} +2 -2
  244. package/dist/{chunk-ON4DEDMI.js → chunk-W5CJC7S7.js} +3 -3
  245. package/dist/{chunk-AXZ7ELMA.js → chunk-WEJKY3DF.js} +2 -2
  246. package/dist/{chunk-EQEJTN3V.js → chunk-WXWFMWWF.js} +3 -3
  247. package/dist/{chunk-TEEFR2FD.js → chunk-XHQGMMH7.js} +2 -2
  248. package/dist/{chunk-XTIN5545.js → chunk-XVP7IKLZ.js} +32 -22
  249. package/dist/{chunk-ELNT3CFO.js → chunk-Y5F7ZTBH.js} +2 -2
  250. package/dist/{chunk-QCILPZWP.js → chunk-YJEXAO2I.js} +2 -2
  251. package/dist/{chunk-7ABFUIOB.cjs → chunk-YNCDTKAE.cjs} +2 -2
  252. package/dist/{chunk-35ZGBAA3.cjs → chunk-YSCIMHOI.cjs} +6 -6
  253. package/dist/{chunk-AWXCSX6J.js → chunk-YSXD344H.js} +5 -5
  254. package/dist/{chunk-OF3SGLZY.js → chunk-YT5NLCRC.js} +10 -2
  255. package/dist/{chunk-HZSIUOCN.cjs → chunk-YUKXNWVE.cjs} +1 -1
  256. package/dist/{chunk-65FIH5A3.js → chunk-YVTLHTG6.js} +2 -2
  257. package/dist/{chunk-GENABQYA.cjs → chunk-Z4PZ2ZHI.cjs} +2 -2
  258. package/dist/{chunk-FBVVRTX2.cjs → chunk-ZPKHGKVL.cjs} +4 -4
  259. package/dist/{chunk-FJNWUELL.js → chunk-ZPP7LTHP.js} +3 -3
  260. package/dist/{chunk-IZOHYJUQ.cjs → chunk-ZWCDB5PP.cjs} +2 -2
  261. package/dist/index.cjs +226 -183
  262. package/dist/index.d.cts +7 -5
  263. package/dist/index.d.ts +7 -5
  264. package/dist/index.js +49 -46
  265. package/dist/styles.css +873 -200
  266. package/dist/{tokens-BIIUTPKN.css → tokens-EF34LSWI.css} +42 -17
  267. package/dist/tokens.css +42 -17
  268. package/docs/llms/alert.md +4 -3
  269. package/docs/llms/button.md +4 -3
  270. package/docs/llms/cascader.md +3 -0
  271. package/docs/llms/image.md +72 -1
  272. package/docs/llms/input.md +3 -2
  273. package/docs/llms/select.md +2 -2
  274. package/docs/llms/surface.md +90 -0
  275. package/docs/llms/tag.md +3 -2
  276. package/docs/llms/theme.md +65 -6
  277. package/docs/llms/themepanel.md +128 -0
  278. package/docs/llms.md +6 -4
  279. package/package.json +16 -1
  280. package/dist/Button-SDQD25AG.css +0 -98
  281. package/dist/chunk-B2KEZQ6S.cjs +0 -116
  282. package/dist/chunk-NN25YMOL.js +0 -251
  283. package/dist/chunk-PH3YECMF.js +0 -90
  284. package/dist/chunk-RF2EY5JS.cjs +0 -281
package/dist/styles.css CHANGED
@@ -20,42 +20,52 @@
20
20
 
21
21
  /* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
22
22
  --d: 1;
23
+ --shadow-scale: 1;
24
+ --shadow-float-scale: 1;
23
25
 
24
- --shadow-blur: calc(16px * var(--d));
25
- --shadow-offset: calc(6px * var(--d));
26
- --shadow-inset-blur: calc(10px * var(--d));
27
- --shadow-inset-offset: calc(4px * var(--d));
26
+ --shadow-blur: calc(16px * var(--d) * var(--shadow-scale));
27
+ --shadow-offset: calc(6px * var(--d) * var(--shadow-scale));
28
+ --shadow-inset-blur: calc(10px * var(--d) * var(--shadow-scale));
29
+ --shadow-inset-offset: calc(4px * var(--d) * var(--shadow-scale));
28
30
 
29
- --neu-out:
31
+ --neu-shadow-panel:
30
32
  var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
31
33
  calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
32
34
 
33
- --neu-out-sm:
35
+ --neu-shadow-control:
34
36
  calc(var(--shadow-offset) * 0.5) calc(var(--shadow-offset) * 0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-dark),
35
37
  calc(var(--shadow-offset) * -0.5) calc(var(--shadow-offset) * -0.5) calc(var(--shadow-blur) * 0.6) var(--shadow-light);
36
38
 
37
- --neu-out-lg:
39
+ --neu-shadow-lift:
38
40
  calc(var(--shadow-offset) * 1.6) calc(var(--shadow-offset) * 1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-dark),
39
41
  calc(var(--shadow-offset) * -1.6) calc(var(--shadow-offset) * -1.6) calc(var(--shadow-blur) * 1.4) var(--shadow-light);
40
42
 
41
- --neu-in:
43
+ --neu-shadow-inset-strong:
42
44
  inset var(--shadow-inset-offset) var(--shadow-inset-offset) var(--shadow-inset-blur) var(--shadow-dark),
43
45
  inset calc(var(--shadow-inset-offset) * -1) calc(var(--shadow-inset-offset) * -1) var(--shadow-inset-blur) var(--shadow-light);
44
46
 
45
- --neu-in-sm:
47
+ --neu-shadow-inset:
46
48
  inset calc(var(--shadow-inset-offset) * 0.6) calc(var(--shadow-inset-offset) * 0.6) calc(var(--shadow-inset-blur) * 0.6) var(--shadow-dark),
47
49
  inset calc(var(--shadow-inset-offset) * -0.6) calc(var(--shadow-inset-offset) * -0.6) calc(var(--shadow-inset-blur) * 0.6) var(--shadow-light);
48
50
 
49
- --neu-flat:
51
+ --neu-shadow-subtle:
50
52
  1px 1px 2px var(--shadow-dark),
51
53
  -1px -1px 2px var(--shadow-light);
52
54
 
53
55
  /* Floating-overlay elevation.
54
56
  No top-left highlight — there's no continuous surface beneath an overlay
55
57
  panel, so the neumorphic light-reflection metaphor would read as a halo. */
56
- --neu-float:
57
- 0 calc(var(--shadow-offset) * 1.8) calc(var(--shadow-blur) * 2.2) var(--shadow-dark),
58
- 0 calc(var(--shadow-offset) * 0.4) calc(var(--shadow-blur) * 0.7) var(--shadow-dark);
58
+ --neu-shadow-float:
59
+ 0 calc(var(--shadow-offset) * 1.8 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 2.2 * var(--shadow-float-scale)) var(--shadow-dark),
60
+ 0 calc(var(--shadow-offset) * 0.4 * var(--shadow-float-scale)) calc(var(--shadow-blur) * 0.7 * var(--shadow-float-scale)) var(--shadow-dark);
61
+
62
+ --neu-out: var(--neu-shadow-panel);
63
+ --neu-out-sm: var(--neu-shadow-control);
64
+ --neu-out-lg: var(--neu-shadow-lift);
65
+ --neu-in: var(--neu-shadow-inset-strong);
66
+ --neu-in-sm: var(--neu-shadow-inset);
67
+ --neu-flat: var(--neu-shadow-subtle);
68
+ --neu-float: var(--neu-shadow-float);
59
69
 
60
70
  /* ---- Accent (default sky) ---- */
61
71
  --accent: oklch(68% 0.14 235);
@@ -89,7 +99,13 @@
89
99
 
90
100
  /* ---- Control sizes (density) ---- */
91
101
  --ctrl-h: 40px;
102
+ --ctrl-h-sm: 30px;
103
+ --ctrl-h-lg: 52px;
104
+ --field-h-sm: 32px;
105
+ --field-h-lg: 48px;
92
106
  --ctrl-pad-x: 18px;
107
+ --ctrl-pad-x-sm: 12px;
108
+ --ctrl-pad-x-lg: 24px;
93
109
 
94
110
  /* ---- Type ---- */
95
111
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
@@ -97,6 +113,11 @@
97
113
  "Noto Sans CJK SC", sans-serif;
98
114
  --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Consolas, monospace;
99
115
  --font-display: "SF Pro Display", var(--font-sans);
116
+ --fs-xs: 11px;
117
+ --fs-sm: 12px;
118
+ --fs-md: 13px;
119
+ --fs-lg: 14px;
120
+ --fs-xl: 15px;
100
121
 
101
122
  /* ---- Motion ---- */
102
123
  --ease: cubic-bezier(0.22, 0.61, 0.36, 1);
@@ -122,13 +143,17 @@
122
143
  --shadow-dark: rgba(0, 0, 0, 0.55);
123
144
  --shadow-light: rgba(130, 145, 180, 0.06);
124
145
  /* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
125
- --shadow-offset: calc(4px * var(--d));
126
- --shadow-blur: calc(10px * var(--d));
127
- --shadow-inset-offset: calc(3px * var(--d));
128
- --shadow-inset-blur: calc(7px * var(--d));
146
+ --shadow-offset: calc(4px * var(--d) * var(--shadow-scale));
147
+ --shadow-blur: calc(10px * var(--d) * var(--shadow-scale));
148
+ --shadow-inset-offset: calc(3px * var(--d) * var(--shadow-scale));
149
+ --shadow-inset-blur: calc(7px * var(--d) * var(--shadow-scale));
129
150
  --accent-soft: oklch(35% 0.06 235);
130
151
  --accent-ink: oklch(82% 0.09 235);
131
152
  --accent-glow: oklch(68% 0.14 235 / 0.18);
153
+ --info: oklch(78% 0.12 235);
154
+ --success: oklch(78% 0.14 150);
155
+ --warning: oklch(82% 0.14 75);
156
+ --danger: oklch(76% 0.16 25);
132
157
  }
133
158
  /* 深色模式的 accent-glow 统一降低强度,避免按钮外圈过亮 */
134
159
  [data-theme="dark"][data-accent="sky"] { --accent-soft: oklch(35% 0.08 235); --accent-ink: oklch(82% 0.10 235); --accent-glow: oklch(68% 0.14 235 / 0.18); }
@@ -219,80 +244,99 @@ input, textarea, select { font-family: inherit; color: inherit; }
219
244
  gap: 8px;
220
245
  height: var(--ctrl-h);
221
246
  padding: 0 var(--ctrl-pad-x);
222
- border: none;
247
+ border: 1px solid transparent;
223
248
  border-radius: var(--r-md);
224
- font-size: 13px;
249
+ font-size: var(--fs-md);
225
250
  font-weight: 500;
226
251
  font-family: inherit;
227
252
  color: var(--fg);
228
253
  background: var(--bg);
229
- box-shadow: var(--neu-out-sm);
254
+ box-shadow: var(--neu-shadow-control);
230
255
  cursor: pointer;
231
256
  user-select: none;
232
257
  white-space: nowrap;
233
258
  flex-shrink: 0;
234
- transition: all var(--dur-fast) var(--ease);
259
+ transition:
260
+ background var(--dur-fast) var(--ease),
261
+ box-shadow var(--dur-fast) var(--ease),
262
+ color var(--dur-fast) var(--ease);
263
+ }
264
+ .btn > svg,
265
+ .btn-icon-slot {
266
+ flex-shrink: 0;
267
+ }
268
+ .btn-icon-slot {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ justify-content: center;
272
+ line-height: 0;
273
+ }
274
+ .btn-icon-slot img {
275
+ display: block;
276
+ max-width: 1.25em;
277
+ max-height: 1.25em;
278
+ object-fit: contain;
235
279
  }
236
- .btn > svg { flex-shrink: 0; }
237
280
  .btn.icon {
238
281
  flex-shrink: 0;
239
282
  overflow: visible;
240
283
  }
241
- .btn:hover { color: var(--accent-ink); }
242
- .btn:active, .btn.pressed {
243
- box-shadow: var(--neu-in-sm);
244
- color: var(--accent-ink);
245
- }
246
284
  .btn.primary {
247
285
  color: var(--accent-ink);
248
- background:
249
- linear-gradient(145deg,
250
- color-mix(in oklch, var(--accent-soft) 80%, var(--shadow-light)),
251
- color-mix(in oklch, var(--accent-soft) 92%, var(--bg)));
252
- box-shadow:
253
- var(--neu-out-sm),
254
- inset 1px 1px 0 color-mix(in oklch, var(--shadow-light) 60%, transparent),
255
- inset -1px -1px 0 color-mix(in oklch, var(--accent) 15%, transparent);
286
+ background: color-mix(in oklch, var(--accent-soft) 62%, var(--bg));
256
287
  font-weight: 600;
257
288
  }
258
- .btn.primary:hover {
259
- background:
260
- linear-gradient(145deg,
261
- color-mix(in oklch, var(--accent-soft) 70%, var(--shadow-light)),
262
- color-mix(in oklch, var(--accent) 18%, var(--accent-soft)));
263
- box-shadow:
264
- var(--neu-out-sm),
265
- inset 1px 1px 0 color-mix(in oklch, var(--shadow-light) 70%, transparent),
266
- inset -1px -1px 0 color-mix(in oklch, var(--accent) 20%, transparent),
267
- 0 0 16px -6px var(--accent-glow);
268
- }
269
- .btn.primary:active, .btn.primary.pressed {
270
- box-shadow:
271
- inset 2px 2px 4px color-mix(in oklch, var(--accent) 25%, var(--shadow-dark)),
272
- inset -1px -1px 2px var(--shadow-light);
273
- transform: none;
274
- }
275
289
  .btn.ghost {
276
290
  background: transparent;
277
291
  box-shadow: none;
278
292
  color: var(--fg-muted);
279
293
  }
280
- .btn.ghost:hover { background: var(--bg); box-shadow: var(--neu-flat); color: var(--fg); }
281
294
  .btn.danger { color: var(--danger); }
282
- .btn.danger:hover { color: var(--danger); }
295
+ .btn:hover {
296
+ box-shadow: var(--neu-shadow-panel);
297
+ }
298
+ .btn.ghost:hover {
299
+ background: var(--bg);
300
+ border-color: transparent;
301
+ box-shadow: var(--neu-shadow-subtle);
302
+ color: var(--fg);
303
+ }
304
+ .btn.danger:hover {
305
+ color: var(--danger);
306
+ }
307
+ .btn:active,
308
+ .btn.pressed {
309
+ box-shadow: var(--neu-shadow-inset-strong);
310
+ }
311
+ .btn.ghost:active,
312
+ .btn.ghost.pressed {
313
+ background: var(--bg);
314
+ color: var(--fg);
315
+ }
316
+ .btn.danger:active,
317
+ .btn.danger.pressed {
318
+ color: var(--danger);
319
+ }
283
320
  .btn.icon { width: var(--ctrl-h); padding: 0; }
284
- .btn.sm { height: 30px; padding: 0 12px; font-size: 12px; border-radius: var(--r-sm); }
285
- .btn.sm.icon { width: 30px; padding: 0; }
286
- .btn.lg { height: 52px; padding: 0 24px; font-size: 15px; border-radius: var(--r-lg); }
287
- .btn.lg.icon { width: 52px; padding: 0; }
321
+ .btn.sm { height: var(--ctrl-h-sm); padding: 0 var(--ctrl-pad-x-sm); font-size: var(--fs-sm); border-radius: var(--r-sm); }
322
+ .btn.sm.icon { width: var(--ctrl-h-sm); padding: 0; }
323
+ .btn.lg { height: var(--ctrl-h-lg); padding: 0 var(--ctrl-pad-x-lg); font-size: var(--fs-xl); border-radius: var(--r-lg); }
324
+ .btn.lg.icon { width: var(--ctrl-h-lg); padding: 0; }
288
325
  .btn.block { width: 100%; flex-shrink: 1; }
289
326
  .btn[disabled], .btn.disabled, .btn:disabled {
290
327
  color: var(--fg-subtle);
291
328
  cursor: not-allowed;
292
- box-shadow: var(--neu-flat);
329
+ border-color: transparent;
330
+ box-shadow: var(--neu-shadow-subtle);
331
+ transform: none;
332
+ }
333
+ .btn[disabled]:hover, .btn:disabled:hover, .btn.disabled:hover {
334
+ color: var(--fg-subtle);
335
+ background: var(--bg);
336
+ border-color: transparent;
337
+ box-shadow: var(--neu-shadow-subtle);
293
338
  transform: none;
294
339
  }
295
- .btn[disabled]:hover, .btn:disabled:hover, .btn.disabled:hover { transform: none; color: var(--fg-subtle); background: var(--bg); }
296
340
  .btn.loading { cursor: wait; }
297
341
  .btn .spinner {
298
342
  width: 14px; height: 14px;
@@ -310,7 +354,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
310
354
  width: 100%;
311
355
  }
312
356
  .input-count {
313
- font-size: 11px;
357
+ font-size: var(--fs-xs);
314
358
  color: var(--fg-subtle);
315
359
  font-variant-numeric: tabular-nums;
316
360
  text-align: right;
@@ -324,20 +368,30 @@ input, textarea, select { font-family: inherit; color: inherit; }
324
368
  padding: 0 var(--ctrl-pad-x);
325
369
  border-radius: var(--r-md);
326
370
  background: var(--bg);
327
- box-shadow: var(--neu-in-sm);
371
+ box-shadow: var(--neu-shadow-inset);
328
372
  transition: box-shadow var(--dur) var(--ease);
329
373
  gap: 8px;
330
374
  }
331
- .input-wrap.sm { height: 32px; padding: 0 12px; border-radius: var(--r-sm); gap: 6px; }
332
- .input-wrap.lg { height: 48px; padding: 0 18px; border-radius: var(--r-lg); gap: 10px; }
333
- .input-wrap:focus-within { box-shadow: var(--neu-in-sm), 0 0 0 2px var(--accent-glow); }
334
- .input-wrap.invalid { box-shadow: var(--neu-in-sm), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent); }
375
+ .input-wrap.sm { height: var(--field-h-sm); padding: 0 var(--ctrl-pad-x-sm); border-radius: var(--r-sm); gap: 6px; }
376
+ .input-wrap.lg { height: var(--field-h-lg); padding: 0 var(--ctrl-pad-x); border-radius: var(--r-lg); gap: 10px; }
377
+ .input-wrap:focus-within { box-shadow: var(--neu-shadow-inset), 0 0 0 2px var(--accent-glow); }
378
+ .input-wrap.invalid { box-shadow: var(--neu-shadow-inset), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent); }
335
379
  .input-wrap.disabled { opacity: 0.6; cursor: not-allowed; }
336
380
  .input-wrap .lead,
337
381
  .input-wrap .trail {
338
382
  color: var(--fg-subtle);
339
383
  flex-shrink: 0;
340
384
  display: inline-flex;
385
+ align-items: center;
386
+ justify-content: center;
387
+ line-height: 0;
388
+ }
389
+ .input-wrap .lead img,
390
+ .input-wrap .trail img {
391
+ display: block;
392
+ width: 16px;
393
+ height: 16px;
394
+ object-fit: contain;
341
395
  }
342
396
  .input-wrap .lead.interactive,
343
397
  .input-wrap .trail.interactive { cursor: pointer; pointer-events: auto; }
@@ -348,13 +402,13 @@ input, textarea, select { font-family: inherit; color: inherit; }
348
402
  display: inline-flex;
349
403
  align-items: center;
350
404
  color: var(--fg-muted);
351
- font-size: 13px;
405
+ font-size: var(--fs-md);
352
406
  white-space: nowrap;
353
407
  user-select: none;
354
408
  flex-shrink: 0;
355
409
  }
356
- .input-wrap.sm .input-affix { font-size: 12px; }
357
- .input-wrap.lg .input-affix { font-size: 14px; }
410
+ .input-wrap.sm .input-affix { font-size: var(--fs-sm); }
411
+ .input-wrap.lg .input-affix { font-size: var(--fs-lg); }
358
412
  .input-wrap .input-clear {
359
413
  display: inline-flex;
360
414
  align-items: center;
@@ -395,12 +449,12 @@ input, textarea, select { font-family: inherit; color: inherit; }
395
449
  background: transparent;
396
450
  box-shadow: none;
397
451
  color: var(--fg);
398
- font-size: 13px;
452
+ font-size: var(--fs-md);
399
453
  font-family: inherit;
400
454
  outline: none;
401
455
  }
402
- .input-wrap.sm > .input { font-size: 12px; }
403
- .input-wrap.lg > .input { font-size: 14px; }
456
+ .input-wrap.sm > .input { font-size: var(--fs-sm); }
457
+ .input-wrap.lg > .input { font-size: var(--fs-lg); }
404
458
  .input-wrap > .input::placeholder { color: var(--fg-subtle); }
405
459
  .input-wrap.disabled > .input { cursor: not-allowed; }
406
460
  /* ============ Textarea ============ */
@@ -443,7 +497,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
443
497
  border: none;
444
498
  border-radius: var(--r-md);
445
499
  background: var(--bg);
446
- box-shadow: var(--neu-in-sm);
500
+ box-shadow: var(--neu-shadow-inset);
447
501
  color: var(--fg);
448
502
  font-size: 13px;
449
503
  font-family: inherit;
@@ -452,8 +506,8 @@ input, textarea, select { font-family: inherit; color: inherit; }
452
506
  outline: none;
453
507
  transition: box-shadow var(--dur) var(--ease);
454
508
  }
455
- .textarea:focus { box-shadow: var(--neu-in-sm), 0 0 0 2px var(--accent-glow); }
456
- .textarea.invalid { box-shadow: var(--neu-in-sm), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent); }
509
+ .textarea:focus { box-shadow: var(--neu-shadow-inset), 0 0 0 2px var(--accent-glow); }
510
+ .textarea.invalid { box-shadow: var(--neu-shadow-inset), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent); }
457
511
  .textarea::placeholder { color: var(--fg-subtle); }
458
512
  /* ============ Switch ============ */
459
513
  .switch {
@@ -476,7 +530,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
476
530
  padding: 0;
477
531
  border-radius: 999px;
478
532
  background: var(--bg);
479
- box-shadow: var(--neu-in-sm);
533
+ box-shadow: var(--neu-shadow-inset);
480
534
  cursor: inherit;
481
535
  flex-shrink: 0;
482
536
  transition: all var(--dur) var(--ease);
@@ -484,9 +538,9 @@ input, textarea, select { font-family: inherit; color: inherit; }
484
538
  .switch.sm { --w: 36px; --h: 20px; }
485
539
  .switch.lg { --w: 58px; --h: 32px; }
486
540
  /* When checkedChildren / unCheckedChildren are present, widen the track to fit. */
487
- .switch.with-children { --w: 60px; }
488
- .switch.with-children.sm { --w: 46px; }
489
- .switch.with-children.lg { --w: 74px; }
541
+ .switch.with-children { --w: 72px; }
542
+ .switch.with-children.sm { --w: 60px; }
543
+ .switch.with-children.lg { --w: 86px; }
490
544
  .switch-thumb {
491
545
  position: absolute;
492
546
  top: 3px;
@@ -495,7 +549,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
495
549
  height: calc(var(--h) - 6px);
496
550
  border-radius: 999px;
497
551
  background: var(--bg-raised);
498
- box-shadow: var(--neu-out-sm);
552
+ box-shadow: var(--neu-shadow-control);
499
553
  transition: all var(--dur) var(--ease);
500
554
  z-index: 1;
501
555
  }
@@ -523,6 +577,9 @@ input, textarea, select { font-family: inherit; color: inherit; }
523
577
  display: inline-flex;
524
578
  align-items: center;
525
579
  justify-content: center;
580
+ min-width: 0;
581
+ overflow: hidden;
582
+ white-space: nowrap;
526
583
  transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease);
527
584
  }
528
585
  /* Checked label sits on the left side of the track (thumb pushes right). */
@@ -562,7 +619,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
562
619
  padding: 0;
563
620
  border-radius: 7px;
564
621
  background: var(--bg);
565
- box-shadow: var(--neu-in-sm);
622
+ box-shadow: var(--neu-shadow-inset);
566
623
  display: grid;
567
624
  place-items: center;
568
625
  flex-shrink: 0;
@@ -573,12 +630,12 @@ input, textarea, select { font-family: inherit; color: inherit; }
573
630
  .checkbox-box svg { opacity: 0; transform: scale(0.6); transition: all var(--dur) var(--ease); }
574
631
  .checkbox.checked .checkbox-box {
575
632
  background: var(--accent);
576
- box-shadow: var(--neu-out-sm), 0 2px 8px var(--accent-glow);
633
+ box-shadow: var(--neu-shadow-control), 0 2px 8px var(--accent-glow);
577
634
  }
578
635
  .checkbox.checked .checkbox-box svg { opacity: 1; transform: scale(1); }
579
636
  .checkbox.indeterminate .checkbox-box {
580
637
  background: var(--accent);
581
- box-shadow: var(--neu-out-sm), 0 2px 8px var(--accent-glow);
638
+ box-shadow: var(--neu-shadow-control), 0 2px 8px var(--accent-glow);
582
639
  }
583
640
  .checkbox.indeterminate .checkbox-box::after {
584
641
  content: "";
@@ -604,7 +661,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
604
661
  padding: 0;
605
662
  border-radius: 999px;
606
663
  background: var(--bg);
607
- box-shadow: var(--neu-in-sm);
664
+ box-shadow: var(--neu-shadow-inset);
608
665
  cursor: inherit;
609
666
  position: relative;
610
667
  flex-shrink: 0;
@@ -612,7 +669,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
612
669
  }
613
670
  .radio.checked .radio-dot {
614
671
  background: var(--accent);
615
- box-shadow: var(--neu-out-sm), 0 2px 8px var(--accent-glow);
672
+ box-shadow: var(--neu-shadow-control), 0 2px 8px var(--accent-glow);
616
673
  }
617
674
  .radio.checked .radio-dot::after {
618
675
  content: "";
@@ -632,7 +689,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
632
689
  padding: 4px;
633
690
  border-radius: var(--r-md);
634
691
  background: var(--bg);
635
- box-shadow: var(--neu-in-sm);
692
+ box-shadow: var(--neu-shadow-inset);
636
693
  gap: 2px;
637
694
  flex-wrap: nowrap;
638
695
  }
@@ -664,7 +721,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
664
721
  left: 0;
665
722
  border-radius: calc(var(--r-md) - 4px);
666
723
  background: var(--bg);
667
- box-shadow: var(--neu-out-sm);
724
+ box-shadow: var(--neu-shadow-control);
668
725
  pointer-events: none;
669
726
  transition:
670
727
  transform var(--dur-slow) var(--ease),
@@ -703,7 +760,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
703
760
  height: 10px;
704
761
  border-radius: 999px;
705
762
  background: var(--bg);
706
- box-shadow: var(--neu-in-sm);
763
+ box-shadow: var(--neu-shadow-inset);
707
764
  touch-action: none;
708
765
  z-index: 1;
709
766
  }
@@ -722,7 +779,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
722
779
  width: 22px; height: 22px;
723
780
  border-radius: 999px;
724
781
  background: var(--bg-raised);
725
- box-shadow: var(--neu-out-sm);
782
+ box-shadow: var(--neu-shadow-control);
726
783
  transform: translate(-50%, -50%);
727
784
  transition: all var(--dur-fast) var(--ease);
728
785
  display: grid; place-items: center;
@@ -737,7 +794,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
737
794
  background: var(--slider-thumb-color, var(--accent));
738
795
  }
739
796
  .slider-thumb:focus-visible {
740
- box-shadow: var(--neu-out-sm), 0 0 0 3px var(--accent-glow);
797
+ box-shadow: var(--neu-shadow-control), 0 0 0 3px var(--accent-glow);
741
798
  }
742
799
  .slider:hover .slider-thumb { transform: translate(-50%, -50%) scale(1.08); }
743
800
  .slider-value {
@@ -750,13 +807,13 @@ input, textarea, select { font-family: inherit; color: inherit; }
750
807
  /* Tone variants */
751
808
  .slider.success .slider-thumb { --slider-thumb-color: var(--success); }
752
809
  .slider.success .slider-fill { background: linear-gradient(90deg, color-mix(in oklch, var(--success) 70%, white), var(--success)); box-shadow: 0 0 10px color-mix(in oklch, var(--success) 35%, transparent); }
753
- .slider.success .slider-thumb:focus-visible { box-shadow: var(--neu-out-sm), 0 0 0 3px color-mix(in oklch, var(--success) 35%, transparent); }
810
+ .slider.success .slider-thumb:focus-visible { box-shadow: var(--neu-shadow-control), 0 0 0 3px color-mix(in oklch, var(--success) 35%, transparent); }
754
811
  .slider.warning .slider-thumb { --slider-thumb-color: var(--warning); }
755
812
  .slider.warning .slider-fill { background: linear-gradient(90deg, color-mix(in oklch, var(--warning) 70%, white), var(--warning)); box-shadow: 0 0 10px color-mix(in oklch, var(--warning) 35%, transparent); }
756
- .slider.warning .slider-thumb:focus-visible { box-shadow: var(--neu-out-sm), 0 0 0 3px color-mix(in oklch, var(--warning) 35%, transparent); }
813
+ .slider.warning .slider-thumb:focus-visible { box-shadow: var(--neu-shadow-control), 0 0 0 3px color-mix(in oklch, var(--warning) 35%, transparent); }
757
814
  .slider.danger .slider-thumb { --slider-thumb-color: var(--danger); }
758
815
  .slider.danger .slider-fill { background: linear-gradient(90deg, color-mix(in oklch, var(--danger) 70%, white), var(--danger)); box-shadow: 0 0 10px color-mix(in oklch, var(--danger) 35%, transparent); }
759
- .slider.danger .slider-thumb:focus-visible { box-shadow: var(--neu-out-sm), 0 0 0 3px color-mix(in oklch, var(--danger) 35%, transparent); }
816
+ .slider.danger .slider-thumb:focus-visible { box-shadow: var(--neu-shadow-control), 0 0 0 3px color-mix(in oklch, var(--danger) 35%, transparent); }
760
817
  /* Marks */
761
818
  .slider-marks {
762
819
  position: absolute;
@@ -782,7 +839,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
782
839
  width: 6px; height: 6px;
783
840
  border-radius: 999px;
784
841
  background: var(--bg);
785
- box-shadow: var(--neu-in-sm);
842
+ box-shadow: var(--neu-shadow-inset);
786
843
  position: absolute;
787
844
  top: -12px;
788
845
  left: 50%;
@@ -839,7 +896,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
839
896
  color-mix(in oklch, var(--bg) 88%, var(--shadow-light)),
840
897
  color-mix(in oklch, var(--bg) 92%, var(--shadow-dark))
841
898
  );
842
- box-shadow: var(--neu-in-sm);
899
+ box-shadow: var(--neu-shadow-inset);
843
900
  overflow: hidden;
844
901
  position: relative;
845
902
  }
@@ -888,7 +945,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
888
945
  font-size: 11px;
889
946
  font-weight: 500;
890
947
  background: var(--bg);
891
- box-shadow: var(--neu-flat);
948
+ box-shadow: var(--neu-shadow-subtle);
892
949
  color: var(--fg-muted);
893
950
  }
894
951
  .tag.accent { color: var(--accent-ink); }
@@ -903,7 +960,20 @@ input, textarea, select { font-family: inherit; color: inherit; }
903
960
  .tag.solid.danger { background: var(--danger); color: var(--bg); box-shadow: 0 2px 6px color-mix(in oklch, var(--danger) 35%, transparent); }
904
961
  .tag.borderless { background: transparent; box-shadow: none; }
905
962
  .tag .dot { width: 6px; height: 6px; border-radius: 999px; background: currentColor; }
906
- .tag .tag-ico { color: currentColor; display: inline-flex; }
963
+ .tag .tag-ico {
964
+ color: currentColor;
965
+ display: inline-flex;
966
+ align-items: center;
967
+ justify-content: center;
968
+ line-height: 0;
969
+ flex-shrink: 0;
970
+ }
971
+ .tag .tag-ico img {
972
+ display: block;
973
+ width: 1em;
974
+ height: 1em;
975
+ object-fit: contain;
976
+ }
907
977
  .tag .x { cursor: pointer; color: var(--fg-subtle); margin-left: 2px; display: inline-flex; }
908
978
  .tag .x:hover { color: var(--fg); }
909
979
  /* ============ Badge ============ */
@@ -934,7 +1004,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
934
1004
  width: var(--size); height: var(--size);
935
1005
  border-radius: 999px;
936
1006
  background: var(--bg);
937
- box-shadow: var(--neu-out-sm);
1007
+ box-shadow: var(--neu-shadow-control);
938
1008
  display: grid; place-items: center;
939
1009
  overflow: hidden;
940
1010
  color: var(--accent-ink);
@@ -984,7 +1054,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
984
1054
  .divider.sunken {
985
1055
  background: transparent;
986
1056
  height: 2px;
987
- box-shadow: var(--neu-in-sm);
1057
+ box-shadow: var(--neu-shadow-inset);
988
1058
  }
989
1059
  .divider.sunken.vertical {
990
1060
  width: 2px;
@@ -992,7 +1062,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
992
1062
  }
993
1063
  .divider.sunken:has(.divider-label) { background: transparent; box-shadow: none; }
994
1064
  .divider.sunken:has(.divider-label)::before,
995
- .divider.sunken:has(.divider-label)::after { height: 2px; background: transparent; box-shadow: var(--neu-in-sm); }
1065
+ .divider.sunken:has(.divider-label)::after { height: 2px; background: transparent; box-shadow: var(--neu-shadow-inset); }
996
1066
  /* ---- Dashed variant ---- */
997
1067
  .divider.dashed {
998
1068
  background: transparent;
@@ -1048,11 +1118,11 @@ input, textarea, select { font-family: inherit; color: inherit; }
1048
1118
  .card {
1049
1119
  background: var(--bg);
1050
1120
  border-radius: var(--r-lg);
1051
- box-shadow: var(--neu-out);
1121
+ box-shadow: var(--neu-shadow-panel);
1052
1122
  padding: var(--gap-5);
1053
1123
  }
1054
- .card.flat { box-shadow: var(--neu-flat); }
1055
- .card.sunken { box-shadow: var(--neu-in); }
1124
+ .card.flat { box-shadow: var(--neu-shadow-subtle); }
1125
+ .card.sunken { box-shadow: var(--neu-shadow-inset-strong); }
1056
1126
  .card.pad-none { padding: 0; }
1057
1127
  .card.pad-sm { padding: var(--gap-3); }
1058
1128
  .card.pad-lg { padding: var(--gap-6); }
@@ -1062,10 +1132,10 @@ input, textarea, select { font-family: inherit; color: inherit; }
1062
1132
  }
1063
1133
  .card.hoverable:hover {
1064
1134
  transform: translateY(-3px);
1065
- box-shadow: var(--neu-out-lg);
1135
+ box-shadow: var(--neu-shadow-lift);
1066
1136
  }
1067
- .card.hoverable.flat:hover { box-shadow: var(--neu-out-sm); }
1068
- .card.hoverable.sunken:hover { box-shadow: var(--neu-out); }
1137
+ .card.hoverable.flat:hover { box-shadow: var(--neu-shadow-control); }
1138
+ .card.hoverable.sunken:hover { box-shadow: var(--neu-shadow-panel); }
1069
1139
  .card-head {
1070
1140
  display: flex; align-items: flex-start; justify-content: space-between;
1071
1141
  gap: var(--gap-3); margin-bottom: var(--gap-4);
@@ -1075,6 +1145,42 @@ input, textarea, select { font-family: inherit; color: inherit; }
1075
1145
  .card-desc { font-size: 12px; color: var(--fg-muted); }
1076
1146
  .card-actions { display: flex; gap: 6px; }
1077
1147
  .card-body { font-size: 13px; }
1148
+ /* ============ Surface ============ */
1149
+ .surface {
1150
+ position: relative;
1151
+ box-sizing: border-box;
1152
+ min-width: 0;
1153
+ color: var(--fg);
1154
+ background: var(--bg);
1155
+ border-radius: var(--r-lg);
1156
+ }
1157
+ .surface.tone-raised { background: var(--bg-raised); }
1158
+ .surface.tone-sunken { background: var(--bg-sunken); }
1159
+ .surface.tone-accent {
1160
+ color: var(--accent-ink);
1161
+ background: var(--accent-soft);
1162
+ }
1163
+ .surface.plain { box-shadow: none; }
1164
+ .surface.raised { box-shadow: var(--neu-shadow-panel); }
1165
+ .surface.sunken { box-shadow: var(--neu-shadow-inset-strong); }
1166
+ .surface.floating { box-shadow: var(--neu-shadow-float); }
1167
+ .surface.bordered { border: 1px solid var(--border); }
1168
+ .surface.pad-none { padding: 0; }
1169
+ .surface.pad-sm { padding: var(--gap-3); }
1170
+ .surface.pad-md { padding: var(--gap-5); }
1171
+ .surface.pad-lg { padding: var(--gap-8); }
1172
+ .surface.pad-xl { padding: var(--gap-10); }
1173
+ .surface.radius-none { border-radius: 0; }
1174
+ .surface.radius-sm { border-radius: var(--r-sm); }
1175
+ .surface.radius-md { border-radius: var(--r-md); }
1176
+ .surface.radius-lg { border-radius: var(--r-lg); }
1177
+ .surface.radius-xl { border-radius: var(--r-xl); }
1178
+ .surface.height-content { min-height: 0; }
1179
+ .surface.height-fill { min-height: 100%; }
1180
+ .surface.height-screen { min-height: 100vh; }
1181
+ .surface.scrollable { overflow: auto; }
1182
+ .surface > *:first-child { margin-top: 0; }
1183
+ .surface > *:last-child { margin-bottom: 0; }
1078
1184
  /* ============ Tabs ============ */
1079
1185
  .tabs { display: flex; flex-direction: column; gap: var(--gap-3); }
1080
1186
  .tabs-nav {
@@ -1082,7 +1188,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1082
1188
  padding: 5px;
1083
1189
  border-radius: var(--r-md);
1084
1190
  background: var(--bg);
1085
- box-shadow: var(--neu-in-sm);
1191
+ box-shadow: var(--neu-shadow-inset);
1086
1192
  gap: 2px;
1087
1193
  align-self: flex-start;
1088
1194
  }
@@ -1105,7 +1211,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1105
1211
  .tabs-nav .tab.active {
1106
1212
  color: var(--accent-ink);
1107
1213
  background: var(--bg);
1108
- box-shadow: var(--neu-out-sm);
1214
+ box-shadow: var(--neu-shadow-control);
1109
1215
  font-weight: 600;
1110
1216
  }
1111
1217
  .tabs-nav .tab[disabled] { opacity: 0.4; cursor: not-allowed; }
@@ -1145,7 +1251,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1145
1251
  .collapse-item {
1146
1252
  background: var(--bg);
1147
1253
  border-radius: var(--r-md);
1148
- box-shadow: var(--neu-out-sm);
1254
+ box-shadow: var(--neu-shadow-control);
1149
1255
  overflow: hidden;
1150
1256
  }
1151
1257
  .collapse.ghost .collapse-item {
@@ -1191,7 +1297,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1191
1297
  padding: 2px;
1192
1298
  }
1193
1299
  .collapse-chev.clickable { cursor: pointer; }
1194
- .collapse-chev.clickable:hover { color: var(--fg); background: var(--bg); box-shadow: var(--neu-flat); }
1300
+ .collapse-chev.clickable:hover { color: var(--fg); background: var(--bg); box-shadow: var(--neu-shadow-subtle); }
1195
1301
  .collapse-item.open .collapse-chev { transform: rotate(180deg); color: var(--accent); }
1196
1302
  /* ============ Select ============ */
1197
1303
  .select {
@@ -1209,11 +1315,11 @@ input, textarea, select { font-family: inherit; color: inherit; }
1209
1315
  border: none;
1210
1316
  border-radius: var(--r-md);
1211
1317
  background: var(--bg);
1212
- box-shadow: var(--neu-out-sm);
1318
+ box-shadow: var(--neu-shadow-control);
1213
1319
  display: inline-flex;
1214
1320
  align-items: center;
1215
1321
  gap: 8px;
1216
- font-size: 13px;
1322
+ font-size: var(--fs-md);
1217
1323
  font-family: inherit;
1218
1324
  color: var(--fg);
1219
1325
  cursor: pointer;
@@ -1228,21 +1334,46 @@ input, textarea, select { font-family: inherit; color: inherit; }
1228
1334
  flex: 1;
1229
1335
  min-width: 0;
1230
1336
  }
1231
- .select-value > span {
1337
+ .select-value-label {
1232
1338
  white-space: nowrap;
1233
1339
  overflow: hidden;
1234
1340
  text-overflow: ellipsis;
1235
1341
  }
1342
+ .select-icon,
1343
+ .menu-item-icon {
1344
+ display: inline-flex;
1345
+ align-items: center;
1346
+ justify-content: center;
1347
+ line-height: 0;
1348
+ flex-shrink: 0;
1349
+ }
1350
+ .select-icon img,
1351
+ .menu-item-icon img {
1352
+ display: block;
1353
+ width: 16px;
1354
+ height: 16px;
1355
+ object-fit: contain;
1356
+ }
1357
+ .select.sm .select-icon img,
1358
+ .select.sm .menu-item-icon img {
1359
+ width: 14px;
1360
+ height: 14px;
1361
+ }
1362
+ .select.lg .select-icon img,
1363
+ .select.lg .menu-item-icon img {
1364
+ width: 18px;
1365
+ height: 18px;
1366
+ }
1236
1367
  .select.invalid .select-trigger {
1237
- box-shadow: var(--neu-out-sm), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent);
1368
+ box-shadow: var(--neu-shadow-control), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent);
1238
1369
  }
1239
1370
  .select.invalid.open .select-trigger {
1240
- box-shadow: var(--neu-in-sm), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent);
1371
+ box-shadow: var(--neu-shadow-inset), 0 0 0 2px color-mix(in oklch, var(--danger) 30%, transparent);
1241
1372
  }
1242
- .select.sm .select-trigger { height: 30px; padding: 0 32px 0 12px; font-size: 12px; border-radius: var(--r-sm); }
1243
- .select.lg .select-trigger { height: 48px; padding: 0 36px 0 18px; font-size: 14px; border-radius: var(--r-lg); }
1373
+ .select.sm .select-trigger { height: var(--ctrl-h-sm); padding: 0 32px 0 var(--ctrl-pad-x-sm); font-size: var(--fs-sm); border-radius: var(--r-sm); }
1374
+ .select.lg .select-trigger { height: var(--field-h-lg); padding: 0 36px 0 var(--ctrl-pad-x); font-size: var(--fs-lg); border-radius: var(--r-lg); }
1244
1375
  .select-trigger:hover { color: var(--accent-ink); }
1245
- .select.open .select-trigger { box-shadow: var(--neu-in-sm); color: var(--accent-ink); }
1376
+ .select.open .select-trigger { box-shadow: var(--neu-shadow-inset); color: var(--accent-ink); }
1246
1377
  .select-trigger .placeholder { color: var(--fg-subtle); }
1247
1378
  .select-caret {
1248
1379
  position: absolute;
@@ -1290,7 +1421,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1290
1421
  height: 20px;
1291
1422
  border-radius: 999px;
1292
1423
  background: var(--bg);
1293
- box-shadow: var(--neu-out-sm);
1424
+ box-shadow: var(--neu-shadow-control);
1294
1425
  display: inline-grid;
1295
1426
  place-items: center;
1296
1427
  cursor: pointer;
@@ -1300,14 +1431,14 @@ input, textarea, select { font-family: inherit; color: inherit; }
1300
1431
  z-index: 1;
1301
1432
  }
1302
1433
  .select:hover .select-clear { opacity: 1; }
1303
- .select-clear:hover { color: var(--accent-ink); box-shadow: var(--neu-in-sm); }
1434
+ .select-clear:hover { color: var(--accent-ink); box-shadow: var(--neu-shadow-inset); }
1304
1435
  /* Multi-select menu: leading checkbox per item */
1305
1436
  .menu-check {
1306
1437
  width: 16px;
1307
1438
  height: 16px;
1308
1439
  border-radius: 5px;
1309
1440
  background: var(--bg);
1310
- box-shadow: var(--neu-in-sm);
1441
+ box-shadow: var(--neu-shadow-inset);
1311
1442
  display: inline-grid;
1312
1443
  place-items: center;
1313
1444
  flex-shrink: 0;
@@ -1316,7 +1447,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1316
1447
  }
1317
1448
  .menu-check.on {
1318
1449
  background: var(--accent);
1319
- box-shadow: var(--neu-out-sm), 0 1px 4px var(--accent-glow);
1450
+ box-shadow: var(--neu-shadow-control), 0 1px 4px var(--accent-glow);
1320
1451
  }
1321
1452
  /* Menu search — flush with menu, single subtle separator (no nested frame) */
1322
1453
  .menu-search {
@@ -1334,7 +1465,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1334
1465
  justify-content: center;
1335
1466
  gap: 10px;
1336
1467
  padding: 26px 12px;
1337
- font-size: 12px;
1468
+ font-size: var(--fs-sm);
1338
1469
  color: var(--fg-muted);
1339
1470
  }
1340
1471
  .menu-state .menu-state-ico {
@@ -1342,7 +1473,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1342
1473
  height: 40px;
1343
1474
  border-radius: var(--r-md);
1344
1475
  background: var(--bg);
1345
- box-shadow: var(--neu-in-sm);
1476
+ box-shadow: var(--neu-shadow-inset);
1346
1477
  display: grid;
1347
1478
  place-items: center;
1348
1479
  color: var(--fg-subtle);
@@ -1372,7 +1503,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1372
1503
  text-overflow: ellipsis;
1373
1504
  }
1374
1505
  .menu-item-desc {
1375
- font-size: 11px;
1506
+ font-size: var(--fs-xs);
1376
1507
  color: var(--fg-subtle);
1377
1508
  white-space: nowrap;
1378
1509
  overflow: hidden;
@@ -1382,7 +1513,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1382
1513
  /* Keyboard / hover highlight — soft raised pill */
1383
1514
  .menu-item.highlight:not([disabled]) {
1384
1515
  background: var(--bg);
1385
- box-shadow: var(--neu-out-sm);
1516
+ box-shadow: var(--neu-shadow-control);
1386
1517
  color: var(--accent-ink);
1387
1518
  }
1388
1519
  .menu-item[disabled] {
@@ -1392,7 +1523,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1392
1523
  .menu {
1393
1524
  background: var(--bg);
1394
1525
  border-radius: var(--r-md);
1395
- box-shadow: var(--neu-float);
1526
+ box-shadow: var(--neu-shadow-float);
1396
1527
  padding: 6px;
1397
1528
  min-width: 180px;
1398
1529
  z-index: 1000;
@@ -1403,7 +1534,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1403
1534
  .menu-item {
1404
1535
  padding: 9px 12px;
1405
1536
  border-radius: var(--r-sm);
1406
- font-size: 13px;
1537
+ font-size: var(--fs-md);
1407
1538
  cursor: pointer;
1408
1539
  color: var(--fg);
1409
1540
  display: flex;
@@ -1416,7 +1547,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1416
1547
  width: 100%;
1417
1548
  text-align: left;
1418
1549
  }
1419
- .menu-item:hover { background: var(--bg); box-shadow: var(--neu-flat); color: var(--accent-ink); }
1550
+ .menu-item:hover { background: var(--bg); box-shadow: var(--neu-shadow-subtle); color: var(--accent-ink); }
1420
1551
  .menu-item.active { color: var(--accent-ink); font-weight: 500; }
1421
1552
  .menu-item .tick { margin-left: auto; color: var(--accent); opacity: 0; }
1422
1553
  .menu-item.active .tick { opacity: 1; }
@@ -1447,7 +1578,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1447
1578
  .modal {
1448
1579
  background: var(--bg);
1449
1580
  border-radius: var(--r-xl);
1450
- box-shadow: var(--neu-float);
1581
+ box-shadow: var(--neu-shadow-float);
1451
1582
  padding: var(--gap-6);
1452
1583
  width: min(480px, 92vw);
1453
1584
  animation: modalIn var(--dur-slow) var(--ease);
@@ -1500,7 +1631,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1500
1631
  .modal-close:hover {
1501
1632
  color: var(--fg);
1502
1633
  background: var(--bg);
1503
- box-shadow: var(--neu-flat);
1634
+ box-shadow: var(--neu-shadow-subtle);
1504
1635
  }
1505
1636
  .modal-static-body {
1506
1637
  display: flex;
@@ -1515,7 +1646,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1515
1646
  place-items: center;
1516
1647
  flex-shrink: 0;
1517
1648
  background: var(--bg);
1518
- box-shadow: var(--neu-in-sm);
1649
+ box-shadow: var(--neu-shadow-inset);
1519
1650
  color: var(--accent);
1520
1651
  }
1521
1652
  .modal-static-icon.success { color: var(--success); }
@@ -1545,6 +1676,9 @@ input, textarea, select { font-family: inherit; color: inherit; }
1545
1676
  overflow-y: auto;
1546
1677
  display: flex;
1547
1678
  flex-direction: column;
1679
+ --drawer-shadow-offset: calc(var(--shadow-offset) * 4 * var(--shadow-float-scale));
1680
+ --drawer-shadow-blur: calc(var(--shadow-blur) * 3.75 * var(--shadow-float-scale));
1681
+ --drawer-shadow-spread: calc(var(--shadow-offset) * -3.3 * var(--shadow-float-scale));
1548
1682
  }
1549
1683
  .drawer.hidden {
1550
1684
  display: none;
@@ -1553,25 +1687,25 @@ input, textarea, select { font-family: inherit; color: inherit; }
1553
1687
  top: 0; right: 0; bottom: 0;
1554
1688
  width: min(420px, 92vw);
1555
1689
  animation: drawerInRight var(--dur-slow) var(--ease);
1556
- box-shadow: -24px 0 60px -20px rgba(40, 55, 80, 0.25);
1690
+ box-shadow: calc(var(--drawer-shadow-offset) * -1) 0 var(--drawer-shadow-blur) var(--drawer-shadow-spread) var(--shadow-dark);
1557
1691
  }
1558
1692
  .drawer.left {
1559
1693
  top: 0; left: 0; bottom: 0;
1560
1694
  width: min(420px, 92vw);
1561
1695
  animation: drawerInLeft var(--dur-slow) var(--ease);
1562
- box-shadow: 24px 0 60px -20px rgba(40, 55, 80, 0.25);
1696
+ box-shadow: var(--drawer-shadow-offset) 0 var(--drawer-shadow-blur) var(--drawer-shadow-spread) var(--shadow-dark);
1563
1697
  }
1564
1698
  .drawer.top {
1565
1699
  top: 0; left: 0; right: 0;
1566
1700
  height: min(320px, 80vh);
1567
1701
  animation: drawerInTop var(--dur-slow) var(--ease);
1568
- box-shadow: 0 24px 60px -20px rgba(40, 55, 80, 0.25);
1702
+ box-shadow: 0 var(--drawer-shadow-offset) var(--drawer-shadow-blur) var(--drawer-shadow-spread) var(--shadow-dark);
1569
1703
  }
1570
1704
  .drawer.bottom {
1571
1705
  bottom: 0; left: 0; right: 0;
1572
1706
  height: min(320px, 80vh);
1573
1707
  animation: drawerInBottom var(--dur-slow) var(--ease);
1574
- box-shadow: 0 -24px 60px -20px rgba(40, 55, 80, 0.25);
1708
+ box-shadow: 0 calc(var(--drawer-shadow-offset) * -1) var(--drawer-shadow-blur) var(--drawer-shadow-spread) var(--shadow-dark);
1575
1709
  }
1576
1710
  @keyframes drawerInRight { from { transform: translateX( 20px); opacity: 0; } }
1577
1711
  @keyframes drawerInLeft { from { transform: translateX(-20px); opacity: 0; } }
@@ -1609,7 +1743,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1609
1743
  .drawer-close:hover {
1610
1744
  color: var(--fg);
1611
1745
  background: var(--bg);
1612
- box-shadow: var(--neu-flat);
1746
+ box-shadow: var(--neu-shadow-subtle);
1613
1747
  }
1614
1748
  .drawer-body {
1615
1749
  flex: 1;
@@ -1636,7 +1770,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1636
1770
  font-size: 11px;
1637
1771
  font-weight: 500;
1638
1772
  white-space: nowrap;
1639
- box-shadow: var(--neu-out-sm);
1773
+ box-shadow: var(--neu-shadow-control);
1640
1774
  pointer-events: none;
1641
1775
  animation: fadeIn var(--dur) var(--ease);
1642
1776
  z-index: 1000;
@@ -1658,7 +1792,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1658
1792
  .message {
1659
1793
  background: var(--bg);
1660
1794
  border-radius: var(--r-md);
1661
- box-shadow: var(--neu-float);
1795
+ box-shadow: var(--neu-shadow-float);
1662
1796
  padding: 12px 16px;
1663
1797
  min-width: 240px;
1664
1798
  display: flex; align-items: center; gap: 10px;
@@ -1692,7 +1826,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1692
1826
  background: var(--bg);
1693
1827
  border-radius: var(--r-md);
1694
1828
  min-width: 220px;
1695
- box-shadow: var(--neu-float);
1829
+ box-shadow: var(--neu-shadow-float);
1696
1830
  position: relative;
1697
1831
  }
1698
1832
  /*
@@ -1785,7 +1919,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1785
1919
  padding: 14px 16px;
1786
1920
  border-radius: var(--r-md);
1787
1921
  background: var(--bg);
1788
- box-shadow: var(--neu-in-sm);
1922
+ box-shadow: var(--neu-shadow-inset);
1789
1923
  position: relative;
1790
1924
  }
1791
1925
  .alert-ico {
@@ -1793,6 +1927,13 @@ input, textarea, select { font-family: inherit; color: inherit; }
1793
1927
  display: grid; place-items: center;
1794
1928
  flex-shrink: 0;
1795
1929
  margin-top: 1px;
1930
+ line-height: 0;
1931
+ }
1932
+ .alert-ico img {
1933
+ display: block;
1934
+ width: 16px;
1935
+ height: 16px;
1936
+ object-fit: contain;
1796
1937
  }
1797
1938
  .alert.info .alert-ico { color: var(--info); }
1798
1939
  .alert.success .alert-ico { color: var(--success); }
@@ -1820,12 +1961,12 @@ input, textarea, select { font-family: inherit; color: inherit; }
1820
1961
  cursor: pointer;
1821
1962
  border: none; background: transparent;
1822
1963
  }
1823
- .alert-close:hover { color: var(--fg); background: var(--bg); box-shadow: var(--neu-flat); }
1964
+ .alert-close:hover { color: var(--fg); background: var(--bg); box-shadow: var(--neu-shadow-subtle); }
1824
1965
  /* ============ Table ============ */
1825
1966
  .table-wrap {
1826
1967
  border-radius: var(--r-lg);
1827
1968
  background: var(--bg);
1828
- box-shadow: var(--neu-in-sm);
1969
+ box-shadow: var(--neu-shadow-inset);
1829
1970
  overflow: auto;
1830
1971
  }
1831
1972
  /* When scroll=y is on, the wrap itself becomes the scroll region. */
@@ -1862,13 +2003,13 @@ input, textarea, select { font-family: inherit; color: inherit; }
1862
2003
  width: 16px; height: 16px;
1863
2004
  border-radius: 6px;
1864
2005
  background: var(--bg);
1865
- box-shadow: var(--neu-flat);
2006
+ box-shadow: var(--neu-shadow-subtle);
1866
2007
  align-items: center; justify-content: center;
1867
2008
  margin-left: 6px;
1868
2009
  color: var(--fg-subtle);
1869
2010
  vertical-align: middle;
1870
2011
  }
1871
- .table th.sorted .sort-ind { color: var(--accent); box-shadow: var(--neu-in-sm); }
2012
+ .table th.sorted .sort-ind { color: var(--accent); box-shadow: var(--neu-shadow-inset); }
1872
2013
  .table td {
1873
2014
  padding: 12px 18px;
1874
2015
  border-bottom: 1px solid var(--divider);
@@ -1927,14 +2068,14 @@ input, textarea, select { font-family: inherit; color: inherit; }
1927
2068
  border: none;
1928
2069
  border-radius: var(--r-sm);
1929
2070
  background: var(--bg);
1930
- box-shadow: var(--neu-flat);
2071
+ box-shadow: var(--neu-shadow-subtle);
1931
2072
  color: var(--fg-subtle);
1932
2073
  display: inline-flex; align-items: center; justify-content: center;
1933
2074
  cursor: pointer;
1934
2075
  transition: transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
1935
2076
  }
1936
- .expand-btn:hover { color: var(--accent-ink); box-shadow: var(--neu-out-sm); }
1937
- .expand-btn.open { transform: rotate(90deg); color: var(--accent-ink); box-shadow: var(--neu-in-sm); }
2077
+ .expand-btn:hover { color: var(--accent-ink); box-shadow: var(--neu-shadow-control); }
2078
+ .expand-btn.open { transform: rotate(90deg); color: var(--accent-ink); box-shadow: var(--neu-shadow-inset); }
1938
2079
  /* Expanded row panel */
1939
2080
  .table tbody tr.expanded-row td {
1940
2081
  padding: 14px 18px;
@@ -1945,7 +2086,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1945
2086
  padding: 14px 16px;
1946
2087
  border-radius: var(--r-md);
1947
2088
  background: var(--bg);
1948
- box-shadow: var(--neu-in-sm);
2089
+ box-shadow: var(--neu-shadow-inset);
1949
2090
  color: var(--fg);
1950
2091
  font-size: 13px;
1951
2092
  }
@@ -1956,14 +2097,14 @@ input, textarea, select { font-family: inherit; color: inherit; }
1956
2097
  border: none;
1957
2098
  padding: 0;
1958
2099
  background: var(--bg);
1959
- box-shadow: var(--neu-in-sm);
2100
+ box-shadow: var(--neu-shadow-inset);
1960
2101
  display: inline-flex; align-items: center; justify-content: center;
1961
2102
  cursor: pointer;
1962
2103
  transition: box-shadow var(--dur-fast) var(--ease);
1963
2104
  }
1964
2105
  .table .row-check .radio-dot:disabled { opacity: 0.5; cursor: not-allowed; }
1965
2106
  .table .row-check .radio-dot.checked {
1966
- box-shadow: var(--neu-out-sm);
2107
+ box-shadow: var(--neu-shadow-control);
1967
2108
  }
1968
2109
  .table .row-check .radio-dot.checked::after {
1969
2110
  content: "";
@@ -1977,7 +2118,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1977
2118
  width: 18px; height: 18px;
1978
2119
  border-radius: 5px;
1979
2120
  background: var(--bg);
1980
- box-shadow: var(--neu-flat);
2121
+ box-shadow: var(--neu-shadow-subtle);
1981
2122
  color: var(--fg-subtle);
1982
2123
  align-items: center; justify-content: center;
1983
2124
  margin-left: 6px;
@@ -1990,7 +2131,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1990
2131
  .table th.filterable .filter-ind:hover { color: var(--fg); }
1991
2132
  .table th.filterable .filter-ind.active {
1992
2133
  color: var(--accent-ink);
1993
- box-shadow: var(--neu-in-sm);
2134
+ box-shadow: var(--neu-shadow-inset);
1994
2135
  }
1995
2136
  /* Filter popover panel (portaled to body) */
1996
2137
  .table-filter-panel {
@@ -1999,7 +2140,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
1999
2140
  max-width: 260px;
2000
2141
  background: var(--bg);
2001
2142
  border-radius: var(--r-md);
2002
- box-shadow: var(--neu-float);
2143
+ box-shadow: var(--neu-shadow-float);
2003
2144
  padding: 10px;
2004
2145
  animation: menuIn var(--dur) var(--ease);
2005
2146
  }
@@ -2038,17 +2179,17 @@ input, textarea, select { font-family: inherit; color: inherit; }
2038
2179
  padding: 6px 12px;
2039
2180
  border-radius: var(--r-sm);
2040
2181
  background: var(--bg);
2041
- box-shadow: var(--neu-out-sm);
2182
+ box-shadow: var(--neu-shadow-control);
2042
2183
  font-size: 12px;
2043
2184
  font-family: inherit;
2044
2185
  color: var(--fg);
2045
2186
  cursor: pointer;
2046
2187
  transition: box-shadow var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
2047
2188
  }
2048
- .table-filter-actions .tf-btn:hover { box-shadow: var(--neu-in-sm); }
2189
+ .table-filter-actions .tf-btn:hover { box-shadow: var(--neu-shadow-inset); }
2049
2190
  .table-filter-actions .tf-btn.primary { color: var(--accent-ink); font-weight: 600; }
2050
- .table-filter-actions .tf-btn.ghost { color: var(--fg-muted); box-shadow: var(--neu-flat); }
2051
- .table-filter-actions .tf-btn.ghost:hover { box-shadow: var(--neu-in-sm); }
2191
+ .table-filter-actions .tf-btn.ghost { color: var(--fg-muted); box-shadow: var(--neu-shadow-subtle); }
2192
+ .table-filter-actions .tf-btn.ghost:hover { box-shadow: var(--neu-shadow-inset); }
2052
2193
  /* Built-in pagination bar */
2053
2194
  .table-pagination {
2054
2195
  margin-top: 12px;
@@ -2057,7 +2198,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2057
2198
  .table-card {
2058
2199
  border-radius: var(--r-lg);
2059
2200
  background: var(--bg);
2060
- box-shadow: var(--neu-out-sm);
2201
+ box-shadow: var(--neu-shadow-control);
2061
2202
  overflow: hidden;
2062
2203
  }
2063
2204
  .table-card .table-wrap { background: transparent; box-shadow: none; border-radius: 0; }
@@ -2116,7 +2257,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2116
2257
  border: none;
2117
2258
  border-radius: var(--r-sm);
2118
2259
  background: var(--bg);
2119
- box-shadow: var(--neu-out-sm);
2260
+ box-shadow: var(--neu-shadow-control);
2120
2261
  display: inline-flex; align-items: center; justify-content: center;
2121
2262
  cursor: pointer;
2122
2263
  font-size: 12px;
@@ -2127,11 +2268,11 @@ input, textarea, select { font-family: inherit; color: inherit; }
2127
2268
  }
2128
2269
  .pagination .pg:hover { color: var(--accent-ink); }
2129
2270
  .pagination .pg.active {
2130
- box-shadow: var(--neu-in-sm);
2271
+ box-shadow: var(--neu-shadow-inset);
2131
2272
  color: var(--accent-ink);
2132
2273
  font-weight: 700;
2133
2274
  }
2134
- .pagination .pg.disabled { color: var(--fg-subtle); cursor: not-allowed; box-shadow: var(--neu-flat); }
2275
+ .pagination .pg.disabled { color: var(--fg-subtle); cursor: not-allowed; box-shadow: var(--neu-shadow-subtle); }
2135
2276
  .pagination .ellipsis { padding: 0 4px; color: var(--fg-subtle); }
2136
2277
  /* size changer — compact Select inline with the page buttons */
2137
2278
  .pagination .pg-size-changer { margin-left: 8px; min-width: 108px; }
@@ -2152,7 +2293,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2152
2293
  border: none;
2153
2294
  border-radius: var(--r-sm);
2154
2295
  background: var(--bg);
2155
- box-shadow: var(--neu-in-sm);
2296
+ box-shadow: var(--neu-shadow-inset);
2156
2297
  color: var(--fg);
2157
2298
  font-family: inherit;
2158
2299
  font-size: 12px;
@@ -2162,7 +2303,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2162
2303
  transition: box-shadow var(--dur-fast) var(--ease);
2163
2304
  }
2164
2305
  .pagination .pg-jumper-input:focus-visible {
2165
- box-shadow: var(--neu-in-sm), 0 0 0 2px var(--accent-glow);
2306
+ box-shadow: var(--neu-shadow-inset), 0 0 0 2px var(--accent-glow);
2166
2307
  }
2167
2308
  /* ============ List ============ */
2168
2309
  .list {
@@ -2170,7 +2311,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2170
2311
  flex-direction: column;
2171
2312
  background: var(--bg);
2172
2313
  border-radius: var(--r-lg);
2173
- box-shadow: var(--neu-in-sm);
2314
+ box-shadow: var(--neu-shadow-inset);
2174
2315
  padding: 8px;
2175
2316
  }
2176
2317
  .list-item {
@@ -2182,8 +2323,8 @@ input, textarea, select { font-family: inherit; color: inherit; }
2182
2323
  transition: all var(--dur-fast) var(--ease);
2183
2324
  }
2184
2325
  .list-item.clickable { cursor: pointer; }
2185
- .list-item.clickable:hover { background: var(--bg); box-shadow: var(--neu-flat); }
2186
- .list-item.selected { box-shadow: var(--neu-out-sm); background: var(--bg); }
2326
+ .list-item.clickable:hover { background: var(--bg); box-shadow: var(--neu-shadow-subtle); }
2327
+ .list-item.selected { box-shadow: var(--neu-shadow-control); background: var(--bg); }
2187
2328
  .list.with-dividers .list-item + .list-item { border-top: 1px solid var(--divider); border-radius: 0; }
2188
2329
  .list-item-meta { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
2189
2330
  .list-item-title { font-size: 13px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@@ -2210,7 +2351,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2210
2351
  border: none;
2211
2352
  border-radius: 50%;
2212
2353
  background: var(--bg);
2213
- box-shadow: var(--neu-in-sm);
2354
+ box-shadow: var(--neu-shadow-inset);
2214
2355
  animation: none;
2215
2356
  }
2216
2357
  .spin.ring::before {
@@ -2295,7 +2436,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2295
2436
  width: 56px; height: 56px;
2296
2437
  border-radius: var(--r-lg);
2297
2438
  background: var(--bg);
2298
- box-shadow: var(--neu-in-sm);
2439
+ box-shadow: var(--neu-shadow-inset);
2299
2440
  display: grid; place-items: center;
2300
2441
  color: var(--fg-subtle);
2301
2442
  }
@@ -2346,7 +2487,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2346
2487
  background: var(--bg);
2347
2488
  border-radius: var(--r-lg);
2348
2489
  padding: var(--gap-4);
2349
- box-shadow: var(--neu-out);
2490
+ box-shadow: var(--neu-shadow-panel);
2350
2491
  width: 320px;
2351
2492
  }
2352
2493
  .calendar-head {
@@ -2361,7 +2502,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2361
2502
  font-family: inherit;
2362
2503
  transition: all var(--dur-fast) var(--ease);
2363
2504
  }
2364
- .calendar-title:hover { background: var(--bg); box-shadow: var(--neu-flat); }
2505
+ .calendar-title:hover { background: var(--bg); box-shadow: var(--neu-shadow-subtle); }
2365
2506
  .calendar-grid {
2366
2507
  display: grid;
2367
2508
  grid-template-columns: repeat(7, 1fr);
@@ -2390,7 +2531,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2390
2531
  transition: all var(--dur-fast) var(--ease);
2391
2532
  }
2392
2533
  .calendar-cell.out { color: var(--fg-subtle); opacity: 0.5; }
2393
- .calendar-cell:hover { background: var(--bg); box-shadow: var(--neu-flat); }
2534
+ .calendar-cell:hover { background: var(--bg); box-shadow: var(--neu-shadow-subtle); }
2394
2535
  .calendar-cell.today { font-weight: 700; color: var(--accent-ink); }
2395
2536
  .calendar-cell.today::after {
2396
2537
  content: ""; position: absolute; bottom: 4px; left: 50%;
@@ -2400,7 +2541,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2400
2541
  }
2401
2542
  .calendar-cell.selected {
2402
2543
  background: var(--bg);
2403
- box-shadow: var(--neu-in-sm);
2544
+ box-shadow: var(--neu-shadow-inset);
2404
2545
  color: var(--accent-ink);
2405
2546
  font-weight: 600;
2406
2547
  }
@@ -2413,17 +2554,39 @@ input, textarea, select { font-family: inherit; color: inherit; }
2413
2554
  border-radius: var(--r-md);
2414
2555
  background: var(--bg);
2415
2556
  padding: 6px;
2416
- box-shadow: var(--neu-out-sm);
2557
+ box-shadow: var(--neu-shadow-control);
2417
2558
  overflow: hidden;
2418
2559
  line-height: 0;
2419
2560
  }
2561
+ .n-image.raw {
2562
+ border-radius: 0;
2563
+ background: transparent;
2564
+ box-shadow: none;
2565
+ }
2566
+ .n-image.icon {
2567
+ border-radius: var(--r-sm);
2568
+ }
2569
+ .n-image.unframed {
2570
+ background: transparent;
2571
+ box-shadow: none;
2572
+ }
2420
2573
  .n-image-frame {
2421
2574
  position: relative;
2422
2575
  overflow: hidden;
2423
2576
  border-radius: calc(var(--r-md) - 4px);
2424
- box-shadow: var(--neu-in-sm);
2577
+ box-shadow: var(--neu-shadow-inset);
2425
2578
  background: var(--bg-sunken);
2426
2579
  }
2580
+ .n-image.raw .n-image-frame {
2581
+ border-radius: 0;
2582
+ }
2583
+ .n-image.icon .n-image-frame {
2584
+ border-radius: var(--r-sm);
2585
+ }
2586
+ .n-image.unframed .n-image-frame {
2587
+ background: transparent;
2588
+ box-shadow: none;
2589
+ }
2427
2590
  .n-image img {
2428
2591
  display: block;
2429
2592
  width: 100%;
@@ -2510,7 +2673,62 @@ input, textarea, select { font-family: inherit; color: inherit; }
2510
2673
  max-width: 80vw;
2511
2674
  max-height: 80vh;
2512
2675
  border-radius: var(--r-lg);
2513
- box-shadow: var(--neu-float);
2676
+ box-shadow: var(--neu-shadow-float);
2677
+ }
2678
+ /* ============ SpriteImage / LayeredImage ============ */
2679
+ .n-sprite-image,
2680
+ .n-layered-image {
2681
+ display: inline-block;
2682
+ position: relative;
2683
+ border-radius: var(--r-sm);
2684
+ background: var(--bg);
2685
+ padding: 6px;
2686
+ box-shadow: var(--neu-shadow-control);
2687
+ overflow: hidden;
2688
+ line-height: 0;
2689
+ }
2690
+ .n-sprite-image.raw,
2691
+ .n-layered-image.raw {
2692
+ border-radius: 0;
2693
+ background: transparent;
2694
+ box-shadow: none;
2695
+ }
2696
+ .n-sprite-image.unframed,
2697
+ .n-layered-image.unframed {
2698
+ background: transparent;
2699
+ box-shadow: none;
2700
+ }
2701
+ .n-sprite-image-frame,
2702
+ .n-layered-image-frame {
2703
+ position: relative;
2704
+ width: 100%;
2705
+ overflow: hidden;
2706
+ border-radius: var(--r-sm);
2707
+ background: var(--bg-sunken);
2708
+ box-shadow: var(--neu-shadow-inset);
2709
+ }
2710
+ .n-sprite-image.raw .n-sprite-image-frame,
2711
+ .n-layered-image.raw .n-layered-image-frame {
2712
+ border-radius: 0;
2713
+ }
2714
+ .n-sprite-image.unframed .n-sprite-image-frame,
2715
+ .n-layered-image.unframed .n-layered-image-frame {
2716
+ background: transparent;
2717
+ box-shadow: none;
2718
+ }
2719
+ .n-sprite-image-sprite {
2720
+ display: block;
2721
+ background-repeat: no-repeat;
2722
+ transform-origin: top left;
2723
+ }
2724
+ .n-layered-image-layer {
2725
+ position: absolute;
2726
+ display: block;
2727
+ }
2728
+ .n-layered-image img {
2729
+ display: block;
2730
+ width: 100%;
2731
+ height: 100%;
2514
2732
  }
2515
2733
  /* ============ Cascader ============ */
2516
2734
  .cascader {
@@ -2525,7 +2743,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2525
2743
  padding: 0 36px 0 var(--ctrl-pad-x);
2526
2744
  border-radius: var(--r-md);
2527
2745
  background: var(--bg);
2528
- box-shadow: var(--neu-out-sm);
2746
+ box-shadow: var(--neu-shadow-control);
2529
2747
  display: inline-flex;
2530
2748
  align-items: center;
2531
2749
  font-size: 13px;
@@ -2537,7 +2755,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2537
2755
  text-align: left;
2538
2756
  }
2539
2757
  .cascader-trigger.placeholder { color: var(--fg-subtle); }
2540
- .cascader.open .cascader-trigger { box-shadow: var(--neu-in-sm); color: var(--accent-ink); }
2758
+ .cascader.open .cascader-trigger { box-shadow: var(--neu-shadow-inset); color: var(--accent-ink); }
2541
2759
  .cascader-clear {
2542
2760
  position: absolute;
2543
2761
  right: 30px;
@@ -2547,7 +2765,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2547
2765
  height: 20px;
2548
2766
  border-radius: 999px;
2549
2767
  background: var(--bg);
2550
- box-shadow: var(--neu-out-sm);
2768
+ box-shadow: var(--neu-shadow-control);
2551
2769
  display: inline-grid;
2552
2770
  place-items: center;
2553
2771
  color: var(--fg-subtle);
@@ -2555,13 +2773,13 @@ input, textarea, select { font-family: inherit; color: inherit; }
2555
2773
  transition: all var(--dur-fast) var(--ease);
2556
2774
  }
2557
2775
  .cascader:hover .cascader-clear { opacity: 1; }
2558
- .cascader-clear:hover { color: var(--accent-ink); box-shadow: var(--neu-in-sm); }
2776
+ .cascader-clear:hover { color: var(--accent-ink); box-shadow: var(--neu-shadow-inset); }
2559
2777
  .cascader-panel {
2560
2778
  z-index: 1000;
2561
2779
  display: flex;
2562
2780
  background: var(--bg);
2563
2781
  border-radius: var(--r-md);
2564
- box-shadow: var(--neu-float);
2782
+ box-shadow: var(--neu-shadow-float);
2565
2783
  padding: 6px;
2566
2784
  animation: menuIn var(--dur) var(--ease);
2567
2785
  gap: 4px;
@@ -2602,7 +2820,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2602
2820
  }
2603
2821
  .cascader-search-item:hover {
2604
2822
  background: var(--bg);
2605
- box-shadow: var(--neu-flat);
2823
+ box-shadow: var(--neu-shadow-subtle);
2606
2824
  color: var(--accent-ink);
2607
2825
  }
2608
2826
  .cascader-path-sep { color: var(--fg-subtle); }
@@ -2640,10 +2858,23 @@ input, textarea, select { font-family: inherit; color: inherit; }
2640
2858
  width: 100%;
2641
2859
  text-align: left;
2642
2860
  }
2643
- .cascader-item:hover { background: var(--bg); box-shadow: var(--neu-flat); color: var(--accent-ink); }
2861
+ .cascader-icon {
2862
+ display: inline-flex;
2863
+ align-items: center;
2864
+ justify-content: center;
2865
+ line-height: 0;
2866
+ flex-shrink: 0;
2867
+ }
2868
+ .cascader-icon img {
2869
+ display: block;
2870
+ width: 15px;
2871
+ height: 15px;
2872
+ object-fit: contain;
2873
+ }
2874
+ .cascader-item:hover { background: var(--bg); box-shadow: var(--neu-shadow-subtle); color: var(--accent-ink); }
2644
2875
  .cascader-item.active {
2645
2876
  background: var(--bg);
2646
- box-shadow: var(--neu-in-sm);
2877
+ box-shadow: var(--neu-shadow-inset);
2647
2878
  color: var(--accent-ink);
2648
2879
  font-weight: 500;
2649
2880
  }
@@ -2693,7 +2924,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2693
2924
  padding: 1px 6px;
2694
2925
  border-radius: 5px;
2695
2926
  background: var(--bg-sunken);
2696
- box-shadow: var(--neu-in-sm);
2927
+ box-shadow: var(--neu-shadow-inset);
2697
2928
  color: var(--accent-ink);
2698
2929
  margin: 0 2px;
2699
2930
  }
@@ -2703,7 +2934,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2703
2934
  padding: 1px 7px;
2704
2935
  border-radius: 5px;
2705
2936
  background: var(--bg-raised);
2706
- box-shadow: var(--neu-flat);
2937
+ box-shadow: var(--neu-shadow-subtle);
2707
2938
  border: 1px solid var(--border);
2708
2939
  color: var(--fg);
2709
2940
  margin: 0 2px;
@@ -2784,7 +3015,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2784
3015
  .typo-action:hover {
2785
3016
  color: var(--accent-ink);
2786
3017
  background: var(--bg);
2787
- box-shadow: var(--neu-flat);
3018
+ box-shadow: var(--neu-shadow-subtle);
2788
3019
  }
2789
3020
  .typo-action:focus-visible {
2790
3021
  outline: 2px solid var(--accent-glow);
@@ -2806,7 +3037,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2806
3037
  font: inherit;
2807
3038
  color: inherit;
2808
3039
  background: var(--bg-sunken);
2809
- box-shadow: var(--neu-in);
3040
+ box-shadow: var(--neu-shadow-inset-strong);
2810
3041
  border: none;
2811
3042
  outline: none;
2812
3043
  width: 100%;
@@ -2821,7 +3052,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2821
3052
  font-family: inherit;
2822
3053
  }
2823
3054
  .typo-editor:focus {
2824
- box-shadow: var(--neu-in), 0 0 0 3px var(--accent-glow);
3055
+ box-shadow: var(--neu-shadow-inset-strong), 0 0 0 3px var(--accent-glow);
2825
3056
  }
2826
3057
  /* ---- Ellipsis ---- */
2827
3058
  .typo.ellipsis {
@@ -2880,7 +3111,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2880
3111
  padding: 4px;
2881
3112
  border: none;
2882
3113
  background: var(--bg);
2883
- box-shadow: var(--neu-flat);
3114
+ box-shadow: var(--neu-shadow-subtle);
2884
3115
  border-radius: 10px;
2885
3116
  cursor: pointer;
2886
3117
  transition: box-shadow var(--dur) var(--ease);
@@ -2888,7 +3119,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2888
3119
  font: inherit;
2889
3120
  }
2890
3121
  .cp-trigger:hover:not(:disabled) {
2891
- box-shadow: var(--neu-out);
3122
+ box-shadow: var(--neu-shadow-panel);
2892
3123
  }
2893
3124
  .cp-trigger:disabled {
2894
3125
  opacity: 0.5;
@@ -2910,7 +3141,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2910
3141
  width: 22px;
2911
3142
  height: 22px;
2912
3143
  border-radius: 6px;
2913
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08), var(--neu-in-sm);
3144
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08), var(--neu-shadow-inset);
2914
3145
  background-clip: padding-box;
2915
3146
  }
2916
3147
  .cp-trigger.sm .cp-swatch { width: 18px; height: 18px; border-radius: 5px; }
@@ -2936,7 +3167,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
2936
3167
  padding: 12px;
2937
3168
  background: var(--bg);
2938
3169
  border-radius: var(--r-md);
2939
- box-shadow: var(--neu-float);
3170
+ box-shadow: var(--neu-shadow-float);
2940
3171
  display: flex;
2941
3172
  flex-direction: column;
2942
3173
  gap: 10px;
@@ -3032,7 +3263,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
3032
3263
  border: none;
3033
3264
  outline: none;
3034
3265
  background: var(--bg-sunken);
3035
- box-shadow: var(--neu-in-sm);
3266
+ box-shadow: var(--neu-shadow-inset);
3036
3267
  border-radius: 7px;
3037
3268
  font-family: var(--font-mono);
3038
3269
  font-size: 12px;
@@ -3040,7 +3271,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
3040
3271
  text-transform: lowercase;
3041
3272
  }
3042
3273
  .cp-input:focus {
3043
- box-shadow: var(--neu-in-sm), 0 0 0 2px var(--accent-soft);
3274
+ box-shadow: var(--neu-shadow-inset), 0 0 0 2px var(--accent-soft);
3044
3275
  }
3045
3276
  .cp-presets {
3046
3277
  display: grid;
@@ -3065,7 +3296,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
3065
3296
  }
3066
3297
  /* Dark mode tweaks */
3067
3298
  [data-theme="dark"] .cp-swatch {
3068
- box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12), var(--neu-in-sm);
3299
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12), var(--neu-shadow-inset);
3069
3300
  }
3070
3301
  [data-theme="dark"] .cp-preset {
3071
3302
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
@@ -3123,7 +3354,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
3123
3354
  border: none; padding: 0;
3124
3355
  border-radius: 999px;
3125
3356
  background: var(--bg);
3126
- box-shadow: var(--neu-flat);
3357
+ box-shadow: var(--neu-shadow-subtle);
3127
3358
  position: relative;
3128
3359
  cursor: pointer;
3129
3360
  transition: transform var(--dur-fast) var(--ease);
@@ -3163,7 +3394,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
3163
3394
  overflow: visible;
3164
3395
  }
3165
3396
  .win-controls.windows .win-btn svg { display: block; flex-shrink: 0; }
3166
- .win-controls.windows .win-btn:hover { background: var(--bg); box-shadow: var(--neu-in-sm); color: var(--fg); }
3397
+ .win-controls.windows .win-btn:hover { background: var(--bg); box-shadow: var(--neu-shadow-inset); color: var(--fg); }
3167
3398
  .win-controls.windows .win-btn.close:hover {
3168
3399
  background: var(--danger);
3169
3400
  color: white;
@@ -3199,11 +3430,11 @@ input, textarea, select { font-family: inherit; color: inherit; }
3199
3430
  width: 100%;
3200
3431
  transition: all var(--dur-fast) var(--ease);
3201
3432
  }
3202
- .sidebar-item:hover { color: var(--fg); background: var(--bg); box-shadow: var(--neu-flat); }
3433
+ .sidebar-item:hover { color: var(--fg); background: var(--bg); box-shadow: var(--neu-shadow-subtle); }
3203
3434
  .sidebar-item.active {
3204
3435
  color: var(--accent-ink);
3205
3436
  background: var(--bg);
3206
- box-shadow: var(--neu-in-sm);
3437
+ box-shadow: var(--neu-shadow-inset);
3207
3438
  font-weight: 500;
3208
3439
  }
3209
3440
  .sidebar-icon { display: inline-flex; flex-shrink: 0; }
@@ -3237,3 +3468,445 @@ input, textarea, select { font-family: inherit; color: inherit; }
3237
3468
  min-width: 0;
3238
3469
  overflow: auto;
3239
3470
  }
3471
+ /* ============ ThemePanel ============ */
3472
+ .theme-panel {
3473
+ width: min(100%, 340px);
3474
+ display: flex;
3475
+ flex-direction: column;
3476
+ gap: var(--gap-3);
3477
+ box-sizing: border-box;
3478
+ padding: var(--gap-4);
3479
+ border-radius: var(--r-xl);
3480
+ color: var(--fg);
3481
+ background: var(--bg);
3482
+ box-shadow: var(--neu-shadow-lift);
3483
+ }
3484
+ .theme-panel.compact {
3485
+ width: min(100%, 300px);
3486
+ gap: var(--gap-2);
3487
+ padding: var(--gap-3);
3488
+ }
3489
+ .theme-panel-head {
3490
+ display: flex;
3491
+ flex-direction: column;
3492
+ gap: 4px;
3493
+ }
3494
+ .theme-panel-title {
3495
+ display: inline-flex;
3496
+ align-items: center;
3497
+ gap: 8px;
3498
+ min-width: 0;
3499
+ color: var(--fg);
3500
+ font-size: 14px;
3501
+ font-weight: 700;
3502
+ }
3503
+ .theme-panel-title svg {
3504
+ flex: 0 0 auto;
3505
+ color: var(--accent);
3506
+ }
3507
+ .theme-panel-title span {
3508
+ min-width: 0;
3509
+ overflow: hidden;
3510
+ text-overflow: ellipsis;
3511
+ white-space: nowrap;
3512
+ }
3513
+ .theme-panel-desc {
3514
+ font-size: 12px;
3515
+ color: var(--fg-muted);
3516
+ }
3517
+ .theme-panel-row {
3518
+ display: flex;
3519
+ flex-direction: column;
3520
+ gap: 8px;
3521
+ padding-top: var(--gap-3);
3522
+ border-top: 1px solid var(--divider);
3523
+ }
3524
+ .theme-panel-head + .theme-panel-row,
3525
+ .theme-panel-row:first-child {
3526
+ border-top: none;
3527
+ padding-top: 0;
3528
+ }
3529
+ .theme-panel-label {
3530
+ display: flex;
3531
+ align-items: center;
3532
+ justify-content: space-between;
3533
+ gap: 10px;
3534
+ font-size: 12px;
3535
+ font-weight: 600;
3536
+ color: var(--fg);
3537
+ }
3538
+ .theme-panel-label > span:last-child:not(:first-child) {
3539
+ min-width: 0;
3540
+ max-width: 54%;
3541
+ overflow: hidden;
3542
+ text-overflow: ellipsis;
3543
+ white-space: nowrap;
3544
+ padding: 2px 8px;
3545
+ border-radius: var(--r-pill);
3546
+ color: var(--accent-ink);
3547
+ background: var(--bg);
3548
+ box-shadow: var(--neu-shadow-inset);
3549
+ font-family: var(--font-mono);
3550
+ font-size: 11px;
3551
+ font-weight: 500;
3552
+ }
3553
+ .theme-panel-presets {
3554
+ display: grid;
3555
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3556
+ gap: var(--gap-2);
3557
+ }
3558
+ .theme-panel-preset-shell {
3559
+ position: relative;
3560
+ min-width: 0;
3561
+ }
3562
+ .theme-panel .theme-panel-preset.btn {
3563
+ min-width: 0;
3564
+ width: 100%;
3565
+ height: auto;
3566
+ min-height: 74px;
3567
+ justify-content: stretch;
3568
+ align-items: stretch;
3569
+ flex-direction: column;
3570
+ gap: 8px;
3571
+ padding: 9px;
3572
+ color: var(--fg-muted);
3573
+ background: var(--bg);
3574
+ box-shadow: var(--neu-shadow-control);
3575
+ text-align: left;
3576
+ white-space: normal;
3577
+ transition:
3578
+ color var(--dur-fast) var(--ease),
3579
+ box-shadow var(--dur-fast) var(--ease),
3580
+ transform var(--dur-fast) var(--ease);
3581
+ }
3582
+ .theme-panel .theme-panel-preset.btn:hover {
3583
+ color: var(--fg);
3584
+ box-shadow: var(--neu-shadow-panel);
3585
+ transform: translateY(-1px);
3586
+ }
3587
+ .theme-panel .theme-panel-preset.btn.active {
3588
+ color: var(--accent-ink);
3589
+ box-shadow: var(--neu-shadow-inset), 0 0 0 1px var(--accent-glow);
3590
+ transform: none;
3591
+ }
3592
+ .theme-panel .theme-panel-preset.btn.active:hover {
3593
+ color: var(--accent-ink);
3594
+ box-shadow: var(--neu-shadow-inset), 0 0 0 1px var(--accent-glow);
3595
+ }
3596
+ .theme-panel .theme-panel-preset-shell.deletable .theme-panel-preset.btn {
3597
+ padding-right: 28px;
3598
+ }
3599
+ .theme-panel .theme-panel-preset-delete.btn {
3600
+ position: absolute;
3601
+ top: 6px;
3602
+ right: 6px;
3603
+ width: 22px;
3604
+ height: 22px;
3605
+ min-width: 22px;
3606
+ padding: 0;
3607
+ color: var(--fg-subtle);
3608
+ background: var(--bg);
3609
+ box-shadow: var(--neu-shadow-control);
3610
+ opacity: 0;
3611
+ transform: scale(0.92);
3612
+ }
3613
+ .theme-panel-preset-shell:hover .theme-panel-preset-delete.btn,
3614
+ .theme-panel-preset-shell:focus-within .theme-panel-preset-delete.btn {
3615
+ opacity: 1;
3616
+ transform: scale(1);
3617
+ }
3618
+ .theme-panel .theme-panel-preset-delete.btn:hover {
3619
+ box-shadow: var(--neu-shadow-inset);
3620
+ }
3621
+ .theme-panel-preset-ink {
3622
+ display: grid;
3623
+ grid-template-columns: 1fr 1fr 0.7fr;
3624
+ gap: 4px;
3625
+ width: 100%;
3626
+ }
3627
+ .theme-panel-preset-ink span {
3628
+ height: 18px;
3629
+ min-width: 0;
3630
+ border-radius: var(--r-pill);
3631
+ box-shadow: inset 0 0 0 1px var(--divider);
3632
+ }
3633
+ .theme-panel-preset-copy {
3634
+ display: flex;
3635
+ flex-direction: column;
3636
+ gap: 2px;
3637
+ min-width: 0;
3638
+ width: 100%;
3639
+ }
3640
+ .theme-panel-preset-copy > span {
3641
+ min-width: 0;
3642
+ overflow: hidden;
3643
+ text-overflow: ellipsis;
3644
+ white-space: nowrap;
3645
+ color: inherit;
3646
+ font-size: 12px;
3647
+ font-weight: 700;
3648
+ }
3649
+ .theme-panel-preset-copy small {
3650
+ min-width: 0;
3651
+ overflow: hidden;
3652
+ text-overflow: ellipsis;
3653
+ white-space: nowrap;
3654
+ color: var(--fg-subtle);
3655
+ font-size: 10px;
3656
+ font-weight: 500;
3657
+ }
3658
+ .theme-panel-swatches {
3659
+ display: flex;
3660
+ align-items: center;
3661
+ flex-wrap: wrap;
3662
+ gap: 8px;
3663
+ }
3664
+ .theme-panel .theme-panel-swatch.btn {
3665
+ width: 28px;
3666
+ height: 28px;
3667
+ min-width: 28px;
3668
+ padding: 0;
3669
+ border-radius: var(--r-pill);
3670
+ box-shadow: var(--neu-shadow-subtle);
3671
+ }
3672
+ .theme-panel-swatch.active {
3673
+ box-shadow: var(--neu-shadow-inset), 0 0 0 2px var(--accent-glow);
3674
+ }
3675
+ .theme-panel .radio-group.segmented {
3676
+ width: 100%;
3677
+ }
3678
+ .theme-panel .btn.block {
3679
+ margin-top: var(--gap-1);
3680
+ }
3681
+ .theme-panel-create {
3682
+ display: flex;
3683
+ flex-direction: column;
3684
+ gap: 10px;
3685
+ padding: 10px;
3686
+ border-radius: var(--r-md);
3687
+ background: var(--bg);
3688
+ box-shadow: var(--neu-shadow-inset);
3689
+ }
3690
+ .theme-panel-create-head {
3691
+ display: flex;
3692
+ align-items: center;
3693
+ justify-content: space-between;
3694
+ gap: 10px;
3695
+ }
3696
+ .theme-panel-create-head > div {
3697
+ min-width: 0;
3698
+ display: flex;
3699
+ flex-direction: column;
3700
+ gap: 2px;
3701
+ }
3702
+ .theme-panel-create-head span {
3703
+ color: var(--fg);
3704
+ font-size: 12px;
3705
+ font-weight: 700;
3706
+ }
3707
+ .theme-panel-create-head small {
3708
+ min-width: 0;
3709
+ color: var(--fg-subtle);
3710
+ font-family: var(--font-mono);
3711
+ font-size: 10px;
3712
+ overflow: hidden;
3713
+ text-overflow: ellipsis;
3714
+ white-space: nowrap;
3715
+ }
3716
+ .theme-panel-create-field {
3717
+ min-width: 0;
3718
+ display: flex;
3719
+ flex-direction: column;
3720
+ gap: 6px;
3721
+ color: var(--fg-subtle);
3722
+ font-family: var(--font-mono);
3723
+ font-size: 10px;
3724
+ }
3725
+ .theme-panel-create-field .radio-group.segmented {
3726
+ width: 100%;
3727
+ }
3728
+ .theme-panel-create-mode.radio-group.segmented {
3729
+ width: 100%;
3730
+ }
3731
+ .theme-panel-create-grid {
3732
+ display: grid;
3733
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3734
+ gap: 8px;
3735
+ }
3736
+ .theme-panel-create-grid .cp-trigger,
3737
+ .theme-panel-create-grid .cp-custom-trigger {
3738
+ width: 100%;
3739
+ }
3740
+ .theme-panel-create-sliders {
3741
+ display: flex;
3742
+ flex-direction: column;
3743
+ gap: 8px;
3744
+ padding: 2px 0;
3745
+ }
3746
+ .theme-panel-shadow {
3747
+ gap: 7px;
3748
+ }
3749
+ .theme-panel-create-preview {
3750
+ min-height: 36px;
3751
+ display: flex;
3752
+ align-items: center;
3753
+ justify-content: space-between;
3754
+ gap: 10px;
3755
+ padding: 7px 9px;
3756
+ border-radius: var(--preview-radius, var(--r-md));
3757
+ color: var(--preview-fg, var(--fg));
3758
+ background: var(--preview-bg, var(--bg));
3759
+ box-shadow:
3760
+ calc(var(--shadow-offset) * 0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-offset) * 0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-blur) * 0.55 * var(--preview-shadow-scale, 1)) var(--preview-shadow-dark, var(--shadow-dark)),
3761
+ calc(var(--shadow-offset) * -0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-offset) * -0.45 * var(--preview-shadow-scale, 1)) calc(var(--shadow-blur) * 0.55 * var(--preview-shadow-scale, 1)) var(--preview-shadow-light, var(--shadow-light));
3762
+ font-family: var(--preview-font, var(--font-sans));
3763
+ font-size: 12px;
3764
+ font-weight: 700;
3765
+ }
3766
+ .theme-panel-create-preview-label {
3767
+ min-width: 0;
3768
+ display: inline-flex;
3769
+ align-items: center;
3770
+ gap: 7px;
3771
+ color: inherit;
3772
+ }
3773
+ .theme-panel-create-preview-label > span {
3774
+ min-width: 0;
3775
+ overflow: hidden;
3776
+ text-overflow: ellipsis;
3777
+ white-space: nowrap;
3778
+ }
3779
+ .theme-panel-create-preview i {
3780
+ flex: 0 0 auto;
3781
+ width: 20px;
3782
+ height: 20px;
3783
+ border-radius: var(--r-pill);
3784
+ background: var(--preview-accent, var(--accent));
3785
+ box-shadow:
3786
+ inset 1px 1px 2px color-mix(in oklch, var(--preview-accent, var(--accent)) 50%, white),
3787
+ 0 0 0 4px var(--preview-accent-glow, var(--accent-glow));
3788
+ }
3789
+ .theme-panel-create-actions {
3790
+ display: grid;
3791
+ grid-template-columns: 0.85fr 1fr;
3792
+ gap: 8px;
3793
+ }
3794
+ .theme-panel-advanced {
3795
+ display: flex;
3796
+ flex-direction: column;
3797
+ gap: 12px;
3798
+ padding-top: 2px;
3799
+ }
3800
+ .theme-panel-advanced-section {
3801
+ display: flex;
3802
+ flex-direction: column;
3803
+ gap: 8px;
3804
+ padding-top: 10px;
3805
+ border-top: 1px solid var(--divider);
3806
+ }
3807
+ .theme-panel-advanced-section.compact {
3808
+ padding-top: 0;
3809
+ border-top: none;
3810
+ }
3811
+ .theme-panel-advanced-title {
3812
+ display: flex;
3813
+ align-items: baseline;
3814
+ justify-content: space-between;
3815
+ gap: 8px;
3816
+ }
3817
+ .theme-panel-advanced-title span {
3818
+ min-width: 0;
3819
+ color: var(--fg);
3820
+ font-size: 11px;
3821
+ font-weight: 700;
3822
+ }
3823
+ .theme-panel-advanced-title small {
3824
+ min-width: 0;
3825
+ color: var(--fg-subtle);
3826
+ font-family: var(--font-mono);
3827
+ font-size: 9px;
3828
+ overflow: hidden;
3829
+ text-overflow: ellipsis;
3830
+ white-space: nowrap;
3831
+ }
3832
+ .theme-panel-token-grid {
3833
+ display: flex;
3834
+ flex-direction: column;
3835
+ gap: 7px;
3836
+ }
3837
+ .theme-panel-token-field {
3838
+ min-width: 0;
3839
+ display: grid;
3840
+ grid-template-columns: 88px minmax(0, 1fr);
3841
+ gap: 8px;
3842
+ align-items: center;
3843
+ }
3844
+ .theme-panel-token-label {
3845
+ min-width: 0;
3846
+ display: flex;
3847
+ flex-direction: column;
3848
+ gap: 2px;
3849
+ }
3850
+ .theme-panel-token-label span {
3851
+ color: var(--fg-muted);
3852
+ font-size: 10px;
3853
+ font-weight: 650;
3854
+ white-space: nowrap;
3855
+ }
3856
+ .theme-panel-token-label code {
3857
+ color: var(--fg-subtle);
3858
+ font-family: var(--font-mono);
3859
+ font-size: 9px;
3860
+ overflow: hidden;
3861
+ text-overflow: ellipsis;
3862
+ white-space: nowrap;
3863
+ }
3864
+ .theme-panel-token-input {
3865
+ min-width: 0;
3866
+ display: grid;
3867
+ grid-template-columns: 24px minmax(0, 1fr);
3868
+ gap: 7px;
3869
+ align-items: center;
3870
+ }
3871
+ .theme-panel-token-field.scale {
3872
+ align-items: start;
3873
+ }
3874
+ .theme-panel-token-scale {
3875
+ min-width: 0;
3876
+ display: grid;
3877
+ grid-template-columns: 64px minmax(0, 1fr);
3878
+ gap: 7px;
3879
+ align-items: center;
3880
+ }
3881
+ .theme-panel-token-picker {
3882
+ width: 24px;
3883
+ height: 24px;
3884
+ }
3885
+ .theme-panel-token-picker .cp-custom-trigger {
3886
+ width: 24px;
3887
+ height: 24px;
3888
+ display: block;
3889
+ border-radius: 7px;
3890
+ }
3891
+ .theme-panel-token-swatch {
3892
+ display: block;
3893
+ width: 24px;
3894
+ height: 24px;
3895
+ border-radius: 7px;
3896
+ box-shadow: var(--neu-shadow-inset), inset 0 0 0 1px var(--border);
3897
+ transition:
3898
+ box-shadow var(--dur-fast) var(--ease),
3899
+ transform var(--dur-fast) var(--ease);
3900
+ }
3901
+ .theme-panel-token-picker .cp-custom-trigger:hover .theme-panel-token-swatch {
3902
+ box-shadow: var(--neu-shadow-control), inset 0 0 0 1px var(--border);
3903
+ transform: translateY(-1px);
3904
+ }
3905
+ .theme-panel-token-input .input-wrap,
3906
+ .theme-panel-create-field .input-wrap {
3907
+ min-width: 0;
3908
+ }
3909
+ .theme-panel-token-input .input {
3910
+ font-family: var(--font-mono);
3911
+ font-size: 11px;
3912
+ }