, code blocks are additionally wrapped in a */
pre > code {
display: block
}
/* wider margin next to the main content scroller */
@media screen and (min-width: 1175px) {
.columns-area__panels__main {
margin: 0 clamp(0px, calc(4vw - 48px), 50px);
}
.compose-panel,
.compose-form .compose-form__publish .compose-form__publish-button-wrapper,
.account__header__tabs,
.account__header__tabs__buttons {
overflow: revert;
}
}
/* I've seen an article without any content exactly twice, now I'll bever see one again! */
article:empty {
display: none;
}
/* ===== hide some UI that looks broken from the latest 4.1.2+glitch update ===== */
.status__avatar {
box-shadow: none;
}
.notification__line, .status__line {
display: none;
}
/* ===== Improve posts UI ===== */
/* Make clickable area of posts larger */
/*
.status:not(.collapsed) .status__content--with-action {
padding-top: 58px;
margin-top: -48px;
margin-bottom: 0;
}
.status__prepend + .status .status__content--with-action {
margin-top: -110px;
padding-top: 110px;
}
*/
.status__content--with-action:nth-last-child(3) {
/* Followed by a media gallery */
margin-bottom: -16px;
padding-bottom: 16px;
}
.status__prepend a,
.status__info a,
.status__info__icons {
z-index: 1;
position: relative;
}
.status__info__icons {
display: grid;
grid-auto-flow: column;
justify-items: center;
align-items: center;
grid-auto-columns: 1fr;
flex-shrink: 0;
}
.status__content__spoiler-link {
border-radius: 100vh;
vertical-align: baseline;
padding: 0.2em 1em 0;
}
.status__content--with-spoiler > div:not(.status__content__spoiler) {
line-height: 1.5em;
}
/* center the "USERNAME boosted" text at the top of a toot */
.status__prepend {
flex-grow: 0;
align-self: center;
margin: 0;
max-width: calc(100% - 30px);
}
.status__prepend:hover {
z-index: 2;
}
/* make sure links to user profiles are consistently underlined on hover */
aside .status__display-name:hover,
.status__wrapper.collapsed .display-name:hover .display-name__html {
text-decoration: underline;
}
/* old replacement for the animated boost icon */
/* will be scaled to 17px via transform to keep the multi-sprite layout intact */
/*
@keyframes statusPrependIcon {
0% { background-position: 0 0%; }
20% { background-position: 0 100%; }
100% { background-position: 0 100%; }
}
.status__prepend .fa-retweet.status__prepend-icon {
background-image: url("${boostSvg}");
background-position: 0 0;
width: 22px;
transform: scale(calc(17 / 22)) translateY(-1px);
aspect-ratio: 22 / 19;
background-size: cover;
animation: 4.5s infinite normal statusPrependIcon steps(10);
}
.status__prepend .fa-retweet.status__prepend-icon::before {
display: none;
}
*/
/* Better gradient on collapsed toots */
.status__wrapper.collapsed .status__content {
height: 35px;
margin-bottom: -15px;
margin-top: -30px;
padding-top: 40px;
overflow: visible;
-webkit-mask-image: linear-gradient(to bottom, black 40px, transparent 81%);
mask-image: linear-gradient(to bottom, black 40px, transparent 81%);
}
:is(#fake, .status__wrapper.collapsed .status__content)::after {
display: none;
}
/* ===== Make filtered posts less intrusive ===== */
.status__wrapper--filtered {
padding: 0;
background: var(--color-grey-0);
outline: 3px solid var(--color-grey-0);
outline-offset: -1px;
}
/* improve long usernames by adding an ellipsis (that doesn't break the zoom-on-hover!) */
.account--minimal.account .account__display-name {
align-items: stretch;
}
.detailed-status__display-name,
.account .account__display-name {
display: flex;
min-width: 0;
overflow: visible;
gap: 15px;
}
.detailed-status__display-name .display-name {
min-width: 0;
}
.status__info > span {
overflow: unset;
min-width: 0;
}
/* ===== some other changes ===== */
#mastodon[data-props='{"locale":"de"}'] .compose-form__publish-button-wrapper > .button.primary::after {
content: "Cybertrööt!"
}
/* Make sure the search suggestions are always ontop, the otherwise highest z-index I use is 100 */
body>div[data-popper-escaped]:last-child {
z-index: 1000 !important;
}
/* add "follow/unfollow" labels to buttons in followed/following lists */
article > .account > .account__wrapper {
display: grid;
grid-template-columns: auto 1fr;
}
.account__contents {
max-width: calc(100% - 56px);
overflow: unset;
flex: 1;
}
.account__relationship {
padding: 0;
place-self: auto end;
}
.account__relationship button {
padding: 10px;
height: auto !important;
width: auto !important;
}
.timeline-hint--with-descendants {
border: none;
}
`)
}
/* Add our logo */
GM_addStyle(`
@media screen and (min-width: 1175px) {
body.flavour-glitch .columns-area__panels__pane--navigational .columns-area__panels__pane__inner::before {
content: "";
object-fit: contain;
background: url(${logoSvg});
display: block;
background-repeat: no-repeat;
background-position: center;
height: 48px;
margin-top: 10px;
--glow-radius: 2px;
backdrop-filter: blur(2px) saturate(1.5);
margin-inline: -10px;
max-width: calc(100% + 20px);
background-size: calc(100% - 20px);
}
@keyframes move-background {
0% { background-position: 0% 50%; }
100% { background-position: 600% 50%; }
}
body.flavour-glitch .columns-area__panels__pane--navigational .columns-area__panels__pane__inner::after {
content: "";
-webkit-mask-image: url(${logoSvg});
display: block;
height: 48px;
margin-top: 10px;
position: absolute;
top: 0;
width: 100%;
z-index: -1;
background-image: linear-gradient(110deg,
hsl(330deg 99% 71%),
hsl( 0deg 100% 50%),
hsl( 33deg 100% 50%),
hsl( 60deg 100% 50%),
hsl(120deg 100% 28%),
hsl(180deg 100% 38%),
hsl(265deg 99% 30%),
hsl(300deg 100% 28%),
hsl(330deg 99% 71%));
-webkit-mask-size: contain;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
background-repeat: repeat;
background-size: 600%;
animation: 400ms fadeIn ease-out, move-background 60s 1s linear infinite;
}
body.flavour-glitch .navigation-panel {
margin-top: 0;
height: calc(100% - 68px);
}
body.flavour-glitch .navigation-panel::before {
content: "";
}
}
`)
/* neon-ify the page and other style adjustments */
if (settings.enableTheme) {
GM_addStyle(`
body {
background: var(--color-grey-0)
}
/* ====================
* Neon-ify the page
* ====================*/
/* min-width: 1175px is Mastodon's breakpoint after which it shows the "desktop" ui */
@media screen and (min-width: 1175px) {
/* ===== Buttons get a glow-on-hover ===== */
.button {
outline: 1px solid transparent;
outline-offset: -1px;
transition: box-shadow var(--anim-dur), outline-color var(--anim-dur), background-color var(--anim-dur);
background-color: var(--color-primary)
}
/* These buttons are transparent by default, restore that default */
.block-modal__cancel-button, .confirmation-modal__cancel-button, .confirmation-modal__secondary-button, .mute-modal__cancel-button {
--color-primary: transparent;
}
.button:not([disabled]):hover {
outline-color: var(--color-hl-primary);
box-shadow: var(--neon-box-shadow-small);
}
/* poll options get similar treatment */
.status__content .poll li {
border-radius: var(--border-radius-button-between);
border: 1px solid var(--color-grey-4);
margin-bottom: var(--border-radius-button-between);
}
.status__content .poll li:first-of-type {
border-top-left-radius: var(--border-radius-button);
border-top-right-radius: var(--border-radius-button);
border: 1px solid var(--color-grey-4);
}
.status__content .poll li:last-of-type {
border-bottom-left-radius: var(--border-radius-button);
border-bottom-right-radius: var(--border-radius-button);
border: 1px solid var(--color-grey-4);
}
.status__content .poll__option {
padding: 12px 8px;
border-radius: inherit
}
.status__content .poll__option.selectable {
outline: 1px solid var(--color-grey-5);
transition: background-color var(--anim-dur), outline-color var(--anim-dur);
}
.status__content .poll__option.selectable:hover {
background-color: var(--color-grey-4);
outline-color: var(--color-grey-6);
}
.status__content .poll__chart {
margin-top: -3px;
background: var(--color-grey-7);
border-radius: unset;
border-bottom-left-radius: inherit;
border-bottom-right-radius: inherit;
}
.status__content .poll__chart.leading {
box-shadow: var(--neon-box-shadow-small);
background: var(--color-primary);
}
.status__content .poll__voted {
margin-block: -6px;
}
/* ====================
* Side/nav menu
* =================== */
/* Allow the glow to leak out of the nav menu */
.navigation-panel {
overflow: unset;
}
/* Glowy horizontal lines */
.navigation-panel::before,
:is(#fake, .compose-panel, .navigation-panel) hr {
box-shadow: var(--neon-box-shadow);
border-top: 1px solid var(--color-grey-9);
position: relative;
z-index: -1;
margin: 20px 15px;
height: 0;
}
:is(#fake, .compose-panel) .spacer {
margin: 30px 0 !important;
}
/* Profile Menu, search */
.search {
margin-bottom: 20px;
}
.search__popout,
.dropdown-menu {
z-index: 102;
border-radius: 8px;
margin-top: var(--border-radius-button-between);
backdrop-filter: blur(3px);
background: color-mix(in srgb, var(--color-grey-3) 80%, transparent);
border: 1px solid var(--color-grey-7);
.dropdown-menu__separator {
--dropdown-border-color: var(--color-grey-7);
}
.dropdown-menu__item {
--dropdown-border-color: color-mix(in srgb, var(--color-grey-5) 80%, transparent);
}
}
.search__popout h4 {
color: var(--color-white);
}
.search__popout__menu__message {
color: var(--color-grey-9);
}
/* ===== Compose form ===== */
/* I'm abusing a property of :is() to avoid an !important here.
* :is()'s specificity is the highest spec. of all selectors in it,
* even if those selectors are invalid. Using :is() with a valid
* .class selector and an invalid #id selector bumps up the spec.
* for the whole :is() selector from .class to #id which allows
* it to override some default styles.
* A declaration with !important would still take precedence.
* Docs: https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity
*/
.navigation-bar {
z-index: 101;
}
.compose-form {
padding-top: 14px;
gap: 25px;
.reply-indicator {
max-height: min(40%, 360px);
box-sizing: border-box;
position: relative;
max-height: unset;
padding-top: 2px;
.reply-indicator__main {
padding-top: 1px;
}
.display-name__html {
line-height: 22px;
font-size: 15px;
}
}
.reply-indicator__line::before {
z-index: 102;
height: calc(100% + 17px);
}
.reply-indicator__content {
display: block;
max-height: unset;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
}
.reply-indicator__content::after {
content: "";
background: var(--color-grey-0);
width: 100%;
height: 100vh;
position: absolute;
top: 100%;
left: 0;
}
.reply-indicator__attachments {
background: var(--color-grey-0);
z-index: 1;
position: relative;
}
.compose-form__highlightable {
border-radius: var(--border-radius-button);
border: none;
outline: 1px solid var(--color-grey-5);
outline-offset: -1px;
z-index: 101;
transition: outline-color 200ms;
overflow: visible;
min-height: unset;
&:focus-within {
outline-color: var(--color-grey-7);
}
}
.reply-indicator__header {
overflow: visible;
}
.reply-indicator__display-name {
display: grid;
align-items: center;
grid-template-columns: auto 1fr;
overflow: visible;
& :is(.display-name.inline, #fake) {
overflow: hidden;
}
}
}
:is(#fake, .compose-form__warning) {
border-radius: 8px;
}
:is(
.autosuggest-textarea__textarea,
.compose-form__modifiers,
#important
) {
background: none;
}
/* make sure this isn't covered by the compose area in advanced mode*/
.emoji-picker-dropdown__menu {
z-index: 100;
}
/* Suggestions box */
.compose-form .autosuggest-textarea__suggestions.autosuggest-textarea__suggestions--visible {
border-radius: 8px;
margin-top: -20px;
padding-top: 26px; /* This has a default padding of 6px */
}
.compose-form .autosuggest-textarea__suggestions.autosuggest-textarea__suggestions--visible,
:is(#fakeId, .compose-form__buttons-wrapper) {
border: 1px solid var(--color-grey-7);
}
:is(#fakeId, .compose-form__buttons-wrapper) {
border-radius: 8px;
margin-top: -20px;
padding-top: 30px;
background: var(--color-grey-9);
}
.compose-form__buttons button {
min-width: 27px;
border-radius: 8px;
}
/* 4.3.x fixes */
.compose-form__footer {
.compose-form__dropdowns::after {
/* block the space of 4 digits for the character counter that's moved up here*/
content: "0000";
font-family: "mastodon-font-sans-serif",sans-serif;
font-size: 14px;
font-weight: 400;
color: transparent;
}
.compose-form__buttons {
display: grid;
grid-template-columns: repeat(var(--cols), 1fr);
gap: var(--border-radius-button-between);
align-items: stretch;
& > * {
grid-row: 1;
}
:where(div, button) {
width: 100%;
height: 100%;
box-sizing: border-box !important;
}
/* dynamic column count, ignoring the char counter in the last child */
--cols : 6;
&:has(:nth-child(7):not(.character-counter)) {
--cols: 7;
}
&:has(:nth-child(8):not(.character-counter)) {
--cols: 8;
}
& :nth-child(1 of :not(.emoji-picker-dropdown)) { grid-column: 1 }
& :nth-child(2 of :not(.emoji-picker-dropdown)) { grid-column: 2 }
& :nth-child(3 of :not(.emoji-picker-dropdown)) { grid-column: 3 }
& :nth-child(4 of :not(.emoji-picker-dropdown)) { grid-column: 4 }
& :nth-child(5 of :not(.emoji-picker-dropdown)) { grid-column: 5 }
& :nth-child(6 of :not(.emoji-picker-dropdown)) { grid-column: 6 }
& :nth-child(7 of :not(.emoji-picker-dropdown)) { grid-column: 7 }
& :nth-child(8 of :not(.emoji-picker-dropdown)) { grid-column: 8 }
.emoji-picker-dropdown {
grid-column: var(--cols);
align-self: stretch;
button {
background-image: url(https://corteximplant.com/system/custom_emojis/images/000/025/784/original/aa6fb2394bcb9f0a.png);
background-position: center bottom;
background-size: auto 90%;
background-repeat: no-repeat;
}
svg {
display: none;
}
}
:is(.character-counter, #important) {
align-self: center;
grid-column-end: -1;
padding-inline-end: 2px;
grid-column: span 2 / -1;
pointer-events: none;
translate: 0 -38px;
}
}
}
.compose-form__highlightable:has(.spoiler-input) .emoji-picker-dropdown {
top: 46px;
}
/* This is actually the language selector */
.privacy-dropdown.active .privacy-dropdown__value {
border-radius: 8px 8px 0 0;
}
.language-dropdown__dropdown {
border-radius: 8px;
}
.reply-indicator {
border-radius: 8px;
}
.compose-form .spoiler-input__border {
display: none;
}
.compose-form .spoiler-input {
transition: height .4s ease, opacity .4s ease, margin-bottom 0.2s ease 0.1s;
border-radius: 8px;
border: 1px solid var(--color-grey-7);
box-sizing: border-box;
}
.compose-form :is(.autosuggest-input, #important) {
border: none;
}
.compose-form .spoiler-input__input {
color: var(--color-offwhite-primary);
border-radius: var(--border-radius-button);
padding: 12px 11px;
}
.compose-form .spoiler-input.spoiler-input--visible {
margin-bottom: -23px;
height: 69px; /* nice */
}
/* ===== right side menu ===== */
.column-link {
border: none
}
.column-link--logo {
padding: 0;
}
.column-link--logo svg {
display: none;
}
.column-link--logo::before {
content: "";
object-fit: contain;
background: url(${logoSvg});
display: block;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
height: 48px;
max-width: 100%;
}
/* Adjust Horizontal align of the first
with the first post in a feed */
.navigation-panel__logo hr {
margin-top: 14px;
}
.column-link--transparent {
position: relative;
font-size: 15px;
padding: 15px;
border-radius: 8px;
}
.getting-started__trends h4 a:hover::before,
.column-link--transparent:hover::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(to right,
color-mix(in srgb, var(--color-offwhite-primary) 5%, transparent),
color-mix(in srgb, var(--color-offwhite-primary) 10%, transparent));
border-radius: 8px;
width: 100%;
animation: 200ms flicker-in ease-out;
}
.getting-started__trends h4 a:hover::after,
.column-link--transparent:hover span::after {
content: "";
position: absolute;
top: 8px;
right: 8px;
bottom: 8px;
width: 1px;
background: var(--color-offwhite-primary);
box-shadow: var(--neon-box-shadow);
animation: 200ms flicker-in ease-out;
}
/* make the "trending now" look like the rest of the menu items */
.getting-started__trends h4 {
padding: 0;
border: none;
}
.getting-started__trends h4 a {
position: relative;
text-transform: none;
padding: 15px;
display: block;
padding-inline-start: calc(25px + 1.28571429em);
}
/* trending hashtags in feeds */
.getting-started__trends h4 span {
color: #d9e1e8;
font-size: 15px;
}
/* profile's featured hashtags */
.getting-started__trends h4>span {
margin: 15px;
display: block;
text-transform: none;
padding-inline-start: calc(5px + 1.28571429em);
}
.getting-started__trends h4 span::before {
content: "";
margin-right: 5px;
vertical-align: middle;
margin-inline-start: calc(-5px - 1.28571429em);
display: inline-block;
width: 24px;
aspect-ratio: 1;
background: currentColor;
clip-path: path("m 3.4 18 l -1.4 -1.4 l 7.4 -7.45 l 4 4 l 5.2 -5.15 H 16 v -2 h 6 v 6 h -2 v -2.6 L 13.4 16 L 9.4 12 L 3.4 18 Z");
}
.getting-started__trends .trends__item {
padding: 10px 15px;
}
/* ====================
* Main Feed
* =================== */
.column > .scrollable,
.explore__search-results {
border: none;
}
/* ===== Header of feeds (e.g. the main feed) styling ===== */
.tabs-bar__wrapper {
background: none;
--background-filter: none;
backdrop-filter: none;
}
:is(.search__input, #important) {
border-radius: 8px;
border: 1px solid var(--color-grey-6);
background: var(--color-grey-5);
box-sizing: border-box;
height: 48px;
padding-block: 0 !important;
}
.column-header {
border: none;
}
#tabs-bar__portal>button::after,
.column-header__wrapper::after,
h1:where(#Lists, #Follow-requests)::after
{
content: "";
position: absolute;
inset: 0px;
border-radius: inherit;
border: 1px solid var(--color-grey-5);
z-index: 2;
pointer-events: none;
}
#tabs-bar__portal>button,
.column-header__wrapper {
border-radius: 8px;
backdrop-filter: blur(3px);
background: color-mix(in srgb, var(--color-grey-3) 80%, transparent);
transition: box-shadow 200ms;
}
#tabs-bar__portal>button:hover,
.column-header__wrapper:hover,
h1:where(#Lists, #Follow-requests):hover {
box-shadow: var(--neon-box-shadow-small);
}
#tabs-bar__portal>button:hover::after,
.column-header__wrapper:hover::after,
h1:where(#Lists, #Follow-requests):hover::after {
border-color: var(--color-grey-7);
}
.column-header__title {
height: 48px;
padding-block: 0;
}
.column-header__title svg {
margin-inline: 2px 10px;
}
.column-back-button {
background: none;
border-radius: inherit;
}
.column-back-button:hover,
.column-header__back-button:hover {
text-decoration: none;
}
.column-header__wrapper.active {
box-shadow: none;
}
.column-header,
.column-header__button,
.column-header__collapsible-inner,
.column-header__back-button {
background: none;
}
.column-header__button,
.column-header__back-button {
position: relative;
min-width: 48px;
}
:is(#fake, .column-header__back-button) {
padding: 0 15px;
place-items: center;
}
.column-header__button:hover,
.column-header__back-button:hover,
.column-back-button:hover {
color: var(--color-white);
}
.column-header__button::before,
.column-header__back-button::before,
.column-back-button::before {
content: "";
position: absolute;
inset: 4px;
border-radius: 8px;
background: none;
transition: background 200ms, color 200ms;
z-index: -1;
}
.column-header__button:hover::before,
.column-header__back-button:hover::before,
.column-back-button:hover::before {
background: var(--color-grey-6);
}
.column-header__button.active {
border-radius: 8px 8px 0 0;
}
.column-header__collapsible {
background: var(--color-grey-5);
border-bottom: none;
}
.column-header__collapsible,
.announcements {
border-radius: 0 0 8px 8px;
}
.announcements .announcements__mastodon {
border-bottom-left-radius: inherit;
}
.column-header__collapsible:not(.collapsed)+.announcements {
border-radius: 8px;
margin-top: 20px;
}
/* The header has a z-index of 2, make sure this is in
* its own stacking contect below the header.
* Otherwise spoiler-button can show up above the header */
.columns-area--mobile,
.columns-area--mobile .column {
z-index: 1;
overflow: revert;
}
.columns-area--mobile .scrollable {
background: none;
contain: style;
margin-top: 20px;
}
.explore__links {
margin-top: 20px;
}
.columns-area--mobile {
padding: 0 10px 10px;
box-sizing: border-box;
}
.hashtag-header {
border: none;
margin-bottom: 20px;
}
/* ===== info banners ===== */
.dismissable-banner {
margin-block: 0;
border-radius: 8px;
border: 1px solid var(--color-grey-4);
}
.item-list > .dismissable-banner {
margin-top: 0;
margin-bottom: 20px;
}
.dismissable-banner__action button {
min-width: 40px;
min-height: 40px;
}
/* ===== "x new items" button when autorefresh is disabled ===== */
.load-more.load-gap {
width: calc(100% - 40px);
margin-block: 0 20px;
margin-inline: auto;
border: 1px solid var(--color-grey-7);
border-radius: var(--border-radius-button);
background-color: var(--color-grey-2);
box-shadow: 0px 0px 10px -3px var(--color-primary);
color: var(--color-grey-8);
transition:
background-color 200ms,
border-color 200ms,
box-shadow 200ms,
color 200ms;
}
.load-more.load-gap:hover {
background-color: var(--color-grey-3);
border-color: var(--color-grey-8);
box-shadow: var(--neon-box-shadow-small);
color: var(--color-grey-9);
}
/* disable the styling on the article sometimes surrounding the load gap */
article[data-id^="gap:"] {
background: none !important;
border: none !important;
}
/* ===== Posts styling ===== */
.status__wrapper:not(.status__wrapper--filtered) {
display: flex;
flex-direction: column;
}
.status {
padding: 15px;
}
aside + .status {
padding-top: 5px;
}
.detailed-status__wrapper {
position: relative;
}
.status__wrapper-unlisted,
.detailed-status__wrapper-unlisted {
--color-privacy: var(--color-green, white);
}
.status__wrapper-public,
.detailed-status__wrapper-public {
--color-privacy: var(--color-grey-8, white);
}
.status__wrapper-direct,
.detailed-status__wrapper-direct {
--color-privacy: var(--color-red, white);
}
.status__wrapper-private,
.detailed-status__wrapper-private {
--color-privacy: var(--color-yellow, white);
}
.detailed-status__meta {
flex-wrap: wrap;
}
.detailed-status__meta__line {
display: contents;
}
.detailed-status__meta__line:not(:last-child)::after {
content: "·";
}
.status-unlisted,
.status-public,
.status-direct,
.status-private {
box-shadow: 0px 4px 10px -8px var(--color-privacy);
}
.detailed-status__wrapper,
.status__wrapper {
--color-bg: var(--color-privacy);
}
.notification-group,
.notification-ungrouped {
--color-bg: var(--color-notification);
}
.conversation {
--color-bg: var(--color-hl-primary);;
}
:is(.status,
.conversation,
.detailed-status__wrapper,
.notification-group,
.notification-ungrouped
)::after{
content: "";
pointer-events: none;
background: var(--color-bg);
position: absolute;
inset: 0;
border-radius: inherit;
-webkit-mask-image:
radial-gradient(at 39px calc(39px + var(--extra-top-spacing, 0px)), rgba(0, 0, 0, 0.2) 5%, rgba(0 0 0 / 0.06) 20%, transparent 70%),
var(--noise-url);
-webkit-mask-size: 600px 600px, 200px;
-webkit-mask-composite: intersect;
-webkit-mask-repeat: no-repeat, repeat;
mask-image:
radial-gradient(at 39px calc(39px + var(--extra-top-spacing, 0px)), rgba(0, 0, 0, 0.2) 5%, rgba(0 0 0 / 0.06) 20%, transparent 70%),
var(--noise-url);
mask-size: 600px 600px, 200px;
mask-composite: intersect;
mask-repeat: no-repeat, repeat;
}
/* pre-4.3.0 */
.hicolor-privacy-icons .status__visibility-icon.fa-unlock,
.hicolor-privacy-icons .status__visibility-icon.fa-globe,
.hicolor-privacy-icons .status__visibility-icon.fa-envelope,
.hicolor-privacy-icons .status__visibility-icon.fa-lock,
/* >= 4.3.0 */
.hicolor-privacy-icons .status__visibility-icon.icon-unlock,
.hicolor-privacy-icons .status__visibility-icon.icon-globe,
.hicolor-privacy-icons .status__visibility-icon.icon-envelope,
.hicolor-privacy-icons .status__visibility-icon.icon-lock
{
color: var(--color-privacy);
}
body:has(.hicolor-privacy-icons) .privacy-dropdown__option .icon-unlock,
.hicolor-privacy-icons .privacy-dropdown__option .fa-unlock {
color: var(--color-green);
}
body:has(.hicolor-privacy-icons) .privacy-dropdown__option .icon-globe,
.hicolor-privacy-icons .privacy-dropdown__option .fa-globe {
color: var(--color-grey-8);
}
body:has(.hicolor-privacy-icons) .privacy-dropdown__option .icon-envelope,
.hicolor-privacy-icons .privacy-dropdown__option .fa-envelope {
color: var(--color-red);
}
body:has(.hicolor-privacy-icons) .privacy-dropdown__option .icon-lock,
.hicolor-privacy-icons .privacy-dropdown__option .fa-lock {
color: var(--color-yellow);
}
/* All these refer to posts, in feeds... */
.columns-area--mobile article:not(.explore__search-results article:only-child),
/* the main post in post-detail-view */
.columns-area--mobile .scrollable>div[tabindex="-1"],
/* preceeding and following posts in post-detail-view */
.columns-area--mobile .scrollable>div>div[tabindex="-1"],
/* search results */
.item-list>article[data-id],
/* pinned posts */
.featured-carousel__slide>div[tabindex="-1"],
/* not technically posts, but these explore / search result items should have the same styles */
.explore__search-results .empty-column-indicator,
.explore__links .dismissable-banner,
.explore__links .story,
.explore__links .trends__item,
.explore-suggestions-card,
.search-results__section > div,
.regeneration-indicator,
.getting-started__wrapper
{
margin-bottom: 20px;
border: 1px solid var(--color-grey-4);
box-sizing: border-box;
background: var(--color-grey-2);
border-radius: var(--border-radius-button);
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
border: 1px solid color-mix(in srgb, transparent 85%, white);
}
:is(article[tabindex="-1"]:has(.load-more.load-gap), #important) {
margin: 0;
background: none;
border: none;
box-shadow: none;
}
/* Search Results */
.explore__search-results {
background: none;
}
.search-results__section {
margin-bottom: 20px;
border: none;
}
.search-results__section > div {
margin-bottom: var(--border-radius-button-between);
border-radius: var(--border-radius-button-between);
}
.search-results__section > div:first-child {
border-top-left-radius: var(--border-radius-button);
border-top-right-radius: var(--border-radius-button);
}
.search-results__section > div:last-child {
border-bottom-left-radius: var(--border-radius-button);
border-bottom-right-radius: var(--border-radius-button);
}
/* remove the drop shadow from posts in search results because otherwise it looks too tight */
.search-results__section > div[tabindex="-1"] > :where(.status-unlisted, .status-public, .status-direct, .status-private) {
box-shadow: none;
}
.search-results__section .search-results__section__header {
background: var(--color-grey-3);
}
.explore__search-results>button {
margin-bottom: 20px;
border: 1px solid var(--color-grey-4);
border-radius: 8px;
transition: background 200ms, box-shadow 200ms, color 200ms;
}
.explore__search-results>button:hover {
box-shadow: var(--neon-box-shadow-small);
color: var(--color-white);
}
.search-results__section .account:last-child,
.search-results__section .trends__item:last-child {
border-bottom: 1px solid color-mix(in srgb, transparent 85%, white);
}
.explore__search-results .trends__item+div[tabindex="-1"] {
margin-top: 20px
}
.account {
border: none;
}
/* ==== detailed status ==== */
/* give the selected post in single-post-view a lighter background */
.columns-area--mobile .scrollable>div[tabindex="-1"]:has(.detailed-status) {
box-shadow: var(--neon-box-shadow-small);
border-color: var(--color-grey-7);
background: var(--color-grey-3);
}
.detailed-status__wrapper {
padding: 15px;
gap: 15px;
display: flex;
flex-direction: column;
}
:is(.detailed-status, #important) {
position: relative;
border-top: none;
padding: 0;
background: none;
.status__content {
font-size: 15px;
line-height: 20px;
}
}
:is(.detailed-status__action-bar, #important) {
padding: 0;
border-radius: 0 0 8px 8px;
border: none;
background: none;
gap: var(--border-radius-button-between);
}
/* remove bottom border on all kinds of posts */
.status,
/* the "pinned posts" container */
.featured-carousel,
/* follow notifications */
.notification .account,
.notification-group,
.notification-ungrouped,
/* and the "load more" button */
.load-gap {
border-bottom: none;
border-radius: inherit;
}
:is(#fake, .status__action-bar) {
margin-top: 15px;
margin-bottom: 0;
gap: var(--border-radius-button-between);
align-items: stretch;
}
/* Make sure everything inside a post follows the border radius */
article div[tabindex="-1"],
.focusable,
.columns-area--mobile article > div:not(.search-results__section),
.columns-area--mobile article > div > .notification.unread,
.columns-area--mobile article > div > .notification.unread::before,
.columns-area--mobile article > div > .status__wrapper.unread,
.columns-area--mobile article > div > .status__wrapper.unread::before {
border-radius: inherit;
}
.status__wrapper--filtered {
border: none;
}
.column-subheading {
background: none;
}
article>a {
border-radius: inherit;
}
/* ===== Notifications / explore / Account's post/replies/media tabs ===== */
/* .notification__filter-bar
* notifications use button > i and
* button > span
*
* .account__section-headline
* explore uses a > span
* account uses a > span
* "live feeds" uses a > div
*/
.notification__message {
:is(&, #important) {
margin-top: 0;
}
padding-top: 0;
min-height: 24px;
display: grid;
grid-template-columns: auto minmax(0, 1fr);
margin: 0;
padding: 0;
gap: 10px;
& > span {
max-width: calc(100% - 10px);
}
& > .notification__favourite-icon-wrapper {
position: initial;
}
.icon {
display: block;
}
}
/* "x liked your toot" post in 4.3 */
.status__wrapper > .notification__message {
grid-template-columns: auto minmax(0, 1fr) auto;
padding: 10px;
& + .status__wrapper.collapsed .status__content {
margin-top: ;
padding-top: 30px;
}
.status__collapse-button {
margin: 0;
display: block;
}
}
.account__section-headline {
padding-inline: 10px;
}
.account__section-headline,
.notification__filter-bar {
border-radius: 8px;
/* backdrop-filter: blur(3px);
background: color-mix(in srgb, var(--color-grey-1) 80%, transparent);
border-color: var(--color-grey-5); */
}
/* notifications header */
.notification__filter-bar {
margin-top: -20px;
padding-top: 20px;
}
/* explore / live feeds header */
.account__section-headline {
margin-top: -20px;
padding-top: 20px;
}
/*
* .account__section-headline a account sections, also explore tabs
* .account__section-headline button search results
* .notification__filter-bar button notification filters
*/
.account__section-headline :is(button, a),
.notification__filter-bar button {
border-radius: inherit;
flex: 1 1 0;
padding: 0;
min-height: 48px;
display: grid;
place-items: center;
}
.account__section-headline :is(button, a) :is(div, span),
.notification__filter-bar button span,
.notification__filter-bar button i {
transition: color 200ms
}
.account__section-headline :is(button, a):hover :is(div, span),
.notification__filter-bar button:hover svg,
.notification__filter-bar button:hover span,
.notification__filter-bar button:hover i {
color: var(--color-white);
}
.account__section-headline :is(button, a),
.notification__filter-bar button {
isolation: isolate;
position: relative;
}
/* hover background */
.account__section-headline :is(button, a)::after,
.notification__filter-bar button::after {
content: "";
position: absolute;
inset: 4px;
background: transparent;
border-radius: 8px;
transition: background 200ms;
z-index: -1;
}
.account__section-headline :is(button, a):hover::after,
.notification__filter-bar button:hover::after {
background-color: var(--color-grey-6);
}
:is(
#fake,
.account__section-headline a,
.account__section-headline button,
.notification__filter-bar button
)::before {
inset-block-end: 4px;
inset-inline: 0;
margin-inline: auto;
width: 80%;
transform: none;
}
/* Mentions use .status__wrapper directly, all other notifications are wrapped in a .notification div */
article:has(.unread)::before,
article:has(.notification-group--unread)::before,
article:has(.notification-ungrouped--unread)::before {
content: "";
position: absolute;
top: 5px;
bottom: 5px;
left: 1px;
width: 2px;
background: white;
box-shadow: var(--neon-box-shadow);
z-index: -1;
opacity: 0;
animation: flicker-in 200ms ease-out 200ms both;
}
:where(
article:has(.unread),
article:has(.notification-group--unread),
article:has(.notification-ungrouped--unread)
) > div[tabindex="-1"] {
background: var(--color-grey-2);
}
/* Notification Coloring */
/* new: 4.3.0+ */
/* color the icon */
.notification-group__icon {
height: 28px;
}
.notification-group__icon svg,
.notification-ungrouped__header__icon svg {
color: var(--color-notification);
}
/* default */
.notification-group,
.notification-ungrouped {
--color-notification: var(--color-grey-8);
}
.notification-group--favourite {
--color-notification: var(--color-gold);
}
.notification-group--admin-report {
--color-notification: var(--color-orange);
}
.notification-group--follow,
.notification-group--reblog {
--color-notification: var(--color-purple);
}
/* mentions and replies have the same markup, just different SVG paths .-. */
.notification-ungrouped--mention {}
.notification-ungrouped--direct {
--color-bg: var(--color-red);
}
/* header layout for replies/mentions/DMs */
:is(.notification-ungrouped__header, #important) {
padding-inline-start: 0;
color: var(--color-grey-8);
}
.notification-ungrouped__header__icon {
width: 40px;
}
.notification-ungrouped__header__icon .icon,
.notification-group__icon .icon {
width: 24px;
aspect-ratio: 1;
height: auto;
}
:is(.notification-group, .notification-ungrouped, #important) .status__wrapper {
background: none;
}
:is(.notification-group, .notification-ungrouped, #important) .status {
outline: none;
box-shadow: none;
}
:is(.notification-group, .notification-ungrouped, #important) .status::after {
display: none;
}
:is(.notification-group, .notification-ungrouped, #important) .notification-group__main__header {
time {
white-space: nowrap;
}
}
:is(.notification-group, .notification-ungrouped, #important) .notification-group__main__status {
border: none;
padding-inline: 0 8px;
}
.notification-group--unread::before,
.notification-ungrouped--unread::before,
.conversation.unread::before {
border-radius: inherit;
border-color: var(--color-notification);
}
.compose-form__actions .button,
.notification-group__actions .button {
font-weight: normal
}
.notification-group__avatar-group {
overflow-y: clip;
}
/* old: pre-4.3.0 */
/* Color the icon */
.notification__message :is(#fake, .fa, svg.status__prepend-icon) {
color: var(--color-notification);
}
.notification__filter-bar + .scrollable {
/* article > div[tabindex="-1"] > ... */
/* report -> has .notification__message and .notification__report */
.notification,
/* reply -> has .status
like, boost -> has aside.notification__message and .status
*/
.status__wrapper {
--color-notification: var(--color-grey-8);
background-image: linear-gradient(
color-mix(in srgb, var(--color-notification) 5%, transparent),
color-mix(in srgb, var(--color-notification) 5%, transparent));
/* report */
&.notification-admin-report {
--color-notification: var(--color-orange);
.notification__report {
gap: 15px;
padding: 10px 15px;
border: 0;
}
}
/* follow */
&.notification-follow,
/* boost */
&[data-boosted-by] {
--color-notification: var(--color-purple);
}
/* like */
&[data-favourited-by] {
--color-notification: var(--color-gold);
}
/* reply */
&.status__wrapper-reply { }
/* dm */
&.status__wrapper-direct { }
/* polls and edits of boosted posts have a [data-undefined-by] if I'd want to style them */
.notification__message,
.account {
padding: 10px 15px;
}
.notification__message {
padding-bottom: 0;
}
.status {
backround: none;
}
&::before {
border-color: var(--color-notification);
}
}
}
/* ===== Profile ===== */
.account-timeline__header {
margin-bottom: 20px;
border-radius: 8px;
border: 1px solid var(--color-grey-4);
background: var(--color-grey-1);
}
.account__header {
border-radius: inherit;
}
.account__header ,
.account__header__bar,
.account__header__bio {
overflow: visible;
}
.account__header__bar {
border-radius: 0 0 8px 8px;
border-bottom: none;
padding: 10px;
display: grid;
grid-template-columns: minmax(0, 1fr);
--gap: 10px;
gap: var(--gap);
}
.account__header__tabs {
margin-inline-start: 0;
padding: 0;
}
.account__header__tabs__name {
padding: 0 var(--gap);
margin: 0;
}
.account__header__badges {
padding: 0 var(--gap);
}
.account__header__image {
border-top-left-radius: inherit;
border-top-right-radius: inherit;
}
.account__header__account-note {
border: 1px solid #42485a;
border-radius: 8px;
margin: 0;
padding: 0;
padding: 10px;
box-sizing: border-box;
}
.account__header__account-note :is(textarea, #important) {
margin: 0;
width: 100%;
}
.account__header__tabs__buttons .icon-button {
font-size: 18px !important;
height: 36px !important;
width: unset !important;
min-width: 36px;
box-sizing: border-box;
}
.account__header__extra {
margin: 0;
padding: 0;
}
.account__header__bio {
margin: 0;
display: grid;
gap: calc(2 * var(--gap));
}
.account__disclaimer {
/* this is the "Information below may reflect the user's profile incompletely." hint.
Make sure the "view full profile" link looks like a button. */
margin: 10px 0;
gap: 10px;
position: relative;
& > div {
display: contents;
& > span {
text-wrap: balance;
}
& > a {
padding: 7px 18px;
min-width: calc(calc(100% - 2 * var(--border-radius-button-between)) / 3);
box-sizing: border-box;
border: 1px solid var(--color-grey-5);
border-radius: var(--border-radius-button);
color: var(--color-grey-7);
text-decoration: navajowhite;
text-align: center;
transition:
background-color 200ms,
border-color 200ms,
color 200ms,
box-shadow 200ms;
&:hover {
border-color: var(--color-grey-7) !important;
background: var(--color-grey-2);
color: var(--color-grey-9);
box-shadow: var(--neon-box-shadow-small);
}
}
}
}
.account__action-bar {
border-radius: var(--border-radius-button);
border: none;
margin: 10px;
}
.account__header__fields {
margin: 0 !important;
}
.account__header__content.translate {
padding: 0 var(--gap);
}
.account__header__joined {
padding: 0 var(--gap) !important;
}
.account-role {
margin: 0 !important;
}
/* there's a read more button in the "What's in a handle?" info popup, that looks like a link instead.
This makes it look at leas soemthign like a "read more" button. */
.account__domain-pill__popout p button.link-button::after {
content: "«";
rotate: 0.25turn;
display: inline-block;
padding-inline: 0.5em;
transition: rotate 200ms;
}
.account__domain-pill__popout p:last-child button.link-button::after {
rotate: 0.75turn;
}
/* Pinned posts */
.featured-carousel {
margin-inline: -30px;
mask-image: linear-gradient(
to right,
transparent,
#000 5px,
#000 calc(100% - 5px),
transparent 100%
);
}
.featured-carousel__header,
.featured-carousel__slide {
margin-inline: 30px;
}
.featured-carousel__slide {
width: calc(100% - 60px);
flex-basis: calc(100% - 60px);
overflow: visible;
}
/* Tabs below the account info */
.account__action-bar-links {
border-radius: inherit;
}
:is(.account__action-bar__tab, #fake) {
border: 1px solid var(--color-grey-5);
}
.account__action-bar__tab {
border: 1px solid var(--color-grey-5);
border-radius: var(--border-radius-button-between);
transition: background-color 200ms;
position: relative;
}
.account__action-bar__tab.active {
background-color: var(--color-grey-2);
}
.account__action-bar__tab + .account__action-bar__tab {
margin-inline-start: var(--border-radius-button-between);
}
.account__action-bar__tab:first-child {
border-top-left-radius: inherit;
border-bottom-left-radius: inherit;
}
.account__action-bar__tab:last-child {
border-top-right-radius: inherit;
border-bottom-right-radius: inherit;
}
.account__action-bar__tab:hover {
background-color: var(--color-grey-4);
}
:is(.account__action-bar__tab, #fake):hover {
border-color: var(--color-grey-6);
}
.account__action-bar__tab>* {
position: relative;
}
.account__action-bar__tab.active::before {
content: "";
position: absolute;
inset: 0;
border-bottom: 4px solid var(--color-primary);
}
.account__action-bar__tab.active:first-child::before {
border-bottom-left-radius: inherit;
}
.account__action-bar__tab.active:last-child::before {
border-bottom-right-radius: inherit;
}
/* ===== Account links ===== */
.account__header__account-note {
border-color: var(--color-grey-6);
border-radius: var(--border-radius-button);
}
.account__header__bio .account__header__fields {
border-radius: var(--border-radius-button);
margin: 10px;
border: none;
}
.account__header__bio .account__header__fields:last-child {
dl {
border-width: 1px;
border-style: solid;
margin-inline: 0;
}
dl:not(.verified) {
border-color: var(--color-grey-6);
}
dl + dl {
margin-top: var(--border-radius-button-between);
}
}
.account__header__fields dl {
border: none;
border-radius: var(--border-radius-button-between);
position: relative;
}
.account__header__fields dl+dl {
margin-top: var(--border-radius-button-between);
}
.account__header__fields dl:first-of-type {
border-top-left-radius: inherit;
border-top-right-radius: inherit;
}
.account__header__fields dl:last-of-type {
border-bottom-left-radius: inherit !important;
border-bottom-right-radius: inherit !important;
}
.account__header__fields dt,
.account__header__fields dd {
border-radius: var(--border-radius-button-between);
max-height: unset;
}
.account__header__fields dt {
background: var(--color-grey-1);
border-top-left-radius: inherit;
border-bottom-left-radius: inherit;
width: 200px;
margin-right: var(--border-radius-button-between);
}
.account__header__fields:not(:last-child) dd {
border-style: solid;
border-width: 1px;
white-space: initial;
word-break: break-all;
&:not(.verified) {
border-color: var(--color-grey-6);
background: color-mix(in srgb, var(--color-offwhite-primary) 5%, transparent);
}
}
.account__header__fields dd a::before {
content: "";
position: absolute;
inset: 0;
opacity: 0;
background-image: radial-gradient(currentColor, transparent);
transition: opacity 200ms;
}
.account__header__fields dd a:hover::before {
opacity: 0.1;
}
:is(#fake, .account__header__fields dd) {
border-radius: var(--border-radius-button-between);
border-top-right-radius: inherit;
border-bottom-right-radius: inherit;
word-break: break-word;
text-align: start;
text-wrap: balance;
}
/* Make sure the "joined at..." date aligns with the text above it */
:is(#fake, .account__header__joined) {
padding: 5px 15px;
}
.account-timeline__header .account__section-headline:not(:first-child) {
background: none;
border: none;
margin-top: 0;
padding-top: 6px;
}
.empty-column-indicator {
border-radius: 8px;
}
/* discover */
.explore__search-header+.scrollable .account__section-headline {
margin-top: -40px;
padding-top: 39px;
background: var(--color-grey-1);
}
/* DMs */
.conversation {
border-bottom: none
}
.follow_requests-unlocked_explanation {
background: none;
margin-top: -20px;
border-bottom: none;
}
.status.status-direct {
outline: 1px solid hsl(225 15% 35% / 1);
outline-offset: 0px;
}
aside.notification__message + .status.status-direct {
outline: none;
}
.conversation--unread.muted :is(
.status__content,
.status__content a,
.status__content p,
.status__content__text,
.status__display-name strong,
#important
) {
color: var(--fg)
}
.conversation__content__names {
white-space: normal;
}
.conversation__content .status__action-bar {
justify-content: start;
}
/* Lists / Follower requests */
h1#Lists, h1#Follow-requests {
margin-left: -10px;
margin-right: -10px;
border-radius: 8px;
backdrop-filter: blur(3px);
background: color-mix(in srgb, var(--color-grey-3) 80%, transparent);
transition: box-shadow 200ms;
position: sticky;
top: 10px;
}
.column-back-button--slim {
position: sticky;
top: 58px;
z-index: 2;
}
.column-back-button--slim [role="button"] {
margin-right: -10px;
width: auto;
border-radius: 8px
}
.column-inline-form {
margin-top: 20px;
outline: 1px solid var(--color-grey-4);
outline-offset: -1px;
border-radius: 8px;
}
/* XY not found indicator */
.regeneration-indicator {
margin-top: 20px;
}
/* ===== About page ===== */
.scrollable.about {
margin-top: 0;
padding: 20px 0px;
}
body:not(.layout-multiple-columns) .scrollable.about::before {
content: "";
display: block;
position: relative;
top: -20px;
left: -10px;
height: 48px;
width: calc(100% + 20px);
background: var(--color-grey-3);
box-sizing: border-box;
border-radius: 8px;
border-left: 1px solid;
border-right: 1px solid;
border-color: var(--color-grey-7);
clip-path: polygon(0 0, 5% 0%, 3% 85%, 5% 85%, 7% 0%, 9% 0%, 7% 85%, 9% 85%, 11% 0%, 100% 0, 100% 100%, 95% 100%, 97% 15%, 95% 15%, 93% 100%, 91% 100%, 93% 15%, 91% 15%, 89% 100%, 13% 100%, 14% 57.5%, 16% 57.5%, 15% 100%, 15% 85%, 88% 85%, 87% 100%, 89% 15%, 13% 15%, 11% 100%, 0 100%);
}
body.layout-multiple-columns .scrollable.about {
padding-top: 0;
}
.about__header__hero.loaded.image {
overflow: revert;
}
.about__header__hero.loaded .image__preview {
display: revert;
z-index: -1;
filter: blur(5px);
border-radius: inherit;
}
.about__header__hero.loaded img {
border-radius: inherit;
}
.about__meta,
.about__section,
.about__domain-blocks {
border-radius: 8px;
}
.about__section__title,
.about__section__body {
border-radius: inherit !important;
}
.about__section__body {
margin-top: -20px;
padding-top: 40px;
}
/* ===== Profile directory ===== */
:is(.account-card, #fake) {
margin: 0 0 20px 0;
border-radius: 8px;
border: 1px solid var(--color-grey-6);
}
.account-card__permalink,
.account-card__header,
.account-card__header img{
border-radius: inherit;
}
.account-card__header {
padding: 0;
}
.account-card__title {
position: relative;
}
/* ====================
* Scrollbars
* ==================== */
/* everything but Safari */
@supports (scrollbar-color: auto) {
html {
scrollbar-color: var(--color-grey-3) transparent;
}
.layout-multiple-columns .scrollable {
scrollbar-width: thin;
padding-inline-end: 5px;
}
}
/* everything but Firefox */
@supports selector(::-webkit-scrollbar) {
::-webkit-scrollbar {
width: 12px;
height: 12px;
background: red;
}
::-webkit-scrollbar-thumb {
margin: 0 2px;
width: 8px;
background: var(--color-grey-2);
border: 1px solid var(--color-grey-4);
border-radius: 50px;
transition: background-color 200ms;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-grey-4);
border-color: var(--color-grey-6);
}
::-webkit-scrollbar-thumb:active {
background: var(--color-grey-6);
border-color: var(--color-grey-7);
}
::-webkit-scrollbar-track {
border: 0 #fff;
border-radius: 8px;
background: rgba(0,0,0,.1);
}
::-webkit-scrollbar-track:active,
::-webkit-scrollbar-track:hover {
background: var(--color-grey-2);
background: rgba(0,0,0,.2);
}
::-webkit-scrollbar-corner {
background: transparent:
}
}
/* ====================
* Advanced View
* ==================== */
/* ===== General Changes ===== */
.columns-area .drawer,
.columns-area .drawer__inner:not(.darker)
{
overflow: revert;
}
.columns-area .drawer__pager {
overflow-y: auto;
overflow-x: hidden;
}
.columns-area .drawer__inner {
height: auto;
min-height: 100%;
}
.column, .drawer {
padding: 10px;
}
/* ===== Feeds ===== */
.columns-area:not(.columns-area--mobile) .scrollable {
background: transparent;
}
.columns-area:not(.columns-area--mobile) :where(
.scrollable article,
.scrollable.detailed-status__wrapper .focusable
) {
background: var(--color-grey-2);
border-radius: 8px;
border: 1px solid var(--color-grey-4);
margin-bottom: 10px;
}
.columns-area:not(.columns-area--mobile) .scrollable.detailed-status__wrapper .focusable:not(.status) {
background: var(--color-grey-3);
border-color: var(--color-grey-7);
}
.columns-area:not(.columns-area--mobile) :where(
.notification--in-thread .status__action-bar,
.notification--in-thread .status__content,
.status--in-thread .status__action-bar,
.status--in-thread .status__content
) {
-webkit-margin-start: 0;
margin-inline-start: 0;
width: 100%;
}
/* Center the columns when space permits it, instead of having them left-aligned */
body.layout-multiple-columns .columns-area>*:first-child {
margin-left: auto;
width: 350px;
}
body.layout-multiple-columns .columns-area>*:last-child {
margin-right: auto;
}
/* ===== First column - search, Profile, compose form ===== */
/* nav menu at the top of 1st column */
body.layout-multiple-columns .drawer--header,
body.layout-multiple-columns .drawer--header a,
body.layout-multiple-columns .drawer__inner {
border-radius: 8px;
}
body.layout-multiple-columns .drawer--header {
border: 1px solid var(--color-grey-6);
}
body.layout-multiple-columns .drawer__inner {
background: linear-gradient(180deg, transparent 50%, var(--color-grey-5));
}
/* The CI Theme hides the mastodon usually displayed here - let's replace it with something more thematically fitting */
body.layout-multiple-columns .drawer__inner__mastodon {
background: url(/packs/media/flavours/glitch/images/wave-drawer-glitched-f44fa25589f31f0ee52ab119cea119cb.png) no-repeat bottom/100% auto;
border-radius: inherit;
display: flex;
align-items: flex-end;
}
body.layout-multiple-columns .column-header {
background: var(--color-grey-3);
border-radius: 8px;
}
/* Spacing between other columns' headers / content */
body.layout-multiple-columns .column .scrollable {
border-radius: 8px;
}
body.layout-multiple-columns .column .scrollable:not(:first-child) {
margin-top: 10px;
}
/* ===== "getting started" page / last column ===== */
.getting-started__wrapper {
& > div {
border-radius: inherit;
}
.column-link {
border: none;
border-radius: inherit;
background-color: transparent;
transition: background-color 200ms;
&:hover {
background-color: var(--color-grey-4);
}
}
}
/*
div[data-column="getting-started"] .getting-started__wrapper {
background: none;
}
div[data-column="getting-started"] .column-subheading {
background: var(--color-grey-4);
border-radius: 8px;
color: var(--color-grey-8);
margin-bottom: 10px;
}
div[data-column="getting-started"] div ~ .column-subheading {
margin-top: 10px;
}
div[data-column="getting-started"] .column-link {
color: #d9e1e8;
position: relative;
background: transparent;
}
div[data-column="getting-started"] .column-link:hover {
color: white;
}
div[data-column="getting-started"] .column-link:hover span::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(to right,
color-mix(in srgb, var(--color-offwhite-primary) 5%, transparent),
color-mix(in srgb, var(--color-offwhite-primary) 10%, transparent));
border-radius: 8px;
animation: 200ms flicker-in ease-out;
}
div[data-column="getting-started"] .column-link:hover span::after {
content: "";
position: absolute;
top: 8px;
right: 8px;
bottom: 8px;
width: 1px;
background: var(--color-white);
box-shadow: var(--neon-box-shadow);
animation: 200ms flicker-in ease-out;
}
div[data-column="getting-started"] .link-footer {
margin-top: auto;
border-radius: inherit;
}
*/
/* user badges
* 1: Moderator
* 3: Owner
* 34: Supporter
*/
/*
.account-role {
position: relative;
margin-top: 2px !important;
/* Start a new stacking context */
z-index: 1;
--color-role-bg: hsl(225deg 10% 30%);
--color-role-border: hsl(227deg 16% 76%);
--color-role-bg-shine: hsl(227deg 16% 54%);
--color-role-border-shine: hsl(227deg 16% 10%);
color: color-mix(in srgb, white, var(--color-role-border));
&[data-account-role-id="1"] {
--color-role-border: hsl(149.12deg 34% 60.78%);
--color-role-border-shine: hsl(240deg 100% 69%);
}
&[data-account-role-id="3"] {
--color-role-border: hsl(330deg 100% 50%);
--color-role-border-shine: hsl(254deg 100% 65%);
}
&[data-account-role-id="34"] {
--color-role-border: hsl(187deg 98% 48%);
--color-role-border-shine: hsl(58deg 100% 47%);
}
}
@keyframes shine {
0% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.account-role::before,
.account-role::after {
content: "";
position: absolute;
border-radius: inherit;
background-size: 300% 100%;
animation: shine 5000ms infinite;
background-position: -100% 50%;
}
*/
/* border */
/*.account-role::before {
z-index: -2;
inset: -1px;
background-image:
linear-gradient(60deg,
transparent 0%,
transparent 40%,
color-mix(in srgb, var(--color-role-border-shine) 40%, transparent) 50%,
transparent 60%,
transparent 100%
),
linear-gradient(var(--color-role-border), var(--color-role-border));
} */
/* background */
/* .account-role::after {
z-index: -1;
inset: 0px;
background-image:
linear-gradient(60deg,
transparent 0%,
transparent 45%,
color-mix(in srgb, var(--color-role-bg-shine) 20%, transparent) 55%,
transparent 65%,
transparent 100%
),
linear-gradient(var(--color-role-bg), var(--color-role-bg));
} */
/* This makes the buttons beneath toots look different */
.status__action-bar,
.detailed-status__action-bar {
/* height: 40px; */
gap: var(--border-radius-button-between);
position: relative;
align-items: stretch;
}
:where(.status__action-bar, .detailed-status__action-bar)
:is(button, .status__action-bar-dropdown, detailed-status__action-bar-dropdown) {
height: 100% !important;
min-width: 40px !important;
z-index: 1;
}
.detailed-status__button button,
.status__action-bar-button {
transition: color 200ms
}
.detailed-status__action-bar-dropdown span {
height: 100%;
}
.status__action-bar :where(button, a),
.detailed-status__button,
.detailed-status__action-bar-dropdown {
border: 1px solid;
border-radius: var(--border-radius-button-between);
border-color: var(--color-grey-5);
position: relative;
}
.status__action-bar a {
flex: 1 1 22px;
/* height: 40px; */
box-sizing: border-box;
padding-inline: 10px;
display: flex;
align-items: center;
justify-content: flex-end;
}
:where(.status__action-bar, .detailed-status__action-bar) :where(button, a)::before {
content: "";
position: absolute;
inset: 0;
background-color: var(--color-grey-7);
opacity: 0.1;
border-radius: inherit;
pointer-events: none;
}
:where(.status__action-bar, .detailed-status__action-bar) button.disabled {
background-color: var(--color-grey-1);
}
:where(.status__action-bar, .detailed-status__action-bar) button.active::before {
opacity: 0.2;
background-image: radial-gradient(currentColor, transparent);
}
.status__action-bar button,
.detailed-status__action-bar button {
margin-inline: 0 !important;
padding: 7px;
}
.status__action-bar button:not(.status__action-bar > button),
.detailed-status__button button,
.detailed-status__action-bar-dropdown button {
border-radius: inherit;
width: 100%
}
:where(.status__action-bar, .detailed-status__action-bar) > :first-child {
border-start-start-radius: var(--border-radius-button);
border-end-start-radius: var(--border-radius-button);
}
:where(.status__action-bar, .detailed-status__action-bar) > :last-child,
.status__action-bar > :last-child button {
border-start-end-radius: var(--border-radius-button);
border-end-end-radius: var(--border-radius-button);
}
.status__action-bar-spacer {
display: none;
}
}
`)
}
if (settings.showOldPunks) {
GM_addStyle(`
body.layout-multiple-columns .drawer__inner__mastodon {
content: url(https://corteximplant.com/system/site_uploads/files/000/000/006/@1x/68f324b193475041.png);
object-fit: contain;
min-height: auto;
object-position: bottom;
-webkit-mask-image: url(${footerImgMask});
-webkit-mask-size: contain;
-webkit-mask-position: bottom;
-webkit-mask-repeat: no-repeat;
}
`)
}
/* emoji picker improvements */
GM_addStyle(`
/* Emoji picker bigger images */
.emoji-mart-category-list {
display: grid;
grid-template-columns: repeat(6, minmax(42px, 1fr));
/* todo: is there a better way for this, considering the cells are supposed to be the same size anyways? */
}
.emoji-mart-category button img,
.emoji-mart-category button span {
width: 30px !important;
height: 30px !important;
}
/* remove empty icons */
.emoji-mart-category-list li:empty {
display: none;
}
.emoji-mart-category-label {
top: -1px;
}
.emoji-mart-category-label span {
--c: color-mix(in srgb, var(--dropdown-background-color), var(--dropdown-background-color));
background: linear-gradient(
to bottom,
var(--dropdown-background-color) 80%,
transparent);
}
/* make sure the grey hover outline is *behind* the emoji */
.emoji-mart-category .emoji-mart-emoji:hover::before {
z-index: -1;
}
button.emoji-mart-emoji span, button.emoji-mart-emoji img {
transition: transform 200ms;
}
button.emoji-mart-emoji:hover span, button.emoji-mart-emoji:hover img {
transform: scale(1.4);
}
/* more comfy emoji picker icon */
.emoji-button>img {
height: 0;
}
.emoji-button::after {
content: "";
background: url(https://corteximplant.com/system/custom_emojis/images/000/025/784/original/aa6fb2394bcb9f0a.png);
filter: grayscale(100%);
opacity: .8;
display: block;
margin: 0;
width: 22px;
height: 22px;
background-size: contain;
transition: filter 200ms, opacity 200ms;
}
.emoji-button:hover::after {
filter: none;
opacity: 1;
}
`)
/* ===== image alt label changes ===== */
GM_addStyle(`
/* WARNING: This relies on :has and thus won't work well in FF (as of Jan 2023) */
/* reposition spoiler button to have the same position as the alt tag */
.spoiler-button--minified button {
border-radius: 8px !important;
}
.spoiler-button--minified button .icon {
width: 20px;
height: 20px;
padding: 2px;
}
/* same for the "follows you" tag on profiles */
.account__header__info {
top: 4px;
left: 4px;
}
span.relationship-tag {
border-radius: 8px;
background: rgba(0 0 0 / 0.6);
color: hsla(0 0% 100% / .7);
opacity: 1;
}
.media-gallery__item__badges {
/* force alt/gif badges to lowercase since i think it looks nicer */
text-transform: lowercase;
border-radius: 8px;
/* and align them with the spoiler button */
bottom: 4px;
inset-inline-start: 4px;
}
/* Add "alt" indicator on audio, videos */
.audio-player:has(canvas.audio-player__canvas[aria-label]) .video-player__buttons.right::before,
.video-player video[aria-label] ~ .video-player__controls .video-player__buttons.right::before{
content: "alt";
color: hsla(0 0% 100% / .7);
padding: 0 5px;
pointer-events: none;
}
.media-gallery__gifv__label {
line-height: 27.1429px;
padding: 0 5px;
}
.media-gallery__alt__label,
.media-gallery__gifv__label,
.sensitive-marker,
/* "hide media" button */
.icon-button.overlayed,
.media-gallery__actions__pill,
/* "click to show" for galleries */
.spoiler-button__overlay__label,
/* play/open actions on YT videos */
.status-card__actions > div
{
border-radius: 8px;
color: hsla(0 0% 100% / .7);
font-size: 0.8em;
font-weight: normal;
line-height: 1.5;
background: rgba(0 0 0 / 0.5);
-webkit-backdrop-filter: grayscale(1) invert(1) brightness(.7) contrast(0.2) opacity(0.5);
backdrop-filter: grayscale(1) invert(1) brightness(.7) contrast(0.2) opacity(0.5);
transition: opacity 200ms;
opacity: var(--opacity, 1);
}
`)
/* ===== Glitch Effect on notifications & default avatars ===== */
if (settings.enableTheme) {
GM_addStyle(`
@media (prefers-reduced-motion: no-preference) {
:where(
.account__avatar, .account__avatar-overlay-overlay
)[style*="/avatars/original/missing.png"],
.account__avatar:has(img[src*="avatars/original/missing.png"]) {
animation: paths 10s step-end infinite;
position: relative;
--padding: -5px;
--start: 5px;
overflow: visible;
}
:where(
.account__avatar, .account__avatar-overlay-overlay
) img {
border-radius: inherit;
}
:where(
.account__avatar, .account__avatar-overlay-overlay
)[style*="/avatars/original/missing.png"]::before,
:where(
.account__avatar, .account__avatar-overlay-overlay
)[style*="/avatars/original/missing.png"]::after,
.account__avatar:has(img[src*="/avatars/original/missing.png"])::before,
.account__avatar:has(img[src*="/avatars/original/missing.png"])::after {
content: "";
position: absolute;
height: 105%;
width: 105%;
background-size: 110% 110%;
background-image: inherit;
background-image: url(/avatars/original/missing.png);
border-radius: inherit;
}
:where(
.account__avatar, .account__avatar-overlay-overlay
)[style*="/avatars/original/missing.png"]::before,
.account__avatar:has(img[src*="/avatars/original/missing.png"])::before {
top: calc((10em / 6) + var(--padding));
left: calc((15em / 6) + var(--padding) + var(--start));
color: #6364ff;
filter: hue-rotate(300deg);
animation:
paths 10s step-end infinite,
opacity 10s step-end infinite,
movement 20s step-end infinite;
}
:where(
.account__avatar, .account__avatar-overlay-overlay
)[style*="/avatars/original/missing.png"]::after,
.account__avatar:has(img[src*="/avatars/original/missing.png"])::after{
top: calc((5em / 6) + var(--padding));
left: calc((-30em / 6) + var(--padding) + var(--start));
color: #1bc7fb;
filter: hue-rotate(122deg);
animation:
paths 14s step-end infinite,
opacity 12s step-end infinite,
movement 16s step-end infinite;
}
/* WARNING: This relies on :has and thus won't work well in FF (as of Jan 2023) */
.column-link--transparent:has(i+i),
.column-link--transparent:has(i>i) {
position: relative;
z-index: 2;
--padding: 15px;
--start: 25px;
padding: var(--padding);
text-decoration: none;
}
.column-link--transparent:has(i+i)::before,
.column-link--transparent:has(i>i)::before,
.column-link--transparent:has(i+i)::after,
.column-link--transparent:has(i>i)::after {
content: attr(title);
position: absolute;
width: 110%;
z-index: -1;
}
.column-link--transparent:has(i+i)::before,
.column-link--transparent:has(i>i)::before {
top: calc((10em / 60) + var(--padding));
left: calc((15em / 60) + var(--padding) + var(--start));
color: #6364ff;
animation:
paths 10s step-end infinite,
opacity 10s step-end infinite,
font 16s step-end infinite,
movement 20s step-end infinite;
}
.column-link--transparent:has(i+i)::after,
.column-link--transparent:has(i>i)::after {
top: calc((5em / 60) + var(--padding));
left: calc((-10em / 60) + var(--padding) + var(--start));
color: #1bc7fb;
animation:
paths 10s step-end infinite,
opacity 10s step-end infinite,
font 14s step-end infinite,
movement 16s step-end infinite;
}
.column-link--transparent:has(i+i) span,
.column-link--transparent:has(i>i) span {
animation: paths 10s step-end infinite;
}
}
@keyframes paths {
0% {
clip-path: polygon(
0% 43%, 83% 43%, 83% 22%, 23% 22%, 23% 24%, 91% 24%, 91% 26%,
18% 26%, 18% 83%, 29% 83%, 29% 17%, 41% 17%, 41% 39%, 18% 39%,
18% 82%, 54% 82%, 54% 88%, 19% 88%, 19% 4%, 39% 4%, 39% 14%,
76% 14%, 76% 52%, 23% 52%, 23% 35%, 19% 35%, 19% 8%, 36% 8%,
36% 31%, 73% 31%, 73% 16%, 1% 16%, 1% 56%, 50% 56%, 50% 8%
);
}
5% {
clip-path: polygon(
0% 29%, 44% 29%, 44% 83%, 94% 83%, 94% 56%, 11% 56%, 11% 64%,
94% 64%, 94% 70%, 88% 70%, 88% 32%, 18% 32%, 18% 96%, 10% 96%,
10% 62%, 9% 62%, 9% 84%, 68% 84%, 68% 50%, 52% 50%, 52% 55%,
35% 55%, 35% 87%, 25% 87%, 25% 39%, 15% 39%, 15% 88%, 52% 88%
);
}
30% {
clip-path: polygon(
0% 53%, 93% 53%, 93% 62%, 68% 62%, 68% 37%, 97% 37%, 97% 89%,
13% 89%, 13% 45%, 51% 45%, 51% 88%, 17% 88%, 17% 54%, 81% 54%,
81% 75%, 79% 75%, 79% 76%, 38% 76%, 38% 28%, 61% 28%, 61% 12%,
55% 12%, 55% 62%, 68% 62%, 68% 51%, 0% 51%, 0% 92%, 63% 92%,
63% 4%, 65% 4%
);
}
45% {
clip-path: polygon(
0% 33%, 2% 33%, 2% 69%, 58% 69%, 58% 94%, 55% 94%, 55% 25%,
33% 25%, 33% 85%, 16% 85%, 16% 19%, 5% 19%, 5% 20%, 79% 20%,
79% 96%, 93% 96%, 93% 50%, 5% 50%, 5% 74%, 55% 74%, 55% 57%,
96% 57%, 96% 59%, 87% 59%, 87% 65%, 82% 65%, 82% 39%, 63% 39%,
63% 92%, 4% 92%, 4% 36%, 24% 36%, 24% 70%, 1% 70%, 1% 43%,
15% 43%, 15% 28%, 23% 28%, 23% 71%, 90% 71%, 90% 86%, 97% 86%,
97% 1%, 60% 1%, 60% 67%, 71% 67%, 71% 91%, 17% 91%, 17% 14%,
39% 14%, 39% 30%, 58% 30%, 58% 11%, 52% 11%, 52% 83%, 68% 83%
);
}
76% {
clip-path: polygon(
0% 26%, 15% 26%, 15% 73%, 72% 73%, 72% 70%, 77% 70%, 77% 75%,
8% 75%, 8% 42%, 4% 42%, 4% 61%, 17% 61%, 17% 12%, 26% 12%,
26% 63%, 73% 63%, 73% 43%, 90% 43%, 90% 67%, 50% 67%, 50% 41%,
42% 41%, 42% 46%, 50% 46%, 50% 84%, 96% 84%, 96% 78%, 49% 78%,
49% 25%, 63% 25%, 63% 14%
);
}
90% {
clip-path: polygon(
0% 41%, 13% 41%, 13% 6%, 87% 6%, 87% 93%, 10% 93%, 10% 13%,
89% 13%, 89% 6%, 3% 6%, 3% 8%, 16% 8%, 16% 79%, 0% 79%,
0% 99%, 92% 99%, 92% 90%, 5% 90%, 5% 60%, 0% 60%, 0% 48%,
89% 48%, 89% 13%, 80% 13%, 80% 43%, 95% 43%, 95% 19%, 80% 19%,
80% 85%, 38% 85%, 38% 62%
);
}
1%, 7%, 33%, 47%, 78%, 93% {
clip-path: none;
}
}
@keyframes movement {
0% {
top: calc((0em / 60) + var(--padding));
left: calc((-20em / 60) + var(--padding) + var(--start));
}
15% {
top: calc((10em / 60) + var(--padding));
left: calc((10em / 60) + var(--padding) + var(--start));
}
60% {
top: calc((5em / 60) + var(--padding));
left: calc((-10em / 60) + var(--padding) + var(--start));
}
75% {
top: calc((-5em / 60) + var(--padding));
left: calc((20em / 60) + var(--padding) + var(--start));
}
100% {
top: calc((10em / 60) + var(--padding));
left: calc((5em / 60) + var(--padding) + var(--start));
}
}
@keyframes opacity {
0% { opacity: 0.1; }
5% { opacity: 0.7; }
30% { opacity: 0.4; }
45% { opacity: 0.6; }
76% { opacity: 0.4; }
90% { opacity: 0.8; }
1%, 7%, 33%, 47%, 78%, 93%
{ opacity: 0; }
}
@keyframes font {
0% {
font-weight: 100;
color: #e0287d;
filter: blur(3px);
}
20% {
font-weight: 500;
color: #fff;
filter: blur(0);
}
50% {
font-weight: 300;
color: #1bc7fb;
filter: blur(2px);
}
60% {
font-weight: 700;
color: #fff;
filter: blur(0);
}
90% {
font-weight: 500;
color: #e0287d;
filter: blur(6px);
}
}
`)
}
// This relies on :has(), without it the styling has no effect due to the @supports query.
// The statement is used to select a bunch of wrappers that
// would otherwise have overflow: hidden, and replace that with an overflow: clip that allows images to be expanded, but keeps e.g. ellipsises.
//
// This is mostly part of the Cortex-Implant Custom CSS by now, you shouldn't need this.
GM_addStyle(`
/* Hover-Zoom for emotes */
@supports selector(:has(a, b)) {
/* Change disable overflow on elements restraining the images while hovering */
/* Toots */
:is(
.display-name,
.display-name__html,
#important),
/* Poll Option */
label.poll__option,
/* DMs */
.conversation__content__names,
.detailed-status__display-name strong,
.conversation__content__info,
.conversation__content,
/* Boosts */
.status__prepend > span,
/* follow notifications */
.notification__message > span,
.account__display-name strong,
.account .account__display-name,
/* Profiles */
.account__header__tabs__name h1,
.account__header__content,
/* Profile Info Table */
.account__header__fields dd,
.account__header__fields dt,
/* Replying to a toot - body only */
.reply-indicator__content:not(.notification-group__embedded-status__content),
/* Picture in picture player */
.picture-in-picture__header__account,
.picture-in-picture__header .display-name span,
.picture-in-picture__header .display-name strong,
/* admin interface */
.batch-table__row__content--with-image
/* FIXME: overflow-clip-margin has kinda bad support
* this needs a fallback for safari
* https://caniuse.com/?search=overflow-clip
*/
{
/* overflow: unset; */
overflow: clip;
overflow-clip-margin: 5em;
}
.notification-group__main {
/* TODO: Collapsed notifications are currently broken */
overflow: unset;
.notification-group__embedded-status {
overflow: hidden;
}
}
/* some fixes where clip won't work: */
.announcements__item__content {
overflow-x: hidden;
}
/* fix hovered emotes in a collapsed notification's 1st line */
.status__content.status__content--with-action:has(img.emojione:hover) {
z-index: 2;
}
/* Add Transition to make it look nice */
:not(
.reply-indicator__header strong,
.emoji-button,
.reactions-bar__item__emoji
)>img.emojione {
position: relative;
/* the spoiler button has a z-index of 100, make sure this goes over the spoiler button. */
z-index: 101;
transition:
transform 200ms,
opacity 200ms;
}
/* Finally, scale emojis on hover and make sure they're fully visible */
:not(
.reply-indicator__header strong,
.emoji-button,
.reactions-bar__item__emoji
)>img.emojione:hover
{
transform: scale(5);
opacity: 1;
/* increase by 1, to have the hovered emoji overlap all others */
z-index: 102;
}
:not(
.reply-indicator__header strong,
.emoji-button,
.reactions-bar__item__emoji
)>img.emojione:not(:hover) {
animation: keep-up-emote 400ms;
}
@keyframes keep-up-emote {
0%,
100% {
z-index: 102;
}
}
@keyframes heartbeat {
0% { scale: 1 }
25% { scale: 1 }
30% { scale: 0.9 }
45% { scale: 1 }
50% { scale: 0.95 }
55% { scale: 1 }
}
:not(
.reply-indicator__header strong,
.emoji-button,
.reactions-bar__item__emoji
)>img.emojione[title*="heart" i]:hover
{
animation: heartbeat 1.5s infinite;
}
}
`)
GM_addStyle(`
/* Dynamically sized Jonny Cyberdon - change to the custom.css style */
body.layout-single-column::after {
content: "";
position: fixed;
left: 1vw;
top: 100vh;
transform: translateY(-100%);
height: clamp(75px, 28.09vw + -255.06px, 200px);
aspect-ratio: 1;
background-image: url(/system/site_uploads/files/000/000/010/original/4a1cd5692e3551a9.png);
background-repeat: no-repeat;
background-size: 100%;
background-position: bottom;
pointer-events: none;
z-index: -9999;
opacity: 0.8;
}
`)
})()