styles.css 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. :root {
  2. color-scheme: light;
  3. font-family: "Microsoft YaHei", "PingFang SC", "Segoe UI", Arial, sans-serif;
  4. --bg: #f4f7f9;
  5. --sidebar: #202731;
  6. --sidebar-soft: #2c3644;
  7. --line: #dce4ea;
  8. --text: #10202b;
  9. --muted: #657385;
  10. --brand: #19735e;
  11. --brand-strong: #0d5f4e;
  12. --assistant: #f0f3f6;
  13. --user: #e4f5ee;
  14. --danger: #b42318;
  15. --shadow: 0 16px 40px rgba(20, 37, 49, 0.08);
  16. }
  17. * {
  18. box-sizing: border-box;
  19. }
  20. body {
  21. margin: 0;
  22. min-height: 100vh;
  23. display: grid;
  24. grid-template-columns: 236px minmax(0, 1fr);
  25. background: var(--bg);
  26. color: var(--text);
  27. }
  28. button,
  29. textarea {
  30. font: inherit;
  31. }
  32. .sidebar {
  33. min-height: 100vh;
  34. padding: 28px 16px;
  35. display: flex;
  36. flex-direction: column;
  37. gap: 24px;
  38. background: var(--sidebar);
  39. color: #fff;
  40. }
  41. .brand {
  42. display: flex;
  43. gap: 12px;
  44. align-items: center;
  45. padding: 0 8px;
  46. }
  47. .brand img {
  48. width: 42px;
  49. height: 42px;
  50. border-radius: 50%;
  51. object-fit: cover;
  52. }
  53. .brand strong {
  54. display: block;
  55. font-size: 18px;
  56. line-height: 1.2;
  57. }
  58. .brand span,
  59. .session-card span {
  60. display: block;
  61. color: #c4ccd8;
  62. font-size: 12px;
  63. margin-top: 3px;
  64. }
  65. .nav {
  66. display: grid;
  67. gap: 8px;
  68. }
  69. .nav-item {
  70. border: 0;
  71. border-radius: 8px;
  72. padding: 12px 14px;
  73. color: #e9eef5;
  74. background: transparent;
  75. text-align: left;
  76. cursor: pointer;
  77. }
  78. .nav-item.active,
  79. .nav-item:hover {
  80. background: var(--sidebar-soft);
  81. }
  82. .session-card {
  83. margin-top: auto;
  84. padding: 12px;
  85. border: 1px solid rgba(255, 255, 255, 0.12);
  86. border-radius: 8px;
  87. display: flex;
  88. align-items: center;
  89. gap: 10px;
  90. }
  91. .status-dot {
  92. width: 10px;
  93. height: 10px;
  94. border-radius: 999px;
  95. background: #f59e0b;
  96. box-shadow: 0 0 0 6px rgba(245, 158, 11, 0.16);
  97. flex: 0 0 auto;
  98. }
  99. .status-dot.ok {
  100. background: #12b981;
  101. box-shadow: 0 0 0 6px rgba(18, 185, 129, 0.16);
  102. }
  103. .status-dot.error {
  104. background: #ef4444;
  105. box-shadow: 0 0 0 6px rgba(239, 68, 68, 0.16);
  106. }
  107. .shell {
  108. min-width: 0;
  109. padding: 28px 24px 24px;
  110. }
  111. .topbar {
  112. display: flex;
  113. justify-content: space-between;
  114. align-items: flex-start;
  115. gap: 16px;
  116. margin-bottom: 18px;
  117. }
  118. .topbar h1 {
  119. margin: 0;
  120. font-size: 28px;
  121. letter-spacing: 0;
  122. }
  123. .topbar p {
  124. margin: 4px 0 0;
  125. color: var(--muted);
  126. }
  127. .icon-button {
  128. border: 1px solid var(--line);
  129. background: #fff;
  130. color: var(--text);
  131. border-radius: 8px;
  132. height: 36px;
  133. padding: 0 14px;
  134. cursor: pointer;
  135. }
  136. .workspace {
  137. display: grid;
  138. grid-template-columns: minmax(580px, 1fr) 360px;
  139. gap: 16px;
  140. align-items: stretch;
  141. }
  142. .chat-card,
  143. .panel {
  144. background: #fff;
  145. border: 1px solid var(--line);
  146. border-radius: 8px;
  147. box-shadow: var(--shadow);
  148. }
  149. .chat-card {
  150. min-height: calc(100vh - 118px);
  151. display: grid;
  152. grid-template-rows: minmax(0, 1fr) auto;
  153. overflow: hidden;
  154. }
  155. .messages {
  156. padding: 18px;
  157. overflow: auto;
  158. scroll-behavior: smooth;
  159. }
  160. .message-row {
  161. display: grid;
  162. grid-template-columns: 34px minmax(0, 1fr);
  163. gap: 10px;
  164. margin-bottom: 16px;
  165. }
  166. .message-row.user {
  167. grid-template-columns: minmax(0, 1fr) 34px;
  168. }
  169. .avatar {
  170. width: 34px;
  171. height: 34px;
  172. border-radius: 50%;
  173. background: #d9f0e9;
  174. color: var(--brand-strong);
  175. display: grid;
  176. place-items: center;
  177. font-size: 14px;
  178. font-weight: 700;
  179. overflow: hidden;
  180. }
  181. .avatar img {
  182. width: 100%;
  183. height: 100%;
  184. object-fit: cover;
  185. }
  186. .bubble {
  187. width: min(100%, 760px);
  188. border-radius: 8px;
  189. padding: 14px 16px;
  190. background: var(--assistant);
  191. line-height: 1.7;
  192. white-space: pre-wrap;
  193. }
  194. .message-row.user .bubble {
  195. justify-self: end;
  196. background: var(--user);
  197. }
  198. .message-row.user .avatar {
  199. grid-column: 2;
  200. grid-row: 1;
  201. }
  202. .message-row.user .bubble {
  203. grid-column: 1;
  204. grid-row: 1;
  205. }
  206. .typing {
  207. display: inline-flex;
  208. align-items: center;
  209. gap: 5px;
  210. white-space: nowrap;
  211. }
  212. .typing i {
  213. width: 6px;
  214. height: 6px;
  215. border-radius: 50%;
  216. background: #7aa89e;
  217. animation: pulse 1s infinite ease-in-out;
  218. }
  219. .typing i:nth-child(2) {
  220. animation-delay: 0.15s;
  221. }
  222. .typing i:nth-child(3) {
  223. animation-delay: 0.3s;
  224. }
  225. @keyframes pulse {
  226. 0%,
  227. 80%,
  228. 100% {
  229. opacity: 0.3;
  230. transform: translateY(0);
  231. }
  232. 40% {
  233. opacity: 1;
  234. transform: translateY(-2px);
  235. }
  236. }
  237. .table-card {
  238. margin-top: 14px;
  239. border: 1px solid var(--line);
  240. border-radius: 8px;
  241. background: #fff;
  242. overflow: hidden;
  243. }
  244. .table-head {
  245. display: flex;
  246. justify-content: space-between;
  247. align-items: center;
  248. gap: 10px;
  249. padding: 10px 12px;
  250. background: #f8fafb;
  251. border-bottom: 1px solid var(--line);
  252. }
  253. .table-head strong {
  254. font-size: 14px;
  255. }
  256. .table-head button {
  257. border: 1px solid var(--line);
  258. background: #fff;
  259. color: var(--brand-strong);
  260. border-radius: 8px;
  261. padding: 6px 10px;
  262. cursor: pointer;
  263. white-space: nowrap;
  264. }
  265. .table-wrap {
  266. overflow: auto;
  267. max-height: 420px;
  268. }
  269. table {
  270. width: 100%;
  271. min-width: 640px;
  272. border-collapse: collapse;
  273. font-size: 13px;
  274. }
  275. th,
  276. td {
  277. border-bottom: 1px solid var(--line);
  278. padding: 10px 12px;
  279. text-align: left;
  280. vertical-align: top;
  281. word-break: break-word;
  282. }
  283. th {
  284. position: sticky;
  285. top: 0;
  286. z-index: 1;
  287. background: #f8fafb;
  288. color: #2e3a46;
  289. font-weight: 700;
  290. }
  291. .composer {
  292. margin: 0 18px 18px;
  293. border: 1px solid var(--line);
  294. border-radius: 8px;
  295. padding: 10px;
  296. background: #fff;
  297. }
  298. .composer:focus-within {
  299. border-color: var(--brand);
  300. box-shadow: 0 0 0 3px rgba(25, 115, 94, 0.12);
  301. }
  302. .composer textarea {
  303. width: 100%;
  304. min-height: 68px;
  305. max-height: 180px;
  306. border: 0;
  307. outline: 0;
  308. resize: vertical;
  309. color: var(--text);
  310. }
  311. .composer-footer {
  312. display: flex;
  313. justify-content: space-between;
  314. align-items: center;
  315. color: var(--muted);
  316. font-size: 12px;
  317. }
  318. .send-button {
  319. border: 0;
  320. border-radius: 8px;
  321. min-width: 92px;
  322. height: 42px;
  323. padding: 0 16px;
  324. background: var(--brand);
  325. color: #fff;
  326. display: inline-flex;
  327. align-items: center;
  328. justify-content: center;
  329. gap: 8px;
  330. cursor: pointer;
  331. }
  332. .send-button:disabled {
  333. cursor: not-allowed;
  334. opacity: 0.66;
  335. }
  336. .send-icon,
  337. .send-text {
  338. white-space: nowrap;
  339. }
  340. .inspector {
  341. display: grid;
  342. align-content: start;
  343. gap: 14px;
  344. max-height: calc(100vh - 118px);
  345. overflow: auto;
  346. }
  347. .panel {
  348. padding: 16px;
  349. box-shadow: none;
  350. }
  351. .panel-title {
  352. display: flex;
  353. align-items: center;
  354. justify-content: space-between;
  355. gap: 12px;
  356. margin-bottom: 12px;
  357. }
  358. .panel h2 {
  359. margin: 0;
  360. font-size: 18px;
  361. }
  362. .kv {
  363. display: grid;
  364. gap: 12px;
  365. margin: 0;
  366. }
  367. .kv div {
  368. display: grid;
  369. grid-template-columns: 86px minmax(0, 1fr);
  370. gap: 8px;
  371. }
  372. .kv dt {
  373. color: var(--muted);
  374. }
  375. .kv dd {
  376. margin: 0;
  377. font-weight: 700;
  378. word-break: break-all;
  379. }
  380. .tool-list,
  381. .trace-list {
  382. display: grid;
  383. gap: 8px;
  384. }
  385. .tool-item,
  386. .trace-item {
  387. border: 1px solid var(--line);
  388. border-radius: 8px;
  389. padding: 10px;
  390. background: #fff;
  391. }
  392. .tool-item strong,
  393. .trace-item strong {
  394. display: block;
  395. font-size: 14px;
  396. }
  397. .tool-item span,
  398. .trace-item span {
  399. display: block;
  400. color: var(--muted);
  401. font-size: 12px;
  402. margin-top: 4px;
  403. word-break: break-word;
  404. }
  405. .phase-error strong {
  406. color: var(--danger);
  407. }
  408. @media (max-width: 1120px) {
  409. body {
  410. grid-template-columns: 1fr;
  411. }
  412. .sidebar {
  413. min-height: auto;
  414. flex-direction: row;
  415. align-items: center;
  416. }
  417. .nav {
  418. grid-auto-flow: column;
  419. margin-left: auto;
  420. }
  421. .session-card {
  422. margin-top: 0;
  423. min-width: 190px;
  424. }
  425. .workspace {
  426. grid-template-columns: 1fr;
  427. }
  428. .inspector {
  429. max-height: none;
  430. }
  431. }