style.css 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946
  1. :root {
  2. --background-primary: #f9f9f9;
  3. --background-secondary: #fff;
  4. --background-tertiary: #ddd;
  5. --background-accent: rgba(74, 144, 226, 0.75);
  6. --background-info: var(--background-accent);
  7. --background-success: rgba(76, 175, 80, 0.8);
  8. --background-warning: rgba(255, 152, 0, 0.8);
  9. --background-error: rgba(229, 57, 53, 0.8);
  10. --theme-primary: #6A9AD9;
  11. --theme-primary-hover: #A0CCF2;
  12. --theme-secondary: #C4B4A0;
  13. --theme-secondary-hover: #4E453F;
  14. --color-info: var(--theme-primary);
  15. --color-success: #4CAF50CC;
  16. --color-warning: #FF9800CC;
  17. --color-error: #E53935CC;
  18. --text-primary: #333;
  19. --text-secondary: #fff;
  20. --border-primary: var(--background-tertiary);
  21. --border-secondary: grey;
  22. --border-accent: var(--theme-primary);
  23. --border-hover: var(--theme-primary-hover);
  24. --shadow-primary: 0 0 20px var(--border-secondary);
  25. --transition-fast: 0.1s ease-in-out;
  26. --transition-medium: 0.250s ease;
  27. --transition-slow: 1s ease;
  28. }
  29. /* General
  30. /* General Styling */
  31. body {
  32. margin: 0;
  33. font-family: 'Roboto', sans-serif;
  34. background: var(--background-primary);
  35. display: flex;
  36. flex-direction: column;
  37. position: relative;
  38. }
  39. body * {
  40. box-sizing: border-box;
  41. }
  42. h1, h2 {
  43. margin: 0;
  44. }
  45. header {
  46. position: sticky;
  47. height: 50px;
  48. top: 0;
  49. z-index: 10;
  50. background: var(--background-primary);
  51. display: flex;
  52. justify-content: center;
  53. align-items: center;
  54. }
  55. h1, h2 {
  56. color: var(--theme-secondary-hover);
  57. transition: var(--transition-slow) color;
  58. }
  59. h3 {
  60. margin: 10px 0;
  61. }
  62. /* Inputs */
  63. input, select {
  64. display: block;
  65. width: 100%;
  66. padding: 10px;
  67. margin-bottom: 10px;
  68. border: 1px solid var(--border-primary);
  69. border-radius: 5px;
  70. font-size: 1rem;
  71. }
  72. /* Custom Input Wrapper */
  73. .custom-input {
  74. display: flex;
  75. align-items: center;
  76. gap: 10px;
  77. font-size: 1rem;
  78. color: var(--text-primary);
  79. cursor: pointer;
  80. flex: 1 1 auto;
  81. }
  82. /* Hide the Native Input */
  83. .custom-input input {
  84. display: none;
  85. }
  86. /* Checkbox and Radio Styles */
  87. .custom-checkbox,
  88. .custom-radio {
  89. display: inline-block;
  90. width: 20px;
  91. height: 20px;
  92. border: 2px solid var(--theme-primary);
  93. background-color: var(--background-secondary);
  94. position: relative;
  95. transition: background-color 0.3s ease, border-color 0.3s ease;
  96. }
  97. /* Checkbox Specific */
  98. .custom-checkbox {
  99. border-radius: 4px;
  100. }
  101. .custom-checkbox::after {
  102. content: '';
  103. width: 10px;
  104. height: 10px;
  105. background-color: var(--theme-primary);
  106. position: absolute;
  107. top: 50%;
  108. left: 50%;
  109. transform: translate(-50%, -50%) scale(0);
  110. transition: transform 0.2s ease-in-out;
  111. }
  112. /* Radio Specific */
  113. .custom-radio {
  114. border-radius: 50%;
  115. }
  116. .custom-radio::after {
  117. content: '';
  118. width: 10px;
  119. height: 10px;
  120. background-color: var(--theme-primary);
  121. position: absolute;
  122. top: 50%;
  123. left: 50%;
  124. transform: translate(-50%, -50%) scale(0);
  125. border-radius: 50%;
  126. transition: transform 0.2s ease-in-out;
  127. }
  128. /* Checked State */
  129. .custom-input input:checked + .custom-checkbox::after,
  130. .custom-input input:checked + .custom-radio::after {
  131. transform: translate(-50%, -50%) scale(1);
  132. }
  133. .custom-input input:checked + .custom-checkbox,
  134. .custom-input input:checked + .custom-radio {
  135. background-color: var(--theme-primary);
  136. border-color: var(--theme-primary-hover);
  137. }
  138. /* Focus State */
  139. .custom-input input:focus-visible + .custom-checkbox,
  140. .custom-input input:focus-visible + .custom-radio {
  141. outline: 2px dashed var(--theme-primary);
  142. outline-offset: 2px;
  143. }
  144. /* Hover Effects */
  145. .custom-checkbox:hover,
  146. .custom-radio:hover {
  147. border-color: var(--theme-primary-hover);
  148. }
  149. .dropdown {
  150. position: relative;
  151. display: inline-block;
  152. min-width: 200px;
  153. }
  154. .dropdown-button {
  155. border: none;
  156. cursor: pointer;
  157. display: inline-flex;
  158. align-items: center;
  159. justify-content: space-between;
  160. position: relative;
  161. width: 100%;
  162. height: 100%;
  163. padding: 0;
  164. }
  165. .dropdown-button > span {
  166. padding: 10px;
  167. }
  168. .dropdown-toggle {
  169. margin-left: 10px;
  170. cursor: pointer;
  171. user-select: none;
  172. height: 100%;
  173. aspect-ratio: 1 / 1;
  174. display: flex;
  175. justify-content: center;
  176. align-items: center;
  177. }
  178. .dropdown-toggle:hover {
  179. background: var(--text-secondary);
  180. color: var(--theme-primary);
  181. border-radius: 5px;
  182. }
  183. .dropdown-content {
  184. position: absolute;
  185. color: var(--theme-primary);
  186. background: var(--text-secondary);
  187. min-width: 120px;
  188. box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.2);
  189. z-index: 1;
  190. display: none;
  191. border-radius: 5px
  192. }
  193. .dropdown-content button {
  194. width: 100%;
  195. color: var(--theme-primary);
  196. background: none;
  197. border: none;
  198. text-align: left;
  199. padding: 10px;
  200. cursor: pointer;
  201. }
  202. .dropdown-content button:hover {
  203. background-color: var(--background-tertiary);
  204. }
  205. /* Buttons */
  206. button {
  207. background: var(--theme-primary);
  208. color: var(--text-secondary);
  209. padding: 10px 15px;
  210. border: none;
  211. font-weight: bold;
  212. border-radius: 5px;
  213. cursor: pointer;
  214. font-size: 1rem;
  215. transition: background 0.3s ease,color 0.3s ease;
  216. }
  217. button:not(.no-bg):hover{
  218. background: var(--background-info);
  219. }
  220. button.cancel {
  221. flex-grow: 0;
  222. }
  223. button.cancel:hover {
  224. background: var(--color-error);
  225. }
  226. button.cta:hover {
  227. background: var(--color-success);
  228. }
  229. button.warn:hover {
  230. background: var(--color-warning);
  231. }
  232. button.warning:hover{}
  233. /* App Layout */
  234. .app {
  235. min-height: calc(100vh - 110px);
  236. display: flex;
  237. flex-direction: column;
  238. }
  239. .hidden:not(.sticky) {
  240. display: none !important;
  241. }
  242. /* Tabs */
  243. .tab-content {
  244. display: none;
  245. flex: 1;
  246. overflow-y: auto;
  247. background: var(--background-secondary);
  248. }
  249. .tab-content.active {
  250. display: flex;
  251. position: relative;
  252. flex-direction: column;
  253. }
  254. section {
  255. padding: 15px;
  256. display: flex;
  257. flex-direction: column;
  258. }
  259. section.main {
  260. flex-grow: 1;
  261. }
  262. section.debug {
  263. flex-direction: row;
  264. align-items: center;
  265. justify-content: space-between;
  266. }
  267. section.version {
  268. flex-direction: row;
  269. justify-content: space-between;
  270. flex-wrap: wrap;
  271. }
  272. .version .header {
  273. width: 100%;
  274. }
  275. .version #motor_selection h3 {
  276. width: 100%;
  277. flex-grow: 1;
  278. }
  279. .version #motor_selection {
  280. display: flex;
  281. flex-direction: row;
  282. flex-wrap: wrap;
  283. width: 100%;
  284. }
  285. .version select#manual_motor_type {
  286. margin: 0 20px 0 0;
  287. flex: 1;
  288. }
  289. section.sticky {
  290. position: fixed;
  291. background-color: rgba(255, 255, 255, 0.5);
  292. backdrop-filter: blur(10px);
  293. bottom: 60px;
  294. border-top: 1px solid var(--border-primary);
  295. box-shadow: var(--shadow-primary);
  296. transform: translateY(0);
  297. transition: 250ms transform, 250ms height;
  298. visibility: visible;
  299. max-height: 70vh;
  300. width: 100%;
  301. z-index: 10;
  302. }
  303. section.sticky.fullscreen {
  304. position: fixed;
  305. top: 0;
  306. left: 0;
  307. width: 100vw;
  308. max-height: none;
  309. }
  310. section.sticky.hidden {
  311. transform: translateY(100%);
  312. visibility: hidden;
  313. width: 100%;
  314. position: absolute;
  315. overflow:hidden;
  316. height: 0;
  317. padding: 0;
  318. }
  319. section .header {
  320. position: relative;
  321. display: flex;
  322. justify-content: space-between;
  323. align-items: center;
  324. margin-bottom: 10px;
  325. }
  326. section .header h2 {
  327. flex-grow: 1;
  328. }
  329. /* Close Button Styling */
  330. .close-button,
  331. .fullscreen-button {
  332. background: none;
  333. border: none;
  334. font-size: 1.5rem;
  335. font-weight: bold;
  336. color: var(--text-primary);
  337. cursor: pointer;
  338. line-height: 1;
  339. padding: 0;
  340. height: 100%;
  341. width: auto;
  342. aspect-ratio: 1 / 1;
  343. display: flex;
  344. justify-content: center;
  345. align-items: center;
  346. margin-left: 10px;
  347. }
  348. .close-button:hover {
  349. color: var(--color-error);
  350. }
  351. .fullscreen-button:hover {
  352. color: var(--color-warning);
  353. }
  354. section .header .add-button {
  355. height: 35px;
  356. width: 35px;
  357. font-size: 1.5rem;
  358. padding: 0;
  359. }
  360. /* Playlist */
  361. .add-to-playlist {
  362. margin-top: 15px;
  363. }
  364. .add-to-playlist button {
  365. margin-bottom: 10px;
  366. }
  367. .add-to-container {
  368. display: flex;
  369. flex-wrap: wrap;
  370. margin-bottom: 20px;
  371. }
  372. #add-to-playlist-container select,
  373. #add-to-playlist-container button {
  374. margin-top: 10px;
  375. display: block;
  376. width: 100%;
  377. }
  378. .playlist-parameters {
  379. display: flex;
  380. flex-direction: column;
  381. gap: 10px;
  382. }
  383. .playlist-parameters .control-group button.small.cancel {
  384. align-self: flex-end;
  385. margin-bottom: 4px;
  386. }
  387. #clear_pattern {
  388. margin: 0;
  389. }
  390. .playlist-parameters .input-group input,
  391. .playlist-parameters .input-group select {
  392. width: 100%; /* Ensure inputs/selects stretch to full width */
  393. padding: 10px;
  394. border: 1px solid var(--border-primary);
  395. border-radius: 5px;
  396. font-size: 1rem;
  397. }
  398. .empty-placeholder {
  399. color: gray;
  400. font-style: italic;
  401. text-align: center;
  402. padding: 10px;
  403. }
  404. /* Style for the filename span */
  405. .filename {
  406. flex-grow: 1; /* Use available space */
  407. font-size: 1rem;
  408. color: var(--text-primary);
  409. margin-right: 10px; /* Space between filename and buttons */
  410. word-wrap: break-word;
  411. width: 100%;
  412. display: flex;
  413. align-items: center;
  414. }
  415. /* File List */
  416. .file-list {
  417. list-style: none;
  418. padding: 0;
  419. margin: 0;
  420. border: 1px solid var(--border-primary);
  421. border-radius: 5px;
  422. overflow-y: auto;
  423. background: var(--background-primary);
  424. flex-grow: 1;
  425. }
  426. .file-list li {
  427. display: flex;
  428. padding: 10px;
  429. border-bottom: 1px solid var(--border-primary);
  430. cursor: pointer;
  431. transition: background-color 0.3s ease;
  432. }
  433. .file-list li:hover {
  434. background-color: var(--background-tertiary);
  435. }
  436. .file-list li.selected {
  437. background: var(--theme-primary);
  438. color: var(--text-secondary);
  439. font-weight: bold;
  440. }
  441. .file-list li.selected .filename {
  442. font-weight: bold;
  443. color: var(--text-secondary);
  444. }
  445. .file-list button {
  446. margin-left: 5px;
  447. background: none;
  448. color: black;
  449. font-weight: bold;
  450. height: 40px;
  451. width: 40px;
  452. flex: 0 0 auto;
  453. display: flex;
  454. justify-content: center;
  455. align-items: center;
  456. }
  457. .file-list button:hover:not(:focus) {
  458. background: var(--background-primary);
  459. box-shadow: inset 0 0 4px var(--border-secondary);
  460. }
  461. .file-list button.remove-button {
  462. color: var(--color-error);
  463. }
  464. .title-container {
  465. display: flex;
  466. justify-content: space-between;
  467. align-items: center;
  468. }
  469. .rename-button {
  470. margin-left: 10px;
  471. background: var(--theme-primary-hover);
  472. color: var(--text-secondary);
  473. border: none;
  474. border-radius: 5px;
  475. padding: 5px 10px;
  476. cursor: pointer;
  477. transition: background 0.3s ease;
  478. }
  479. /* Bottom Navigation */
  480. .bottom-nav {
  481. display: flex;
  482. position: sticky;
  483. justify-content: space-around;
  484. bottom: 0;
  485. height: 60px;
  486. width: 100%;
  487. border-top: 1px solid var(--theme-primary);
  488. flex-wrap: wrap;
  489. z-index: 10;
  490. }
  491. .tab-button {
  492. flex: 1;
  493. padding: 20px 10px;
  494. text-align: center;
  495. font-size: 1rem;
  496. font-weight: bold;
  497. color: var(--text-secondary);
  498. background: none;
  499. border: none;
  500. cursor: pointer;
  501. transition: background 0.3s ease;
  502. background: var(--background-info);
  503. backdrop-filter: blur(2px);
  504. border-radius: 0;
  505. }
  506. .bottom-nav .tab-button.active {
  507. background: rgba(255, 255, 255, 0.75);
  508. color: var(--theme-primary);
  509. }
  510. /* Quick Action Buttons */
  511. .action-buttons {
  512. display: flex;
  513. gap: 10px;
  514. flex-wrap: wrap;
  515. width: 100%;
  516. justify-content: flex-end;
  517. }
  518. .action-buttons button {
  519. flex: 1;
  520. }
  521. .action-buttons button.small {
  522. flex: 0;
  523. flex-basis: calc(25% - 10px);
  524. }
  525. .action-buttons button.cta {
  526. flex-grow: 1;
  527. }
  528. button#debug_button {
  529. width: 40px;
  530. padding: 0;
  531. height: 40px;
  532. background: transparent;
  533. font-size: 1.5rem;
  534. margin-left: 40px;
  535. flex: 0 0 auto;
  536. transition: 250ms all;
  537. }
  538. button#debug_button:hover,
  539. button#debug_button.active {
  540. box-shadow: inset 0 0 4px var(--border-secondary);
  541. }
  542. #settings-tab button.cancel {
  543. flex-basis: 100%;
  544. }
  545. #settings-tab .dropdown {
  546. min-width: 50%;
  547. }
  548. /* Preview Canvas */
  549. #patternPreviewCanvas {
  550. width: 100%;
  551. max-width: 300px;
  552. aspect-ratio: 1/1;
  553. border: 1px solid var(--border-primary);
  554. background: var(--theme-secondary);
  555. border-radius: 100%;
  556. padding: 30px;
  557. }
  558. #pattern-preview {
  559. display: flex;
  560. flex-direction: column;
  561. align-items: center;
  562. margin-bottom: 20px;
  563. }
  564. #pattern-preview-container.fullscreen #patternPreviewCanvas {
  565. width: initial;
  566. max-width: calc(100vw - 30px);
  567. }
  568. /* Debug Log */
  569. #status_log {
  570. background: #000;
  571. color: var(--text-secondary);
  572. font-family: monospace;
  573. font-size: 0.9rem;
  574. border-top: 1px solid var(--border-primary);
  575. padding: 10px;
  576. max-height: 200px;
  577. overflow-y: scroll;
  578. display: none;
  579. width: 100%;
  580. }
  581. #status_log p {
  582. margin: 0;
  583. }
  584. .control-group {
  585. display: flex;
  586. margin-bottom: 10px;
  587. flex-wrap: wrap;
  588. width: 100%;
  589. align-items: center;
  590. justify-content: space-between;
  591. gap: 0 10px;
  592. }
  593. .control-group input {
  594. margin-bottom: 0;
  595. }
  596. .control-group h3 {
  597. width: 100%;
  598. }
  599. .control-group .item {
  600. display: flex;
  601. align-items: center;
  602. flex: 1;
  603. }
  604. .control-group .item.cta {
  605. justify-content: flex-end;
  606. }
  607. .control-group .item.column {
  608. flex-direction: column;
  609. text-align: center;
  610. }
  611. .control-group .item label {
  612. padding: 5px;
  613. }
  614. #serial_ports_container > * {
  615. display: inline-block;
  616. }
  617. #serial_ports_container select {
  618. margin: 10px;
  619. flex-basis: 100px;
  620. flex-grow: 0;
  621. }
  622. #serial_ports {
  623. width: auto;
  624. min-width: 200px;
  625. }
  626. #serial_status_container {
  627. margin-bottom: 10px;
  628. }
  629. #serial_status_header::before {
  630. content: '';
  631. width: 20px;
  632. height: 20px;
  633. border-radius: 50%;
  634. margin-right: 8px;
  635. background-color: var(--text-primary);
  636. display: inline-block;
  637. transition: var(--transition-slow) background-color;
  638. }
  639. #serial_status_header.connected::before {
  640. background-color: var(--color-success);
  641. }
  642. #serial_status_header.not-connected::before {
  643. background-color: var(--color-error);
  644. }
  645. #serial_ports_buttons {
  646. display: inline-block;
  647. }
  648. .status.connected {
  649. color: var(--color-success);
  650. font-weight: bold;
  651. }
  652. .status.not-connected {
  653. color: var(--color-error);
  654. font-weight: bold;
  655. }
  656. /* Speed Control Section */
  657. .speed-control {
  658. display: flex;
  659. }
  660. .speed-control label {
  661. font-weight: bold;
  662. font-size: 1rem;
  663. color: var(--text-primary);
  664. flex-shrink: 0;
  665. }
  666. .speed-control input[type="number"] {
  667. width: 100px; /* Consistent input width */
  668. padding: 8px;
  669. font-size: 1rem;
  670. border: 1px solid var(--border-primary);
  671. border-radius: 5px;
  672. outline: none;
  673. transition: all 0.3s ease;
  674. }
  675. input[type="number"]:focus {
  676. border-color: var(--theme-primary);
  677. box-shadow: 0 0 4px var(--background-info);
  678. }
  679. #speed_status {
  680. margin-top: 10px;
  681. font-size: 0.9rem;
  682. }
  683. #serial_ports_container > * {
  684. display: inline-block;
  685. }
  686. #serial_ports_container select {
  687. margin: 10px;
  688. flex-basis: 100px;
  689. flex-grow: 0;
  690. }
  691. #serial_ports {
  692. width: auto;
  693. min-width: 200px;
  694. }
  695. #serial_status_container,
  696. #serial_ports_buttons {
  697. display: inline-block;
  698. }
  699. /* Notification Styles */
  700. .notification {
  701. display: flex;
  702. position: absolute;
  703. top: 0;
  704. left: 0;
  705. font-weight: bold;
  706. z-index: 1000;
  707. color: var(--text-secondary);
  708. width: 100%;
  709. height: 100%;
  710. justify-content: center;
  711. align-items: center;
  712. backdrop-filter: blur(2px);
  713. opacity: 0;
  714. transition: opacity 250ms ease-in-out;
  715. }
  716. .notification.show {
  717. opacity: 1; /* Fully visible */
  718. }
  719. .notification .close-button {
  720. color: var(--text-secondary);
  721. font-size: 2rem;
  722. top: 0;
  723. right: 0;
  724. }
  725. /* Notification Types */
  726. .notification.success { background-color: var(--background-success); }
  727. .notification.warning { background-color: var(--background-warning); }
  728. .notification.error { background-color: var(--background-error); }
  729. .notification.info { background-color: var(--background-info); }
  730. .footer {
  731. align-items: center;
  732. display: flex;
  733. flex-wrap: wrap;
  734. justify-content: space-between;
  735. margin-bottom: 20px;
  736. width: 100%;
  737. }
  738. #github {
  739. align-content: center;
  740. display: flex;
  741. font-size: 0.8em;
  742. }
  743. #github img {
  744. margin: 0 5px
  745. }
  746. /* Responsive Design */
  747. @media (max-width: 1023px) {
  748. body {
  749. font-size: 0.9rem;
  750. }
  751. .tab-button {
  752. font-size: 0.9rem;
  753. }
  754. .footer {
  755. display: none;
  756. }
  757. button.cancel {
  758. background: var(--color-error);
  759. }
  760. button.cta {
  761. background: var(--color-success);
  762. }
  763. button.warn {
  764. background: var(--color-warning);
  765. }
  766. button.cancel:hover,
  767. button.warn:hover,
  768. button.cta:hover {
  769. background: var(--theme-primary);
  770. }
  771. }
  772. /* On larger screens, display all tabs in a 3-column grid */
  773. @media screen and (min-width: 1024px) {
  774. .app {
  775. display: grid;
  776. grid-template-columns: repeat(3, 1fr);
  777. gap: 0 16px;
  778. height: calc(100vh - 60px);
  779. }
  780. .bottom-nav {
  781. display: none;
  782. }
  783. #status_log {
  784. grid-column: span 3;
  785. align-self: flex-end;
  786. height: 100%;
  787. }
  788. section.sticky {
  789. position: sticky;
  790. bottom: 0;
  791. }
  792. /* Show all tabs in grid layout */
  793. .tab-content {
  794. display: flex !important; /* Always display tab-content */
  795. flex-direction: column;
  796. border: 1px solid var(--border-primary);
  797. background-color: var(--background-primary);
  798. border-radius: 8px;
  799. overflow-y: auto;
  800. overflow-x: hidden;
  801. position: relative;
  802. }
  803. }