style.css 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. :root {
  2. --bg-color: #0d1117;
  3. --panel-bg: rgba(22, 27, 34, 0.7);
  4. --border-color: rgba(48, 54, 61, 0.8);
  5. --text-main: #c9d1d9;
  6. --text-muted: #8b949e;
  7. --primary-gradient: linear-gradient(135deg, #2ea043 0%, #238636 100%);
  8. --primary-color: #2ea043;
  9. --user-msg-bg: linear-gradient(135deg, #1f6feb 0%, #164e63 100%);
  10. --bot-msg-bg: rgba(33, 38, 45, 0.8);
  11. --glass-blur: blur(16px);
  12. }
  13. * {
  14. box-sizing: border-box;
  15. margin: 0;
  16. padding: 0;
  17. }
  18. body {
  19. font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  20. background-color: var(--bg-color);
  21. background-image: radial-gradient(circle at top right, rgba(46, 160, 67, 0.15), transparent 400px),
  22. radial-gradient(circle at bottom left, rgba(31, 111, 235, 0.1), transparent 400px);
  23. color: var(--text-main);
  24. display: flex;
  25. justify-content: center;
  26. align-items: center;
  27. height: 100vh;
  28. padding: 20px;
  29. overflow: hidden;
  30. }
  31. .app-container {
  32. width: 100%;
  33. max-width: 900px;
  34. height: 90vh;
  35. background: var(--panel-bg);
  36. backdrop-filter: var(--glass-blur);
  37. -webkit-backdrop-filter: var(--glass-blur);
  38. border: 1px solid var(--border-color);
  39. border-radius: 20px;
  40. display: flex;
  41. flex-direction: column;
  42. box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
  43. overflow: hidden;
  44. }
  45. .chat-header {
  46. padding: 16px 24px;
  47. border-bottom: 1px solid var(--border-color);
  48. display: flex;
  49. justify-content: space-between;
  50. align-items: center;
  51. background: rgba(13, 17, 23, 0.6);
  52. }
  53. .brand {
  54. display: flex;
  55. align-items: center;
  56. gap: 12px;
  57. }
  58. .logo {
  59. font-size: 28px;
  60. background: var(--primary-gradient);
  61. -webkit-background-clip: text;
  62. background-clip: text;
  63. }
  64. h1 {
  65. font-size: 1.1rem;
  66. font-weight: 600;
  67. color: #f0f6fc;
  68. }
  69. .status-indicator {
  70. display: inline-block;
  71. width: 8px;
  72. height: 8px;
  73. background-color: #2ea043;
  74. border-radius: 50%;
  75. margin-right: 6px;
  76. box-shadow: 0 0 10px #2ea043;
  77. }
  78. .status-text {
  79. font-size: 0.75rem;
  80. color: var(--text-muted);
  81. }
  82. #clear-chat {
  83. background: none;
  84. border: none;
  85. color: var(--text-muted);
  86. cursor: pointer;
  87. transition: color 0.2s ease;
  88. padding: 8px;
  89. border-radius: 8px;
  90. }
  91. #clear-chat:hover {
  92. color: #f85149;
  93. background: rgba(248, 81, 73, 0.1);
  94. }
  95. .chat-container {
  96. flex: 1;
  97. padding: 24px;
  98. overflow-y: auto;
  99. display: flex;
  100. flex-direction: column;
  101. gap: 20px;
  102. scroll-behavior: smooth;
  103. }
  104. .chat-container::-webkit-scrollbar {
  105. width: 6px;
  106. }
  107. .chat-container::-webkit-scrollbar-thumb {
  108. background: var(--border-color);
  109. border-radius: 10px;
  110. }
  111. .message {
  112. display: flex;
  113. gap: 16px;
  114. max-width: 85%;
  115. animation: fadeIn 0.3s ease forwards;
  116. opacity: 0;
  117. transform: translateY(10px);
  118. }
  119. @keyframes fadeIn {
  120. to {
  121. opacity: 1;
  122. transform: translateY(0);
  123. }
  124. }
  125. .message.user {
  126. align-self: flex-end;
  127. flex-direction: row-reverse;
  128. }
  129. .avatar {
  130. width: 36px;
  131. height: 36px;
  132. border-radius: 10px;
  133. display: flex;
  134. justify-content: center;
  135. align-items: center;
  136. font-size: 20px;
  137. flex-shrink: 0;
  138. background: rgba(255, 255, 255, 0.1);
  139. }
  140. .message.user .avatar {
  141. background: var(--user-msg-bg);
  142. }
  143. .message.system .avatar {
  144. background: var(--bot-msg-bg);
  145. border: 1px solid var(--border-color);
  146. }
  147. .message-content {
  148. padding: 14px 18px;
  149. border-radius: 18px;
  150. line-height: 1.6;
  151. font-size: 0.95rem;
  152. white-space: pre-wrap;
  153. word-break: break-word;
  154. }
  155. .message.user .message-content {
  156. background: var(--user-msg-bg);
  157. color: #fff;
  158. border-top-right-radius: 4px;
  159. }
  160. .message.system .message-content {
  161. background: var(--bot-msg-bg);
  162. border: 1px solid var(--border-color);
  163. border-top-left-radius: 4px;
  164. box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  165. }
  166. .chat-input-area {
  167. padding: 20px 24px;
  168. background: rgba(13, 17, 23, 0.8);
  169. border-top: 1px solid var(--border-color);
  170. }
  171. .input-form {
  172. display: flex;
  173. gap: 12px;
  174. align-items: flex-end;
  175. background: var(--bg-color);
  176. border: 1px solid var(--border-color);
  177. border-radius: 16px;
  178. padding: 8px 16px;
  179. transition: border-color 0.2s, box-shadow 0.2s;
  180. }
  181. .input-form:focus-within {
  182. border-color: rgba(46, 160, 67, 0.5);
  183. box-shadow: 0 0 0 2px rgba(46, 160, 67, 0.1);
  184. }
  185. textarea {
  186. flex: 1;
  187. background: none;
  188. border: none;
  189. color: var(--text-main);
  190. font-family: inherit;
  191. font-size: 1rem;
  192. resize: none;
  193. max-height: 150px;
  194. padding: 10px 0;
  195. outline: none;
  196. }
  197. textarea::placeholder {
  198. color: var(--text-muted);
  199. }
  200. .send-btn {
  201. background: var(--primary-color);
  202. border: none;
  203. border-radius: 12px;
  204. width: 40px;
  205. height: 40px;
  206. display: flex;
  207. justify-content: center;
  208. align-items: center;
  209. color: #fff;
  210. cursor: pointer;
  211. transition: transform 0.2s, background 0.2s;
  212. flex-shrink: 0;
  213. margin-bottom: 2px;
  214. }
  215. .send-btn:hover {
  216. background: #3fb950;
  217. transform: scale(1.05);
  218. }
  219. .send-btn:active {
  220. transform: scale(0.95);
  221. }
  222. .send-btn:disabled {
  223. background: var(--border-color);
  224. color: var(--text-muted);
  225. cursor: not-allowed;
  226. transform: none;
  227. }
  228. .footer-note {
  229. text-align: center;
  230. font-size: 0.7rem;
  231. color: var(--text-muted);
  232. margin-top: 12px;
  233. }
  234. .typing-indicator {
  235. display: flex;
  236. gap: 4px;
  237. padding: 4px 8px;
  238. align-items: center;
  239. }
  240. .typing-dot {
  241. width: 6px;
  242. height: 6px;
  243. background: var(--text-muted);
  244. border-radius: 50%;
  245. animation: typing 1.4s infinite ease-in-out both;
  246. }
  247. .typing-dot:nth-child(1) { animation-delay: -0.32s; }
  248. .typing-dot:nth-child(2) { animation-delay: -0.16s; }
  249. .typing-dot:nth-child(3) { animation-delay: 0s; }
  250. @keyframes typing {
  251. 0%, 80%, 100% { transform: scale(0); }
  252. 40% { transform: scale(1); }
  253. }
  254. /* Modal Styles */
  255. .nav-btn {
  256. background: rgba(255, 255, 255, 0.1);
  257. border: 1px solid var(--border-color);
  258. color: var(--text-main);
  259. padding: 6px 12px;
  260. border-radius: 8px;
  261. cursor: pointer;
  262. margin-right: 10px;
  263. font-size: 0.85rem;
  264. transition: background 0.2s;
  265. }
  266. .nav-btn:hover {
  267. background: rgba(255, 255, 255, 0.2);
  268. }
  269. .modal-overlay {
  270. position: fixed;
  271. top: 0; left: 0; right: 0; bottom: 0;
  272. background: rgba(0, 0, 0, 0.6);
  273. backdrop-filter: blur(8px);
  274. -webkit-backdrop-filter: blur(8px);
  275. display: flex;
  276. justify-content: center;
  277. align-items: center;
  278. z-index: 1000;
  279. opacity: 1;
  280. transition: opacity 0.3s ease;
  281. }
  282. .modal-overlay.hidden {
  283. opacity: 0;
  284. pointer-events: none;
  285. }
  286. .modal-content {
  287. background: var(--panel-bg);
  288. border: 1px solid var(--border-color);
  289. border-radius: 16px;
  290. padding: 30px;
  291. width: 350px;
  292. position: relative;
  293. box-shadow: 0 10px 30px rgba(0,0,0,0.5);
  294. transform: translateY(0);
  295. transition: transform 0.3s ease;
  296. }
  297. .modal-overlay.hidden .modal-content {
  298. transform: translateY(-20px);
  299. }
  300. .close-modal {
  301. position: absolute;
  302. top: 15px;
  303. right: 20px;
  304. background: none;
  305. border: none;
  306. color: var(--text-muted);
  307. font-size: 1.5rem;
  308. cursor: pointer;
  309. }
  310. .close-modal:hover {
  311. color: var(--text-main);
  312. }
  313. .modal-content h2 {
  314. margin-top: 0;
  315. margin-bottom: 20px;
  316. font-size: 1.3rem;
  317. text-align: center;
  318. }
  319. .input-group {
  320. margin-bottom: 15px;
  321. }
  322. .input-group label {
  323. display: block;
  324. margin-bottom: 5px;
  325. font-size: 0.85rem;
  326. color: var(--text-muted);
  327. }
  328. .input-group input {
  329. width: 100%;
  330. padding: 10px;
  331. background: rgba(0, 0, 0, 0.2);
  332. border: 1px solid var(--border-color);
  333. border-radius: 8px;
  334. color: var(--text-main);
  335. font-size: 0.95rem;
  336. outline: none;
  337. transition: border-color 0.2s;
  338. }
  339. .input-group input:focus {
  340. border-color: var(--primary-color);
  341. }
  342. .error-text {
  343. color: #f85149;
  344. font-size: 0.85rem;
  345. margin-bottom: 10px;
  346. text-align: center;
  347. min-height: 18px;
  348. }
  349. .success-text {
  350. color: #3fb950;
  351. font-size: 0.85rem;
  352. margin-bottom: 10px;
  353. text-align: center;
  354. min-height: 18px;
  355. }
  356. .primary-btn {
  357. width: 100%;
  358. padding: 10px;
  359. background: var(--primary-gradient);
  360. border: none;
  361. border-radius: 8px;
  362. color: #fff;
  363. font-size: 1rem;
  364. cursor: pointer;
  365. transition: opacity 0.2s;
  366. }
  367. .primary-btn:hover {
  368. opacity: 0.9;
  369. }
  370. /* Authentication Screen Gateway specific styles */
  371. .auth-container {
  372. width: 100%;
  373. max-width: 400px;
  374. background: var(--panel-bg);
  375. backdrop-filter: var(--glass-blur);
  376. -webkit-backdrop-filter: var(--glass-blur);
  377. border: 1px solid var(--border-color);
  378. border-radius: 20px;
  379. padding: 40px;
  380. box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
  381. transition: opacity 0.5s ease, transform 0.5s ease;
  382. }
  383. .auth-header {
  384. text-align: center;
  385. margin-bottom: 30px;
  386. }
  387. .auth-header h2 {
  388. font-size: 1.5rem;
  389. color: #f0f6fc;
  390. margin-bottom: 8px;
  391. }
  392. .auth-header p {
  393. font-size: 0.9rem;
  394. color: var(--text-muted);
  395. }
  396. .auth-toggle {
  397. text-align: center;
  398. font-size: 0.85rem;
  399. color: var(--text-muted);
  400. margin-top: 20px;
  401. }
  402. .auth-toggle a {
  403. color: var(--primary-color);
  404. text-decoration: none;
  405. font-weight: 500;
  406. transition: color 0.2s;
  407. }
  408. .auth-toggle a:hover {
  409. color: #3fb950;
  410. text-decoration: underline;
  411. }
  412. /* Animations for transitioning out the auth screen */
  413. .fade-out {
  414. opacity: 0;
  415. transform: scale(0.95);
  416. pointer-events: none;
  417. }
  418. .fade-in {
  419. opacity: 1;
  420. transform: scale(1);
  421. }