default.css 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. /*
  2. * Common attributes
  3. */
  4. html,
  5. body {
  6. font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", Roboto, Oxygen,
  7. Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica,
  8. Arial, sans-serif;
  9. }
  10. #contents {
  11. display: flex;
  12. flex-direction: column;
  13. min-height: 100vh;
  14. margin: auto;
  15. }
  16. .h-box {
  17. padding-left: 1em;
  18. padding-right: 1em;
  19. }
  20. .v-box {
  21. padding-top: 1em;
  22. padding-bottom: 1em;
  23. }
  24. .deleted {
  25. background-color: rgb(255, 0, 0, 0.5);
  26. }
  27. .underlined {
  28. border-bottom: 1px solid;
  29. margin-bottom: 20px;
  30. }
  31. .title {
  32. margin: 0.5em 0 1em 0;
  33. }
  34. /* A flex container */
  35. .flexible {
  36. display: flex;
  37. align-items: center;
  38. }
  39. .flex-left {
  40. display: flex;
  41. flex: 1 1 auto;
  42. flex-flow: row wrap;
  43. justify-content: flex-start;
  44. }
  45. .flex-right {
  46. display: flex;
  47. flex: 2 0 auto;
  48. flex-flow: row nowrap;
  49. justify-content: flex-end;
  50. }
  51. /*
  52. * Channel page
  53. */
  54. .channel-profile > * {
  55. font-size: 1.17em;
  56. font-weight: bold;
  57. vertical-align: middle;
  58. border-radius: 50%;
  59. }
  60. .channel-profile > img {
  61. width: 48px;
  62. height: auto;
  63. }
  64. body a.channel-owner {
  65. background-color: #008bec;
  66. color: #fff;
  67. border-radius: 9px;
  68. padding: 1px 6px;
  69. }
  70. .creator-heart-container {
  71. display: inline-block;
  72. padding: 0px 7px 6px 0px;
  73. margin: 0px -7px -4px 0px;
  74. }
  75. .creator-heart {
  76. display: inline-block;
  77. position: relative;
  78. width: 16px;
  79. height: 16px;
  80. border: 2px none;
  81. }
  82. .creator-heart-background-hearted {
  83. width: 16px;
  84. height: 16px;
  85. padding: 0px;
  86. position: relative;
  87. }
  88. .creator-heart-small-hearted {
  89. position: absolute;
  90. right: -7px;
  91. bottom: -4px;
  92. }
  93. .creator-heart-small-container {
  94. display: block;
  95. position: relative;
  96. width: 13px;
  97. height: 13px;
  98. color: rgb(255, 0, 0);
  99. }
  100. .feed-menu {
  101. display: flex;
  102. justify-content: center;
  103. flex-wrap: wrap;
  104. }
  105. .feed-menu-item {
  106. text-align: center;
  107. }
  108. @media screen and (max-width: 640px) {
  109. .feed-menu-item {
  110. flex: 0 0 40%;
  111. }
  112. }
  113. div {
  114. overflow-wrap: break-word;
  115. word-wrap: break-word;
  116. }
  117. .loading {
  118. display: inline-block;
  119. animation: spin 2s linear infinite;
  120. }
  121. .playlist-restricted {
  122. height: 20em;
  123. padding-right: 10px;
  124. }
  125. /*
  126. * Buttons
  127. */
  128. body a.pure-button {
  129. color: rgba(0,0,0,.8);
  130. }
  131. button.pure-button-primary,
  132. body a.pure-button-primary,
  133. .channel-owner:hover,
  134. .channel-owner:focus {
  135. background-color: #a0a0a0;
  136. color: rgba(35, 35, 35, 1);
  137. }
  138. .pure-button-primary,
  139. .pure-button-secondary {
  140. border: 1px solid #a0a0a0;
  141. border-radius: 3px;
  142. margin: 0 .4em;
  143. }
  144. .pure-button-secondary.low-profile {
  145. padding: 5px 10px;
  146. margin: 0;
  147. }
  148. /* Has to be combined with flex-left/right */
  149. .button-container {
  150. flex-flow: wrap;
  151. gap: 0.5em 0.75em;
  152. }
  153. /*
  154. * Video thumbnails
  155. */
  156. div.thumbnail {
  157. position: relative;
  158. width: 100%;
  159. box-sizing: border-box;
  160. }
  161. img.thumbnail {
  162. display: block; /* See: https://stackoverflow.com/a/11635197 */
  163. width: 100%;
  164. object-fit: cover;
  165. aspect-ratio: 16 / 9;
  166. }
  167. .thumbnail-placeholder {
  168. min-height: 50px;
  169. border: 2px dotted;
  170. }
  171. div.watched-overlay {
  172. z-index: 50;
  173. position: absolute;
  174. top: 0;
  175. left: 0;
  176. right: 0;
  177. bottom: 0;
  178. background-color: rgba(255,255,255,.4);
  179. }
  180. div.watched-indicator {
  181. position: absolute;
  182. left: 0;
  183. bottom: 0;
  184. height: 4px;
  185. width: 100%;
  186. background-color: red;
  187. }
  188. div.thumbnail > .top-left-overlay,
  189. div.thumbnail > .bottom-right-overlay {
  190. z-index: 100;
  191. position: absolute;
  192. padding: 0;
  193. margin: 0;
  194. font-size: 16px;
  195. }
  196. .top-left-overlay { top: 0.6em; left: 0.6em; }
  197. .bottom-right-overlay { bottom: 0.6em; right: 0.6em; }
  198. .length {
  199. padding: 1px;
  200. margin: -2px 0;
  201. color: #fff;
  202. border-radius: 3px;
  203. }
  204. .length, .top-left-overlay button {
  205. color: #eee;
  206. background-color: rgba(35, 35, 35, 0.85) !important;
  207. }
  208. /*
  209. * Navbar
  210. */
  211. .navbar {
  212. margin: 1em 0;
  213. display: flex; /* this is also defined in framework, but in case of future changes */
  214. align-items: center;
  215. justify-content: space-between;
  216. }
  217. .navbar > div {
  218. flex: 1;
  219. }
  220. .searchbar {
  221. flex-grow: 2; /* take double the space of the other items */
  222. }
  223. .navbar a {
  224. padding: 0; /* this way it will stay aligned with content under */
  225. }
  226. .navbar .index-link {
  227. font-weight: bold;
  228. display: inline;
  229. }
  230. .searchbar .pure-form {
  231. display: flex;
  232. }
  233. .searchbar .pure-form fieldset {
  234. padding: 0;
  235. flex: 1;
  236. }
  237. .searchbar input[type="search"] {
  238. width: 100%;
  239. margin: 1px;
  240. border: 1px solid;
  241. border-color: rgba(0,0,0,0);
  242. border-bottom-color: #CCC;
  243. border-radius: 0;
  244. box-shadow: none;
  245. appearance: none;
  246. -webkit-appearance: none;
  247. }
  248. .searchbar input[type="search"]:focus {
  249. margin: 0;
  250. border: 2px solid;
  251. border-color: rgba(0,0,0,0);
  252. border-bottom-color: #FED;
  253. }
  254. /* https://stackoverflow.com/a/55170420 */
  255. input[type="search"]::-webkit-search-cancel-button {
  256. -webkit-appearance: none;
  257. height: 14px;
  258. width: 14px;
  259. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAn0lEQVR42u3UMQrDMBBEUZ9WfQqDmm22EaTyjRMHAlM5K+Y7lb0wnUZPIKHlnutOa+25Z4D++MRBX98MD1V/trSppLKHqj9TTBWKcoUqffbUcbBBEhTjBOV4ja4l4OIAZThEOV6jHO8ARXD+gPPvKMABinGOrnu6gTNUawrcQKNCAQ7QeTxORzle3+sDfjJpPCqhJh7GixZq4rHcc9l5A9qZ+WeBhgEuAAAAAElFTkSuQmCC);
  260. background-size: 14px;
  261. }
  262. .searchbar #searchbutton {
  263. border: none;
  264. background: none;
  265. margin-top: 0;
  266. }
  267. .searchbar #searchbutton:hover {
  268. color: rgb(0, 182, 240);
  269. }
  270. .user-field {
  271. display: flex;
  272. flex-direction: row;
  273. justify-content: flex-end;
  274. align-items: center;
  275. }
  276. .user-field div {
  277. width: auto;
  278. }
  279. .user-field div:not(:last-child) {
  280. margin-right: 1em;
  281. }
  282. /*
  283. * Responsive rules
  284. */
  285. @media only screen and (max-aspect-ratio: 16/9) {
  286. .player-dimensions.vjs-fluid {
  287. padding-top: 46.86% !important;
  288. }
  289. #player-container {
  290. padding-bottom: 46.86% !important;
  291. }
  292. }
  293. @media screen and (max-width: 767px) {
  294. .navbar {
  295. flex-direction: column;
  296. }
  297. .navbar > div {
  298. display: flex;
  299. justify-content: center;
  300. margin-bottom: 25px;
  301. }
  302. .navbar > .searchbar > form {
  303. width: 75%;
  304. }
  305. h1 {
  306. font-size: 1.25em;
  307. margin: 0.42em 0;
  308. }
  309. /* Space out the subscribe & RSS buttons and align them to the left */
  310. .title.flexible { display: block; }
  311. .title.flexible > .flex-right { margin: 0.75em 0; justify-content: flex-start; }
  312. /* Space out buttons to make them easier to tap */
  313. .user-field { font-size: 125%; }
  314. .user-field > :not(:last-child) { margin-right: 1.75em; }
  315. .icon-buttons { font-size: 125%; }
  316. .icon-buttons > :not(:last-child) { margin-right: 0.75em; }
  317. }
  318. @media screen and (max-width: 320px) {
  319. .navbar > .searchbar > form {
  320. width: 100%;
  321. margin: 0 1em;
  322. }
  323. }
  324. /*
  325. * Video "cards" (results/playlist/channel videos)
  326. */
  327. .video-card-row { margin: 15px 0; }
  328. p.channel-name { margin: 0; }
  329. p.video-data { margin: 0; font-weight: bold; font-size: 80%; }
  330. /*
  331. * Comments & community posts
  332. */
  333. .comments {
  334. max-width: 800px;
  335. margin: auto;
  336. }
  337. /*
  338. * We don't want the top and bottom margin on the post page.
  339. */
  340. .comments.post-comments {
  341. margin-bottom: 0;
  342. margin-top: 0;
  343. }
  344. .video-iframe-wrapper {
  345. position: relative;
  346. height: 0;
  347. padding-bottom: 56.25%;
  348. }
  349. .video-iframe {
  350. position: absolute;
  351. top: 0;
  352. left: 0;
  353. width: 100%;
  354. height: 100%;
  355. border: none;
  356. }
  357. /*
  358. * Page navigation
  359. */
  360. .page-nav-container { margin: 15px 0 30px 0; }
  361. .page-prev-container { text-align: start; }
  362. .page-next-container { text-align: end; }
  363. .page-prev-container,
  364. .page-next-container {
  365. display: inline-block;
  366. }
  367. /*
  368. * Footer
  369. */
  370. footer {
  371. margin-top: auto;
  372. padding: 1.5em 0;
  373. text-align: center;
  374. max-height: 30vh;
  375. }
  376. .light-theme footer {
  377. color: #7c7c7c;
  378. }
  379. .dark-theme footer {
  380. color: #adadad;
  381. }
  382. .light-theme footer a {
  383. color: #7c7c7c !important;
  384. }
  385. .dark-theme footer a {
  386. color: #adadad !important;
  387. }
  388. footer span {
  389. margin: 4px 0;
  390. display: block;
  391. }
  392. /* keyframes */
  393. @keyframes spin {
  394. 0% {
  395. transform: rotate(0deg);
  396. }
  397. 100% {
  398. transform: rotate(360deg);
  399. }
  400. }
  401. fieldset > select,
  402. span > select {
  403. color: rgba(49, 49, 51, 1);
  404. }
  405. .pure-control-group label {
  406. word-wrap: normal;
  407. }
  408. /*
  409. * Light theme
  410. */
  411. .light-theme a:hover,
  412. .light-theme a:active,
  413. .light-theme summary:hover,
  414. .light-theme a:focus,
  415. .light-theme summary:focus {
  416. color: #075A9E !important;
  417. }
  418. .light-theme .pure-button-primary:hover,
  419. .light-theme .pure-button-primary:focus,
  420. .light-theme .pure-button-secondary:hover,
  421. .light-theme .pure-button-secondary:focus {
  422. color: #fff !important;
  423. border-color: rgba(0, 182, 240, 0.75) !important;
  424. background-color: rgba(0, 182, 240, 0.75) !important;
  425. }
  426. .light-theme .pure-button-secondary:not(.low-profile) {
  427. color: #335d7a;
  428. background-color: #fff2;
  429. }
  430. .light-theme a {
  431. color: #335d7a;
  432. text-decoration: none;
  433. }
  434. /* All links that do not fit with the default color goes here */
  435. .light-theme a:not([data-id]) > .icon,
  436. .light-theme .pure-u-lg-1-5 > .h-box > a[href^="/watch?"],
  437. .light-theme .playlist-restricted > ol > li > a {
  438. color: #303030;
  439. }
  440. .light-theme .pure-menu-heading {
  441. color: #565d64;
  442. }
  443. @media (prefers-color-scheme: light) {
  444. .no-theme a:hover,
  445. .no-theme a:active,
  446. .no-theme summary:hover,
  447. .no-theme a:focus,
  448. .no-theme summary:focus {
  449. color: #075A9E !important;
  450. }
  451. .no-theme .pure-button-primary:hover,
  452. .no-theme .pure-button-primary:focus,
  453. .no-theme .pure-button-secondary:hover,
  454. .no-theme .pure-button-secondary:focus {
  455. color: #fff !important;
  456. border-color: rgba(0, 182, 240, 0.75) !important;
  457. background-color: rgba(0, 182, 240, 0.75) !important;
  458. }
  459. .no-theme .pure-button-secondary:not(.low-profile) {
  460. color: #335d7a;
  461. background-color: #fff2;
  462. }
  463. .no-theme a {
  464. color: #335d7a;
  465. text-decoration: none;
  466. }
  467. /* All links that do not fit with the default color goes here */
  468. .no-theme a:not([data-id]) > .icon,
  469. .no-theme .pure-u-lg-1-5 > .h-box > a[href^="/watch?"],
  470. .no-theme .playlist-restricted > ol > li > a {
  471. color: #303030;
  472. }
  473. .no-theme footer {
  474. color: #7c7c7c;
  475. }
  476. .no-theme footer a {
  477. color: #7c7c7c !important;
  478. }
  479. .light-theme .pure-menu-heading {
  480. color: #565d64;
  481. }
  482. }
  483. /*
  484. * Dark theme
  485. */
  486. .dark-theme a:hover,
  487. .dark-theme a:active,
  488. .dark-theme summary:hover,
  489. .dark-theme a:focus,
  490. .dark-theme summary:focus {
  491. color: rgb(0, 182, 240);
  492. }
  493. .dark-theme .pure-button-primary:hover,
  494. .dark-theme .pure-button-primary:focus,
  495. .dark-theme .pure-button-secondary:hover,
  496. .dark-theme .pure-button-secondary:focus {
  497. color: #fff !important;
  498. border-color: rgb(0, 182, 240) !important;
  499. background-color: rgba(0, 182, 240, 1) !important;
  500. }
  501. .dark-theme .pure-button-secondary {
  502. background-color: #0002;
  503. color: #ddd;
  504. }
  505. .dark-theme a {
  506. color: #adadad;
  507. text-decoration: none;
  508. }
  509. body.dark-theme {
  510. background-color: rgba(35, 35, 35, 1);
  511. color: #f0f0f0;
  512. }
  513. .dark-theme .pure-form legend {
  514. color: #f0f0f0;
  515. }
  516. .dark-theme .pure-menu-heading {
  517. color: #f0f0f0;
  518. }
  519. .dark-theme input,
  520. .dark-theme select,
  521. .dark-theme textarea {
  522. color: rgba(35, 35, 35, 1);
  523. }
  524. .dark-theme .pure-form input[type="file"] {
  525. color: #f0f0f0;
  526. }
  527. .dark-theme .searchbar input {
  528. background-color: inherit;
  529. color: inherit;
  530. }
  531. @media (prefers-color-scheme: dark) {
  532. .no-theme a:hover,
  533. .no-theme a:active,
  534. .no-theme a:focus {
  535. color: rgb(0, 182, 240);
  536. }
  537. .no-theme .pure-button-primary:hover,
  538. .no-theme .pure-button-primary:focus,
  539. .no-theme .pure-button-secondary:hover,
  540. .no-theme .pure-button-secondary:focus {
  541. color: #fff !important;
  542. border-color: rgb(0, 182, 240) !important;
  543. background-color: rgba(0, 182, 240, 1) !important;
  544. }
  545. .no-theme .pure-button-secondary {
  546. background-color: #0002;
  547. color: #ddd;
  548. }
  549. .no-theme a {
  550. color: #adadad;
  551. text-decoration: none;
  552. }
  553. body.no-theme {
  554. background-color: rgba(35, 35, 35, 1);
  555. color: #f0f0f0;
  556. }
  557. .no-theme .pure-form legend {
  558. color: #f0f0f0;
  559. }
  560. .no-theme .pure-menu-heading {
  561. color: #f0f0f0;
  562. }
  563. .no-theme input,
  564. .no-theme select,
  565. .no-theme textarea {
  566. color: rgba(35, 35, 35, 1);
  567. }
  568. .no-theme .pure-form input[type="file"] {
  569. color: #f0f0f0;
  570. }
  571. .no-theme .searchbar input {
  572. background-color: inherit;
  573. color: inherit;
  574. }
  575. .no-theme footer {
  576. color: #adadad;
  577. }
  578. .no-theme footer a {
  579. color: #adadad !important;
  580. }
  581. }
  582. /*
  583. * Miscellanous
  584. */
  585. /*With commit d9528f5 all contents of the page is now within a flexbox. However,
  586. the hr element is rendered improperly within one.
  587. See https://stackoverflow.com/a/34372979 for more info */
  588. hr {
  589. margin: 10px 0 10px 0;
  590. }
  591. /* Description Expansion Styling*/
  592. #descexpansionbutton,
  593. #music-desc-expansion {
  594. display: none;
  595. }
  596. #descexpansionbutton ~ div {
  597. overflow: hidden;
  598. }
  599. #descexpansionbutton:not(:checked) ~ div {
  600. max-height: 8.3em;
  601. }
  602. #descexpansionbutton:checked ~ div {
  603. overflow: unset;
  604. height: 100%;
  605. }
  606. #descexpansionbutton ~ label {
  607. order: 1;
  608. margin-top: 20px;
  609. }
  610. label[for="descexpansionbutton"]:hover,
  611. label[for="music-desc-expansion"]:hover {
  612. cursor: pointer;
  613. }
  614. /* Bidi (bidirectional text) support */
  615. h1, h2, h3, h4, h5, p,
  616. #descriptionWrapper,
  617. #description-box,
  618. #music-description-box {
  619. unicode-bidi: plaintext;
  620. text-align: start;
  621. }
  622. #descriptionWrapper {
  623. max-width: 600px;
  624. white-space: pre-wrap;
  625. }
  626. #music-description-box {
  627. display: none;
  628. }
  629. #music-desc-expansion:checked ~ #music-description-box {
  630. display: block;
  631. }
  632. #music-desc-expansion ~ label > h3 > .ion-ios-arrow-up,
  633. #music-desc-expansion:checked ~ label > h3 > .ion-ios-arrow-down {
  634. display: none;
  635. }
  636. #music-desc-expansion:checked ~ label > h3 > .ion-ios-arrow-up,
  637. #music-desc-expansion ~ label > h3 > .ion-ios-arrow-down {
  638. display: inline;
  639. }
  640. /* Select all the music items except the first one */
  641. .music-item + .music-item {
  642. border-top: 1px solid #ffffff;
  643. }
  644. /* Center the "invidious" logo on the search page */
  645. #logo > h1 { text-align: center; }
  646. /* IE11 fixes */
  647. :-ms-input-placeholder { color: #888; }
  648. /* Wider settings name to less word wrap */
  649. .pure-form-aligned .pure-control-group label { width: 19em; }
  650. .channel-emoji {
  651. margin: 0 2px;
  652. }
  653. #download_widget {
  654. width: 100%;
  655. }