main.css 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. /* GrabZilla 2.1 - Exact Figma Design System */
  2. /* Import component styles */
  3. @import url('./components/header.css');
  4. :root {
  5. /* Primary Colors - Exact from Figma */
  6. --primary-blue: #155dfc;
  7. --success-green: #00a63e;
  8. --error-red: #e7000b;
  9. /* Backgrounds - Exact from Figma */
  10. --bg-dark: #1d293d;
  11. --header-dark: #0f172b;
  12. --card-bg: #314158;
  13. --border-color: #45556c;
  14. /* Text Colors - Exact from Figma */
  15. --text-primary: #ffffff;
  16. --text-secondary: #cad5e2;
  17. --text-muted: #90a1b9;
  18. --text-disabled: #62748e;
  19. /* Status Colors */
  20. --status-ready: #00a63e;
  21. --status-downloading: #00a63e;
  22. --status-converting: #155dfc;
  23. --status-completed: #4a5565;
  24. --status-error: #e7000b;
  25. /* macOS Traffic Light Colors */
  26. --macos-red: #ff5f57;
  27. --macos-red-hover: #ff4136;
  28. --macos-yellow: #ffbd2e;
  29. --macos-yellow-hover: #ff9500;
  30. --macos-green: #28ca42;
  31. --macos-green-hover: #00d084;
  32. }
  33. /* Base Styles */
  34. * {
  35. box-sizing: border-box;
  36. }
  37. body {
  38. font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  39. background-color: var(--bg-dark);
  40. color: var(--text-primary);
  41. margin: 0;
  42. padding: 0;
  43. min-height: 100vh;
  44. }
  45. /* Scrollbar Styling */
  46. ::-webkit-scrollbar {
  47. width: 8px;
  48. }
  49. ::-webkit-scrollbar-track {
  50. background: var(--bg-dark);
  51. }
  52. ::-webkit-scrollbar-thumb {
  53. background: var(--border-color);
  54. border-radius: 4px;
  55. }
  56. ::-webkit-scrollbar-thumb:hover {
  57. background: var(--text-muted);
  58. }
  59. /* Button Hover Effects */
  60. button:hover {
  61. transition: all 0.2s ease;
  62. }
  63. button:disabled {
  64. opacity: 0.5;
  65. cursor: not-allowed;
  66. }
  67. /* Input Focus Styles */
  68. input:focus,
  69. textarea:focus,
  70. select:focus {
  71. outline: none;
  72. border-color: var(--primary-blue);
  73. box-shadow: 0 0 0 2px rgba(21, 93, 252, 0.2);
  74. }
  75. /* Enhanced Focus Indicators for Accessibility */
  76. button:focus-visible,
  77. input:focus-visible,
  78. textarea:focus-visible,
  79. select:focus-visible,
  80. [tabindex]:focus-visible {
  81. outline: 3px solid var(--primary-blue) !important;
  82. outline-offset: 2px !important;
  83. box-shadow: 0 0 0 1px rgba(21, 93, 252, 0.3) !important;
  84. position: relative;
  85. z-index: 10;
  86. }
  87. /* Video item focus management */
  88. .video-item {
  89. position: relative;
  90. }
  91. .video-item:focus-within {
  92. outline: 2px solid var(--primary-blue) !important;
  93. outline-offset: 1px !important;
  94. background-color: rgba(21, 93, 252, 0.1) !important;
  95. z-index: 5;
  96. }
  97. .video-item:focus {
  98. outline: 3px solid var(--primary-blue) !important;
  99. outline-offset: 2px !important;
  100. background-color: rgba(21, 93, 252, 0.15) !important;
  101. }
  102. /* Keyboard navigation indicators */
  103. .video-item.keyboard-focused {
  104. background-color: rgba(21, 93, 252, 0.1) !important;
  105. border: 1px solid var(--primary-blue);
  106. }
  107. /* Selection states with accessibility */
  108. .video-item.selected {
  109. background-color: rgba(21, 93, 252, 0.2) !important;
  110. border: 2px solid var(--primary-blue);
  111. box-shadow: 0 0 0 1px rgba(21, 93, 252, 0.3);
  112. }
  113. .video-item.selected:focus {
  114. outline: 3px solid var(--success-green) !important;
  115. outline-offset: 2px !important;
  116. }
  117. /* Screen Reader Only Utility */
  118. .sr-only {
  119. position: absolute;
  120. width: 1px;
  121. height: 1px;
  122. padding: 0;
  123. margin: -1px;
  124. overflow: hidden;
  125. clip: rect(0, 0, 0, 0);
  126. white-space: nowrap;
  127. border: 0;
  128. }
  129. /* High Contrast Mode Support */
  130. @media (prefers-contrast: high) {
  131. :root {
  132. --border-color: #ffffff;
  133. --text-muted: #ffffff;
  134. }
  135. }
  136. /* Reduced Motion Support */
  137. @media (prefers-reduced-motion: reduce) {
  138. *,
  139. *::before,
  140. *::after {
  141. animation-duration: 0.01ms !important;
  142. animation-iteration-count: 1 !important;
  143. transition-duration: 0.01ms !important;
  144. }
  145. }
  146. /* Loading Spinner Animation */
  147. @keyframes spin {
  148. from {
  149. transform: rotate(0deg);
  150. }
  151. to {
  152. transform: rotate(360deg);
  153. }
  154. }
  155. .animate-spin {
  156. animation: spin 1s linear infinite;
  157. }
  158. /* Control Panel Button Styles */
  159. #clearListBtn:hover:not(:disabled) {
  160. background-color: var(--border-color);
  161. border-color: var(--text-muted);
  162. }
  163. #updateDepsBtn:hover:not(:disabled) {
  164. background-color: var(--border-color);
  165. border-color: var(--text-muted);
  166. }
  167. #cancelDownloadsBtn:hover:not(:disabled) {
  168. background-color: #c53030;
  169. }
  170. #downloadVideosBtn:hover:not(:disabled) {
  171. background-color: #38a169;
  172. }
  173. /* Disabled button styles */
  174. button:disabled {
  175. opacity: 0.5;
  176. cursor: not-allowed;
  177. }
  178. button:disabled:hover {
  179. transform: none;
  180. box-shadow: none;
  181. }
  182. /* Utility Classes */
  183. .text-truncate {
  184. overflow: hidden;
  185. text-overflow: ellipsis;
  186. white-space: nowrap;
  187. }
  188. /* Responsive Design */
  189. @media (max-width: 1024px) {
  190. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] {
  191. grid-template-columns: 40px 1fr 80px 80px 80px;
  192. }
  193. /* Hide drag handle and checkbox on smaller screens */
  194. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] > :nth-child(1),
  195. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] > :nth-child(2) {
  196. display: none;
  197. }
  198. }
  199. @media (max-width: 768px) {
  200. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] {
  201. grid-template-columns: 1fr 60px;
  202. gap: 8px;
  203. }
  204. /* Hide some columns on mobile */
  205. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] > :nth-child(4),
  206. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] > :nth-child(5),
  207. .grid-cols-\[40px_40px_1fr_120px_100px_120px_100px\] > :nth-child(6) {
  208. display: none;
  209. }
  210. }
  211. /*
  212. Video List Styles - Exact Figma Implementation */
  213. .video-item {
  214. border-radius: 4px;
  215. cursor: pointer;
  216. }
  217. .video-item:hover {
  218. background-color: #3a4a68 !important;
  219. }
  220. /* Video Item Checkbox Styling */
  221. .video-item button svg rect {
  222. transition: all 0.2s ease;
  223. }
  224. .video-item button:hover svg rect {
  225. stroke: var(--primary-blue);
  226. }
  227. /* Video Item Drag Handle Styling */
  228. .video-item svg circle {
  229. transition: fill 0.2s ease;
  230. }
  231. /* Video Thumbnail Styling */
  232. .video-item .w-16.h-12 {
  233. background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%);
  234. border: 1px solid var(--border-color);
  235. }
  236. /* Video Dropdown Styling */
  237. .video-item select {
  238. transition: all 0.2s ease;
  239. appearance: none;
  240. background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
  241. background-position: right 8px center;
  242. background-repeat: no-repeat;
  243. background-size: 16px;
  244. padding-right: 32px;
  245. }
  246. .video-item select:hover {
  247. border-color: var(--primary-blue);
  248. background-color: #3a4a68;
  249. }
  250. .video-item select:focus {
  251. outline: none;
  252. border-color: var(--primary-blue);
  253. box-shadow: 0 0 0 2px rgba(21, 93, 252, 0.2);
  254. }
  255. /* Progress Bar Styling */
  256. .video-item .bg-\[\#45556c\] {
  257. background-color: var(--border-color);
  258. border-radius: 6px;
  259. }
  260. .video-item .bg-\[\#00a63e\] {
  261. background-color: var(--success-green);
  262. border-radius: 6px;
  263. }
  264. .video-item .bg-\[\#155dfc\] {
  265. background-color: var(--primary-blue);
  266. border-radius: 6px;
  267. }
  268. /* Status Badge Component - Integrated Progress Design - Exact Figma Implementation */
  269. .status-badge {
  270. display: inline-flex;
  271. align-items: center;
  272. justify-content: center;
  273. padding: 4px 8px;
  274. border-radius: 4px;
  275. font-size: 12px;
  276. font-weight: 500;
  277. line-height: 16px;
  278. letter-spacing: -0.1504px;
  279. min-width: 80px;
  280. max-width: 100px;
  281. text-align: center;
  282. transition: all 0.2s ease;
  283. position: relative;
  284. overflow: hidden;
  285. white-space: nowrap;
  286. text-overflow: ellipsis;
  287. }
  288. /* Ready State - Green Badge */
  289. .status-badge.ready {
  290. background-color: var(--status-ready); /* #00a63e */
  291. color: #ffffff;
  292. font-weight: 500;
  293. }
  294. /* Downloading State - Green Badge with Integrated Progress */
  295. .status-badge.downloading {
  296. background-color: var(--status-downloading); /* #00a63e */
  297. color: #ffffff;
  298. font-weight: 500;
  299. position: relative;
  300. }
  301. /* Converting State - Blue Badge with Integrated Progress */
  302. .status-badge.converting {
  303. background-color: var(--status-converting); /* #155dfc */
  304. color: #ffffff;
  305. font-weight: 500;
  306. position: relative;
  307. }
  308. /* Completed State - Gray Badge */
  309. .status-badge.completed {
  310. background-color: var(--status-completed); /* #4a5565 */
  311. color: #ffffff;
  312. font-weight: 500;
  313. }
  314. /* Error State - Red Badge */
  315. .status-badge.error {
  316. background-color: var(--status-error); /* #e7000b */
  317. color: #ffffff;
  318. font-weight: 500;
  319. }
  320. /* Progress Animation for Status Badges - Enhanced Figma-Compliant Design */
  321. .status-badge.downloading::before,
  322. .status-badge.converting::before {
  323. content: '';
  324. position: absolute;
  325. top: 0;
  326. left: -100%;
  327. width: 100%;
  328. height: 100%;
  329. background: linear-gradient(
  330. 90deg,
  331. transparent,
  332. rgba(255, 255, 255, 0.15),
  333. transparent
  334. );
  335. animation: progress-shimmer 2.5s infinite;
  336. z-index: 1;
  337. }
  338. @keyframes progress-shimmer {
  339. 0% {
  340. left: -100%;
  341. }
  342. 100% {
  343. left: 100%;
  344. }
  345. }
  346. /* Subtle pulsing effect for active status badges */
  347. .status-badge.downloading,
  348. .status-badge.converting {
  349. animation: status-pulse 3s ease-in-out infinite;
  350. }
  351. @keyframes status-pulse {
  352. 0%, 100% {
  353. opacity: 1;
  354. transform: scale(1);
  355. }
  356. 50% {
  357. opacity: 0.9;
  358. transform: scale(1.02);
  359. }
  360. }
  361. /* Progress Indicator Overlay for Integrated Progress Display */
  362. .status-badge[data-progress]::after {
  363. content: '';
  364. position: absolute;
  365. bottom: 0;
  366. left: 0;
  367. height: 2px;
  368. background-color: rgba(255, 255, 255, 0.3);
  369. border-radius: 0 0 4px 4px;
  370. transition: width 0.3s ease;
  371. z-index: 2;
  372. }
  373. /* Dynamic progress indicator - will be set via JavaScript */
  374. .status-badge.has-progress::after {
  375. width: var(--progress-width, 0%);
  376. }
  377. /* Legacy Progress Bar Styles - Kept for backward compatibility */
  378. .progress-container {
  379. display: flex;
  380. flex-direction: column;
  381. gap: 4px;
  382. width: 100%;
  383. }
  384. .progress-bar {
  385. width: 100%;
  386. height: 16px;
  387. background-color: var(--border-color);
  388. border-radius: 6px;
  389. overflow: hidden;
  390. position: relative;
  391. }
  392. .progress-fill {
  393. height: 100%;
  394. border-radius: 6px;
  395. transition: width 0.3s ease;
  396. position: relative;
  397. }
  398. .progress-fill.downloading {
  399. background-color: var(--status-downloading);
  400. }
  401. .progress-fill.converting {
  402. background-color: var(--status-converting);
  403. }
  404. .progress-text {
  405. font-size: 12px;
  406. font-weight: 500;
  407. line-height: 16px;
  408. letter-spacing: -0.1504px;
  409. color: var(--text-secondary);
  410. text-align: center;
  411. }
  412. /* Progress Bar with Status Text Combined */
  413. .progress-status {
  414. display: flex;
  415. flex-direction: column;
  416. gap: 2px;
  417. align-items: center;
  418. justify-content: center;
  419. width: 100%;
  420. }
  421. .progress-status .progress-bar {
  422. height: 16px;
  423. margin-bottom: 2px;
  424. }
  425. .progress-status .progress-text {
  426. font-size: 12px;
  427. color: var(--text-secondary);
  428. }
  429. /* Status Badge Hover Effects */
  430. .status-badge:hover {
  431. transform: translateY(-1px);
  432. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
  433. }
  434. /* Accessibility Improvements for Status Components */
  435. .status-badge[aria-live="polite"] {
  436. /* Ensure status changes are announced to screen readers */
  437. }
  438. .progress-container[role="progressbar"] {
  439. /* Ensure progress is accessible */
  440. }
  441. /* High Contrast Mode Support for Status Components */
  442. @media (prefers-contrast: high) {
  443. .status-badge {
  444. border: 1px solid var(--text-primary);
  445. font-weight: 600;
  446. }
  447. .progress-bar {
  448. border: 1px solid var(--text-primary);
  449. }
  450. }
  451. /* Responsive Video List */
  452. @media (max-width: 1024px) {
  453. .video-item {
  454. grid-template-columns: 40px 1fr 80px 80px 80px;
  455. }
  456. /* Hide drag handle on smaller screens */
  457. .video-item > :nth-child(2) {
  458. display: none;
  459. }
  460. }
  461. @media (max-width: 768px) {
  462. .video-item {
  463. grid-template-columns: 1fr 60px;
  464. gap: 8px;
  465. padding: 12px;
  466. }
  467. /* Hide checkbox, duration, quality, format on mobile */
  468. .video-item > :nth-child(1),
  469. .video-item > :nth-child(4),
  470. .video-item > :nth-child(5),
  471. .video-item > :nth-child(6) {
  472. display: none;
  473. }
  474. /* Stack video info vertically on mobile */
  475. .video-item .flex.items-center.gap-3 {
  476. flex-direction: column;
  477. align-items: flex-start;
  478. gap: 8px;
  479. }
  480. .video-item .w-16.h-12 {
  481. width: 48px;
  482. height: 36px;
  483. }
  484. }
  485. /* Video Selection States */
  486. .video-item.selected {
  487. background-color: rgba(21, 93, 252, 0.15) !important;
  488. border: 1px solid var(--primary-blue);
  489. box-shadow: 0 0 0 1px rgba(21, 93, 252, 0.3);
  490. }
  491. .video-item.selected:hover {
  492. background-color: rgba(21, 93, 252, 0.2) !important;
  493. }
  494. /* Enhanced Checkbox States for Accessibility */
  495. .video-checkbox {
  496. position: relative;
  497. cursor: pointer;
  498. border-radius: 4px;
  499. transition: all 0.2s ease;
  500. }
  501. .video-checkbox:focus-visible {
  502. outline: 2px solid var(--primary-blue) !important;
  503. outline-offset: 2px !important;
  504. }
  505. .video-checkbox svg rect {
  506. transition: all 0.2s ease;
  507. }
  508. .video-checkbox:hover svg rect {
  509. stroke: var(--primary-blue);
  510. stroke-width: 2;
  511. }
  512. .video-checkbox.checked svg rect {
  513. fill: var(--primary-blue);
  514. stroke: var(--primary-blue);
  515. }
  516. .video-checkbox.checked svg {
  517. position: relative;
  518. }
  519. .video-checkbox.checked svg::after {
  520. content: '✓';
  521. position: absolute;
  522. top: 50%;
  523. left: 50%;
  524. transform: translate(-50%, -50%);
  525. color: white;
  526. font-size: 12px;
  527. font-weight: bold;
  528. }
  529. /* Keyboard navigation helpers */
  530. .keyboard-navigation-active .video-item:focus {
  531. background-color: rgba(21, 93, 252, 0.15) !important;
  532. }
  533. .keyboard-navigation-active button:focus,
  534. .keyboard-navigation-active select:focus,
  535. .keyboard-navigation-active input:focus,
  536. .keyboard-navigation-active textarea:focus {
  537. box-shadow: 0 0 0 3px rgba(21, 93, 252, 0.3) !important;
  538. }
  539. /* Drag and Drop States */
  540. .video-item.dragging {
  541. opacity: 0.6;
  542. transform: rotate(3deg) scale(1.02);
  543. z-index: 1000;
  544. box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
  545. border: 2px solid var(--primary-blue);
  546. }
  547. .video-item.drop-target {
  548. background-color: rgba(21, 93, 252, 0.1) !important;
  549. border: 2px dashed var(--primary-blue);
  550. transform: scale(1.02);
  551. }
  552. .video-item.drop-target::before {
  553. content: '';
  554. position: absolute;
  555. top: -2px;
  556. left: 0;
  557. right: 0;
  558. height: 4px;
  559. background-color: var(--primary-blue);
  560. border-radius: 2px;
  561. z-index: 10;
  562. }
  563. /* Drag handle cursor */
  564. .video-item [data-drag-handle] {
  565. cursor: grab;
  566. }
  567. .video-item [data-drag-handle]:active {
  568. cursor: grabbing;
  569. }
  570. /* Selection counter in status */
  571. .selection-status {
  572. color: var(--primary-blue);
  573. font-weight: 500;
  574. }
  575. /* Loading States */
  576. .video-item .loading-spinner {
  577. width: 16px;
  578. height: 16px;
  579. border: 2px solid var(--border-color);
  580. border-top: 2px solid var(--primary-blue);
  581. border-radius: 50%;
  582. animation: spin 1s linear infinite;
  583. }
  584. /* Accessibility Improvements */
  585. .video-item:focus-within {
  586. outline: 2px solid var(--primary-blue);
  587. outline-offset: 2px;
  588. }
  589. .video-item button:focus-visible,
  590. .video-item select:focus-visible {
  591. outline: 2px solid var(--primary-blue);
  592. outline-offset: 2px;
  593. }
  594. /* Text Truncation for Long Titles */
  595. .video-item .truncate {
  596. overflow: hidden;
  597. text-overflow: ellipsis;
  598. white-space: nowrap;
  599. }
  600. /* Smooth Transitions */
  601. .video-item * {
  602. transition: all 0.2s ease;
  603. }
  604. /* High Contrast Mode Support for Video List */
  605. @media (prefers-contrast: high) {
  606. .video-item {
  607. border: 1px solid var(--text-primary);
  608. }
  609. .video-item select {
  610. border-color: var(--text-primary);
  611. }
  612. }
  613. /* macOS
  614. Title Bar Styling */
  615. header {
  616. -webkit-app-region: drag;
  617. -webkit-user-select: none;
  618. user-select: none;
  619. }
  620. /* Traffic Light Buttons */
  621. .traffic-light {
  622. width: 12px;
  623. height: 12px;
  624. border-radius: 50%;
  625. transition: all 0.2s ease;
  626. cursor: pointer;
  627. -webkit-app-region: no-drag;
  628. border: none;
  629. outline: none;
  630. }
  631. .traffic-light:focus-visible {
  632. outline: 2px solid var(--primary-blue);
  633. outline-offset: 2px;
  634. }
  635. .traffic-light:active {
  636. transform: scale(0.95);
  637. }
  638. .traffic-light:hover {
  639. transform: scale(1.1);
  640. }
  641. /* Fix Row Selection Cut-off Issue */
  642. #videoList {
  643. padding-top: 8px; /* Add top padding to prevent cut-off */
  644. }
  645. .video-item {
  646. margin-top: 2px; /* Ensure proper spacing */
  647. margin-bottom: 2px;
  648. }
  649. .video-item:first-child {
  650. margin-top: 0; /* Remove extra margin from first item */
  651. }
  652. /* Improve Video Item Hover Effect */
  653. .video-item:hover {
  654. background-color: #3a4a68 !important;
  655. transform: translateY(-1px);
  656. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
  657. }
  658. /* Ensure proper spacing in video list container */
  659. .video-item + .video-item {
  660. margin-top: 8px;
  661. }
  662. /* Fix any potential overflow issues */
  663. main {
  664. overflow: hidden;
  665. }
  666. #videoList {
  667. overflow-y: auto;
  668. overflow-x: hidden;
  669. }
  670. /* Improve scrollbar in video list */
  671. #videoList::-webkit-scrollbar {
  672. width: 6px;
  673. }
  674. #videoList::-webkit-scrollbar-track {
  675. background: transparent;
  676. }
  677. #videoList::-webkit-scrollbar-thumb {
  678. background: var(--border-color);
  679. border-radius: 3px;
  680. }
  681. #videoList::-webkit-scrollbar-thumb:hover {
  682. background: var(--text-muted);
  683. }
  684. /* Ensure proper title bar height and centering */
  685. header {
  686. min-height: 41px;
  687. height: 41px;
  688. -webkit-app-region: drag;
  689. -webkit-user-select: none;
  690. user-select: none;
  691. }
  692. /* Make sure the logo and title are properly centered */
  693. header > div {
  694. -webkit-app-region: no-drag;
  695. }
  696. /* Responsive title bar */
  697. @media (max-width: 768px) {
  698. header {
  699. height: 41px;
  700. min-height: 41px;
  701. }
  702. }