123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916 |
- // 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(--interfaceFont, sans-serif);
- margin: 0;
- color: $fallback--text;
- color: var(--text, $fallback--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 {
- background-color: var(--btn);
- box-shadow: var(--buttonShadow);
- border-radius: var(--btnRadius);
- }
- // 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(--btnText);
- 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(--btnText) 50%, transparent 51%),
- linear-gradient(-45deg, transparent 50%, var(--btnText) 51%);
- background-position: top var(--___bgPadding) left 50%, right 50% bottom var(--___bgPadding);
- }
- &:decrement {
- background-image:
- linear-gradient(45deg, transparent 50%, var(--btnText) 51%),
- linear-gradient(-45deg, var(--btnText) 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(--btnText) 51%),
- linear-gradient(45deg, transparent 50%, var(--btnText) 51%);
- background-position: right var(--___bgPadding) top 50%, left var(--___bgPadding) top 50%;
- }
- &:decrement {
- background-image:
- linear-gradient(-45deg, var(--btnText) 50%, transparent 51%),
- linear-gradient(45deg, var(--btnText) 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: $fallback--link;
- color: var(--link, $fallback--link);
- }
- h4 {
- margin: 0;
- }
- .iconLetter {
- display: inline-block;
- text-align: center;
- font-weight: 1000;
- }
- i[class*="icon-"],
- .svg-inline--fa,
- .iconLetter {
- color: $fallback--icon;
- color: var(--icon, $fallback--icon);
- }
- .button-unstyled:hover,
- a:hover {
- > i[class*="icon-"],
- > .svg-inline--fa,
- > .iconLetter {
- color: var(--text);
- }
- }
- nav {
- z-index: var(--ZI_navbar);
- background-color: $fallback--fg;
- background-color: var(--topBar, $fallback--fg);
- color: $fallback--faint;
- color: var(--faint, $fallback--faint);
- box-shadow: 0 0 4px rgb(0 0 0 / 60%);
- box-shadow: var(--topBarShadow);
- 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: rgb(0 0 0 / 15%);
- background-color: var(--underlay, rgb(0 0 0 / 15%));
- 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: $fallback--text;
- color: var(--btnText, $fallback--text);
- background-color: $fallback--fg;
- background-color: var(--btn, $fallback--fg);
- border: none;
- border-radius: $fallback--btnRadius;
- border-radius: var(--btnRadius, $fallback--btnRadius);
- cursor: pointer;
- box-shadow: $fallback--buttonShadow;
- box-shadow: var(--buttonShadow);
- font-size: 1em;
- font-family: sans-serif;
- font-family: var(--interfaceFont, sans-serif);
- &.-sublime {
- background: transparent;
- }
- i[class*="icon-"],
- .svg-inline--fa {
- color: $fallback--text;
- color: var(--btnText, $fallback--text);
- }
- &::-moz-focus-inner {
- border: none;
- }
- &:hover {
- box-shadow: 0 0 4px rgb(255 255 255 / 30%);
- box-shadow: var(--buttonHoverShadow);
- }
- &:active {
- box-shadow:
- 0 0 4px 0 rgb(255 255 255 / 30%),
- 0 1px 0 0 rgb(0 0 0 / 20%) inset,
- 0 -1px 0 0 rgb(255 255 255 / 20%) inset;
- box-shadow: var(--buttonPressedShadow);
- color: $fallback--text;
- color: var(--btnPressedText, $fallback--text);
- background-color: $fallback--fg;
- background-color: var(--btnPressed, $fallback--fg);
- svg,
- i {
- color: $fallback--text;
- color: var(--btnPressedText, $fallback--text);
- }
- }
- &:disabled {
- cursor: not-allowed;
- color: $fallback--text;
- color: var(--btnDisabledText, $fallback--text);
- background-color: $fallback--fg;
- background-color: var(--btnDisabled, $fallback--fg);
- svg,
- i {
- color: $fallback--text;
- color: var(--btnDisabledText, $fallback--text);
- }
- }
- &.toggled {
- color: $fallback--text;
- color: var(--btnToggledText, $fallback--text);
- background-color: $fallback--fg;
- background-color: var(--btnToggled, $fallback--fg);
- box-shadow:
- 0 0 4px 0 rgb(255 255 255 / 30%),
- 0 1px 0 0 rgb(0 0 0 / 20%) inset,
- 0 -1px 0 0 rgb(255 255 255 / 20%) inset;
- box-shadow: var(--buttonPressedShadow);
- svg,
- i {
- color: $fallback--text;
- color: var(--btnToggledText, $fallback--text);
- }
- }
- &.danger {
- // TODO: add better color variable
- color: $fallback--text;
- color: var(--alertErrorPanelText, $fallback--text);
- background-color: $fallback--alertError;
- background-color: var(--alertError, $fallback--alertError);
- }
- }
- .button-unstyled {
- background: none;
- border: none;
- outline: none;
- display: inline;
- text-align: initial;
- font-size: 100%;
- font-family: inherit;
- padding: 0;
- line-height: unset;
- cursor: pointer;
- box-sizing: content-box;
- color: inherit;
- &.-link {
- color: $fallback--link;
- color: var(--link, $fallback--link);
- }
- &.-fullwidth {
- width: 100%;
- }
- &.-hover-highlight {
- &:hover svg {
- color: $fallback--lightText;
- color: var(--lightText, $fallback--lightText);
- }
- }
- }
- input,
- textarea,
- .input {
- &.unstyled {
- border-radius: 0;
- background: none;
- box-shadow: none;
- height: unset;
- }
- --_padding: 0.5em;
- border: none;
- border-radius: $fallback--inputRadius;
- border-radius: var(--inputRadius, $fallback--inputRadius);
- box-shadow:
- 0 1px 0 0 rgb(0 0 0 / 20%) inset,
- 0 -1px 0 0 rgb(255 255 255 / 20%) inset,
- 0 0 2px 0 rgb(0 0 0 / 100%) inset;
- box-shadow: var(--inputShadow);
- background-color: $fallback--fg;
- background-color: var(--input, $fallback--fg);
- color: $fallback--lightText;
- color: var(--inputText, $fallback--lightText);
- font-family: sans-serif;
- font-family: var(--inputFont, sans-serif);
- 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;
- opacity: 0.5;
- }
- &[type="range"] {
- background: none;
- border: none;
- margin: 0;
- box-shadow: none;
- flex: 1;
- }
- &[type="radio"] {
- display: none;
- &:checked + label::before {
- box-shadow: 0 0 2px black inset, 0 0 0 4px $fallback--fg inset;
- box-shadow: var(--inputShadow), 0 0 0 4px var(--fg, $fallback--fg) inset;
- background-color: var(--accent, $fallback--link);
- }
- &: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
- box-shadow: 0 0 2px black inset;
- box-shadow: var(--inputShadow);
- margin-right: 0.5em;
- background-color: $fallback--fg;
- background-color: var(--input, $fallback--fg);
- 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: $fallback--text;
- color: var(--inputText, $fallback--text);
- }
- &: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: $fallback--checkboxRadius;
- border-radius: var(--checkboxRadius, $fallback--checkboxRadius);
- box-shadow: 0 0 2px black inset;
- box-shadow: var(--inputShadow);
- margin-right: 0.5em;
- background-color: $fallback--fg;
- background-color: var(--input, $fallback--fg);
- 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 {
- padding: var(--_padding);
- line-height: var(--post-line-height);
- }
- option {
- color: $fallback--text;
- color: var(--text, $fallback--text);
- background-color: $fallback--bg;
- background-color: var(--bg, $fallback--bg);
- }
- .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(--inputRadius);
- 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;
- &.badge-notification {
- background-color: $fallback--cRed;
- background-color: var(--badgeNotification, $fallback--cRed);
- color: white;
- color: var(--badgeNotificationText, white);
- }
- }
- .alert {
- margin: 0 0.35em;
- padding: 0 0.25em;
- border-radius: $fallback--tooltipRadius;
- border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
- &.error {
- background-color: $fallback--alertError;
- background-color: var(--alertError, $fallback--alertError);
- color: $fallback--text;
- color: var(--alertErrorText, $fallback--text);
- .panel-heading & {
- color: $fallback--text;
- color: var(--alertErrorPanelText, $fallback--text);
- }
- }
- &.warning {
- background-color: $fallback--alertWarning;
- background-color: var(--alertWarning, $fallback--alertWarning);
- color: $fallback--text;
- color: var(--alertWarningText, $fallback--text);
- .panel-heading & {
- color: $fallback--text;
- color: var(--alertWarningPanelText, $fallback--text);
- }
- }
- &.success {
- background-color: var(--alertSuccess, $fallback--alertWarning);
- color: var(--alertSuccessText, $fallback--text);
- .panel-heading & {
- color: var(--alertSuccessPanelText, $fallback--text);
- }
- }
- }
- .faint {
- color: $fallback--faint;
- color: var(--faint, $fallback--faint);
- }
- .faint-link {
- color: $fallback--faint;
- color: var(--faint, $fallback--faint);
- &:hover {
- text-decoration: underline;
- }
- }
- .visibility-notice {
- padding: 0.5em;
- border: 1px solid $fallback--faint;
- border: 1px solid var(--faint, $fallback--faint);
- border-radius: $fallback--inputRadius;
- border-radius: var(--inputRadius, $fallback--inputRadius);
- }
- .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;
- }
- .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;
- }
|