@akairos/pipeline 0.18.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/ARTICLE-THEMES.md +2 -0
  2. package/README.md +27 -4
  3. package/package.json +7 -5
  4. package/src/adapter-loader.ts +24 -4
  5. package/src/adapter-types.ts +14 -0
  6. package/src/article-theme.test.ts +55 -0
  7. package/src/article-theme.ts +10 -2
  8. package/src/commands/article-theme.ts +1 -1
  9. package/src/commands/init.ts +2 -0
  10. package/src/commands/publish.ts +1 -1
  11. package/src/commands/typeset-assets-sync.test.ts +12 -1
  12. package/src/commands/wechat-export.ts +9 -4
  13. package/src/plugin-runner.ts +10 -4
  14. package/src/plugin-runtime.test.ts +19 -0
  15. package/src/plugin-runtime.ts +11 -2
  16. package/src/providers/index.ts +4 -2
  17. package/src/runtime-package.ts +13 -6
  18. package/src/wechat-preview/assets/browser-dist/.vite/manifest.json +1280 -5
  19. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  20. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  21. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  22. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  23. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  24. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  25. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  26. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  27. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  28. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  29. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  30. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  31. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  32. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  33. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  34. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  35. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  36. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  37. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  38. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  39. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  40. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  41. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  42. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  43. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  44. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  45. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  46. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  47. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  48. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  49. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  50. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  51. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  52. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  53. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  54. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  55. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  56. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  57. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  58. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  59. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  60. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  61. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  62. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  63. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  64. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  65. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  66. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  67. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  68. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  69. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  70. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  71. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  72. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  73. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  74. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  75. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  76. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  77. package/src/wechat-preview/assets/browser-dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  78. package/src/wechat-preview/assets/browser-dist/assets/apl-B4CMkyY2.js +1 -0
  79. package/src/wechat-preview/assets/browser-dist/assets/asciiarmor-Df11BRmG.js +1 -0
  80. package/src/wechat-preview/assets/browser-dist/assets/asn1-EdZsLKOL.js +1 -0
  81. package/src/wechat-preview/assets/browser-dist/assets/asterisk-B-8jnY81.js +1 -0
  82. package/src/wechat-preview/assets/browser-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  83. package/src/wechat-preview/assets/browser-dist/assets/clike-B9uivgTg.js +1 -0
  84. package/src/wechat-preview/assets/browser-dist/assets/clojure-BMjYHr_A.js +1 -0
  85. package/src/wechat-preview/assets/browser-dist/assets/cmake-BQqOBYOt.js +1 -0
  86. package/src/wechat-preview/assets/browser-dist/assets/cobol-CWcv1MsR.js +1 -0
  87. package/src/wechat-preview/assets/browser-dist/assets/coffeescript-S37ZYGWr.js +1 -0
  88. package/src/wechat-preview/assets/browser-dist/assets/commonlisp-DBKNyK5s.js +1 -0
  89. package/src/wechat-preview/assets/browser-dist/assets/crystal-SjHAIU92.js +1 -0
  90. package/src/wechat-preview/assets/browser-dist/assets/css-BnMrqG3P.js +1 -0
  91. package/src/wechat-preview/assets/browser-dist/assets/cypher-C_CwsFkJ.js +1 -0
  92. package/src/wechat-preview/assets/browser-dist/assets/d-pRatUO7H.js +1 -0
  93. package/src/wechat-preview/assets/browser-dist/assets/diff-DbItnlRl.js +1 -0
  94. package/src/wechat-preview/assets/browser-dist/assets/dockerfile-BKs6k2Af.js +1 -0
  95. package/src/wechat-preview/assets/browser-dist/assets/dtd-DF_7sFjM.js +1 -0
  96. package/src/wechat-preview/assets/browser-dist/assets/dylan-DwRh75JA.js +1 -0
  97. package/src/wechat-preview/assets/browser-dist/assets/ebnf-CDyGwa7X.js +1 -0
  98. package/src/wechat-preview/assets/browser-dist/assets/ecl-Cabwm37j.js +1 -0
  99. package/src/wechat-preview/assets/browser-dist/assets/eiffel-CnydiIhH.js +1 -0
  100. package/src/wechat-preview/assets/browser-dist/assets/elm-vLlmbW-K.js +1 -0
  101. package/src/wechat-preview/assets/browser-dist/assets/erlang-BNw1qcRV.js +1 -0
  102. package/src/wechat-preview/assets/browser-dist/assets/factor-kuTfRLto.js +1 -0
  103. package/src/wechat-preview/assets/browser-dist/assets/fcl-Kvtd6kyn.js +1 -0
  104. package/src/wechat-preview/assets/browser-dist/assets/forth-Ffai-XNe.js +1 -0
  105. package/src/wechat-preview/assets/browser-dist/assets/fortran-DYz_wnZ1.js +1 -0
  106. package/src/wechat-preview/assets/browser-dist/assets/gas-Bneqetm1.js +1 -0
  107. package/src/wechat-preview/assets/browser-dist/assets/gherkin-heZmZLOM.js +1 -0
  108. package/src/wechat-preview/assets/browser-dist/assets/groovy-D9Dt4D0W.js +1 -0
  109. package/src/wechat-preview/assets/browser-dist/assets/haskell-Cw1EW3IL.js +1 -0
  110. package/src/wechat-preview/assets/browser-dist/assets/haxe-H-WmDvRZ.js +1 -0
  111. package/src/wechat-preview/assets/browser-dist/assets/http-DBlCnlav.js +1 -0
  112. package/src/wechat-preview/assets/browser-dist/assets/idl-BEugSyMb.js +1 -0
  113. package/src/wechat-preview/assets/browser-dist/assets/index-B13lCSuc.js +1 -0
  114. package/src/wechat-preview/assets/browser-dist/assets/index-BDdU9pNh.js +1 -0
  115. package/src/wechat-preview/assets/browser-dist/assets/index-BFLGVgsp.js +1 -0
  116. package/src/wechat-preview/assets/browser-dist/assets/index-BHJY0B4E.js +8 -0
  117. package/src/wechat-preview/assets/browser-dist/assets/index-BOnKEJxh.js +7 -0
  118. package/src/wechat-preview/assets/browser-dist/assets/index-BPmBcGI-.js +1 -0
  119. package/src/wechat-preview/assets/browser-dist/assets/index-BTVIa90Y.js +1 -0
  120. package/src/wechat-preview/assets/browser-dist/assets/index-BYV6TA8f.js +1 -0
  121. package/src/wechat-preview/assets/browser-dist/assets/index-BlVpb0dF.js +1 -0
  122. package/src/wechat-preview/assets/browser-dist/assets/index-BqKARoyW.js +1 -0
  123. package/src/wechat-preview/assets/browser-dist/assets/index-BzHql5Rp.js +20 -0
  124. package/src/wechat-preview/assets/browser-dist/assets/index-CPFEJ9fX.js +1 -0
  125. package/src/wechat-preview/assets/browser-dist/assets/index-CdxKyTX6.js +1 -0
  126. package/src/wechat-preview/assets/browser-dist/assets/index-CyXDvcwY.js +1 -0
  127. package/src/wechat-preview/assets/browser-dist/assets/index-DA7Z4paG.js +13 -0
  128. package/src/wechat-preview/assets/browser-dist/assets/index-DDQGWU_D.js +3 -0
  129. package/src/wechat-preview/assets/browser-dist/assets/index-DENMoE5l.js +1 -0
  130. package/src/wechat-preview/assets/browser-dist/assets/index-D_EI5vFS.js +1 -0
  131. package/src/wechat-preview/assets/browser-dist/assets/index-DpuVrwze.js +1 -0
  132. package/src/wechat-preview/assets/browser-dist/assets/index-IBlhKHQr.js +8 -0
  133. package/src/wechat-preview/assets/browser-dist/assets/index-ifI5svkD.js +2 -0
  134. package/src/wechat-preview/assets/browser-dist/assets/index-vRiJxvj2.js +1 -0
  135. package/src/wechat-preview/assets/browser-dist/assets/javascript-iXu5QeM3.js +1 -0
  136. package/src/wechat-preview/assets/browser-dist/assets/julia-DuME0IfC.js +1 -0
  137. package/src/wechat-preview/assets/browser-dist/assets/livescript-BwQOo05w.js +1 -0
  138. package/src/wechat-preview/assets/browser-dist/assets/lua-VAEuO923.js +1 -0
  139. package/src/wechat-preview/assets/browser-dist/assets/mathematica-DTrFuWx2.js +1 -0
  140. package/src/wechat-preview/assets/browser-dist/assets/mbox-CNhZ1qSd.js +1 -0
  141. package/src/wechat-preview/assets/browser-dist/assets/mirc-CjQqDB4T.js +1 -0
  142. package/src/wechat-preview/assets/browser-dist/assets/mllike-CXdrOF99.js +1 -0
  143. package/src/wechat-preview/assets/browser-dist/assets/modelica-Dc1JOy9r.js +1 -0
  144. package/src/wechat-preview/assets/browser-dist/assets/mscgen-BA5vi2Kp.js +1 -0
  145. package/src/wechat-preview/assets/browser-dist/assets/mumps-BT43cFF4.js +1 -0
  146. package/src/wechat-preview/assets/browser-dist/assets/nginx-DdIZxoE0.js +1 -0
  147. package/src/wechat-preview/assets/browser-dist/assets/nsis-LY0VT_u5.js +1 -0
  148. package/src/wechat-preview/assets/browser-dist/assets/ntriples-BfvgReVJ.js +1 -0
  149. package/src/wechat-preview/assets/browser-dist/assets/octave-Ck1zUtKM.js +1 -0
  150. package/src/wechat-preview/assets/browser-dist/assets/oz-BzwKVEFT.js +1 -0
  151. package/src/wechat-preview/assets/browser-dist/assets/pascal--L3eBynH.js +1 -0
  152. package/src/wechat-preview/assets/browser-dist/assets/perl-CdXCOZ3F.js +1 -0
  153. package/src/wechat-preview/assets/browser-dist/assets/pig-CevX1Tat.js +1 -0
  154. package/src/wechat-preview/assets/browser-dist/assets/powershell-CFHJl5sT.js +1 -0
  155. package/src/wechat-preview/assets/browser-dist/assets/properties-C78fOPTZ.js +1 -0
  156. package/src/wechat-preview/assets/browser-dist/assets/protobuf-ChK-085T.js +1 -0
  157. package/src/wechat-preview/assets/browser-dist/assets/pug-DeIclll2.js +1 -0
  158. package/src/wechat-preview/assets/browser-dist/assets/puppet-DMA9R1ak.js +1 -0
  159. package/src/wechat-preview/assets/browser-dist/assets/python-BuPzkPfP.js +1 -0
  160. package/src/wechat-preview/assets/browser-dist/assets/q-pXgVlZs6.js +1 -0
  161. package/src/wechat-preview/assets/browser-dist/assets/r-B6wPVr8A.js +1 -0
  162. package/src/wechat-preview/assets/browser-dist/assets/rpm-CTu-6PCP.js +1 -0
  163. package/src/wechat-preview/assets/browser-dist/assets/ruby-BK5aLJev.js +1 -0
  164. package/src/wechat-preview/assets/browser-dist/assets/sas-B4kiWyti.js +1 -0
  165. package/src/wechat-preview/assets/browser-dist/assets/scheme-C41bIUwD.js +1 -0
  166. package/src/wechat-preview/assets/browser-dist/assets/shell-CjFT_Tl9.js +1 -0
  167. package/src/wechat-preview/assets/browser-dist/assets/sieve-C3Gn_uJK.js +1 -0
  168. package/src/wechat-preview/assets/browser-dist/assets/simple-mode-GW_nhZxv.js +1 -0
  169. package/src/wechat-preview/assets/browser-dist/assets/smalltalk-CnHTOXQT.js +1 -0
  170. package/src/wechat-preview/assets/browser-dist/assets/solr-DehyRSwq.js +1 -0
  171. package/src/wechat-preview/assets/browser-dist/assets/sparql-DkYu6x3z.js +1 -0
  172. package/src/wechat-preview/assets/browser-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  173. package/src/wechat-preview/assets/browser-dist/assets/sql-D0XecflT.js +1 -0
  174. package/src/wechat-preview/assets/browser-dist/assets/stex-C3f8Ysf7.js +1 -0
  175. package/src/wechat-preview/assets/browser-dist/assets/style-Cif_gYUW.css +1 -0
  176. package/src/wechat-preview/assets/browser-dist/assets/stylus-B533Al4x.js +1 -0
  177. package/src/wechat-preview/assets/browser-dist/assets/swift-BzpIVaGY.js +1 -0
  178. package/src/wechat-preview/assets/browser-dist/assets/tcl-DVfN8rqt.js +1 -0
  179. package/src/wechat-preview/assets/browser-dist/assets/textile-CnDTJFAw.js +1 -0
  180. package/src/wechat-preview/assets/browser-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  181. package/src/wechat-preview/assets/browser-dist/assets/tiki-DGYXhP31.js +1 -0
  182. package/src/wechat-preview/assets/browser-dist/assets/toml-Bm5Em-hy.js +1 -0
  183. package/src/wechat-preview/assets/browser-dist/assets/troff-wAsdV37c.js +1 -0
  184. package/src/wechat-preview/assets/browser-dist/assets/ttcn-CfJYG6tj.js +1 -0
  185. package/src/wechat-preview/assets/browser-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  186. package/src/wechat-preview/assets/browser-dist/assets/turtle-B1tBg_DP.js +1 -0
  187. package/src/wechat-preview/assets/browser-dist/assets/vb-CmGdzxic.js +1 -0
  188. package/src/wechat-preview/assets/browser-dist/assets/vbscript-BuJXcnF6.js +1 -0
  189. package/src/wechat-preview/assets/browser-dist/assets/velocity-D8B20fx6.js +1 -0
  190. package/src/wechat-preview/assets/browser-dist/assets/verilog-C6RDOZhf.js +1 -0
  191. package/src/wechat-preview/assets/browser-dist/assets/vhdl-lSbBsy5d.js +1 -0
  192. package/src/wechat-preview/assets/browser-dist/assets/webidl-ZXfAyPTL.js +1 -0
  193. package/src/wechat-preview/assets/browser-dist/assets/{wechat-renderer-GgNrlSLi.js → wechat-renderer-CcHuq7M-.js} +83 -61
  194. package/src/wechat-preview/assets/browser-dist/assets/xquery-DzFWVndE.js +1 -0
  195. package/src/wechat-preview/assets/browser-dist/assets/yacas-BJ4BC0dw.js +1 -0
  196. package/src/wechat-preview/assets/browser-dist/assets/z80-Hz9HOZM7.js +1 -0
  197. package/src/wechat-preview/assets/browser-dist/editor-export.js +1 -1
  198. package/src/wechat-preview/assets/browser-dist/src/wechat-preview/browser/studio/studio.html +215 -165
  199. package/src/wechat-preview/assets/browser-dist/studio.js +1148 -237
  200. package/src/wechat-preview/browser/studio/color-palettes.ts +28 -0
  201. package/src/wechat-preview/browser/studio/config-manager.ts +49 -0
  202. package/src/wechat-preview/browser/studio/milkdown-article-menu.ts +251 -0
  203. package/src/wechat-preview/browser/studio/myno-editor.ts +122 -0
  204. package/src/wechat-preview/browser/studio/studio.css +493 -250
  205. package/src/wechat-preview/browser/studio/studio.html +213 -163
  206. package/src/wechat-preview/browser/studio/studio.ts +684 -211
  207. package/src/wechat-preview/browser/studio/style-packs.ts +201 -0
  208. package/src/wechat-preview/browser/studio/syntax-presets.test.ts +10 -32
  209. package/src/wechat-preview/browser/studio/syntax-presets.ts +19 -357
  210. package/src/wechat-preview/fixtures/all-nodes.md +2 -11
  211. package/src/wechat-preview/index.ts +35 -14
  212. package/src/wechat-preview/server/http.ts +64 -8
  213. package/src/wechat-preview/server/studio.test.ts +60 -1
  214. package/src/wechat-preview/wechat-export.integration.test.ts +49 -8
  215. package/src/wechat-preview/wechat-renderer.ts +134 -11
  216. package/src/workflow.test.ts +2 -0
  217. package/src/wechat-preview/assets/browser-dist/assets/style-C9-YtTIm.css +0 -1
@@ -1,16 +1,26 @@
1
1
  :root {
2
- --bg-main: #f8fafc;
3
- --bg-panel: #ffffff;
2
+ --bg-app: #f8fafc;
3
+ --bg-surface: #ffffff;
4
+ --bg-elevated: #f1f5f9;
4
5
  --border: #e2e8f0;
6
+ --border-hover: #cbd5e1;
5
7
  --border-focus: #ca6093;
6
- --text-main: #1e293b;
8
+ --text-main: #0f172a;
7
9
  --text-muted: #64748b;
10
+ --text-subtle: #94a3b8;
8
11
  --brand: #ca6093;
9
12
  --brand-hover: #b35082;
10
13
  --brand-light: rgba(202, 96, 147, 0.08);
11
- --success: #10b981;
14
+ --success: #059669;
15
+ --success-hover: #047857;
12
16
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
13
- --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
17
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
18
+ --radius-sm: 6px;
19
+ --radius-md: 10px;
20
+ --radius-lg: 16px;
21
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
22
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.06);
23
+ --shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.08);
14
24
  }
15
25
 
16
26
  * {
@@ -22,98 +32,137 @@
22
32
  body {
23
33
  font-family: var(--font-sans);
24
34
  color: var(--text-main);
25
- background: var(--bg-main);
35
+ background: var(--bg-app);
26
36
  height: 100vh;
27
37
  display: flex;
28
38
  flex-direction: column;
29
39
  overflow: hidden;
40
+ -webkit-font-smoothing: antialiased;
30
41
  }
31
42
 
32
- /* Header */
43
+ /* ── Top Header ────────────────────────────────────────── */
33
44
  .studio-header {
34
- height: 52px;
35
- background: var(--bg-panel);
45
+ height: 54px;
46
+ background: var(--bg-surface);
36
47
  border-bottom: 1px solid var(--border);
37
48
  display: flex;
38
49
  align-items: center;
39
50
  justify-content: space-between;
40
51
  padding: 0 16px;
41
- z-index: 10;
52
+ z-index: 20;
53
+ gap: 16px;
42
54
  }
43
55
 
44
56
  .brand-section {
45
57
  display: flex;
46
58
  align-items: center;
47
- gap: 10px;
59
+ gap: 8px;
48
60
  }
49
61
 
50
- .brand-logo {
51
- font-size: 18px;
62
+ .brand-icon {
63
+ width: 28px;
64
+ height: 28px;
65
+ border-radius: var(--radius-sm);
66
+ background: linear-gradient(135deg, var(--brand) 0%, #e082b0 100%);
67
+ color: #fff;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ }
72
+
73
+ .brand-text {
74
+ display: flex;
75
+ flex-direction: column;
76
+ line-height: 1.15;
52
77
  }
53
78
 
54
79
  .brand-title {
55
- font-size: 15px;
80
+ font-size: 14px;
56
81
  font-weight: 700;
57
- color: var(--text-main);
58
82
  letter-spacing: -0.01em;
59
83
  }
60
84
 
61
- .brand-badge {
85
+ .brand-subtitle {
86
+ font-size: 10px;
87
+ color: var(--text-muted);
88
+ }
89
+
90
+ .badge {
62
91
  font-size: 11px;
63
92
  font-weight: 600;
64
- background: var(--brand-light);
65
- color: var(--brand);
66
- padding: 2px 8px;
93
+ padding: 2px 7px;
67
94
  border-radius: 999px;
95
+ white-space: nowrap;
68
96
  }
69
97
 
70
- .header-controls {
98
+ .badge-subtle {
99
+ background: var(--bg-elevated);
100
+ color: var(--text-muted);
101
+ }
102
+
103
+ .header-center {
71
104
  display: flex;
72
105
  align-items: center;
73
- gap: 12px;
106
+ gap: 8px;
74
107
  }
75
108
 
76
- .account-select-wrap {
109
+ .config-selector-group {
77
110
  display: flex;
78
111
  align-items: center;
79
112
  gap: 6px;
80
- font-size: 13px;
81
- color: var(--text-muted);
82
113
  }
83
114
 
84
- .account-select {
85
- padding: 5px 10px;
86
- font-size: 13px;
87
- border-radius: 6px;
88
- border: 1px solid var(--border);
89
- background: #fff;
90
- color: var(--text-main);
91
- outline: none;
92
- cursor: pointer;
115
+ .selector-label {
116
+ font-size: 12px;
117
+ color: var(--text-muted);
93
118
  }
94
119
 
95
- .account-select:focus {
96
- border-color: var(--border-focus);
120
+ .header-actions {
121
+ display: flex;
122
+ align-items: center;
123
+ gap: 8px;
97
124
  }
98
125
 
126
+ /* ── Buttons ───────────────────────────────────────────── */
99
127
  .btn {
100
128
  display: inline-flex;
101
129
  align-items: center;
102
- gap: 6px;
130
+ gap: 5px;
103
131
  padding: 6px 12px;
104
- border-radius: 6px;
105
- font-size: 13px;
106
- font-weight: 500;
132
+ border-radius: var(--radius-sm);
133
+ font-size: 12px;
134
+ font-weight: 550;
107
135
  cursor: pointer;
108
136
  border: 1px solid var(--border);
109
- background: #fff;
137
+ background: var(--bg-surface);
110
138
  color: var(--text-main);
111
139
  transition: all 0.15s ease;
112
140
  text-decoration: none;
141
+ white-space: nowrap;
113
142
  }
114
143
 
115
144
  .btn:hover {
116
- background: #f1f5f9;
145
+ background: var(--bg-elevated);
146
+ border-color: var(--border-hover);
147
+ }
148
+
149
+ .btn-sm {
150
+ padding: 5px 10px;
151
+ font-size: 12px;
152
+ }
153
+
154
+ .btn-xs {
155
+ padding: 3px 8px;
156
+ font-size: 11px;
157
+ }
158
+
159
+ .btn-ghost {
160
+ border-color: transparent;
161
+ background: transparent;
162
+ }
163
+
164
+ .btn-ghost:hover {
165
+ background: var(--bg-elevated);
117
166
  }
118
167
 
119
168
  .btn-primary {
@@ -128,17 +177,33 @@ body {
128
177
  }
129
178
 
130
179
  .btn-success {
131
- background: #059669;
180
+ background: var(--success);
132
181
  color: #fff;
133
- border-color: #059669;
182
+ border-color: var(--success);
183
+ box-shadow: 0 1px 3px rgba(5, 150, 105, 0.2);
134
184
  }
135
185
 
136
186
  .btn-success:hover {
137
- background: #047857;
138
- border-color: #047857;
187
+ background: var(--success-hover);
188
+ border-color: var(--success-hover);
139
189
  }
140
190
 
141
- /* Layout */
191
+ .select-control {
192
+ padding: 4px 8px;
193
+ font-size: 12px;
194
+ border-radius: var(--radius-sm);
195
+ border: 1px solid var(--border);
196
+ background: var(--bg-surface);
197
+ color: var(--text-main);
198
+ outline: none;
199
+ cursor: pointer;
200
+ }
201
+
202
+ .select-control:focus {
203
+ border-color: var(--brand);
204
+ }
205
+
206
+ /* ── Studio Body ───────────────────────────────────────── */
142
207
  .studio-body {
143
208
  flex: 1;
144
209
  display: flex;
@@ -146,35 +211,35 @@ body {
146
211
  overflow: hidden;
147
212
  }
148
213
 
149
- /* Panel Common */
150
214
  .panel {
151
215
  display: flex;
152
216
  flex-direction: column;
153
- background: var(--bg-panel);
217
+ background: var(--bg-surface);
154
218
  min-height: 0;
155
219
  }
156
220
 
157
221
  .panel-header {
158
- padding: 10px 16px;
222
+ padding: 8px 14px;
159
223
  border-bottom: 1px solid var(--border);
160
224
  display: flex;
161
225
  align-items: center;
162
226
  justify-content: space-between;
163
227
  background: #fafbfc;
228
+ height: 42px;
164
229
  }
165
230
 
166
231
  .panel-title {
167
- font-size: 13px;
232
+ font-size: 12px;
168
233
  font-weight: 650;
169
234
  color: var(--text-main);
170
235
  display: flex;
171
236
  align-items: center;
172
- gap: 6px;
237
+ gap: 5px;
173
238
  }
174
239
 
175
- /* Left Panel - Style & Syntax */
240
+ /* ── Left Panel ────────────────────────────────────────── */
176
241
  .left-panel {
177
- width: 360px;
242
+ width: 350px;
178
243
  border-right: 1px solid var(--border);
179
244
  flex-shrink: 0;
180
245
  }
@@ -182,13 +247,13 @@ body {
182
247
  .tab-nav {
183
248
  display: flex;
184
249
  border-bottom: 1px solid var(--border);
185
- background: #f8fafc;
250
+ background: #fafbfc;
186
251
  }
187
252
 
188
253
  .tab-btn {
189
254
  flex: 1;
190
- padding: 10px 12px;
191
- font-size: 13px;
255
+ padding: 9px 12px;
256
+ font-size: 12px;
192
257
  font-weight: 600;
193
258
  border: none;
194
259
  background: transparent;
@@ -204,58 +269,182 @@ body {
204
269
 
205
270
  .tab-btn.active {
206
271
  color: var(--brand);
207
- background: #fff;
272
+ background: var(--bg-surface);
208
273
  border-bottom-color: var(--brand);
209
274
  }
210
275
 
211
276
  .tab-content {
212
277
  flex: 1;
213
278
  overflow-y: auto;
214
- padding: 16px;
279
+ padding: 14px;
215
280
  }
216
281
 
217
282
  .config-section {
218
- margin-bottom: 22px;
283
+ margin-bottom: 20px;
219
284
  }
220
285
 
221
- .section-label {
286
+ .section-title {
222
287
  font-size: 12px;
223
288
  font-weight: 700;
224
- text-transform: uppercase;
225
- letter-spacing: 0.05em;
226
- color: var(--text-muted);
227
- margin-bottom: 12px;
289
+ color: var(--text-main);
290
+ margin-bottom: 10px;
228
291
  display: flex;
229
292
  align-items: center;
230
293
  gap: 6px;
231
294
  }
232
295
 
233
- .form-group {
296
+ /* ── Curated Style Packs Cards ─────────────────────────── */
297
+ .style-packs-grid {
298
+ display: grid;
299
+ grid-template-columns: repeat(2, 1fr);
300
+ gap: 8px;
234
301
  margin-bottom: 14px;
235
302
  }
236
303
 
237
- .form-label {
304
+ .style-pack-card {
305
+ border: 1px solid var(--border);
306
+ border-radius: var(--radius-sm);
307
+ padding: 8px 10px;
308
+ background: var(--bg-surface);
309
+ cursor: pointer;
310
+ transition: all 0.15s ease;
311
+ display: flex;
312
+ flex-direction: column;
313
+ gap: 5px;
314
+ }
315
+
316
+ .style-pack-card:hover {
317
+ border-color: var(--border-hover);
318
+ background: #fafbfc;
319
+ transform: translateY(-1px);
320
+ }
321
+
322
+ .style-pack-card.active {
323
+ border-color: var(--brand);
324
+ background: var(--brand-light);
325
+ box-shadow: 0 0 0 1px var(--brand);
326
+ }
327
+
328
+ .style-pack-head {
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: space-between;
332
+ }
333
+
334
+ .style-pack-name {
335
+ font-size: 12px;
336
+ font-weight: 650;
337
+ color: var(--text-main);
338
+ }
339
+
340
+ .style-pack-subtitle {
341
+ font-size: 10px;
342
+ color: var(--text-subtle);
343
+ }
344
+
345
+ .style-pack-swatches {
346
+ display: flex;
347
+ gap: 4px;
348
+ align-items: center;
349
+ }
350
+
351
+ .swatch-dot {
352
+ width: 12px;
353
+ height: 12px;
354
+ border-radius: 50%;
355
+ border: 1px solid rgba(0, 0, 0, 0.08);
356
+ }
357
+
358
+ .style-pack-desc {
359
+ font-size: 10px;
360
+ color: var(--text-muted);
361
+ line-height: 1.35;
362
+ display: -webkit-box;
363
+ -webkit-line-clamp: 2;
364
+ -webkit-box-orient: vertical;
365
+ overflow: hidden;
366
+ }
367
+
368
+ /* ── Segmented Controls ────────────────────────────────── */
369
+ .control-group {
370
+ margin-bottom: 14px;
371
+ }
372
+
373
+ .control-label {
238
374
  display: flex;
239
375
  justify-content: space-between;
240
376
  align-items: center;
241
377
  font-size: 12px;
378
+ font-weight: 550;
242
379
  color: var(--text-main);
243
380
  margin-bottom: 6px;
244
381
  }
245
382
 
246
- .form-val {
383
+ .control-val {
247
384
  font-family: var(--font-mono);
248
385
  font-size: 11px;
249
386
  color: var(--text-muted);
250
387
  }
251
388
 
252
- .slider-input {
253
- width: 100%;
254
- accent-color: var(--brand);
389
+ .segmented-control {
390
+ display: flex;
391
+ background: var(--bg-elevated);
392
+ padding: 3px;
393
+ border-radius: var(--radius-sm);
394
+ gap: 2px;
395
+ }
396
+
397
+ .seg-btn {
398
+ flex: 1;
399
+ padding: 5px 0;
400
+ font-size: 11px;
401
+ font-weight: 500;
402
+ border: none;
403
+ background: transparent;
404
+ color: var(--text-muted);
405
+ cursor: pointer;
406
+ border-radius: 4px;
407
+ transition: all 0.15s ease;
408
+ text-align: center;
409
+ }
410
+
411
+ .seg-btn:hover {
412
+ color: var(--text-main);
413
+ }
414
+
415
+ .seg-btn.active {
416
+ background: var(--bg-surface);
417
+ color: var(--text-main);
418
+ font-weight: 600;
419
+ box-shadow: var(--shadow-sm);
420
+ }
421
+
422
+ .hidden-slider {
423
+ display: none;
424
+ }
425
+
426
+ /* ── Color Swatches Row ────────────────────────────────── */
427
+ .color-swatches-row {
428
+ display: flex;
429
+ gap: 6px;
430
+ margin-bottom: 8px;
431
+ }
432
+
433
+ .swatch-btn {
434
+ width: 24px;
435
+ height: 24px;
436
+ border-radius: 50%;
437
+ border: 2px solid var(--bg-surface);
438
+ box-shadow: 0 0 0 1px var(--border);
255
439
  cursor: pointer;
440
+ transition: transform 0.15s ease;
441
+ }
442
+
443
+ .swatch-btn:hover {
444
+ transform: scale(1.15);
256
445
  }
257
446
 
258
- .color-input-row {
447
+ .color-picker-inline {
259
448
  display: flex;
260
449
  align-items: center;
261
450
  gap: 8px;
@@ -265,18 +454,14 @@ body {
265
454
  -webkit-appearance: none;
266
455
  appearance: none;
267
456
  border: 1px solid var(--border);
268
- border-radius: 6px;
269
- width: 32px;
270
- height: 32px;
457
+ border-radius: var(--radius-sm);
458
+ width: 28px;
459
+ height: 28px;
271
460
  cursor: pointer;
272
- padding: 2px;
461
+ padding: 1px;
273
462
  background: #fff;
274
463
  }
275
464
 
276
- .color-picker::-webkit-color-swatch-wrapper {
277
- padding: 0;
278
- }
279
-
280
465
  .color-picker::-webkit-color-swatch {
281
466
  border: none;
282
467
  border-radius: 4px;
@@ -284,145 +469,196 @@ body {
284
469
 
285
470
  .color-hex {
286
471
  flex: 1;
287
- padding: 6px 10px;
472
+ padding: 4px 8px;
288
473
  font-family: var(--font-mono);
289
- font-size: 12px;
474
+ font-size: 11px;
290
475
  border: 1px solid var(--border);
291
- border-radius: 6px;
476
+ border-radius: var(--radius-sm);
292
477
  color: var(--text-main);
293
478
  }
294
479
 
295
- .switch-label {
296
- display: flex;
297
- align-items: center;
298
- justify-content: space-between;
480
+ /* ── H2 Visual Pills ───────────────────────────────────── */
481
+ .pills-grid {
482
+ display: grid;
483
+ grid-template-columns: repeat(3, 1fr);
484
+ gap: 6px;
485
+ }
486
+
487
+ .pill-btn {
488
+ padding: 6px 4px;
489
+ font-size: 11px;
490
+ font-weight: 500;
491
+ border: 1px solid var(--border);
492
+ border-radius: var(--radius-sm);
493
+ background: var(--bg-surface);
494
+ color: var(--text-muted);
299
495
  cursor: pointer;
300
- font-size: 12px;
496
+ transition: all 0.15s ease;
497
+ text-align: center;
301
498
  }
302
499
 
303
- .switch-toggle {
304
- position: relative;
305
- display: inline-block;
306
- width: 38px;
307
- height: 20px;
500
+ .pill-btn:hover {
501
+ border-color: var(--border-hover);
502
+ color: var(--text-main);
308
503
  }
309
504
 
310
- .switch-toggle input {
311
- opacity: 0;
312
- width: 0;
313
- height: 0;
505
+ .pill-btn.active {
506
+ border-color: var(--brand);
507
+ background: var(--brand-light);
508
+ color: var(--brand);
509
+ font-weight: 600;
314
510
  }
315
511
 
316
- .slider-round {
317
- position: absolute;
512
+ /* ── Accordion for Advanced Settings ───────────────────── */
513
+ .accordion-section {
514
+ border: 1px solid var(--border);
515
+ border-radius: var(--radius-sm);
516
+ background: var(--bg-surface);
517
+ margin-bottom: 14px;
518
+ overflow: hidden;
519
+ }
520
+
521
+ .accordion-summary {
522
+ padding: 8px 12px;
523
+ font-size: 12px;
524
+ font-weight: 600;
525
+ color: var(--text-muted);
318
526
  cursor: pointer;
319
- top: 0;
320
- left: 0;
321
- right: 0;
322
- bottom: 0;
323
- background-color: #cbd5e1;
324
- transition: 0.2s;
325
- border-radius: 20px;
527
+ display: flex;
528
+ align-items: center;
529
+ justify-content: space-between;
530
+ user-select: none;
531
+ background: #fafbfc;
326
532
  }
327
533
 
328
- .slider-round:before {
329
- position: absolute;
330
- content: "";
331
- height: 14px;
332
- width: 14px;
333
- left: 3px;
334
- bottom: 3px;
335
- background-color: white;
336
- transition: 0.2s;
337
- border-radius: 50%;
534
+ .accordion-summary:hover {
535
+ color: var(--text-main);
338
536
  }
339
537
 
340
- input:checked + .slider-round {
341
- background-color: var(--brand);
538
+ .accordion-arrow {
539
+ font-size: 14px;
540
+ transition: transform 0.2s ease;
342
541
  }
343
542
 
344
- input:checked + .slider-round:before {
345
- transform: translateX(18px);
543
+ details[open] .accordion-arrow {
544
+ transform: rotate(90deg);
346
545
  }
347
546
 
348
- .css-editor {
547
+ .accordion-body {
548
+ padding: 12px;
549
+ border-top: 1px solid var(--border);
550
+ background: var(--bg-surface);
551
+ }
552
+
553
+ .text-input {
349
554
  width: 100%;
350
- height: 140px;
351
- font-family: var(--font-mono);
555
+ padding: 5px 8px;
352
556
  font-size: 12px;
557
+ border: 1px solid var(--border);
558
+ border-radius: var(--radius-sm);
559
+ color: var(--text-main);
560
+ }
561
+
562
+ .code-textarea {
563
+ width: 100%;
564
+ height: 120px;
565
+ font-family: var(--font-mono);
566
+ font-size: 11px;
353
567
  line-height: 1.5;
354
- padding: 8px 10px;
568
+ padding: 8px;
355
569
  border: 1px solid var(--border);
356
- border-radius: 6px;
570
+ border-radius: var(--radius-sm);
357
571
  background: #fafbfc;
358
- color: #0f172a;
572
+ color: var(--text-main);
359
573
  resize: vertical;
360
- outline: none;
361
574
  }
362
575
 
363
- .css-editor:focus {
364
- border-color: var(--border-focus);
365
- background: #fff;
576
+ .slider-input {
577
+ width: 100%;
578
+ accent-color: var(--brand);
579
+ cursor: pointer;
366
580
  }
367
581
 
368
- /* Syntax Cheatsheet Cards */
369
- .syntax-card {
370
- border: 1px solid var(--border);
371
- border-radius: 8px;
372
- padding: 12px;
582
+ .switch-row {
583
+ display: flex;
584
+ justify-content: space-between;
585
+ align-items: center;
586
+ cursor: pointer;
587
+ font-size: 12px;
588
+ }
589
+
590
+ .form-hint {
591
+ font-size: 10px;
592
+ color: var(--text-muted);
593
+ margin-top: 4px;
594
+ }
595
+
596
+ .full-width {
597
+ width: 100%;
598
+ }
599
+
600
+ /* ── Tab 2: Syntax Cheatsheet ──────────────────────────── */
601
+ .syntax-guide-intro {
602
+ padding: 8px 10px;
603
+ border-radius: var(--radius-sm);
604
+ background: var(--brand-light);
605
+ color: var(--brand);
606
+ font-size: 11px;
607
+ font-weight: 550;
373
608
  margin-bottom: 12px;
374
- background: #fff;
375
- transition: border-color 0.15s;
376
609
  }
377
610
 
378
- .syntax-card:hover {
379
- border-color: #cbd5e1;
611
+ .syntax-card {
612
+ border: 1px solid var(--border);
613
+ border-radius: var(--radius-sm);
614
+ padding: 10px;
615
+ margin-bottom: 10px;
616
+ background: #fff;
380
617
  }
381
618
 
382
619
  .syntax-card-header {
383
620
  display: flex;
384
621
  justify-content: space-between;
385
622
  align-items: center;
386
- margin-bottom: 6px;
623
+ margin-bottom: 4px;
387
624
  }
388
625
 
389
626
  .syntax-card-title {
390
- font-size: 13px;
627
+ font-size: 12px;
391
628
  font-weight: 650;
392
- color: var(--text-main);
393
629
  }
394
630
 
395
631
  .syntax-card-badge {
396
- font-size: 10px;
632
+ font-size: 9px;
397
633
  font-weight: 600;
398
- padding: 1px 6px;
634
+ padding: 1px 5px;
399
635
  border-radius: 999px;
400
636
  background: #f1f5f9;
401
637
  color: var(--text-muted);
402
638
  }
403
639
 
404
640
  .syntax-card-desc {
405
- font-size: 12px;
641
+ font-size: 11px;
406
642
  color: var(--text-muted);
407
- margin-bottom: 8px;
408
- line-height: 1.4;
643
+ margin-bottom: 6px;
644
+ line-height: 1.35;
409
645
  }
410
646
 
411
647
  .syntax-code-snippet {
412
648
  background: #f8fafc;
413
649
  border: 1px solid #e2e8f0;
414
- border-radius: 6px;
415
- padding: 8px 10px;
650
+ border-radius: 4px;
651
+ padding: 6px 8px;
416
652
  font-family: var(--font-mono);
417
- font-size: 11px;
653
+ font-size: 10px;
418
654
  color: #334155;
419
655
  white-space: pre-wrap;
420
- margin-bottom: 8px;
656
+ margin-bottom: 6px;
421
657
  }
422
658
 
423
659
  .syntax-btn-insert {
424
660
  width: 100%;
425
- padding: 4px 8px;
661
+ padding: 4px 6px;
426
662
  font-size: 11px;
427
663
  font-weight: 600;
428
664
  border: 1px dashed var(--border);
@@ -430,6 +666,7 @@ input:checked + .slider-round:before {
430
666
  background: #fafbfc;
431
667
  color: var(--brand);
432
668
  cursor: pointer;
669
+ transition: all 0.15s ease;
433
670
  }
434
671
 
435
672
  .syntax-btn-insert:hover {
@@ -437,35 +674,101 @@ input:checked + .slider-round:before {
437
674
  border-color: var(--brand);
438
675
  }
439
676
 
440
- /* Middle Panel - Markdown Editor */
677
+ /* ── Middle Panel: Editor ──────────────────────────────── */
441
678
  .editor-panel {
442
679
  flex: 1;
443
680
  border-right: 1px solid var(--border);
444
- min-width: 320px;
681
+ min-width: 340px;
445
682
  }
446
683
 
447
- .editor-toolbar {
684
+ .editor-mode-toggle {
685
+ display: flex;
686
+ background: var(--bg-elevated);
687
+ padding: 2px;
688
+ border-radius: var(--radius-sm);
689
+ gap: 2px;
690
+ }
691
+
692
+ .mode-btn {
693
+ padding: 4px 10px;
694
+ font-size: 11px;
695
+ font-weight: 550;
696
+ border: none;
697
+ background: transparent;
698
+ color: var(--text-muted);
699
+ cursor: pointer;
700
+ border-radius: 4px;
701
+ transition: all 0.15s;
702
+ }
703
+
704
+ .mode-btn:hover {
705
+ color: var(--text-main);
706
+ }
707
+
708
+ .mode-btn.active {
709
+ background: var(--bg-surface);
710
+ color: var(--text-main);
711
+ box-shadow: var(--shadow-sm);
712
+ }
713
+
714
+ .editor-header-actions {
448
715
  display: flex;
449
- gap: 8px;
450
716
  align-items: center;
717
+ gap: 6px;
451
718
  }
452
719
 
453
- .editor-textarea {
720
+ .editor-workspace {
721
+ flex: 1;
722
+ display: flex;
723
+ flex-direction: column;
724
+ position: relative;
725
+ overflow: hidden;
726
+ background: var(--bg-surface);
727
+ }
728
+
729
+ .milkdown-editor-surface {
730
+ flex: 1;
731
+ overflow-y: auto;
732
+ overflow-x: hidden;
733
+ padding: 24px 36px 48px 56px;
734
+ box-sizing: border-box;
735
+ }
736
+
737
+ /* Milkdown Crepe surface styling overrides */
738
+ .milkdown-editor-surface .milkdown {
739
+ min-height: 100%;
740
+ max-width: 760px;
741
+ margin: 0 auto;
742
+ position: relative;
743
+ background: transparent !important;
744
+ }
745
+
746
+ .milkdown-editor-surface .milkdown .editor {
747
+ min-height: 60vh;
748
+ padding: 0 0 100px 0 !important;
749
+ background: transparent !important;
750
+ outline: none !important;
751
+ }
752
+
753
+ .editor-textarea-source {
454
754
  flex: 1;
455
755
  width: 100%;
756
+ max-width: 760px;
757
+ margin: 0 auto;
456
758
  border: none;
457
759
  outline: none;
458
760
  resize: none;
459
- padding: 16px 20px;
761
+ padding: 24px 36px 48px 56px;
762
+ box-sizing: border-box;
460
763
  font-family: var(--font-mono);
461
764
  font-size: 13px;
462
765
  line-height: 1.7;
463
- color: #1e293b;
464
- background: #ffffff;
766
+ color: var(--text-main);
767
+ background: var(--bg-surface);
465
768
  }
466
769
 
467
770
  .editor-footer {
468
- padding: 6px 16px;
771
+ padding: 6px 14px;
469
772
  border-top: 1px solid var(--border);
470
773
  background: #fafbfc;
471
774
  font-size: 11px;
@@ -474,32 +777,36 @@ input:checked + .slider-round:before {
474
777
  justify-content: space-between;
475
778
  }
476
779
 
477
- /* Right Panel - Live WeChat Preview */
780
+ .editor-sync-indicator {
781
+ color: var(--success);
782
+ font-weight: 500;
783
+ }
784
+
785
+ /* ── Right Panel: Phone Simulation (430px) ─────────────── */
478
786
  .preview-panel {
479
787
  width: 480px;
480
788
  flex-shrink: 0;
481
789
  background: #f1f5f9;
482
790
  }
483
791
 
484
- .preview-container {
792
+ .preview-scroll-container {
485
793
  flex: 1;
486
794
  overflow-y: auto;
487
795
  display: flex;
488
796
  flex-direction: column;
489
797
  align-items: center;
490
- padding: 24px 16px 48px;
798
+ padding: 20px 14px 40px;
491
799
  }
492
800
 
493
801
  .device-frame {
494
802
  width: 430px;
495
803
  min-height: 680px;
496
804
  background: #ffffff;
497
- border-radius: 18px;
498
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.05);
805
+ border-radius: 20px;
806
+ box-shadow: var(--shadow-md), 0 0 0 1px var(--border);
499
807
  overflow: hidden;
500
808
  display: flex;
501
809
  flex-direction: column;
502
- border: 1px solid #e2e8f0;
503
810
  }
504
811
 
505
812
  .device-notch-bar {
@@ -510,9 +817,14 @@ input:checked + .slider-round:before {
510
817
  align-items: center;
511
818
  justify-content: space-between;
512
819
  padding: 0 16px;
513
- font-size: 11px;
820
+ font-size: 10px;
514
821
  font-weight: 600;
515
- color: #64748b;
822
+ color: var(--text-muted);
823
+ }
824
+
825
+ .device-app-title {
826
+ font-weight: 700;
827
+ color: var(--text-main);
516
828
  }
517
829
 
518
830
  .device-screen {
@@ -522,7 +834,12 @@ input:checked + .slider-round:before {
522
834
  overflow-y: auto;
523
835
  }
524
836
 
525
- /* Toast */
837
+ .html-source-box {
838
+ width: 430px;
839
+ margin-top: 14px;
840
+ }
841
+
842
+ /* ── Toast Notifications ───────────────────────────────── */
526
843
  .toast-container {
527
844
  position: fixed;
528
845
  bottom: 24px;
@@ -537,11 +854,11 @@ input:checked + .slider-round:before {
537
854
  .toast {
538
855
  background: #1e293b;
539
856
  color: #fff;
540
- padding: 10px 16px;
541
- border-radius: 8px;
542
- font-size: 13px;
857
+ padding: 9px 15px;
858
+ border-radius: var(--radius-sm);
859
+ font-size: 12px;
543
860
  font-weight: 500;
544
- box-shadow: 0 6px 18px rgba(0, 0, 0, 0.15);
861
+ box-shadow: var(--shadow-md);
545
862
  opacity: 0;
546
863
  transform: translateY(10px);
547
864
  transition: all 0.25s ease;
@@ -558,81 +875,7 @@ input:checked + .slider-round:before {
558
875
  border: 1px solid #10b981;
559
876
  }
560
877
 
561
- /* Syntax Presets */
562
- .preset-group {
563
- margin-bottom: 10px;
564
- padding: 10px 12px;
565
- background: #f8fafc;
566
- border: 1px solid var(--border);
567
- border-radius: var(--radius-sm);
568
- transition: border-color 0.15s;
569
- }
570
-
571
- .preset-group:hover {
572
- border-color: #cbd5e1;
573
- }
574
-
575
- .preset-header {
576
- display: flex;
577
- align-items: center;
578
- justify-content: space-between;
579
- margin-bottom: 6px;
580
- }
581
-
582
- .preset-title {
583
- font-size: 12px;
584
- font-weight: 650;
585
- color: var(--text-main);
586
- display: flex;
587
- align-items: center;
588
- gap: 5px;
589
- }
590
-
591
- .preset-select {
592
- width: 100%;
593
- padding: 5px 8px;
594
- font-size: 12px;
595
- font-weight: 500;
596
- border: 1px solid var(--border);
597
- border-radius: 4px;
598
- background: #ffffff;
599
- color: var(--text-main);
600
- outline: none;
601
- cursor: pointer;
602
- transition: border-color 0.15s;
603
- }
604
-
605
- .preset-select:focus {
606
- border-color: var(--brand);
607
- }
608
-
609
- .preset-desc {
610
- font-size: 11px;
611
- color: var(--text-muted);
612
- margin-top: 5px;
613
- line-height: 1.4;
614
- padding-left: 2px;
615
- }
616
-
617
- .btn-extract-css {
618
- padding: 2px 7px;
619
- font-size: 11px;
620
- font-weight: 550;
621
- color: var(--brand);
622
- background: #ffffff;
623
- border: 1px solid var(--border);
624
- border-radius: 4px;
625
- cursor: pointer;
626
- transition: all 0.15s ease;
627
- white-space: nowrap;
628
- }
629
-
630
- .btn-extract-css:hover {
631
- background: #f1f5f9;
632
- border-color: var(--brand);
633
- }
634
-
635
- /* Hidden milkdown host used for in-browser AST parsing */
636
- #studio-editor-host {
637
- display: none;
878
+ .toast.toast-error {
879
+ background: #881337;
880
+ border: 1px solid #f43f5e;
638
881
  }