settings.css 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714
  1. /* Modal Styles */
  2. .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: 1000; }
  3. .modal { background: var(--bg-card); border-radius: 16px; width: 90%; max-width: 480px; max-height: 80vh; display: flex; flex-direction: column; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); }
  4. .modal.wide { max-width: 700px; }
  5. .modal.extra-wide { max-width: 1000px; }
  6. .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 20px 24px; border-bottom: 1px solid var(--border); }
  7. .modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 10px; }
  8. .modal-title i { color: var(--primary); }
  9. .modal-close { width: 32px; height: 32px; background: var(--bg-hover); border: none; border-radius: 8px; color: var(--text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; }
  10. .modal-close:hover { background: var(--danger); color: white; }
  11. .modal-body { flex: 1; overflow-y: auto; padding: 24px; }
  12. .modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 16px 24px; border-top: 1px solid var(--border); }
  13. .form-group { margin-bottom: 16px; }
  14. .form-label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 8px; color: var(--text-primary); }
  15. .form-input, .form-select, .form-textarea { width: 100%; padding: 10px 14px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 13px; }
  16. .form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--primary); }
  17. .form-textarea { resize: vertical; min-height: 80px; }
  18. .password-hint { font-size: 12px; color: var(--text-muted); padding: 12px; background: var(--bg-hover); border-radius: 8px; display: flex; align-items: center; gap: 8px; }
  19. .password-hint i { color: var(--primary); }
  20. /* Model Fine Tune Modal */
  21. .model-info-card { padding: 20px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1)); border-radius: 12px; margin-bottom: 20px; }
  22. .model-header { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; }
  23. .model-icon { width: 48px; height: 48px; background: var(--primary); border-radius: 12px; display: flex; align-items: center; justify-content: center; color: white; font-size: 20px; }
  24. .model-title h4 { font-size: 16px; margin-bottom: 4px; }
  25. .model-status { font-size: 11px; padding: 2px 8px; background: var(--success); color: white; border-radius: 10px; }
  26. .model-stats { display: flex; gap: 24px; }
  27. .model-stat { display: flex; flex-direction: column; }
  28. .model-stat .stat-label { font-size: 11px; color: var(--text-muted); }
  29. .model-stat .stat-value { font-size: 14px; font-weight: 600; }
  30. .fine-tune-section { padding: 16px; background: var(--bg-hover); border-radius: 10px; }
  31. .fine-tune-section h5 { font-size: 14px; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }
  32. .fine-tune-section h5 i { color: var(--primary); }
  33. /* Data Source Modal */
  34. .data-source-list { display: flex; flex-direction: column; gap: 10px; }
  35. .data-source-item { display: flex; align-items: center; gap: 14px; padding: 14px; background: var(--bg-hover); border-radius: 10px; cursor: pointer; transition: all 0.2s; }
  36. .data-source-item:hover { background: rgba(99, 102, 241, 0.1); }
  37. .source-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; }
  38. .source-icon.trade { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
  39. .source-icon.linkedin { background: rgba(10, 102, 194, 0.2); color: #0A66C2; }
  40. .source-icon.maps { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  41. .source-icon.company { background: rgba(139, 92, 246, 0.2); color: var(--secondary); }
  42. .source-icon.exhibition { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
  43. .source-icon.procurement { background: rgba(6, 182, 212, 0.2); color: var(--info); }
  44. .source-icon.social { background: rgba(236, 72, 153, 0.2); color: #EC4899; }
  45. .source-icon.association { background: rgba(107, 114, 128, 0.2); color: var(--text-muted); }
  46. .source-info { flex: 1; }
  47. .source-name { font-size: 14px; font-weight: 500; margin-bottom: 4px; }
  48. .source-meta { display: flex; gap: 16px; font-size: 12px; color: var(--text-muted); }
  49. .source-meta i { margin-right: 4px; }
  50. .source-desc { font-size: 11px; color: var(--text-muted); margin-top: 6px; }
  51. .source-status i { margin-right: 4px; }
  52. /* Overview Cards */
  53. .sources-overview, .email-overview { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 24px; }
  54. .overview-card { display: flex; align-items: center; gap: 14px; padding: 18px; background: var(--bg-hover); border-radius: 12px; }
  55. .overview-icon { width: 48px; height: 48px; background: rgba(99, 102, 241, 0.2); border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 20px; color: var(--primary); }
  56. .overview-icon.email { background: rgba(99, 102, 241, 0.2); }
  57. .overview-info { flex: 1; }
  58. .overview-value { font-size: 22px; font-weight: 700; }
  59. .overview-label { font-size: 12px; color: var(--text-muted); }
  60. /* Quick Source Grid */
  61. .foreign-trade-section { margin-top: 24px; padding: 20px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(139, 92, 246, 0.05)); border-radius: 12px; border: 1px solid rgba(99, 102, 241, 0.1); }
  62. .foreign-trade-section h4 { font-size: 14px; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }
  63. .foreign-trade-section h4 i { color: var(--primary); }
  64. .quick-source-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
  65. .quick-source-card { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 16px; background: var(--bg-card); border-radius: 10px; text-align: center; }
  66. .quick-source-card i { font-size: 24px; color: var(--primary); }
  67. .quick-source-card span { font-size: 12px; font-weight: 500; }
  68. .quick-source-card .btn { margin-top: auto; }
  69. /* Add Data Source & Quick Source Modal */
  70. .required { color: var(--danger); margin-left: 4px; }
  71. .test-connection { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border); }
  72. .test-connection .btn { width: 100%; justify-content: center; }
  73. .quick-config-section { margin-bottom: 20px; padding: 16px; background: var(--bg-hover); border-radius: 10px; }
  74. .quick-config-section h5 { font-size: 14px; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
  75. .quick-config-section h5 i { color: var(--primary); }
  76. .checkbox-group { display: flex; flex-wrap: wrap; gap: 12px; }
  77. .checkbox-item { display: flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; }
  78. .checkbox-item input { width: 16px; height: 16px; }
  79. /* Email Tab Content */
  80. .email-tab-content { padding: 16px 0; }
  81. .stats-overview { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 20px; }
  82. .stat-card { display: flex; align-items: center; gap: 14px; padding: 18px; background: var(--bg-hover); border-radius: 12px; }
  83. .stat-card .stat-icon { width: 44px; height: 44px; background: rgba(99, 102, 241, 0.2); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--primary); font-size: 18px; }
  84. .stat-card .stat-info { flex: 1; }
  85. .stat-card .stat-value { font-size: 22px; font-weight: 700; }
  86. .stat-card .stat-label { font-size: 12px; color: var(--text-muted); }
  87. .chart-section, .top-performers { margin-top: 20px; }
  88. .chart-section h5, .top-performers h5 { font-size: 14px; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
  89. .chart-section h5 i, .top-performers h5 i { color: var(--primary); }
  90. .simple-chart { display: flex; align-items: flex-end; gap: 12px; height: 160px; padding: 30px 20px; background: var(--bg-hover); border-radius: 12px; }
  91. .chart-bar { flex: 1; background: linear-gradient(to top, var(--primary), var(--secondary)); border-radius: 6px 6px 0 0; position: relative; min-height: 20px; display: flex; align-items: flex-end; justify-content: center; padding-bottom: 8px; }
  92. .chart-bar span { font-size: 11px; color: var(--text-muted); position: absolute; bottom: -24px; }
  93. .template-list { display: flex; flex-direction: column; gap: 10px; }
  94. .template-item { display: flex; justify-content: space-between; align-items: center; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
  95. .template-name { font-size: 14px; font-weight: 500; }
  96. .template-stats { font-size: 12px; color: var(--text-muted); }
  97. /* Domain Config */
  98. .domain-config-section { margin-bottom: 20px; }
  99. .domain-config-section h5 { font-size: 14px; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
  100. .domain-config-section h5 i { color: var(--primary); }
  101. .domain-list { display: flex; flex-direction: column; gap: 10px; }
  102. .domain-item { display: flex; align-items: center; gap: 14px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
  103. .domain-icon { width: 44px; height: 44px; background: rgba(99, 102, 241, 0.2); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--primary); font-size: 18px; }
  104. .domain-info { flex: 1; }
  105. .domain-name { font-size: 14px; font-weight: 500; margin-bottom: 4px; }
  106. .domain-meta { display: flex; gap: 16px; font-size: 12px; color: var(--text-muted); }
  107. .domain-status { display: inline-flex; align-items: center; gap: 4px; }
  108. .domain-status.active { color: var(--success); }
  109. .config-guide { display: flex; flex-direction: column; gap: 14px; }
  110. .guide-step { display: flex; gap: 14px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
  111. .step-num { width: 28px; height: 28px; background: var(--primary); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; flex-shrink: 0; }
  112. .step-content { flex: 1; }
  113. .step-title { font-size: 14px; font-weight: 500; margin-bottom: 4px; }
  114. .step-desc { font-size: 12px; color: var(--text-muted); }
  115. /* Security */
  116. .security-overview { margin-bottom: 20px; }
  117. .security-card { padding: 24px; background: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(99, 102, 241, 0.1)); border-radius: 12px; text-align: center; }
  118. .security-header { display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 12px; font-size: 14px; color: var(--text-secondary); }
  119. .security-header i { color: var(--success); }
  120. .security-score { font-size: 36px; font-weight: 700; color: var(--success); margin-bottom: 8px; }
  121. .security-desc { font-size: 13px; color: var(--text-muted); }
  122. .security-section { margin-bottom: 20px; }
  123. .security-section h5 { font-size: 14px; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
  124. .security-section h5 i { color: var(--primary); }
  125. .security-list { display: flex; flex-direction: column; gap: 10px; }
  126. .security-item { display: flex; justify-content: space-between; align-items: center; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
  127. .security-item-info { display: flex; flex-direction: column; }
  128. .security-item-title { font-size: 14px; font-weight: 500; }
  129. .security-item-desc { font-size: 12px; color: var(--text-muted); }
  130. .security-logs { display: flex; flex-direction: column; gap: 8px; }
  131. .log-item { display: flex; align-items: center; gap: 16px; padding: 10px; background: var(--bg-hover); border-radius: 8px; font-size: 12px; }
  132. .log-item .log-time { color: var(--text-muted); min-width: 120px; }
  133. .log-item .log-event { flex: 1; }
  134. .log-item .log-status { padding: 2px 8px; border-radius: 10px; }
  135. .log-status.success { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  136. /* Email Enhanced */
  137. .email-account-item.selected { border: 2px solid var(--primary); background: rgba(99, 102, 241, 0.05); }
  138. .account-auth { display: flex; flex-direction: column; gap: 4px; }
  139. .auth-badge { display: inline-flex; align-items: center; gap: 4px; font-size: 10px; padding: 2px 6px; background: var(--bg-dark); border-radius: 4px; color: var(--text-muted); }
  140. .auth-badge.active { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  141. .detail-tabs { display: flex; gap: 8px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
  142. .detail-tab { padding: 8px 14px; background: transparent; border: none; color: var(--text-secondary); font-size: 12px; cursor: pointer; border-radius: 8px; }
  143. .detail-tab:hover { background: var(--bg-hover); }
  144. .detail-tab.active { background: var(--primary); color: white; }
  145. .config-grid-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
  146. .config-card { background: var(--bg-card); border-radius: 10px; overflow: hidden; }
  147. .config-card-header { padding: 12px 16px; background: var(--bg-hover); font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
  148. .config-card-body { padding: 16px; }
  149. .config-card-body .config-row { background: var(--bg-hover); padding: 10px; border-radius: 6px; margin-bottom: 8px; }
  150. .config-card-body .config-row:last-child { margin-bottom: 0; }
  151. .auth-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
  152. .auth-card { display: flex; align-items: center; gap: 12px; padding: 16px; background: var(--bg-card); border-radius: 10px; border: 1px solid var(--border); }
  153. .auth-card.pass { border-color: rgba(16, 185, 129, 0.3); }
  154. .auth-card.fail { border-color: rgba(239, 68, 68, 0.3); }
  155. .auth-card .auth-icon { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 18px; }
  156. .auth-card.pass .auth-icon { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  157. .auth-card.fail .auth-icon { background: rgba(239, 68, 68, 0.2); color: var(--danger); }
  158. .auth-card .auth-info { flex: 1; }
  159. .auth-card .auth-name { font-size: 14px; font-weight: 600; }
  160. .auth-card .auth-desc { font-size: 11px; color: var(--text-muted); }
  161. .auth-card .auth-status { font-size: 11px; padding: 3px 8px; border-radius: 10px; }
  162. .auth-card.pass .auth-status { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  163. .auth-card.fail .auth-status { background: rgba(239, 68, 68, 0.2); color: var(--danger); }
  164. .config-row-flex { display: flex; gap: 24px; margin-bottom: 16px; }
  165. .config-row-flex .config-item { flex: 1; }
  166. .signature-preview { margin-bottom: 12px; padding: 16px; background: var(--bg-card); border-radius: 10px; border-left: 4px solid var(--primary); }
  167. .signature-label { font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
  168. .signature-content pre { font-size: 12px; white-space: pre-wrap; font-family: inherit; margin: 0; }
  169. .usage-label { font-size: 11px; color: var(--text-muted); margin-bottom: 4px; }
  170. /* Email Modal */
  171. .email-accounts-list { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }
  172. .email-account-item { display: flex; align-items: center; gap: 14px; padding: 16px; background: var(--bg-hover); border-radius: 10px; }
  173. .account-icon { width: 44px; height: 44px; background: rgba(99, 102, 241, 0.2); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--primary); font-size: 18px; }
  174. .account-info { flex: 1; }
  175. .account-email { font-size: 14px; font-weight: 500; margin-bottom: 2px; }
  176. .account-name { font-size: 12px; color: var(--text-muted); margin-bottom: 6px; }
  177. .account-stats { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); }
  178. .add-account-btn { width: 100%; }
  179. /* LinkedIn & WeChat Modal */
  180. .connect-prompt { text-align: center; padding: 40px 20px; }
  181. .connect-icon { width: 80px; height: 80px; background: rgba(10, 102, 194, 0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 20px; font-size: 36px; color: #0A66C2; }
  182. .connect-icon.wechat { background: rgba(7, 193, 96, 0.2); color: #07C160; }
  183. .connect-prompt h4 { font-size: 18px; margin-bottom: 10px; }
  184. .connect-prompt p { font-size: 13px; color: var(--text-muted); margin-bottom: 24px; }
  185. .wechat-btn { background: #07C160; }
  186. .linkedin-connected, .wechat-connected { padding: 20px; background: var(--bg-hover); border-radius: 12px; }
  187. .linkedin-stats, .wechat-stats { display: flex; gap: 24px; margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border); }
  188. .stat-item { display: flex; flex-direction: column; align-items: center; flex: 1; }
  189. .stat-item .stat-label { font-size: 11px; color: var(--text-muted); margin-bottom: 4px; }
  190. .stat-item .stat-value { font-size: 18px; font-weight: 600; }
  191. /* Data Source Detail Modal */
  192. .source-detail-header { margin-bottom: 20px; }
  193. .source-detail-status { margin-bottom: 10px; }
  194. .status-badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: 20px; font-size: 13px; }
  195. .status-badge.active { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  196. .status-badge.inactive { background: rgba(107, 114, 128, 0.2); color: var(--text-muted); }
  197. .source-description { font-size: 13px; color: var(--text-muted); }
  198. .source-stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 24px; }
  199. .source-stat-card { display: flex; align-items: center; gap: 12px; padding: 16px; background: var(--bg-hover); border-radius: 10px; }
  200. .source-stat-card .stat-icon { width: 40px; height: 40px; background: rgba(99, 102, 241, 0.2); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--primary); font-size: 16px; }
  201. .source-stat-card .stat-info { flex: 1; }
  202. .source-stat-card .stat-value { font-size: 16px; font-weight: 600; }
  203. .source-stat-card .stat-label { font-size: 11px; color: var(--text-muted); }
  204. .detail-section { margin-bottom: 20px; }
  205. .detail-section h5 { font-size: 14px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
  206. .detail-section h5 i { color: var(--primary); }
  207. .config-grid { display: flex; gap: 16px; flex-wrap: wrap; }
  208. .config-item { display: flex; flex-direction: column; gap: 6px; min-width: 120px; }
  209. .config-item label { font-size: 12px; color: var(--text-muted); }
  210. .config-item .form-select { padding: 8px 12px; font-size: 12px; }
  211. .fields-list { display: flex; flex-direction: column; gap: 8px; }
  212. .field-item { display: flex; align-items: center; gap: 12px; padding: 10px; background: var(--bg-hover); border-radius: 8px; font-size: 13px; }
  213. .field-name { color: var(--primary); font-weight: 500; }
  214. .field-item i { color: var(--text-muted); }
  215. .field-target { color: var(--text-secondary); font-family: monospace; }
  216. .sync-logs { display: flex; flex-direction: column; gap: 8px; }
  217. .sync-log-item { display: flex; align-items: center; gap: 16px; padding: 10px; background: var(--bg-hover); border-radius: 8px; font-size: 12px; }
  218. .log-time { color: var(--text-muted); min-width: 140px; }
  219. .log-status { padding: 2px 8px; border-radius: 10px; }
  220. .log-status.success { background: rgba(16, 185, 129, 0.2); color: var(--success); }
  221. .log-count { color: var(--text-secondary); }
  222. /* Email Modal Enhanced */
  223. .email-tabs { display: flex; gap: 8px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
  224. .email-tab { padding: 8px 16px; background: transparent; border: none; color: var(--text-secondary); font-size: 13px; cursor: pointer; border-radius: 8px; }
  225. .email-tab:hover { background: var(--bg-hover); }
  226. .email-tab.active { background: var(--primary); color: white; }
  227. .account-usage { display: flex; flex-direction: column; gap: 4px; min-width: 100px; }
  228. .usage-bar { height: 6px; background: var(--bg-dark); border-radius: 3px; overflow: hidden; }
  229. .usage-fill { height: 100%; background: var(--primary); border-radius: 3px; }
  230. .usage-text { font-size: 10px; color: var(--text-muted); text-align: right; }
  231. .email-detail-panel { margin-top: 20px; padding: 20px; background: var(--bg-hover); border-radius: 12px; }
  232. .email-detail-panel .detail-header { margin-bottom: 16px; }
  233. .email-detail-panel .detail-header h4 { font-size: 14px; display: flex; align-items: center; gap: 8px; }
  234. .config-table { display: flex; flex-direction: column; gap: 8px; }
  235. .config-row { display: flex; justify-content: space-between; padding: 10px; background: var(--bg-card); border-radius: 8px; font-size: 12px; }
  236. .config-label { color: var(--text-muted); }
  237. .config-value { font-weight: 500; }
  238. .auth-status-grid { display: flex; gap: 12px; }
  239. .auth-status-item { display: flex; align-items: center; gap: 8px; padding: 10px 16px; background: var(--bg-card); border-radius: 8px; font-size: 12px; }
  240. .auth-status-item.active { color: var(--success); }
  241. .auth-status-item.inactive { color: var(--danger); }
  242. .auth-status-item i { font-size: 16px; }
  243. .auto-reply-config { display: flex; flex-direction: column; gap: 12px; }
  244. .auto-reply-config .config-item { flex-direction: row; align-items: center; justify-content: space-between; }
  245. .auto-reply-config textarea { min-height: 60px; }
  246. .signature-textarea { font-family: monospace; font-size: 12px; }
  247. .toggle-switch { width: 44px; height: 24px; background: var(--bg-dark); border-radius: 12px; position: relative; cursor: pointer; transition: all 0.2s; }
  248. .toggle-switch.active { background: var(--primary); }
  249. .toggle-slider { width: 20px; height: 20px; background: white; border-radius: 50%; position: absolute; top: 2px; left: 2px; transition: all 0.2s; }
  250. .toggle-switch.active .toggle-slider { left: 22px; }
  251. .settings-page {
  252. flex: 1;
  253. display: flex;
  254. flex-direction: column;
  255. padding: 24px;
  256. overflow-y: auto;
  257. background: var(--bg-dark);
  258. }
  259. .settings-header {
  260. display: flex;
  261. justify-content: space-between;
  262. align-items: flex-start;
  263. margin-bottom: 24px;
  264. }
  265. .header-left {
  266. display: flex;
  267. flex-direction: column;
  268. gap: 4px;
  269. }
  270. .data-title {
  271. font-size: 20px;
  272. font-weight: 600;
  273. }
  274. .header-desc {
  275. font-size: 13px;
  276. color: var(--text-secondary);
  277. }
  278. .header-actions {
  279. display: flex;
  280. gap: 12px;
  281. }
  282. /* Settings Grid */
  283. .settings-grid {
  284. display: grid;
  285. grid-template-columns: 1fr 1fr;
  286. gap: 24px;
  287. }
  288. .settings-column {
  289. display: flex;
  290. flex-direction: column;
  291. gap: 24px;
  292. }
  293. /* Settings Section */
  294. .settings-section {
  295. background: var(--bg-card);
  296. border: 1px solid var(--border);
  297. border-radius: 16px;
  298. overflow: hidden;
  299. }
  300. .section-header {
  301. display: flex;
  302. align-items: center;
  303. gap: 14px;
  304. padding: 20px;
  305. background: var(--bg-hover);
  306. border-bottom: 1px solid var(--border);
  307. }
  308. .section-icon {
  309. width: 44px;
  310. height: 44px;
  311. border-radius: 12px;
  312. display: flex;
  313. align-items: center;
  314. justify-content: center;
  315. font-size: 18px;
  316. }
  317. .section-title h3 {
  318. font-size: 15px;
  319. font-weight: 600;
  320. margin-bottom: 2px;
  321. }
  322. .section-title p {
  323. font-size: 12px;
  324. color: var(--text-secondary);
  325. }
  326. /* Settings List */
  327. .settings-list {
  328. padding: 8px;
  329. }
  330. .settings-item {
  331. display: flex;
  332. align-items: center;
  333. gap: 14px;
  334. padding: 14px;
  335. border-radius: 10px;
  336. cursor: pointer;
  337. transition: background 0.2s;
  338. }
  339. .settings-item:hover {
  340. background: var(--bg-hover);
  341. }
  342. .item-icon {
  343. width: 40px;
  344. height: 40px;
  345. border-radius: 10px;
  346. display: flex;
  347. align-items: center;
  348. justify-content: center;
  349. font-size: 16px;
  350. flex-shrink: 0;
  351. }
  352. .item-content {
  353. flex: 1;
  354. min-width: 0;
  355. }
  356. .item-title {
  357. font-size: 14px;
  358. font-weight: 500;
  359. margin-bottom: 2px;
  360. }
  361. .item-desc {
  362. font-size: 12px;
  363. color: var(--text-secondary);
  364. }
  365. .item-action {
  366. display: flex;
  367. align-items: center;
  368. gap: 8px;
  369. flex-shrink: 0;
  370. }
  371. .item-value {
  372. font-size: 13px;
  373. color: var(--text-secondary);
  374. }
  375. .item-value.success {
  376. color: var(--success);
  377. }
  378. .item-value.warning {
  379. color: var(--warning);
  380. }
  381. .item-action i {
  382. color: var(--text-muted);
  383. font-size: 12px;
  384. }
  385. /* Profile Card */
  386. .profile-card {
  387. display: flex;
  388. align-items: center;
  389. gap: 16px;
  390. padding: 20px;
  391. margin: 8px;
  392. background: var(--bg-hover);
  393. border-radius: 12px;
  394. }
  395. .profile-avatar {
  396. width: 64px;
  397. height: 64px;
  398. background: var(--gradient-1);
  399. border-radius: 50%;
  400. display: flex;
  401. align-items: center;
  402. justify-content: center;
  403. font-size: 24px;
  404. font-weight: 600;
  405. color: white;
  406. position: relative;
  407. }
  408. .avatar-edit {
  409. position: absolute;
  410. bottom: 0;
  411. right: 0;
  412. width: 24px;
  413. height: 24px;
  414. background: var(--primary);
  415. border: 2px solid var(--bg-hover);
  416. border-radius: 50%;
  417. display: flex;
  418. align-items: center;
  419. justify-content: center;
  420. font-size: 10px;
  421. color: white;
  422. cursor: pointer;
  423. }
  424. .profile-info {
  425. flex: 1;
  426. }
  427. .profile-name {
  428. font-size: 16px;
  429. font-weight: 600;
  430. margin-bottom: 2px;
  431. }
  432. .profile-role {
  433. font-size: 13px;
  434. color: var(--text-secondary);
  435. margin-bottom: 2px;
  436. }
  437. .profile-email {
  438. font-size: 12px;
  439. color: var(--text-muted);
  440. }
  441. /* Toggle Switch */
  442. .toggle-switch {
  443. width: 44px;
  444. height: 24px;
  445. background: var(--bg-dark);
  446. border-radius: 12px;
  447. position: relative;
  448. cursor: pointer;
  449. transition: all 0.2s;
  450. flex-shrink: 0;
  451. }
  452. .toggle-switch.active {
  453. background: var(--primary);
  454. }
  455. .toggle-slider {
  456. position: absolute;
  457. top: 2px;
  458. left: 2px;
  459. width: 20px;
  460. height: 20px;
  461. background: white;
  462. border-radius: 50%;
  463. transition: all 0.2s;
  464. box-shadow: 0 2px 4px rgba(0,0,0,0.2);
  465. }
  466. .toggle-switch.active .toggle-slider {
  467. transform: translateX(20px);
  468. }
  469. /* Global Toggle Fix - Override inline styles */
  470. .settings-item .toggle-switch,
  471. .channel-item .toggle-switch,
  472. .item-action .toggle-switch,
  473. .settings-modal .toggle-switch,
  474. .modal .toggle-switch,
  475. .detail-section .toggle-switch,
  476. .config-item .toggle-switch,
  477. .auto-reply-config .toggle-switch {
  478. margin-left: auto;
  479. background: var(--bg-dark) !important;
  480. }
  481. .settings-item .toggle-switch.active,
  482. .channel-item .toggle-switch.active,
  483. .item-action .toggle-switch.active,
  484. .settings-modal .toggle-switch.active,
  485. .modal .toggle-switch.active,
  486. .detail-section .toggle-switch.active,
  487. .config-item .toggle-switch.active,
  488. .auto-reply-config .toggle-switch.active {
  489. background: var(--primary) !important;
  490. }
  491. /* Mini Select */
  492. .mini-select {
  493. padding: 6px 12px;
  494. background: var(--bg-hover);
  495. border: 1px solid var(--border);
  496. border-radius: 8px;
  497. color: var(--text-primary);
  498. font-size: 13px;
  499. cursor: pointer;
  500. }
  501. .mini-select:focus {
  502. outline: none;
  503. border-color: var(--primary);
  504. }
  505. /* Channel List */
  506. .channel-list {
  507. padding: 8px;
  508. }
  509. .channel-item {
  510. display: flex;
  511. align-items: center;
  512. gap: 14px;
  513. padding: 14px;
  514. border-radius: 10px;
  515. border: 1px solid var(--border);
  516. margin-bottom: 8px;
  517. background: var(--bg-dark);
  518. transition: all 0.2s;
  519. }
  520. .channel-item:last-child {
  521. margin-bottom: 0;
  522. }
  523. .channel-item.connected {
  524. border-color: rgba(16, 185, 129, 0.3);
  525. }
  526. .channel-icon {
  527. width: 40px;
  528. height: 40px;
  529. border-radius: 10px;
  530. display: flex;
  531. align-items: center;
  532. justify-content: center;
  533. font-size: 18px;
  534. flex-shrink: 0;
  535. }
  536. .channel-content {
  537. flex: 1;
  538. }
  539. .channel-title {
  540. font-size: 14px;
  541. font-weight: 500;
  542. margin-bottom: 2px;
  543. }
  544. .channel-desc {
  545. font-size: 12px;
  546. color: var(--text-secondary);
  547. }
  548. .channel-action {
  549. flex-shrink: 0;
  550. }
  551. .status-badge {
  552. display: inline-flex;
  553. align-items: center;
  554. gap: 4px;
  555. padding: 4px 10px;
  556. border-radius: 12px;
  557. font-size: 11px;
  558. font-weight: 500;
  559. }
  560. .status-badge.success {
  561. background: rgba(16, 185, 129, 0.2);
  562. color: var(--success);
  563. }
  564. /* Toast */
  565. .toast {
  566. position: fixed;
  567. bottom: 24px;
  568. right: 24px;
  569. padding: 12px 20px;
  570. background: var(--bg-card);
  571. border: 1px solid var(--border);
  572. border-radius: 10px;
  573. display: flex;
  574. align-items: center;
  575. gap: 10px;
  576. font-size: 13px;
  577. box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
  578. z-index: 2000;
  579. }
  580. .toast.success {
  581. border-color: var(--success);
  582. }
  583. .toast.success i {
  584. color: var(--success);
  585. }
  586. .toast-enter-active,
  587. .toast-leave-active {
  588. transition: all 0.3s ease;
  589. }
  590. .toast-enter-from,
  591. .toast-leave-to {
  592. opacity: 0;
  593. transform: translateY(20px);
  594. }
  595. /* Responsive */
  596. @media (max-width: 1200px) {
  597. .settings-grid {
  598. grid-template-columns: 1fr;
  599. }
  600. }
  601. @media (max-width: 768px) {
  602. .settings-header {
  603. flex-direction: column;
  604. gap: 16px;
  605. }
  606. .header-actions {
  607. width: 100%;
  608. }
  609. .header-actions .btn {
  610. flex: 1;
  611. }
  612. }