aitu-app 0.5.14

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 (237) hide show
  1. package/.DS_Store +0 -0
  2. package/README.md +47 -0
  3. package/_headers +84 -0
  4. package/_redirects +2 -0
  5. package/assets/ChatMessagesArea-CkUX81uB.js +251 -0
  6. package/assets/ChatMessagesArea-Di0Z80Zh.css +1 -0
  7. package/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  8. package/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  9. package/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  10. package/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  11. package/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  12. package/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  13. package/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  14. package/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  15. package/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  16. package/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  17. package/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  18. package/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  19. package/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  20. package/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  21. package/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  22. package/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  23. package/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  24. package/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  25. package/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  26. package/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  27. package/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  28. package/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  29. package/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  30. package/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  31. package/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  32. package/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  33. package/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  34. package/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  35. package/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  36. package/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  37. package/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  38. package/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  39. package/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  40. package/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  41. package/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  42. package/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  43. package/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  44. package/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  45. package/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  46. package/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  47. package/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  48. package/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  49. package/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  50. package/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  51. package/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  52. package/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  53. package/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  54. package/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  55. package/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  56. package/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  57. package/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  58. package/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  59. package/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  60. package/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  61. package/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  62. package/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  63. package/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  64. package/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  65. package/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  66. package/assets/Tableau10-B-NsZVaP.js +1 -0
  67. package/assets/Tableau10-Dnlau_Wv.js +1 -0
  68. package/assets/ToolboxDrawer-By1XMh8B.js +87 -0
  69. package/assets/ToolboxDrawer-fPqvDLQE.css +1 -0
  70. package/assets/__vite-browser-external-BIHI7g3E.js +1 -0
  71. package/assets/ai-analyze-Db-iXol6.js +1 -0
  72. package/assets/arc-BZXVqUcI.js +1 -0
  73. package/assets/arc-ajYHRRnk.js +1 -0
  74. package/assets/array-B5oSNiGi.js +1 -0
  75. package/assets/array-BKyUJesY.js +1 -0
  76. package/assets/batch-image-generation-Baqb01Lm.js +6 -0
  77. package/assets/batch-image-generation-CbLMWmjk.css +1 -0
  78. package/assets/blockDiagram-38ab4fdb-BT3H_WVv.js +118 -0
  79. package/assets/blockDiagram-38ab4fdb-u0xYP3Lt.js +118 -0
  80. package/assets/c4Diagram-3d4e48cf-CBvM6zjM.js +10 -0
  81. package/assets/c4Diagram-3d4e48cf-WOIEVidH.js +10 -0
  82. package/assets/channel-BP25wTsw.js +1 -0
  83. package/assets/channel-HzrLNFUg.js +1 -0
  84. package/assets/classDiagram-70f12bd4-BMutcvFi.js +2 -0
  85. package/assets/classDiagram-70f12bd4-Cl9U1r5F.js +2 -0
  86. package/assets/classDiagram-v2-f2320105-C0agtbR4.js +2 -0
  87. package/assets/classDiagram-v2-f2320105-tCBzATK6.js +2 -0
  88. package/assets/clone-B69pF7Y_.js +1 -0
  89. package/assets/clone-oX7o-l4R.js +1 -0
  90. package/assets/createText-2e5e7dd3-CZ9_fscE.js +5 -0
  91. package/assets/createText-2e5e7dd3-idrqgJjU.js +7 -0
  92. package/assets/edges-e0da2a9e-C-RyePMV.js +4 -0
  93. package/assets/edges-e0da2a9e-DJXAjJSL.js +4 -0
  94. package/assets/erDiagram-9861fffd-DWJR_3zL.js +51 -0
  95. package/assets/erDiagram-9861fffd-x2Kcy95-.js +51 -0
  96. package/assets/flowDb-956e92f1-BgKjOIdz.js +10 -0
  97. package/assets/flowDb-956e92f1-CF6y18Tn.js +10 -0
  98. package/assets/flowDiagram-66a62f08-BPPw0wPU.js +4 -0
  99. package/assets/flowDiagram-66a62f08-CSAllSFf.js +4 -0
  100. package/assets/flowDiagram-v2-96b9c2cf-B-UGyXRi.js +1 -0
  101. package/assets/flowDiagram-v2-96b9c2cf-Cm596kxZ.js +1 -0
  102. package/assets/flowchart-elk-definition-4a651766-9XSRJbsr.js +139 -0
  103. package/assets/flowchart-elk-definition-4a651766-DWFN9DN3.js +139 -0
  104. package/assets/ganttDiagram-c361ad54-D9tbz9tQ.js +257 -0
  105. package/assets/ganttDiagram-c361ad54-ot5pUYpT.js +257 -0
  106. package/assets/gitGraphDiagram-72cf32ee-BFV3Mt8C.js +70 -0
  107. package/assets/gitGraphDiagram-72cf32ee-C6qFzgGh.js +70 -0
  108. package/assets/graph-BxwlF7JS.js +1 -0
  109. package/assets/graph-D-2Ldvxg.js +1 -0
  110. package/assets/grid-image-cM9AmYC8.js +1 -0
  111. package/assets/has-CgdIPiQG.js +1 -0
  112. package/assets/hasIn-4iY02rGN.js +1 -0
  113. package/assets/index-3862675e-CVZnpwDN.js +1 -0
  114. package/assets/index-3862675e-DqdI9cab.js +1 -0
  115. package/assets/index-B2dvADz8.css +1 -0
  116. package/assets/index-BicRPzXC.js +1 -0
  117. package/assets/index-Bs7-jmv6.css +1 -0
  118. package/assets/index-BwSGXyRr.js +99 -0
  119. package/assets/index-C1XdOOAn.css +1 -0
  120. package/assets/index-C4AKKbpQ.css +1 -0
  121. package/assets/index-CkpXFt8n.js +1 -0
  122. package/assets/index-CrxF9gFe.js +42 -0
  123. package/assets/index-DBWqXBIQ.js +93 -0
  124. package/assets/index-DI_5V2-m.js +3 -0
  125. package/assets/index-DWUAFoZG.js +2064 -0
  126. package/assets/index-Dn0YtZ2R.js +3 -0
  127. package/assets/index-e05Rs4M6.js +12 -0
  128. package/assets/index.dom-C3-224fz.js +1 -0
  129. package/assets/infoDiagram-f8f76790-CnrpwoOt.js +7 -0
  130. package/assets/infoDiagram-f8f76790-FKC1Sy9Y.js +7 -0
  131. package/assets/init-A0kIFD9x.js +1 -0
  132. package/assets/init-Gi6I4Gst.js +1 -0
  133. package/assets/inspiration-board-B_-BBBHt.js +1 -0
  134. package/assets/isEmpty-Dj2GV0v-.js +1 -0
  135. package/assets/journeyDiagram-49397b02-B7fP21sU.js +139 -0
  136. package/assets/journeyDiagram-49397b02-Dp3X9XWq.js +139 -0
  137. package/assets/katex-BbEIqZs1.js +261 -0
  138. package/assets/katex-Cu_Erd72.js +261 -0
  139. package/assets/layout-BD3yCK_X.js +1 -0
  140. package/assets/layout-DHHYqX7p.js +1 -0
  141. package/assets/line-B3bNrkzn.js +1 -0
  142. package/assets/line-B86HLuqu.js +1 -0
  143. package/assets/linear-DU2Ciymb.js +1 -0
  144. package/assets/linear-wCAlMhOS.js +1 -0
  145. package/assets/mermaid.core-DfVvnpgz.js +91 -0
  146. package/assets/mindmap-definition-fc14e90a-D1sxE3xG.js +425 -0
  147. package/assets/mindmap-definition-fc14e90a-YuSOJC7P.js +425 -0
  148. package/assets/ordinal-BRr1uYdk.js +1 -0
  149. package/assets/ordinal-Cboi1Yqb.js +1 -0
  150. package/assets/path-CY0bYimO.js +1 -0
  151. package/assets/path-CbwjOpE9.js +1 -0
  152. package/assets/photo-wall-splitter-BVU2e0aS.js +1 -0
  153. package/assets/pick-Cvlwra4g.js +1 -0
  154. package/assets/pieDiagram-8a3498a8-B6mJUqro.js +35 -0
  155. package/assets/pieDiagram-8a3498a8-B91bWgo_.js +35 -0
  156. package/assets/quadrantDiagram-120e2f19-BxS8fQEz.js +7 -0
  157. package/assets/quadrantDiagram-120e2f19-DwudONqx.js +7 -0
  158. package/assets/requirementDiagram-deff3bca-DygaMIoy.js +52 -0
  159. package/assets/requirementDiagram-deff3bca-v9xlgfS8.js +52 -0
  160. package/assets/sankeyDiagram-04a897e0-BV23dp4l.js +8 -0
  161. package/assets/sankeyDiagram-04a897e0-BXCiXiyw.js +8 -0
  162. package/assets/sequenceDiagram-704730f1-CObRpNi4.js +122 -0
  163. package/assets/sequenceDiagram-704730f1-Ck69A6wI.js +122 -0
  164. package/assets/settings-dialog-BlCO49C4.js +1 -0
  165. package/assets/settings-dialog-QUxXj54T.css +1 -0
  166. package/assets/stateDiagram-587899a1-J_G6I0oo.js +1 -0
  167. package/assets/stateDiagram-587899a1-z-tKclr3.js +1 -0
  168. package/assets/stateDiagram-v2-d93cdb3a-DsThtOzP.js +1 -0
  169. package/assets/stateDiagram-v2-d93cdb3a-XIvq5t8a.js +1 -0
  170. package/assets/styles-6aaf32cf-1fjuNMUk.js +207 -0
  171. package/assets/styles-6aaf32cf-DT2rVNfQ.js +207 -0
  172. package/assets/styles-9a916d00-fLeUSina.js +160 -0
  173. package/assets/styles-9a916d00-q64Umkis.js +160 -0
  174. package/assets/styles-c10674c1-BWlxVc3Q.js +116 -0
  175. package/assets/styles-c10674c1-CtYpjMYU.js +116 -0
  176. package/assets/svgDrawCommon-08f97a94-C_DhKfny.js +1 -0
  177. package/assets/svgDrawCommon-08f97a94-DSBqmUv2.js +1 -0
  178. package/assets/timeline-definition-85554ec2-AKpzwLPN.js +61 -0
  179. package/assets/timeline-definition-85554ec2-dTkYwoLF.js +61 -0
  180. package/assets/ttd-dialog-CxiaIUuJ.js +47 -0
  181. package/assets/ttd-dialog-DCapefb6.css +1 -0
  182. package/assets/upload-4sxUU7q_.js +1 -0
  183. package/assets/video-recovery-service-BckHbSyK.js +1 -0
  184. package/assets/web-vitals-DcvjKPr-.js +1 -0
  185. package/assets/winbox.bundle.min-CoRPjCs5.js +1 -0
  186. package/assets/xlsx-CkFp8p6R.js +105 -0
  187. package/assets/xychartDiagram-e933f94c-DCmvL0ag.js +7 -0
  188. package/assets/xychartDiagram-e933f94c-aqOiXp_u.js +7 -0
  189. package/batch-image.html +1616 -0
  190. package/favicon.ico +0 -0
  191. package/icons/README.md +55 -0
  192. package/icons/aitu10.png +0 -0
  193. package/icons/android-chrome-192x192.png +0 -0
  194. package/icons/android-chrome-512x512.png +0 -0
  195. package/icons/apple-touch-icon.png +0 -0
  196. package/icons/favicon-16x16.png +0 -0
  197. package/icons/favicon-16x16.svg +539 -0
  198. package/icons/favicon-32x32.png +0 -0
  199. package/icons/favicon-32x32.svg +539 -0
  200. package/icons/favicon-new.svg +539 -0
  201. package/icons/favicon-new.svg.png +0 -0
  202. package/icons/icon-192x192.svg +539 -0
  203. package/icons/icon-512x512.svg +539 -0
  204. package/icons/icon-96x96.png +0 -0
  205. package/icons/icon-96x96.svg +539 -0
  206. package/iframe-test.html +340 -0
  207. package/index.html +105 -0
  208. package/init.json +6 -0
  209. package/logo/cardid.jpg +0 -0
  210. package/logo/group-qr.png +0 -0
  211. package/logo/logo_drawnix_h.svg +539 -0
  212. package/logo/logo_drawnix_h_dark.svg +539 -0
  213. package/logo/logo_drawnix_new.svg +539 -0
  214. package/manifest.json +52 -0
  215. package/package.json +31 -0
  216. package/product_showcase/aitu-01.png +0 -0
  217. package/product_showcase/aitu-02.png +0 -0
  218. package/product_showcase/aitu-03.png +0 -0
  219. package/product_showcase/aitu-04.png +0 -0
  220. package/product_showcase/aitu-05.png +0 -0
  221. package/product_showcase/aitu-06.png +0 -0
  222. package/product_showcase/case-1.png +0 -0
  223. package/product_showcase/case-2.png +0 -0
  224. package/robots.txt +13 -0
  225. package/sitemap.xml +29 -0
  226. package/sw-debug/app.js +3069 -0
  227. package/sw-debug/console-entry.js +80 -0
  228. package/sw-debug/log-entry.js +452 -0
  229. package/sw-debug/log-panel.js +309 -0
  230. package/sw-debug/postmessage-entry.js +117 -0
  231. package/sw-debug/status-panel.js +125 -0
  232. package/sw-debug/styles.css +2103 -0
  233. package/sw-debug/sw-communication.js +208 -0
  234. package/sw-debug/utils.js +112 -0
  235. package/sw-debug.html +685 -0
  236. package/sw.js +58 -0
  237. package/version.json +10 -0
@@ -0,0 +1,2103 @@
1
+ /**
2
+ * SW Debug Panel Styles - Modern & Polished
3
+ */
4
+
5
+ :root {
6
+ --bg-primary: #ffffff;
7
+ --bg-secondary: #f8fafc;
8
+ --bg-tertiary: #f1f5f9;
9
+ --bg-hover: #e2e8f0;
10
+ --bg-card: #ffffff;
11
+ --text-primary: #2D3436;
12
+ --text-secondary: #636E72;
13
+ --text-muted: #94a3b8;
14
+ --border-color: #e2e8f0;
15
+ --border-light: #f1f5f9;
16
+ /* 主品牌色 - 橙金色系,与主应用保持一致 */
17
+ --primary-color: #F39C12;
18
+ --primary-hover: #E67E22;
19
+ --primary-active: #D35400;
20
+ --primary-light: #FEF5E7;
21
+ --accent-color: #F39C12;
22
+ /* 成功色 */
23
+ --success-color: #00B894;
24
+ --success-light: rgba(0, 184, 148, 0.1);
25
+ /* 警告色 */
26
+ --warning-color: #E67E22;
27
+ --warning-light: rgba(230, 126, 34, 0.1);
28
+ /* 错误色 - 玫红色系 */
29
+ --error-color: #E91E63;
30
+ --error-light: rgba(233, 30, 99, 0.1);
31
+ /* 信息色 - 蓝紫色系 */
32
+ --info-color: #5A4FCF;
33
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
34
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
35
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
36
+ --radius-sm: 6px;
37
+ --radius-md: 8px;
38
+ --radius-lg: 12px;
39
+ --radius-xl: 16px;
40
+ }
41
+
42
+ /* Dark theme */
43
+ [data-theme="dark"] {
44
+ --bg-primary: #1a1a1a;
45
+ --bg-secondary: #2d2d2d;
46
+ --bg-tertiary: #3d3d3d;
47
+ --bg-hover: #4d4d4d;
48
+ --bg-card: #2d2d2d;
49
+ --text-primary: #ffffff;
50
+ --text-secondary: #b3b3b3;
51
+ --text-muted: #808080;
52
+ --border-color: #404040;
53
+ --border-light: #333333;
54
+ /* 主品牌色 - 橙金色系 (暗色模式下稍亮) */
55
+ --primary-color: #FBBF24;
56
+ --primary-hover: #F39C12;
57
+ --primary-active: #E67E22;
58
+ --primary-light: rgba(251, 191, 36, 0.15);
59
+ --accent-color: #FBBF24;
60
+ /* 成功色 */
61
+ --success-color: #10B981;
62
+ --success-light: rgba(16, 185, 129, 0.15);
63
+ /* 警告色 */
64
+ --warning-color: #F59E0B;
65
+ --warning-light: rgba(245, 158, 11, 0.15);
66
+ /* 错误色 */
67
+ --error-color: #F06292;
68
+ --error-light: rgba(240, 98, 146, 0.15);
69
+ /* 信息色 */
70
+ --info-color: #7B68EE;
71
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
72
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
73
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4);
74
+ }
75
+
76
+ * {
77
+ box-sizing: border-box;
78
+ margin: 0;
79
+ padding: 0;
80
+ }
81
+
82
+ body {
83
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
84
+ background: var(--bg-secondary);
85
+ color: var(--text-primary);
86
+ line-height: 1.6;
87
+ font-size: 14px;
88
+ -webkit-font-smoothing: antialiased;
89
+ -moz-osx-font-smoothing: grayscale;
90
+ }
91
+
92
+ /* Layout */
93
+ html, body {
94
+ height: 100%;
95
+ margin: 0;
96
+ padding: 0;
97
+ overflow: hidden;
98
+ }
99
+
100
+ .container {
101
+ max-width: 1600px;
102
+ margin: 0 auto;
103
+ padding: 12px 16px 16px;
104
+ height: calc(100vh - 52px); /* header height */
105
+ display: flex;
106
+ flex-direction: column;
107
+ box-sizing: border-box;
108
+ }
109
+
110
+ /* Header */
111
+ header {
112
+ display: flex;
113
+ justify-content: space-between;
114
+ align-items: center;
115
+ padding: 10px 16px;
116
+ background: var(--bg-card);
117
+ border-bottom: 1px solid var(--border-color);
118
+ position: sticky;
119
+ top: 0;
120
+ z-index: 100;
121
+ }
122
+
123
+ header h1 {
124
+ font-size: 15px;
125
+ font-weight: 600;
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 8px;
129
+ letter-spacing: -0.01em;
130
+ }
131
+
132
+ header h1 .icon {
133
+ font-size: 18px;
134
+ opacity: 0.85;
135
+ }
136
+
137
+ .header-actions {
138
+ display: flex;
139
+ gap: 8px;
140
+ align-items: center;
141
+ }
142
+
143
+ .header-actions button {
144
+ height: 32px;
145
+ }
146
+
147
+ /* Buttons - Compact & Refined */
148
+ button {
149
+ padding: 5px 10px;
150
+ border-radius: 6px;
151
+ border: 1px solid var(--border-color);
152
+ background: var(--bg-card);
153
+ color: var(--text-primary);
154
+ cursor: pointer;
155
+ font-size: 12px;
156
+ font-weight: 500;
157
+ transition: all 0.12s ease;
158
+ display: inline-flex;
159
+ align-items: center;
160
+ justify-content: center;
161
+ gap: 4px;
162
+ white-space: nowrap;
163
+ line-height: 1.4;
164
+ }
165
+
166
+ button:hover {
167
+ background: var(--bg-tertiary);
168
+ border-color: var(--text-muted);
169
+ }
170
+
171
+ button:active {
172
+ transform: scale(0.98);
173
+ }
174
+
175
+ button.primary {
176
+ background: var(--primary-color);
177
+ border-color: var(--primary-color);
178
+ color: #ffffff;
179
+ }
180
+
181
+ button.primary:hover {
182
+ background: var(--primary-hover, #E67E22);
183
+ border-color: var(--primary-hover, #E67E22);
184
+ }
185
+
186
+ button.danger {
187
+ background: var(--bg-card);
188
+ border-color: var(--error-color);
189
+ color: var(--error-color);
190
+ }
191
+
192
+ button.danger:hover {
193
+ background: var(--error-light);
194
+ }
195
+
196
+ button.success {
197
+ background: var(--success-color);
198
+ border-color: var(--success-color);
199
+ color: #ffffff;
200
+ }
201
+
202
+ button.success:hover {
203
+ background: #00A085;
204
+ border-color: #00A085;
205
+ }
206
+
207
+ /* Icon in button */
208
+ button .icon-svg {
209
+ width: 14px;
210
+ height: 14px;
211
+ flex-shrink: 0;
212
+ }
213
+
214
+ /* Status Indicator */
215
+ .status-indicator {
216
+ display: inline-flex;
217
+ align-items: center;
218
+ gap: 5px;
219
+ padding: 3px 10px;
220
+ border-radius: 999px;
221
+ font-size: 11px;
222
+ font-weight: 600;
223
+ margin-left: 8px;
224
+ }
225
+
226
+ .status-indicator.active {
227
+ background: var(--success-light);
228
+ color: var(--success-color);
229
+ }
230
+
231
+ .status-indicator.inactive {
232
+ background: var(--error-light);
233
+ color: var(--error-color);
234
+ }
235
+
236
+ .status-indicator .dot {
237
+ width: 6px;
238
+ height: 6px;
239
+ border-radius: 50%;
240
+ background: currentColor;
241
+ animation: statusPulse 2s ease-in-out infinite;
242
+ }
243
+
244
+ @keyframes statusPulse {
245
+ 0%, 100% { opacity: 1; }
246
+ 50% { opacity: 0.5; }
247
+ }
248
+
249
+ /* Panels */
250
+ .panels {
251
+ display: grid;
252
+ grid-template-columns: 280px 1fr;
253
+ gap: 16px;
254
+ margin-top: 12px;
255
+ flex: 1;
256
+ min-height: 0;
257
+ overflow: hidden;
258
+ }
259
+
260
+ /* Left panel wrapper */
261
+ .left-panel {
262
+ overflow-y: auto;
263
+ overflow-x: hidden;
264
+ min-height: 0;
265
+ padding-right: 4px;
266
+ }
267
+
268
+ .left-panel::-webkit-scrollbar {
269
+ width: 6px;
270
+ }
271
+
272
+ .left-panel::-webkit-scrollbar-track {
273
+ background: transparent;
274
+ }
275
+
276
+ .left-panel::-webkit-scrollbar-thumb {
277
+ background: var(--border-color);
278
+ border-radius: 3px;
279
+ }
280
+
281
+ .left-panel .panel {
282
+ margin-bottom: 12px;
283
+ }
284
+
285
+ .left-panel .panel:last-child {
286
+ margin-bottom: 0;
287
+ }
288
+
289
+ @media (max-width: 1024px) {
290
+ .panels {
291
+ grid-template-columns: 1fr;
292
+ }
293
+ }
294
+
295
+ .panel {
296
+ background: var(--bg-card);
297
+ border: 1px solid var(--border-color);
298
+ border-radius: 8px;
299
+ display: flex;
300
+ flex-direction: column;
301
+ overflow: hidden;
302
+ }
303
+
304
+ /* Logs panel - fill remaining height */
305
+ .logs-panel {
306
+ min-height: 0;
307
+ flex: 1;
308
+ }
309
+
310
+ .panel-header {
311
+ padding: 8px 10px;
312
+ background: var(--bg-tertiary);
313
+ border-bottom: 1px solid var(--border-color);
314
+ font-weight: 600;
315
+ font-size: 12px;
316
+ display: flex;
317
+ justify-content: space-between;
318
+ align-items: center;
319
+ }
320
+
321
+ .panel-header button {
322
+ height: 24px;
323
+ padding: 0 8px;
324
+ font-size: 11px;
325
+ }
326
+
327
+ .panel-content {
328
+ padding: 0;
329
+ }
330
+
331
+ /* Stat Grid */
332
+ .stat-grid {
333
+ display: flex;
334
+ flex-direction: column;
335
+ }
336
+
337
+ .stat-item {
338
+ display: flex;
339
+ justify-content: space-between;
340
+ align-items: center;
341
+ padding: 8px 10px;
342
+ border-bottom: 1px solid var(--border-light);
343
+ font-size: 12px;
344
+ }
345
+
346
+ .stat-item:last-child {
347
+ border-bottom: none;
348
+ }
349
+
350
+ .stat-item .label {
351
+ color: var(--text-secondary);
352
+ }
353
+
354
+ .stat-item .value {
355
+ font-weight: 600;
356
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
357
+ font-size: 12px;
358
+ color: var(--text-primary);
359
+ }
360
+
361
+ /* Cache List */
362
+ .cache-list {
363
+ list-style: none;
364
+ }
365
+
366
+ .cache-item {
367
+ padding: 6px 10px;
368
+ border-bottom: 1px solid var(--border-light);
369
+ display: flex;
370
+ justify-content: space-between;
371
+ align-items: center;
372
+ }
373
+
374
+ .cache-item:last-child {
375
+ border-bottom: none;
376
+ }
377
+
378
+ .cache-item .name {
379
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
380
+ font-size: 11px;
381
+ color: var(--text-primary);
382
+ }
383
+
384
+ .cache-item .stats {
385
+ display: flex;
386
+ gap: 12px;
387
+ font-size: 11px;
388
+ color: var(--text-muted);
389
+ }
390
+
391
+ .cache-section-header {
392
+ padding: 6px 10px;
393
+ background: var(--bg-tertiary);
394
+ font-size: 10px;
395
+ font-weight: 600;
396
+ text-transform: uppercase;
397
+ color: var(--text-muted);
398
+ letter-spacing: 0.5px;
399
+ border-bottom: 1px solid var(--border-light);
400
+ }
401
+
402
+ /* Logs Panel */
403
+ .logs-panel {
404
+ display: flex;
405
+ flex-direction: column;
406
+ flex: 1;
407
+ min-height: 0;
408
+ }
409
+
410
+ .logs-toolbar {
411
+ display: flex;
412
+ gap: 6px;
413
+ padding: 6px 10px;
414
+ background: var(--bg-card);
415
+ border-bottom: 1px solid var(--border-color);
416
+ align-items: center;
417
+ overflow-x: auto;
418
+ flex-shrink: 0;
419
+ }
420
+
421
+ .logs-toolbar::-webkit-scrollbar {
422
+ height: 0;
423
+ }
424
+
425
+ .logs-toolbar select,
426
+ .logs-toolbar input[type="text"] {
427
+ height: 28px;
428
+ padding: 0 8px;
429
+ border-radius: 4px;
430
+ border: 1px solid var(--border-color);
431
+ background: var(--bg-tertiary);
432
+ color: var(--text-primary);
433
+ font-size: 12px;
434
+ flex-shrink: 0;
435
+ }
436
+
437
+ .logs-toolbar select:focus,
438
+ .logs-toolbar input[type="text"]:focus {
439
+ outline: none;
440
+ border-color: var(--primary-color);
441
+ }
442
+
443
+ .logs-toolbar input[type="text"] {
444
+ min-width: 120px;
445
+ }
446
+
447
+ .logs-toolbar button {
448
+ height: 28px;
449
+ padding: 0 8px;
450
+ font-size: 11px;
451
+ flex-shrink: 0;
452
+ }
453
+
454
+ /* Batch Actions */
455
+ .batch-actions {
456
+ display: flex;
457
+ gap: 4px;
458
+ align-items: center;
459
+ padding: 0 6px;
460
+ height: 28px;
461
+ background: var(--primary-light);
462
+ border-radius: 4px;
463
+ border: 1px solid var(--primary-color);
464
+ flex-shrink: 0;
465
+ }
466
+
467
+ .batch-actions button {
468
+ height: 22px;
469
+ padding: 0 6px;
470
+ font-size: 10px;
471
+ }
472
+
473
+ .selected-count {
474
+ font-size: 10px;
475
+ font-weight: 500;
476
+ color: var(--primary-color);
477
+ margin-left: 2px;
478
+ white-space: nowrap;
479
+ }
480
+
481
+ /* Icon-only button */
482
+ .icon-btn {
483
+ width: 32px;
484
+ height: 32px;
485
+ padding: 0 !important;
486
+ background: var(--bg-card);
487
+ border: 1px solid var(--border-color);
488
+ }
489
+
490
+ .icon-btn:hover {
491
+ background: var(--bg-tertiary);
492
+ border-color: var(--text-muted);
493
+ }
494
+
495
+ .icon-btn .icon-svg {
496
+ width: 18px;
497
+ height: 18px;
498
+ }
499
+
500
+ /* Toolbar separator */
501
+ .toolbar-separator {
502
+ width: 1px;
503
+ height: 18px;
504
+ background: var(--border-color);
505
+ margin: 0 2px;
506
+ flex-shrink: 0;
507
+ }
508
+
509
+ .logs-toolbar input {
510
+ flex: 1;
511
+ min-width: 200px;
512
+ }
513
+
514
+ .logs-container {
515
+ flex: 1;
516
+ overflow-y: auto;
517
+ overflow-x: hidden;
518
+ min-height: 0;
519
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
520
+ font-size: 13px;
521
+ background: var(--bg-card);
522
+ }
523
+
524
+ /* Custom Scrollbar */
525
+ .logs-container::-webkit-scrollbar,
526
+ .panel-content::-webkit-scrollbar {
527
+ width: 8px;
528
+ }
529
+
530
+ .logs-container::-webkit-scrollbar-track,
531
+ .panel-content::-webkit-scrollbar-track {
532
+ background: var(--bg-tertiary);
533
+ border-radius: 4px;
534
+ }
535
+
536
+ .logs-container::-webkit-scrollbar-thumb,
537
+ .panel-content::-webkit-scrollbar-thumb {
538
+ background: var(--border-color);
539
+ border-radius: 4px;
540
+ }
541
+
542
+ .logs-container::-webkit-scrollbar-thumb:hover,
543
+ .panel-content::-webkit-scrollbar-thumb:hover {
544
+ background: var(--text-muted);
545
+ }
546
+
547
+ /* Tabs - Compact Design */
548
+ .tabs {
549
+ display: flex;
550
+ gap: 2px;
551
+ padding: 6px 10px 0;
552
+ background: var(--bg-card);
553
+ border-bottom: 1px solid var(--border-color);
554
+ }
555
+
556
+ .tab {
557
+ padding: 7px 12px;
558
+ cursor: pointer;
559
+ border: none;
560
+ border-radius: 6px 6px 0 0;
561
+ color: var(--text-secondary);
562
+ font-weight: 500;
563
+ font-size: 12px;
564
+ transition: all 0.12s ease;
565
+ position: relative;
566
+ background: transparent;
567
+ }
568
+
569
+ .tab:hover {
570
+ color: var(--text-primary);
571
+ background: var(--bg-tertiary);
572
+ }
573
+
574
+ .tab.active {
575
+ color: var(--primary-color);
576
+ background: var(--bg-card);
577
+ font-weight: 600;
578
+ }
579
+
580
+ .tab.active::after {
581
+ content: '';
582
+ position: absolute;
583
+ bottom: -1px;
584
+ left: 0;
585
+ right: 0;
586
+ height: 2px;
587
+ background: var(--primary-color);
588
+ border-radius: 1px 1px 0 0;
589
+ }
590
+
591
+ .tab-content {
592
+ display: none;
593
+ }
594
+
595
+ .tab-content.active {
596
+ display: flex;
597
+ flex-direction: column;
598
+ flex: 1;
599
+ min-height: 0;
600
+ overflow: hidden;
601
+ background: var(--bg-card);
602
+ }
603
+
604
+ /* Log Entry - Compact */
605
+ .log-entry {
606
+ padding: 6px 10px;
607
+ border-bottom: 1px solid var(--border-light);
608
+ transition: background 0.1s ease;
609
+ font-size: 12px;
610
+ }
611
+
612
+ .log-entry:hover {
613
+ background: var(--bg-tertiary);
614
+ }
615
+
616
+ .log-entry .log-header {
617
+ cursor: pointer;
618
+ }
619
+
620
+ .log-entry.expanded {
621
+ background: var(--bg-tertiary);
622
+ border-left: 2px solid var(--primary-color);
623
+ padding-left: 8px;
624
+ }
625
+
626
+ .log-header {
627
+ display: flex;
628
+ align-items: center;
629
+ gap: 6px;
630
+ }
631
+
632
+ .log-time {
633
+ color: var(--text-muted);
634
+ min-width: 60px;
635
+ font-size: 11px;
636
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
637
+ font-weight: 500;
638
+ }
639
+
640
+ .log-method {
641
+ padding: 2px 5px;
642
+ border-radius: 3px;
643
+ font-size: 10px;
644
+ font-weight: 600;
645
+ background: var(--primary-color);
646
+ color: #fff;
647
+ letter-spacing: 0.02em;
648
+ }
649
+
650
+ .log-status {
651
+ padding: 2px 5px;
652
+ border-radius: 3px;
653
+ font-size: 10px;
654
+ font-weight: 600;
655
+ }
656
+
657
+ .log-status.success {
658
+ background: var(--success-light);
659
+ color: var(--success-color);
660
+ }
661
+
662
+ .log-status.redirect {
663
+ background: var(--warning-light);
664
+ color: var(--warning-color);
665
+ }
666
+
667
+ .log-status.error {
668
+ background: var(--error-light);
669
+ color: var(--error-color);
670
+ }
671
+
672
+ .log-status.network-error {
673
+ background: var(--error-light);
674
+ color: var(--error-color);
675
+ font-size: 9px;
676
+ padding: 2px 5px;
677
+ max-width: 120px;
678
+ overflow: hidden;
679
+ text-overflow: ellipsis;
680
+ white-space: nowrap;
681
+ cursor: help;
682
+ }
683
+
684
+ .log-status.pending {
685
+ background: rgba(139, 92, 246, 0.15);
686
+ color: #8b5cf6;
687
+ font-style: italic;
688
+ }
689
+
690
+ .log-type-badge {
691
+ padding: 1px 6px;
692
+ border-radius: 3px;
693
+ font-size: 10px;
694
+ background: var(--bg-primary);
695
+ color: var(--text-secondary);
696
+ border: 1px solid var(--border-color);
697
+ }
698
+
699
+ .log-type-badge.xhr {
700
+ background: var(--accent-color);
701
+ color: #fff;
702
+ border: none;
703
+ }
704
+
705
+ .log-type-badge.sw-internal {
706
+ background: #8250df;
707
+ color: #fff;
708
+ border: none;
709
+ }
710
+
711
+ .log-type-badge.passthrough {
712
+ background: var(--text-muted);
713
+ color: #fff;
714
+ border: none;
715
+ }
716
+
717
+ .log-purpose {
718
+ color: var(--text-secondary);
719
+ font-size: 11px;
720
+ white-space: nowrap;
721
+ }
722
+
723
+ .log-url {
724
+ flex: 1;
725
+ overflow: hidden;
726
+ text-overflow: ellipsis;
727
+ white-space: nowrap;
728
+ color: var(--text-secondary);
729
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
730
+ font-size: 11px;
731
+ transition: color 0.1s ease;
732
+ }
733
+
734
+ .log-entry:hover .log-url {
735
+ color: var(--text-primary);
736
+ }
737
+
738
+ .log-duration {
739
+ color: var(--text-muted);
740
+ min-width: 45px;
741
+ text-align: right;
742
+ font-size: 10px;
743
+ font-weight: 500;
744
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
745
+ }
746
+
747
+ .log-cached {
748
+ padding: 1px 4px;
749
+ border-radius: 3px;
750
+ font-size: 9px;
751
+ font-weight: 600;
752
+ background: var(--success-light);
753
+ color: var(--success-color);
754
+ }
755
+
756
+ .log-streaming {
757
+ padding: 1px 4px;
758
+ border-radius: 3px;
759
+ font-size: 9px;
760
+ background: rgba(139, 92, 246, 0.15);
761
+ color: #8b5cf6;
762
+ font-weight: 600;
763
+ }
764
+
765
+ /* Log Toggle */
766
+ .log-toggle {
767
+ width: 16px;
768
+ height: 16px;
769
+ display: flex;
770
+ align-items: center;
771
+ justify-content: center;
772
+ border-radius: 3px;
773
+ background: var(--bg-tertiary);
774
+ border: 1px solid var(--border-color);
775
+ color: var(--text-muted);
776
+ cursor: pointer;
777
+ font-size: 8px;
778
+ transition: all 0.1s ease;
779
+ flex-shrink: 0;
780
+ }
781
+
782
+ .log-toggle:hover {
783
+ background: var(--bg-hover);
784
+ color: var(--text-primary);
785
+ }
786
+
787
+ .log-entry.expanded .log-toggle {
788
+ background: var(--primary-color);
789
+ border-color: var(--primary-color);
790
+ color: #fff;
791
+ }
792
+
793
+ .log-entry.expanded .log-toggle .arrow {
794
+ transform: rotate(90deg);
795
+ }
796
+
797
+ .log-toggle .arrow {
798
+ transition: transform 0.15s ease;
799
+ }
800
+
801
+ /* Log Details - Enhanced */
802
+ .log-details {
803
+ display: none;
804
+ margin-top: 14px;
805
+ padding: 16px;
806
+ background: var(--bg-card);
807
+ border-radius: var(--radius-md);
808
+ border: 1px solid var(--border-color);
809
+ box-shadow: var(--shadow-sm);
810
+ }
811
+
812
+ .log-entry.expanded .log-details {
813
+ display: block;
814
+ animation: slideDown 0.2s ease;
815
+ }
816
+
817
+ @keyframes slideDown {
818
+ from {
819
+ opacity: 0;
820
+ transform: translateY(-8px);
821
+ }
822
+ to {
823
+ opacity: 1;
824
+ transform: translateY(0);
825
+ }
826
+ }
827
+
828
+ .detail-section {
829
+ margin-bottom: 12px;
830
+ }
831
+
832
+ .detail-section:last-child {
833
+ margin-bottom: 0;
834
+ }
835
+
836
+ .detail-section h4 {
837
+ color: var(--text-secondary);
838
+ font-size: 11px;
839
+ text-transform: uppercase;
840
+ margin-bottom: 6px;
841
+ }
842
+
843
+ .detail-section pre {
844
+ background: var(--bg-tertiary);
845
+ padding: 10px;
846
+ border-radius: 4px;
847
+ overflow-x: auto;
848
+ font-size: 12px;
849
+ line-height: 1.4;
850
+ white-space: pre-wrap;
851
+ word-break: break-all;
852
+ max-height: 400px;
853
+ overflow-y: auto;
854
+ }
855
+
856
+ /* FormData Table */
857
+ .form-data-table {
858
+ width: 100%;
859
+ border-collapse: collapse;
860
+ background: var(--bg-tertiary);
861
+ border-radius: 4px;
862
+ overflow: hidden;
863
+ font-size: 13px;
864
+ }
865
+
866
+ .form-data-table td {
867
+ padding: 8px 12px;
868
+ border-bottom: 1px solid var(--border-color);
869
+ vertical-align: top;
870
+ }
871
+
872
+ .form-data-table tr:last-child td {
873
+ border-bottom: none;
874
+ }
875
+
876
+ .form-data-name {
877
+ font-weight: 600;
878
+ color: var(--text-secondary);
879
+ width: 120px;
880
+ white-space: nowrap;
881
+ }
882
+
883
+ .form-data-value {
884
+ word-break: break-all;
885
+ }
886
+
887
+ .form-data-binary {
888
+ color: var(--text-muted);
889
+ font-style: italic;
890
+ }
891
+
892
+ .form-data-image {
893
+ display: flex;
894
+ flex-direction: column;
895
+ gap: 6px;
896
+ }
897
+
898
+ .form-data-image img {
899
+ display: block;
900
+ }
901
+
902
+ .form-data-file-info {
903
+ font-size: 11px;
904
+ color: var(--text-muted);
905
+ }
906
+
907
+ /* Base64 Image Previews */
908
+ .base64-previews {
909
+ margin-top: 12px;
910
+ padding-top: 12px;
911
+ border-top: 1px dashed var(--border-color);
912
+ }
913
+
914
+ .base64-previews h5 {
915
+ margin: 0 0 8px 0;
916
+ font-size: 12px;
917
+ color: var(--text-secondary);
918
+ font-weight: 600;
919
+ }
920
+
921
+ .base64-preview-grid {
922
+ display: flex;
923
+ flex-wrap: wrap;
924
+ gap: 12px;
925
+ }
926
+
927
+ .base64-preview-item {
928
+ display: flex;
929
+ flex-direction: column;
930
+ gap: 4px;
931
+ padding: 8px;
932
+ background: var(--bg-tertiary);
933
+ border-radius: 6px;
934
+ border: 1px solid var(--border-color);
935
+ }
936
+
937
+ .base64-preview-label {
938
+ font-size: 11px;
939
+ color: var(--text-muted);
940
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
941
+ display: flex;
942
+ gap: 6px;
943
+ align-items: center;
944
+ }
945
+
946
+ .base64-size {
947
+ background: var(--bg-tertiary);
948
+ padding: 1px 4px;
949
+ border-radius: 3px;
950
+ font-size: 10px;
951
+ }
952
+
953
+ .base64-dimensions {
954
+ background: var(--primary-light);
955
+ color: var(--primary-color);
956
+ padding: 1px 4px;
957
+ border-radius: 3px;
958
+ font-size: 10px;
959
+ }
960
+
961
+ .base64-preview-img {
962
+ max-width: 200px;
963
+ max-height: 150px;
964
+ border-radius: 4px;
965
+ object-fit: contain;
966
+ background: repeating-conic-gradient(#f0f0f0 0% 25%, #fff 0% 50%) 50% / 16px 16px;
967
+ }
968
+
969
+ /* Console Entry */
970
+ .console-entry {
971
+ padding: 8px 16px;
972
+ border-bottom: 1px solid var(--border-color);
973
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
974
+ font-size: 12px;
975
+ }
976
+
977
+ .console-entry.warn {
978
+ background: rgba(210, 153, 34, 0.1);
979
+ border-left: 3px solid var(--warning-color);
980
+ }
981
+
982
+ .console-entry.error {
983
+ background: rgba(248, 81, 73, 0.1);
984
+ border-left: 3px solid var(--error-color);
985
+ }
986
+
987
+ .console-entry.info {
988
+ border-left: 3px solid var(--info-color);
989
+ }
990
+
991
+ .console-entry.log {
992
+ border-left: 3px solid var(--text-muted);
993
+ }
994
+
995
+ .console-entry.debug {
996
+ border-left: 3px solid #8250df;
997
+ background: rgba(130, 80, 223, 0.05);
998
+ }
999
+
1000
+ .console-header {
1001
+ display: flex;
1002
+ align-items: flex-start;
1003
+ gap: 10px;
1004
+ }
1005
+
1006
+ .console-level {
1007
+ padding: 2px 6px;
1008
+ border-radius: 4px;
1009
+ font-size: 10px;
1010
+ font-weight: 600;
1011
+ text-transform: uppercase;
1012
+ flex-shrink: 0;
1013
+ }
1014
+
1015
+ .console-level.warn {
1016
+ background: var(--warning-color);
1017
+ color: #fff;
1018
+ }
1019
+
1020
+ .console-level.error {
1021
+ background: var(--error-color);
1022
+ color: #fff;
1023
+ }
1024
+
1025
+ .console-level.info {
1026
+ background: var(--info-color);
1027
+ color: #fff;
1028
+ }
1029
+
1030
+ .console-level.log {
1031
+ background: var(--text-muted);
1032
+ color: #fff;
1033
+ }
1034
+
1035
+ .console-level.debug {
1036
+ background: #8250df;
1037
+ color: #fff;
1038
+ }
1039
+
1040
+ .console-message {
1041
+ flex: 1;
1042
+ white-space: pre-wrap;
1043
+ word-break: break-all;
1044
+ }
1045
+
1046
+ .console-source {
1047
+ color: var(--text-muted);
1048
+ font-size: 11px;
1049
+ margin-top: 4px;
1050
+ }
1051
+
1052
+ .console-stack-container {
1053
+ margin-top: 6px;
1054
+ }
1055
+
1056
+ .console-stack-container .stack-toggle {
1057
+ display: inline-flex;
1058
+ align-items: center;
1059
+ gap: 4px;
1060
+ cursor: pointer;
1061
+ color: var(--text-secondary);
1062
+ font-size: 11px;
1063
+ padding: 2px 6px;
1064
+ border-radius: 4px;
1065
+ background: var(--bg-tertiary);
1066
+ user-select: none;
1067
+ transition: all 0.15s ease;
1068
+ }
1069
+
1070
+ .console-stack-container .stack-toggle:hover {
1071
+ background: var(--border-color);
1072
+ color: var(--text-primary);
1073
+ }
1074
+
1075
+ .console-stack-container .stack-toggle .arrow {
1076
+ font-size: 8px;
1077
+ transition: transform 0.15s ease;
1078
+ }
1079
+
1080
+ .console-stack-container.expanded .stack-toggle .arrow {
1081
+ transform: rotate(90deg);
1082
+ }
1083
+
1084
+ .console-stack-container .console-stack {
1085
+ display: none;
1086
+ }
1087
+
1088
+ .console-stack-container.expanded .console-stack {
1089
+ display: block;
1090
+ }
1091
+
1092
+ .console-stack {
1093
+ margin-top: 8px;
1094
+ padding: 10px 12px;
1095
+ background: var(--bg-tertiary);
1096
+ border-radius: 4px;
1097
+ font-size: 11px;
1098
+ line-height: 1.6;
1099
+ overflow-x: auto;
1100
+ white-space: pre-wrap;
1101
+ word-break: break-all;
1102
+ border-left: 2px solid var(--error-color);
1103
+ color: var(--text-secondary);
1104
+ white-space: pre-wrap;
1105
+ max-height: 200px;
1106
+ overflow-y: auto;
1107
+ }
1108
+
1109
+ /* Inject Section */
1110
+ .inject-section {
1111
+ padding: 16px;
1112
+ background: var(--bg-tertiary);
1113
+ border-radius: 6px;
1114
+ margin: 16px;
1115
+ }
1116
+
1117
+ .inject-section h4 {
1118
+ margin-bottom: 8px;
1119
+ color: var(--text-primary);
1120
+ }
1121
+
1122
+ .inject-section p {
1123
+ color: var(--text-secondary);
1124
+ font-size: 13px;
1125
+ margin-bottom: 12px;
1126
+ }
1127
+
1128
+ .inject-section code {
1129
+ display: block;
1130
+ padding: 12px;
1131
+ background: var(--bg-primary);
1132
+ border-radius: 4px;
1133
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1134
+ font-size: 12px;
1135
+ overflow-x: auto;
1136
+ user-select: all;
1137
+ }
1138
+
1139
+ .copy-btn {
1140
+ margin-top: 8px;
1141
+ padding: 6px 12px;
1142
+ font-size: 12px;
1143
+ }
1144
+
1145
+ /* Empty State */
1146
+ .empty-state {
1147
+ display: flex;
1148
+ flex-direction: column;
1149
+ align-items: center;
1150
+ justify-content: center;
1151
+ padding: 80px 40px;
1152
+ color: var(--text-muted);
1153
+ text-align: center;
1154
+ }
1155
+
1156
+ .empty-state .icon {
1157
+ font-size: 56px;
1158
+ margin-bottom: 20px;
1159
+ opacity: 0.6;
1160
+ }
1161
+
1162
+ .empty-state p {
1163
+ margin-bottom: 20px;
1164
+ font-size: 15px;
1165
+ color: var(--text-secondary);
1166
+ }
1167
+
1168
+ .empty-state button {
1169
+ margin-top: 8px;
1170
+ }
1171
+
1172
+ /* Failed Domains */
1173
+ .failed-domains {
1174
+ display: flex;
1175
+ flex-wrap: wrap;
1176
+ gap: 8px;
1177
+ margin-top: 12px;
1178
+ }
1179
+
1180
+ .failed-domain-tag {
1181
+ padding: 6px 10px;
1182
+ background: var(--error-light);
1183
+ color: var(--error-color);
1184
+ border-radius: var(--radius-md);
1185
+ font-size: 12px;
1186
+ font-weight: 500;
1187
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1188
+ }
1189
+
1190
+ /* Switch Toggle */
1191
+ .switch-toggle {
1192
+ display: flex;
1193
+ align-items: center;
1194
+ gap: 5px;
1195
+ cursor: pointer;
1196
+ user-select: none;
1197
+ height: 28px;
1198
+ flex-shrink: 0;
1199
+ }
1200
+
1201
+ .switch-label {
1202
+ color: var(--text-secondary);
1203
+ font-size: 11px;
1204
+ white-space: nowrap;
1205
+ }
1206
+
1207
+ .switch-toggle input {
1208
+ display: none;
1209
+ }
1210
+
1211
+ .switch-slider {
1212
+ position: relative;
1213
+ width: 28px;
1214
+ height: 16px;
1215
+ background: var(--bg-hover);
1216
+ border: 1px solid var(--border-color);
1217
+ border-radius: 8px;
1218
+ transition: all 0.15s ease;
1219
+ flex-shrink: 0;
1220
+ }
1221
+
1222
+ .switch-slider::before {
1223
+ content: '';
1224
+ position: absolute;
1225
+ top: 2px;
1226
+ left: 2px;
1227
+ width: 10px;
1228
+ height: 10px;
1229
+ background: white;
1230
+ border-radius: 50%;
1231
+ transition: transform 0.15s ease;
1232
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
1233
+ }
1234
+
1235
+ .switch-toggle input:checked + .switch-slider {
1236
+ background: var(--primary-color);
1237
+ border-color: var(--primary-color);
1238
+ }
1239
+
1240
+ .switch-toggle input:checked + .switch-slider::before {
1241
+ transform: translateX(12px);
1242
+ }
1243
+
1244
+ /* PostMessage Entry Styles - 与 Fetch 日志统一 */
1245
+ .pm-entry {
1246
+ /* 继承 .log-entry 的基础样式 */
1247
+ padding: 6px 10px;
1248
+ border-bottom: 1px solid var(--border-light);
1249
+ font-size: 12px;
1250
+ transition: background 0.1s ease;
1251
+ }
1252
+
1253
+ .pm-entry:hover {
1254
+ background: var(--bg-tertiary);
1255
+ }
1256
+
1257
+ .pm-entry.expanded {
1258
+ background: var(--bg-tertiary);
1259
+ border-left: 2px solid var(--primary-color);
1260
+ padding-left: 8px;
1261
+ }
1262
+
1263
+ .pm-header {
1264
+ display: flex;
1265
+ align-items: center;
1266
+ gap: 6px;
1267
+ cursor: pointer;
1268
+ }
1269
+
1270
+ /* 复用 .log-toggle 样式 */
1271
+ .pm-entry .log-toggle {
1272
+ width: 16px;
1273
+ height: 16px;
1274
+ display: flex;
1275
+ align-items: center;
1276
+ justify-content: center;
1277
+ border-radius: 3px;
1278
+ background: var(--bg-tertiary);
1279
+ border: 1px solid var(--border-color);
1280
+ color: var(--text-muted);
1281
+ cursor: pointer;
1282
+ font-size: 8px;
1283
+ transition: all 0.1s ease;
1284
+ flex-shrink: 0;
1285
+ }
1286
+
1287
+ .pm-entry .log-toggle:hover {
1288
+ background: var(--bg-hover);
1289
+ color: var(--text-primary);
1290
+ }
1291
+
1292
+ .pm-entry.expanded .log-toggle {
1293
+ background: var(--primary-color);
1294
+ border-color: var(--primary-color);
1295
+ color: #fff;
1296
+ }
1297
+
1298
+ .pm-entry.expanded .log-toggle .arrow {
1299
+ transform: rotate(90deg);
1300
+ }
1301
+
1302
+ .pm-entry .log-toggle .arrow {
1303
+ transition: transform 0.15s ease;
1304
+ }
1305
+
1306
+ .pm-time {
1307
+ color: var(--text-muted);
1308
+ min-width: 60px;
1309
+ font-size: 11px;
1310
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1311
+ font-weight: 500;
1312
+ }
1313
+
1314
+ .pm-direction {
1315
+ padding: 2px 5px;
1316
+ border-radius: 3px;
1317
+ font-size: 10px;
1318
+ font-weight: 600;
1319
+ letter-spacing: 0.02em;
1320
+ }
1321
+
1322
+ .pm-direction.send {
1323
+ background: var(--primary-color);
1324
+ color: #fff;
1325
+ }
1326
+
1327
+ .pm-direction.receive {
1328
+ background: var(--success-color);
1329
+ color: #fff;
1330
+ }
1331
+
1332
+ .pm-direction-icon {
1333
+ font-size: 10px;
1334
+ margin-right: 2px;
1335
+ }
1336
+
1337
+ .pm-type {
1338
+ padding: 1px 6px;
1339
+ border-radius: 3px;
1340
+ font-size: 10px;
1341
+ background: var(--bg-primary);
1342
+ color: var(--text-secondary);
1343
+ border: 1px solid var(--border-color);
1344
+ white-space: nowrap;
1345
+ }
1346
+
1347
+ .pm-preview {
1348
+ flex: 1;
1349
+ overflow: hidden;
1350
+ text-overflow: ellipsis;
1351
+ white-space: nowrap;
1352
+ color: var(--text-secondary);
1353
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1354
+ font-size: 11px;
1355
+ color: var(--text-muted);
1356
+ font-size: 11px;
1357
+ }
1358
+
1359
+ .pm-details {
1360
+ display: none;
1361
+ margin-top: 12px;
1362
+ padding: 12px;
1363
+ background: var(--bg-primary);
1364
+ border-radius: 6px;
1365
+ border: 1px solid var(--border-color);
1366
+ }
1367
+
1368
+ /* pm-entry 展开时复用 log-details 样式 */
1369
+ .pm-entry .log-details {
1370
+ display: none;
1371
+ }
1372
+
1373
+ .pm-entry.expanded .log-details {
1374
+ display: block;
1375
+ }
1376
+
1377
+ .pm-undefined,
1378
+ .pm-null {
1379
+ color: var(--text-muted);
1380
+ font-style: italic;
1381
+ }
1382
+
1383
+ /* Export Checkbox */
1384
+ .export-section {
1385
+ padding: 12px 16px;
1386
+ border-bottom: 1px solid var(--border-color);
1387
+ }
1388
+
1389
+ .export-section:last-child {
1390
+ border-bottom: none;
1391
+ }
1392
+
1393
+ .export-checkbox {
1394
+ display: flex;
1395
+ align-items: center;
1396
+ gap: 8px;
1397
+ padding: 6px 0;
1398
+ cursor: pointer;
1399
+ font-size: 13px;
1400
+ color: var(--text-primary);
1401
+ transition: opacity 0.15s;
1402
+ }
1403
+
1404
+ .export-checkbox:hover {
1405
+ opacity: 0.8;
1406
+ }
1407
+
1408
+ .export-checkbox input[type="checkbox"] {
1409
+ width: 16px;
1410
+ height: 16px;
1411
+ accent-color: var(--accent-color);
1412
+ cursor: pointer;
1413
+ }
1414
+
1415
+ .export-actions {
1416
+ padding: 12px 16px;
1417
+ background: var(--bg-secondary);
1418
+ border-top: 1px solid var(--border-color);
1419
+ border-radius: 0 0 8px 8px;
1420
+ }
1421
+
1422
+ .export-actions button {
1423
+ width: 100%;
1424
+ justify-content: center;
1425
+ }
1426
+
1427
+ /* Export Modal */
1428
+ .export-modal-overlay {
1429
+ display: none;
1430
+ position: fixed;
1431
+ top: 0;
1432
+ left: 0;
1433
+ right: 0;
1434
+ bottom: 0;
1435
+ background: rgba(0, 0, 0, 0.6);
1436
+ backdrop-filter: blur(4px);
1437
+ z-index: 1000;
1438
+ justify-content: center;
1439
+ align-items: center;
1440
+ }
1441
+
1442
+ .export-modal-overlay.show {
1443
+ display: flex;
1444
+ }
1445
+
1446
+ .export-modal {
1447
+ background: var(--bg-card);
1448
+ border-radius: var(--radius-xl);
1449
+ box-shadow: var(--shadow-lg), 0 0 0 1px var(--border-color);
1450
+ width: 90%;
1451
+ max-width: 500px;
1452
+ max-height: 85vh;
1453
+ display: flex;
1454
+ flex-direction: column;
1455
+ animation: modalSlideIn 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1456
+ }
1457
+
1458
+ @keyframes modalSlideIn {
1459
+ from {
1460
+ opacity: 0;
1461
+ transform: translateY(-20px) scale(0.98);
1462
+ }
1463
+ to {
1464
+ opacity: 1;
1465
+ transform: translateY(0) scale(1);
1466
+ }
1467
+ }
1468
+
1469
+ .export-modal-header {
1470
+ display: flex;
1471
+ justify-content: space-between;
1472
+ align-items: center;
1473
+ padding: 18px 24px;
1474
+ border-bottom: 1px solid var(--border-color);
1475
+ }
1476
+
1477
+ .export-modal-header h3 {
1478
+ margin: 0;
1479
+ font-size: 17px;
1480
+ font-weight: 600;
1481
+ color: var(--text-primary);
1482
+ letter-spacing: -0.01em;
1483
+ }
1484
+
1485
+ .export-modal-close {
1486
+ background: none;
1487
+ border: none;
1488
+ font-size: 24px;
1489
+ color: var(--text-secondary);
1490
+ cursor: pointer;
1491
+ padding: 0;
1492
+ width: 32px;
1493
+ height: 32px;
1494
+ display: flex;
1495
+ align-items: center;
1496
+ justify-content: center;
1497
+ border-radius: 4px;
1498
+ transition: background 0.15s, color 0.15s;
1499
+ }
1500
+
1501
+ .export-modal-close:hover {
1502
+ background: var(--bg-secondary);
1503
+ color: var(--text-primary);
1504
+ }
1505
+
1506
+ .export-modal-body {
1507
+ padding: 16px 20px;
1508
+ overflow-y: auto;
1509
+ flex: 1;
1510
+ }
1511
+
1512
+ .export-select-all {
1513
+ font-weight: 600;
1514
+ padding: 12px 0;
1515
+ margin-bottom: 8px;
1516
+ border-bottom: 2px solid var(--accent-color);
1517
+ }
1518
+
1519
+ .export-select-all span {
1520
+ font-size: 14px;
1521
+ }
1522
+
1523
+ .export-modal .export-section {
1524
+ padding: 0;
1525
+ margin-bottom: 16px;
1526
+ border-bottom: none;
1527
+ }
1528
+
1529
+ .export-modal .export-section-header {
1530
+ font-size: 13px;
1531
+ font-weight: 600;
1532
+ color: var(--text-primary);
1533
+ text-transform: none;
1534
+ letter-spacing: 0;
1535
+ margin-bottom: 4px;
1536
+ padding: 8px 0;
1537
+ background: var(--bg-secondary);
1538
+ border-radius: 4px;
1539
+ padding-left: 8px;
1540
+ }
1541
+
1542
+ .export-modal .export-section-header input {
1543
+ width: 16px;
1544
+ height: 16px;
1545
+ }
1546
+
1547
+ .export-section-items {
1548
+ display: flex;
1549
+ flex-wrap: wrap;
1550
+ gap: 4px 16px;
1551
+ padding-left: 24px;
1552
+ border-left: 2px solid var(--border-color);
1553
+ margin-left: 8px;
1554
+ margin-top: 4px;
1555
+ }
1556
+
1557
+ .export-section-items .export-checkbox {
1558
+ padding: 4px 0;
1559
+ min-width: 100px;
1560
+ flex-shrink: 0;
1561
+ }
1562
+
1563
+ .export-modal-footer {
1564
+ display: flex;
1565
+ justify-content: flex-end;
1566
+ gap: 12px;
1567
+ padding: 16px 20px;
1568
+ border-top: 1px solid var(--border-color);
1569
+ background: var(--bg-secondary);
1570
+ border-radius: 0 0 12px 12px;
1571
+ }
1572
+
1573
+ .export-modal-footer button {
1574
+ min-width: 80px;
1575
+ }
1576
+
1577
+ .export-modal-footer .secondary {
1578
+ background: var(--bg-primary);
1579
+ border: 1px solid var(--border-color);
1580
+ color: var(--text-primary);
1581
+ }
1582
+
1583
+ .export-modal-footer .secondary:hover {
1584
+ background: var(--bg-secondary);
1585
+ }
1586
+
1587
+ /* Memory Log Entries - 与 Fetch 日志保持一致的样式 */
1588
+ .memory-entry {
1589
+ /* 继承 .log-entry 的基础样式,不需要额外边框 */
1590
+ }
1591
+
1592
+ .memory-entry .log-type-badge {
1593
+ padding: 2px 6px;
1594
+ border-radius: 3px;
1595
+ font-size: 10px;
1596
+ font-weight: 600;
1597
+ background: var(--bg-tertiary);
1598
+ color: var(--text-secondary);
1599
+ border: 1px solid var(--border-color);
1600
+ white-space: nowrap;
1601
+ }
1602
+
1603
+ .memory-entry .log-type-badge.error {
1604
+ background: var(--error-light);
1605
+ color: var(--error-color);
1606
+ border-color: transparent;
1607
+ }
1608
+
1609
+ .memory-entry .log-type-badge.warning {
1610
+ background: var(--warning-light);
1611
+ color: var(--warning-color);
1612
+ border-color: transparent;
1613
+ }
1614
+
1615
+ .memory-entry .log-type-badge.normal {
1616
+ background: var(--bg-tertiary);
1617
+ color: var(--text-secondary);
1618
+ }
1619
+
1620
+ /* 内存使用徽章 */
1621
+ .log-memory-badge {
1622
+ padding: 2px 6px;
1623
+ border-radius: 3px;
1624
+ font-size: 10px;
1625
+ font-weight: 600;
1626
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1627
+ }
1628
+
1629
+ .log-memory-badge.normal {
1630
+ background: var(--success-light);
1631
+ color: var(--success-color);
1632
+ }
1633
+
1634
+ .log-memory-badge.warning {
1635
+ background: var(--warning-light);
1636
+ color: var(--warning-color);
1637
+ }
1638
+
1639
+ .log-memory-badge.critical {
1640
+ background: var(--error-light);
1641
+ color: var(--error-color);
1642
+ }
1643
+
1644
+ /* 内存日志行内信息 */
1645
+ .memory-entry .log-perf {
1646
+ font-size: 11px;
1647
+ color: var(--warning-color);
1648
+ white-space: nowrap;
1649
+ }
1650
+
1651
+ .memory-entry .log-memory-info {
1652
+ font-size: 11px;
1653
+ color: var(--text-secondary);
1654
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1655
+ white-space: nowrap;
1656
+ }
1657
+
1658
+ .memory-entry .log-stats-info {
1659
+ font-size: 11px;
1660
+ color: var(--text-muted);
1661
+ white-space: nowrap;
1662
+ }
1663
+
1664
+ /* Memory Panel Styles */
1665
+ #memoryGrid .stat-item .value {
1666
+ font-family: 'SF Mono', Monaco, 'Consolas', monospace;
1667
+ }
1668
+
1669
+ #memoryWarning {
1670
+ border: 1px solid #ffc107;
1671
+ }
1672
+
1673
+ /* Slow Request Highlight */
1674
+ .log-entry.slow-request {
1675
+ background: rgba(255, 193, 7, 0.1);
1676
+ border-left: 3px solid var(--warning-color);
1677
+ }
1678
+
1679
+ .log-entry.slow-request .log-duration {
1680
+ color: var(--warning-color);
1681
+ font-weight: 600;
1682
+ }
1683
+
1684
+ .log-duration.slow {
1685
+ color: var(--warning-color) !important;
1686
+ font-weight: 600;
1687
+ }
1688
+
1689
+ .log-duration.very-slow {
1690
+ color: var(--error-color) !important;
1691
+ font-weight: 600;
1692
+ }
1693
+
1694
+ /* Error Dot Indicator */
1695
+ .error-dot {
1696
+ display: inline-block;
1697
+ width: 8px;
1698
+ height: 8px;
1699
+ background: var(--error-color);
1700
+ border-radius: 50%;
1701
+ margin-left: 8px;
1702
+ box-shadow: 0 0 0 2px var(--error-light);
1703
+ animation: errorPulse 2s ease-in-out infinite;
1704
+ }
1705
+
1706
+ @keyframes errorPulse {
1707
+ 0%, 100% {
1708
+ opacity: 1;
1709
+ box-shadow: 0 0 0 2px var(--error-light);
1710
+ }
1711
+ 50% {
1712
+ opacity: 0.7;
1713
+ box-shadow: 0 0 0 4px var(--error-light);
1714
+ }
1715
+ }
1716
+
1717
+ /* Close Button */
1718
+ .close-btn {
1719
+ background: transparent;
1720
+ border: none;
1721
+ font-size: 20px;
1722
+ color: var(--text-muted);
1723
+ cursor: pointer;
1724
+ width: 32px;
1725
+ height: 32px;
1726
+ display: flex;
1727
+ align-items: center;
1728
+ justify-content: center;
1729
+ border-radius: var(--radius-md);
1730
+ transition: all 0.15s ease;
1731
+ box-shadow: none;
1732
+ }
1733
+
1734
+ .close-btn:hover {
1735
+ background: var(--bg-tertiary);
1736
+ color: var(--text-primary);
1737
+ transform: none;
1738
+ box-shadow: none;
1739
+ }
1740
+
1741
+ /* Pause Button States - Enhanced */
1742
+ .pause-btn.paused,
1743
+ #togglePause.paused {
1744
+ background: var(--warning-light) !important;
1745
+ border-color: var(--warning-color) !important;
1746
+ color: var(--warning-color) !important;
1747
+ }
1748
+
1749
+ /* Pending logs indicator */
1750
+ .pending-count {
1751
+ background: var(--warning-color);
1752
+ color: #fff;
1753
+ padding: 2px 8px;
1754
+ border-radius: 10px;
1755
+ font-size: 11px;
1756
+ font-weight: 600;
1757
+ margin-left: 6px;
1758
+ }
1759
+
1760
+ /* Focus visible for accessibility */
1761
+ button:focus-visible,
1762
+ select:focus-visible,
1763
+ input:focus-visible {
1764
+ outline: 2px solid var(--primary-color);
1765
+ outline-offset: 2px;
1766
+ }
1767
+
1768
+ /* Smooth transitions for theme switching */
1769
+ body, .panel, .logs-container, .log-entry, button, select, input {
1770
+ transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
1771
+ }
1772
+
1773
+ /* Pause Button States */
1774
+ .pause-btn {
1775
+ transition: all 0.2s;
1776
+ }
1777
+
1778
+ .pause-btn.paused {
1779
+ background: rgba(255, 193, 7, 0.15);
1780
+ border-color: var(--warning-color);
1781
+ color: var(--warning-color);
1782
+ }
1783
+
1784
+ .pause-btn.paused:hover {
1785
+ background: rgba(255, 193, 7, 0.25);
1786
+ }
1787
+
1788
+ /* Pending logs indicator */
1789
+ .pending-count {
1790
+ background: var(--warning-color);
1791
+ color: #fff;
1792
+ padding: 2px 6px;
1793
+ border-radius: 10px;
1794
+ font-size: 11px;
1795
+ margin-left: 4px;
1796
+ }
1797
+
1798
+ /* Keyboard shortcut hints */
1799
+ .shortcut-hint {
1800
+ font-size: 10px;
1801
+ color: var(--text-muted);
1802
+ margin-left: 4px;
1803
+ opacity: 0.7;
1804
+ }
1805
+
1806
+ /* Stats bar - Inline */
1807
+ .stats-bar {
1808
+ display: flex;
1809
+ gap: 16px;
1810
+ padding: 6px 12px;
1811
+ border-bottom: 1px solid var(--border-color);
1812
+ font-size: 11px;
1813
+ color: var(--text-secondary);
1814
+ align-items: center;
1815
+ }
1816
+
1817
+ .stats-bar .stat {
1818
+ display: flex;
1819
+ align-items: center;
1820
+ gap: 4px;
1821
+ }
1822
+
1823
+ .stats-bar .stat span:first-child {
1824
+ color: var(--text-muted);
1825
+ }
1826
+
1827
+ .stats-bar .stat-value {
1828
+ font-weight: 600;
1829
+ color: var(--text-primary);
1830
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1831
+ font-size: 11px;
1832
+ }
1833
+
1834
+ .stats-bar .stat-chart {
1835
+ display: flex;
1836
+ align-items: center;
1837
+ gap: 6px;
1838
+ }
1839
+
1840
+ /* 可点击的统计项 */
1841
+ .stats-bar .stat-clickable {
1842
+ cursor: pointer;
1843
+ padding: 2px 6px;
1844
+ border-radius: 4px;
1845
+ transition: all 0.15s ease;
1846
+ }
1847
+
1848
+ .stats-bar .stat-clickable:hover {
1849
+ background: var(--bg-tertiary);
1850
+ }
1851
+
1852
+ .stats-bar .stat-clickable.active {
1853
+ background: var(--warning-light);
1854
+ border: 1px solid var(--warning-color);
1855
+ }
1856
+
1857
+ /* Duration distribution chart - Modern */
1858
+ .duration-chart {
1859
+ display: flex;
1860
+ height: 12px;
1861
+ border-radius: 3px;
1862
+ overflow: hidden;
1863
+ min-width: 150px;
1864
+ flex: 1;
1865
+ max-width: 300px;
1866
+ border: 1px solid var(--border-color);
1867
+ }
1868
+
1869
+ .duration-chart .chart-bar {
1870
+ height: 100%;
1871
+ transition: width 0.3s ease;
1872
+ position: relative;
1873
+ }
1874
+
1875
+ .duration-chart .chart-bar.fast {
1876
+ background: #22c55e;
1877
+ }
1878
+
1879
+ .duration-chart .chart-bar.medium {
1880
+ background: #84cc16;
1881
+ }
1882
+
1883
+ .duration-chart .chart-bar.slow {
1884
+ background: #f59e0b;
1885
+ }
1886
+
1887
+ .duration-chart .chart-bar.very-slow {
1888
+ background: #ef4444;
1889
+ }
1890
+
1891
+ /* Regex toggle */
1892
+ .regex-toggle {
1893
+ display: flex;
1894
+ align-items: center;
1895
+ justify-content: center;
1896
+ cursor: pointer;
1897
+ width: 28px;
1898
+ height: 28px;
1899
+ background: var(--bg-tertiary);
1900
+ border: 1px solid var(--border-color);
1901
+ border-radius: 4px;
1902
+ font-size: 12px;
1903
+ font-weight: 600;
1904
+ color: var(--text-muted);
1905
+ transition: all 0.1s ease;
1906
+ flex-shrink: 0;
1907
+ }
1908
+
1909
+ .regex-toggle:hover {
1910
+ background: var(--bg-hover);
1911
+ }
1912
+
1913
+ .regex-toggle input {
1914
+ display: none;
1915
+ }
1916
+
1917
+ .regex-toggle:has(input:checked) {
1918
+ background: var(--primary-light);
1919
+ border-color: var(--primary-color);
1920
+ color: var(--primary-color);
1921
+ }
1922
+
1923
+ .regex-toggle input:checked + span {
1924
+ color: var(--primary-color);
1925
+ font-weight: 600;
1926
+ }
1927
+
1928
+ /* Keyboard shortcuts modal */
1929
+ #shortcutsModalOverlay {
1930
+ display: flex;
1931
+ align-items: center;
1932
+ justify-content: center;
1933
+ }
1934
+
1935
+ #shortcutsModalOverlay table td:first-child {
1936
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
1937
+ }
1938
+
1939
+ /* Bookmark toggle */
1940
+ .bookmark-toggle {
1941
+ display: flex;
1942
+ align-items: center;
1943
+ justify-content: center;
1944
+ cursor: pointer;
1945
+ width: 28px;
1946
+ height: 28px;
1947
+ background: var(--bg-tertiary);
1948
+ border: 1px solid var(--border-color);
1949
+ border-radius: 4px;
1950
+ transition: all 0.1s ease;
1951
+ font-size: 12px;
1952
+ flex-shrink: 0;
1953
+ }
1954
+
1955
+ .bookmark-toggle:hover {
1956
+ background: var(--warning-light);
1957
+ border-color: var(--warning-color);
1958
+ }
1959
+
1960
+ .bookmark-toggle input {
1961
+ display: none;
1962
+ }
1963
+
1964
+ .bookmark-toggle input:checked + span {
1965
+ color: #f59e0b;
1966
+ }
1967
+
1968
+ .bookmark-toggle:has(input:checked) {
1969
+ background: var(--warning-light);
1970
+ border-color: var(--warning-color);
1971
+ }
1972
+
1973
+ /* Log entry bookmark button */
1974
+ .log-bookmark {
1975
+ cursor: pointer;
1976
+ font-size: 11px;
1977
+ margin-right: 4px;
1978
+ opacity: 0.3;
1979
+ transition: all 0.1s ease;
1980
+ }
1981
+
1982
+ .log-bookmark:hover {
1983
+ opacity: 1;
1984
+ transform: scale(1.1);
1985
+ }
1986
+
1987
+ .log-entry.bookmarked .log-bookmark {
1988
+ opacity: 1;
1989
+ color: #f59e0b;
1990
+ }
1991
+
1992
+ .log-entry.bookmarked {
1993
+ background: rgba(245, 158, 11, 0.05);
1994
+ border-left: 3px solid #f59e0b;
1995
+ }
1996
+
1997
+ .log-entry.selected {
1998
+ background: var(--primary-light);
1999
+ }
2000
+
2001
+ .log-entry.selected.bookmarked {
2002
+ background: linear-gradient(to right, rgba(245, 158, 11, 0.1), var(--primary-light));
2003
+ }
2004
+
2005
+ /* Highlight animation for related request navigation */
2006
+ .log-entry.highlight {
2007
+ animation: highlightPulse 2s ease-out;
2008
+ }
2009
+
2010
+ @keyframes highlightPulse {
2011
+ 0% { background: rgba(243, 156, 18, 0.3); }
2012
+ 100% { background: transparent; }
2013
+ }
2014
+
2015
+ /* Related request item hover */
2016
+ .related-request:hover {
2017
+ background: var(--bg-hover) !important;
2018
+ }
2019
+
2020
+ /* Settings modal - Enhanced */
2021
+ .setting-group {
2022
+ margin-bottom: 16px;
2023
+ }
2024
+
2025
+ .setting-label {
2026
+ display: block;
2027
+ font-weight: 600;
2028
+ margin-bottom: 10px;
2029
+ color: var(--text-primary);
2030
+ font-size: 13px;
2031
+ }
2032
+
2033
+ .setting-group select,
2034
+ .setting-group input[type="text"],
2035
+ .setting-group input[type="number"] {
2036
+ background: var(--bg-tertiary);
2037
+ color: var(--text-primary);
2038
+ border: 1px solid var(--border-color);
2039
+ border-radius: var(--radius-md);
2040
+ padding: 10px 14px;
2041
+ font-size: 13px;
2042
+ transition: all 0.15s ease;
2043
+ }
2044
+
2045
+ .setting-group select:hover,
2046
+ .setting-group input[type="text"]:hover,
2047
+ .setting-group input[type="number"]:hover {
2048
+ border-color: var(--text-muted);
2049
+ }
2050
+
2051
+ .setting-group select:focus,
2052
+ .setting-group input[type="text"]:focus,
2053
+ .setting-group input[type="number"]:focus {
2054
+ outline: none;
2055
+ border-color: var(--primary-color);
2056
+ box-shadow: 0 0 0 3px var(--primary-light);
2057
+ }
2058
+
2059
+ .setting-group label {
2060
+ cursor: pointer;
2061
+ font-size: 13px;
2062
+ font-weight: 500;
2063
+ color: var(--text-secondary);
2064
+ }
2065
+
2066
+ .setting-group label:hover {
2067
+ color: var(--text-primary);
2068
+ }
2069
+
2070
+ /* LLM API Log Styles */
2071
+ .llm-result-url {
2072
+ cursor: pointer;
2073
+ text-decoration: none;
2074
+ transition: color 0.15s ease;
2075
+ }
2076
+
2077
+ .llm-result-url:hover {
2078
+ color: var(--primary-hover) !important;
2079
+ text-decoration: underline;
2080
+ }
2081
+
2082
+ .copy-url-btn {
2083
+ display: inline-flex;
2084
+ align-items: center;
2085
+ justify-content: center;
2086
+ min-width: 24px;
2087
+ height: 20px;
2088
+ background: var(--bg-tertiary);
2089
+ border: 1px solid var(--border-color);
2090
+ border-radius: 3px;
2091
+ color: var(--text-muted);
2092
+ transition: all 0.15s ease;
2093
+ }
2094
+
2095
+ .copy-url-btn:hover {
2096
+ background: var(--bg-hover);
2097
+ border-color: var(--primary-color);
2098
+ color: var(--primary-color);
2099
+ }
2100
+
2101
+ .copy-url-btn:active {
2102
+ transform: scale(0.95);
2103
+ }