YouTube Live Borderless

Make YouTube Live Borderless

当前为 2023-01-14 提交的版本,查看 最新版本

  1. /* ==UserStyle==
  2. @name YouTube Live Borderless
  3. @version 0.4.6
  4. @namespace github.com/cyfung1031
  5. @license MIT
  6. @description Make YouTube Live Borderless
  7. @author CY Fung
  8. @supportURL https://github.com/cyfung1031/YouTube-Live-Borderless/
  9. @compatible edge Edge [Blink] >= 105; Stylus (Beta)
  10. @compatible chrome Chrome >= 105; Stylus (Beta); Chrome 101-104 requires "enable-experimental-web-platform-features"
  11. @compatible firefox FireFox >= 103; Stylus; layout.css.has-selector.enabled = true; note: some features might not be very stable!!
  12. @compatible opera Opera >= 91; Stylus (Beta)
  13. @compatible safari Safari >= 15.4; Stylus
  14. @preprocessor stylus
  15. @var select mode-for-two-col "Mode ##TwoColumns" {
  16. "Expanded Panel Only #Recommended": "expanded-panel",
  17. "Expanded Live Chat Only": "expanded-live",
  18. "Expandable Live Chat Only": "expandable-live",
  19. "Always": "always"
  20. }
  21. @var select mode-for-single-col "Mode ##SingleColumn" {
  22. "YT Mobile #Recommended": "mobile",
  23. "Normal": "normal",
  24. "Disabled": "disabled"
  25. }
  26. @var checkbox no-masthead "Top.MastheadBar ::Hide" 0
  27. @var number masthead-hoverable-h "Top.MastheadBar ::Hoverable >>>1_alwaysHide" [4, 1, 8, 1]
  28. @var checkbox disable-cinematics "CinematicsEffect ::Disable" 0
  29. @var range video-enlarging "Video.Enlarging >>>Video.Border.Fine.Tune" [0, 0, 8, 2]
  30. @var range video-padding-left-right "Video.Padding.LeftRight (Experimental)" [0, 0, 18, 2, 'px']
  31. @var range video-padding-top-bottom "Video.Padding.TopBottom (Experimental)" [0, 0, 18, 2, 'px']
  32. @var range primary-content-margin "PrimaryContent ::Margin" [24, 6, 48, 6, "px"]
  33. @var range video-title-size "VideoTitle ::Size" [2.0, 1.0, 3.0, 0.2, "rem"]
  34. @var checkbox no-bottom-row "Bottom.PrimaryMetaInfoRow ::Hide" 0
  35. @var range min-below-area "BelowArea ::Minimum >>>10px_disable" [120, 10, 240, 10, 'px']
  36. @var range min-below-area-for-theater "WideTheater.BelowArea ::Minimum >>>10px_disable" [120, 10, 240, 10, 'px']
  37. @var number side-panel-width "SidePanel ::Width" [440, 320, 640, 20, "px"]
  38. @var checkbox no-round-border "RoundBorder ::Disable" 1
  39. @var number chat-zoom-for-right-col "RightCol.Chat ::Zoom" [1.0, 0.4, 1.2, 0.05]
  40. @var range chat-btn-height "RightCol.Chat ::SpaceAbove@Zoom >>>4px_disable" [36, 4, 60, 4, 'px']
  41. @var number chat-zoom-for-mobile "YTMobile.Chat ::Zoom" [1.0, 0.4, 1.2, 0.05]
  42. @var range chat-min-height "YTMobile.Chat ::Min.Height" [400, 20, 900, 10, 'px']
  43. ==/UserStyle== */
  44. /*
  45.  
  46. @var range chrome-bottom-bar-margin "Chrome Bottom Bar Margin" [12, 6, 48, 6, "px"]
  47.  
  48. Chrome Bottom Bar Margin is 12px only due to
  49.  
  50. MU = function(a) {
  51. var b = a.u.ag()
  52. , c = a.G.getVideoData().D
  53. , d = 0;
  54. a.u.ag() && a.u.Me() && (d = (a.G.fb().getPlayerSize().width - a.G.getVideoContentRect().width) / 2);
  55. return 12 * (c ? 0 : b ? 2 : 1) + d
  56. }
  57.  
  58. */
  59.  
  60. @-moz-document url-prefix("https://www.youtube.com/watch?v=") {
  61.  
  62. dummy() {
  63. // dummy
  64. border: 0;
  65. }
  66. buildL4(type, args...) {
  67. st1 = join('', ':', type, '(', join('\, ', args), ')')
  68. selector(st1)
  69. }
  70.  
  71. if min-below-area <= 10px {
  72. min-below-area = 0px
  73. }
  74. if min-below-area-for-theater <= 10px {
  75. min-below-area-for-theater = 0px
  76. }
  77. chat-btn-height = chat-btn-height + 1px
  78. if chat-btn-height == 4px + 1px {
  79. chat-btn-height = 0px
  80. }
  81. masthead-hoverable-height = (masthead-hoverable-h - 1) * 2px
  82.  
  83. no-masthead-w = no-masthead //
  84. chrome-bottom-bar-margin = 12px // this cannot be changed
  85.  
  86. single-col-mobile = 0 //
  87. if mode-for-single-col == "mobile" {
  88. single-col-mobile = 1 //
  89. if no-masthead == 0 {
  90. no-masthead-w = 2 //
  91. }
  92. }
  93. chat-zoom-for-mobile-enable = ((chat-zoom-for-mobile < 1) or (chat-zoom-for-mobile > 1))
  94.  
  95. content361(){
  96. html {
  97. --ylb-min-below-area: min-below-area;
  98. }
  99. // general fix
  100. ytd-watch-flexy[theater] #player-theater-container.ytd-watch-flexy{
  101. min-height: unset;
  102. }
  103. #movie_player .ytp-cued-thumbnail-overlay-image {
  104. /* background-size: contain !important; */
  105. background-size: auto 100% !important;
  106. }
  107. ytd-watch-flexy:not([is-two-columns_]) ytd-watch-metadata {
  108. padding-top: var(--ytd-margin-3x);
  109. }
  110. ytd-watch-flexy:not([is-two-columns_]):not([fullscreen]) #primary.ytd-watch-flexy {
  111. padding-top: 0;
  112. margin-top: 0;
  113. }
  114.  
  115. }
  116.  
  117. //
  118. contentNoMasthead() {
  119.  
  120. // root = html
  121. &,
  122. & {buildL4('is', 'ytd-app', 'ytd-page-manager[class].style-scope', 'ytd-watch-flexy[class].style-scope')} {
  123. /* 0px not 0 */
  124. --ytd-masthead-height: 0px;
  125. --ytd-toolbar-height: 0px;
  126. --ytd-watch-flexy-masthead-height: 0px;
  127. }
  128.  
  129. #masthead-container {
  130. height: 0;
  131. --masthead-opacity: 0;
  132. opacity: var(--masthead-opacity) !important;
  133. transition: opacity 300ms;
  134. min-height: masthead-hoverable-height;
  135. contain: layout size style;
  136. }
  137.  
  138. #masthead-container > ytd-masthead {
  139. transform: translateY(-100%);
  140. transition: transform 300ms;
  141. }
  142.  
  143. if masthead-hoverable-height > 0 {
  144.  
  145.  
  146. #masthead-container:hover {
  147. --masthead-opacity: 1;
  148. }
  149.  
  150. #masthead-container:hover > ytd-masthead {
  151. transform: translateY(0%);
  152. }
  153.  
  154. #masthead-container::after {
  155. content: '';
  156. display: flex;
  157. width: 100%;
  158. height: masthead-hoverable-height;
  159. top: 0;
  160. z-index: 77;
  161. cursor: default;
  162. user-select: none !important;
  163. touch-action: none !important;
  164. box-sizing: border-box;
  165. padding: 0;
  166. margin: 0;
  167. }
  168. }
  169.  
  170. ytd-watch-flexy.style-scope[is-two-columns_]:not([fullscreen]):not([theater]) {
  171.  
  172. #columns.style-scope.ytd-watch-flexy,
  173. #primary.style-scope.ytd-watch-flexy,
  174. #primary-inner.style-scope.ytd-watch-flexy,
  175. #secondary.style-scope.ytd-watch-flexy,
  176. #secondary-inner.style-scope.ytd-watch-flexy {
  177. height: 100vh;
  178. max-height: 100%;
  179. }
  180. }
  181.  
  182. ytd-watch-flexy.style-scope[is-two-columns_][theater]:not([fullscreen]) {
  183.  
  184. height: 100vh;
  185. #player-theater-container.ytd-watch-flexy {
  186. flex: 77;
  187. max-height: unset;
  188. }
  189.  
  190. }
  191. &:not([tabview-loaded]) ytd-watch-flexy.style-scope[is-two-columns_][theater]:not([fullscreen]) {
  192. #player-theater-container.ytd-watch-flexy ~ #columns.style-scope.ytd-watch-flexy {
  193. overflow: visible;
  194. }
  195. }
  196.  
  197.  
  198. } //
  199. #microformat.ytd-watch-flexy{
  200. position: fixed;
  201. top:-200vh;
  202. left:-200vw;
  203. }
  204. contentSingleColMobile(){
  205. // html:has(ytd-watch-flexy:not([is-two-columns_]):not([fullscreen]))
  206. #chat:not([collapsed]) {
  207. --ytd-margin-2x: 0;
  208. --ytd-margin-4x: 0;
  209. --ytd-margin-6x: 0;
  210. --ytd-margin-8x: 0;
  211. height: 100% !important;
  212. min-height: unset !important;
  213. max-height: 100vh !important;
  214. // position:relative;
  215. // top:auto;
  216. // bottom:0;
  217. iframe#chatframe{
  218. min-height: 0px;
  219. }
  220.  
  221.  
  222.  
  223. if chat-zoom-for-mobile-enable {
  224.  
  225.  
  226. iframe-transform = 'scale(%s)' % chat-zoom-for-mobile
  227. iframe-ratio = 100% / chat-zoom-for-mobile
  228.  
  229. iframe#chatframe {
  230. position:absolute;
  231.  
  232. transform: iframe-transform;
  233. height: s('calc((100% - %s) / %s) !important', chat-btn-height, chat-zoom-for-mobile);
  234. max-height: unset !important;
  235. min-height: unset !important;
  236. transform-origin: 0 0;
  237. width: iframe-ratio !important;
  238. margin-top: chat-btn-height;
  239.  
  240.  
  241. }
  242.  
  243.  
  244. }
  245.  
  246.  
  247. }
  248.  
  249. &:has(#chat:not([collapsed])) {
  250.  
  251. #contentContainer.tp-yt-app-drawer[swipe-open].tp-yt-app-drawer::after {
  252.  
  253. content: unset;
  254.  
  255. }
  256. #primary-inner.ytd-watch-flexy ytd-comments#comments.ytd-watch-flexy,
  257. #below.ytd-watch-flexy > .ytd-watch-flexy{buildL4('is', '#related', 'ytd-watch-metadata')} {
  258. /* display:none !important; */
  259. position: fixed !important;
  260. transform: scale(0.01) !important;
  261. transform-origin: 0 0 !important;
  262. left: -100vw !important;
  263. top: -100vh !important;
  264. visibility: collaspe !important;
  265. pointer-events: none !important;
  266. user-select: none !important;
  267. touch-action: none !important;
  268. }
  269.  
  270. #secondary.ytd-watch-flexy {
  271. display:none !important;
  272. }
  273.  
  274.  
  275.  
  276. .efyt-control-bar {
  277. position: relative;
  278. display: inline-flex;
  279. top: auto;
  280. left: auto;
  281. z-index: 99999;
  282. opacity: 0.8;
  283. transform: translate(calc(-100% + 32px), 0) !important;
  284. }
  285.  
  286. .efyt-control-bar:hover {
  287. opacity: 1.0;
  288. background: var(--yt-spec-general-background-a);
  289. transform: translate(0px, 0) !important;
  290. }
  291.  
  292. #player {
  293. margin-bottom: 0;
  294. }
  295.  
  296. {buildL4('is', '#columns', '#primary')} {
  297. padding: 0;
  298. }
  299. --ylb-min-below-area: chat-min-height;
  300.  
  301. {buildL4('is', '#player', '#player-theater-container', '#player-container-outer', '#player-container-inner', '#player-container', '#movie_player', '#movie_player video')} {
  302. object-fit: contain;
  303. max-height: calc(100vh - var(--ytd-toolbar-height) - var(--ylb-min-below-area, 0px)) !important;
  304. }
  305.  
  306. #primary-inner.ytd-watch-flexy > :not(.style-scope) {
  307. display: none !important;
  308. }
  309.  
  310. #below > *:not(#chat) {
  311. /* display:none !important; */
  312. position: fixed !important;
  313. transform: scale(0.01) !important;
  314. transform-origin: 0 0 !important;
  315. left: -100vw !important;
  316. top: -100vh !important;
  317. visibility: collaspe !important;
  318. pointer-events: none !important;
  319. user-select: none !important;
  320. touch-action: none !important;
  321. }
  322.  
  323. #below:not(:has(#chat)) {
  324. display: none;
  325. }
  326.  
  327.  
  328. {buildL4('is', 'ytd-watch-flexy', '#columns.ytd-watch-flexy', '#primary.ytd-watch-flexy', '#primary-inner.ytd-watch-flexy')} {
  329. display: flex;
  330. flex-direction: column;
  331. margin: 0;
  332. flex: 1;
  333. }
  334.  
  335. #below {
  336. flex: 1;
  337. }
  338.  
  339. ytd-watch-flexy {
  340. height: 100vh !important;
  341. max-height: 100vh !important;
  342. }
  343.  
  344. ytd-watch-flexy{buildL4('is', '[theater]', '[fullscreen]')} #player-theater-container.ytd-watch-flexy {
  345.  
  346. min-height: unset !important;
  347. }
  348. }
  349. }
  350.  
  351. content2c() {
  352.  
  353. if chat-zoom-for-right-col >1 or chat-zoom-for-right-col < 1 {
  354. ytd-watch-flexy[is-two-columns_]:not([fullscreen]) iframe#chatframe {
  355. position:absolute;
  356. margin-top:chat-btn-height;
  357.  
  358. transform: 'scale(%s)' % chat-zoom-for-right-col;
  359. transform-origin: 0 0;
  360. width: '%s !important' % (100% / chat-zoom-for-right-col);
  361. max-width: unset !important;
  362. height: s('calc( (100% - %s) / %s ) !important', chat-btn-height, chat-zoom-for-right-col);
  363. z-index: 1; /* for normal youtube */
  364.  
  365. }
  366.  
  367. }
  368.  
  369. if no-masthead-w==2 {
  370. //
  371. } else if no-masthead-w==1 {
  372. //
  373. } else {
  374.  
  375. ytd-watch-flexy.style-scope[is-two-columns_]:not([theater]):not([fullscreen]) {
  376.  
  377. .style-scope.ytd-watch-flexy{buildL4('is', '#secondary', '#secondary-inner')} {
  378. height: calc(100vh - var(--ytd-toolbar-height));
  379. max-height: 100%;
  380. }
  381. }
  382. }
  383.  
  384. ytd-watch-flexy[is-two-columns_]:not([fullscreen]) #movie_player {
  385. .ytp-chrome-bottom[style*="width"] {
  386. width: unset !important;
  387. left: chrome-bottom-bar-margin !important;
  388. right: chrome-bottom-bar-margin !important;
  389. }
  390.  
  391. }
  392. ytd-watch-flexy:not([is-two-columns_]):not([fullscreen]) #movie_player {
  393. .ytp-chrome-bottom[style*="width"] {
  394. left: 50% !important;
  395. transform: translateX(-50%);
  396. }
  397.  
  398. }
  399.  
  400. ytd-watch-flexy.style-scope[is-two-columns_]:not([theater]):not([fullscreen]) ytd-live-chat-frame#chat:not([collapsed]) {
  401. min-height: unset;
  402. }
  403.  
  404.  
  405. ytd-watch-flexy.style-scope[is-two-columns_]:not([fullscreen]) #primary-inner.ytd-watch-flexy > *:not(#player) {
  406. padding: 0 primary-content-margin 0;
  407. }
  408.  
  409.  
  410. ytd-watch-flexy.style-scope[is-two-columns_]:not([theater]):not([fullscreen]) #player
  411. .ytd-watch-flexy{buildL4('is', '#player-container-outer', '#player-container-inner', '#player-container')}{
  412.  
  413. // layout outside
  414. // no effect
  415. // layout inside
  416. max-height: calc(100vh - var(--ytd-toolbar-height, 0px) - var(--ylb-min-below-area, 0px)); // for very wide screen
  417. }
  418.  
  419. ytd-watch-flexy.style-scope[is-two-columns_][theater]:not([fullscreen]) #player-theater-container.ytd-watch-flexy {
  420. max-height: calc(100vh - var(--ytd-toolbar-height, 0px) - var(--ylb-min-below-area, 0px)); // for 4:3 video
  421. }
  422.  
  423.  
  424. body.lock-scrollbar[style*="overflow"][style*="hidden"]:has(ytd-watch-flexy[is-two-columns_]:not([hidden])):has(#movie_player) {
  425. overflow-y: unset !important;
  426. }
  427.  
  428.  
  429. ytd-watch-flexy.style-scope[is-two-columns_] #columns.ytd-watch-flexy > #secondary.ytd-watch-flexy {
  430. width: side-panel-width;
  431. }
  432.  
  433.  
  434. }
  435.  
  436. contentf() {
  437. // html
  438. if (video-padding-left-right + video-padding-top-bottom) > 0 {
  439. #player-container-outer.ytd-watch-flexy {
  440. padding-left: video-padding-left-right;
  441. padding-right: video-padding-left-right;
  442. padding-top: video-padding-top-bottom;
  443. padding-bottom: video-padding-top-bottom;
  444. }
  445. }
  446.  
  447. body ytd-watch-flexy[flexy] #player-container-outer.ytd-watch-flexy {
  448. max-width: unset; // override var(--ytd-watch-flexy-max-player-width);
  449. }
  450.  
  451. &:not([tabview-loaded]) {
  452. body ytd-watch-flexy[flexy][is-two-columns_]{buildL4('is', '[is-extra-wide-video_]', '[is-four-three-to-sixteen-nine-video_]')} #primary.ytd-watch-flexy{
  453. max-width: unset; // override var(--ytd-watch-flexy-max-player-width);
  454. }
  455.  
  456. {buildL4('is',
  457. '#primary-inner.ytd-watch-flexy ytd-comments#comments.ytd-watch-flexy',
  458. '#secondary-inner.ytd-watch-flexy > #related.ytd-watch-flexy')} {
  459. display: none !important;
  460. }
  461.  
  462. ytd-watch-flexy:not([fullscreen]) #player-theater-container {
  463. max-height: calc(100vh - var(--ytd-toolbar-height) - var(--ylb-min-below-area, 0px)) !important;
  464. }
  465.  
  466. #cinematics {
  467. // contain: layout;
  468. contain: layout size style;
  469. user-select: none;
  470. touch-action: none;
  471. pointer-events: none;
  472. }
  473. ytd-watch-flexy[is-two-columns_]:not([theater]):not([fullscreen]) {buildL4('is',
  474. '#columns', '#primary', '#primary-inner', '#secondary', '#secondary-inner')} {
  475. height: calc(100vh - var(--ytd-toolbar-height));
  476. }
  477. }
  478. if video-enlarging > 0 {
  479. ytd-watch-flexy:not([theater]):not([fullscreen]) #movie_player video[src] {
  480. transform: 'scale(%s)' % (video-enlarging / 1000 + 1) ;
  481. transform-origin: 50% 50%;
  482. }
  483. }
  484.  
  485.  
  486. if no-masthead-w==2 {
  487. //
  488. } else if no-masthead-w==1 {
  489.  
  490. contentNoMasthead()
  491. }
  492. ytd-watch-flexy[flexy][is-two-columns_][theater]:not([fullscreen]) {
  493. --ylb-min-below-area: min-below-area-for-theater;
  494. {buildL4('is', '#player', '#player-theater-container', '#player-container-outer', '#player-container-inner', '#player-container', '#movie_player', '#movie_player video')} {
  495. object-fit: contain;
  496. max-height: calc(100vh - var(--ytd-toolbar-height) - var(--ylb-min-below-area, 0px)) !important;
  497. }
  498. }
  499.  
  500.  
  501.  
  502. if no-bottom-row {
  503.  
  504. #bottom-row.ytd-watch-metadata {
  505. display: none !important;
  506. }
  507. }
  508.  
  509. h1.ytd-watch-metadata {
  510. font-size: video-title-size;
  511. --font-size: video-title-size;
  512. line-height: 140%;
  513. margin-bottom: -2px;
  514. }
  515.  
  516.  
  517. ytd-watch-flexy.style-scope:not([fullscreen]) {
  518.  
  519. & {
  520. --ytd-margin-2y: var(--ytd-margin-2x);
  521. --ytd-margin-4y: var(--ytd-margin-4x);
  522. --ytd-margin-6y: var(--ytd-margin-6x);
  523. --ytd-margin-8y: var(--ytd-margin-8x);
  524. }
  525.  
  526. #columns.style-scope.ytd-watch-flexy {
  527. --ytd-margin-2x: 0;
  528. --ytd-margin-4x: 0;
  529. --ytd-margin-6x: 0;
  530. --ytd-margin-8x: 0;
  531. }
  532.  
  533. .style-scope.ytd-watch-flexy > :not(.ytd-watch-flexy),
  534. #below,
  535. #player {
  536. --ytd-margin-2x: var(--ytd-margin-2y);
  537. --ytd-margin-4x: var(--ytd-margin-4y);
  538. --ytd-margin-6x: var(--ytd-margin-6y);
  539. --ytd-margin-8x: var(--ytd-margin-8y);
  540. }
  541.  
  542. #secondary-inner.style-scope.ytd-watch-flexy {
  543. display: flex;
  544. flex-direction: column;
  545. height: 100%;
  546. }
  547.  
  548. #movie_player {
  549. position: relative;
  550. > .html5-video-container:has(video) {
  551. top: 0;
  552. bottom: 0;
  553. left: 0;
  554. right: 0;
  555. position: absolute;
  556. }
  557.  
  558. .html5-video-container > video {
  559. width: unset !important;
  560. height: 100% !important;
  561. left: 0 !important;
  562. right: 0 !important;
  563. max-height: 100%;
  564. max-width: 100%;
  565. margin: 0 auto;
  566. }
  567.  
  568. /*
  569. .ytp-iv-video-content {
  570. width: 100% !important;
  571. height: 100% !important;
  572. }
  573. */
  574.  
  575. /*
  576. // this is buggy; eg multiple chapter hover container; can be fixed by YouTube Video Resize Fix Only
  577. .ytp-chapter-hover-container[style*="width"] {
  578. width: 100% !important;
  579. }
  580. */
  581. .html5-video-container > video[style*="top:"]:not(video[style*="top: -"]):not(video[style*="top:-"]) {
  582. top: 0 !important;
  583. }
  584.  
  585. }
  586.  
  587. #chat:not([collapsed]) {
  588. flex: 77;
  589. }
  590.  
  591. #right-tabs {
  592. display: flex;
  593. margin: 0 !important;
  594. flex: 1;
  595. flex-direction: column;
  596.  
  597. {buildL4('is', '#material-tabs', '.tab-content')} {
  598. outline: 0;
  599. }
  600.  
  601. .tab-content {
  602. flex: 77;
  603. }
  604. }
  605.  
  606. &:not([is-two-columns_]) #primary-inner > *:not(#player) {
  607. padding: 0;
  608. }
  609.  
  610. &:not([is-two-columns_]) #primary-inner #below > *:not(ytd-live-chat-frame#chat) {
  611. padding: 0 primary-content-margin 0;
  612. }
  613. /*
  614. #player-container-outer.ytd-watch-flexy {
  615. max-width: unset;
  616. }
  617. */
  618. }
  619.  
  620.  
  621.  
  622. if no-round-border {
  623.  
  624. ytd-live-chat-frame[rounded-container],
  625. ytd-live-chat-frame[rounded-container] #show-hide-button.ytd-live-chat-frame ytd-toggle-button-renderer.ytd-live-chat-frame,
  626. ytd-live-chat-frame[rounded-container] iframe.ytd-live-chat-frame,
  627. ytd-live-chat-frame[rounded-container] #show-hide-button.ytd-live-chat-frame ytd-toggle-button-renderer.ytd-live-chat-frame button.yt-spec-button-shape-next,
  628. ytd-live-chat-frame[rounded-container] #show-hide-button.ytd-live-chat-frame ytd-toggle-button-renderer.ytd-live-chat-frame button.yt-spec-button-shape-next:hover {
  629. border-radius: unset;
  630. }
  631. }
  632.  
  633.  
  634. if disable-cinematics {
  635. #cinematics.ytd-watch-flexy {
  636. display: none;
  637. }
  638. }
  639. } //
  640. contentg() {
  641.  
  642. content2c() //
  643. selector-g = '&' //
  644. if mode-for-single-col=="disabled" { //
  645. selector-g = '&:has(ytd-watch-flexy[is-two-columns_])' //
  646. } //
  647. {s(selector-g)} { //
  648. // html
  649. contentf() //
  650. } //
  651. }
  652. content361() //
  653. selectors-2col = { //
  654. "expanded-panel": join(', ',
  655. "html:not([tabview-loaded]):has(ytd-live-chat-frame#chat:not([collapsed])):has(iframe#chatframe)",
  656. "html[tabview-loaded]:has(ytd-watch-flexy[is-two-columns_]:not([fullscreen]):not([theater]))"
  657. ),
  658. "expanded-live": "html:has(ytd-live-chat-frame#chat:not([collapsed])):has(iframe#chatframe)",
  659. "expandable-live": "html:has(ytd-live-chat-frame#chat):has(iframe#chatframe)",
  660. "always": "html"
  661. } //
  662. selector-2col = selectors-2col[mode-for-two-col]
  663. selectors-k = split(', ', selector-2col)
  664. for selector-k in selectors-k {
  665. {s(selector-k)} {
  666. contentg() //
  667. }
  668. }
  669.  
  670. if single-col-mobile {
  671. &:has(ytd-watch-flexy:not([is-two-columns_]):not([fullscreen])) {
  672.  
  673. if no-masthead-w>=1 {
  674. contentNoMasthead()
  675. }
  676. contentSingleColMobile()
  677. }
  678. }
  679. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址