You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3051 lines
56KB

  1. :root {
  2. --main-color: #2B99B4;
  3. --main-color-hover: #238a9f;
  4. --main-color-light: #3db3d1;
  5. --secondary-color: #27607F;
  6. --secondary-color-hover: #1f4d66;
  7. --secondary-color-light: #3a7a9e;
  8. --third-color: #243B5D;
  9. --third-color-hover: #1a2d47;
  10. --third-color-light: #2f4d75;
  11. --contrast: #F63E63;
  12. --contrast-hover: #e02851;
  13. --contrast-light: #f85979;
  14. --gray-primary: #6c757d;
  15. --gray-hover: #5a6268;
  16. --gray-light: #868e96;
  17. --gray-bg: #e9ecef;
  18. --yellow: #F5A623;
  19. --yellow-hover: #D68910;
  20. --font-size: 16px;
  21. --contrast-soft: #F48FB1;
  22. --contrast-soft-hover: #F06292;
  23. --secondary: #2984a1;
  24. --bg-light: #eaf8ff;
  25. --text-dark: #243b5d;
  26. --text-light: #6c757d;
  27. --border: #e5e7eb;
  28. }
  29. html, body {
  30. font-family: 'Montserrat', Arial, sans-serif;
  31. height: 100%;
  32. width: 100%;
  33. margin: 0;
  34. padding: 0;
  35. overflow: hidden;
  36. }
  37. h1:focus {
  38. outline: none;
  39. }
  40. a, .btn-link {
  41. color: #0071c1;
  42. }
  43. .btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
  44. box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
  45. }
  46. /* AJOUT GTO */
  47. .page-container {
  48. padding: 1.5rem;
  49. min-height: 100%;
  50. }
  51. .page-header {
  52. display: flex;
  53. justify-content: space-between;
  54. align-items: center;
  55. margin-bottom: 1.5rem;
  56. padding: 1.25rem;
  57. background-color: white;
  58. border-radius: 8px;
  59. box-shadow: 0 2px 4px rgba(0,0,0,0.08);
  60. }
  61. .page-title-section {
  62. display: flex;
  63. align-items: center;
  64. gap: 1rem;
  65. }
  66. .page-title {
  67. font-size: 1.5rem;
  68. font-weight: 600;
  69. color: #2c3e50;
  70. margin: 0;
  71. }
  72. .page-subtitle {
  73. font-size: 1.1rem;
  74. font-weight: 400;
  75. color: #6c757d;
  76. margin: 0.25rem 0 0 0;
  77. }
  78. /*login*/
  79. .login-background {
  80. background-image: url('/images/fond-login.jpg');
  81. background-size: cover;
  82. background-repeat: no-repeat;
  83. background-position: center;
  84. height: 50vh; /* plein écran */
  85. display: flex;
  86. align-items: baseline;
  87. justify-content: center;
  88. }
  89. .login-container {
  90. display: flex;
  91. flex-direction: row-reverse;
  92. position: fixed;
  93. top: 0;
  94. left: 0;
  95. right: 0;
  96. bottom: 0;
  97. width: 100vw;
  98. height: 100vh;
  99. }
  100. .login-image {
  101. flex: 1;
  102. background-image: url('/images/fond-login.jpg');
  103. background-size: cover;
  104. background-position: center;
  105. background-repeat: no-repeat;
  106. }
  107. .login-form-section {
  108. flex: 1;
  109. display: flex;
  110. flex-direction: column;
  111. justify-content: center;
  112. align-items: center;
  113. padding: 2rem;
  114. background: white;
  115. }
  116. .login-form-section h1 {
  117. margin-bottom: 0.5rem;
  118. color: #333;
  119. }
  120. .login-form-section p {
  121. margin-bottom: 2rem;
  122. text-align: center;
  123. color: #666;
  124. }
  125. .login-form-section h3 {
  126. margin-bottom: 1.5rem;
  127. color: #333;
  128. }
  129. /* Formulaire */
  130. .login-form {
  131. width: 100%;
  132. max-width: 350px;
  133. display: flex;
  134. flex-direction: column;
  135. gap: 1rem;
  136. }
  137. .form-input {
  138. padding: 0.75rem;
  139. border: 1px solid #ddd;
  140. border-radius: 4px;
  141. font-size: 1rem;
  142. width: 100%;
  143. box-sizing: border-box;
  144. }
  145. .form-input:focus {
  146. outline: none;
  147. border-color: #ffc107;
  148. }
  149. /* les boutons*/
  150. .btn {
  151. padding: 0.75rem;
  152. border: none;
  153. border-radius: 4px;
  154. font-size: 1rem;
  155. cursor: pointer;
  156. width: 100%;
  157. }
  158. .btn-close {
  159. border: none;
  160. font-size: 1.5rem;
  161. font-weight: 700;
  162. line-height: 1;
  163. color: #000;
  164. opacity: 0.5;
  165. padding: 0;
  166. cursor: pointer;
  167. }
  168. .btn-close:hover {
  169. opacity: 0.75;
  170. }
  171. .btn-action {
  172. display: inline-flex;
  173. align-items: center;
  174. gap: 0.5rem;
  175. padding: 0.2rem 0.7rem;
  176. border-radius: 8px;
  177. font-weight: 500;
  178. font-size: 0.9rem;
  179. transition: all 0.2s ease;
  180. border: none;
  181. cursor: pointer;
  182. white-space: nowrap;
  183. color: snow;
  184. }
  185. .btn-action:hover {
  186. transform: translateY(-2px);
  187. box-shadow: 0 4px 8px rgba(0,0,0,0.15);
  188. }
  189. .btn-action:active {
  190. transform: translateY(0);
  191. }
  192. .btn-action i {
  193. font-size: 1rem;
  194. }
  195. .btn-icon {
  196. display: inline-flex;
  197. align-items: center;
  198. justify-content: center;
  199. width: 36px;
  200. height: 36px;
  201. border-radius: 6px;
  202. border: none;
  203. cursor: pointer;
  204. transition: all 0.2s ease;
  205. font-size: 0.95rem;
  206. }
  207. .btn-icon:hover {
  208. transform: translateY(-2px);
  209. box-shadow: 0 4px 8px rgba(0,0,0,0.15);
  210. }
  211. .btn-icon:active {
  212. transform: translateY(0);
  213. }
  214. .btn-compact {
  215. display: flex;
  216. align-items: center;
  217. gap: 0.5rem;
  218. padding: 0.6rem 1.2rem;
  219. font-size: 0.95rem;
  220. max-width: 120px;
  221. }
  222. .btn-compact2 {
  223. width: 190px;
  224. }
  225. .btn-compact3 {
  226. width: 140px;
  227. }
  228. .btn-primary {
  229. background-color: var(--main-color);
  230. }
  231. .btn-primary:hover {
  232. background-color: var(--main-color-hover)
  233. }
  234. .btn-secondary {
  235. background-color: var(--gray-primary);
  236. }
  237. .btn-secondary:hover {
  238. background-color: var(--gray-hover);
  239. }
  240. .btn-tertiary {
  241. background-color: var(--third-color);
  242. color: ivory;
  243. }
  244. .btn-tertiary:hover {
  245. background-color: var(--third-color-hover);
  246. color: ivory;
  247. }
  248. .btn-warning {
  249. background-color: var(--yellow);
  250. color: #000;
  251. width:230px;
  252. font-weight: 500;
  253. }
  254. .btn-warning:hover {
  255. background-color: var(--yellow-hover);
  256. }
  257. .btn-view {
  258. background-color: var(--secondary-color);
  259. color: white;
  260. }
  261. .btn-view:hover {
  262. background-color: var(--secondary-color-hover);
  263. }
  264. .btn-edit {
  265. background-color: var(--yellow);
  266. color: #ffffff;
  267. }
  268. .btn-edit:hover {
  269. background-color: var(--yellow-hover);
  270. }
  271. .btn-delete {
  272. background-color: var(--contrast);
  273. color: white;
  274. }
  275. .btn-delete:hover {
  276. background-color: var(--contrast-hover);
  277. color: white;
  278. }
  279. .btn-danger {
  280. background-color: var(--contrast-soft);
  281. }
  282. .btn-danger:hover {
  283. background-color: var(--contrast-soft-hover);
  284. }
  285. .error-message {
  286. color: #dc3545;
  287. margin-top: 1rem;
  288. text-align: center;
  289. }
  290. .nocollapsible {
  291. cursor: auto;
  292. padding: 10px;
  293. background-color: #eaeaea;
  294. border: none;
  295. text-align: left;
  296. font-size: 14px;
  297. /*font-weight:bold;*/
  298. width: 100%;
  299. }
  300. .collapsible {
  301. cursor: pointer;
  302. padding: 10px;
  303. background-color: #eaeaea;
  304. border: none;
  305. text-align: left;
  306. font-size: 14px;
  307. font-weight: lighter;
  308. width: 100%;
  309. }
  310. .collapsible::before {
  311. content: "▶ ";
  312. }
  313. .collapsibleexpanded {
  314. cursor: pointer;
  315. padding: 10px;
  316. background-color: #eaeaea;
  317. border: none;
  318. text-align: left;
  319. font-size: 14px;
  320. font-weight: lighter;
  321. width: 100%;
  322. }
  323. .collapsibleexpanded::before {
  324. content: "▼ ";
  325. }
  326. .contentinfo {
  327. padding: 0px 0px;
  328. background-color: #f9f9f9;
  329. border-left: 3px solid #ccc;
  330. font-size: 11px;
  331. }
  332. .content {
  333. padding: 5px 5px;
  334. padding-top: 1.1rem;
  335. background-color: #f9f9f9;
  336. border-left: 3px solid #ccc;
  337. font-size: 14px;
  338. }
  339. .liste-utilisateurs {
  340. border: 1px solid #ccc;
  341. padding: 10px;
  342. }
  343. .item-utilisateur {
  344. padding: 5px;
  345. border-bottom: 1px solid #eee;
  346. }
  347. .filter-bool {
  348. min-width: 600px; /* ou plus selon besoin */
  349. }
  350. .modal-header-custom {
  351. display: grid;
  352. grid-template-columns: auto 1fr auto;
  353. align-items: center;
  354. gap: 10px;
  355. margin-bottom: 0.5rem;
  356. }
  357. .message-zone {
  358. text-align: center;
  359. }
  360. .display-message {
  361. font-weight: bold;
  362. white-space: nowrap;
  363. }
  364. .display-message-container {
  365. min-height: 40px; /* Pour éviter que les boutons ne masquent le texte */
  366. padding: 0 40px; /* Pour laisser de l'espace au texte entre les boutons */
  367. }
  368. .modal-custom-large {
  369. max-width: 100px;
  370. width: 100%;
  371. margin: auto;
  372. position: relative;
  373. top: 50%;
  374. transform: translateY(-50%);
  375. }
  376. body.modal-open {
  377. overflow: hidden;
  378. }
  379. .modal-backdrop {
  380. background-color: rgba(0, 0, 0, 0.5);
  381. }
  382. .modal-content {
  383. border-radius: 8px;
  384. border: none;
  385. box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  386. overflow: hidden;
  387. }
  388. .modal-dialog {
  389. animation: modalSlideIn 0.3s ease-out;
  390. }
  391. .modal-content .btn-icon {
  392. width: 36px;
  393. height: 36px;
  394. color: white;
  395. }
  396. .modal-content .btn-icon:hover {
  397. background-color: #238a9f !important;
  398. }
  399. .modal-content .form-input:disabled,
  400. .modal-content .form-control:disabled {
  401. background-color: #f3f4f6;
  402. cursor: not-allowed;
  403. opacity: 0.7;
  404. }
  405. .access-section h6 {
  406. color: white;
  407. }
  408. .access-section summary {
  409. color: white;
  410. }
  411. .hover-cursor {
  412. cursor: pointer; /* s-resize; */ /* pointer;*/
  413. font-weight: bold;
  414. }
  415. .hover-cursor:hover {
  416. background-color: #f0f0f0;
  417. }
  418. table {
  419. font-size: 11px;
  420. }
  421. .table_standard {
  422. font-size: 12px;
  423. width: 100%; /* Le tableau occupe 100% de son conteneur */
  424. table-layout: fixed; /* Laisse le tableau adapter sa taille selon le contenu */
  425. word-wrap: break-word;
  426. }
  427. .table_standard th,
  428. .table_standard td {
  429. white-space: normal !important;
  430. overflow-wrap: break-word;
  431. }
  432. .table_collapse {
  433. font-size: 12px;
  434. width: 100%; /* Le tableau occupe 100% de son conteneur */
  435. table-layout: fixed; /* Force un layout fixe pour les colonnes */
  436. }
  437. /* Liste version "CARD" , partie Header */
  438. .card-custom-font-header {
  439. font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
  440. font-size: 14px;
  441. }
  442. /* Liste version "CARD" , partie Body */
  443. .card-custom-font-body {
  444. font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
  445. font-size: 10px;
  446. }
  447. /* Liste version "CARD" , partie Header + body (en cas de besoin) */
  448. .card-custom-font {
  449. font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
  450. font-size: 10px;
  451. }
  452. .th_td_standard {
  453. word-wrap: normal; /* Le texte se coupe et passe à la ligne si nécessaire */
  454. white-space: nowrap; /* Empêche les retours à la ligne automatiques */
  455. overflow: visible; /* Le texte s'adapte à la largeur sans troncature */
  456. }
  457. .th_td_collapse {
  458. /*width: 20%; */ /* Chaque colonne prendra 20% de la largeur totale du tableau */
  459. word-wrap: break-word; /* Permet au texte de se couper et d'aller à la ligne */
  460. white-space: normal; /* Autorise les retours à la ligne naturels */
  461. text-align: left; /* Aligne le texte à gauche pour une meilleure lisibilité */
  462. padding: 10px; /* Ajoute un espace autour du texte */
  463. overflow: hidden; /* Évite les débordements */
  464. box-sizing: border-box; /* Inclut le padding dans la largeur */
  465. }
  466. .th_td_col-10 {
  467. width: 10%;
  468. }
  469. .th_td_col-20 {
  470. width: 20%;
  471. }
  472. .th_td_col-30 {
  473. width: 30%;
  474. }
  475. .th_td_col-40 {
  476. width: 40%;
  477. }
  478. .th_td_col-50 {
  479. width: 50%;
  480. }
  481. th:hover {
  482. color: #007bff;
  483. }
  484. @media (max-width: 768px) {
  485. .th, .td {
  486. font-size: 14px;
  487. }
  488. .btn {
  489. font-size: 12px;
  490. }
  491. .input {
  492. width: 100%;
  493. }
  494. }
  495. .same-width {
  496. width: 100px;
  497. }
  498. button.btn-sm i {
  499. font-size: 16px; /* Taille des icônes */
  500. }
  501. button.btn-sm {
  502. padding: 5px; /* Réduit la taille des boutons */
  503. }
  504. .button-container button {
  505. margin-right: 10px; /* Ajoute un espace à droite de chaque bouton */
  506. }
  507. .button-container button:last-child {
  508. margin-right: 0; /* Supprime l'espace pour le dernier bouton */
  509. }
  510. .custom-dropdown {
  511. background-color: #1b6ec2; /* Fond clair */
  512. border: 1px solid #ccc; /* Bordure grise */
  513. border-radius: 5px; /* Bordure arrondie */
  514. }
  515. .dropdown-item:hover {
  516. background-color: #007bff; /* Fond bleu */
  517. border-radius: 5px; /* Bordure arrondie au survol */
  518. }
  519. .valid.modified:not([type=checkbox]) {
  520. outline: 1px solid #26b050;
  521. }
  522. .invalid {
  523. outline: 1px solid red;
  524. }
  525. .validation-message {
  526. color: red;
  527. }
  528. #blazor-error-ui {
  529. background: lightyellow;
  530. bottom: 0;
  531. box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
  532. display: none;
  533. left: 0;
  534. padding: 0.6rem 1.25rem 0.7rem 1.25rem;
  535. position: fixed;
  536. width: 100%;
  537. z-index: 1000;
  538. }
  539. #blazor-error-ui .dismiss {
  540. cursor: pointer;
  541. position: absolute;
  542. right: 0.75rem;
  543. top: 0.5rem;
  544. }
  545. .blazor-error-boundary {
  546. background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
  547. padding: 1rem 1rem 1rem 3.7rem;
  548. color: white;
  549. }
  550. .blazor-error-boundary::after {
  551. content: "An error has occurred."
  552. }
  553. .loading-progress {
  554. position: relative;
  555. display: block;
  556. width: 8rem;
  557. height: 8rem;
  558. margin: 20vh auto 1rem auto;
  559. }
  560. .loading-progress circle {
  561. fill: none;
  562. stroke: #e0e0e0;
  563. stroke-width: 0.6rem;
  564. transform-origin: 50% 50%;
  565. transform: rotate(-90deg);
  566. }
  567. .loading-progress circle:last-child {
  568. stroke: #1b6ec2;
  569. stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
  570. transition: stroke-dasharray 0.05s ease-in-out;
  571. }
  572. .loading-progress-text {
  573. position: absolute;
  574. text-align: center;
  575. font-weight: bold;
  576. inset: calc(20vh + 3.25rem) 0 auto 0.2rem;
  577. }
  578. .loading-progress-text:after {
  579. content: var(--blazor-load-percentage-text, "Loading");
  580. }
  581. code {
  582. color: #c02d76;
  583. }
  584. /* Container principal */
  585. .home-container {
  586. margin: 0 auto;
  587. }
  588. /* En-tête */
  589. .home-header {
  590. background: linear-gradient(45deg, var(--secondary-color) 0%, var(--main-color) 70%);
  591. color: white;
  592. padding: 2rem;
  593. border-radius: 12px;
  594. margin-bottom: 2rem;
  595. box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  596. }
  597. .home-title {
  598. font-size: 2.5rem;
  599. font-weight: 700;
  600. margin: 0 0 0.5rem 0;
  601. }
  602. .home-version {
  603. font-size: 0.875rem;
  604. opacity: 0.9;
  605. margin: 0 0 1rem 0;
  606. }
  607. .home-welcome {
  608. font-size: 1.125rem;
  609. margin: 0;
  610. }
  611. .home-welcome strong {
  612. font-weight: 600;
  613. }
  614. /* Badges de rôle */
  615. .role-badges {
  616. display: flex;
  617. gap: 0.75rem;
  618. margin-top: 1rem;
  619. flex-wrap: wrap;
  620. }
  621. .role-badge {
  622. display: inline-flex;
  623. align-items: center;
  624. padding: 0.5rem 1rem;
  625. background-color: rgba(255, 255, 255, 0.2);
  626. border-radius: 20px;
  627. font-size: 0.875rem;
  628. font-weight: 500;
  629. backdrop-filter: blur(10px);
  630. }
  631. .role-badge::before {
  632. content: '✓';
  633. margin-right: 0.5rem;
  634. font-weight: bold;
  635. }
  636. /* Section des informations */
  637. .info-section {
  638. background: white;
  639. border-radius: 12px;
  640. padding: 1.5rem;
  641. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  642. margin-bottom: 2rem;
  643. }
  644. /* Accordéons personnalisés */
  645. .accordion-item {
  646. margin-bottom: 0.75rem;
  647. border-radius: 8px;
  648. overflow: hidden;
  649. box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
  650. transition: box-shadow 0.2s ease;
  651. }
  652. .accordion-item:hover {
  653. box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
  654. }
  655. .accordion-button {
  656. width: 100%;
  657. padding: 1rem 1.25rem;
  658. background-color: var(--secondary-color);
  659. border: none;
  660. text-align: left;
  661. font-size: 1rem;
  662. font-weight: 500;
  663. cursor: pointer;
  664. display: flex;
  665. align-items: center;
  666. transition: all 0.2s ease;
  667. color: #333;
  668. }
  669. .accordion-button:hover {
  670. background-color: #e9ecef;
  671. }
  672. .accordion-button.expanded {
  673. background-color: #667eea;
  674. color: white;
  675. }
  676. /* Flèche Bootstrap - rotation */
  677. .accordion-button::after {
  678. transition: transform 0.3s ease-in-out;
  679. }
  680. .accordion-button.expanded::after {
  681. transform: rotate(0deg);
  682. background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
  683. }
  684. .accordion-static {
  685. padding: 1rem 1.25rem;
  686. background-color: var(--main-color);
  687. border-radius: 8px;
  688. }
  689. .accordion-static.bold {
  690. font-weight: 600;
  691. background-color: #e7f1ff;
  692. color: var(--third-color);
  693. }
  694. .accordion-content {
  695. background-color: #ffffff;
  696. border-left: 3px solid #667eea;
  697. padding: 0.75rem 1.25rem;
  698. }
  699. .accordion-content ul {
  700. margin: 0;
  701. padding-left: 1.5rem;
  702. }
  703. .accordion-content li {
  704. padding: 0.375rem 0;
  705. line-height: 1.5;
  706. color: #555;
  707. }
  708. .accordion-content li::marker {
  709. color: #667eea;
  710. }
  711. /* Responsive */
  712. @media (max-width: 768px) {
  713. .home-container {
  714. padding: 1rem;
  715. }
  716. .home-header {
  717. padding: 1.5rem;
  718. }
  719. .home-title {
  720. font-size: 1.75rem;
  721. }
  722. .accordion-button,
  723. .accordion-static {
  724. padding: 0.875rem 1rem;
  725. font-size: 0.9375rem;
  726. }
  727. .role-badges {
  728. flex-direction: column;
  729. }
  730. .role-badge {
  731. width: 100%;
  732. justify-content: center;
  733. }
  734. }
  735. /* Animation d'entrée */
  736. @keyframes fadeInUp {
  737. from {
  738. opacity: 0;
  739. transform: translateY(20px);
  740. }
  741. to {
  742. opacity: 1;
  743. transform: translateY(0);
  744. }
  745. }
  746. .accordion-item {
  747. animation: fadeInUp 0.3s ease forwards;
  748. }
  749. .accordion-item:nth-child(1) {
  750. animation-delay: 0.05s;
  751. }
  752. .accordion-item:nth-child(2) {
  753. animation-delay: 0.1s;
  754. }
  755. .accordion-item:nth-child(3) {
  756. animation-delay: 0.15s;
  757. }
  758. .accordion-item:nth-child(4) {
  759. animation-delay: 0.2s;
  760. }
  761. .accordion-item:nth-child(5) {
  762. animation-delay: 0.25s;
  763. }
  764. .button-container {
  765. display: flex;
  766. }
  767. /* NavMenu.razor.css */
  768. .nav-menu {
  769. padding: 1rem;
  770. height: 100%;
  771. }
  772. /* Éléments de navigation */
  773. .nav-item {
  774. margin-bottom: 0.5rem;
  775. }
  776. .nav-link2 {
  777. display: flex;
  778. align-items: center;
  779. padding: 0.75rem 1rem;
  780. color: white !important;
  781. text-decoration: none;
  782. border-radius: 8px;
  783. transition: all 0.2s ease;
  784. font-weight: 500;
  785. }
  786. .nav-link2:hover {
  787. background-color: rgba(255, 255, 255, 0.1);
  788. color: white !important;
  789. }
  790. .nav-link2.active {
  791. background-color: rgba(255, 255, 255, 0.2);
  792. color: white !important;
  793. font-weight: 600;
  794. }
  795. .nav-icon {
  796. margin-right: 0.75rem;
  797. font-size: 1.1rem;
  798. }
  799. /* Sections avec détails */
  800. .nav-section {
  801. margin-bottom: 0.5rem;
  802. }
  803. .nav-section details {
  804. border-radius: 8px;
  805. }
  806. .nav-section details[open] {
  807. background-color: rgba(0, 0, 0, 0.1);
  808. }
  809. .nav-section-header {
  810. display: flex;
  811. align-items: center;
  812. padding: 0.75rem 1rem;
  813. color: white;
  814. cursor: pointer;
  815. user-select: none;
  816. border-radius: 8px;
  817. transition: all 0.2s ease;
  818. font-weight: 500;
  819. }
  820. .nav-section-header::after {
  821. content: '▶';
  822. position: absolute;
  823. right: 1rem;
  824. font-size: 0.7rem;
  825. transition: transform 0.2s ease;
  826. opacity: 0.7;
  827. }
  828. details[open] .nav-section-header::after {
  829. transform: rotate(90deg);
  830. }
  831. .nav-section-header:hover {
  832. background-color: rgba(255, 255, 255, 0.1);
  833. color: white;
  834. }
  835. .nav-section-content {
  836. padding: 0.5rem 0;
  837. }
  838. /* Sous-liens - couleur ivoire */
  839. .sub-link {
  840. padding-left: 3rem;
  841. font-size: 0.9rem;
  842. color: ivory !important;
  843. font-weight: 400;
  844. }
  845. .sub-link:hover {
  846. background-color: rgba(255, 255, 255, 0.08);
  847. color: white !important;
  848. }
  849. .sub-link.active {
  850. background-color: rgba(255, 255, 255, 0.15);
  851. color: white !important;
  852. }
  853. /* Remove default details marker */
  854. details summary::-webkit-details-marker {
  855. display: none;
  856. }
  857. details summary::marker {
  858. display: none;
  859. }
  860. /* Animation pour l'ouverture/fermeture */
  861. details[open] .nav-section-content {
  862. animation: slideDown 0.2s ease-out;
  863. }
  864. @keyframes slideDown {
  865. from {
  866. opacity: 0;
  867. transform: translateY(-10px);
  868. }
  869. to {
  870. opacity: 1;
  871. transform: translateY(0);
  872. }
  873. }
  874. .total-badge {
  875. background-color: #17a2b8;
  876. color: white;
  877. padding: 0.4rem 0.9rem;
  878. border-radius: 20px;
  879. font-size: 0.875rem;
  880. font-weight: 500;
  881. }
  882. .button-container {
  883. display: flex;
  884. gap: 0.75rem;
  885. flex-wrap: wrap;
  886. }
  887. .vision-options {
  888. display: flex;
  889. gap: 2rem;
  890. margin-bottom: 1.5rem;
  891. padding: 1rem;
  892. background-color: white;
  893. border-radius: 8px;
  894. box-shadow: 0 2px 4px rgba(0,0,0,0.08);
  895. }
  896. .vision-checkbox {
  897. display: flex;
  898. align-items: center;
  899. gap: 0.6rem;
  900. cursor: pointer;
  901. font-weight: 500;
  902. color: #2c3e50;
  903. user-select: none;
  904. }
  905. .vision-checkbox input[type="checkbox"] {
  906. width: 20px;
  907. height: 20px;
  908. cursor: pointer;
  909. accent-color: #17a2b8;
  910. }
  911. .vision-checkbox:hover {
  912. color: #17a2b8;
  913. }
  914. .table-container {
  915. background-color: white;
  916. border-radius: 8px;
  917. overflow: hidden;
  918. box-shadow: 0 2px 4px rgba(0,0,0,0.08);
  919. width: 100%;
  920. }
  921. .table-responsive {
  922. overflow-x: auto !important;
  923. overflow-y: visible;
  924. -webkit-overflow-scrolling: touch;
  925. }
  926. /* Scrollbar personnalisée pour le tableau */
  927. .table-responsive::-webkit-scrollbar {
  928. height: 8px;
  929. }
  930. .table-responsive::-webkit-scrollbar-track {
  931. background: #f1f1f1;
  932. border-radius: 4px;
  933. }
  934. .table-responsive::-webkit-scrollbar-thumb {
  935. background: #888;
  936. border-radius: 4px;
  937. }
  938. .table-responsive::-webkit-scrollbar-thumb:hover {
  939. background: #555;
  940. }
  941. .table-modern {
  942. width: 100%;
  943. margin-bottom: 0;
  944. border-collapse: collapse;
  945. min-width: 1100px
  946. }
  947. .table-modern thead {
  948. background-color: #2c3e50;
  949. }
  950. .table-modern thead th {
  951. color: white;
  952. font-weight: 600;
  953. border: none;
  954. vertical-align: middle;
  955. white-space: nowrap;
  956. background-color: #2c3e50;
  957. }
  958. /* Ligne de filtres */
  959. .table-modern .filter-row th {
  960. padding: 0.6rem;
  961. background-color: #2c3e50;
  962. }
  963. /* Ligne d'en-têtes */
  964. .table-modern .header-row th {
  965. padding: 0.9rem 0.70rem;
  966. background-color: #2c3e50;
  967. }
  968. /* Colonnes triables */
  969. .table-modern .sortable {
  970. cursor: pointer;
  971. user-select: none;
  972. transition: background-color 0.2s ease;
  973. }
  974. .table-modern .sortable:hover {
  975. background-color: #34495e;
  976. }
  977. .table-modern .sortable span {
  978. display: inline-block;
  979. }
  980. .table-modern .sort-icon {
  981. margin-left: 0.4rem;
  982. opacity: 0.7;
  983. font-size: 0.85rem;
  984. }
  985. .col-workforce {
  986. width: 15%;
  987. min-width: 70px;
  988. }
  989. .col-type {
  990. width: 12%;
  991. min-width: 100px;
  992. }
  993. .col-status {
  994. width: 10%;
  995. min-width: 90px;
  996. }
  997. .col-date {
  998. width: 10%;
  999. min-width: 100px;
  1000. text-align: center;
  1001. }
  1002. .col-boolean {
  1003. width: 7%;
  1004. min-width: 80px;
  1005. text-align: center;
  1006. }
  1007. .col-actions {
  1008. width: 10%;
  1009. min-width: 110px;
  1010. text-align: center;
  1011. }
  1012. .col-libelle {
  1013. width: 15%;
  1014. min-width: 130px;
  1015. }
  1016. .col-number {
  1017. width: 8%;
  1018. min-width: 70px;
  1019. text-align: center;
  1020. }
  1021. .col-actions-wide {
  1022. width: 12%;
  1023. min-width: 140px;
  1024. text-align: center;
  1025. }
  1026. .col-comment {
  1027. width: 20%;
  1028. min-width: 180px;
  1029. max-width: 400px;
  1030. }
  1031. .col-trigramme {
  1032. min-width: 100px;
  1033. }
  1034. .col-email {
  1035. min-width: 200px;
  1036. }
  1037. .col-libelle-wide {
  1038. min-width: 250px;
  1039. max-width: 400px;
  1040. }
  1041. .table-modern .form-control-sm,
  1042. .table-modern .form-select-sm {
  1043. font-size: 0.85rem;
  1044. padding: 0.4rem 0.6rem;
  1045. border-radius: 4px;
  1046. border: 1px solid rgba(255,255,255,0.3);
  1047. background-color: rgba(255,255,255,0.95);
  1048. transition: all 0.2s ease;
  1049. width: 100%;
  1050. }
  1051. .table-modern .form-control-sm:focus,
  1052. .table-modern .form-select-sm:focus {
  1053. border-color: #17a2b8;
  1054. box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.25);
  1055. outline: none;
  1056. background-color: white;
  1057. }
  1058. .table-modern .form-select-sm {
  1059. cursor: pointer;
  1060. padding-right: 2rem;
  1061. }
  1062. .table-modern tbody tr {
  1063. transition: background-color 0.15s ease;
  1064. border-bottom: 1px solid #e9ecef;
  1065. }
  1066. .table-modern tbody tr:hover {
  1067. background-color: #f8f9fa;
  1068. }
  1069. .table-modern tbody tr:nth-child(even) {
  1070. background-color: #fafbfc;
  1071. }
  1072. .table-modern tbody tr:nth-child(even):hover {
  1073. background-color: #f0f2f5;
  1074. }
  1075. .table-modern tbody td {
  1076. padding: 0.45rem 0.35rem;
  1077. vertical-align: middle;
  1078. color: #495057;
  1079. }
  1080. .badge {
  1081. display: inline-block;
  1082. padding: 0.35rem 0.75rem;
  1083. border-radius: 12px;
  1084. font-size: 0.8rem;
  1085. font-weight: 600;
  1086. letter-spacing: 0.3px;
  1087. }
  1088. .badge-active {
  1089. background-color: #d4edda;
  1090. color: #155724;
  1091. }
  1092. .badge-inactive {
  1093. background-color: #f8d7da;
  1094. color: #721c24;
  1095. }
  1096. .action-buttons {
  1097. display: flex;
  1098. gap: 0.5rem;
  1099. justify-content: center;
  1100. align-items: center;
  1101. }
  1102. .loading-alert {
  1103. display: flex;
  1104. align-items: center;
  1105. justify-content: center;
  1106. gap: 1rem;
  1107. padding: 2rem;
  1108. background-color: white;
  1109. border-radius: 8px;
  1110. box-shadow: 0 2px 4px rgba(0,0,0,0.08);
  1111. color: #17a2b8;
  1112. font-weight: 500;
  1113. font-size: 1.1rem;
  1114. }
  1115. .loading-alert i {
  1116. font-size: 1.5rem;
  1117. animation: spin 2s linear infinite;
  1118. }
  1119. @keyframes spin {
  1120. 0% {
  1121. transform: rotate(0deg);
  1122. }
  1123. 100% {
  1124. transform: rotate(360deg);
  1125. }
  1126. }
  1127. @media (max-width: 1200px) {
  1128. .col-workforce,
  1129. .col-workforce {
  1130. width: 12%;
  1131. }
  1132. }
  1133. @media (max-width: 992px) {
  1134. .page-header {
  1135. flex-direction: column;
  1136. gap: 1rem;
  1137. align-items: flex-start;
  1138. }
  1139. .button-container {
  1140. width: 100%;
  1141. justify-content: flex-start;
  1142. }
  1143. }
  1144. @media (max-width: 768px) {
  1145. .page-container {
  1146. padding: 1rem;
  1147. }
  1148. .page-title {
  1149. font-size: 1.25rem;
  1150. }
  1151. .total-badge {
  1152. font-size: 0.8rem;
  1153. padding: 0.3rem 0.7rem;
  1154. }
  1155. .button-container {
  1156. flex-direction: column;
  1157. width: 100%;
  1158. }
  1159. .btn-action {
  1160. width: 100%;
  1161. justify-content: center;
  1162. }
  1163. .vision-options {
  1164. flex-direction: column;
  1165. gap: 1rem;
  1166. }
  1167. .table-modern {
  1168. font-size: 0.85rem;
  1169. }
  1170. .table-modern tbody td {
  1171. padding: 0.6rem 0.5rem;
  1172. }
  1173. .btn-icon {
  1174. width: 32px;
  1175. height: 32px;
  1176. font-size: 0.85rem;
  1177. }
  1178. }
  1179. .home-container {
  1180. display: flex;
  1181. flex-direction: column;
  1182. height: 100%;
  1183. overflow: hidden;
  1184. }
  1185. .home-content {
  1186. flex: 1;
  1187. display: flex;
  1188. flex-direction: column;
  1189. align-items: center;
  1190. overflow-y: auto;
  1191. max-width: 1400px;
  1192. margin: 0 auto;
  1193. width: 100%;
  1194. padding: 0.5rem;
  1195. }
  1196. .welcome-section {
  1197. text-align: center;
  1198. margin-bottom: 1rem;
  1199. }
  1200. .welcome-title {
  1201. font-size: 3rem;
  1202. font-weight: 600;
  1203. color: var(--text-dark);
  1204. margin-bottom: 0.5rem;
  1205. }
  1206. .welcome-subtitle {
  1207. font-size: 1.5rem;
  1208. color: var(--text-light);
  1209. font-weight: 400;
  1210. margin: 0;
  1211. }
  1212. .input-container {
  1213. width: 100%;
  1214. padding: 16px 24px;
  1215. background: transparent;
  1216. display: flex;
  1217. flex-direction: column;
  1218. justify-content: center;
  1219. position: relative;
  1220. }
  1221. .input-files {
  1222. display: flex;
  1223. flex-wrap: wrap;
  1224. gap: 8px;
  1225. padding: 12px 16px;
  1226. max-width: 1000px;
  1227. margin: 0 auto;
  1228. width: 100%;
  1229. }
  1230. .file-item {
  1231. display: flex;
  1232. align-items: center;
  1233. gap: 8px;
  1234. padding: 8px 12px;
  1235. background: #ffffff;
  1236. border: 1px solid var(--border);
  1237. border-radius: 8px;
  1238. max-width: 32%;
  1239. transition: all 0.2s ease;
  1240. }
  1241. .file-item:hover {
  1242. border-color: #d1d5db;
  1243. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
  1244. }
  1245. .file-info {
  1246. flex: 1;
  1247. min-width: 0;
  1248. display: flex;
  1249. flex-direction: column;
  1250. gap: 2px;
  1251. }
  1252. .file-name {
  1253. font-size: 13px;
  1254. font-weight: 500;
  1255. color: #374151;
  1256. white-space: nowrap;
  1257. overflow: hidden;
  1258. text-overflow: ellipsis;
  1259. }
  1260. .remove-file-button {
  1261. flex-shrink: 0;
  1262. width: 24px;
  1263. height: 24px;
  1264. display: flex;
  1265. align-items: center;
  1266. justify-content: center;
  1267. background: transparent;
  1268. border: none;
  1269. border-radius: 4px;
  1270. color: #9ca3af;
  1271. cursor: pointer;
  1272. transition: all 0.2s ease;
  1273. }
  1274. .remove-file-button:hover {
  1275. background: #ffffff;
  1276. color: #ef4444;
  1277. }
  1278. .input-wrapper {
  1279. width: 100%;
  1280. max-width: 1000px;
  1281. margin: 0 auto;
  1282. background: #ffffff;
  1283. border: 1px solid var(--border);
  1284. border-radius: 16px;
  1285. padding: 16px 20px;
  1286. display: flex;
  1287. flex-direction: column;
  1288. gap: 12px;
  1289. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
  1290. transition: all 0.2s ease;
  1291. }
  1292. .input-wrapper.has-files {
  1293. border-radius: 0 0 16px 16px;
  1294. border-top: none;
  1295. padding-top: 12px;
  1296. }
  1297. .input-wrapper:focus-within {
  1298. border-color: var(--secondary);
  1299. box-shadow: 0 4px 12px rgba(41, 132, 161, 0.12);
  1300. }
  1301. .input-wrapper textarea {
  1302. width: 100%;
  1303. border: none;
  1304. outline: none;
  1305. resize: none;
  1306. font-size: 15px;
  1307. font-family: inherit;
  1308. color: var(--text-dark);
  1309. background: transparent;
  1310. min-height: 24px;
  1311. max-height: 200px;
  1312. line-height: 1.5;
  1313. padding: 0;
  1314. }
  1315. .input-wrapper textarea::placeholder {
  1316. color: #9ca3af;
  1317. }
  1318. .input-wrapper textarea:disabled {
  1319. opacity: 0.6;
  1320. cursor: not-allowed;
  1321. }
  1322. .input-actions {
  1323. display: flex;
  1324. justify-content: space-between;
  1325. align-items: center;
  1326. padding-top: 4px;
  1327. }
  1328. .attach-button {
  1329. display: flex;
  1330. align-items: center;
  1331. gap: 8px;
  1332. padding: 0;
  1333. background: transparent;
  1334. border: none;
  1335. color: #6b7280;
  1336. cursor: pointer;
  1337. font-size: 13px;
  1338. font-weight: 500;
  1339. transition: color 0.2s ease;
  1340. }
  1341. .attach-button:hover {
  1342. color: var(--secondary);
  1343. }
  1344. .attach-button span {
  1345. display: none;
  1346. }
  1347. @media (min-width: 640px) {
  1348. .attach-button span {
  1349. display: inline;
  1350. }
  1351. }
  1352. .input-right-actions {
  1353. display: flex;
  1354. align-items: center;
  1355. gap: 8px;
  1356. }
  1357. .history-button {
  1358. display: flex;
  1359. align-items: center;
  1360. justify-content: center;
  1361. width: 36px;
  1362. height: 36px;
  1363. background: transparent;
  1364. border: none;
  1365. color: #6b7280;
  1366. cursor: pointer;
  1367. border-radius: 8px;
  1368. transition: all 0.2s ease;
  1369. }
  1370. .history-button:hover {
  1371. background: #f3f4f6;
  1372. color: var(--text-dark);
  1373. }
  1374. .active {
  1375. transform:scale(1.05);
  1376. background-color:var(--main-color);
  1377. color:white;
  1378. }
  1379. .desactive {
  1380. transform: scale(0.95);
  1381. }
  1382. .voice-button {
  1383. display: flex;
  1384. align-items: center;
  1385. justify-content: center;
  1386. width: 36px;
  1387. height: 36px;
  1388. background: transparent;
  1389. border: none;
  1390. color: #6b7280;
  1391. cursor: pointer;
  1392. border-radius: 8px;
  1393. transition: all 0.2s ease;
  1394. }
  1395. .voice-button:hover {
  1396. background: #f3f4f6;
  1397. color: var(--text-dark);
  1398. }
  1399. .send-button {
  1400. display: flex;
  1401. align-items: center;
  1402. justify-content: center;
  1403. width: 36px;
  1404. height: 36px;
  1405. background: var( --contrast);
  1406. border: none;
  1407. color: #ffffff;
  1408. cursor: pointer;
  1409. border-radius: 8px;
  1410. transition: all 0.2s ease;
  1411. }
  1412. .send-button:hover:not(:disabled) {
  1413. transform: scale(1.05);
  1414. box-shadow: 0 4px 12px rgba(246, 62, 99, 0.3);
  1415. }
  1416. .send-button:active:not(:disabled) {
  1417. transform: scale(0.98);
  1418. }
  1419. .send-button:disabled {
  1420. background: #e5e7eb;
  1421. cursor: not-allowed;
  1422. opacity: 0.6;
  1423. }
  1424. .send-button:disabled svg {
  1425. color: #9ca3af;
  1426. }
  1427. .agents-grid {
  1428. display: grid;
  1429. grid-template-columns: repeat(auto-fit, minmax(480px, 1fr));
  1430. gap: 1.5rem;
  1431. width: 100%;
  1432. max-width: 1200px;
  1433. }
  1434. .agent-card {
  1435. display: flex;
  1436. flex-direction: row;
  1437. gap: 16px;
  1438. padding: 20px 20px 30px 20px;
  1439. background: #ffffff;
  1440. border: 1px solid var(--border);
  1441. border-radius: 12px;
  1442. cursor: pointer;
  1443. transition: all 0.2s ease;
  1444. min-height: 100px;
  1445. align-items: flex-start;
  1446. }
  1447. .agent-card:hover {
  1448. border-color: var(--secondary);
  1449. box-shadow: 0 4px 12px rgba(41, 132, 161, 0.1);
  1450. transform: translateY(-2px);
  1451. }
  1452. .agent-card:hover .agent-icon {
  1453. background-color: #ecf9ff;
  1454. transform: scale(1.05);
  1455. }
  1456. .agent-card:active {
  1457. transform: translateY(0);
  1458. }
  1459. .agent-icon {
  1460. flex-shrink: 0;
  1461. width: 48px;
  1462. height: 48px;
  1463. border-radius: 10px;
  1464. background-color: #ecf9ff;
  1465. display: flex;
  1466. align-items: center;
  1467. justify-content: center;
  1468. transition: all 0.2s ease;
  1469. color: var( --third-color);
  1470. }
  1471. .agent-content {
  1472. flex: 1;
  1473. display: flex;
  1474. flex-direction: column;
  1475. gap: 8px;
  1476. min-width: 0;
  1477. }
  1478. .agent-name {
  1479. margin: 0;
  1480. font-size: 16px;
  1481. font-weight: 600;
  1482. color: #1f2937;
  1483. line-height: 1.4;
  1484. }
  1485. .agent-description {
  1486. margin: 0;
  1487. font-size: 14px;
  1488. font-weight: 400;
  1489. color: #6b7280;
  1490. line-height: 1.5;
  1491. display: -webkit-box;
  1492. -webkit-line-clamp: 2;
  1493. -webkit-box-orient: vertical;
  1494. overflow: hidden;
  1495. }
  1496. .home-content::-webkit-scrollbar {
  1497. width: 8px;
  1498. }
  1499. .home-content::-webkit-scrollbar-track {
  1500. background: transparent;
  1501. }
  1502. .home-content::-webkit-scrollbar-thumb {
  1503. background: var(--secondary);
  1504. border-radius: 4px;
  1505. }
  1506. .home-content::-webkit-scrollbar-thumb:hover {
  1507. background: var( --third-color);
  1508. }
  1509. @media (max-width: 768px) {
  1510. .welcome-title {
  1511. font-size: 2rem;
  1512. }
  1513. .welcome-subtitle {
  1514. font-size: 1.2rem;
  1515. }
  1516. .agents-grid {
  1517. grid-template-columns: 1fr;
  1518. }
  1519. .home-content {
  1520. padding: 1rem;
  1521. }
  1522. .input-container {
  1523. padding: 12px 16px;
  1524. }
  1525. .input-files {
  1526. padding: 10px 12px;
  1527. gap: 6px;
  1528. }
  1529. .file-item {
  1530. padding: 6px 10px;
  1531. max-width: 200px;
  1532. }
  1533. .input-wrapper {
  1534. padding: 12px 16px;
  1535. border-radius: 14px;
  1536. }
  1537. .input-wrapper.has-files {
  1538. border-radius: 0 0 14px 14px;
  1539. }
  1540. .input-wrapper textarea {
  1541. font-size: 14px;
  1542. }
  1543. .input-right-actions .voice-button,
  1544. .input-right-actions .send-button {
  1545. width: 32px;
  1546. height: 32px;
  1547. }
  1548. .agent-card {
  1549. padding: 16px;
  1550. }
  1551. .agent-icon {
  1552. width: 40px;
  1553. height: 40px;
  1554. }
  1555. .agent-name {
  1556. font-size: 15px;
  1557. }
  1558. .agent-description {
  1559. font-size: 13px;
  1560. }
  1561. }
  1562. @media (max-width: 480px) {
  1563. .welcome-title {
  1564. font-size: 1.75rem;
  1565. }
  1566. .welcome-subtitle {
  1567. font-size: 1rem;
  1568. }
  1569. .input-container {
  1570. padding: 1rem;
  1571. }
  1572. }
  1573. @keyframes fileSlideIn {
  1574. from {
  1575. opacity: 0;
  1576. transform: translateY(-10px);
  1577. }
  1578. to {
  1579. opacity: 1;
  1580. transform: translateY(0);
  1581. }
  1582. }
  1583. .file-item {
  1584. animation: fileSlideIn 0.3s ease;
  1585. }
  1586. .chatroom-container {
  1587. display: flex;
  1588. flex-direction: column;
  1589. height: 100%;
  1590. }
  1591. .chatroom-messages {
  1592. flex: 1;
  1593. overflow-y: auto;
  1594. padding: 2rem;
  1595. display: flex;
  1596. flex-direction: column;
  1597. gap: 1.5rem;
  1598. }
  1599. .chatroom-messages::-webkit-scrollbar {
  1600. width: 8px;
  1601. }
  1602. .chatroom-messages::-webkit-scrollbar-track {
  1603. background: transparent;
  1604. }
  1605. .chatroom-messages::-webkit-scrollbar-thumb {
  1606. background: var(--secondary);
  1607. border-radius: 4px;
  1608. }
  1609. .chatroom-messages::-webkit-scrollbar-thumb:hover {
  1610. background: var( --third-color);
  1611. }
  1612. .chatroom-empty {
  1613. display: flex;
  1614. flex-direction: column;
  1615. align-items: center;
  1616. justify-content: center;
  1617. height: 100%;
  1618. color: var(--text-light);
  1619. text-align: center;
  1620. }
  1621. .empty-icon {
  1622. font-size: 4rem;
  1623. color: var(--secondary);
  1624. margin-bottom: 1rem;
  1625. opacity: 0.5;
  1626. }
  1627. .chatroom-empty h3 {
  1628. font-size: 1.5rem;
  1629. color: var(--text-dark);
  1630. margin-bottom: 0.5rem;
  1631. }
  1632. .chatroom-empty p {
  1633. font-size: 1rem;
  1634. margin: 0;
  1635. }
  1636. /* Messages */
  1637. .message-row {
  1638. display: flex;
  1639. align-items: flex-start;
  1640. gap: 0.75rem;
  1641. animation: fadeIn 0.3s ease;
  1642. }
  1643. @keyframes fadeIn {
  1644. from {
  1645. opacity: 0;
  1646. transform: translateY(10px);
  1647. }
  1648. to {
  1649. opacity: 1;
  1650. transform: translateY(0);
  1651. }
  1652. }
  1653. .message-row.user {
  1654. flex-direction: row-reverse;
  1655. justify-content: flex-start;
  1656. }
  1657. .message-row.assistant {
  1658. flex-direction: row;
  1659. justify-content: flex-start;
  1660. }
  1661. .avatar {
  1662. width: 40px;
  1663. height: 40px;
  1664. border-radius: 50%;
  1665. display: flex;
  1666. align-items: center;
  1667. justify-content: center;
  1668. flex-shrink: 0;
  1669. }
  1670. .avatar-user {
  1671. background: linear-gradient(135deg, var(--secondary) 0%, var( --third-color) 100%);
  1672. color: white;
  1673. }
  1674. .avatar-assistant {
  1675. background: linear-gradient(135deg, var( --contrast) 0%, #e02851 100%);
  1676. color: white;
  1677. }
  1678. .message-content-wrapper {
  1679. display: flex;
  1680. flex-direction: column;
  1681. max-width: 70%;
  1682. gap: 0.5rem;
  1683. }
  1684. .message-row.user .message-content-wrapper {
  1685. align-items: flex-end;
  1686. }
  1687. .message-row.assistant .message-content-wrapper {
  1688. align-items: flex-start;
  1689. }
  1690. .bubble {
  1691. padding: 1rem 1.25rem;
  1692. border-radius: 16px;
  1693. font-size: 1rem;
  1694. line-height: 1.6;
  1695. word-wrap: break-word;
  1696. white-space: pre-wrap;
  1697. }
  1698. .bubble-user {
  1699. background: linear-gradient(135deg, var(--secondary) 0%, var( --third-color) 100%);
  1700. color: white;
  1701. border-bottom-right-radius: 4px;
  1702. }
  1703. .bubble-assistant {
  1704. background: white;
  1705. color: var(--text-dark);
  1706. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  1707. border-bottom-left-radius: 4px;
  1708. }
  1709. .message-actions {
  1710. display: flex;
  1711. gap: 0.5rem;
  1712. }
  1713. .btn-message-action {
  1714. width: 32px;
  1715. height: 32px;
  1716. border-radius: 6px;
  1717. border: none;
  1718. background: transparent;
  1719. color: var(--text-light);
  1720. cursor: pointer;
  1721. display: flex;
  1722. align-items: center;
  1723. justify-content: center;
  1724. transition: all 0.2s ease;
  1725. }
  1726. .btn-message-action:hover {
  1727. background: var(--bg-light);
  1728. color: var( --third-color);
  1729. }
  1730. .typing-indicator {
  1731. display: flex;
  1732. gap: 0.4rem;
  1733. padding: 0.5rem 0;
  1734. }
  1735. .typing-indicator span {
  1736. width: 8px;
  1737. height: 8px;
  1738. border-radius: 50%;
  1739. background-color: var(--secondary);
  1740. animation: typing 1.4s infinite;
  1741. }
  1742. .typing-indicator span:nth-child(2) {
  1743. animation-delay: 0.2s;
  1744. }
  1745. .typing-indicator span:nth-child(3) {
  1746. animation-delay: 0.4s;
  1747. }
  1748. @keyframes typing {
  1749. 0%, 60%, 100% {
  1750. transform: translateY(0);
  1751. opacity: 0.7;
  1752. }
  1753. 30% {
  1754. transform: translateY(-10px);
  1755. opacity: 1;
  1756. }
  1757. }
  1758. .chat-input-container {
  1759. width: 100%;
  1760. padding: 16px 24px;
  1761. background: transparent;
  1762. display: flex;
  1763. flex-direction: column;
  1764. justify-content: center;
  1765. position: fixed;
  1766. }
  1767. /* Fichiers attachés */
  1768. .attached-files {
  1769. display: flex;
  1770. flex-wrap: wrap;
  1771. gap: 8px;
  1772. padding: 12px 16px;
  1773. max-width: 1000px;
  1774. margin: 0 auto;
  1775. width: 100%;
  1776. }
  1777. .file-item {
  1778. display: flex;
  1779. align-items: center;
  1780. gap: 8px;
  1781. padding: 8px 12px;
  1782. background: #ffffff;
  1783. border: 1px solid var(--border);
  1784. border-radius: 8px;
  1785. max-width: 32%;
  1786. transition: all 0.2s ease;
  1787. animation: fileSlideIn 0.3s ease;
  1788. }
  1789. .file-item:hover {
  1790. border-color: #d1d5db;
  1791. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
  1792. }
  1793. .file-preview {
  1794. flex-shrink: 0;
  1795. width: 40px;
  1796. height: 40px;
  1797. border-radius: 6px;
  1798. overflow: hidden;
  1799. background: #ffffff;
  1800. display: flex;
  1801. align-items: center;
  1802. justify-content: center;
  1803. border: 1px solid var(--border);
  1804. }
  1805. .file-icon {
  1806. font-size: 20px;
  1807. color: var(--secondary);
  1808. }
  1809. .file-info {
  1810. flex: 1;
  1811. min-width: 0;
  1812. display: flex;
  1813. flex-direction: column;
  1814. gap: 2px;
  1815. }
  1816. .file-name {
  1817. font-size: 13px;
  1818. font-weight: 500;
  1819. color: #374151;
  1820. white-space: nowrap;
  1821. overflow: hidden;
  1822. text-overflow: ellipsis;
  1823. }
  1824. .file-size {
  1825. font-size: 11px;
  1826. color: #9ca3af;
  1827. }
  1828. .remove-file-button {
  1829. flex-shrink: 0;
  1830. width: 24px;
  1831. height: 24px;
  1832. display: flex;
  1833. align-items: center;
  1834. justify-content: center;
  1835. background: transparent;
  1836. border: none;
  1837. border-radius: 4px;
  1838. color: #9ca3af;
  1839. cursor: pointer;
  1840. transition: all 0.2s ease;
  1841. }
  1842. .remove-file-button:hover {
  1843. background: #fee2e2;
  1844. color: #ef4444;
  1845. }
  1846. @keyframes fileSlideIn {
  1847. from {
  1848. opacity: 0;
  1849. transform: translateY(-10px);
  1850. }
  1851. to {
  1852. opacity: 1;
  1853. transform: translateY(0);
  1854. }
  1855. }
  1856. /* Input wrapper */
  1857. .input-wrapper {
  1858. width: 100%;
  1859. max-width: 1000px;
  1860. margin: 0 auto;
  1861. background: #ffffff;
  1862. border: 1px solid var(--border);
  1863. border-radius: 16px;
  1864. padding: 16px 20px;
  1865. display: flex;
  1866. flex-direction: column;
  1867. gap: 12px;
  1868. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
  1869. transition: all 0.2s ease;
  1870. }
  1871. .input-wrapper.has-files {
  1872. border-radius: 0 0 16px 16px;
  1873. border-top: none;
  1874. padding-top: 12px;
  1875. }
  1876. .input-wrapper:focus-within {
  1877. border-color: var(--secondary);
  1878. box-shadow: 0 4px 12px rgba(41, 132, 161, 0.12);
  1879. }
  1880. .input-wrapper textarea {
  1881. width: 100%;
  1882. border: none;
  1883. outline: none;
  1884. resize: none;
  1885. font-size: 15px;
  1886. font-family: inherit;
  1887. color: #1f2937;
  1888. background: transparent;
  1889. min-height: 24px;
  1890. max-height: 200px;
  1891. line-height: 1.5;
  1892. padding: 0;
  1893. }
  1894. .input-wrapper textarea::placeholder {
  1895. color: #9ca3af;
  1896. }
  1897. .input-wrapper textarea:disabled {
  1898. opacity: 0.6;
  1899. cursor: not-allowed;
  1900. }
  1901. /* Actions row */
  1902. .actions-row {
  1903. display: flex;
  1904. justify-content: space-between;
  1905. align-items: center;
  1906. padding-top: 4px;
  1907. }
  1908. .attach-button {
  1909. display: flex;
  1910. align-items: center;
  1911. gap: 8px;
  1912. padding: 0;
  1913. background: transparent;
  1914. border: none;
  1915. color: #6b7280;
  1916. cursor: pointer;
  1917. font-size: 13px;
  1918. font-weight: 500;
  1919. transition: color 0.2s ease;
  1920. }
  1921. .attach-button:hover {
  1922. color: var(--secondary);
  1923. }
  1924. .attach-button span {
  1925. display: none;
  1926. }
  1927. @media (min-width: 640px) {
  1928. .attach-button span {
  1929. display: inline;
  1930. }
  1931. }
  1932. .right-actions {
  1933. display: flex;
  1934. align-items: center;
  1935. gap: 8px;
  1936. }
  1937. .domain-select {
  1938. padding: 6px 12px;
  1939. border: 1px solid var(--border);
  1940. border-radius: 8px;
  1941. background: white;
  1942. color: var(--text-dark);
  1943. font-size: 13px;
  1944. cursor: pointer;
  1945. transition: all 0.2s ease;
  1946. }
  1947. .domain-select:hover {
  1948. border-color: var(--secondary);
  1949. }
  1950. .domain-select:focus {
  1951. outline: none;
  1952. border-color: var(--secondary);
  1953. box-shadow: 0 0 0 3px rgba(41, 132, 161, 0.1);
  1954. }
  1955. .voice-button {
  1956. display: flex;
  1957. align-items: center;
  1958. justify-content: center;
  1959. width: 36px;
  1960. height: 36px;
  1961. background: transparent;
  1962. border: none;
  1963. color: #6b7280;
  1964. cursor: pointer;
  1965. border-radius: 8px;
  1966. transition: all 0.2s ease;
  1967. }
  1968. .voice-button:hover {
  1969. background: #f3f4f6;
  1970. color: var(--text-dark);
  1971. }
  1972. .send-button {
  1973. display: flex;
  1974. align-items: center;
  1975. justify-content: center;
  1976. width: 36px;
  1977. height: 36px;
  1978. background: var( --contrast);
  1979. border: none;
  1980. color: #ffffff;
  1981. cursor: pointer;
  1982. border-radius: 8px;
  1983. transition: all 0.2s ease;
  1984. }
  1985. .send-button:hover:not(:disabled) {
  1986. transform: scale(1.05);
  1987. box-shadow: 0 4px 12px rgba(246, 62, 99, 0.3);
  1988. }
  1989. .send-button:active:not(:disabled) {
  1990. transform: scale(0.98);
  1991. }
  1992. .send-button:disabled {
  1993. background: #e5e7eb;
  1994. cursor: not-allowed;
  1995. opacity: 0.6;
  1996. }
  1997. .send-button:disabled svg {
  1998. color: #9ca3af;
  1999. }
  2000. @media (max-width: 768px) {
  2001. .chatroom-messages {
  2002. padding: 1rem;
  2003. }
  2004. .message-content-wrapper {
  2005. max-width: 85%;
  2006. }
  2007. .chat-input-container {
  2008. padding: 12px 16px;
  2009. }
  2010. .attached-files {
  2011. padding: 10px 12px;
  2012. gap: 6px;
  2013. }
  2014. .file-item {
  2015. padding: 6px 10px;
  2016. max-width: 200px;
  2017. }
  2018. .file-preview {
  2019. width: 36px;
  2020. height: 36px;
  2021. }
  2022. .file-name {
  2023. font-size: 12px;
  2024. }
  2025. .file-size {
  2026. font-size: 10px;
  2027. }
  2028. .remove-file-button {
  2029. width: 20px;
  2030. height: 20px;
  2031. }
  2032. .input-wrapper {
  2033. padding: 12px 16px;
  2034. border-radius: 14px;
  2035. }
  2036. .input-wrapper.has-files {
  2037. border-radius: 0 0 14px 14px;
  2038. }
  2039. .input-wrapper textarea {
  2040. font-size: 14px;
  2041. }
  2042. .actions-row .right-actions {
  2043. gap: 6px;
  2044. }
  2045. .voice-button,
  2046. .send-button {
  2047. width: 32px;
  2048. height: 32px;
  2049. }
  2050. .domain-select {
  2051. font-size: 12px;
  2052. padding: 4px 8px;
  2053. }
  2054. }
  2055. @media (max-width: 480px) {
  2056. .bubble {
  2057. padding: 0.875rem 1rem;
  2058. font-size: 0.95rem;
  2059. }
  2060. .avatar {
  2061. width: 36px;
  2062. height: 36px;
  2063. }
  2064. }
  2065. .sidebar {
  2066. width: 280px;
  2067. height: 100%;
  2068. background: #243b5d;
  2069. color: #ffffff;
  2070. display: flex;
  2071. flex-direction: column;
  2072. transition: width 0.3s ease;
  2073. position: relative;
  2074. overflow-x: hidden;
  2075. overflow-y: auto;
  2076. }
  2077. .sidebar.collapsed {
  2078. width: 64px;
  2079. }
  2080. .sidebar.collapsed .sidebar-section {
  2081. margin-bottom: 8px;
  2082. }
  2083. .sidebar-header {
  2084. display: flex;
  2085. justify-content: space-between;
  2086. align-items: center;
  2087. padding: 12px 16px;
  2088. min-height: 56px;
  2089. flex-shrink: 0;
  2090. gap: 12px;
  2091. }
  2092. .home-button {
  2093. display: flex;
  2094. align-items: center;
  2095. gap: 12px;
  2096. padding: 10px 16px;
  2097. background: transparent;
  2098. border: 1px solid rgba(255, 255, 255, 0.2);
  2099. border-radius: 8px;
  2100. color: #ffffff;
  2101. cursor: pointer;
  2102. font-size: 14px;
  2103. font-weight: 500;
  2104. transition: all 0.2s ease;
  2105. flex: 1;
  2106. }
  2107. .home-button:hover {
  2108. background-color: rgba(255, 255, 255, 0.1);
  2109. border-color: rgba(255, 255, 255, 0.3);
  2110. }
  2111. .home-button-collapsed {
  2112. display: flex;
  2113. align-items: center;
  2114. justify-content: center;
  2115. padding: 10px;
  2116. background: transparent;
  2117. border: 1px solid rgba(255, 255, 255, 0.2);
  2118. border-radius: 8px;
  2119. color: #ffffff;
  2120. cursor: pointer;
  2121. transition: all 0.2s ease;
  2122. }
  2123. .home-button-collapsed:hover {
  2124. background-color: rgba(255, 255, 255, 0.1);
  2125. border-color: rgba(255, 255, 255, 0.3);
  2126. }
  2127. .toggle-button {
  2128. background: transparent;
  2129. border: none;
  2130. color: #ffffff;
  2131. cursor: pointer;
  2132. padding: 8px;
  2133. border-radius: 4px;
  2134. display: flex;
  2135. align-items: center;
  2136. justify-content: center;
  2137. transition: background-color 0.2s ease;
  2138. flex-shrink: 0;
  2139. }
  2140. .toggle-button:hover {
  2141. background-color: rgba(255, 255, 255, 0.1);
  2142. }
  2143. .nav-item {
  2144. margin: 8px 16px;
  2145. }
  2146. .nav-link {
  2147. display: flex;
  2148. align-items: center;
  2149. gap: 12px;
  2150. padding: 12px 16px;
  2151. border-radius: 8px;
  2152. color: #ffffff;
  2153. text-decoration: none;
  2154. font-size: 14px;
  2155. font-weight: 500;
  2156. transition: all 0.2s ease;
  2157. }
  2158. .nav-link:hover {
  2159. background-color: rgba(255, 255, 255, 0.1);
  2160. }
  2161. .nav-link.active {
  2162. background-color: rgba(52, 152, 219, 0.3);
  2163. border-left: 3px solid #3498db;
  2164. font-weight: 600;
  2165. }
  2166. .nav-icon {
  2167. font-size: 18px;
  2168. }
  2169. .icon {
  2170. font-size: 18px;
  2171. }
  2172. .sidebar-section {
  2173. margin-bottom: 16px;
  2174. max-height: 45vh;
  2175. overflow: hidden;
  2176. }
  2177. .section-title {
  2178. font-size: 11px;
  2179. font-weight: 600;
  2180. text-transform: uppercase;
  2181. color: rgba(255, 255, 255, 0.5);
  2182. padding: 0 16px;
  2183. margin: 0 0 8px 0;
  2184. letter-spacing: 0.5px;
  2185. }
  2186. .section-header {
  2187. display: flex;
  2188. align-items: center;
  2189. justify-content: space-between;
  2190. padding: 0 16px;
  2191. cursor: pointer;
  2192. transition: background-color 0.2s ease;
  2193. }
  2194. .section-header:hover {
  2195. background-color: rgba(255, 255, 255, 0.05);
  2196. }
  2197. .section-header .section-title {
  2198. margin: 0;
  2199. padding: 8px 0;
  2200. flex: 1;
  2201. }
  2202. .section-header .expand-icon {
  2203. font-size: 12px;
  2204. color: rgba(255, 255, 255, 0.5);
  2205. }
  2206. .sidebar-icon-button {
  2207. width: 100%;
  2208. display: flex;
  2209. justify-content: center;
  2210. align-items: center;
  2211. padding: 14px 0;
  2212. background: transparent;
  2213. border: none;
  2214. color: rgba(255, 255, 255, 0.7);
  2215. cursor: pointer;
  2216. transition: all 0.2s ease;
  2217. position: relative;
  2218. }
  2219. .sidebar-icon-button::before {
  2220. content: '';
  2221. position: absolute;
  2222. left: 0;
  2223. top: 50%;
  2224. transform: translateY(-50%);
  2225. width: 3px;
  2226. height: 0;
  2227. background: #3498db;
  2228. transition: height 0.2s ease;
  2229. }
  2230. .sidebar-icon-button:hover {
  2231. background-color: rgba(255, 255, 255, 0.05);
  2232. color: #ffffff;
  2233. }
  2234. .sidebar-icon-button:hover::before {
  2235. height: 60%;
  2236. }
  2237. .new-chat-button {
  2238. display: flex;
  2239. align-items: center;
  2240. gap: 12px;
  2241. padding: 6px 16px;
  2242. margin: 8px;
  2243. background: #2984a1;
  2244. border: none;
  2245. border-radius: 8px;
  2246. color: #ffffff;
  2247. cursor: pointer;
  2248. font-size: 12px;
  2249. font-weight: 400;
  2250. transition: all 0.2s ease;
  2251. }
  2252. .new-chat-button:hover {
  2253. transform: translateY(-2px);
  2254. box-shadow: 0 4px 12px rgba(52, 152, 219, 0.4);
  2255. }
  2256. .conversations-section {
  2257. max-height: calc(45vh - 60px);
  2258. overflow-y: auto;
  2259. padding: 0 8px;
  2260. }
  2261. .conversations-section::-webkit-scrollbar {
  2262. width: 4px;
  2263. }
  2264. .conversations-section::-webkit-scrollbar-track {
  2265. background: rgba(255, 255, 255, 0.05);
  2266. border-radius: 2px;
  2267. }
  2268. .conversations-section::-webkit-scrollbar-thumb {
  2269. background: rgba(255, 255, 255, 0.2);
  2270. border-radius: 2px;
  2271. }
  2272. .conversations-section::-webkit-scrollbar-thumb:hover {
  2273. background: rgba(255, 255, 255, 0.3);
  2274. }
  2275. .conversations-list {
  2276. display: flex;
  2277. flex-direction: column;
  2278. gap: 4px;
  2279. }
  2280. .conversation-item {
  2281. padding: 10px 12px;
  2282. border-radius: 6px;
  2283. cursor: pointer;
  2284. transition: all 0.2s ease;
  2285. display: flex;
  2286. align-items: center;
  2287. gap: 10px;
  2288. }
  2289. .conversation-item:hover {
  2290. background-color: rgba(255, 255, 255, 0.1);
  2291. }
  2292. .conversation-item.active {
  2293. background-color: rgba(52, 152, 219, 0.3);
  2294. border-left: 3px solid #3498db;
  2295. }
  2296. .conversation-item.sub-item {
  2297. margin-left: 20px;
  2298. padding: 8px 12px;
  2299. font-size: 13px;
  2300. }
  2301. .conversation-icon {
  2302. font-size: 14px;
  2303. color: rgba(255, 255, 255, 0.7);
  2304. flex-shrink: 0;
  2305. }
  2306. .conversation-title {
  2307. white-space: nowrap;
  2308. overflow: hidden;
  2309. text-overflow: ellipsis;
  2310. font-size: 12px;
  2311. flex: 1;
  2312. }
  2313. .projects-section {
  2314. max-height: calc(45vh - 60px); /* Augmenté de 30vh à 45vh */
  2315. overflow-y: auto;
  2316. padding: 0 8px;
  2317. }
  2318. .projects-section::-webkit-scrollbar {
  2319. width: 4px;
  2320. }
  2321. .projects-section::-webkit-scrollbar-track {
  2322. background: rgba(255, 255, 255, 0.05);
  2323. border-radius: 2px;
  2324. }
  2325. .projects-section::-webkit-scrollbar-thumb {
  2326. background: rgba(255, 255, 255, 0.2);
  2327. border-radius: 2px;
  2328. }
  2329. .projects-section::-webkit-scrollbar-thumb:hover {
  2330. background: rgba(255, 255, 255, 0.3);
  2331. }
  2332. .projects-list {
  2333. display: flex;
  2334. flex-direction: column;
  2335. gap: 4px;
  2336. }
  2337. .project-wrapper {
  2338. margin-bottom: 4px;
  2339. }
  2340. .project-item {
  2341. display: flex;
  2342. align-items: center;
  2343. gap: 10px;
  2344. padding: 10px 12px;
  2345. border-radius: 6px;
  2346. cursor: pointer;
  2347. transition: all 0.2s ease;
  2348. }
  2349. .project-item:hover {
  2350. background-color: rgba(255, 255, 255, 0.1);
  2351. }
  2352. .project-icon {
  2353. font-size: 16px;
  2354. color: rgba(255, 255, 255, 0.7);
  2355. }
  2356. .project-name {
  2357. flex: 1;
  2358. white-space: nowrap;
  2359. overflow: hidden;
  2360. text-overflow: ellipsis;
  2361. font-size: 14px;
  2362. font-weight: 500;
  2363. }
  2364. .expand-icon {
  2365. font-size: 12px;
  2366. color: rgba(255, 255, 255, 0.5);
  2367. }
  2368. .project-conversations {
  2369. margin-top: 4px;
  2370. display: flex;
  2371. flex-direction: column;
  2372. gap: 2px;
  2373. }
  2374. .project-empty {
  2375. padding: 8px 12px 8px 42px;
  2376. font-size: 13px;
  2377. color: rgba(255, 255, 255, 0.5);
  2378. font-style: italic;
  2379. }
  2380. .emails-section {
  2381. padding: 0 8px;
  2382. }
  2383. .emails-list {
  2384. display: flex;
  2385. flex-direction: column;
  2386. gap: 4px;
  2387. }
  2388. .emails-list .nav-link {
  2389. padding: 10px 12px;
  2390. margin: 0;
  2391. }
  2392. .loading,
  2393. .empty-state {
  2394. padding: 12px;
  2395. text-align: center;
  2396. font-size: 13px;
  2397. color: rgba(255, 255, 255, 0.5);
  2398. font-style: italic;
  2399. }
  2400. .loading {
  2401. display: flex;
  2402. align-items: center;
  2403. justify-content: center;
  2404. gap: 8px;
  2405. }
  2406. .loading::before {
  2407. content: '';
  2408. width: 16px;
  2409. height: 16px;
  2410. border: 2px solid rgba(255, 255, 255, 0.2);
  2411. border-top-color: rgba(255, 255, 255, 0.6);
  2412. border-radius: 50%;
  2413. animation: spin 0.8s linear infinite;
  2414. }
  2415. @keyframes spin {
  2416. to {
  2417. transform: rotate(360deg);
  2418. }
  2419. }
  2420. .sidebar-footer {
  2421. margin-top: auto;
  2422. padding: 16px;
  2423. border-top: 1px solid rgba(255, 255, 255, 0.1);
  2424. display: flex;
  2425. justify-content: center;
  2426. gap: 12px;
  2427. flex-shrink: 0;
  2428. }
  2429. .sidebar-footer-collapsed {
  2430. margin-top: auto;
  2431. padding: 16px;
  2432. border-top: 1px solid rgba(255, 255, 255, 0.1);
  2433. display: flex;
  2434. flex-direction: column;
  2435. gap: 8px;
  2436. flex-shrink: 0;
  2437. }
  2438. .footer-button {
  2439. background: transparent;
  2440. border: none;
  2441. color: rgba(255, 255, 255, 0.6);
  2442. cursor: pointer;
  2443. padding: 10px;
  2444. border-radius: 6px;
  2445. display: flex;
  2446. align-items: center;
  2447. justify-content: center;
  2448. gap: 8px;
  2449. transition: all 0.2s ease;
  2450. font-size: 14px;
  2451. }
  2452. .footer-button:hover {
  2453. background-color: rgba(255, 255, 255, 0.1);
  2454. color: #ffffff;
  2455. }
  2456. .footer-button span:not(.icon) {
  2457. font-weight: 500;
  2458. }
  2459. @media (max-width: 768px) {
  2460. .sidebar {
  2461. width: 64px;
  2462. }
  2463. .sidebar.collapsed {
  2464. width: 0;
  2465. }
  2466. }
  2467. @keyframes fadeIn {
  2468. from {
  2469. opacity: 0;
  2470. transform: translateY(10px);
  2471. }
  2472. to {
  2473. opacity: 1;
  2474. transform: translateY(0);
  2475. }
  2476. }
  2477. .conversation-item,
  2478. .project-item {
  2479. animation: fadeIn 0.3s ease;
  2480. }
  2481. .footer {
  2482. padding: 1rem;
  2483. background-color: #e9ecef;
  2484. border-top: 1px solid #dee2e6;
  2485. text-align: center;
  2486. flex-shrink: 0;
  2487. }
  2488. .footer p {
  2489. margin: 0;
  2490. color: #6c757d;
  2491. }