Iwara UI Fix

An alternate style for 天音's Iwara 1-Click Filter script, also works as a standalone

À partir de 2020-03-03. Voir la dernière version.

  1. // ==UserScript==
  2. // @name Iwara UI Fix
  3. // @namespace none
  4. // @version 1.5
  5. // @description An alternate style for 天音's Iwara 1-Click Filter script, also works as a standalone
  6. // @author Nothson
  7. // @license CC BY-NC
  8. // @resource https://creativecommons.org/licenses/by-nc/4.0/
  9. // @match https://*.iwara.tv/*
  10. // @grant none
  11. // @run-at document-start
  12. // ==/UserScript==
  13.  
  14. /*
  15. --- Iwara UI Fix by Nothson : https://iwara.tv/users/Nothson ---
  16.  
  17. Mainly for scratching the Iwara's UI/UX itches I have.
  18. I'm not a senior web dev so plz don't scold me if the code below looks messy to you.
  19.  
  20. 3 Mar 2020
  21.  
  22. - Changed the approach to replace the blank images, there were some corner cases that make errors
  23. - Added profile picture border for special roles (profile page only) + unique animated border for my own
  24. - Added script version number at the bottom of the page
  25.  
  26. 2 Mar 2020
  27. - Now, this script has conflicts with Iwara 1-Click Filter version 1.6 and newer
  28. - See the note at the bottom of any Iwara page for the workaround
  29.  
  30. 1 Mar 2020
  31.  
  32. - Added like percentage
  33. - Polaroid print style for video/image cards
  34. - Repositioned the card stats & icons
  35. - Added flairs, shown on the right of the card stats
  36. - Fire Icon: % like reaches the threshold (based on view count) + 200 views or more
  37. - Star Icon: % like reaches the threshold + 20k views or more
  38. - Lock Icon: Private video
  39. - Grid Icon: Multiple images
  40. - Screen Icon: External player (YouTube, Vimeo, etc.)
  41. - Card transitions on hover + extra transitions for some flairs
  42. - Added block backgrounds on many regions + made paddings and margins consistent
  43. - Fixed video player seek head
  44. - Changed forum post timestamp text color
  45. - Fixed user profile background, user lists (following/followers), and layout
  46. - Perhaps a few more things I did but couldn't remember, idk
  47.  
  48. Expected to run after Erono's Iwara 1-Click Filter Script: https://greasyfork.org/scripts/393957
  49. However, this script works as a standalone UI fix as well
  50. Tested on the latest version of Firefox & Chrome, plus responsive
  51. */
  52.  
  53. window.addEventListener('load', async function() {
  54. if (!window.location.href.match('://i.iwara.tv')) {
  55. let oneClickFilterConflict = document.head.querySelector('#css_custom') || document.head.querySelector('#css_likes');
  56. let baseCSS = document.createElement('style'); // Add original CSS rules from 1-Click Filter
  57. baseCSS.innerHTML = `
  58. /* ads */
  59. /*
  60. .block-extra-content, .extra-content-block {display: none;}
  61. */
  62.  
  63. /* fix page */
  64. body {background-color: #eee;}
  65. section#content > .container {background-color: #eee; padding: 10px;}
  66. .container {width: unset;}
  67. @media (min-width: 1300px) {.container {width: 1300px;}}
  68.  
  69. /* fix overflow */
  70. #block-system-main, .row {margin-left: 0; margin-right: 0;}
  71. .col-sm-3, .col-sm-6, .col-sm-9, .col-xs-6, .col-sm-12 {padding-left: 0; padding-right: 0;}
  72. .view-videos .view-content .views-row, .view-images .view-content .views-row {padding-bottom: 0px;}
  73.  
  74. /* compact page */
  75. .view-content .col-sm-3, .view-content .col-sm-6 {width: 50%; float: left;}
  76. @media (min-width: 768px) {
  77. .view-content .col-sm-3 {width: 25%;}
  78. }
  79.  
  80. /* card style */
  81. .node.node-teaser {background-color: #ffffff; border: 1px solid #ccc; border-radius: 4px; padding: 5px; margin: 4px;}
  82. .node.node-teaser .icon-bg, .node.node-teaser .private-video {width: calc(100% - 10px);}
  83. .node.node-teaser .icon-bg .likes-icon {filter: drop-shadow(0px 0px 2px #000);}
  84. .node.node-teaser h3.title {font-size: 1em; line-height: 1em; height: 3em; margin-bottom: 0px; overflow: hidden;}
  85. .node.node-teaser .username {display: block; white-space: nowrap; overflow: hidden;}
  86. .node.node-teaser .field-item {min-height: 2em;}
  87. .node.node-video .content {margin: 4px;}
  88. .sidebar .block.block-views,
  89. .sidebar .block.block-facetapi,
  90. .sidebar .block.block-mainblocks {background-color: #fafafa; border: 1px solid #ccc; border-radius: 4px; padding: 8px; margin: 4px 4px 8px 4px;}
  91. .sidebar .node.node-sidebar_teaser {background-color: #ffffff; border: 1px solid #ccc; border-radius: 2px; padding: 4px; margin: 2px;}
  92. .sidebar .node.node-sidebar_teaser .icon-bg, .node.node-sidebar_teaser .private-video {width: calc(100% - 8px);}
  93. .sidebar .node.node-sidebar_teaser .icon-bg .likes-icon {filter: drop-shadow(0px 0px 2px #000);}
  94. .item-list ul.pager li {margin: 0; padding: 0;}
  95. .item-list ul.pager li.pager-current,
  96. .item-list ul.pager li.pager-ellipsis,
  97. .item-list ul.pager li > a {background: #fafafa; border: 1px solid #ccc; border-radius: 8px; padding: 4px 16px; margin: 0px; display: inline-block;}
  98.  
  99. /* video style for external link (youtube) */
  100. /*
  101. .node.node-teaser .field-type-video-embed-field {border: 4px solid #c33; background-color: #000;}
  102. .node.node-teaser .field-type-video-embed-field .field-items {overflow: hidden;}
  103. .node.node-teaser .field-type-video-embed-field .field-items .field-item {margin: -4px;}
  104. */
  105.  
  106. /* image style in subscriptions page */
  107. .view-subscriptions .field-type-image {border: 1px solid #ccc; background-color: #fff; padding: 5px;}
  108. .view-subscriptions .field-type-image .field-items {overflow: hidden;}
  109. .view-subscriptions .field-type-image .field-items .field-item {margin: -6px;}
  110.  
  111. /* search and playist */
  112. .node-wide_teaser {background-color: #fafafa; border: 1px solid #ccc; border-radius: 4px; padding: 4px; margin: 4px;}
  113. .node-wide_teaser {width: unset; word-break: break-all; min-height: 170px;}
  114. .node-wide_teaser .col-sm-2 {width: 230px; padding: 4px;}
  115. .node-wide_teaser .col-sm-10 {width: calc(100% - 230px); padding: 4px;}
  116. .node-wide_teaser .field-name-field-video {border: 1px solid #999;}
  117. .node-wide_teaser .field-name-field-video-url {border: 1px solid #999; position: absolute; top: 0px; left: -230px; margin: 4px;}
  118. @media (max-width: 768px) {.node-wide_teaser .field-name-field-video-url {display: none;}}
  119. .node-wide_teaser .field-name-field-images .field-item {display: unset;}
  120. .node-wide_teaser .field-name-field-images .field-item > a > img {width: calc(100%/3 - 8px); border: 1px solid #aaa; padding: 4px; margin: 4px;}
  121. .node-wide_teaser .field-name-field-images .field-item > video {width: calc(100%/1 - 8px); margin: 4px; border: 1px solid #aaa; padding: 4px; height: auto;}
  122. .node-wide_teaser .node-info {padding: 4px;}
  123. .node-wide_teaser .node-info .submitted {display: inline-block; width: 100%;}
  124. .node-wide_teaser .node-info .submitted h1.title {font-size: 28px; position: unset; margin: unset;}
  125. ul.facetapi-facetapi-tagcloud li > a {white-space: normal;}
  126. ul.facetapi-facetapi-tagcloud .element-invisible {display: none;}
  127.  
  128. /* footer */
  129. #wrapper {margin-bottom: unset; padding-bottom: unset;}
  130. footer {height: unset;}
  131. footer .block {width: 25%; float: left;}
  132. footer .block.block-forum {width: 50%;}
  133. footer .copyright {float: unset;}
  134.  
  135. /* video player */
  136. /* expand volume and seekbar height */
  137. .video-js .vjs-volume-bar {margin: 1em 0em;}
  138. .video-js .vjs-volume-bar.vjs-slider-horizontal, .video-js .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level {height: 1em;}
  139. .video-js .vjs-progress-holder, .video-js .vjs-progress-holder .vjs-load-progress, .video-js .vjs-progress-holder .vjs-play-progress {height: 1em;}
  140. `;
  141. baseCSS.id = 'xtension-base-css';
  142. document.head.appendChild(baseCSS);
  143. let cards = document.querySelectorAll('.node-teaser, .node-sidebar_teaser');
  144. Math.logn = function logn (val, base) {
  145. return Math.log(val) / Math.log(base);
  146. }
  147. function kilo2Number (text) {
  148. if (text.match('k') == null) {
  149. return {value: parseInt(text), isKilo: false};
  150. }
  151. else {
  152. return {value: parseFloat(text.replace('k', '')) * 1000, isKilo: true};
  153. }
  154. }
  155. function getFlair (viewCount, likePercentage, card) {
  156. if (card.querySelector('.private-video')) {
  157. return 'lock';
  158. }
  159. else if ((card.className.match('node-sidebar_teaser') && card.children.length > 2) || card.children.length > 4) {
  160. return 'share';
  161. }
  162. else {
  163. let likeThreshold = 8 - Math.logn(viewCount, 6);
  164. if (viewCount < 200) {
  165. return '';
  166. }
  167. else if (viewCount < 20000) {
  168. return (likePercentage > likeThreshold) ? 'fire' : '';
  169. }
  170. else {
  171. return (likePercentage > likeThreshold) ? 'star' : '';
  172. }
  173. }
  174. }
  175.  
  176. // HTML Mod
  177. cards.forEach(card => {
  178. let icons = card.querySelector('.icon-bg');
  179. if (icons) { // Rearrange stat icons, add like percentage and flairs
  180. if ((card.className.match('node-sidebar_teaser') && card.children.length > 1) || card.children.length > 3) {
  181. card.insertBefore(icons, card.children[2]);
  182. }
  183. else {
  184. card.insertBefore(icons, card.children[1]);
  185. }
  186. if (card.className.match('node-image') && icons.children.length == 3) {
  187. icons.appendChild(icons.children[1]);
  188. icons.appendChild(icons.children[0]);
  189. }
  190. else if (icons.children.length == 2) {
  191. icons.appendChild(icons.children[0]);
  192. }
  193.  
  194. let likeNode = icons.querySelector('.glyphicon-heart');
  195. if (likeNode && !(card.className.match('node-image') && card.className.match('node-sidebar_teaser'))) {
  196. likeNode = likeNode.nextSibling;
  197. let viewNode = icons.querySelector('.glyphicon-eye-open').nextSibling;
  198. let likeTxt = likeNode.wholeText.trim();
  199. let like = kilo2Number(likeTxt);
  200. let viewCount = kilo2Number(viewNode.wholeText.trim());
  201. let likePercentage = (viewCount == 0) ? 0 : parseFloat(like.value / viewCount.value * 100).toFixed(2);
  202. if (!card.className.match('node-sidebar_teaser')) {
  203. likeNode.nodeValue = ' ' + likeTxt;
  204. let likePercentageHTML = document.createElement('div');
  205. likePercentageHTML.className += 'right-icon likes-icon like-percentage';
  206. if (like.isKilo || viewCount.isKilo) {
  207. likePercentageHTML.innerText = '(~' + likePercentage + '%)';
  208. }
  209. else {
  210. likePercentageHTML.innerText = '(' + likePercentage + '%)';
  211. }
  212. likeNode.parentElement.parentElement.appendChild(likePercentageHTML);
  213. }
  214. if (card.className.match('node-video')) {
  215. let flair = getFlair(viewCount.value, likePercentage, card);
  216. if (flair) {
  217. card.className += ' flair-' + flair;
  218. let flairNode = document.createElement('div');
  219. flairNode.setAttribute('class', 'left-icon flair-icon');
  220. flairNode.innerHTML = '<i class="glyphicon glyphicon-' + flair + '" title="Flair"></i>';
  221. icons.appendChild(flairNode);
  222. }
  223. }
  224. }
  225. }
  226. else {
  227. let blankFooter = document.createElement('div');
  228. blankFooter.setAttribute('class', 'icon-bg');
  229. card.appendChild(blankFooter);
  230. }
  231.  
  232. let thumbnail = card.querySelector('a > img');
  233. if (!thumbnail) { // Fix inconsistent height of the cards with no thumbnail
  234. let imgArea = card.firstElementChild;
  235. let title = card.querySelector('h3.title > a');
  236. if (!title) {
  237. title = card.querySelector('.field-item > a');
  238. }
  239. let url = (title) ? title.getAttribute('href') : '';
  240. imgArea.innerHTML = '<div class="field blankimg"><div class="field-items"><div class="field-item"><a' +
  241. (url ? ' href="' + url + '"' : '') +
  242. (title ? ' title="' + title.innerText + '"' : '') +
  243. '>' +
  244. (card.className.match('node-sidebar_teaser') ? '<img width="141" height="84"></img>' : '<img width="220" height="150"></img>') +
  245. '</a></div></div></div>';
  246. }
  247. });
  248.  
  249. let contentInfo = document.querySelector('body.node-type-video .node.node-video .node-info .node-views, body.node-type-image .node.node-image .node-info .node-views');
  250. if (contentInfo) { // Add like percentage for a video/image page
  251. let heartIcon = contentInfo.querySelector('.glyphicon.glyphicon-heart');
  252. if (heartIcon) {
  253. let eyeIcon = contentInfo.querySelector('.glyphicon.glyphicon-eye-open');
  254. let viewCount = parseInt(eyeIcon.nextSibling.nodeValue.replace(/,/g, ''));
  255. let like = parseInt(heartIcon.nextSibling.nodeValue.replace(/,/g, ''));
  256. let likePercentage = (viewCount == 0) ? 0 : parseFloat(like / viewCount * 100).toFixed(4);
  257. heartIcon.nextSibling.nodeValue = ' ' + like + ' (' + likePercentage + '%)';
  258. contentInfo.appendChild(contentInfo.querySelector('.glyphicon.glyphicon-heart'));
  259. contentInfo.appendChild(contentInfo.querySelector('.glyphicon.glyphicon-eye-open').previousSibling);
  260. }
  261. }
  262.  
  263. let copyrightNode = document.querySelector('footer .copyright');
  264. if (copyrightNode) { // Add script credits
  265. let innerHTMLExt = '<br><a href="https://greasyfork.org/en/scripts/397126"><b>Iwara UI Fix</b></a> version 1.5 by <u><b><a href="https://iwara.tv/users/nothson">Nothson</a></b></u><br><b>Note:</b> <u><b><a href="https://ecchi.iwara.tv/images/iwara-1-click-filter">Iwara 1-Click Filter</a></b></u>\'s <b>User Style</b> and/or <b>Like Colors</b> are enabled. Disable them in the in-page settings, then refresh to prevent style conflict.';
  266. if (!oneClickFilterConflict) {
  267. innerHTMLExt = '<br><a href="https://greasyfork.org/en/scripts/397126"><b>Iwara UI Fix</b></a> version 1.5 by <u><b><a href="https://iwara.tv/users/nothson">Nothson</a></b></u><br><i>Based on CSS rules from <u><b><a href="https://ecchi.iwara.tv/images/iwara-1-click-filter">Iwara 1-Click Filter</a></b></u> (version 1.5) by <u><b><a href="https://iwara.tv/users/erono">Erono</a></b></u></i>.';
  268. }
  269. copyrightNode.innerHTML = copyrightNode.firstChild.nodeValue + innerHTMLExt;
  270. }
  271. let addForumCommentElement = document.querySelectorAll('#forum-comments h2.comment-form, #forum-comments noscript, #forum-comments #comment-form');
  272. if (addForumCommentElement.length > 0) { // Wrap forum's "Add new comment" section in a block
  273. let commentBlock = document.createElement('div');
  274. commentBlock.id = 'add-forum-comment-block';
  275. addForumCommentElement.forEach(elem => {
  276. commentBlock.appendChild(elem);
  277. });
  278. document.getElementById('forum-comments').appendChild(commentBlock);
  279. }
  280. let creatorProfileCard = document.querySelector('body.page-user.page-user- #block-views-profile-block .field-content');
  281. if (creatorProfileCard) {
  282. if (document.body.className.match('page-user-603563')) { // My special profile pic border + tooltip
  283. creatorProfileCard.innerHTML = creatorProfileCard.innerHTML + creatorProfileCard.innerHTML + creatorProfileCard.innerHTML + creatorProfileCard.innerHTML + creatorProfileCard.innerHTML + creatorProfileCard.innerHTML;
  284. creatorProfileCard.children[4].setAttribute('src', 'https://i.imgur.com/fQZC1bB.png');
  285. creatorProfileCard.setAttribute('title', 'The creator of "Iwara UI Fix"');
  286. }
  287. else { // User role profile pic border
  288. let role = document.querySelector('body.page-user.page-user- #content div.content > div.profile > div:last-child > ul > li');
  289. if (role) {
  290. switch (role.innerText) {
  291. case 'administrator':
  292. creatorProfileCard.className += ' role-admin';
  293. creatorProfileCard.setAttribute('title', 'Administrator');
  294. break;
  295. case 'moderator':
  296. creatorProfileCard.className += ' role-mod';
  297. creatorProfileCard.setAttribute('title', 'Moderator');
  298. break;
  299. }
  300. role = role.parentElement.parentElement;
  301. role.parentElement.removeChild(role);
  302. }
  303. }
  304. }
  305. // CSS Override
  306. let styleOverride = document.createElement('style');
  307. styleOverride.id = 'xtension-css';
  308. styleOverride.innerHTML = `
  309. .node.node-teaser,
  310. .node.node-sidebar_teaser,
  311. .node.node-teaser i,
  312. .node.node-sidebar_teaser i,
  313. .node.node-teaser img,
  314. .node.node-sidebar_teaser img {
  315. transition: 0.15s!important;
  316. }
  317.  
  318. /*
  319. .node.node-teaser img,
  320. .node.node-sidebar_teaser img {
  321. filter: contrast(0)!important;
  322. }
  323. */
  324.  
  325. .node.node-teaser h3.title,
  326. .node.node-sidebar_teaser h3.title {
  327. height: auto!important;
  328. white-space: nowrap!important;
  329. text-overflow: ellipsis!important;
  330. }
  331.  
  332. .node.node-teaser:hover,
  333. .node.node-sidebar_teaser:hover {
  334. box-shadow: 3pt 12pt 12pt -6pt #0004;
  335. transform: rotate3d(0.9, -0.1, 0.1, 3deg) scale(1.02);
  336. z-index: 42;
  337. }
  338.  
  339. .node.node-teaser.flair-fire:hover,
  340. .node.node-sidebar_teaser.flair-fire:hover {
  341. transform: rotate3d(0.9, -0.1, 0.1, -4.5deg) scale(1.02);
  342. border-color: #f40a;
  343. }
  344.  
  345. .node.node-teaser.flair-star:hover,
  346. .node.node-sidebar_teaser.flair-star:hover {
  347. transform: rotate3d(-0.9, 0.1, -0.2, 4.5deg) scale(1.04);
  348. filter: drop-shadow(-0.2em -0.2em 2em #ffe8);
  349. outline: 0.32em solid #fe8;
  350. border: 0;
  351. border-radius: 0;
  352. }
  353.  
  354. .views-responsive-grid.views-responsive-grid-horizontal.views-columns-2 > * {
  355. margin-bottom: 0;
  356. }
  357.  
  358. .node.node-teaser .icon-bg,
  359. .node.node-sidebar_teaser .icon-bg {
  360. width: 100%!important;
  361. position: unset;
  362. margin-top: 0.4em;
  363. padding: 0;
  364. }
  365.  
  366. .node.node-sidebar_teaser .icon-bg {
  367. min-height: 1.35em;
  368. }
  369.  
  370. .node:hover .icon-bg {
  371. background: unset!important;
  372. }
  373.  
  374. .node.node-teaser .left-icon,
  375. .node.node-sidebar_teaser .left-icon {
  376. color: inherit;
  377. margin-left: 0.1em;
  378. font-size: 0.8em;
  379. filter: unset!important;
  380.  
  381. }
  382.  
  383. .node.node-teaser .right-icon,
  384. .node.node-sidebar_teaser .right-icon {
  385. float: left!important;
  386. color: inherit;
  387. margin-left: 0.5em;
  388. font-size: 0.8em;
  389. filter: unset!important;
  390. }
  391.  
  392. .node-image.node-sidebar_teaser .right-icon:first-of-type {
  393. margin-left: 0;
  394. }
  395.  
  396. .node.node-teaser .left-icon.multiple-icon,
  397. .node.node-sidebar_teaser .left-icon.multiple-icon {
  398. float: right!important;
  399. color: inherit;
  400. margin-left: 0.5em;
  401. font-size: 0.8em;
  402. filter: unset!important;
  403. }
  404.  
  405. .node.node-teaser .left-icon.flair-icon,
  406. .node.node-sidebar_teaser .left-icon.flair-icon {
  407. float: right!important;
  408. color: inherit;
  409. margin-right: 0.1em;
  410. font-size: 0.8em;
  411. filter: unset!important;
  412. }
  413.  
  414. .node.node-teaser .right-icon.like-percentage,
  415. .node.node-sidebar_teaser .right-icon.like-percentage {
  416. margin-left: 0.3em;
  417. }
  418.  
  419. .node.node-teaser h3.title {
  420. width: 100%;
  421. height: 2em;
  422. }
  423.  
  424. .node.node-teaser.flair-lock:hover [title="Flair"],
  425. .node.node-sidebar_teaser.flair-lock:hover [title="Flair"] {
  426. color: #bbbf;
  427. }
  428.  
  429. .node.node-teaser.flair-fire:hover [title="Flair"],
  430. .node.node-sidebar_teaser.flair-fire:hover [title="Flair"] {
  431. color: #f40f;
  432. filter: drop-shadow(0.12em -0.16em 0 #f806) drop-shadow(-0.12em -0.04em 0.06em #fd08);
  433. }
  434.  
  435. .node.node-teaser.flair-star:hover [title="Flair"] {
  436. color: #fd4f;
  437. transform: rotate(18deg) scale(3.2);
  438. filter: drop-shadow(1pt 0.5pt 0.5pt #0002) drop-shadow(-0.04em -0.04em 0.1em #ffd8) drop-shadow(0.08em 0.08em 0.02em #fb0f);
  439. }
  440.  
  441. .node.node-sidebar_teaser.flair-star:hover [title="Flair"] {
  442. color: #fd4f;
  443. transform: rotate(18deg) scale(2.4);
  444. filter: drop-shadow(1pt 0.5pt 0.5pt #0002) drop-shadow(-0.04em -0.04em 0.1em #ffd8) drop-shadow(0.12em 0.12em 0.01em #fb0f);
  445. }
  446.  
  447. .node.node-video.node-teaser.flair-lock:hover > div > div div > a > img,
  448. .node.node-video.node-sidebar_teaser.flair-lock:hover > div div > div > a > img {
  449. filter: grayscale(1);
  450. }
  451.  
  452. .node.node-video.node-teaser.flair-fire:hover > div > div div > a > img,
  453. .node.node-video.node-sidebar_teaser.flair-fire:hover > div > div div > a > img {
  454. filter: sepia(0.3) contrast(1.25) hue-rotate(-15deg) saturate(1.25);
  455. }
  456.  
  457. .node.node-video.node-teaser.flair-star:hover > div > div div > a > img,
  458. .node.node-video.node-sidebar_teaser.flair-star:hover > div > div div > a > img {
  459. filter: sepia(0.5) brightness(1.1) contrast(1.25) saturate(1.5);
  460. }
  461.  
  462. .node.node-teaser .blankimg,
  463. .node.node-sidebar_teaser .blankimg {
  464. display: block;
  465. border: #ccc 0.5pt dashed;
  466. }
  467.  
  468. .node.node-teaser .blankimg a,
  469. .node.node-sidebar_teaser .blankimg a {
  470. filter: opacity(0);
  471. }
  472.  
  473. .video-js .vjs-play-progress:before {
  474. top: -40%;
  475. color: #fffd;
  476. font-size: 1.8em;
  477. box-shadow: 0 8pt 8pt -4pt #0006;
  478. }
  479.  
  480. .video-js .vjs-volume-level:before {
  481. display: none;
  482. }
  483.  
  484. body.front #wrapper > section > .container,
  485. body.page-node-add form,
  486. body.page-node-edit form,
  487. body.page-user-friends #content > .container,
  488. body.page-user-liked #content > .container,
  489. body.page-subscriptions #content > .container,
  490. body.page-my-content #content > .container,
  491. body.page-messages #content > .container,
  492. body.page-user-edit form,
  493. body.page-comment #content > .container,
  494. body.page-forum #content > .container,
  495. body.node-type-video .node.node-video > .content,
  496. body.node-type-image .node.node-image > .content,
  497. #comments,
  498. #add-forum-comment-block,
  499. .region.region-content .view-id-profile,
  500. .node.node-journal,
  501. [class*="block-views"],
  502. .sidebar .block.block-facetapi,
  503. .sidebar .block.block-mainblocks,
  504. .region.region-sidebar .extra-content-block {
  505. background-color: #fafafa;
  506. border: 1px solid #ccc;
  507. border-radius: 4px!important;
  508. padding: 0.8em!important;
  509. margin: 0.5em 0.5em 1em 0.5em!important;
  510. }
  511.  
  512. body.page-user #content {
  513. background-attachment: fixed;
  514. }
  515.  
  516. body.page-user- #content > .container {
  517. background-color: #eee8;
  518. }
  519.  
  520. body.page-user [class*="block-views"],
  521. body.page-user .sidebar .block.block-views,
  522. #block-mainblocks-user-connect,
  523. body.page-user #comments {
  524. background-color: #fafafad0;
  525. }
  526.  
  527. body.page-node-add form,
  528. body.page-node-edit form {
  529. background-color: #ffffff;
  530. }
  531.  
  532. body.front #wrapper > section > .container,
  533. body.page-user-friends #content > .container,
  534. body.page-user-liked #content > .container,
  535. body.page-subscriptions #content > .container,
  536. body.page-my-content #content > .container,
  537. body.page-messages #content > .container,
  538. body.page-user-edit form,
  539. body.page-comment #content > .container,
  540. body.page-forum #content > .container {
  541. margin-left: auto!important;
  542. margin-right: auto!important;
  543. }
  544.  
  545. body.page-forum #content > .container .panel-group > * {
  546. margin-top: 1em;
  547. }
  548.  
  549. body.node-type-video .node.node-video .node-info .node-views .glyphicon.glyphicon-heart,
  550. body.node-type-image .node.node-image .node-info .node-views .glyphicon.glyphicon-heart {
  551. margin-left: 0.5em;
  552. }
  553.  
  554. .node.node-wide_teaser {
  555. padding: 0.8em!important;
  556. margin: 0.5em 0.5em 1em 0.5em!important;
  557. }
  558.  
  559. .forum-post {
  560. margin: 0.5em 0.5em 1em 0.5em!important;
  561. }
  562.  
  563. .forum-post > .panel-heading > .text-muted {
  564. color: #0008;
  565. }
  566.  
  567. body.node-type-video .node.node-video > .content,
  568. body.node-type-image .node.node-image > .content {
  569. padding: 0!important;
  570. }
  571.  
  572. body.node-type-video .node.node-video > .content > .node-buttons,
  573. body.node-type-image .node.node-image > .content > .node-buttons {
  574. margin-bottom: 0;
  575. }
  576.  
  577. body.node-type-video .node.node-video > .content > .well {
  578. max-width: 100%!important;
  579. margin: 0;
  580. }
  581.  
  582. .node-journal #comments {
  583. border: unset;
  584. }
  585.  
  586. .view-profile.view-display-id-block {
  587. background-color: unset;
  588. padding: unset;
  589. box-shadow: unset;
  590. }
  591.  
  592. #block-views-profile-block {
  593. background-color: #fafafa;
  594. box-shadow: 2pt 8pt 8pt -4pt #0004;
  595. }
  596.  
  597. .region.region-sidebar .view-id-profile .views-responsive-grid > .views-row > div img,
  598. .region.region-content .view-id-profile .views-responsive-grid > .views-row > div img {
  599. border-radius: 50%;
  600. overflow: hidden;
  601. border: #0001 0.2em solid;
  602. }
  603.  
  604. h1 {
  605. padding: 0.25em;
  606. margin: 0;
  607. }
  608.  
  609. #comments > h2.title {
  610. padding: 0.4em;
  611. margin-bottom: 0.8em;
  612. }
  613. #add-forum-comment-block > h2,
  614. .extra-content-block {
  615. padding: 0.6em 0;
  616. }
  617. .region.region-sidebar .extra-content-block {
  618. background-color: #0000;
  619. border: 0;
  620. overflow: hidden;
  621. }
  622. .region.region-sidebar .extra-content-block iframe {
  623. transform: translateX(-8.75pt);
  624. }
  625. .extra-content-block > center + br,
  626. body.node-type-video #block-extra-content-extra-content-block-5,
  627. body.node-type-video #block-extra-content-extra-content-block-8 {
  628. display: none;
  629. }
  630. body.page-user-603563 #block-views-profile-block .field-content {
  631. position: relative;
  632. }
  633. body.page-user-603563 #block-views-profile-block .field-content > img {
  634. margin: 5%;
  635. transform-origin: 46%;
  636. }
  637. body.page-user-603563 #block-views-profile-block .field-content > img:nth-child(1) {
  638. position: absolute;
  639. filter: contrast(0) brightness(0.5);
  640. transform: scale(1.05);
  641. border: 0;
  642. }
  643. body.page-user-603563 #block-views-profile-block .field-content > img:nth-child(2) {
  644. position: absolute;
  645. filter: contrast(0) sepia(1) contrast(2.5);
  646. animation: special-border 4s infinite linear;
  647. mix-blend-mode: color-dodge;
  648. border: 0;
  649. }
  650. body.page-user-603563 #block-views-profile-block .field-content > img:nth-child(3) {
  651. position: absolute;
  652. filter: contrast(0) sepia(1) contrast(2) hue-rotate(120deg);
  653. animation: special-border 1s -0.3s infinite linear;
  654. mix-blend-mode: color-dodge;
  655. border: 0;
  656. }
  657. body.page-user-603563 #block-views-profile-block .field-content > img:nth-child(4) {
  658. position: absolute;
  659. filter: contrast(0) sepia(1) contrast(1.6) hue-rotate(240deg);
  660. animation: special-border 2s -0.7s infinite linear;
  661. mix-blend-mode: color-dodge;
  662. border: 0;
  663. }
  664. body.page-user-603563 #block-views-profile-block .field-content > img:nth-child(5) {
  665. position: absolute;
  666. border: 0;
  667. }
  668. @keyframes special-border {
  669. 0% {transform: translate(4%, 0) rotate(40deg) scale(1.03);}
  670. 100% {transform: translate(4%, 0) rotate(400deg) scale(1.03);}
  671. }
  672. body.page-user.page-user- #block-views-profile-block .field-content.role-admin > img {
  673. border: #f88 6pt solid;
  674. }
  675. body.page-user.page-user- #block-views-profile-block .field-content.role-mod > img {
  676. border: #8af 6pt solid;
  677. }
  678. `;
  679. document.head.appendChild(styleOverride);
  680. }
  681. }, true);