812 lines
16 KiB
SCSS
812 lines
16 KiB
SCSS
// stylelint-disable rscss/class-format
|
|
/* stylelint-disable no-descending-specificity */
|
|
@import "./variables";
|
|
@import "./panel";
|
|
|
|
:root {
|
|
--navbar-height: 3.5rem;
|
|
--post-line-height: 1.4;
|
|
// Z-Index stuff
|
|
--ZI_media_modal: 9000;
|
|
--ZI_modals_popovers: 8500;
|
|
--ZI_modals: 8000;
|
|
--ZI_navbar_popovers: 7500;
|
|
--ZI_navbar: 7000;
|
|
--ZI_popovers: 6000;
|
|
}
|
|
|
|
html {
|
|
font-size: 14px;
|
|
// overflow-x: clip causes my browser's tab to crash with SIGILL lul
|
|
}
|
|
|
|
body {
|
|
font-family: sans-serif;
|
|
font-family: var(--font);
|
|
margin: 0;
|
|
color: var(--text);
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
overscroll-behavior-y: none;
|
|
overflow-x: clip;
|
|
overflow-y: scroll;
|
|
|
|
&.hidden {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
// ## Custom scrollbars
|
|
// Only show custom scrollbars on devices which
|
|
// have a cursor/pointer to operate them
|
|
@media (any-pointer: fine) {
|
|
* {
|
|
scrollbar-color: var(--btn) transparent;
|
|
|
|
&::-webkit-scrollbar {
|
|
background: transparent;
|
|
}
|
|
|
|
&::-webkit-scrollbar-button,
|
|
&::-webkit-scrollbar-thumb {
|
|
box-shadow: var(--shadow);
|
|
border-radius: var(--roundness);
|
|
}
|
|
|
|
// horizontal/vertical/increment/decrement are webkit-specific stuff
|
|
// that indicates whether we're affecting vertical scrollbar, increase button etc
|
|
// stylelint-disable selector-pseudo-class-no-unknown
|
|
&::-webkit-scrollbar-button {
|
|
--___bgPadding: 2px;
|
|
|
|
color: var(--text);
|
|
background-repeat: no-repeat, no-repeat;
|
|
|
|
&:horizontal {
|
|
background-size: 50% calc(50% - var(--___bgPadding)), 50% calc(50% - var(--___bgPadding));
|
|
|
|
&:increment {
|
|
background-image:
|
|
linear-gradient(45deg, var(--text) 50%, transparent 51%),
|
|
linear-gradient(-45deg, transparent 50%, var(--text) 51%);
|
|
background-position: top var(--___bgPadding) left 50%, right 50% bottom var(--___bgPadding);
|
|
}
|
|
|
|
&:decrement {
|
|
background-image:
|
|
linear-gradient(45deg, transparent 50%, var(--text) 51%),
|
|
linear-gradient(-45deg, var(--text) 50%, transparent 51%);
|
|
background-position: bottom var(--___bgPadding) right 50%, left 50% top var(--___bgPadding);
|
|
}
|
|
}
|
|
|
|
&:vertical {
|
|
background-size: calc(50% - var(--___bgPadding)) 50%, calc(50% - var(--___bgPadding)) 50%;
|
|
|
|
&:increment {
|
|
background-image:
|
|
linear-gradient(-45deg, transparent 50%, var(--text) 51%),
|
|
linear-gradient(45deg, transparent 50%, var(--text) 51%);
|
|
background-position: right var(--___bgPadding) top 50%, left var(--___bgPadding) top 50%;
|
|
}
|
|
|
|
&:decrement {
|
|
background-image:
|
|
linear-gradient(-45deg, var(--text) 50%, transparent 51%),
|
|
linear-gradient(45deg, var(--text) 50%, transparent 51%);
|
|
background-position: left var(--___bgPadding) top 50%, right var(--___bgPadding) top 50%;
|
|
}
|
|
}
|
|
}
|
|
// stylelint-enable selector-pseudo-class-no-unknown
|
|
}
|
|
// Body should have background to scrollbar otherwise it will use white (body color?)
|
|
html {
|
|
scrollbar-color: var(--selectedMenu) var(--wallpaper);
|
|
background: var(--wallpaper);
|
|
}
|
|
}
|
|
|
|
a {
|
|
text-decoration: none;
|
|
color: var(--link);
|
|
}
|
|
|
|
h4 {
|
|
margin: 0;
|
|
}
|
|
|
|
.iconLetter {
|
|
display: inline-block;
|
|
text-align: center;
|
|
font-weight: 1000;
|
|
}
|
|
|
|
i[class*="icon-"],
|
|
.svg-inline--fa,
|
|
.iconLetter {
|
|
color: var(--icon);
|
|
}
|
|
|
|
nav {
|
|
z-index: var(--ZI_navbar);
|
|
box-shadow: var(--shadow);
|
|
box-sizing: border-box;
|
|
height: var(--navbar-height);
|
|
position: fixed;
|
|
}
|
|
|
|
#sidebar {
|
|
grid-area: sidebar;
|
|
}
|
|
|
|
#modal {
|
|
position: absolute;
|
|
z-index: var(--ZI_modals);
|
|
}
|
|
|
|
.column.-scrollable {
|
|
top: var(--navbar-height);
|
|
position: sticky;
|
|
}
|
|
|
|
#main-scroller {
|
|
grid-area: content;
|
|
position: relative;
|
|
}
|
|
|
|
#notifs-column {
|
|
grid-area: notifs;
|
|
}
|
|
|
|
.app-bg-wrapper {
|
|
position: fixed;
|
|
height: 100%;
|
|
top: var(--navbar-height);
|
|
z-index: -1000;
|
|
left: 0;
|
|
right: -20px;
|
|
background-size: cover;
|
|
background-repeat: no-repeat;
|
|
background-color: var(--wallpaper);
|
|
background-image: var(--body-background-image);
|
|
background-position: 50%;
|
|
}
|
|
|
|
.underlay {
|
|
grid-column: 1 / span 3;
|
|
grid-row: 1 / 1;
|
|
pointer-events: none;
|
|
background-color: var(--underlay);
|
|
z-index: -1000;
|
|
}
|
|
|
|
.app-layout {
|
|
--miniColumn: 25rem;
|
|
--maxiColumn: 45rem;
|
|
--columnGap: 1em;
|
|
--status-margin: 0.75em;
|
|
--effectiveSidebarColumnWidth: minmax(var(--miniColumn), var(--sidebarColumnWidth, var(--miniColumn)));
|
|
--effectiveNotifsColumnWidth: minmax(var(--miniColumn), var(--notifsColumnWidth, var(--miniColumn)));
|
|
--effectiveContentColumnWidth: minmax(var(--miniColumn), var(--contentColumnWidth, var(--maxiColumn)));
|
|
|
|
position: relative;
|
|
display: grid;
|
|
grid-template-columns:
|
|
var(--effectiveSidebarColumnWidth)
|
|
var(--effectiveContentColumnWidth);
|
|
grid-template-areas: "sidebar content";
|
|
grid-template-rows: 1fr;
|
|
box-sizing: border-box;
|
|
margin: 0 auto;
|
|
align-content: flex-start;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
min-height: 100vh;
|
|
overflow-x: clip;
|
|
|
|
.column {
|
|
--___columnMargin: var(--columnGap);
|
|
|
|
display: grid;
|
|
grid-template-columns: 100%;
|
|
box-sizing: border-box;
|
|
grid-row: 1 / 1;
|
|
margin: 0 calc(var(--___columnMargin) / 2);
|
|
padding: calc(var(--___columnMargin)) 0;
|
|
row-gap: var(--___columnMargin);
|
|
align-content: start;
|
|
|
|
&:not(.-scrollable) {
|
|
margin-top: var(--navbar-height);
|
|
}
|
|
|
|
&:hover {
|
|
z-index: 2;
|
|
}
|
|
|
|
&.-full-height {
|
|
margin-bottom: 0;
|
|
padding-top: 0;
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
&.-scrollable {
|
|
--___paddingIncrease: calc(var(--columnGap) / 2);
|
|
|
|
position: sticky;
|
|
top: var(--navbar-height);
|
|
max-height: calc(100vh - var(--navbar-height));
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
margin-left: calc(var(--___paddingIncrease) * -1);
|
|
padding-left: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);
|
|
|
|
// On browsers that don't support hiding scrollbars we enforce "show scrolbars" mode
|
|
// might implement old style of hiding scrollbars later if there's demand
|
|
@supports (scrollbar-width: none) or (-webkit-text-fill-color: initial) {
|
|
&:not(.-show-scrollbar) {
|
|
scrollbar-width: none;
|
|
margin-right: calc(var(--___paddingIncrease) * -1);
|
|
padding-right: calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);
|
|
|
|
&::-webkit-scrollbar {
|
|
display: block;
|
|
width: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.panel-heading.-sticky {
|
|
top: calc(var(--columnGap) / -1);
|
|
}
|
|
}
|
|
}
|
|
|
|
&.-has-new-post-button {
|
|
.column {
|
|
padding-bottom: 10rem;
|
|
}
|
|
}
|
|
|
|
&.-no-sticky-headers {
|
|
.column {
|
|
.panel-heading.-sticky {
|
|
position: relative;
|
|
top: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.column-inner {
|
|
display: grid;
|
|
grid-template-columns: 100%;
|
|
box-sizing: border-box;
|
|
row-gap: 1em;
|
|
align-content: start;
|
|
}
|
|
|
|
&.-reverse:not(.-wide, .-mobile) {
|
|
grid-template-columns:
|
|
var(--effectiveContentColumnWidth)
|
|
var(--effectiveSidebarColumnWidth);
|
|
grid-template-areas: "content sidebar";
|
|
}
|
|
|
|
&.-wide {
|
|
grid-template-columns:
|
|
var(--effectiveSidebarColumnWidth)
|
|
var(--effectiveContentColumnWidth)
|
|
var(--effectiveNotifsColumnWidth);
|
|
grid-template-areas: "sidebar content notifs";
|
|
|
|
&.-reverse {
|
|
grid-template-columns:
|
|
var(--effectiveNotifsColumnWidth)
|
|
var(--effectiveContentColumnWidth)
|
|
var(--effectiveSidebarColumnWidth);
|
|
grid-template-areas: "notifs content sidebar";
|
|
}
|
|
}
|
|
|
|
&.-mobile {
|
|
grid-template-columns: 100vw;
|
|
grid-template-areas: "content";
|
|
padding: 0;
|
|
|
|
.column {
|
|
padding-top: 0;
|
|
margin: var(--navbar-height) 0 0 0;
|
|
}
|
|
|
|
.panel-heading,
|
|
.panel-heading::after,
|
|
.panel-heading::before,
|
|
.panel,
|
|
.panel::after {
|
|
border-top-left-radius: 0;
|
|
border-top-right-radius: 0;
|
|
}
|
|
|
|
#sidebar,
|
|
#notifs-column {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
&.-normal {
|
|
#notifs-column {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|
|
|
|
.text-center {
|
|
text-align: center;
|
|
}
|
|
|
|
.button-default {
|
|
user-select: none;
|
|
color: var(--text);
|
|
border: none;
|
|
border-radius: var(--roundness);
|
|
cursor: pointer;
|
|
box-shadow: var(--shadow);
|
|
font-size: 1em;
|
|
font-family: sans-serif;
|
|
font-family: var(--font);
|
|
|
|
&::-moz-focus-inner {
|
|
border: none;
|
|
}
|
|
|
|
&:disabled {
|
|
cursor: not-allowed;
|
|
}
|
|
}
|
|
|
|
.menu-item {
|
|
border: none;
|
|
outline: none;
|
|
text-align: initial;
|
|
font-size: inherit;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
color: inherit;
|
|
position: relative;
|
|
border-bottom: 1px solid;
|
|
border-color: var(--border);
|
|
|
|
&:first-child {
|
|
border-top-right-radius: var(--roundness);
|
|
border-top-left-radius: var(--roundness);
|
|
}
|
|
|
|
&:last-child {
|
|
border-bottom-right-radius: var(--roundness);
|
|
border-bottom-left-radius: var(--roundness);
|
|
border: none;
|
|
}
|
|
}
|
|
|
|
.button-unstyled {
|
|
border: none;
|
|
outline: none;
|
|
display: inline;
|
|
text-align: initial;
|
|
font-size: 100%;
|
|
font-family: inherit;
|
|
box-shadow: var(--shadow);
|
|
padding: 0;
|
|
line-height: unset;
|
|
cursor: pointer;
|
|
box-sizing: content-box;
|
|
color: inherit;
|
|
|
|
&.-link {
|
|
/* stylelint-disable-next-line declaration-no-important */
|
|
color: var(--link) !important;
|
|
}
|
|
}
|
|
|
|
input,
|
|
textarea {
|
|
border: none;
|
|
display: inline-block;
|
|
outline: none;
|
|
}
|
|
|
|
.input {
|
|
&.unstyled {
|
|
border-radius: 0;
|
|
background: none;
|
|
box-shadow: none;
|
|
height: unset;
|
|
}
|
|
|
|
--_padding: 0.5em;
|
|
|
|
border: none;
|
|
border-radius: var(--roundness);
|
|
box-shadow: var(--shadow);
|
|
font-family: var(--font);
|
|
font-size: 1em;
|
|
margin: 0;
|
|
box-sizing: border-box;
|
|
display: inline-block;
|
|
position: relative;
|
|
line-height: 2;
|
|
hyphens: none;
|
|
padding: 0 var(--_padding);
|
|
|
|
&:disabled,
|
|
&[disabled="disabled"],
|
|
&.disabled {
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
&[type="range"] {
|
|
background: none;
|
|
border: none;
|
|
margin: 0;
|
|
box-shadow: none;
|
|
flex: 1;
|
|
}
|
|
|
|
&[type="radio"] {
|
|
display: none;
|
|
|
|
&:checked + label::before {
|
|
box-shadow: var(--shadow);
|
|
background-color: var(--background);
|
|
}
|
|
|
|
&:disabled {
|
|
&,
|
|
& + label,
|
|
& + label::before {
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
+ label::before {
|
|
flex-shrink: 0;
|
|
display: inline-block;
|
|
content: "";
|
|
transition: box-shadow 200ms;
|
|
width: 1.1em;
|
|
height: 1.1em;
|
|
border-radius: 100%; // Radio buttons should always be circle
|
|
background-color: var(--background);
|
|
box-shadow: var(--shadow);
|
|
margin-right: 0.5em;
|
|
vertical-align: top;
|
|
text-align: center;
|
|
line-height: 1.1;
|
|
font-size: 1.1em;
|
|
box-sizing: border-box;
|
|
color: transparent;
|
|
overflow: hidden;
|
|
}
|
|
}
|
|
|
|
&[type="checkbox"] {
|
|
&:checked + label::before {
|
|
color: var(--text);
|
|
background-color: var(--background);
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
&:disabled {
|
|
&,
|
|
& + label,
|
|
& + label::before {
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
+ label::before {
|
|
flex-shrink: 0;
|
|
display: inline-block;
|
|
content: "✓";
|
|
transition: color 200ms;
|
|
width: 1.1em;
|
|
height: 1.1em;
|
|
border-radius: var(--roundness);
|
|
box-shadow: var(--shadow);
|
|
margin-right: 0.5em;
|
|
vertical-align: top;
|
|
text-align: center;
|
|
line-height: 1.1;
|
|
font-size: 1.1em;
|
|
box-sizing: border-box;
|
|
color: transparent;
|
|
overflow: hidden;
|
|
}
|
|
}
|
|
|
|
&.resize-height {
|
|
resize: vertical;
|
|
}
|
|
}
|
|
|
|
// Textareas should have stock line-height + vertical padding instead of huge line-height
|
|
textarea.input {
|
|
padding: var(--_padding);
|
|
line-height: var(--post-line-height);
|
|
}
|
|
|
|
option {
|
|
color: var(--text);
|
|
background-color: var(--background);
|
|
}
|
|
|
|
.hide-number-spinner {
|
|
appearance: textfield;
|
|
|
|
&[type="number"]::-webkit-inner-spin-button,
|
|
&[type="number"]::-webkit-outer-spin-button {
|
|
opacity: 0;
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.cards-list {
|
|
list-style: none;
|
|
display: grid;
|
|
grid-auto-flow: row dense;
|
|
grid-template-columns: 1fr 1fr;
|
|
|
|
li {
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--roundness);
|
|
padding: 0.5em;
|
|
margin: 0.25em;
|
|
}
|
|
}
|
|
|
|
.btn-block {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
|
|
.btn-group {
|
|
position: relative;
|
|
display: inline-flex;
|
|
vertical-align: middle;
|
|
|
|
button,
|
|
.button-dropdown {
|
|
position: relative;
|
|
flex: 1 1 auto;
|
|
|
|
&:not(:last-child),
|
|
&:not(:last-child) .button-default {
|
|
border-top-right-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
}
|
|
|
|
&:not(:first-child),
|
|
&:not(:first-child) .button-default {
|
|
border-top-left-radius: 0;
|
|
border-bottom-left-radius: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.fa {
|
|
color: grey;
|
|
}
|
|
|
|
.mobile-shown {
|
|
display: none;
|
|
}
|
|
|
|
.badge {
|
|
box-sizing: border-box;
|
|
display: inline-block;
|
|
border-radius: 99px;
|
|
max-width: 10em;
|
|
min-width: 1.7em;
|
|
height: 1.3em;
|
|
padding: 0.15em;
|
|
vertical-align: middle;
|
|
font-weight: normal;
|
|
font-style: normal;
|
|
font-size: 0.9em;
|
|
line-height: 1;
|
|
text-align: center;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
|
|
&.-dot,
|
|
&.-counter {
|
|
margin: 0;
|
|
position: absolute;
|
|
}
|
|
|
|
&.-dot {
|
|
min-height: 8px;
|
|
max-height: 8px;
|
|
min-width: 8px;
|
|
max-width: 8px;
|
|
padding: 0;
|
|
line-height: 0;
|
|
font-size: 0;
|
|
left: calc(50% - 4px);
|
|
top: calc(50% - 4px);
|
|
margin-left: 6px;
|
|
margin-top: -6px;
|
|
}
|
|
|
|
&.-counter {
|
|
border-radius: var(--roundness);
|
|
font-size: 0.75em;
|
|
line-height: 1;
|
|
text-align: right;
|
|
padding: 0.2em;
|
|
min-width: 0;
|
|
left: calc(50% - 0.5em);
|
|
top: calc(50% - 0.4em);
|
|
margin-left: 0.7em;
|
|
margin-top: -1em;
|
|
}
|
|
}
|
|
|
|
.alert {
|
|
margin: 0 0.35em;
|
|
padding: 0 0.25em;
|
|
border-radius: var(--roundness);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
.faint {
|
|
--text: var(--textFaint);
|
|
--link: var(--linkFaint);
|
|
|
|
color: var(--text);
|
|
}
|
|
|
|
.visibility-notice {
|
|
padding: 0.5em;
|
|
border: 1px solid var(--textFaint);
|
|
border-radius: var(--roundness);
|
|
}
|
|
|
|
.notice-dismissible {
|
|
padding-right: 4rem;
|
|
position: relative;
|
|
|
|
.dismiss {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
padding: 0.5em;
|
|
color: inherit;
|
|
}
|
|
}
|
|
|
|
.fa-scale-110 {
|
|
&.svg-inline--fa,
|
|
&.iconLetter {
|
|
font-size: 1.1em;
|
|
}
|
|
}
|
|
|
|
.fa-old-padding {
|
|
&.iconLetter,
|
|
&.svg-inline--fa,
|
|
&-layer {
|
|
padding: 0 0.3em;
|
|
}
|
|
}
|
|
|
|
.veryfaint {
|
|
opacity: 0.25;
|
|
}
|
|
|
|
.timeago {
|
|
--link: var(--text);
|
|
--linkFaint: var(--textFaint);
|
|
}
|
|
|
|
.login-hint {
|
|
text-align: center;
|
|
|
|
@media all and (min-width: 801px) {
|
|
display: none;
|
|
}
|
|
|
|
a {
|
|
display: inline-block;
|
|
padding: 1em 0;
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
.btn.button-default {
|
|
min-height: 2em;
|
|
}
|
|
|
|
.new-status-notification {
|
|
position: relative;
|
|
font-size: 1.1em;
|
|
z-index: 1;
|
|
flex: 1;
|
|
}
|
|
|
|
@media all and (max-width: 800px) {
|
|
.mobile-hidden {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
|
|
100% {
|
|
transform: rotate(359deg);
|
|
}
|
|
}
|
|
|
|
@keyframes shakeError {
|
|
0% {
|
|
transform: translateX(0);
|
|
}
|
|
|
|
15% {
|
|
transform: translateX(0.375rem);
|
|
}
|
|
|
|
30% {
|
|
transform: translateX(-0.375rem);
|
|
}
|
|
|
|
45% {
|
|
transform: translateX(0.375rem);
|
|
}
|
|
|
|
60% {
|
|
transform: translateX(-0.375rem);
|
|
}
|
|
|
|
75% {
|
|
transform: translateX(0.375rem);
|
|
}
|
|
|
|
90% {
|
|
transform: translateX(-0.375rem);
|
|
}
|
|
|
|
100% {
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
// Vue transitions
|
|
.fade-enter-active,
|
|
.fade-leave-active {
|
|
transition: opacity 0.3s;
|
|
}
|
|
|
|
.fade-enter-from,
|
|
.fade-leave-active {
|
|
opacity: 0;
|
|
}
|
|
/* stylelint-enable no-descending-specificity */
|
|
|
|
.visible-for-screenreader-only {
|
|
display: block;
|
|
width: 1px;
|
|
height: 1px;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
visibility: visible;
|
|
clip: rect(0 0 0 0);
|
|
padding: 0;
|
|
position: absolute;
|
|
}
|