From 3963ae221742bb4786d6a258294bd93dcb95c30b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 14:50:08 -0500 Subject: [PATCH 01/46] Start replacing $gab-brand-default with --brand-color --- app/styles/azure.scss | 15 ++++----------- app/styles/soapbox-light/diff.scss | 6 +++--- app/styles/soapbox/about.scss | 4 ++-- app/styles/soapbox/admin.scss | 2 +- app/styles/soapbox/basics.scss | 2 +- app/styles/soapbox/components.scss | 18 +++++++++--------- .../soapbox/components/dropdown-menu.scss | 2 +- app/styles/soapbox/components/group-form.scss | 4 ++-- .../components/group-sidebar-panel.scss | 2 +- app/styles/soapbox/components/inputs.scss | 2 +- app/styles/soapbox/components/tabs-bar.scss | 2 +- app/styles/soapbox/containers.scss | 4 ++-- app/styles/soapbox/donations.scss | 4 ++-- 13 files changed, 30 insertions(+), 37 deletions(-) diff --git a/app/styles/azure.scss b/app/styles/azure.scss index 501adb5a1..5539c142d 100644 --- a/app/styles/azure.scss +++ b/app/styles/azure.scss @@ -1,15 +1,17 @@ @import 'soapbox-light/variables'; -// $gab-brand-default: lighten(#149dfb, 10%); $gab-brand-default: #0482d8; $gab-background-base-light: #f2f3f6; $gab-background: $gab-background-base-light; $ui-base-color: #d9f2f9; $ui-highlight-color: $gab-brand-default; -// $nav-ui-background-color: #000; $nav-ui-highlight-color: #149dfb; $ui-base-lighter-color: #b0c0cf; +:root { + --brand-color: #0482d8; +} + @import 'application'; @import 'soapbox-light/diff'; @@ -18,16 +20,7 @@ $ui-base-lighter-color: #b0c0cf; transition: 0.1s; outline: none; - // &.active { - // color: darken(#04d8c4, 40%); - // } - // - // &:hover { - // color: darken(#04d8c4, 60%); - // } - &::before { - // background-color: darken($nav-ui-highlight-color, 10%); bottom: auto; opacity: 0; height: 15px; diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index a50d1c883..8368e2a14 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -289,10 +289,10 @@ body { .simple_form input[type="email"], .simple_form input[type="password"], .simple_form textarea { - border-color: $gab-brand-default; + border-color: var(--brand-color); &:hover { - border-color: $gab-brand-default; + border-color: var(--brand-color); } } @@ -355,7 +355,7 @@ body { .admin-wrapper .sidebar ul li a.selected { color: $gab-background-container-light; - background-color: $gab-brand-default; + background-color: var(--brand-color); } .admin-wrapper .sidebar ul li .simple-navigation-active-leaf a.selected { diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 770893475..acf1cd1e3 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -662,7 +662,7 @@ $small-breakpoint: 960px; $gab-background: $gab-background-base-dark !default; position: relative; - background-color: $gab-brand-default; + background-color: var(--brand-color); background-image: url('data:image/svg+xml;utf8,'); background-size: 100% auto; background-repeat: no-repeat; @@ -959,7 +959,7 @@ $small-breakpoint: 960px; h1 { @include font-montserrat; - color: $gab-brand-default; + color: var(--brand-color); } } diff --git a/app/styles/soapbox/admin.scss b/app/styles/soapbox/admin.scss index df0eb5666..0050577e5 100644 --- a/app/styles/soapbox/admin.scss +++ b/app/styles/soapbox/admin.scss @@ -57,7 +57,7 @@ $content-width: 840px; } &:hover { - color: $gab-brand-default; + color: var(--brand-color); background-color: $gab-background; transition: all 100ms linear; transition-property: color, background-color; diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 7870ae0f1..e67efd4b4 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -160,7 +160,7 @@ button { } ::selection { - background: $gab-brand-default; + background: var(--brand-color); color: $white; } diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 0f9a6e087..fc7fddadc 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -391,7 +391,7 @@ } a { - color: $gab-brand-default; + color: var(--brand-color); text-decoration: none; &:hover { @@ -453,7 +453,7 @@ display: block; font-size: 15px; line-height: 20px; - color: $gab-brand-default; + color: var(--brand-color); border: 0; background: transparent; padding: 0; @@ -592,7 +592,7 @@ color: $gab-secondary-text; a { - color: $gab-brand-default; + color: var(--brand-color); font-weight: bold; text-decoration: none; @@ -1544,7 +1544,7 @@ a.account__display-name { right: 14px; width: 61px; height: 61px; - background-color: $nav-ui-highlight-color; + background-color: var(--brand-color); border: 0; border-radius: 999px; box-shadow: 2px 5px 5px rgba(0, 0, 0, 0.5); @@ -1868,7 +1868,7 @@ a.account__display-name { } .react-toggle--checked .react-toggle-track { - background-color: $gab-brand-default; + background-color: var(--brand-color); } .react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { @@ -1928,7 +1928,7 @@ a.account__display-name { .react-toggle--checked .react-toggle-thumb { left: 27px; - border-color: $gab-brand-default; + border-color: var(--brand-color); } .column-link { @@ -5090,7 +5090,7 @@ noscript { color: $secondary-text-color; a { - color: $gab-brand-default !important; + color: var(--brand-color) !important; } } } @@ -5115,7 +5115,7 @@ noscript { display: block; margin: 15px auto; text-align: center; - color: $gab-brand-default; + color: var(--brand-color); } } } @@ -5199,7 +5199,7 @@ noscript { } .badge { - background-color: $gab-brand-default; + background-color: var(--brand-color); color: #fff; font-size: 12px; font-weight: normal; diff --git a/app/styles/soapbox/components/dropdown-menu.scss b/app/styles/soapbox/components/dropdown-menu.scss index 0cc214c54..371577cc4 100644 --- a/app/styles/soapbox/components/dropdown-menu.scss +++ b/app/styles/soapbox/components/dropdown-menu.scss @@ -71,7 +71,7 @@ &:active { outline: 0; color: #fff; - background: $gab-brand-default !important; + background: var(--brand-color) !important; } } diff --git a/app/styles/soapbox/components/group-form.scss b/app/styles/soapbox/components/group-form.scss index fad2ebfbb..e9cef5766 100644 --- a/app/styles/soapbox/components/group-form.scss +++ b/app/styles/soapbox/components/group-form.scss @@ -37,13 +37,13 @@ background-size: 100px 1200px; &:hover { - color: $gab-brand-default; + color: var(--brand-color); background-position: 0 -100px; } &.group-form__file-label--selected { background-position: 0 -100px; - color: $gab-brand-default; + color: var(--brand-color); } } diff --git a/app/styles/soapbox/components/group-sidebar-panel.scss b/app/styles/soapbox/components/group-sidebar-panel.scss index 8a2d51031..bbe96bdae 100644 --- a/app/styles/soapbox/components/group-sidebar-panel.scss +++ b/app/styles/soapbox/components/group-sidebar-panel.scss @@ -26,7 +26,7 @@ color: $gab-secondary-text; &__unread { - color: $gab-brand-default; + color: var(--brand-color); } } } diff --git a/app/styles/soapbox/components/inputs.scss b/app/styles/soapbox/components/inputs.scss index f0fa22956..ecd73d096 100644 --- a/app/styles/soapbox/components/inputs.scss +++ b/app/styles/soapbox/components/inputs.scss @@ -8,7 +8,7 @@ textarea { padding: 7px 10px; border: 1px solid; border-radius: 4px; - color: $gab-brand-default; + color: var(--brand-color); border-color: $gab-placeholder-accent; background: $gab-background-container; &:focus {outline: none;} diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/soapbox/components/tabs-bar.scss index 5d30ea91a..a45cf6be4 100644 --- a/app/styles/soapbox/components/tabs-bar.scss +++ b/app/styles/soapbox/components/tabs-bar.scss @@ -1,4 +1,4 @@ -$nav-ui-background-color: $gab-brand-default !default; +$nav-ui-background-color: var(--brand-color) !default; .tabs-bar { display: flex; diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index ba4f2030a..03bf01c3f 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -346,7 +346,7 @@ &:hover, &:focus, &:active { - color: $gab-brand-default; + color: var(--brand-color); } } @@ -359,7 +359,7 @@ } .nav-button { - background: $gab-brand-default; + background: var(--brand-color); color: #fff; margin: 8px; margin-left: 0; diff --git a/app/styles/soapbox/donations.scss b/app/styles/soapbox/donations.scss index 2130b8a2f..45bece23c 100644 --- a/app/styles/soapbox/donations.scss +++ b/app/styles/soapbox/donations.scss @@ -190,7 +190,7 @@ body.admin { } &__reached { - color: $gab-brand-default; + color: var(--brand-color); } .wtf-panel__content { @@ -208,6 +208,6 @@ body.admin { &__progress { height: 100%; - background: $gab-brand-default; + background: var(--brand-color); } } From a38560f9147bf13f571dfeb8ed931d6a8bbb589c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 14:52:12 -0500 Subject: [PATCH 02/46] Add chromatism.js https://github.com/graypegg/chromatism --- package.json | 1 + yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/package.json b/package.json index 8e700dc41..9aafa764c 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-runtime": "^6.26.0", "blurhash": "^1.0.0", + "chromatism": "^3.0.0", "classnames": "^2.2.5", "compression-webpack-plugin": "^3.0.0", "cross-env": "^6.0.0", diff --git a/yarn.lock b/yarn.lock index 8185280d5..378e1fd67 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2445,6 +2445,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== +chromatism@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chromatism/-/chromatism-3.0.0.tgz#a7249d353c1e4f3577e444ac41171c4e2e624b12" + integrity sha1-pySdNTweTzV35ESsQRccTi5iSxI= + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" From 67a7adb9a9f031918f69914863ee0dc45320911b Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 19:05:01 -0500 Subject: [PATCH 03/46] Action to set theme, render theme CSS --- app/soapbox/actions/theme.js | 8 ++++++++ app/soapbox/containers/soapbox.js | 15 ++++++++++++++- app/soapbox/reducers/index.js | 2 ++ app/soapbox/reducers/theme.js | 15 +++++++++++++++ app/soapbox/utils/theme.js | 5 +++++ app/styles/azure.scss | 6 +++--- 6 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 app/soapbox/actions/theme.js create mode 100644 app/soapbox/reducers/theme.js create mode 100644 app/soapbox/utils/theme.js diff --git a/app/soapbox/actions/theme.js b/app/soapbox/actions/theme.js new file mode 100644 index 000000000..809170730 --- /dev/null +++ b/app/soapbox/actions/theme.js @@ -0,0 +1,8 @@ +export const SET_THEME = 'SET_THEME'; + +export function setTheme(themeData) { + return { + type: SET_THEME, + themeData, + }; +} diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index 63c732509..7ca447e4c 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -23,6 +23,9 @@ import { fetchSoapboxConfig } from 'soapbox/actions/soapbox'; import { fetchMe } from 'soapbox/actions/me'; import PublicLayout from 'soapbox/features/public_layout'; import { getSettings } from 'soapbox/actions/settings'; +import { themeDataToCss } from 'soapbox/utils/theme'; +import { setTheme } from 'soapbox/actions/theme'; +import { Map as ImmutableMap } from 'immutable'; export const store = configureStore(); const hydrateAction = hydrateStore(initialState); @@ -48,6 +51,7 @@ const mapStateToProps = (state) => { dyslexicFont: settings.get('dyslexicFont'), demetricator: settings.get('demetricator'), locale: settings.get('locale'), + themeCss: themeDataToCss(state.get('theme')), }; }; @@ -63,6 +67,8 @@ class SoapboxMount extends React.PureComponent { dyslexicFont: PropTypes.bool, demetricator: PropTypes.bool, locale: PropTypes.string.isRequired, + themeCss: PropTypes.string, + dispatch: PropTypes.func, }; getThemeChunk = theme => { @@ -70,8 +76,14 @@ class SoapboxMount extends React.PureComponent { return cssChunks.filter(chunk => chunk.startsWith(theme))[0]; }; + componentDidMount() { + this.props.dispatch(setTheme(ImmutableMap({ + 'brand-color': 'green', + }))); + } + render() { - const { me, theme, reduceMotion, systemFont, dyslexicFont, demetricator, locale } = this.props; + const { me, theme, themeCss, reduceMotion, systemFont, dyslexicFont, demetricator, locale } = this.props; if (me === null) return null; const { localeData, messages } = getLocale(); @@ -98,6 +110,7 @@ class SoapboxMount extends React.PureComponent { {theme && } + {themeCss && } diff --git a/app/soapbox/reducers/index.js b/app/soapbox/reducers/index.js index c91f2f0cb..7d3f59a98 100644 --- a/app/soapbox/reducers/index.js +++ b/app/soapbox/reducers/index.js @@ -42,6 +42,7 @@ import soapbox from './soapbox'; import instance from './instance'; import me from './me'; import auth from './auth'; +import theme from './theme'; const reducers = { dropdown_menu, @@ -87,6 +88,7 @@ const reducers = { instance, me, auth, + theme, }; export default combineReducers(reducers); diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js new file mode 100644 index 000000000..c5c29c60a --- /dev/null +++ b/app/soapbox/reducers/theme.js @@ -0,0 +1,15 @@ +import { + SET_THEME, +} from '../actions/theme'; +import { Map as ImmutableMap } from 'immutable'; + +const initialState = ImmutableMap(); + +export default function theme(state = initialState, action) { + switch(action.type) { + case SET_THEME: + return action.themeData; + default: + return state; + } +}; diff --git a/app/soapbox/utils/theme.js b/app/soapbox/utils/theme.js new file mode 100644 index 000000000..017cce544 --- /dev/null +++ b/app/soapbox/utils/theme.js @@ -0,0 +1,5 @@ +export const themeDataToCss = themeData => ( + themeData + .entrySeq() + .reduce((acc, cur) => acc + `--${cur[0]}:${cur[1]};`, '') +); diff --git a/app/styles/azure.scss b/app/styles/azure.scss index 5539c142d..4b6c3c708 100644 --- a/app/styles/azure.scss +++ b/app/styles/azure.scss @@ -8,9 +8,9 @@ $ui-highlight-color: $gab-brand-default; $nav-ui-highlight-color: #149dfb; $ui-base-lighter-color: #b0c0cf; -:root { - --brand-color: #0482d8; -} +// :root { +// --brand-color: #0482d8; +// } @import 'application'; @import 'soapbox-light/diff'; From 56540932e19fc5ae651acec0030bf74d978a37dd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 20:11:08 -0500 Subject: [PATCH 04/46] Start adding color adaptations --- app/soapbox/containers/soapbox.js | 3 ++- app/soapbox/reducers/theme.js | 10 +++++++++- app/styles/azure.scss | 4 ---- app/styles/soapbox/components/tabs-bar.scss | 4 ++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index 7ca447e4c..be9856722 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -78,7 +78,8 @@ class SoapboxMount extends React.PureComponent { componentDidMount() { this.props.dispatch(setTheme(ImmutableMap({ - 'brand-color': 'green', + // 'brand-color': '#0482d8', + 'brand-color': '#1ca82b', }))); } diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index c5c29c60a..40da32c3a 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -2,13 +2,21 @@ import { SET_THEME, } from '../actions/theme'; import { Map as ImmutableMap } from 'immutable'; +import { brightness, hue } from 'chromatism'; const initialState = ImmutableMap(); +const populate = themeData => { + const { 'brand-color': brandColor } = themeData.toObject(); + return ImmutableMap({ + 'nav-ui-highlight-color': brightness(10, hue(-3, brandColor).hex).hex, + }).merge(themeData); +}; + export default function theme(state = initialState, action) { switch(action.type) { case SET_THEME: - return action.themeData; + return populate(ImmutableMap(action.themeData)); default: return state; } diff --git a/app/styles/azure.scss b/app/styles/azure.scss index 4b6c3c708..ccf45b00f 100644 --- a/app/styles/azure.scss +++ b/app/styles/azure.scss @@ -8,10 +8,6 @@ $ui-highlight-color: $gab-brand-default; $nav-ui-highlight-color: #149dfb; $ui-base-lighter-color: #b0c0cf; -// :root { -// --brand-color: #0482d8; -// } - @import 'application'; @import 'soapbox-light/diff'; diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/soapbox/components/tabs-bar.scss index a45cf6be4..3631457a2 100644 --- a/app/styles/soapbox/components/tabs-bar.scss +++ b/app/styles/soapbox/components/tabs-bar.scss @@ -120,7 +120,7 @@ $nav-ui-background-color: var(--brand-color) !default; height: 34px; margin-left: 20px; border-radius: 4px; - background-color: $nav-ui-highlight-color !important; + background-color: var(--nav-ui-highlight-color) !important; transition: background-color 0.2s; font-weight: bold; font-size: 16px; @@ -205,7 +205,7 @@ $nav-ui-background-color: var(--brand-color) !default; display: block; width: 100%; height: 0; - background: $nav-ui-highlight-color; + background: var(--nav-ui-highlight-color); position: absolute; bottom: 0; left: 0; From 04911838770e993e2fb5de66b8f1063f2b1b1318 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 21:48:37 -0500 Subject: [PATCH 05/46] Replace $highlight-text-color --- app/soapbox/reducers/theme.js | 9 +++++- app/styles/soapbox/about.scss | 6 ++-- app/styles/soapbox/accounts.scss | 2 +- app/styles/soapbox/admin.scss | 6 ++-- app/styles/soapbox/basics.scss | 4 +-- app/styles/soapbox/components.scss | 30 +++++++++---------- .../soapbox/components/compose-form.scss | 6 ++-- app/styles/soapbox/components/modal.scss | 4 +-- app/styles/soapbox/emoji_picker.scss | 4 +-- app/styles/soapbox/forms.scss | 8 ++--- app/styles/soapbox/polls.scss | 2 +- app/styles/soapbox/tables.scss | 2 +- 12 files changed, 45 insertions(+), 38 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 40da32c3a..2d495407c 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -2,14 +2,21 @@ import { SET_THEME, } from '../actions/theme'; import { Map as ImmutableMap } from 'immutable'; -import { brightness, hue } from 'chromatism'; +import { brightness, hue, convert } from 'chromatism'; const initialState = ImmutableMap(); +const cssrgba = (color, a) => { + const { r, g, b } = convert(color).rgb; + return `rgba(${[r, g, b, a].join(',')})`; +}; + const populate = themeData => { const { 'brand-color': brandColor } = themeData.toObject(); return ImmutableMap({ 'nav-ui-highlight-color': brightness(10, hue(-3, brandColor).hex).hex, + 'brand-color-faint': cssrgba(brandColor, 0.1), + 'highlight-text-color': brandColor, }).merge(themeData); }; diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index acf1cd1e3..5d328940e 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -32,7 +32,7 @@ $small-breakpoint: 960px; } a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: underline; } @@ -50,7 +50,7 @@ $small-breakpoint: 960px; color: $darker-text-color; a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: underline; } } @@ -304,7 +304,7 @@ $small-breakpoint: 960px; color: $darker-text-color; a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: underline; } } diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index dba94b7c6..5f063eb8c 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -261,7 +261,7 @@ } a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: none; &:hover, diff --git a/app/styles/soapbox/admin.scss b/app/styles/soapbox/admin.scss index 0050577e5..4332a7214 100644 --- a/app/styles/soapbox/admin.scss +++ b/app/styles/soapbox/admin.scss @@ -208,7 +208,7 @@ $content-width: 840px; color: $gab-secondary-text; a { - color: $highlight-text-color; + color: var(--highlight-text-color); } } @@ -297,7 +297,7 @@ $content-width: 840px; } &.selected { - color: $highlight-text-color; + color: var(--highlight-text-color); border-bottom: 2px solid $ui-highlight-color; } } @@ -401,7 +401,7 @@ $content-width: 840px; font-size: 14px; a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: none; &:hover { diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index e67efd4b4..5f66c2d92 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -168,7 +168,7 @@ button { color: $primary-text-color; padding: 15px 20px; font-size: 14px; - background-color: rgba($highlight-text-color, .1); + background-color: var(--brand-color-faint); margin: 5px 20px; border-radius: 8px; @@ -186,7 +186,7 @@ button { } a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: none; &:hover { diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index fc7fddadc..2bfd6287e 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -139,7 +139,7 @@ } &.active { - color: $highlight-text-color; + color: var(--highlight-text-color); } &::-moz-focus-inner { @@ -166,7 +166,7 @@ } &.active { - color: $highlight-text-color; + color: var(--highlight-text-color); &.disabled { color: lighten($highlight-text-color, 13%); @@ -212,7 +212,7 @@ } &.active { - color: $highlight-text-color; + color: var(--highlight-text-color); } &::-moz-focus-inner { @@ -573,7 +573,7 @@ color: $inverted-text-color; a { - color: $highlight-text-color; + color: var(--highlight-text-color); } a.status__content__spoiler-link { @@ -1095,7 +1095,7 @@ a.account__display-name { position: relative; .fa { - color: $highlight-text-color; + color: var(--highlight-text-color); } > span { @@ -1769,7 +1769,7 @@ a.account__display-name { .column-back-button { background: lighten($ui-base-color, 4%); - color: $highlight-text-color; + color: var(--highlight-text-color); cursor: pointer; flex: 0 0 auto; font-size: 16px; @@ -1790,7 +1790,7 @@ a.account__display-name { background: lighten($ui-base-color, 4%); border: 0; font-family: inherit; - color: $highlight-text-color; + color: var(--highlight-text-color); cursor: pointer; white-space: nowrap; font-size: 16px; @@ -2083,7 +2083,7 @@ a.account__display-name { &:focus, &:active { color: $primary-text-color; - border-bottom-color: $highlight-text-color; + border-bottom-color: var(--highlight-text-color); } @media screen and (max-width: 600px) { @@ -2116,7 +2116,7 @@ a.account__display-name { } .reduce-motion button.icon-button.active i.fa-retweet { - color: $highlight-text-color; + color: var(--highlight-text-color); } .status-card { @@ -2441,7 +2441,7 @@ a.status-card.compact:hover { &.active { color: $primary-text-color; border-radius: 10px; - background-color: rgba($highlight-text-color, .1); + background-color: var(--brand-color-faint); } @media screen and (max-width: $nav-breakpoint-2) { @@ -2459,14 +2459,14 @@ a.status-card.compact:hover { } & > .column-header__back-button { - color: $highlight-text-color; + color: var(--highlight-text-color); } &.active { box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3); .column-header__icon { - color: $highlight-text-color; + color: var(--highlight-text-color); text-shadow: 0 0 10px rgba($highlight-text-color, 0.4); } } @@ -2928,7 +2928,7 @@ a.status-card.compact:hover { } a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: none; &:hover { @@ -3407,7 +3407,7 @@ a.status-card.compact:hover { .loading-bar { - background-color: $highlight-text-color; + background-color: var(--highlight-text-color); height: 3px; position: absolute; top: 0; @@ -4117,7 +4117,7 @@ noscript { max-width: 400px; a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: underline; &:hover { diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index 50c8b972f..fba1c6a6c 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -6,7 +6,7 @@ padding-top: 0; font-size: 14px; font-weight: 500; - &.active {color: $highlight-text-color;} + &.active {color: var(--highlight-text-color);} input[type=checkbox] {display: none;} .checkbox { @@ -23,8 +23,8 @@ vertical-align: middle; &.active { - border-color: $highlight-text-color; - background: $highlight-text-color; + border-color: var(--highlight-text-color); + background: var(--highlight-text-color); } } } diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index 52a1b2859..4738721fe 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -169,7 +169,7 @@ } .media-modal__button--active { - background-color: $highlight-text-color; + background-color: var(--highlight-text-color); } .media-modal__close { @@ -435,7 +435,7 @@ overflow-x: hidden; .status__content a { - color: $highlight-text-color; + color: var(--highlight-text-color); } .status__content, diff --git a/app/styles/soapbox/emoji_picker.scss b/app/styles/soapbox/emoji_picker.scss index 4bfd66504..fb697a6d9 100644 --- a/app/styles/soapbox/emoji_picker.scss +++ b/app/styles/soapbox/emoji_picker.scss @@ -55,7 +55,7 @@ } .emoji-mart-anchor-selected { - color: $highlight-text-color; + color: var(--highlight-text-color); &:hover { color: darken($highlight-text-color, 4%); @@ -72,7 +72,7 @@ left: 0; width: 100%; height: 4px; - background-color: $highlight-text-color; + background-color: var(--highlight-text-color); } .emoji-mart-anchors { diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index 26ee45196..cc1d57be2 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -70,7 +70,7 @@ code { } label a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: underline; &:hover, @@ -98,7 +98,7 @@ code { color: $gab-secondary-text; a { - color: $highlight-text-color; + color: var(--highlight-text-color); } code { @@ -341,7 +341,7 @@ code { &:active, &:focus { - border-color: $highlight-text-color; + border-color: var(--highlight-text-color); background: darken($ui-base-color, 8%); } } @@ -627,7 +627,7 @@ code { } a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-transform: uppercase; text-decoration: none; font-weight: 700; diff --git a/app/styles/soapbox/polls.scss b/app/styles/soapbox/polls.scss index 5701498e9..5c9a2c88a 100644 --- a/app/styles/soapbox/polls.scss +++ b/app/styles/soapbox/polls.scss @@ -57,7 +57,7 @@ padding: 6px 10px; &:focus { - border-color: $highlight-text-color; + border-color: var(--highlight-text-color); } } diff --git a/app/styles/soapbox/tables.scss b/app/styles/soapbox/tables.scss index 26789e70f..f90406ca5 100644 --- a/app/styles/soapbox/tables.scss +++ b/app/styles/soapbox/tables.scss @@ -31,7 +31,7 @@ } a { - color: $highlight-text-color; + color: var(--highlight-text-color); text-decoration: underline; &:hover { From be3065405c60ddb6e89c047f335125284620cc09 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 21:58:18 -0500 Subject: [PATCH 06/46] Use --brand-color-faint in more spots --- app/styles/soapbox-light/diff.scss | 8 ++++---- app/styles/soapbox/about.scss | 2 +- app/styles/soapbox/accounts.scss | 2 +- app/styles/soapbox/basics.scss | 2 +- app/styles/soapbox/components.scss | 20 +++++++++---------- .../soapbox/components/account-header.scss | 6 +++--- .../soapbox/components/detailed-status.scss | 4 ++-- app/styles/soapbox/containers.scss | 10 +++++----- app/styles/soapbox/dashboard.scss | 2 +- app/styles/soapbox/forms.scss | 2 +- app/styles/soapbox/widgets.scss | 2 +- 11 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index 8368e2a14..4a476af88 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -52,13 +52,13 @@ body { &:focus, &:active, &.selected { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); } } } .emoji-mart-bar { - border-color: lighten($ui-base-color, 4%); + border-color: var(--brand-color-faint); &:first-child { background: darken($ui-base-color, 6%); @@ -72,11 +72,11 @@ body { // Change the background colors of statuses .focusable:focus { - background: $ui-base-color; + background: var(--brand-color-faint); } .status.status-direct { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); } .focusable:focus .status.status-direct { diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 5d328940e..2bcf4bc2f 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -235,7 +235,7 @@ $small-breakpoint: 960px; color: $darker-text-color; padding-bottom: 5px; margin-bottom: 15px; - border-bottom: 1px solid lighten($ui-base-color, 4%); + border-bottom: 1px solid var(--brand-color-faint); text-overflow: ellipsis; white-space: nowrap; overflow: hidden; diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index 5f063eb8c..546f264f9 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -48,7 +48,7 @@ display: flex; justify-content: flex-start; align-items: center; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border-radius: 0 0 4px 4px; @media screen and (max-width: $no-gap-breakpoint) { diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 5f66c2d92..d9d797852 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -72,7 +72,7 @@ body { } &.embed { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); margin: 0; padding-bottom: 0; diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 2bfd6287e..3e8b071aa 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -502,7 +502,7 @@ .focusable { &:focus { outline: 0; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); .status.status-direct { background: lighten($ui-base-color, 12%); @@ -1768,7 +1768,7 @@ a.account__display-name { } .column-back-button { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); color: var(--highlight-text-color); cursor: pointer; flex: 0 0 auto; @@ -1787,7 +1787,7 @@ a.account__display-name { } .column-header__back-button { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border: 0; font-family: inherit; color: var(--highlight-text-color); @@ -2261,7 +2261,7 @@ a.status-card { } .status-card.compact { - border-color: lighten($ui-base-color, 4%); + border-color: var(--brand-color-faint); &.interactive { border: 0; @@ -2282,7 +2282,7 @@ a.status-card { } a.status-card.compact:hover { - background-color: lighten($ui-base-color, 4%); + background-color: var(--brand-color-faint); } .status-card__image-image { @@ -2760,7 +2760,7 @@ a.status-card.compact:hover { } .account--panel { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border-top: 1px solid lighten($ui-base-color, 8%); border-bottom: 1px solid lighten($ui-base-color, 8%); display: flex; @@ -3518,7 +3518,7 @@ a.status-card.compact:hover { border-radius: 4px; position: relative; width: 100%; - background-color: lighten($ui-base-color, 8%); + background-color: var(--brand-color-faint); } .media-gallery__item { @@ -4258,7 +4258,7 @@ noscript { } &:focus { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); } @media screen and (max-width: 600px) { @@ -4282,7 +4282,7 @@ noscript { .account__moved-note { padding: 14px 10px; padding-bottom: 16px; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border-top: 1px solid lighten($ui-base-color, 8%); border-bottom: 1px solid lighten($ui-base-color, 8%); @@ -4322,7 +4322,7 @@ noscript { display: flex; justify-content: flex-start; align-items: center; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); label { flex: 1 1 auto; diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index 8874df4fd..3ecc8f2cf 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -36,14 +36,14 @@ min-height: 74px; width: 100%; position: relative; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); @media (min-width: 895px) {height: 74px;} } &__avatar { display: block; position: absolute; - border: 5px solid lighten($ui-base-color, 4%); + border: 5px solid var(--brand-color-faint); left: 0; top: -90px; border-radius: 50%; @@ -156,7 +156,7 @@ @media screen and (max-width: 895px) { .account-mobile-container { display: block; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); margin-top: 10px; position: relative; padding: 10px 10px 0; diff --git a/app/styles/soapbox/components/detailed-status.scss b/app/styles/soapbox/components/detailed-status.scss index 9009a8202..2f92fb90d 100644 --- a/app/styles/soapbox/components/detailed-status.scss +++ b/app/styles/soapbox/components/detailed-status.scss @@ -7,7 +7,7 @@ } .detailed-status { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); padding: 14px 10px; &--flex { @@ -52,7 +52,7 @@ } .detailed-status__action-bar { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border-top: 1px solid lighten($ui-base-color, 8%); border-bottom: 1px solid lighten($ui-base-color, 8%); display: flex; diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index 03bf01c3f..a695ed792 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -499,7 +499,7 @@ &::before { content: ""; display: block; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); position: absolute; bottom: 0; left: 0; @@ -522,14 +522,14 @@ height: 100%; margin: 0; border-radius: 50%; - border: 4px solid lighten($ui-base-color, 4%); + border: 4px solid var(--brand-color-faint); background: darken($ui-base-color, 8%); } } @media screen and (max-width: 600px) { margin-top: 0; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border-radius: 0 0 4px 4px; padding: 5px; @@ -638,7 +638,7 @@ flex: 0 0 auto; color: $darker-text-color; padding: 10px; - border-right: 1px solid lighten($ui-base-color, 4%); + border-right: 1px solid var(--brand-color-faint); cursor: default; text-align: center; position: relative; @@ -869,7 +869,7 @@ &:hover, &:active, &:focus { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); } } } diff --git a/app/styles/soapbox/dashboard.scss b/app/styles/soapbox/dashboard.scss index eced8b126..0b30ea84d 100644 --- a/app/styles/soapbox/dashboard.scss +++ b/app/styles/soapbox/dashboard.scss @@ -13,7 +13,7 @@ & > div, & > a { padding: 20px; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); border-radius: 4px; } diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index cc1d57be2..7d6982602 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -583,7 +583,7 @@ code { } &:focus { - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); } } diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index 89505584e..3b2343104 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -251,7 +251,7 @@ @media screen and (max-width: $no-gap-breakpoint) { margin-top: 0; - background: lighten($ui-base-color, 4%); + background: var(--brand-color-faint); h1 { font-size: 24px; From 4ac7663d3cdc3e4ea67cb59375aeb38aa63b5705 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 22:06:33 -0500 Subject: [PATCH 07/46] --nav-ui-highlight-color -> --accent-color --- app/soapbox/reducers/theme.js | 2 +- app/styles/soapbox/components/tabs-bar.scss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 2d495407c..f27de4fd5 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -14,7 +14,7 @@ const cssrgba = (color, a) => { const populate = themeData => { const { 'brand-color': brandColor } = themeData.toObject(); return ImmutableMap({ - 'nav-ui-highlight-color': brightness(10, hue(-3, brandColor).hex).hex, + 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, 'brand-color-faint': cssrgba(brandColor, 0.1), 'highlight-text-color': brandColor, }).merge(themeData); diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/soapbox/components/tabs-bar.scss index 3631457a2..c97c4afca 100644 --- a/app/styles/soapbox/components/tabs-bar.scss +++ b/app/styles/soapbox/components/tabs-bar.scss @@ -120,7 +120,7 @@ $nav-ui-background-color: var(--brand-color) !default; height: 34px; margin-left: 20px; border-radius: 4px; - background-color: var(--nav-ui-highlight-color) !important; + background-color: var(--accent-color) !important; transition: background-color 0.2s; font-weight: bold; font-size: 16px; @@ -205,7 +205,7 @@ $nav-ui-background-color: var(--brand-color) !default; display: block; width: 100%; height: 0; - background: var(--nav-ui-highlight-color); + background: var(--accent-color); position: absolute; bottom: 0; left: 0; From 54e4bff0aba005dccb2b2b324f0dc239098d2bcf Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 22:16:29 -0500 Subject: [PATCH 08/46] Set compose button color --- app/styles/soapbox/components.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 3e8b071aa..ace507cba 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -4,7 +4,7 @@ } .button { - background-color: $ui-highlight-color; + background-color: var(--brand-color); border: 10px none; border-radius: 4px; box-sizing: border-box; @@ -524,7 +524,7 @@ padding-left: 68px; position: relative; min-height: 54px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-faint); cursor: default; @supports (-ms-overflow-style: -ms-autohiding-scrollbar) { From 35db4e33c8c0ec0850f2e457294f1a9b624ee9ba Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 22:18:29 -0500 Subject: [PATCH 09/46] autosuggest_textarea smooth expand --- app/styles/soapbox/components/compose-form.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index fba1c6a6c..9649ba429 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -117,6 +117,7 @@ padding-right: 10px + 22px; resize: none; scrollbar-color: initial; + transition: 0.2s; &::-webkit-scrollbar {all: unset;} @media screen and (max-width: 600px) { max-height: 100px !important; // prevent auto-resize textarea From d5632851feb8c9b0052ec9185d0d42e03b38f731 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 30 May 2020 22:39:08 -0500 Subject: [PATCH 10/46] Delete unused admin.scss and scrollbars.scss --- app/styles/application.scss | 2 - app/styles/halloween/diff.scss | 8 - app/styles/soapbox-light/diff.scss | 16 - app/styles/soapbox/admin.scss | 733 ----------------------------- app/styles/soapbox/rtl.scss | 10 - app/styles/soapbox/scrollbars.scss | 43 -- 6 files changed, 812 deletions(-) delete mode 100644 app/styles/soapbox/admin.scss delete mode 100644 app/styles/soapbox/scrollbars.scss diff --git a/app/styles/application.scss b/app/styles/application.scss index 3c3b00226..0fe9ed5d7 100644 --- a/app/styles/application.scss +++ b/app/styles/application.scss @@ -2,7 +2,6 @@ @import 'soapbox/variables'; @import 'soapbox/fonts'; @import 'soapbox/reset'; -// @import 'soapbox/scrollbars'; @import 'soapbox/basics'; @import 'soapbox/containers'; @import 'soapbox/lists'; @@ -40,7 +39,6 @@ @import 'soapbox/emoji_picker'; @import 'soapbox/about'; @import 'soapbox/tables'; -@import 'soapbox/admin'; @import 'soapbox/dashboard'; @import 'soapbox/rtl'; @import 'soapbox/accessibility'; diff --git a/app/styles/halloween/diff.scss b/app/styles/halloween/diff.scss index 3d853c5ac..f81ca9e6c 100644 --- a/app/styles/halloween/diff.scss +++ b/app/styles/halloween/diff.scss @@ -106,10 +106,6 @@ body.app-body::after { color: darken($halloween-dark, 10%); } -.admin-wrapper .content h2 { - color: #fff; -} - .compose-form .autosuggest-textarea__textarea, .compose-form .spoiler-input__input { color: darken($halloween-dark, 15%); @@ -203,7 +199,3 @@ body.app-body::after { .mute-modal { border-color: $halloween-orange; } - -.admin-wrapper .sidebar ul .simple-navigation-active-leaf a { - color: #000; -} diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index 4a476af88..e176decfb 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -151,7 +151,6 @@ body { .actions-modal ul li:not(:empty) a:focus button, .actions-modal ul li:not(:empty) a:hover, .actions-modal ul li:not(:empty) a:hover button, -.admin-wrapper .sidebar ul li a.selected, .simple_form .block-button, .simple_form .button, .simple_form button { @@ -353,21 +352,6 @@ body { box-shadow: none; } -.admin-wrapper .sidebar ul li a.selected { - color: $gab-background-container-light; - background-color: var(--brand-color); -} - -.admin-wrapper .sidebar ul li .simple-navigation-active-leaf a.selected { - color: #fff; - background-color: darken($gab-brand-default, 10%); - // Using Darken bc Lighten and Darken are reversed on light theme - actually lightens -} - -.admin-wrapper .content > p { - color: #000; -} - .btngroup__btn--active { color: #fff; } diff --git a/app/styles/soapbox/admin.scss b/app/styles/soapbox/admin.scss deleted file mode 100644 index 4332a7214..000000000 --- a/app/styles/soapbox/admin.scss +++ /dev/null @@ -1,733 +0,0 @@ -$no-columns-breakpoint: 600px; -$sidebar-width: 240px; -$content-width: 840px; - -.admin-wrapper { - display: flex; - justify-content: center; - height: 100%; - - .sidebar-wrapper { - flex: 1 1 $sidebar-width; - height: 100%; - background: $ui-base-color; - display: flex; - justify-content: flex-end; - } - - .sidebar { - width: $sidebar-width; - height: 100%; - padding: 0; - overflow-y: auto; - - .logo { - display: block; - margin: 40px auto; - width: 100px; - } - - @media screen and (max-width: $no-columns-breakpoint) { - & > a:first-child { - display: none; - } - } - - ul { - list-style: none; - border-radius: 4px 0 0 4px; - overflow: hidden; - margin-bottom: 20px; - - @media screen and (max-width: $no-columns-breakpoint) { - margin-bottom: 0; - } - - a { - display: block; - padding: 15px; - color: $gab-secondary-text; - text-decoration: none; - transition: all 200ms linear; - transition-property: color, background-color; - border-radius: 4px 0 0 4px; - - i.fa { - margin-right: 5px; - } - - &:hover { - color: var(--brand-color); - background-color: $gab-background; - transition: all 100ms linear; - transition-property: color, background-color; - } - - &.selected { - background: darken($ui-base-color, 2%); - border-radius: 4px 0 0; - } - } - - ul { - background: darken($ui-base-color, 4%); - border-radius: 0 0 0 4px; - margin: 0; - - a { - border: 0; - padding: 15px 35px; - } - } - - .simple-navigation-active-leaf a { - color: $primary-text-color; - background-color: $ui-highlight-color; - border-bottom: 0; - border-radius: 0; - - &:hover { - background-color: lighten($ui-highlight-color, 5%); - } - } - } - - & > ul > .simple-navigation-active-leaf a { - border-radius: 4px 0 0 4px; - } - } - - .content-wrapper { - flex: 2 1 $content-width; - overflow: auto; - } - - .content { - max-width: $content-width; - padding: 20px 15px; - padding-top: 60px; - padding-left: 25px; - - @media screen and (max-width: $no-columns-breakpoint) { - max-width: none; - padding: 15px; - padding-top: 30px; - } - - h2 { - color: $secondary-text-color; - font-size: 24px; - line-height: 28px; - font-weight: 400; - padding-bottom: 40px; - border-bottom: 1px solid lighten($ui-base-color, 8%); - margin-bottom: 40px; - } - - h3 { - color: $secondary-text-color; - font-size: 20px; - line-height: 28px; - font-weight: 400; - margin-bottom: 30px; - } - - h4 { - text-transform: uppercase; - font-size: 13px; - font-weight: 700; - color: $gab-secondary-text; - padding-bottom: 8px; - margin-bottom: 8px; - border-bottom: 1px solid lighten($ui-base-color, 8%); - } - - h6 { - font-size: 16px; - color: $secondary-text-color; - line-height: 28px; - font-weight: 400; - } - - .fields-group h6 { - color: $primary-text-color; - font-weight: 500; - } - - .directory__tag > a, - .directory__tag > div { - box-shadow: none; - } - - .directory__tag .table-action-link .fa { - color: inherit; - } - - .directory__tag h4 { - font-size: 18px; - font-weight: 700; - color: $gab-secondary-text; - text-transform: none; - padding-bottom: 0; - margin-bottom: 0; - border-bottom: 0; - } - - & > p { - font-size: 14px; - line-height: 18px; - color: $gab-secondary-text; - margin-bottom: 20px; - - strong { - color: $gab-secondary-text; - font-weight: 500; - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } - } - - hr { - width: 100%; - height: 0; - border: 0; - border-bottom: 1px solid rgba($ui-base-lighter-color, .6); - margin: 20px 0; - - &.spacer { - height: 1px; - border: 0; - } - } - - .muted-hint { - color: $gab-secondary-text; - - a { - color: var(--highlight-text-color); - } - } - - .positive-hint { - color: $valid-value-color; - font-weight: 500; - } - - .negative-hint { - color: $error-value-color; - font-weight: 500; - } - - .neutral-hint { - color: $dark-text-color; - font-weight: 500; - } - } - - @media screen and (max-width: $no-columns-breakpoint) { - display: block; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - - .sidebar-wrapper, - .content-wrapper { - flex: 0 0 auto; - height: auto; - overflow: initial; - } - - .sidebar { - width: 100%; - padding: 0; - height: auto; - } - } -} - -.filters { - display: flex; - flex-wrap: wrap; - - .filter-subset { - flex: 0 0 auto; - margin: 0 40px 10px 0; - - &:last-child { - margin-bottom: 20px; - } - - ul { - margin-top: 5px; - list-style: none; - - li { - display: inline-block; - margin-right: 5px; - } - } - - strong { - font-weight: 500; - text-transform: uppercase; - font-size: 12px; - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } - - a { - display: inline-block; - color: $gab-secondary-text; - text-decoration: none; - text-transform: uppercase; - font-size: 12px; - font-weight: 500; - border-bottom: 2px solid $gab-secondary-text; - - &:hover { - color: $primary-text-color; - border-bottom: 2px solid lighten($gab-secondary-text, 5%); - } - - &.selected { - color: var(--highlight-text-color); - border-bottom: 2px solid $ui-highlight-color; - } - } - } -} - -.report-accounts { - display: flex; - flex-wrap: wrap; - margin-bottom: 20px; -} - -.report-accounts__item { - display: flex; - flex: 250px; - flex-direction: column; - margin: 0 5px; - - & > strong { - display: block; - margin: 0 0 10px -5px; - font-weight: 500; - font-size: 14px; - line-height: 18px; - color: $secondary-text-color; - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } - - .account-card { - flex: 1 1 auto; - } -} - -.report-status, -.account-status { - display: flex; - margin-bottom: 10px; - - .activity-stream { - flex: 2 0 0; - margin-right: 20px; - max-width: calc(100% - 60px); - - .entry { - border-radius: 4px; - } - } -} - -.report-status__actions, -.account-status__actions { - flex: 0 0 auto; - display: flex; - flex-direction: column; - - .icon-button { - font-size: 24px; - width: 24px; - text-align: center; - margin-bottom: 10px; - } -} - -.simple_form.new_report_note, -.simple_form.new_account_moderation_note { - max-width: 100%; -} - -.batch-form-box { - display: flex; - flex-wrap: wrap; - margin-bottom: 5px; - - #form_status_batch_action { - margin: 0 5px 5px 0; - font-size: 14px; - } - - input.button { - margin: 0 5px 5px 0; - } - - .media-spoiler-toggle-buttons { - margin-left: auto; - - .button { - overflow: visible; - margin: 0 0 5px 5px; - float: right; - } - } -} - -.back-link { - margin-bottom: 10px; - font-size: 14px; - - a { - color: var(--highlight-text-color); - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } -} - -.spacer { - flex: 1 1 auto; -} - -.log-entry { - margin-bottom: 20px; - line-height: 20px; - - &__header { - display: flex; - justify-content: flex-start; - align-items: center; - padding: 10px; - background: $ui-base-color; - color: $darker-text-color; - border-radius: 4px 4px 0 0; - font-size: 14px; - position: relative; - } - - &__avatar { - margin-right: 10px; - - .avatar { - display: block; - margin: 0; - border-radius: 50%; - width: 40px; - height: 40px; - } - } - - &__content { - max-width: calc(100% - 90px); - } - - &__title { - word-wrap: break-word; - } - - &__timestamp { - color: $dark-text-color; - } - - &__extras { - background: lighten($ui-base-color, 6%); - border-radius: 0 0 4px 4px; - padding: 10px; - color: $darker-text-color; - font-family: $font-monospace, monospace; - font-size: 12px; - word-wrap: break-word; - min-height: 20px; - } - - &__icon { - font-size: 28px; - margin-right: 10px; - color: $dark-text-color; - } - - &__icon__overlay { - position: absolute; - top: 10px; - right: 10px; - width: 10px; - height: 10px; - border-radius: 50%; - - &.positive { - background: $success-green; - } - - &.negative { - background: lighten($error-red, 12%); - } - - &.neutral { - background: $ui-highlight-color; - } - } - - .username, - .target { - color: $secondary-text-color; - text-decoration: none; - font-weight: 500; - } - - a { - color: $ui-highlight-color; - text-decoration: none; - font-weight: 500; - - &:hover { - text-decoration: underline; - } - } - - .diff-old { - color: lighten($error-red, 12%); - } - - .diff-neutral { - color: $secondary-text-color; - } - - .diff-new { - color: $success-green; - } -} - -a.name-tag, -.name-tag, -a.inline-name-tag, -.inline-name-tag { - text-decoration: none; - color: $secondary-text-color; - - .username { - font-weight: 500; - } - - &.suspended { - .username { - text-decoration: line-through; - color: lighten($error-red, 12%); - } - - .avatar { - filter: grayscale(100%); - opacity: 0.8; - } - } -} - -a.name-tag, -.name-tag { - display: flex; - align-items: center; - - .avatar { - display: block; - margin: 0; - margin-right: 5px; - border-radius: 50%; - } - - &.suspended { - .avatar { - filter: grayscale(100%); - opacity: 0.8; - } - } -} - -.speech-bubble { - margin-bottom: 20px; - border-left: 4px solid $ui-highlight-color; - - &.positive { - border-left-color: $success-green; - } - - &.negative { - border-left-color: lighten($error-red, 12%); - } - - &.warning { - border-left-color: $gold-star; - } - - &__bubble { - padding: 16px; - padding-left: 14px; - font-size: 15px; - line-height: 20px; - border-radius: 4px 4px 4px 0; - position: relative; - font-weight: 500; - - a { - color: $darker-text-color; - } - } - - &__owner { - padding: 8px; - padding-left: 12px; - } - - time { - color: $dark-text-color; - } -} - -.report-card { - background: $ui-base-color; - border-radius: 4px; - margin-bottom: 20px; - - &__profile { - display: flex; - justify-content: space-between; - align-items: center; - padding: 15px; - - .account { - padding: 0; - border: 0; - - &__avatar-wrapper { - margin-left: 0; - } - } - - &__stats { - flex: 0 0 auto; - font-weight: 500; - color: $darker-text-color; - text-transform: uppercase; - text-align: right; - - a { - color: inherit; - text-decoration: none; - - &:focus, - &:hover, - &:active { - color: lighten($darker-text-color, 8%); - } - } - - .red { - color: $error-value-color; - } - } - } - - &__summary { - &__item { - display: flex; - justify-content: flex-start; - border-top: 1px solid darken($ui-base-color, 4%); - - &:hover { - background: lighten($ui-base-color, 2%); - } - - &__reported-by, - &__assigned { - padding: 15px; - flex: 0 0 auto; - box-sizing: border-box; - width: 150px; - color: $darker-text-color; - - &, - .username { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - } - - &__content { - flex: 1 1 auto; - max-width: calc(100% - 300px); - - &__icon { - color: $dark-text-color; - margin-right: 4px; - font-weight: 500; - } - } - - &__content a { - display: block; - box-sizing: border-box; - width: 100%; - padding: 15px; - text-decoration: none; - color: $darker-text-color; - } - } - } -} - -.one-line { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.ellipsized-ip { - display: inline-block; - max-width: 120px; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: middle; -} - -.admin select.dropdown { - appearance: none; - box-sizing: border-box; - font-size: 16px; - color: $primary-text-color; - display: block; - width: 100%; - outline: 0; - font-family: inherit; - resize: vertical; - background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; - border: 1px solid darken($ui-base-color, 14%); - border-radius: 4px; - padding-left: 10px; - padding-right: 30px; - height: 41px; - margin: 20px 0; -} diff --git a/app/styles/soapbox/rtl.scss b/app/styles/soapbox/rtl.scss index 300eb4dac..6201d3f4e 100644 --- a/app/styles/soapbox/rtl.scss +++ b/app/styles/soapbox/rtl.scss @@ -189,16 +189,6 @@ body.rtl { right: -2.14285714em; } - .admin-wrapper { - direction: rtl; - } - - .admin-wrapper .sidebar ul a i.fa, - a.table-action-link i.fa { - margin-right: 0; - margin-left: 5px; - } - .simple_form .check_boxes .checkbox label { padding-left: 0; padding-right: 25px; diff --git a/app/styles/soapbox/scrollbars.scss b/app/styles/soapbox/scrollbars.scss deleted file mode 100644 index d91d7e83d..000000000 --- a/app/styles/soapbox/scrollbars.scss +++ /dev/null @@ -1,43 +0,0 @@ -// A lot of this stuff is temporary for now. -// Content containers are meant to behave much differently than the mastodon default UI -// For now linking default gab colors to replace the base UI colors and formulas - -html {scrollbar-color: lighten($gab-background-container, 4%) $gab-background-container;} - -::-webkit-scrollbar { - width: 12px; - height: 12px; -} - -::-webkit-scrollbar-thumb { - border: 0; - background: rgba($gab-placeholder-accent, .5); - @if $light-theme {background: rgba($gab-background-container-light, .3);} -} - -::-webkit-scrollbar-thumb:hover { - background: rgba($gab-placeholder-accent, .75); - @if $light-theme {background: rgba($gab-background-container-light, .4);} -} - -::-webkit-scrollbar-thumb:active { - background: $gab-placeholder-accent; - @if $light-theme {background: rgba($gab-background-container-light, .5);} -} - -::-webkit-scrollbar-track { - border: 0; - background: rgba($gab-background-container, .5); - @if $light-theme {background: rgba($gab-background-base, .3);} -} - -::-webkit-scrollbar-track:hover { - background: rgba($gab-background-container, .75); - @if $light-theme {background: rgba($gab-background-base, .4);} -} - -::-webkit-scrollbar-track:active { - background: $gab-background-container; - @if $light-theme {background: rgba($gab-background-base, .5);} -} -::-webkit-scrollbar-corner {background: transparent;} From 2c0ee3f29dc515490aa77ba9d2cc1ab6aa4c6c68 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 00:21:41 -0500 Subject: [PATCH 11/46] generateTheme function, refactor --- app/soapbox/actions/theme.js | 13 +++++++++++-- app/soapbox/containers/soapbox.js | 8 ++------ app/soapbox/reducers/theme.js | 20 ++++++++++++++------ app/styles/soapbox/components/tabs-bar.scss | 4 +--- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/soapbox/actions/theme.js b/app/soapbox/actions/theme.js index 809170730..c33b4ea4d 100644 --- a/app/soapbox/actions/theme.js +++ b/app/soapbox/actions/theme.js @@ -1,8 +1,17 @@ -export const SET_THEME = 'SET_THEME'; +export const THEME_SET = 'THEME_SET'; +export const THEME_GENERATE = 'THEME_GENERATE'; + +export function generateTheme(brandColor, mode) { + return { + type: THEME_GENERATE, + brandColor, + mode, + }; +} export function setTheme(themeData) { return { - type: SET_THEME, + type: THEME_SET, themeData, }; } diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index be9856722..bac0982d8 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -24,8 +24,7 @@ import { fetchMe } from 'soapbox/actions/me'; import PublicLayout from 'soapbox/features/public_layout'; import { getSettings } from 'soapbox/actions/settings'; import { themeDataToCss } from 'soapbox/utils/theme'; -import { setTheme } from 'soapbox/actions/theme'; -import { Map as ImmutableMap } from 'immutable'; +import { generateTheme } from 'soapbox/actions/theme'; export const store = configureStore(); const hydrateAction = hydrateStore(initialState); @@ -77,10 +76,7 @@ class SoapboxMount extends React.PureComponent { }; componentDidMount() { - this.props.dispatch(setTheme(ImmutableMap({ - // 'brand-color': '#0482d8', - 'brand-color': '#1ca82b', - }))); + this.props.dispatch(generateTheme('#1ca82b', 'light')); } render() { diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index f27de4fd5..8d70d9cdf 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -1,5 +1,6 @@ import { - SET_THEME, + THEME_SET, + THEME_GENERATE, } from '../actions/theme'; import { Map as ImmutableMap } from 'immutable'; import { brightness, hue, convert } from 'chromatism'; @@ -11,19 +12,26 @@ const cssrgba = (color, a) => { return `rgba(${[r, g, b, a].join(',')})`; }; -const populate = themeData => { - const { 'brand-color': brandColor } = themeData.toObject(); +export const generateTheme = (brandColor, mode) => { return ImmutableMap({ + 'brand-color': brandColor, 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, 'brand-color-faint': cssrgba(brandColor, 0.1), 'highlight-text-color': brandColor, - }).merge(themeData); + }); +}; + +export const setTheme = themeData => { + const { 'brand-color': brandColor } = themeData.toObject(); + return ImmutableMap(generateTheme(brandColor, 'light')).merge(themeData); }; export default function theme(state = initialState, action) { switch(action.type) { - case SET_THEME: - return populate(ImmutableMap(action.themeData)); + case THEME_GENERATE: + return generateTheme(action.brandColor, action.mode); + case THEME_SET: + return setTheme(ImmutableMap(action.brandColor)); default: return state; } diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/soapbox/components/tabs-bar.scss index c97c4afca..9e94bf122 100644 --- a/app/styles/soapbox/components/tabs-bar.scss +++ b/app/styles/soapbox/components/tabs-bar.scss @@ -1,9 +1,7 @@ -$nav-ui-background-color: var(--brand-color) !default; - .tabs-bar { display: flex; box-sizing: border-box; - background: $nav-ui-background-color; + background: var(--brand-color); flex: 0 0 auto; overflow-y: auto; height: 50px; From 4d484153aca9e584279ff0795559878b15a1ac01 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 15:17:10 -0500 Subject: [PATCH 12/46] More SCSS variable replacements --- app/soapbox/reducers/theme.js | 9 +- app/styles/soapbox-light/diff.scss | 12 +-- app/styles/soapbox/about.scss | 2 +- app/styles/soapbox/accounts.scss | 2 +- app/styles/soapbox/components.scss | 90 +++++++++---------- .../soapbox/components/compose-form.scss | 4 +- .../soapbox/components/detailed-status.scss | 4 +- .../soapbox/components/hotkeys-modal.scss | 2 +- app/styles/soapbox/components/modal.scss | 6 +- app/styles/soapbox/containers.scss | 6 +- app/styles/soapbox/dashboard.scss | 2 +- app/styles/soapbox/emoji_picker.scss | 2 +- app/styles/soapbox/forms.scss | 4 +- app/styles/soapbox/introduction.scss | 4 +- app/styles/soapbox/stream_entries.scss | 2 +- app/styles/soapbox/widgets.scss | 6 +- webpack/config/themes.yml | 6 -- 17 files changed, 79 insertions(+), 84 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 8d70d9cdf..bcb1c7275 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -12,12 +12,19 @@ const cssrgba = (color, a) => { return `rgba(${[r, g, b, a].join(',')})`; }; +const makeContrast = (percent, color, mode) => { + percent = mode === 'light' ? -percent : percent; + return brightness(percent, color); +}; + export const generateTheme = (brandColor, mode) => { return ImmutableMap({ 'brand-color': brandColor, 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, 'brand-color-faint': cssrgba(brandColor, 0.1), - 'highlight-text-color': brandColor, + 'brand-color-med': cssrgba(brandColor, 0.2), + 'highlight-text-color': makeContrast(10, brandColor, mode).hex, + 'brand-color-hicontrast': makeContrast(20, brandColor, mode).hex, }); }; diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index e176decfb..f5a093dad 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -80,12 +80,7 @@ body { } .focusable:focus .status.status-direct { - background: lighten($ui-base-color, 8%); -} - -.detailed-status, -.detailed-status__action-bar { - background: darken($ui-base-color, 6%); + background: var(--brand-color-med); } // Change the background colors of status__content__spoiler-link @@ -132,7 +127,6 @@ body { &__item { a { - background: $ui-base-color; color: $darker-text-color; } } @@ -228,7 +222,7 @@ body { // Change the default colors used on some parts of the profile pages .activity-stream-tabs { background: $account-background-color; - border-bottom-color: lighten($ui-base-color, 8%); + border-bottom-color: var(--brand-color-med); } .activity-stream { @@ -238,7 +232,7 @@ body { .detailed-status.light, .more.light, .status.light { - border-bottom-color: lighten($ui-base-color, 8%); + border-bottom-color: var(--brand-color-med); } } diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 2bcf4bc2f..33797855f 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -928,7 +928,7 @@ $small-breakpoint: 960px; .hero-widget, .box-widget, .directory__tag { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } .directory { diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index 546f264f9..90325f1e6 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -13,7 +13,7 @@ &:active, &:focus { .card__bar { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } } diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index ace507cba..83f0e754e 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -391,7 +391,7 @@ } a { - color: var(--brand-color); + color: var(--brand-color-hicontrast); text-decoration: none; &:hover { @@ -453,7 +453,7 @@ display: block; font-size: 15px; line-height: 20px; - color: var(--brand-color); + color: var(--highlight-text-color); border: 0; background: transparent; padding: 0; @@ -491,7 +491,7 @@ box-sizing: border-box; width: 100%; clear: both; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } .status__prepend-icon-wrapper { @@ -514,7 +514,7 @@ .detailed-status, .detailed-status__action-bar { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } } @@ -546,8 +546,8 @@ } &.status-direct:not(.read) { - background: lighten($ui-base-color, 8%); - border-bottom-color: lighten($ui-base-color, 12%); + background: var(--brand-color-med); + border-bottom-color: var(--brand-color-med); } &.light { @@ -730,13 +730,13 @@ user-select: text; a { - color: $lighter-text-color; + color: var(--highlight-text-color); } } .domain { padding: 10px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); .domain__domain-name { flex: 1 1 auto; @@ -762,7 +762,7 @@ padding: 10px; &:not(:last-of-type) { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } &.compact { @@ -859,7 +859,7 @@ a .account__avatar { .account__disclaimer { padding: 10px; - border-top: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--brand-color-med); color: $dark-text-color; strong { @@ -886,8 +886,8 @@ a .account__avatar { } .account__action-bar { - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); line-height: 36px; overflow: hidden; flex: 0 0 auto; @@ -927,7 +927,7 @@ a .account__avatar { text-decoration: none; overflow: hidden; flex: 0 1 100%; - border-right: 1px solid lighten($ui-base-color, 8%); + border-right: 1px solid var(--brand-color-med); padding: 10px 0; border-bottom: 4px solid transparent; @@ -1640,7 +1640,7 @@ a.account__display-name { display: block; height: 42px; line-height: 42px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); background: $gab-background-container; &--highlighted { @@ -1739,7 +1739,7 @@ a.account__display-name { .drawer__header { flex: 0 0 auto; font-size: 16px; - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); margin-bottom: 10px; display: flex; flex-direction: row; @@ -1932,7 +1932,7 @@ a.account__display-name { } .column-link { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); color: $primary-text-color; display: block; font-size: 16px; @@ -2122,7 +2122,7 @@ a.account__display-name { .status-card { display: flex; font-size: 14px; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--brand-color-med); border-radius: 4px; color: $dark-text-color; margin-top: 14px; @@ -2179,7 +2179,7 @@ a.status-card { cursor: pointer; &:hover { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } @@ -2231,7 +2231,7 @@ a.status-card { .status-card__image { flex: 0 0 100px; - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); position: relative; & > .fa { @@ -2317,7 +2317,7 @@ a.status-card.compact:hover { } .load-gap { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } .regeneration-indicator { @@ -2498,11 +2498,11 @@ a.status-card.compact:hover { &.active { color: $primary-text-color; - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); &:hover { color: $primary-text-color; - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } } @@ -2617,7 +2617,7 @@ a.status-card.compact:hover { height: 42px; box-sizing: border-box; background-color: transparent; - border: 0 solid lighten($ui-base-color, 26%); + border: 0 solid var(--brand-color-med); border-width: 6px; border-radius: 50%; } @@ -2634,11 +2634,11 @@ a.status-card.compact:hover { 0% { width: 0; height: 0; - background-color: lighten($ui-base-color, 26%); + background-color: var(--brand-color-med); } 29% { - background-color: lighten($ui-base-color, 26%); + background-color: var(--brand-color-med); } 30% { @@ -2756,13 +2756,13 @@ a.status-card.compact:hover { } .modal-container--preloader { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } .account--panel { background: var(--brand-color-faint); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); display: flex; flex-direction: row; padding: 10px 0; @@ -2775,7 +2775,7 @@ a.status-card.compact:hover { } .column-settings__outer { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); padding: 15px; } @@ -2808,7 +2808,7 @@ a.status-card.compact:hover { } &__multi-value { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); &__remove { cursor: pointer; @@ -2841,7 +2841,7 @@ a.status-card.compact:hover { } &__indicator-separator { - background-color: lighten($ui-base-color, 8%); + background-color: var(--brand-color-med); } &__menu { @@ -3123,7 +3123,7 @@ a.status-card.compact:hover { .upload-progress { padding: 10px; - color: $lighter-text-color; + color: var(--highlight-text-color); overflow: hidden; display: flex; @@ -3254,7 +3254,7 @@ a.status-card.compact:hover { .privacy-dropdown__option__content { flex: 1 1 auto; - color: $lighter-text-color; + color: var(--highlight-text-color); strong { font-weight: 500; @@ -3366,7 +3366,7 @@ a.status-card.compact:hover { h5 { background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); cursor: default; display: flex; padding: 15px; @@ -3449,7 +3449,7 @@ a.status-card.compact:hover { .attachment-list { display: flex; font-size: 14px; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--brand-color-med); border-radius: 4px; margin-top: 14px; overflow: hidden; @@ -3459,7 +3459,7 @@ a.status-card.compact:hover { color: $dark-text-color; padding: 8px 18px; cursor: default; - border-right: 1px solid lighten($ui-base-color, 8%); + border-right: 1px solid var(--brand-color-med); display: flex; flex-direction: column; align-items: center; @@ -4029,7 +4029,7 @@ a.status-card.compact:hover { .notification__filter-bar, .account__section-headline { background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); cursor: default; display: flex; flex-shrink: 0; @@ -4067,7 +4067,7 @@ a.status-card.compact:hover { transform: translateX(-50%); border-style: solid; border-width: 0 10px 10px; - border-color: transparent transparent lighten($ui-base-color, 8%); + border-color: transparent transparent var(--brand-color-med); } &::after { @@ -4283,8 +4283,8 @@ noscript { padding: 14px 10px; padding-bottom: 16px; background: var(--brand-color-faint); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); &__message { position: relative; @@ -4441,7 +4441,7 @@ noscript { .list { padding: 4px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } .list__wrapper { @@ -4561,7 +4561,7 @@ noscript { display: flex; align-items: center; padding: 15px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); &:last-child { border-bottom: 0; @@ -4731,7 +4731,7 @@ noscript { } &:not(:last-of-type) { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } &__content { @@ -4772,7 +4772,7 @@ noscript { } &__username { - color: $lighter-text-color; + color: var(--highlight-text-color); font-size: 12px; line-height: 14px; } @@ -5174,7 +5174,7 @@ noscript { background-color: darken($ui-base-color, 8%); border-bottom: 1px solid; border-top: 1px solid; - border-color: darken($ui-base-color, 4%); + border-color: var(--brand-color-faint); transition: max-height 150ms ease; overflow: hidden; diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index 9649ba429..b112ec739 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -50,7 +50,7 @@ } a { - color: $lighter-text-color; + color: var(--highlight-text-color); font-weight: 500; text-decoration: underline; @@ -184,7 +184,7 @@ width: 16px; height: 16px; } - .autosuggest-account .display-name__account {color: $lighter-text-color;} + .autosuggest-account .display-name__account {color: var(--highlight-text-color);} .compose-form__modifiers { color: $inverted-text-color; diff --git a/app/styles/soapbox/components/detailed-status.scss b/app/styles/soapbox/components/detailed-status.scss index 2f92fb90d..fe665967b 100644 --- a/app/styles/soapbox/components/detailed-status.scss +++ b/app/styles/soapbox/components/detailed-status.scss @@ -53,8 +53,8 @@ .detailed-status__action-bar { background: var(--brand-color-faint); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); display: flex; flex-direction: row; } diff --git a/app/styles/soapbox/components/hotkeys-modal.scss b/app/styles/soapbox/components/hotkeys-modal.scss index fe3078fef..d6f47b648 100644 --- a/app/styles/soapbox/components/hotkeys-modal.scss +++ b/app/styles/soapbox/components/hotkeys-modal.scss @@ -43,7 +43,7 @@ kbd { display: inline-block; padding: 2px 8px; - background-color: lighten($ui-base-color, 8%); + background-color: var(--brand-color-med); border: 1px solid darken($ui-base-color, 4%); border-radius: 4px; } diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index 4738721fe..00089f461 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -240,7 +240,7 @@ .onboarding-modal__nav, .error-modal__nav { - color: $lighter-text-color; + color: var(--highlight-text-color); border: 0; font-size: 14px; font-weight: 500; @@ -376,7 +376,7 @@ & > div { flex: 1 1 auto; text-align: right; - color: $lighter-text-color; + color: var(--highlight-text-color); padding-right: 10px; } @@ -563,7 +563,7 @@ .confirmation-modal__cancel-button, .mute-modal__cancel-button { background-color: transparent; - color: $lighter-text-color; + color: var(--highlight-text-color); font-size: 14px; font-weight: 500; diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index a695ed792..2e3812582 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -769,7 +769,7 @@ } .public-account-bio { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); border-radius: 4px; overflow: hidden; @@ -851,13 +851,13 @@ @media screen and (max-width: $no-gap-breakpoint) { margin: 0; - border-top: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--brand-color-med); & > div { width: 100%; padding: 0; margin-bottom: 0; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); &:last-child { border-bottom: 0; diff --git a/app/styles/soapbox/dashboard.scss b/app/styles/soapbox/dashboard.scss index 0b30ea84d..c92abd543 100644 --- a/app/styles/soapbox/dashboard.scss +++ b/app/styles/soapbox/dashboard.scss @@ -25,7 +25,7 @@ &:hover, &:focus, &:active { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } } diff --git a/app/styles/soapbox/emoji_picker.scss b/app/styles/soapbox/emoji_picker.scss index fb697a6d9..51439dab9 100644 --- a/app/styles/soapbox/emoji_picker.scss +++ b/app/styles/soapbox/emoji_picker.scss @@ -36,7 +36,7 @@ display: flex; justify-content: space-between; padding: 0 6px; - color: $lighter-text-color; + color: var(--highlight-text-color); line-height: 0; } diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index 7d6982602..b19e6109b 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -525,7 +525,7 @@ code { } .flash-message { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); color: $darker-text-color; border-radius: 4px; padding: 15px 10px; @@ -896,7 +896,7 @@ code { } &__connection { - background-color: lighten($ui-base-color, 8%); + background-color: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); border-radius: 4px; padding: 25px 10px; diff --git a/app/styles/soapbox/introduction.scss b/app/styles/soapbox/introduction.scss index 9847b78f5..aaa86ffa9 100644 --- a/app/styles/soapbox/introduction.scss +++ b/app/styles/soapbox/introduction.scss @@ -98,7 +98,7 @@ display: inline-block; background: darken($ui-base-color, 8%); font-size: 15px; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--brand-color-med); border-radius: 2px; padding: 1px 3px; } @@ -132,7 +132,7 @@ cursor: pointer; &:hover { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } &.active { diff --git a/app/styles/soapbox/stream_entries.scss b/app/styles/soapbox/stream_entries.scss index bfbb907e0..6f3ad94fb 100644 --- a/app/styles/soapbox/stream_entries.scss +++ b/app/styles/soapbox/stream_entries.scss @@ -69,7 +69,7 @@ } &--highlighted .entry { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index 3b2343104..f0cc02332 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -229,7 +229,7 @@ } .page-header { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); border-radius: 4px; padding: 60px 15px; @@ -285,7 +285,7 @@ &:hover, &:active, &:focus { - background: lighten($ui-base-color, 8%); + background: var(--brand-color-med); } } @@ -395,7 +395,7 @@ tbody td { padding: 15px 0; vertical-align: middle; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--brand-color-med); } tbody tr:last-child td { diff --git a/webpack/config/themes.yml b/webpack/config/themes.yml index 4de35a710..17dc07cd3 100644 --- a/webpack/config/themes.yml +++ b/webpack/config/themes.yml @@ -1,8 +1,2 @@ azure: styles/azure.scss -purple: styles/soapbox-light.scss purple-dark: styles/application.scss -purple-contrast: styles/contrast.scss -halloween: styles/halloween.scss -aquatic: styles/neenster.scss -paleblue: styles/glinner.scss -lime: styles/lime.scss From 78497bd9244ba5bf79039b273618f7b936242599 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 15:51:20 -0500 Subject: [PATCH 13/46] Improve dropdown menu style --- app/styles/soapbox-light/diff.scss | 28 ------------------- app/styles/soapbox/_mixins.scss | 4 +-- app/styles/soapbox/components.scss | 6 ++-- .../soapbox/components/compose-form.scss | 4 +-- .../soapbox/components/dropdown-menu.scss | 13 ++++----- 5 files changed, 13 insertions(+), 42 deletions(-) diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index f5a093dad..48fb9b393 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -39,10 +39,6 @@ body { } } - .compose-form__buttons-wrapper { - background: darken($ui-base-color, 6%); - } - .autosuggest-textarea__suggestions { background: darken($ui-base-color, 6%); } @@ -105,26 +101,6 @@ body { // Change the colors used in the dropdown menu .dropdown-menu { - background: $ui-base-color; - - &__arrow { - &.left { - border-left-color: $ui-base-color; - } - - &.top { - border-top-color: $ui-base-color; - } - - &.bottom { - border-bottom-color: $ui-base-color; - } - - &.right { - border-right-color: $ui-base-color; - } - } - &__item { a { color: $darker-text-color; @@ -350,10 +326,6 @@ body { color: #fff; } -.timeline-compose-block .compose-form .compose-form__autosuggest-wrapper .autosuggest-textarea__textarea { - background: $gab-background-base-light; -} - .promo-panel-item { @include light-theme-shadow; background: $gab-background-container-light; diff --git a/app/styles/soapbox/_mixins.scss b/app/styles/soapbox/_mixins.scss index 49eb090b8..ef5a1f7b5 100644 --- a/app/styles/soapbox/_mixins.scss +++ b/app/styles/soapbox/_mixins.scss @@ -48,7 +48,7 @@ box-shadow: none; font-family: inherit; background: $nav-ui-search-bg-color; - color: $nav-ui-highlight-color; + color: var(--highlight-text-color); margin: 0; border-radius: 4px; @@ -92,7 +92,7 @@ li { margin: 0 0 2px; - em {color: $nav-ui-highlight-color;} + em {color: var(--brand-color);} } } } diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 83f0e754e..baed24839 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -796,7 +796,7 @@ .account__avatar { @include avatar-radius; position: relative; - background-color: $ui-base-color; + background-color: var(--accent-color); &-inline { display: inline-block; @@ -3342,8 +3342,8 @@ a.status-card.compact:hover { .fa-times-circle { @include font-size(17); cursor: pointer; - color: $nav-ui-highlight-color; - &:hover {color: lighten($nav-ui-highlight-color, 7%);} + color: var(--highlight-text-color); + &:hover {color: var(--brand-color);} } } diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index b112ec739..42f8b0b80 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -98,7 +98,7 @@ width: 100%; margin: 0; color: $inverted-text-color; - background: $simple-background-color; + background: $gab-background-base-light; padding: 10px; font-family: inherit; font-size: 14px; @@ -283,7 +283,7 @@ .compose-form__buttons-wrapper { padding: 10px; - background: darken($simple-background-color, 8%); + background: $gab-background-base-light; border-radius: 0 0 4px 4px; display: flex; justify-content: space-between; diff --git a/app/styles/soapbox/components/dropdown-menu.scss b/app/styles/soapbox/components/dropdown-menu.scss index 371577cc4..20156a193 100644 --- a/app/styles/soapbox/components/dropdown-menu.scss +++ b/app/styles/soapbox/components/dropdown-menu.scss @@ -4,9 +4,8 @@ @include font-weight(normal); z-index: 9999; position: absolute; - background: $gab-background-container; - border-radius: 4px; - border: 1px solid $gab-placeholder-accent; + background: $gab-background-base-light; + border-radius: 6px; padding: 4px 0; color: $gab-secondary-text; box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.5); @@ -25,28 +24,28 @@ right: -5px; margin-top: -5px; border-width: 5px 0 5px 5px; - border-left-color: $gab-placeholder-accent; + border-left-color: $gab-background-base-light; } &.top { bottom: -5px; margin-left: -5px; border-width: 5px 5px 0; - border-top-color: $gab-placeholder-accent; + border-top-color: $gab-background-base-light; } &.bottom { top: -5px; margin-left: -5px; border-width: 0 5px 5px; - border-bottom-color: $gab-placeholder-accent; + border-bottom-color: $gab-background-base-light; } &.right { left: -5px; margin-top: -5px; border-width: 5px 5px 5px 0; - border-right-color: $gab-placeholder-accent; + border-right-color: $gab-background-base-light; } } From a44d4d2dc87b302b33ff3ae23d64f786f06e7af8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 16:12:41 -0500 Subject: [PATCH 14/46] Lower highlight text color contrast --- app/soapbox/reducers/theme.js | 2 +- app/styles/soapbox/components.scss | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index bcb1c7275..3bbd71a30 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -23,7 +23,7 @@ export const generateTheme = (brandColor, mode) => { 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, 'brand-color-faint': cssrgba(brandColor, 0.1), 'brand-color-med': cssrgba(brandColor, 0.2), - 'highlight-text-color': makeContrast(10, brandColor, mode).hex, + 'highlight-text-color': makeContrast(5, brandColor, mode).hex, 'brand-color-hicontrast': makeContrast(20, brandColor, mode).hex, }); }; diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index baed24839..8f389aadf 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -1358,12 +1358,13 @@ a.account__display-name { display: flex; width: 100%; height: auto; - z-index: 105; + z-index: 105; + background: $gab-background-container-light; - @media (min-width: 895px) { - top: -290px; - position: sticky; - } + @media (min-width: 895px) { + top: -290px; + position: sticky; + } } &__columns { From 53cb73634db85e25f1e39cc9f549f2adf2f8ab29 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 16:27:35 -0500 Subject: [PATCH 15/46] Color replace --brand-color-med --- app/soapbox/reducers/theme.js | 2 +- app/styles/soapbox-light/diff.scss | 4 ---- app/styles/soapbox/about.scss | 4 ++-- app/styles/soapbox/basics.scss | 2 +- app/styles/soapbox/components.scss | 23 +++++++++++++------ .../soapbox/components/account-header.scss | 2 +- .../soapbox/components/hotkeys-modal.scss | 2 +- app/styles/soapbox/forms.scss | 4 ++-- app/styles/soapbox/tables.scss | 4 ++-- 9 files changed, 26 insertions(+), 21 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 3bbd71a30..122a1d769 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -24,7 +24,7 @@ export const generateTheme = (brandColor, mode) => { 'brand-color-faint': cssrgba(brandColor, 0.1), 'brand-color-med': cssrgba(brandColor, 0.2), 'highlight-text-color': makeContrast(5, brandColor, mode).hex, - 'brand-color-hicontrast': makeContrast(20, brandColor, mode).hex, + 'brand-color-hicontrast': makeContrast(15, brandColor, mode).hex, }); }; diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index 48fb9b393..daa84f3f8 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -95,10 +95,6 @@ body { background: $ui-base-color; } -.account-gallery__item a { - background-color: $ui-base-color; -} - // Change the colors used in the dropdown menu .dropdown-menu { &__item { diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 33797855f..fa9e2d1a8 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -170,7 +170,7 @@ $small-breakpoint: 960px; } .information-board { - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); padding: 20px 0; .container-alt { @@ -428,7 +428,7 @@ $small-breakpoint: 960px; } &__call-to-action { - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); border-radius: 4px; padding: 25px 40px; overflow: hidden; diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index d9d797852..54afa4566 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -85,7 +85,7 @@ body { } &.admin { - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); position: fixed; width: 100%; height: 100%; diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 8f389aadf..6a7d38ed0 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -25,11 +25,12 @@ text-overflow: ellipsis; white-space: nowrap; width: auto; + transition: 0.2s; &:active, &:focus, &:hover { - background-color: lighten($ui-highlight-color, 10%); + background-color: var(--brand-color-hicontrast); } &--destructive { @@ -391,7 +392,7 @@ } a { - color: var(--brand-color-hicontrast); + color: var(--highlight-text-color); text-decoration: none; &:hover { @@ -548,6 +549,10 @@ &.status-direct:not(.read) { background: var(--brand-color-med); border-bottom-color: var(--brand-color-med); + + .status__content a { + color: var(--brand-color-hicontrast); + } } &.light { @@ -796,7 +801,7 @@ .account__avatar { @include avatar-radius; position: relative; - background-color: var(--accent-color); + background-color: var(--brand-color-faint); &-inline { display: inline-block; @@ -3366,7 +3371,7 @@ a.status-card.compact:hover { margin-bottom: 5px; h5 { - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); border-bottom: 1px solid var(--brand-color-med); cursor: default; display: flex; @@ -4018,6 +4023,10 @@ a.status-card.compact:hover { overflow: hidden; margin: 2px; + a { + background: var(--brand-color-faint); + } + &__icons { position: absolute; top: 50%; @@ -4029,14 +4038,14 @@ a.status-card.compact:hover { .notification__filter-bar, .account__section-headline { - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); border-bottom: 1px solid var(--brand-color-med); cursor: default; display: flex; flex-shrink: 0; button { - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); border: 0; margin: 0; } @@ -4546,7 +4555,7 @@ noscript { &__header { color: $dark-text-color; background: lighten($ui-base-color, 2%); - border-bottom: 1px solid darken($ui-base-color, 4%); + border-bottom: 1px solid var(--brand-color-med); font-weight: 500; padding: 15px; font-size: 16px; diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index 3ecc8f2cf..9ff925681 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -18,7 +18,7 @@ overflow: hidden; height: 350px; position: relative; - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); @media screen and (max-width: 895px) {height: 225px;} &--none {height: 125px;} diff --git a/app/styles/soapbox/components/hotkeys-modal.scss b/app/styles/soapbox/components/hotkeys-modal.scss index d6f47b648..62e17521c 100644 --- a/app/styles/soapbox/components/hotkeys-modal.scss +++ b/app/styles/soapbox/components/hotkeys-modal.scss @@ -44,7 +44,7 @@ display: inline-block; padding: 2px 8px; background-color: var(--brand-color-med); - border: 1px solid darken($ui-base-color, 4%); + border: 1px solid var(--brand-color-med); border-radius: 4px; } } diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index b19e6109b..19742f9d4 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -864,7 +864,7 @@ code { margin-bottom: 25px; .fa-link { - background-color: darken($ui-base-color, 4%); + background-color: var(--brand-color-med); border-radius: 100%; font-size: 24px; padding: 10px; @@ -904,7 +904,7 @@ code { text-align: center; &::after { - background-color: darken($ui-base-color, 4%); + background-color: var(--brand-color-med); content: ''; display: block; height: 100%; diff --git a/app/styles/soapbox/tables.scss b/app/styles/soapbox/tables.scss index f90406ca5..0c756c023 100644 --- a/app/styles/soapbox/tables.scss +++ b/app/styles/soapbox/tables.scss @@ -11,7 +11,7 @@ vertical-align: top; border-top: 1px solid $ui-base-color; text-align: left; - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); } & > thead > tr > th { @@ -183,7 +183,7 @@ a.table-action-link { &__row { border: 1px solid darken($ui-base-color, 8%); border-top: 0; - background: darken($ui-base-color, 4%); + background: var(--brand-color-med); @media screen and (max-width: $no-gap-breakpoint) { &:first-child { From 8165975308ecabf0e1ac76c5da1e7c582bd6ac07 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 17:14:18 -0500 Subject: [PATCH 16/46] tabs-bar button hover color --- app/styles/soapbox/components/tabs-bar.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/soapbox/components/tabs-bar.scss index 9e94bf122..5ef20c826 100644 --- a/app/styles/soapbox/components/tabs-bar.scss +++ b/app/styles/soapbox/components/tabs-bar.scss @@ -117,15 +117,15 @@ width: 65px; height: 34px; margin-left: 20px; - border-radius: 4px; + border-radius: 6px; background-color: var(--accent-color) !important; transition: background-color 0.2s; font-weight: bold; font-size: 16px; + transition: 0.2s; &:hover { - background-color: darken($nav-ui-highlight-color, 10%) !important; - box-shadow: inset 0 0 6px darken($gab-brand-default, 10%); + box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2); } } From 50c4dac5990517dd04d244eab22faafe1777eec4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 17:34:33 -0500 Subject: [PATCH 17/46] $ui-highlight-color replace --- app/styles/contrast/diff.scss | 2 +- app/styles/soapbox/components.scss | 12 ++++++------ app/styles/soapbox/components/dropdown-menu.scss | 2 +- app/styles/soapbox/donations.scss | 2 +- app/styles/soapbox/forms.scss | 2 +- app/styles/soapbox/introduction.scss | 4 ++-- app/styles/soapbox/stream_entries.scss | 2 +- app/styles/soapbox/widgets.scss | 6 +++--- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/styles/contrast/diff.scss b/app/styles/contrast/diff.scss index aeb82c698..96b113f98 100644 --- a/app/styles/contrast/diff.scss +++ b/app/styles/contrast/diff.scss @@ -77,5 +77,5 @@ } .public-layout .public-account-header__tabs__tabs .counter.active::after { - border-bottom: 4px solid $ui-highlight-color; + border-bottom: 4px solid var(--brand-color); } diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 6a7d38ed0..ad5bb6d82 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -937,7 +937,7 @@ a .account__avatar { border-bottom: 4px solid transparent; &.active { - border-bottom: 4px solid $ui-highlight-color; + border-bottom: 4px solid var(--brand-color); } & > span { @@ -1967,7 +1967,7 @@ a.account__display-name { } &.active { - color: $ui-highlight-color; + color: var(--brand-color); } } } @@ -3164,7 +3164,7 @@ a.status-card.compact:hover { left: 0; top: 0; height: 6px; - background: $ui-highlight-color; + background: var(--brand-color); border-radius: 6px; } @@ -3233,7 +3233,7 @@ a.status-card.compact:hover { &:hover, &.active { - background: $ui-highlight-color; + background: var(--brand-color); color: $primary-text-color; outline: 0; @@ -3286,7 +3286,7 @@ a.status-card.compact:hover { } &.active { - background: $ui-highlight-color; + background: var(--brand-color); .icon-button { color: $primary-text-color; @@ -4665,7 +4665,7 @@ noscript { } &__active { - color: $ui-highlight-color; + color: var(--brand-color); position: absolute; top: 50%; left: 50%; diff --git a/app/styles/soapbox/components/dropdown-menu.scss b/app/styles/soapbox/components/dropdown-menu.scss index 20156a193..d90118e40 100644 --- a/app/styles/soapbox/components/dropdown-menu.scss +++ b/app/styles/soapbox/components/dropdown-menu.scss @@ -145,7 +145,7 @@ } &:hover { - background: $ui-highlight-color; + background: var(--brand-color); color: $secondary-text-color; } } diff --git a/app/styles/soapbox/donations.scss b/app/styles/soapbox/donations.scss index 45bece23c..56a6dc6dc 100644 --- a/app/styles/soapbox/donations.scss +++ b/app/styles/soapbox/donations.scss @@ -19,7 +19,7 @@ } &--active { - background-color: $ui-highlight-color; + background-color: var(--brand-color); color: $primary-text-color; } } diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index 19742f9d4..2df8f5570 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -389,7 +389,7 @@ code { width: 100%; border: 0; border-radius: 4px; - background: $ui-highlight-color; + background: var(--brand-color); color: $primary-text-color; font-size: 18px; line-height: inherit; diff --git a/app/styles/soapbox/introduction.scss b/app/styles/soapbox/introduction.scss index aaa86ffa9..161238937 100644 --- a/app/styles/soapbox/introduction.scss +++ b/app/styles/soapbox/introduction.scss @@ -126,7 +126,7 @@ width: 14px; height: 14px; border-radius: 14px; - border: 1px solid $ui-highlight-color; + border: 1px solid var(--brand-color); background: transparent; margin: 0 3px; cursor: pointer; @@ -137,7 +137,7 @@ &.active { cursor: default; - background: $ui-highlight-color; + background: var(--brand-color); } } diff --git a/app/styles/soapbox/stream_entries.scss b/app/styles/soapbox/stream_entries.scss index 6f3ad94fb..d49702477 100644 --- a/app/styles/soapbox/stream_entries.scss +++ b/app/styles/soapbox/stream_entries.scss @@ -76,7 +76,7 @@ .button.logo-button { flex: 0 auto; font-size: 14px; - background: $ui-highlight-color; + background: var(--brand-color); color: $primary-text-color; text-transform: none; line-height: 36px; diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index f0cc02332..9954af002 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -290,7 +290,7 @@ } &.active > a { - background: $ui-highlight-color; + background: var(--brand-color); cursor: default; } @@ -335,7 +335,7 @@ } &.active .avatar-stack .account__avatar { - border-color: $ui-highlight-color; + border-color: var(--brand-color); } } } @@ -523,7 +523,7 @@ $fluid-breakpoint: $maximum-width + 20px; line-height: 20px; text-decoration: none; font-weight: 500; - color: $ui-highlight-color; + color: var(--brand-color); &:hover, &:focus, From 8e3ad9e6b64b67b79106ba10cd87556adb71c7dc Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 18:22:11 -0500 Subject: [PATCH 18/46] $ui-base-color replacements --- app/styles/soapbox-light/diff.scss | 14 ++-- app/styles/soapbox/about.scss | 4 +- app/styles/soapbox/accounts.scss | 8 +- app/styles/soapbox/basics.scss | 6 +- app/styles/soapbox/components.scss | 82 +++++++++++-------- .../soapbox/components/account-header.scss | 5 +- app/styles/soapbox/components/modal.scss | 4 +- app/styles/soapbox/containers.scss | 8 +- app/styles/soapbox/forms.scss | 4 +- app/styles/soapbox/rtl.scss | 2 +- app/styles/soapbox/stream_entries.scss | 6 +- app/styles/soapbox/tables.scss | 14 ++-- app/styles/soapbox/widgets.scss | 12 +-- 13 files changed, 90 insertions(+), 79 deletions(-) diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index daa84f3f8..158291190 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -23,11 +23,11 @@ body { } .drawer__inner { - background: $ui-base-color; + background: var(--brand-color-med); } .drawer__inner__soapbox { - background: $ui-base-color url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; + background: var(--brand-color-med) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; } // Change the colors used in compose-form @@ -63,7 +63,7 @@ body { .emoji-mart-search input { background: rgba($ui-base-color, 0.3); - border-color: $ui-base-color; + border-color: var(--brand-color-med); } // Change the background colors of statuses @@ -92,7 +92,7 @@ body { // Change the background colors of media and video spoilers .media-spoiler, .video-player__spoiler { - background: $ui-base-color; + background: var(--brand-color-med); } // Change the colors used in the dropdown menu @@ -124,7 +124,7 @@ body { } .dropdown-menu__separator { - border-bottom-color: lighten($ui-base-color, 12%); + border-bottom-color: var(--brand-color-med); } // Change the background colors of modals @@ -135,7 +135,7 @@ body { .report-modal, .error-modal, .onboarding-modal { - background: $ui-base-color; + background: var(--brand-color-med); } .embed-modal { @@ -283,7 +283,7 @@ body { .public-account-header { &__image { - background: lighten($ui-base-color, 12%); + background: var(--brand-color-med); &::after { box-shadow: none; diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index fa9e2d1a8..65e0f2205 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -549,7 +549,7 @@ $small-breakpoint: 960px; &__forms, #soapbox-timeline { box-sizing: border-box; - background: $ui-base-color; + background: var(--brand-color-med); border-radius: 4px; box-shadow: 0 0 6px rgba($black, 0.1); } @@ -816,7 +816,7 @@ $small-breakpoint: 960px; } &__footer { - background: $ui-base-color; + background: var(--brand-color-med); padding: 10px; border-radius: 0 0 4px 4px; display: flex; diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index 90325f1e6..76432801e 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -173,7 +173,7 @@ } .nothing-here { - background: $ui-base-color; + background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); color: $gab-secondary-text; font-size: 14px; @@ -226,14 +226,14 @@ padding: 0; margin: 15px -15px -15px; border: 0 none; - border-top: 1px solid lighten($ui-base-color, 12%); - border-bottom: 1px solid lighten($ui-base-color, 12%); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); font-size: 14px; line-height: 20px; dl { display: flex; - border-bottom: 1px solid lighten($ui-base-color, 12%); + border-bottom: 1px solid var(--brand-color-med); } dt, diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 54afa4566..766f70fcc 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -54,7 +54,7 @@ body { } &.lighter { - background: $ui-base-color; + background: var(--brand-color-med); } &.with-modals { @@ -96,7 +96,7 @@ body { position: absolute; text-align: center; color: $darker-text-color; - background: $ui-base-color; + background: var(--brand-color-med); width: 100%; height: 100%; padding: 0; @@ -186,7 +186,7 @@ button { } a { - color: var(--highlight-text-color); + color: var(--brand-color-hicontrast); text-decoration: none; &:hover { diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index ad5bb6d82..a7de62edd 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -79,12 +79,12 @@ } &.button-alternative-2 { - background: $ui-base-lighter-color; + background: var(--brand-color-med); &:active, &:focus, &:hover { - background-color: lighten($ui-base-lighter-color, 4%); + background-color: var(--brand-color-faint); } } @@ -127,6 +127,16 @@ cursor: pointer; transition: color 100ms ease-in; + > div { + display: inline-flex; + align-items: center; + justify-content: center; + } + + i.fa { + margin: 0; + } + &:hover, &:active, &:focus { @@ -506,7 +516,7 @@ background: var(--brand-color-faint); .status.status-direct { - background: lighten($ui-base-color, 12%); + background: var(--brand-color-med); &.muted { background: transparent; @@ -1080,11 +1090,11 @@ a.account__display-name { } a.status__content__spoiler-link { - background: $ui-base-lighter-color; + background: var(--brand-color-med); color: $inverted-text-color; &:hover { - background: lighten($ui-base-lighter-color, 7%); + background: var(--brand-color-faint); text-decoration: none; } } @@ -1710,7 +1720,7 @@ a.account__display-name { height: 100%; &.darker { - background: $ui-base-color; + background: var(--brand-color-med); } } @@ -1865,7 +1875,7 @@ a.account__display-name { height: 24px; padding: 0; border-radius: 30px; - background-color: $ui-base-color; + background-color: var(--brand-color-med); transition: background-color 0.2s ease; } @@ -1924,7 +1934,7 @@ a.account__display-name { left: 1px; width: 22px; height: 22px; - border: 1px solid $ui-base-color; + border: 1px solid var(--brand-color-med); border-radius: 50%; background-color: darken($simple-background-color, 2%); box-sizing: border-box; @@ -1983,13 +1993,13 @@ a.account__display-name { font-size: 12px; line-height: 19px; font-weight: 500; - background: $ui-base-color; + background: var(--brand-color-med); padding: 4px 8px; margin: -6px 10px; } .column-subheading { - background: $ui-base-color; + background: var(--brand-color-med); color: $dark-text-color; padding: 8px 20px; font-size: 12px; @@ -2001,7 +2011,7 @@ a.account__display-name { .getting-started__wrapper, .getting-started, .flex-spacer { - background: $ui-base-color; + background: var(--brand-color-med); } .getting-started__wrapper { @@ -2053,7 +2063,7 @@ a.account__display-name { } &__trends { - background: $ui-base-color; + background: var(--brand-color-med); flex: 0 1 auto; @media screen and (max-height: 810px) { @@ -2318,7 +2328,7 @@ a.status-card.compact:hover { text-decoration: none; &:hover { - background: lighten($ui-base-color, 2%); + background: var(--brand-color-faint); } } @@ -2331,7 +2341,7 @@ a.status-card.compact:hover { font-size: 16px; font-weight: 500; color: $dark-text-color; - background: $ui-base-color; + background: var(--brand-color-med); cursor: default; display: flex; flex: 1 1 auto; @@ -2364,7 +2374,7 @@ a.status-card.compact:hover { font-size: 16px; font-weight: 500; color: $dark-text-color; - background: $ui-base-color; + background: var(--brand-color-med); cursor: default; display: flex; flex: 1 1 auto; @@ -2534,7 +2544,7 @@ a.status-card.compact:hover { height: 0; background: transparent; border: 0; - border-top: 1px solid lighten($ui-base-color, 12%); + border-top: 1px solid var(--brand-color-med); margin: 10px 0; } } @@ -2822,7 +2832,7 @@ a.status-card.compact:hover { &:hover, &:active, &:focus { - background: lighten($ui-base-color, 12%); + background: var(--brand-color-med); color: lighten($darker-text-color, 4%); } } @@ -2913,7 +2923,7 @@ a.status-card.compact:hover { .empty-column-indicator, .error-column { color: $dark-text-color; - background: $ui-base-color; + background: var(--brand-color-med); text-align: center; padding: 40px; font-size: 15px; @@ -3111,7 +3121,7 @@ a.status-card.compact:hover { left: 0; z-index: -1; border-radius: 4px; - background: $ui-base-color; + background: var(--brand-color-med); box-shadow: 0 0 5px rgba($base-shadow-color, 0.2); } @@ -3123,7 +3133,7 @@ a.status-card.compact:hover { color: $secondary-text-color; font-size: 18px; font-weight: 500; - border: 2px dashed $ui-base-lighter-color; + border: 2px dashed var(--brand-color-med); border-radius: 4px; } @@ -3154,7 +3164,7 @@ a.status-card.compact:hover { width: 100%; height: 6px; border-radius: 6px; - background: $ui-base-lighter-color; + background: var(--brand-color-med); position: relative; margin-top: 5px; } @@ -3355,7 +3365,7 @@ a.status-card.compact:hover { .search-results__header { color: $dark-text-color; - background: lighten($ui-base-color, 2%); + background: var(--brand-color-faint); padding: 15px; font-weight: 500; font-size: 16px; @@ -3883,7 +3893,7 @@ a.status-card.compact:hover { border-radius: 4px; left: 70px; bottom: 20px; - background: lighten($ui-highlight-color, 8%); + background: var(--brand-color); } &__handle { @@ -3895,7 +3905,7 @@ a.status-card.compact:hover { bottom: 16px; left: 70px; transition: opacity .1s ease; - background: lighten($ui-highlight-color, 8%); + background: var(--brand-color); box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); pointer-events: none; } @@ -3941,7 +3951,7 @@ a.status-card.compact:hover { height: 4px; border-radius: 4px; top: 10px; - background: lighten($ui-highlight-color, 8%); + background: var(--brand-color); } &__buffer { @@ -3958,7 +3968,7 @@ a.status-card.compact:hover { top: 6px; margin-left: -6px; transition: opacity .1s ease; - background: lighten($ui-highlight-color, 8%); + background: var(--brand-color); box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); pointer-events: none; @@ -4082,7 +4092,7 @@ a.status-card.compact:hover { &::after { bottom: -1px; - border-color: transparent transparent $ui-base-color; + border-color: transparent transparent var(--brand-color-med); } } } @@ -4251,7 +4261,7 @@ noscript { border-radius: 5px; padding: 10px; font-family: $font-monospace, monospace; - background: $ui-base-color; + background: var(--brand-color-med); color: $primary-text-color; font-size: 14px; margin: 0; @@ -4554,7 +4564,7 @@ noscript { .trends { &__header { color: $dark-text-color; - background: lighten($ui-base-color, 2%); + background: var(--brand-color-faint); border-bottom: 1px solid var(--brand-color-med); font-weight: 500; padding: 15px; @@ -4656,7 +4666,7 @@ noscript { height: auto; path:first-child { - fill: lighten($ui-base-color, 12%); + fill: var(--brand-color-med); } path:last-child { @@ -4670,7 +4680,7 @@ noscript { top: 50%; left: 50%; transform: translate(-50%, -50%); - background: lighten($ui-base-color, 12%); + background: var(--brand-color-med); border-radius: 50%; padding: 0.35rem; } @@ -5013,23 +5023,23 @@ noscript { line-height: 1.25; a { - color: lighten($ui-highlight-color, 8%); + color: var(--highlight-text-color); } } &__fields { display: flex; flex-direction: column; - border-top: 1px solid lighten($ui-base-color, 12%); + border-top: 1px solid var(--brand-color-med); padding: 10px 0; margin: 5px 0; @media screen and (max-width: 895px) { - border-bottom: 1px solid lighten($ui-base-color, 12%); + border-bottom: 1px solid var(--brand-color-med); } a { - color: lighten($ui-highlight-color, 8%); + color: var(--highlight-text-color); } dl:first-child .verified { @@ -5137,7 +5147,7 @@ noscript { &__text-container { display: none; padding: 25px 0; - background-color: lighten($ui-base-color, 6%); + background-color: var(--brand-color-faint); @media (min-width: 895px) { display: block; diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index 9ff925681..77f3da9b2 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -99,12 +99,13 @@ margin-left: auto; .icon-button { - border: 1px solid lighten($ui-base-color, 12%); + border: 1px solid var(--brand-color-med); border-radius: 4px; box-sizing: content-box; padding: 2px; } - .button {margin-right: 10px;} + + .button { margin-right: 10px; } } &__links { diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index 00089f461..e9aa559df 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -289,7 +289,7 @@ } &__case { - background: $ui-base-color; + background: var(--brand-color-med); color: $secondary-text-color; font-weight: 500; padding: 10px; @@ -607,7 +607,7 @@ } .modal-layout { - background: $ui-base-color url('data:image/svg+xml;utf8,') repeat-x bottom fixed; + background: var(--brand-color-med) url('data:image/svg+xml;utf8,') repeat-x bottom fixed; display: flex; flex-direction: column; height: 100vh; diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index 2e3812582..a98f84f60 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -274,7 +274,7 @@ a { padding: 4px; border-radius: 4px; - background-color: $ui-base-color; + background-color: var(--brand-color-med); } } @@ -341,7 +341,7 @@ } &--hollow { - background-color: $ui-base-color; + background-color: var(--brand-color-med); &:hover, &:focus, @@ -722,7 +722,7 @@ margin: 0 -5px; .account__header__fields { - border-top: 1px solid lighten($ui-base-color, 12%); + border-top: 1px solid var(--brand-color-med); } .roles { @@ -864,7 +864,7 @@ } .card__bar { - background: $ui-base-color; + background: var(--brand-color-med); &:hover, &:active, diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index 2df8f5570..3ecae3ccd 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -446,7 +446,7 @@ code { outline: 0; font-family: inherit; resize: vertical; - background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; + background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; border: 1px solid darken($ui-base-color, 14%); border-radius: 4px; padding-left: 10px; @@ -567,7 +567,7 @@ code { border: 0; padding: 10px; font-family: $font-monospace, monospace; - background: $ui-base-color; + background: var(--brand-color-med); color: $primary-text-color; font-size: 14px; margin: 0; diff --git a/app/styles/soapbox/rtl.scss b/app/styles/soapbox/rtl.scss index 6201d3f4e..56f49e9dd 100644 --- a/app/styles/soapbox/rtl.scss +++ b/app/styles/soapbox/rtl.scss @@ -243,7 +243,7 @@ body.rtl { } .simple_form select { - background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat left 8px center / auto 16px; + background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat left 8px center / auto 16px; } .table th, diff --git a/app/styles/soapbox/stream_entries.scss b/app/styles/soapbox/stream_entries.scss index d49702477..9ec7d1bfe 100644 --- a/app/styles/soapbox/stream_entries.scss +++ b/app/styles/soapbox/stream_entries.scss @@ -26,7 +26,7 @@ } .entry { - background: $ui-base-color; + background: var(--brand-color-med); .detailed-status, .status, @@ -95,7 +95,7 @@ &:active, &:focus, &:hover { - background: lighten($ui-highlight-color, 10%); + background: var(--brand-color-hicontrast); } &:disabled, @@ -103,7 +103,7 @@ &:active, &:focus, &:hover { - background: $ui-primary-color; + background: var(--brand-color-med); } } diff --git a/app/styles/soapbox/tables.scss b/app/styles/soapbox/tables.scss index 0c756c023..f46f89af7 100644 --- a/app/styles/soapbox/tables.scss +++ b/app/styles/soapbox/tables.scss @@ -9,14 +9,14 @@ padding: 8px; line-height: 18px; vertical-align: top; - border-top: 1px solid $ui-base-color; + border-top: 1px solid var(--brand-color-med); text-align: left; background: var(--brand-color-med); } & > thead > tr > th { vertical-align: bottom; - border-bottom: 2px solid $ui-base-color; + border-bottom: 2px solid var(--brand-color-med); border-top: 0; font-weight: 500; } @@ -27,7 +27,7 @@ & > tbody > tr:nth-child(odd) > td, & > tbody > tr:nth-child(odd) > th { - background: $ui-base-color; + background: var(--brand-color-med); } a { @@ -67,7 +67,7 @@ &.batch-table { & > thead > tr > th { - background: $ui-base-color; + background: var(--brand-color-med); border-top: 1px solid darken($ui-base-color, 8%); border-bottom: 1px solid darken($ui-base-color, 8%); @@ -165,7 +165,7 @@ a.table-action-link { &__toolbar { border: 1px solid darken($ui-base-color, 8%); - background: $ui-base-color; + background: var(--brand-color-med); border-radius: 4px 0 0; height: 47px; align-items: center; @@ -196,10 +196,10 @@ a.table-action-link { } &:nth-child(even) { - background: $ui-base-color; + background: var(--brand-color-med); &:hover { - background: lighten($ui-base-color, 2%); + background: var(--brand-color-faint); } } diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index 9954af002..e504a5368 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -20,7 +20,7 @@ } &__text { - background: $ui-base-color; + background: var(--brand-color-med); padding: 20px; border-radius: 0 0 4px 4px; font-size: 15px; @@ -115,7 +115,7 @@ padding: 20px; min-height: 100%; border-radius: 4px; - background: $ui-base-color; + background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); } @@ -152,7 +152,7 @@ padding: 15px; padding-bottom: 20px; border-radius: 4px; - background: $ui-base-color; + background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); color: $secondary-text-color; font-weight: 400; @@ -260,7 +260,7 @@ } .directory { - background: $ui-base-color; + background: var(--brand-color-med); border-radius: 4px; box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); @@ -273,7 +273,7 @@ display: flex; align-items: center; justify-content: space-between; - background: $ui-base-color; + background: var(--brand-color-med); border-radius: 4px; padding: 15px; text-decoration: none; @@ -352,7 +352,7 @@ position: relative; margin-left: -10px; background: darken($ui-base-color, 8%); - border: 2px solid $ui-base-color; + border: 2px solid var(--brand-color-med); &:nth-child(1) { z-index: 1; From 36f888c0272ed6e48f973721adbdab6085e8c4f9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 18:28:58 -0500 Subject: [PATCH 19/46] Remove all themes except light and dark --- app/images/clouds.png | Bin 226398 -> 0 bytes app/images/halloween-emblem.svg | 311 ------------- app/images/neenster/fish.gif | Bin 254874 -> 0 bytes app/images/pro_bg/floral--halloween.svg | 512 ---------------------- app/images/spider.svg | 69 --- app/images/spiderweb.svg | 78 ---- app/images/starfield.png | Bin 12137 -> 0 bytes app/images/twinkle.svg | 34 -- app/soapbox/features/preferences/index.js | 10 +- app/styles/contrast.scss | 3 - app/styles/contrast/diff.scss | 81 ---- app/styles/contrast/variables.scss | 24 - app/styles/glinner.scss | 100 ----- app/styles/halloween.scss | 3 - app/styles/halloween/diff.scss | 201 --------- app/styles/halloween/variables.scss | 12 - app/styles/lime.scss | 16 - app/styles/neenster.scss | 34 -- app/styles/soapbox-light.scss | 3 - app/styles/soapbox/pro.scss | 26 +- 20 files changed, 3 insertions(+), 1514 deletions(-) delete mode 100644 app/images/clouds.png delete mode 100644 app/images/halloween-emblem.svg delete mode 100644 app/images/neenster/fish.gif delete mode 100644 app/images/pro_bg/floral--halloween.svg delete mode 100644 app/images/spider.svg delete mode 100644 app/images/spiderweb.svg delete mode 100644 app/images/starfield.png delete mode 100644 app/images/twinkle.svg delete mode 100644 app/styles/contrast.scss delete mode 100644 app/styles/contrast/diff.scss delete mode 100644 app/styles/contrast/variables.scss delete mode 100644 app/styles/glinner.scss delete mode 100644 app/styles/halloween.scss delete mode 100644 app/styles/halloween/diff.scss delete mode 100644 app/styles/halloween/variables.scss delete mode 100644 app/styles/lime.scss delete mode 100644 app/styles/neenster.scss delete mode 100644 app/styles/soapbox-light.scss diff --git a/app/images/clouds.png b/app/images/clouds.png deleted file mode 100644 index 29962c1048bd08e7416f765b821ea13fd0a9cf7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226398 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
9lMN#JuMHwPtar0haXJ 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 diff --git a/app/images/halloween-emblem.svg b/app/images/halloween-emblem.svg deleted file mode 100644 index ad23be14c..000000000 --- a/app/images/halloween-emblem.svg +++ /dev/null @@ -1,311 +0,0 @@ - - - - Flying Witch during Full Moon - - - - - image/svg+xml - - Flying Witch during Full Moon - 2017-10-10 - - - Urs Roesch - - - - - - OpenClipart - - - - - remix+287475 - remix+288242 - remix+170669 - yellow - moon - yellow moon - full moon - moon - witch - cat - silhouette - bat - bats - flying bat - flying witch - black - dark - night - halloween - walpurgis night - walpurgis - - - Flying witch with cat flying during full moon. - - - gnokii - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/images/neenster/fish.gif b/app/images/neenster/fish.gif deleted file mode 100644 index 539754e66291528ca20977372811ef9682e8fb2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254874 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⪼IBhA18w3RBF7BuQ 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 Jtn!^!!t*s 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

t>ZS!FiJ8ll^RoC_vuweEy6{~c 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Ç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 -image/svg+xml \ No newline at end of file diff --git a/app/images/spider.svg b/app/images/spider.svg deleted file mode 100644 index 077b60d65..000000000 --- a/app/images/spider.svg +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/app/images/spiderweb.svg b/app/images/spiderweb.svg deleted file mode 100644 index 16ae81984..000000000 --- a/app/images/spiderweb.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - Realistic spider web - - - - - - - image/svg+xml - - - - - Openclipart - - - Realistic spider web - - - - - - - - - diff --git a/app/images/starfield.png b/app/images/starfield.png deleted file mode 100644 index 1e799589553544a3b69f7f35cb061f03bb986437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12137 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%0AQh?W`C{0!R!Y`oAVW4hi+59hWRdCl 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 - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/app/soapbox/features/preferences/index.js b/app/soapbox/features/preferences/index.js index cc87f8680..3f7ea81be 100644 --- a/app/soapbox/features/preferences/index.js +++ b/app/soapbox/features/preferences/index.js @@ -21,14 +21,8 @@ const messages = defineMessages({ // TODO: Pull dynamically const themes = { - 'azure': 'Azure', - 'purple': 'Purple Light', - 'purple-dark': 'Purple Dark', - 'purple-contrast': 'Purple Contrast', - 'halloween': 'Halloween', - 'aquatic': 'Aquatic', - 'paleblue': 'Pale Blue', - 'lime': 'Lime Green', + 'azure': 'Light', + 'purple-dark': 'Dark', }; const mapStateToProps = state => ({ diff --git a/app/styles/contrast.scss b/app/styles/contrast.scss deleted file mode 100644 index 5b43aecbe..000000000 --- a/app/styles/contrast.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import 'contrast/variables'; -@import 'application'; -@import 'contrast/diff'; diff --git a/app/styles/contrast/diff.scss b/app/styles/contrast/diff.scss deleted file mode 100644 index 96b113f98..000000000 --- a/app/styles/contrast/diff.scss +++ /dev/null @@ -1,81 +0,0 @@ -// components.scss -.compose-form { - .compose-form__modifiers { - .compose-form__upload { - &-description { - input { - &::placeholder { - opacity: 1; - } - } - } - } - } - - .compose-form__warning { - color: $inverted-text-color; - } -} - -.rich-formatting a, -.rich-formatting p a, -.rich-formatting li a, -.landing-page__short-description p a, -.status__content a, -.reply-indicator__content a { - color: lighten($ui-highlight-color, 12%); - text-decoration: underline; - - &.mention { - text-decoration: none; - } - - &.mention span { - text-decoration: underline; - - &:hover, - &:focus, - &:active { - text-decoration: none; - } - } - - &:hover, - &:focus, - &:active { - text-decoration: none; - } - - &.status__content__spoiler-link { - color: $secondary-text-color; - text-decoration: none; - } -} - -.status__content__read-more-button { - text-decoration: underline; - - &:hover, - &:focus, - &:active { - text-decoration: none; - } -} - -.getting-started__footer a { - text-decoration: underline; - - &:hover, - &:focus, - &:active { - text-decoration: none; - } -} - -.nothing-here { - color: $darker-text-color; -} - -.public-layout .public-account-header__tabs__tabs .counter.active::after { - border-bottom: 4px solid var(--brand-color); -} diff --git a/app/styles/contrast/variables.scss b/app/styles/contrast/variables.scss deleted file mode 100644 index cfe3b21db..000000000 --- a/app/styles/contrast/variables.scss +++ /dev/null @@ -1,24 +0,0 @@ -// Dependent colors -$black: #000000; - -$classic-base-color: #282c37; -$classic-primary-color: #9baec8; -$classic-secondary-color: #d9e1e8; -$classic-highlight-color: #2b90d9; - -$ui-base-color: $classic-base-color !default; -$ui-primary-color: $classic-primary-color !default; -$ui-secondary-color: $classic-secondary-color !default; - -// Differences -$ui-highlight-color: #2b5fd9; - -$darker-text-color: lighten($ui-primary-color, 20%) !default; -$dark-text-color: lighten($ui-primary-color, 12%) !default; -$secondary-text-color: lighten($ui-secondary-color, 6%) !default; -$highlight-text-color: $classic-highlight-color !default; -$action-button-color: #8d9ac2; - -$inverted-text-color: $black !default; -$lighter-text-color: darken($ui-base-color, 6%) !default; -$light-text-color: darken($ui-primary-color, 40%) !default; diff --git a/app/styles/glinner.scss b/app/styles/glinner.scss deleted file mode 100644 index 966dfa203..000000000 --- a/app/styles/glinner.scss +++ /dev/null @@ -1,100 +0,0 @@ -@import 'soapbox-light/variables'; - -$glinner-yellow: #fff360; -$glinner-orange: #ffa254; -$glinner-brown: #726253; -$glinner-steel: #b1bcbf; -$glinner-navy: #536172; -$glinner-tan: #e9d5cf; -$glinner-cream: #e8e5dd; -$glinner-mustard: #bcbb65; -$glinner-sky: #aadaea; -$glinner-teal: #267893; -$glinner-dirt: #74733c; - -$gab-brand-default: $glinner-teal; -$gab-background-base-light: darken($glinner-sky, 17%); -$gab-background: darken($glinner-cream, 7%); -$ui-base-color: darken($glinner-sky, 17%); -$ui-highlight-color: lighten($glinner-orange, 20%); -$nav-ui-highlight-color: $glinner-sky; -$ui-base-lighter-color: darken($glinner-orange, 35%); - -$bg-size: 720px; - -@import 'application'; -@import 'soapbox-light/diff'; - -body { - background-color: #bcbb65; - background-image: linear-gradient(to bottom, - $glinner-teal 0%, $glinner-sky 70%, - $glinner-dirt 70%, $glinner-mustard 100% - ); - background-repeat: repeat-x; - background-size: auto $bg-size; -} - -.public-layout { - background-image: none; - background-color: transparent; - background-repeat: repeat-x; - background-size: auto $bg-size; - - .brand { - filter: brightness(0%) invert(100%) drop-shadow(4px 4px lighten($gab-brand-default, 20%)); - } - - .header .brand { - filter: brightness(0%) invert(100%) drop-shadow(2px 2px lighten($gab-brand-default, 20%)); - } - - .brand__tagline { - color: #fff; - } - - .brand__tagline span { - background: lighten($gab-brand-default, 20%); - } - - .header .nav-link { - color: #fff; - filter: drop-shadow(1px 1px lighten($gab-brand-default, 20%)); - - &:hover, - &:focus, - &:active { - color: $gab-background-base-light; - } - } - - .footer { - background-color: #74733c; - - ul li a { - color: darken($primary-text-color, 10%); - } - } -} - -.ui { - background: $gab-background; -} - -.tabs-bar__button-compose { - background-color: darken($glinner-teal, 15%) !important; - - &:hover { - background-color: darken($glinner-teal, 20%) !important; - } -} - -.icon-with-badge__badge { - background: $ui-highlight-color; -} - -@media screen and (max-width: 767px) { - .public-layout .header { - margin-bottom: 70px; - } -} diff --git a/app/styles/halloween.scss b/app/styles/halloween.scss deleted file mode 100644 index 1882a5495..000000000 --- a/app/styles/halloween.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import 'halloween/variables'; -@import 'application'; -@import 'halloween/diff'; diff --git a/app/styles/halloween/diff.scss b/app/styles/halloween/diff.scss deleted file mode 100644 index f81ca9e6c..000000000 --- a/app/styles/halloween/diff.scss +++ /dev/null @@ -1,201 +0,0 @@ -@keyframes twinkle { - from { background-position: 0 0; } - to { background-position: -10000px 5000px; } -} - -@keyframes clouds { - from { background-position: 0 0; } - to { background-position: 10000px 0; } -} - -body::before, -body.app-body::after, -#soapbox::before, -#soapbox::after { - content: ''; - display: block; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-size: cover; - background-position: center; - width: 100%; - height: 100%; - z-index: -100; -} - -body.app-body { - background-color: $halloween-dark; - background-image: url('../images/starfield.png'); - background-size: cover; - background-attachment: fixed; - background-position: center; -} - -body::before { - background-image: url('../images/spiderweb.svg'); -} - -body.app-body::after { - z-index: -101; - background: transparent url("../images/twinkle.svg") repeat top center; - animation: twinkle 200s linear infinite; -} - -#soapbox::before { - background-image: radial-gradient( - circle, - transparent 0%, - transparent 60%, - darken($halloween-dark, 30%) 100% - ); -} - -#soapbox::after { - background: transparent url("../images/clouds.png") repeat top center; - animation: clouds 200s linear infinite; -} - -// Dangling spider -.ui .page__top::after, -.ui .page__columns::after { - content: ''; - display: block; - width: 100px; - height: 100px; - right: 20px; - background-image: url('../images/spider.svg'); - background-size: contain; - background-repeat: no-repeat; - background-position: top right; - z-index: -1; - pointer-events: none; -} - -.ui .page__columns::after { - position: fixed; - top: 50px; -} - -.ui .page__top::after { - position: absolute; - bottom: -100px; -} - -.ui .page__top + .page__columns::after { - display: none; -} - -.search__input { - border-color: $halloween-dark; - color: #000; -} - -.search__icon .fa-times-circle, -.search__icon .fa { - color: $halloween-dark; - - &:hover { - color: lighten($halloween-dark, 10%); - } -} - -.search__input::placeholder { - color: darken($halloween-dark, 10%); -} - -.compose-form .autosuggest-textarea__textarea, -.compose-form .spoiler-input__input { - color: darken($halloween-dark, 15%); -} - -.tabs-bar__button-compose:hover { - background-color: $nav-ui-highlight-color !important; -} - -.button { - background-color: $halloween-orange; - color: #000; - - &:focus, - &:hover { - background-color: darken($halloween-orange, 10%); - } -} - -.simple_form button, -.simple_form .button, -.simple_form .block-button { - color: #000; -} - -.getting-started__footer::before { - content: ''; - display: block; - background-image: url('../images/halloween-emblem.svg'); - background-size: contain; - background-position: left; - background-repeat: no-repeat; - width: 100%; - height: 100px; - margin-bottom: 20px; -} - -.icon-with-badge__badge { - background-color: $halloween-dark; -} - -.detailed-status, -.detailed-status__action-bar { - background-color: #282828; -} - -.focusable:focus, -.focusable:focus .detailed-status, -.focusable:focus .detailed-status__action-bar { - background-color: #333; -} - -.timeline-queue-header, -.notification__filter-bar, -.account__section-headline, -.notification__filter-bar button, -.account__section-headline button { - background: transparent; -} - -.dropdown-menu { - border-color: $halloween-orange; -} - -.dropdown-menu__item a { - color: $halloween-orange; -} - -.dropdown-menu__arrow.bottom { - border-bottom-color: $halloween-orange; -} - -.dropdown-menu__arrow.top { - border-top-color: $halloween-orange; -} - -.compose-modal { - background: $gab-background-container; -} - -.boost-modal__action-bar, -.confirmation-modal__action-bar, -.mute-modal__action-bar { - background: $halloween-dark; -} - -.boost-modal, -.confirmation-modal, -.report-modal, -.actions-modal, -.mute-modal { - border-color: $halloween-orange; -} diff --git a/app/styles/halloween/variables.scss b/app/styles/halloween/variables.scss deleted file mode 100644 index 6c2476fbb..000000000 --- a/app/styles/halloween/variables.scss +++ /dev/null @@ -1,12 +0,0 @@ -$halloween-orange: #dc6d00; -$halloween-dark: #904700; - -$gab-brand-default: $halloween-orange; -$gab-text-highlight: lighten($halloween-orange, 20%); -$gab-secondary-text: #ccc; -$gab-placeholder-accent: #ccc; -$gab-background-base: darken($halloween-orange, 15%); - -$action-button-color: #ccc; - -$nav-ui-search-bg-color: lighten($halloween-orange, 20%); diff --git a/app/styles/lime.scss b/app/styles/lime.scss deleted file mode 100644 index a9ee3d159..000000000 --- a/app/styles/lime.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import 'soapbox-light/variables'; - -$gab-brand-default: #1ca82b; -$gab-background-base-light: #fafff9; -$gab-background: $gab-background-base-light; -$ui-base-color: #f5fff0; -$ui-highlight-color: $gab-brand-default; -$nav-ui-highlight-color: #69f31f; -$ui-base-lighter-color: darken(#69f31f, 35%); - -@import 'application'; -@import 'soapbox-light/diff'; - -.public-layout .footer ul li a { - color: lighten($gab-brand-default, 10%); -} diff --git a/app/styles/neenster.scss b/app/styles/neenster.scss deleted file mode 100644 index 72e30acac..000000000 --- a/app/styles/neenster.scss +++ /dev/null @@ -1,34 +0,0 @@ -@import 'soapbox-light/variables'; - -$gab-brand-default: #34565c; -$gab-background-base-light: #f6fbfb; -$gab-background: $gab-background-base-light; -$ui-base-color: #e9f6f5; -$ui-highlight-color: $gab-brand-default; -$nav-ui-highlight-color: #2da8be; -$ui-base-lighter-color: darken(#2da8be, 35%); - -@import 'application'; -@import 'soapbox-light/diff'; - -.public-layout { - background: $gab-brand-default url("../images/neenster/fish.gif"); - - .brand { - filter: brightness(0%) invert(100%); - } - - .brand__tagline { - color: #fff; - } - - .header .nav-link { - color: #fff; - - &:hover, - &:focus, - &:active { - color: $gab-background-base-light; - } - } -} diff --git a/app/styles/soapbox-light.scss b/app/styles/soapbox-light.scss deleted file mode 100644 index cda61a4c0..000000000 --- a/app/styles/soapbox-light.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import 'soapbox-light/variables'; -@import 'application'; -@import 'soapbox-light/diff'; diff --git a/app/styles/soapbox/pro.scss b/app/styles/soapbox/pro.scss index a32ee1e63..cb2e18dec 100644 --- a/app/styles/soapbox/pro.scss +++ b/app/styles/soapbox/pro.scss @@ -1,29 +1,5 @@ .page--floral { background-image: url('../images/pro_bg/floral--light.svg'); } -body.theme-purple-dark, -body.theme-purple-contrast { +body.theme-dark { .page--floral { background-image: url('../images/pro_bg/floral--dark.svg'); } } - -body.theme-halloween { - .page--customization { - background-color: #904700; - - &::before { - background: radial-gradient(circle, transparent 0%, transparent 60%, #000 100%); - content: ""; - display: block; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-size: cover; - background-position: center; - width: 100%; - height: 100%; - pointer-events: none; - } - } - .page--floral { background-image: url('../images/pro_bg/floral--halloween.svg'); } -} From 4a2493a7e2356400dc9630a78b9d14f73cfeb2f7 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 18:44:20 -0500 Subject: [PATCH 20/46] Replace $primary-text-color --- app/soapbox/reducers/theme.js | 15 +++- app/styles/soapbox-light/diff.scss | 10 +-- app/styles/soapbox-light/variables.scss | 1 - app/styles/soapbox/about.scss | 10 +-- app/styles/soapbox/accounts.scss | 6 +- app/styles/soapbox/basics.scss | 2 +- app/styles/soapbox/components.scss | 76 +++++++++---------- .../soapbox/components/account-header.scss | 4 +- .../soapbox/components/compose-form.scss | 2 +- app/styles/soapbox/components/group-card.scss | 4 +- .../soapbox/components/group-detail.scss | 4 +- .../components/group-sidebar-panel.scss | 4 +- .../soapbox/components/hotkeys-modal.scss | 2 +- app/styles/soapbox/components/modal.scss | 4 +- app/styles/soapbox/components/user-panel.scss | 4 +- app/styles/soapbox/containers.scss | 16 ++-- app/styles/soapbox/dashboard.scss | 2 +- app/styles/soapbox/donations.scss | 4 +- app/styles/soapbox/footer.scss | 4 +- app/styles/soapbox/forms.scss | 34 ++++----- app/styles/soapbox/stream_entries.scss | 4 +- app/styles/soapbox/tables.scss | 2 +- app/styles/soapbox/variables.scss | 3 - app/styles/soapbox/widgets.scss | 10 +-- 24 files changed, 116 insertions(+), 111 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 122a1d769..606fdc06c 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -7,6 +7,17 @@ import { brightness, hue, convert } from 'chromatism'; const initialState = ImmutableMap(); +const modes = ImmutableMap({ + light: ImmutableMap({ + 'primary-text-color': '#000000', + 'primary-text-color-faint': 'rgba(0, 0, 0, 0.7)', + }), + dark: ImmutableMap({ + 'primary-text-color': '#ffffff', + 'primary-text-color-faint': 'rgba(255, 255, 255, 0.7)', + }), +}); + const cssrgba = (color, a) => { const { r, g, b } = convert(color).rgb; return `rgba(${[r, g, b, a].join(',')})`; @@ -18,14 +29,14 @@ const makeContrast = (percent, color, mode) => { }; export const generateTheme = (brandColor, mode) => { - return ImmutableMap({ + return modes.get(mode).merge(ImmutableMap({ 'brand-color': brandColor, 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, 'brand-color-faint': cssrgba(brandColor, 0.1), 'brand-color-med': cssrgba(brandColor, 0.2), 'highlight-text-color': makeContrast(5, brandColor, mode).hex, 'brand-color-hicontrast': makeContrast(15, brandColor, mode).hex, - }); + })); }; export const setTheme = themeData => { diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index 158291190..23a696b98 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -187,7 +187,7 @@ body { // Change the default color used for the text in an empty column or on the error column .empty-column-indicator, .error-column { - color: $primary-text-color; + color: var(--primary-text-color); background: $white; } @@ -210,12 +210,12 @@ body { .status.light { .status__content { - color: $primary-text-color; + color: var(--primary-text-color); } .display-name { strong { - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -226,7 +226,7 @@ body { .name { a { - color: $primary-text-color; + color: var(--primary-text-color); } } @@ -235,7 +235,7 @@ body { } .account__header__content { - color: $primary-text-color; + color: var(--primary-text-color); } } } diff --git a/app/styles/soapbox-light/variables.scss b/app/styles/soapbox-light/variables.scss index e405dcf66..9d9866ac6 100644 --- a/app/styles/soapbox-light/variables.scss +++ b/app/styles/soapbox-light/variables.scss @@ -22,7 +22,6 @@ $ui-primary-color: #9bcbed; $ui-secondary-color: $classic-base-color !default; $ui-highlight-color: #990099; -$primary-text-color: $black !default; $darker-text-color: $classic-base-color !default; $dark-text-color: #444b5d; $action-button-color: #606984; diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 65e0f2205..4fbeebff4 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -189,7 +189,7 @@ $small-breakpoint: 960px; font-family: $font-sans-serif, sans-serif; font-size: 16px; line-height: 28px; - color: $primary-text-color; + color: var(--primary-text-color); text-align: right; padding: 10px 15px; @@ -274,7 +274,7 @@ $small-breakpoint: 960px; a { display: block; - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: none; &:hover { @@ -586,7 +586,7 @@ $small-breakpoint: 960px; h1 { font-weight: 500; - color: $primary-text-color; + color: var(--primary-text-color); margin-bottom: 0; small { @@ -659,8 +659,6 @@ $small-breakpoint: 960px; } .public-layout { - $gab-background: $gab-background-base-dark !default; - position: relative; background-color: var(--brand-color); background-image: url('data:image/svg+xml;utf8,'); @@ -966,7 +964,7 @@ $small-breakpoint: 960px; .brand__tagline { display: block; width: 470px; - color: $primary-text-color; + color: var(--primary-text-color); font-size: 30px; line-height: 1.4; margin-top: 25px; diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index 76432801e..8b70a4678 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -78,7 +78,7 @@ strong { font-size: 15px; - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 500; overflow: hidden; text-overflow: ellipsis; @@ -108,7 +108,7 @@ .page, .gap { font-size: 14px; - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 500; display: inline-block; padding: 6px 10px; @@ -310,7 +310,7 @@ } strong { - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 700; } } diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 766f70fcc..4a2e1e190 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -165,7 +165,7 @@ button { } .explanation-box { - color: $primary-text-color; + color: var(--primary-text-color); padding: 15px 20px; font-size: 14px; background-color: var(--brand-color-faint); diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index a7de62edd..80b1384f2 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -8,7 +8,7 @@ border: 10px none; border-radius: 4px; box-sizing: border-box; - color: $primary-text-color; + color: var(--primary-text-color); cursor: pointer; display: inline-block; font-family: inherit; @@ -188,7 +188,7 @@ &.overlayed { box-sizing: content-box; background: rgba($base-overlay-background, 0.6); - color: rgba($primary-text-color, 0.7); + color: var(--primary-text-color-faint); border-radius: 4px; padding: 2px; @@ -372,7 +372,7 @@ overflow: hidden; text-overflow: ellipsis; padding-top: 2px; - color: $primary-text-color; + color: var(--primary-text-color); &:focus { outline: 0; @@ -592,7 +592,7 @@ } a.status__content__spoiler-link { - color: $primary-text-color; + color: var(--primary-text-color); background: $ui-primary-color; &:hover { @@ -756,7 +756,7 @@ .domain__domain-name { flex: 1 1 auto; display: block; - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: none; font-size: 14px; font-weight: 500; @@ -961,7 +961,7 @@ a .account__avatar { display: block; font-size: 15px; font-weight: 500; - color: $primary-text-color; + color: var(--primary-text-color); @each $lang in $cjk-langs { &:lang(#{$lang}) { @@ -998,7 +998,7 @@ a .account__avatar { .status__display-name, .account__display-name { strong { - color: $primary-text-color; + color: var(--primary-text-color); } } @@ -1044,7 +1044,7 @@ a.account__display-name { strong { font-size: 16px; - color: $primary-text-color; + color: var(--primary-text-color); } .display-name__account { @@ -1139,7 +1139,7 @@ a.account__display-name { text-decoration: none; &:hover { - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: underline; } } @@ -1678,13 +1678,13 @@ a.account__display-name { &__btn { display: block; text-align: left; - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: none; font-size: 15px; padding: 0 20px; &:hover { - color: darken($primary-text-color, 14%); + color: var(--primary-text-color-faint); span { text-decoration: underline; @@ -1949,7 +1949,7 @@ a.account__display-name { .column-link { background: var(--brand-color-med); - color: $primary-text-color; + color: var(--primary-text-color); display: block; font-size: 16px; padding: 15px; @@ -1973,7 +1973,7 @@ a.account__display-name { &:focus, &:active { background: transparent; - color: $primary-text-color; + color: var(--primary-text-color); } &.active { @@ -2098,7 +2098,7 @@ a.account__display-name { &:focus, &:active { - color: $primary-text-color; + color: var(--primary-text-color); border-bottom-color: var(--highlight-text-color); } @@ -2179,7 +2179,7 @@ a.account__display-name { &:hover, &:active, &:focus { - color: $primary-text-color; + color: var(--primary-text-color); } } @@ -2455,7 +2455,7 @@ a.status-card.compact:hover { } &.active { - color: $primary-text-color; + color: var(--primary-text-color); border-radius: 10px; background-color: var(--brand-color-faint); } @@ -2513,11 +2513,11 @@ a.status-card.compact:hover { &:hover {color: lighten($darker-text-color, 7%);} &.active { - color: $primary-text-color; + color: var(--primary-text-color); background: var(--brand-color-med); &:hover { - color: $primary-text-color; + color: var(--primary-text-color); background: var(--brand-color-med); } } @@ -2683,7 +2683,7 @@ a.status-card.compact:hover { .video-error-cover { align-items: center; background: $base-overlay-background; - color: $primary-text-color; + color: var(--primary-text-color); cursor: pointer; display: flex; flex-direction: column; @@ -2756,7 +2756,7 @@ a.status-card.compact:hover { background: rgba($base-overlay-background, 0.5); border-radius: 8px; padding: 8px 12px; - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 500; font-size: 14px; } @@ -2890,7 +2890,7 @@ a.status-card.compact:hover { } .relationship-tag { - color: $primary-text-color; + color: var(--primary-text-color); margin-bottom: 4px; display: block; vertical-align: top; @@ -3244,14 +3244,14 @@ a.status-card.compact:hover { &:hover, &.active { background: var(--brand-color); - color: $primary-text-color; + color: var(--primary-text-color); outline: 0; .privacy-dropdown__option__content { - color: $primary-text-color; + color: var(--primary-text-color); strong { - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -3299,7 +3299,7 @@ a.status-card.compact:hover { background: var(--brand-color); .icon-button { - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -3433,7 +3433,7 @@ a.status-card.compact:hover { .media-gallery__gifv__label { display: block; position: absolute; - color: $primary-text-color; + color: var(--primary-text-color); background: rgba($base-overlay-background, 0.5); bottom: 6px; left: 6px; @@ -3572,7 +3572,7 @@ a.status-card.compact:hover { &::before { content: 'GIF'; position: absolute; - color: $primary-text-color; + color: var(--primary-text-color); background: rgba($base-overlay-background, 0.5); bottom: 6px; left: 6px; @@ -3664,7 +3664,7 @@ a.status-card.compact:hover { .status__video-player-expand, .status__video-player-mute { - color: $primary-text-color; + color: var(--primary-text-color); opacity: 0.8; position: absolute; right: 4px; @@ -3673,7 +3673,7 @@ a.status-card.compact:hover { .status__video-player-spoiler { display: none; - color: $primary-text-color; + color: var(--primary-text-color); left: 4px; position: absolute; text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; @@ -4008,7 +4008,7 @@ a.status-card.compact:hover { .media-spoiler-video-play-icon { border-radius: 100px; - color: rgba($primary-text-color, 0.8); + color: var(--primary-text-color-faint); font-size: 36px; left: 50%; padding: 5px; @@ -4073,7 +4073,7 @@ a.status-card.compact:hover { position: relative; &.active { - color: $primary-text-color; + color: var(--primary-text-color); &::before, &::after { @@ -4262,7 +4262,7 @@ noscript { padding: 10px; font-family: $font-monospace, monospace; background: var(--brand-color-med); - color: $primary-text-color; + color: var(--primary-text-color); font-size: 14px; margin: 0; margin-bottom: 15px; @@ -4711,7 +4711,7 @@ noscript { &__label { flex: 1 1; - color: $primary-text-color; + color: var(--primary-text-color); font-size: 16px; font-weight: bold; line-height: 19px; @@ -4782,7 +4782,7 @@ noscript { margin-top: 6px; &__name { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 14px; font-weight: bold; line-height: 16px; @@ -4808,7 +4808,7 @@ noscript { } &__icon { - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -4969,7 +4969,7 @@ noscript { } span { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 15px; line-height: 1.25; } @@ -5017,7 +5017,7 @@ noscript { &__bio { display: block; flex: 1 1; - color: $primary-text-color; + color: var(--primary-text-color); margin: 15px 0; font-size: 15px; line-height: 1.25; @@ -5155,7 +5155,7 @@ noscript { } &__title-text { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 27px; font-weight: bold; line-height: 32px; diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index 77f3da9b2..28054339e 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -128,7 +128,7 @@ display: block; &:first-of-type { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 20px; font-weight: 800; line-height: 24px; @@ -148,7 +148,7 @@ &:hover, &.active { - border-bottom: 2px solid $primary-text-color; + border-bottom: 2px solid var(--primary-text-color); } &.score {border-bottom: 0 !important;} } diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index 42f8b0b80..c51f7a3e5 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -30,7 +30,7 @@ } .compose-form__warning { - color: $primary-text-color; + color: var(--primary-text-color); margin-bottom: 10px; background: $ui-primary-color; box-shadow: 0 2px 6px rgba($base-shadow-color, 0.3); diff --git a/app/styles/soapbox/components/group-card.scss b/app/styles/soapbox/components/group-card.scss index f3cee9223..567a170cb 100644 --- a/app/styles/soapbox/components/group-card.scss +++ b/app/styles/soapbox/components/group-card.scss @@ -47,7 +47,7 @@ padding: 15px; .group-card__title { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 16px; font-weight: bold; } @@ -60,7 +60,7 @@ } .group-card__description { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 14px; } } diff --git a/app/styles/soapbox/components/group-detail.scss b/app/styles/soapbox/components/group-detail.scss index 4d28c1800..43c798fb6 100644 --- a/app/styles/soapbox/components/group-detail.scss +++ b/app/styles/soapbox/components/group-detail.scss @@ -26,11 +26,11 @@ text-decoration: none; padding: 16px 22px; text-align: center; - color: $primary-text-color; + color: var(--primary-text-color); &:hover, &--active { - border-bottom: 2px solid $primary-text-color; + border-bottom: 2px solid var(--primary-text-color); } } diff --git a/app/styles/soapbox/components/group-sidebar-panel.scss b/app/styles/soapbox/components/group-sidebar-panel.scss index bbe96bdae..6b4fa681d 100644 --- a/app/styles/soapbox/components/group-sidebar-panel.scss +++ b/app/styles/soapbox/components/group-sidebar-panel.scss @@ -3,13 +3,13 @@ padding: 0 15px 15px; &__show-all { - color: $primary-text-color; + color: var(--primary-text-color); } } &__item { display: block; - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: none; margin-bottom: 15px; diff --git a/app/styles/soapbox/components/hotkeys-modal.scss b/app/styles/soapbox/components/hotkeys-modal.scss index 62e17521c..af5ef6cd8 100644 --- a/app/styles/soapbox/components/hotkeys-modal.scss +++ b/app/styles/soapbox/components/hotkeys-modal.scss @@ -27,7 +27,7 @@ display: block; padding-left: 10px; margin-bottom: 10px; - color: $primary-text-color; + color: var(--primary-text-color); font-size: 16px; font-weight: 600; } diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index e9aa559df..f855983e4 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -98,7 +98,7 @@ background: rgba($base-overlay-background, 0.5); box-sizing: border-box; border: 0; - color: $primary-text-color; + color: var(--primary-text-color); cursor: pointer; display: flex; align-items: center; @@ -158,7 +158,7 @@ } .media-modal__button { - background-color: $primary-text-color; + background-color: var(--primary-text-color); height: 12px; width: 12px; border-radius: 6px; diff --git a/app/styles/soapbox/components/user-panel.scss b/app/styles/soapbox/components/user-panel.scss index 98b610e59..63fcc31fa 100644 --- a/app/styles/soapbox/components/user-panel.scss +++ b/app/styles/soapbox/components/user-panel.scss @@ -43,7 +43,7 @@ &__account { a { text-decoration: none; - color: $primary-text-color; + color: var(--primary-text-color); } &__name { @@ -85,7 +85,7 @@ a { text-decoration: none; - color: $primary-text-color; + color: var(--primary-text-color); &:hover { opacity: 0.8; diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index a98f84f60..073bc216b 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -30,7 +30,7 @@ display: flex; justify-content: center; align-items: center; - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: none; outline: 0; padding: 12px 16px; @@ -329,7 +329,7 @@ font-size: 14px; font-weight: 600; text-decoration: none; - color: $primary-text-color; + color: var(--primary-text-color); white-space: nowrap; text-align: center; @@ -337,7 +337,7 @@ &:focus, &:active { text-decoration: underline; - color: $primary-text-color; + color: var(--primary-text-color); } &--hollow { @@ -574,7 +574,7 @@ h1 { font-size: 20px; line-height: 18px * 1.5; - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 500; overflow: hidden; white-space: nowrap; @@ -584,7 +584,7 @@ small { display: block; font-size: 14px; - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 400; overflow: hidden; text-overflow: ellipsis; @@ -695,7 +695,7 @@ font-weight: 500; font-size: 18px; margin-bottom: 5px; - color: $primary-text-color; + color: var(--primary-text-color); font-family: $font-display, sans-serif; } } @@ -744,7 +744,7 @@ strong { font-weight: 700; - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -801,7 +801,7 @@ .account__header__content { padding: 20px; padding-bottom: 0; - color: $primary-text-color; + color: var(--primary-text-color); } &__extra, diff --git a/app/styles/soapbox/dashboard.scss b/app/styles/soapbox/dashboard.scss index c92abd543..8b8654e0c 100644 --- a/app/styles/soapbox/dashboard.scss +++ b/app/styles/soapbox/dashboard.scss @@ -36,7 +36,7 @@ font-weight: 500; font-size: 24px; line-height: 21px; - color: $primary-text-color; + color: var(--primary-text-color); font-family: $font-display, sans-serif; margin-bottom: 20px; line-height: 30px; diff --git a/app/styles/soapbox/donations.scss b/app/styles/soapbox/donations.scss index 56a6dc6dc..f9e63420a 100644 --- a/app/styles/soapbox/donations.scss +++ b/app/styles/soapbox/donations.scss @@ -20,7 +20,7 @@ &--active { background-color: var(--brand-color); - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -126,7 +126,7 @@ background: transparent; border: 0; margin: 0; - color: $primary-text-color; + color: var(--primary-text-color); appearance: textfield; &::-webkit-inner-spin-button, diff --git a/app/styles/soapbox/footer.scss b/app/styles/soapbox/footer.scss index bcc19f592..167595478 100644 --- a/app/styles/soapbox/footer.scss +++ b/app/styles/soapbox/footer.scss @@ -48,13 +48,13 @@ margin-right: auto; span { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 1.3rem; font-weight: 500; line-height: 1.5; &:last-of-type { - color: darken($primary-text-color, 20%); + color: var(--primary-text-color-faint); } } } diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index 3ecae3ccd..b55ae17f8 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -49,7 +49,7 @@ code { font-family: inherit; font-size: 14px; padding-top: 5px; - color: $primary-text-color; + color: var(--primary-text-color); display: block; width: auto; } @@ -148,7 +148,7 @@ code { & > label { font-family: inherit; font-size: 14px; - color: $primary-text-color; + color: var(--primary-text-color); font-weight: 500; min-width: 150px; flex: 0 0 auto; @@ -170,7 +170,7 @@ code { .label_input > label { font-family: inherit; font-size: 14px; - color: $primary-text-color; + color: var(--primary-text-color); display: block; margin-bottom: 8px; word-wrap: break-word; @@ -192,7 +192,7 @@ code { & > label { font-family: inherit; font-size: 16px; - color: $primary-text-color; + color: var(--primary-text-color); display: block; font-weight: 500; padding-top: 5px; @@ -266,7 +266,7 @@ code { margin-bottom: 5px; font-family: inherit; font-size: 14px; - color: $primary-text-color; + color: var(--primary-text-color); display: block; width: auto; } @@ -276,7 +276,7 @@ code { label { font-family: inherit; font-size: 14px; - color: $primary-text-color; + color: var(--primary-text-color); display: inline-block; width: auto; position: relative; @@ -300,8 +300,8 @@ code { input[type=email], input[type=password], textarea { - color: rgba($primary-text-color, 0.5); - border-color: rgba($primary-text-color, 0.5); + color: var(--primary-text-color-faint); + border-color: var(--primary-text-color-faint); } } @@ -312,7 +312,7 @@ code { textarea { box-sizing: border-box; font-size: 16px; - color: $primary-text-color; + color: var(--primary-text-color); display: block; width: 100%; outline: 0; @@ -390,7 +390,7 @@ code { border: 0; border-radius: 4px; background: var(--brand-color); - color: $primary-text-color; + color: var(--primary-text-color); font-size: 18px; line-height: inherit; height: auto; @@ -440,7 +440,7 @@ code { appearance: none; box-sizing: border-box; font-size: 16px; - color: $primary-text-color; + color: var(--primary-text-color); display: block; width: 100%; outline: 0; @@ -509,7 +509,7 @@ code { &.rich-formatting { &, p { - color: $primary-text-color; + color: var(--primary-text-color); } } } @@ -550,7 +550,7 @@ code { text-decoration: none; &:hover { - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: underline; } } @@ -568,7 +568,7 @@ code { padding: 10px; font-family: $font-monospace, monospace; background: var(--brand-color-med); - color: $primary-text-color; + color: var(--primary-text-color); font-size: 14px; margin: 0; @@ -719,7 +719,7 @@ code { .warning { box-sizing: border-box; background: rgba($error-value-color, 0.5); - color: $primary-text-color; + color: var(--primary-text-color); text-shadow: 1px 1px 0 rgba($base-shadow-color, 0.3); box-shadow: 0 2px 6px rgba($base-shadow-color, 0.4); border-radius: 4px; @@ -727,7 +727,7 @@ code { margin-bottom: 15px; a { - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: underline; &:hover, @@ -787,7 +787,7 @@ code { h4 { font-size: 16px; - color: $primary-text-color; + color: var(--primary-text-color); text-align: center; margin-bottom: 20px; border: 0; diff --git a/app/styles/soapbox/stream_entries.scss b/app/styles/soapbox/stream_entries.scss index 9ec7d1bfe..ab098eef3 100644 --- a/app/styles/soapbox/stream_entries.scss +++ b/app/styles/soapbox/stream_entries.scss @@ -77,7 +77,7 @@ flex: 0 auto; font-size: 14px; background: var(--brand-color); - color: $primary-text-color; + color: var(--primary-text-color); text-transform: none; line-height: 36px; height: auto; @@ -89,7 +89,7 @@ height: auto; vertical-align: middle; margin-right: 5px; - fill: $primary-text-color; + fill: var(--primary-text-color); } &:active, diff --git a/app/styles/soapbox/tables.scss b/app/styles/soapbox/tables.scss index f46f89af7..41ed16dc6 100644 --- a/app/styles/soapbox/tables.scss +++ b/app/styles/soapbox/tables.scss @@ -113,7 +113,7 @@ a.table-action-link { font-weight: 500; &:hover { - color: $primary-text-color; + color: var(--primary-text-color); } i.fa { diff --git a/app/styles/soapbox/variables.scss b/app/styles/soapbox/variables.scss index 9a7ab1255..0b82dcbcc 100644 --- a/app/styles/soapbox/variables.scss +++ b/app/styles/soapbox/variables.scss @@ -9,7 +9,6 @@ // STATIC COLORS $gab-brand-default: #990099 !default; -$gab-alert-red: #e600e6 !default; $gab-secondary-text: #999 !default; $gab-text-highlight: #e600e6 !default; $gab-small-cta-primary: #607cf5 !default; @@ -72,7 +71,6 @@ $classic-highlight-color: $gab-text-highlight; // Variables for defaults in UI $base-shadow-color: $black !default; $base-overlay-background: $black !default; -$base-border-color: $white !default; $simple-background-color: $white !default; $valid-value-color: $success-green !default; $error-value-color: $error-red !default; @@ -89,7 +87,6 @@ $nav-ui-highlight-color: $gab-text-highlight !default; $nav-ui-search-bg-color: darken($nav-ui-highlight-color, 52%) !default; // Variables for texts -$primary-text-color: $white !default; $darker-text-color: $gab-secondary-text !default; $dark-text-color: $ui-base-lighter-color !default; $secondary-text-color: $ui-secondary-color !default; diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index e504a5368..704cd0d97 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -142,7 +142,7 @@ margin-top: 10px; a { - color: $primary-text-color; + color: var(--primary-text-color); text-decoration: none; } } @@ -237,7 +237,7 @@ margin: 10px 0; h1 { - color: $primary-text-color; + color: var(--primary-text-color); font-size: 36px; line-height: 1.1; font-weight: 700; @@ -303,7 +303,7 @@ flex: 1 1 auto; font-size: 18px; font-weight: 700; - color: $primary-text-color; + color: var(--primary-text-color); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -325,7 +325,7 @@ &, .fa, small { - color: $primary-text-color; + color: var(--primary-text-color); } } @@ -407,7 +407,7 @@ text-align: center; font-size: 15px; font-weight: 500; - color: $primary-text-color; + color: var(--primary-text-color); small { display: block; From 73e2649530eb62dfbc0e832524f71fd3a8f45c18 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 18:49:48 -0500 Subject: [PATCH 21/46] Delete $black and $white --- app/styles/soapbox-light/diff.scss | 26 ++++++++++++------------ app/styles/soapbox-light/variables.scss | 10 +++------ app/styles/soapbox/about.scss | 2 +- app/styles/soapbox/accessibility.scss | 2 +- app/styles/soapbox/basics.scss | 2 +- app/styles/soapbox/components.scss | 16 +++++++-------- app/styles/soapbox/components/modal.scss | 4 ++-- app/styles/soapbox/variables.scss | 12 +++-------- 8 files changed, 32 insertions(+), 42 deletions(-) diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index 23a696b98..64aba8f99 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -8,7 +8,7 @@ body { // Change the colors of button texts .button { - color: $white; + color: #ffffff; &.button-alternative-2 { color: #000; @@ -18,7 +18,7 @@ body { // Change default background colors of columns .column { article { - background: $white; + background: #ffffff; } } @@ -27,15 +27,15 @@ body { } .drawer__inner__soapbox { - background: var(--brand-color-med) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; + background: var(--brand-color-med) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; } // Change the colors used in compose-form .compose-form { .compose-form__modifiers { .compose-form__upload-description input { - color: lighten($white, 7%); - &::placeholder {color: lighten($white, 7%);} + color: lighten(#ffffff, 7%); + &::placeholder {color: lighten(#ffffff, 7%);} } } @@ -120,7 +120,7 @@ body { .simple_form .block-button, .simple_form .button, .simple_form button { - color: $white; + color: #ffffff; } .dropdown-menu__separator { @@ -161,11 +161,11 @@ body { } .display-case__case { - background: $white; + background: #ffffff; } .embed-modal .embed-modal__container .embed-modal__html { - background: $white; + background: #ffffff; &:focus { background: darken($ui-base-color, 6%); @@ -188,7 +188,7 @@ body { .empty-column-indicator, .error-column { color: var(--primary-text-color); - background: $white; + background: #ffffff; } // Change the default colors used on some parts of the profile pages @@ -267,10 +267,10 @@ body { } .button.logo-button { - color: $white; + color: #ffffff; svg { - fill: $white; + fill: #ffffff; } } @@ -294,7 +294,7 @@ body { &__name { h1, h1 small { - color: $white; + color: #ffffff; } } } @@ -302,7 +302,7 @@ body { } .account__section-headline a.active::after { - border-color: transparent transparent $white; + border-color: transparent transparent #ffffff; } .hero-widget, diff --git a/app/styles/soapbox-light/variables.scss b/app/styles/soapbox-light/variables.scss index 9d9866ac6..79173d7bd 100644 --- a/app/styles/soapbox-light/variables.scss +++ b/app/styles/soapbox-light/variables.scss @@ -1,10 +1,6 @@ $light-theme: true; $gab-background: #f6f2f6; -// Dependent colors -$black: #000000; -$white: #ffffff; - $classic-base-color: #282c37; $classic-primary-color: #9baec8; $classic-secondary-color: lighten(#be9bc8, 30%); @@ -13,7 +9,7 @@ $classic-highlight-color: #2b90d9; // Differences $success-green: #3c754d; -$base-overlay-background: $white !default; +$base-overlay-background: #ffffff !default; $valid-value-color: $success-green !default; $ui-base-color: $classic-secondary-color !default; @@ -26,12 +22,12 @@ $darker-text-color: $classic-base-color !default; $dark-text-color: #444b5d; $action-button-color: #606984; -$inverted-text-color: $black !default; +$inverted-text-color: #000000 !default; $lighter-text-color: $classic-base-color !default; $light-text-color: #444b5d; //Newly added colors -$account-background-color: $white !default; +$account-background-color: #ffffff !default; //Invert darkened and lightened colors @function darken($color, $amount) { diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 4fbeebff4..e931ff00e 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -551,7 +551,7 @@ $small-breakpoint: 960px; box-sizing: border-box; background: var(--brand-color-med); border-radius: 4px; - box-shadow: 0 0 6px rgba($black, 0.1); + box-shadow: 0 0 6px rgba(#000000, 0.1); } &__mascot { diff --git a/app/styles/soapbox/accessibility.scss b/app/styles/soapbox/accessibility.scss index d33806c84..378669e09 100644 --- a/app/styles/soapbox/accessibility.scss +++ b/app/styles/soapbox/accessibility.scss @@ -1,7 +1,7 @@ $black-emojis: '8ball' 'ant' 'back' 'black_circle' 'black_heart' 'black_large_square' 'black_medium_small_square' 'black_medium_square' 'black_nib' 'black_small_square' 'bomb' 'bowling' 'bust_in_silhouette' 'busts_in_silhouette' 'camera' 'camera_with_flash' 'clubs' 'copyright' 'curly_loop' 'currency_exchange' 'dark_sunglasses' 'eight_pointed_black_star' 'electric_plug' 'end' 'female-guard' 'film_projector' 'fried_egg' 'gorilla' 'guardsman' 'heavy_check_mark' 'heavy_division_sign' 'heavy_dollar_sign' 'heavy_minus_sign' 'heavy_multiplication_x' 'heavy_plus_sign' 'hocho' 'hole' 'joystick' 'kaaba' 'lower_left_ballpoint_pen' 'lower_left_fountain_pen' 'male-guard' 'microphone' 'mortar_board' 'movie_camera' 'musical_score' 'on' 'registered' 'soon' 'spades' 'speaking_head_in_silhouette' 'spider' 'telephone_receiver' 'tm' 'top' 'tophat' 'turkey' 'vhs' 'video_camera' 'video_game' 'water_buffalo' 'waving_black_flag' 'wavy_dash'; %white-emoji-outline { - filter: drop-shadow(1px 1px 0 $white) drop-shadow(-1px 1px 0 $white) drop-shadow(1px -1px 0 $white) drop-shadow(-1px -1px 0 $white); + filter: drop-shadow(1px 1px 0 #ffffff) drop-shadow(-1px 1px 0 #ffffff) drop-shadow(1px -1px 0 #ffffff) drop-shadow(-1px -1px 0 #ffffff); transform: scale(.71); } diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 4a2e1e190..83731fe6c 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -161,7 +161,7 @@ button { ::selection { background: var(--brand-color); - color: $white; + color: #ffffff; } .explanation-box { diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 80b1384f2..ffd098048 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -3837,12 +3837,12 @@ a.status-card.compact:hover { padding: 2px 10px; font-size: 16px; border: 0; - color: rgba($white, 0.75); + color: rgba(#ffffff, 0.75); &:active, &:hover, &:focus { - color: $white; + color: #ffffff; } } } @@ -3855,7 +3855,7 @@ a.status-card.compact:hover { } &__time-current { - color: $white; + color: #ffffff; margin-left: 60px; } @@ -3866,7 +3866,7 @@ a.status-card.compact:hover { &__time-sep, &__time-total { - color: $white; + color: #ffffff; } &__volume { @@ -3877,7 +3877,7 @@ a.status-card.compact:hover { &::before { content: ""; width: 50px; - background: rgba($white, 0.35); + background: rgba(#ffffff, 0.35); border-radius: 4px; display: block; position: absolute; @@ -3918,7 +3918,7 @@ a.status-card.compact:hover { text-decoration: none; font-size: 14px; font-weight: 500; - color: $white; + color: #ffffff; &:hover, &:active, @@ -3936,7 +3936,7 @@ a.status-card.compact:hover { &::before { content: ""; width: 100%; - background: rgba($white, 0.35); + background: rgba(#ffffff, 0.35); border-radius: 4px; display: block; position: absolute; @@ -3955,7 +3955,7 @@ a.status-card.compact:hover { } &__buffer { - background: rgba($white, 0.2); + background: rgba(#ffffff, 0.2); } &__handle { diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index f855983e4..3c9587fa6 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -340,7 +340,7 @@ .actions-modal { .status { - background: $white; + background: #ffffff; border-bottom-color: $ui-secondary-color; padding-top: 10px; padding-bottom: 10px; @@ -465,7 +465,7 @@ width: 100%; margin: 0; color: $inverted-text-color; - background: $white; + background: #ffffff; padding: 10px; font-family: inherit; font-size: 14px; diff --git a/app/styles/soapbox/variables.scss b/app/styles/soapbox/variables.scss index 0b82dcbcc..e8f32439c 100644 --- a/app/styles/soapbox/variables.scss +++ b/app/styles/soapbox/variables.scss @@ -51,12 +51,6 @@ $nav-breakpoint-4: 375px; // Commonly used web colors -// We certainly don't need variables for white and black. -// you can declare color: white; color: black; or #fff; #000; -$black: #000000; // Black -$white: #ffffff; // White - - $success-green: #79bd9a !default; // Padua $error-red: #df405a !default; // Cerise $warning-red: #ff5050 !default; // Sunset Orange @@ -69,9 +63,9 @@ $classic-secondary-color: $gab-placeholder-accent; $classic-highlight-color: $gab-text-highlight; // Variables for defaults in UI -$base-shadow-color: $black !default; -$base-overlay-background: $black !default; -$simple-background-color: $white !default; +$base-shadow-color: #000000 !default; +$base-overlay-background: #000000 !default; +$simple-background-color: #ffffff !default; $valid-value-color: $success-green !default; $error-value-color: $error-red !default; From 55c958c7adcd5bd6e7e96fa5a35ca2a64111c907 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 19:22:08 -0500 Subject: [PATCH 22/46] Homepage style improvements --- app/soapbox/features/about/index.js | 2 +- .../components/registration_form.js | 112 +++++++++--------- app/styles/soapbox/about.scss | 11 ++ app/styles/soapbox/components.scss | 2 +- app/styles/soapbox/containers.scss | 6 +- app/styles/soapbox/footer.scss | 11 +- app/styles/soapbox/forms.scss | 11 +- 7 files changed, 78 insertions(+), 77 deletions(-) diff --git a/app/soapbox/features/about/index.js b/app/soapbox/features/about/index.js index 89d952f72..de2475eac 100644 --- a/app/soapbox/features/about/index.js +++ b/app/soapbox/features/about/index.js @@ -33,7 +33,7 @@ class AboutPage extends ImmutablePureComponent { render() { return (

-
+
- -
-
-

With an account on {instance.get('title')} you'll be able to follow people on any server in the fediverse.

-
- - - - -
- +
+
+

With an account on {instance.get('title')} you'll be able to follow people on any server in the fediverse.

+
+ -
- I agree to the Terms of Service.} - name='agreement' - onChange={this.onCheckboxChange} - required - /> -
- -
- -
+ + + +
+ +
+ I agree to the Terms of Service.} + name='agreement' + onChange={this.onCheckboxChange} + required + /> +
+ +
+
-
- -
+
+ + ); } diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index e931ff00e..6e081bc0f 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -729,6 +729,13 @@ $small-breakpoint: 960px; &--right { margin-left: auto; width: 395px; + background-color: #fff; + border-radius: 6px; + + .simple_form { + padding: 20px; + background-color: var(--brand-color-faint); + } } @media (min-width: 767px) and (max-width: 1024px) { @@ -1005,3 +1012,7 @@ $small-breakpoint: 960px; .public-layout pre.canary { white-space: pre-wrap; } + +.about-page { + background: var(--brand-color-faint); +} diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index ffd098048..ac420cfd3 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -53,7 +53,7 @@ &:disabled, &.disabled { - background-color: $ui-primary-color; + background-color: var(--brand-color-med); cursor: default; } diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index 073bc216b..030c17940 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -203,6 +203,8 @@ .content { display: block; margin: 40px 0; + background: #fff; + border-radius: 6px; @media screen and (max-width: 767px) { margin-top: 0; @@ -270,10 +272,12 @@ position: absolute; top: 30px; left: 160px; + border-radius: 4px; + background: #fff; + overflow: hidden; a { padding: 4px; - border-radius: 4px; background-color: var(--brand-color-med); } } diff --git a/app/styles/soapbox/footer.scss b/app/styles/soapbox/footer.scss index 167595478..1a2b2f578 100644 --- a/app/styles/soapbox/footer.scss +++ b/app/styles/soapbox/footer.scss @@ -6,8 +6,8 @@ justify-content: center; align-items: center; margin-top: auto; - background-color: lighten($ui-base-color, 5%); - border-top: darken($ui-base-color, 10%); + color: #fff; + background-color: rgba(0, 0, 0, 0.15); @media screen and (max-width: 1024px) { padding: 40px 20px; @@ -48,14 +48,9 @@ margin-right: auto; span { - color: var(--primary-text-color); font-size: 1.3rem; font-weight: 500; line-height: 1.5; - - &:last-of-type { - color: var(--primary-text-color-faint); - } } } @@ -67,7 +62,7 @@ li { a { text-decoration: none; - color: lighten($ui-base-color, 34%); + color: #fff; font-size: 1.3rem; font-weight: 500; line-height: 1.5; diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index b55ae17f8..5bbf634cf 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -409,17 +409,10 @@ code { margin-right: 0; } - &:hover { - background-color: lighten($ui-highlight-color, 5%); - } - + &:hover, &:active, &:focus { - background-color: darken($ui-highlight-color, 5%); - } - - &:disabled:hover { - background-color: $ui-primary-color; + background-color: var(--brand-color-hicontrast); } &.negative { From 97ba4b005d49681ec7dfd39a032f8d30f40dff9a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 19:38:07 -0500 Subject: [PATCH 23/46] Fix IconButton centering issues --- app/soapbox/containers/soapbox.js | 2 +- app/styles/soapbox/components.scss | 6 ------ app/styles/soapbox/components/account-header.scss | 4 ++++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index bac0982d8..8f568a51c 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -76,7 +76,7 @@ class SoapboxMount extends React.PureComponent { }; componentDidMount() { - this.props.dispatch(generateTheme('#1ca82b', 'light')); + this.props.dispatch(generateTheme('#0482d8', 'light')); } render() { diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index ac420cfd3..9b289b1a1 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -127,12 +127,6 @@ cursor: pointer; transition: color 100ms ease-in; - > div { - display: inline-flex; - align-items: center; - justify-content: center; - } - i.fa { margin: 0; } diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index 28054339e..1626963ef 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -103,6 +103,10 @@ border-radius: 4px; box-sizing: content-box; padding: 2px; + + > div { + line-height: 31px !important; + } } .button { margin-right: 10px; } From d12bc38112848285155db3e213323da0ea827763 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 21:05:00 -0500 Subject: [PATCH 24/46] Dark theme improvements --- app/soapbox/containers/soapbox.js | 2 +- app/soapbox/reducers/theme.js | 4 + app/styles/soapbox-light/diff.scss | 803 +++++++++--------- app/styles/soapbox/_mixins.scss | 17 +- app/styles/soapbox/about.scss | 40 +- app/styles/soapbox/accounts.scss | 12 +- app/styles/soapbox/basics.scss | 6 +- app/styles/soapbox/compact_header.scss | 4 +- app/styles/soapbox/components.scss | 143 ++-- .../soapbox/components/account-header.scss | 4 +- .../soapbox/components/compose-form.scss | 10 +- .../soapbox/components/detailed-status.scss | 4 +- .../soapbox/components/dropdown-menu.scss | 18 +- .../soapbox/components/emoji-reacts.scss | 4 +- app/styles/soapbox/components/group-card.scss | 2 +- app/styles/soapbox/components/group-form.scss | 2 +- .../components/group-sidebar-panel.scss | 2 +- app/styles/soapbox/components/modal.scss | 8 +- app/styles/soapbox/components/user-panel.scss | 13 +- app/styles/soapbox/containers.scss | 16 +- app/styles/soapbox/dashboard.scss | 2 +- app/styles/soapbox/footer.scss | 2 +- app/styles/soapbox/forms.scss | 20 +- app/styles/soapbox/introduction.scss | 2 +- app/styles/soapbox/stream_entries.scss | 2 +- app/styles/soapbox/tables.scss | 2 +- app/styles/soapbox/variables.scss | 1 - app/styles/soapbox/widgets.scss | 26 +- 28 files changed, 569 insertions(+), 602 deletions(-) diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index 8f568a51c..1b4a6ab3c 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -76,7 +76,7 @@ class SoapboxMount extends React.PureComponent { }; componentDidMount() { - this.props.dispatch(generateTheme('#0482d8', 'light')); + this.props.dispatch(generateTheme('#bb0000', 'light')); } render() { diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 606fdc06c..233aa74b3 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -11,10 +11,14 @@ const modes = ImmutableMap({ light: ImmutableMap({ 'primary-text-color': '#000000', 'primary-text-color-faint': 'rgba(0, 0, 0, 0.7)', + 'background-color': '#f2f2f2', + 'foreground-color': '#ffffff', }), dark: ImmutableMap({ 'primary-text-color': '#ffffff', 'primary-text-color-faint': 'rgba(255, 255, 255, 0.7)', + 'background-color': '#333333', + 'foreground-color': '#222222', }), }); diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index 64aba8f99..ecfd000bd 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -1,419 +1,384 @@ -// Notes! -// Sass color functions, "darken" and "lighten" are automatically replaced. - -body { - color: $gab-default-text-light; - background-color: $gab-background; -} - -// Change the colors of button texts -.button { - color: #ffffff; - - &.button-alternative-2 { - color: #000; - } -} - -// Change default background colors of columns -.column { - article { - background: #ffffff; - } -} - -.drawer__inner { - background: var(--brand-color-med); -} - -.drawer__inner__soapbox { - background: var(--brand-color-med) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; -} - -// Change the colors used in compose-form -.compose-form { - .compose-form__modifiers { - .compose-form__upload-description input { - color: lighten(#ffffff, 7%); - &::placeholder {color: lighten(#ffffff, 7%);} - } - } - - .autosuggest-textarea__suggestions { - background: darken($ui-base-color, 6%); - } - - .autosuggest-textarea__suggestions__item { - &:hover, - &:focus, - &:active, - &.selected { - background: var(--brand-color-faint); - } - } -} - -.emoji-mart-bar { - border-color: var(--brand-color-faint); - - &:first-child { - background: darken($ui-base-color, 6%); - } -} - -.emoji-mart-search input { - background: rgba($ui-base-color, 0.3); - border-color: var(--brand-color-med); -} - -// Change the background colors of statuses -.focusable:focus { - background: var(--brand-color-faint); -} - -.status.status-direct { - background: var(--brand-color-faint); -} - -.focusable:focus .status.status-direct { - background: var(--brand-color-med); -} - -// Change the background colors of status__content__spoiler-link -.reply-indicator__content .status__content__spoiler-link, -.status__content .status__content__spoiler-link { - background: $ui-base-lighter-color; - - &:hover { - background: lighten($ui-base-lighter-color, 6%); - } -} - -// Change the background colors of media and video spoilers -.media-spoiler, -.video-player__spoiler { - background: var(--brand-color-med); -} - -// Change the colors used in the dropdown menu -.dropdown-menu { - &__item { - a { - color: $darker-text-color; - } - } -} - -// Change the text colors on inverted background -.privacy-dropdown__option.active .privacy-dropdown__option__content, -.privacy-dropdown__option.active .privacy-dropdown__option__content strong, -.privacy-dropdown__option:hover .privacy-dropdown__option__content, -.privacy-dropdown__option:hover .privacy-dropdown__option__content strong, -.actions-modal ul li:not(:empty) a.active, -.actions-modal ul li:not(:empty) a.active button, -.actions-modal ul li:not(:empty) a:active, -.actions-modal ul li:not(:empty) a:active button, -.actions-modal ul li:not(:empty) a:focus, -.actions-modal ul li:not(:empty) a:focus button, -.actions-modal ul li:not(:empty) a:hover, -.actions-modal ul li:not(:empty) a:hover button, -.simple_form .block-button, -.simple_form .button, -.simple_form button { - color: #ffffff; -} - -.dropdown-menu__separator { - border-bottom-color: var(--brand-color-med); -} - -// Change the background colors of modals -.actions-modal, -.boost-modal, -.confirmation-modal, -.mute-modal, -.report-modal, -.error-modal, -.onboarding-modal { - background: var(--brand-color-med); -} - -.embed-modal { - background: #333; - color: #fff; -} - -.boost-modal__action-bar, -.confirmation-modal__action-bar, -.mute-modal__action-bar, -.onboarding-modal__paginator, -.error-modal__footer { - background: darken($ui-base-color, 6%); - - .onboarding-modal__nav, - .error-modal__nav { - &:hover, - &:focus, - &:active { - background-color: darken($ui-base-color, 12%); - } - } -} - -.display-case__case { - background: #ffffff; -} - -.embed-modal .embed-modal__container .embed-modal__html { - background: #ffffff; - - &:focus { - background: darken($ui-base-color, 6%); - } -} - -.react-toggle-track { - background: $ui-secondary-color; -} - -.react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { - background: darken($ui-secondary-color, 10%); -} - -.react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { - background: lighten($gab-brand-default, 10%); -} - -// Change the default color used for the text in an empty column or on the error column -.empty-column-indicator, -.error-column { - color: var(--primary-text-color); - background: #ffffff; -} - -// Change the default colors used on some parts of the profile pages -.activity-stream-tabs { - background: $account-background-color; - border-bottom-color: var(--brand-color-med); -} - -.activity-stream { - .entry { - background: $account-background-color; - - .detailed-status.light, - .more.light, - .status.light { - border-bottom-color: var(--brand-color-med); - } - } - - .status.light { - .status__content { - color: var(--primary-text-color); - } - - .display-name { - strong { - color: var(--primary-text-color); - } - } - } -} - -.accounts-grid { - .account-grid-card { - - .name { - a { - color: var(--primary-text-color); - } - } - - .username { - color: $darker-text-color; - } - - .account__header__content { - color: var(--primary-text-color); - } - } -} - -.simple_form, -.table-form { - .warning { - box-shadow: none; - background: rgba($error-red, 0.5); - text-shadow: none; - } -} - -.simple_form input[type="text"], -.simple_form input[type="number"], -.simple_form input[type="email"], -.simple_form input[type="password"], -.simple_form textarea { - border-color: var(--brand-color); - - &:hover { - border-color: var(--brand-color); - } -} - -.simple_form select, -.admin select.dropdown { - border-color: $gab-secondary-text; -} - -.button.logo-button { - color: #ffffff; - - svg { - fill: #ffffff; - } -} - -.public-layout { - .header, - .public-account-header, - .public-account-bio { - box-shadow: none; - } - - .public-account-header { - &__image { - background: var(--brand-color-med); - - &::after { - box-shadow: none; - } - } - - &__tabs { - &__name { - h1, - h1 small { - color: #ffffff; - } - } - } - } -} - -.account__section-headline a.active::after { - border-color: transparent transparent #ffffff; -} - -.hero-widget, -.box-widget, -.contact-widget, -.landing-page__information.contact-widget, -.moved-account-widget, -.memoriam-widget, -.activity-stream, -.nothing-here, -.directory__tag > a, -.directory__tag > div { - box-shadow: none; -} - -.btngroup__btn--active { - color: #fff; -} - -.promo-panel-item { - @include light-theme-shadow; - background: $gab-background-container-light; -} - -.column-header { - background: $gab-background-container-light; - color: $gab-default-text-light; -} - -.column-header__button { - color: $gab-default-text-light; - background: $gab-background-container-light; -} - -.column-header__collapsible-inner { - background: #e6e6e6; -} - -.wtf-panel { - @include light-theme-shadow; - background: $gab-background-container-light; -} - -.profile-info-panel .profile-info-panel-content span, -.profile-info-panel .profile-info-panel-content__name h1, -.profile-info-panel .profile-info-panel-content__name h1 span:first-of-type { - color: $gab-default-text-light; -} - -.group-card .group-card__header img { - background: $gab-background-container-light; -} - -.group .group__header { - background: $gab-background-container-light; -} - -.group .group__panel .group__panel__label { - background: $gab-background-container-light; -} - -.group .group__feed { - background: $gab-background-container-light; -} - -input[type='text'], -textarea { - &.standard { - @include input-placeholder($gab-secondary-text); - color: $gab-placeholder-accent; - border-color: $gab-secondary-text; - background: $gab-background-base-light; - } -} - - -.boost-modal, -.confirmation-modal, -.report-modal, -.actions-modal, -.mute-modal { - color: $gab-default-text-light; -} - -.report-modal__statuses { - .status__content, - .status__content p { - color: $gab-default-text-light; - } -} - -.user-panel__header { - background: darken($gab-background-container-light, 4%); -} - -.user-panel__profile .account__avatar { - border: 6px solid $gab-background-base-light; -} - -.user-panel__account__name { - color: $gab-default-text-light; -} - -.user-panel .user-panel-stats-item__value { - color: $gab-default-text-light; -} - -.poll__text { - color: $gab-default-text-light; -} - -.fa-site-icon::before { - filter: grayscale(100%) invert(0); -} +// // Notes! +// // Sass color functions, "darken" and "lighten" are automatically replaced. +// +// // Change the colors of button texts +// .button { +// color: #ffffff; +// +// &.button-alternative-2 { +// color: #000; +// } +// } +// +// .drawer__inner { +// background: var(--brand-color-med); +// } +// +// .drawer__inner__soapbox { +// background: var(--brand-color-med) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; +// } +// +// // Change the colors used in compose-form +// .compose-form { +// .compose-form__modifiers { +// .compose-form__upload-description input { +// color: lighten(#ffffff, 7%); +// &::placeholder {color: lighten(#ffffff, 7%);} +// } +// } +// +// .autosuggest-textarea__suggestions { +// background: darken($ui-base-color, 6%); +// } +// +// .autosuggest-textarea__suggestions__item { +// &:hover, +// &:focus, +// &:active, +// &.selected { +// background: var(--brand-color-faint); +// } +// } +// } +// +// .emoji-mart-bar { +// border-color: var(--brand-color-faint); +// +// &:first-child { +// background: darken($ui-base-color, 6%); +// } +// } +// +// .emoji-mart-search input { +// background: rgba($ui-base-color, 0.3); +// border-color: var(--brand-color-med); +// } +// +// // Change the background colors of statuses +// .focusable:focus { +// background: var(--brand-color-faint); +// } +// +// .status.status-direct { +// background: var(--brand-color-faint); +// } +// +// .focusable:focus .status.status-direct { +// background: var(--brand-color-med); +// } +// +// // Change the background colors of status__content__spoiler-link +// .reply-indicator__content .status__content__spoiler-link, +// .status__content .status__content__spoiler-link { +// background: $ui-base-lighter-color; +// +// &:hover { +// background: lighten($ui-base-lighter-color, 6%); +// } +// } +// +// // Change the background colors of media and video spoilers +// .media-spoiler, +// .video-player__spoiler { +// background: var(--brand-color-med); +// } +// +// // Change the colors used in the dropdown menu +// .dropdown-menu { +// &__item { +// a { +// color: var(--primary-color-faint); +// } +// } +// } +// +// // Change the text colors on inverted background +// .privacy-dropdown__option.active .privacy-dropdown__option__content, +// .privacy-dropdown__option.active .privacy-dropdown__option__content strong, +// .privacy-dropdown__option:hover .privacy-dropdown__option__content, +// .privacy-dropdown__option:hover .privacy-dropdown__option__content strong, +// .actions-modal ul li:not(:empty) a.active, +// .actions-modal ul li:not(:empty) a.active button, +// .actions-modal ul li:not(:empty) a:active, +// .actions-modal ul li:not(:empty) a:active button, +// .actions-modal ul li:not(:empty) a:focus, +// .actions-modal ul li:not(:empty) a:focus button, +// .actions-modal ul li:not(:empty) a:hover, +// .actions-modal ul li:not(:empty) a:hover button, +// .simple_form .block-button, +// .simple_form .button, +// .simple_form button { +// color: #ffffff; +// } +// +// .dropdown-menu__separator { +// border-bottom-color: var(--brand-color-med); +// } +// +// // Change the background colors of modals +// .actions-modal, +// .boost-modal, +// .confirmation-modal, +// .mute-modal, +// .report-modal, +// .error-modal, +// .onboarding-modal { +// background: var(--brand-color-med); +// } +// +// .embed-modal { +// background: #333; +// color: #fff; +// } +// +// .boost-modal__action-bar, +// .confirmation-modal__action-bar, +// .mute-modal__action-bar, +// .onboarding-modal__paginator, +// .error-modal__footer { +// background: darken($ui-base-color, 6%); +// +// .onboarding-modal__nav, +// .error-modal__nav { +// &:hover, +// &:focus, +// &:active { +// background-color: darken($ui-base-color, 12%); +// } +// } +// } +// +// .display-case__case { +// background: #ffffff; +// } +// +// .embed-modal .embed-modal__container .embed-modal__html { +// background: #ffffff; +// +// &:focus { +// background: darken($ui-base-color, 6%); +// } +// } +// +// .react-toggle-track { +// background: $ui-secondary-color; +// } +// +// .react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { +// background: darken($ui-secondary-color, 10%); +// } +// +// .react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { +// background: lighten($gab-brand-default, 10%); +// } +// +// // Change the default color used for the text in an empty column or on the error column +// .empty-column-indicator, +// .error-column { +// color: var(--primary-text-color); +// background: #ffffff; +// } +// +// // Change the default colors used on some parts of the profile pages +// .activity-stream-tabs { +// background: $account-background-color; +// border-bottom-color: var(--brand-color-med); +// } +// +// .activity-stream { +// .entry { +// background: $account-background-color; +// +// .detailed-status.light, +// .more.light, +// .status.light { +// border-bottom-color: var(--brand-color-med); +// } +// } +// +// .status.light { +// .status__content { +// color: var(--primary-text-color); +// } +// +// .display-name { +// strong { +// color: var(--primary-text-color); +// } +// } +// } +// } +// +// .accounts-grid { +// .account-grid-card { +// +// .name { +// a { +// color: var(--primary-text-color); +// } +// } +// +// .username { +// color: var(--primary-color-faint); +// } +// +// .account__header__content { +// color: var(--primary-text-color); +// } +// } +// } +// +// .simple_form, +// .table-form { +// .warning { +// box-shadow: none; +// background: rgba($error-red, 0.5); +// text-shadow: none; +// } +// } +// +// .simple_form input[type="text"], +// .simple_form input[type="number"], +// .simple_form input[type="email"], +// .simple_form input[type="password"], +// .simple_form textarea { +// border-color: var(--brand-color); +// +// &:hover { +// border-color: var(--brand-color); +// } +// } +// +// .simple_form select, +// .admin select.dropdown { +// border-color: var(--primary-color-faint); +// } +// +// .button.logo-button { +// color: #ffffff; +// +// svg { +// fill: #ffffff; +// } +// } +// +// .public-layout { +// .header, +// .public-account-header, +// .public-account-bio { +// box-shadow: none; +// } +// +// .public-account-header { +// &__image { +// background: var(--brand-color-med); +// +// &::after { +// box-shadow: none; +// } +// } +// +// &__tabs { +// &__name { +// h1, +// h1 small { +// color: #ffffff; +// } +// } +// } +// } +// } +// +// .account__section-headline a.active::after { +// border-color: transparent transparent #ffffff; +// } +// +// .hero-widget, +// .box-widget, +// .contact-widget, +// .landing-page__information.contact-widget, +// .moved-account-widget, +// .memoriam-widget, +// .activity-stream, +// .nothing-here, +// .directory__tag > a, +// .directory__tag > div { +// box-shadow: none; +// } +// +// .btngroup__btn--active { +// color: #fff; +// } +// +// .wtf-panel { +// @include light-theme-shadow; +// background: var(--foreground-color); +// } +// +// .profile-info-panel .profile-info-panel-content span, +// .profile-info-panel .profile-info-panel-content__name h1, +// .profile-info-panel .profile-info-panel-content__name h1 span:first-of-type { +// color: $gab-default-text-light; +// } +// +// .group-card .group-card__header img { +// background: var(--foreground-color); +// } +// +// .group .group__header { +// background: var(--foreground-color); +// } +// +// .group .group__panel .group__panel__label { +// background: var(--foreground-color); +// } +// +// .group .group__feed { +// background: var(--foreground-color); +// } +// +// input[type='text'], +// textarea { +// &.standard { +// @include input-placeholder($gab-secondary-text); +// color: $gab-placeholder-accent; +// border-color: var(--primary-color-faint); +// background: $gab-background-base-light; +// } +// } +// +// +// .boost-modal, +// .confirmation-modal, +// .report-modal, +// .actions-modal, +// .mute-modal { +// color: $gab-default-text-light; +// } +// +// .report-modal__statuses { +// .status__content, +// .status__content p { +// color: $gab-default-text-light; +// } +// } +// +// .user-panel__header { +// background: darken($gab-background-container-light, 4%); +// } +// +// .user-panel__profile .account__avatar { +// border: 6px solid $gab-background-base-light; +// } +// +// .user-panel .user-panel-stats-item__value { +// color: $gab-default-text-light; +// } +// +// .poll__text { +// color: $gab-default-text-light; +// } +// +// .fa-site-icon::before { +// filter: grayscale(100%) invert(0); +// } diff --git a/app/styles/soapbox/_mixins.scss b/app/styles/soapbox/_mixins.scss index ef5a1f7b5..aceaae121 100644 --- a/app/styles/soapbox/_mixins.scss +++ b/app/styles/soapbox/_mixins.scss @@ -1,19 +1,15 @@ -// NEW GAB SPECIFIC MIXINS - // THEME MIXINS // standard container drop shadow -@mixin light-theme-shadow {box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1);} +@mixin light-theme-shadow { + box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1); +} // common properties for all standard containers @mixin gab-container-standards { + @include light-theme-shadow; border-radius: 10px; - background: $gab-background-container; - $light-theme: false !default; - @if $light-theme { - @include light-theme-shadow; - background: $gab-background-container-light; - } + background: var(--foreground-color); } // SHORTCUTS @@ -24,7 +20,6 @@ &:-moz-placeholder {color: $color;} } -// OLDER MIXINS @mixin avatar-radius { border-radius: 50%; background: transparent no-repeat; @@ -77,7 +72,7 @@ border: 1px solid $gab-placeholder-accent; padding: 8px 10px 17px; margin: 4px 0 0; - color: $gab-secondary-text; + color: var(--primary-color-faint); box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.5); h4 { diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index 6e081bc0f..e24368a53 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -21,7 +21,7 @@ $small-breakpoint: 960px; font-weight: 400; font-size: 16px; line-height: 30px; - color: $darker-text-color; + color: var(--primary-color-faint); max-width: 600px; padding: 15px 30px; @@ -47,7 +47,7 @@ $small-breakpoint: 960px; font-weight: 400; font-size: 16px; line-height: 30px; - color: $darker-text-color; + color: var(--primary-color-faint); a { color: var(--highlight-text-color); @@ -72,7 +72,7 @@ $small-breakpoint: 960px; margin-top: 2em; margin-bottom: 1.25em; font-weight: 500; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } hr + { @@ -200,7 +200,7 @@ $small-breakpoint: 960px; span { &:last-child { - color: $secondary-text-color; + color: var(--primary-text-color-faint); } } @@ -232,7 +232,7 @@ $small-breakpoint: 960px; font-size: 14px; line-height: 24px; font-weight: 500; - color: $darker-text-color; + color: var(--primary-color-faint); padding-bottom: 5px; margin-bottom: 15px; border-bottom: 1px solid var(--brand-color-faint); @@ -286,7 +286,7 @@ $small-breakpoint: 960px; .username { display: block; - color: $darker-text-color; + color: var(--primary-color-faint); } } } @@ -301,7 +301,7 @@ $small-breakpoint: 960px; font-size: 16px; line-height: 30px; margin-bottom: 12px; - color: $darker-text-color; + color: var(--primary-color-faint); a { color: var(--highlight-text-color); @@ -327,7 +327,7 @@ $small-breakpoint: 960px; line-height: 30px; font-weight: 500; margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); small { font-family: $font-sans-serif, sans-serif; @@ -344,7 +344,7 @@ $small-breakpoint: 960px; line-height: 26px; font-weight: 500; margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } h3 { @@ -353,7 +353,7 @@ $small-breakpoint: 960px; line-height: 24px; font-weight: 500; margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } h4 { @@ -362,7 +362,7 @@ $small-breakpoint: 960px; line-height: 24px; font-weight: 500; margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } h5 { @@ -371,7 +371,7 @@ $small-breakpoint: 960px; line-height: 24px; font-weight: 500; margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } h6 { @@ -380,7 +380,7 @@ $small-breakpoint: 960px; line-height: 24px; font-weight: 500; margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } ul, @@ -581,7 +581,7 @@ $small-breakpoint: 960px; } p a { - color: $secondary-text-color; + color: var(--primary-text-color-faint); } h1 { @@ -590,10 +590,10 @@ $small-breakpoint: 960px; margin-bottom: 0; small { - color: $darker-text-color; + color: var(--primary-color-faint); span { - color: $secondary-text-color; + color: var(--primary-text-color-faint); } } } @@ -812,7 +812,7 @@ $small-breakpoint: 960px; text-transform: uppercase; font-weight: 700; font-size: 13px; - color: $darker-text-color; + color: var(--primary-color-faint); } &__text { @@ -859,18 +859,18 @@ $small-breakpoint: 960px; span { font-size: 14px; - color: $darker-text-color; + color: var(--primary-color-faint); } } } .simple_form .user_agreement .label_input > label { font-weight: 400; - color: $darker-text-color; + color: var(--primary-color-faint); } .simple_form p.lead { - color: $darker-text-color; + color: var(--primary-color-faint); font-size: 15px; line-height: 20px; font-weight: 400; diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index 8b70a4678..b7d130979 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -87,7 +87,7 @@ span { display: block; font-size: 14px; - color: $gab-secondary-text; + color: var(--primary-color-faint); font-weight: 400; overflow: hidden; text-overflow: ellipsis; @@ -130,7 +130,7 @@ .older, .newer { text-transform: uppercase; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } .older { @@ -175,7 +175,7 @@ .nothing-here { background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); - color: $gab-secondary-text; + color: var(--primary-color-faint); font-size: 14px; font-weight: 500; text-align: center; @@ -251,13 +251,13 @@ font-weight: 500; width: 120px; flex: 0 0 auto; - color: $secondary-text-color; + color: var(--primary-text-color-faint); background: rgba(darken($ui-base-color, 8%), 0.5); } dd { flex: 1 1 auto; - color: $darker-text-color; + color: var(--primary-color-faint); } a { @@ -296,7 +296,7 @@ .pending-account { &__header { - color: $darker-text-color; + color: var(--primary-color-faint); a { color: $ui-secondary-color; diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 83731fe6c..454b35d79 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -23,8 +23,8 @@ body { font-feature-settings: "kern"; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: transparent; - color: #fff; - background-color: $gab-background-base; + color: var(--primary-text-color); + background-color: var(--background-color); &.system-font { // system-ui => standard property (Chrome/Android WebView 56+, Opera 43+, Safari 11+) @@ -95,7 +95,7 @@ body { &.error { position: absolute; text-align: center; - color: $darker-text-color; + color: var(--primary-color-faint); background: var(--brand-color-med); width: 100%; height: 100%; diff --git a/app/styles/soapbox/compact_header.scss b/app/styles/soapbox/compact_header.scss index 4980ab5f1..5357ced5c 100644 --- a/app/styles/soapbox/compact_header.scss +++ b/app/styles/soapbox/compact_header.scss @@ -2,7 +2,7 @@ h1 { font-size: 24px; line-height: 28px; - color: $darker-text-color; + color: var(--primary-color-faint); font-weight: 500; margin-bottom: 20px; padding: 0 10px; @@ -20,7 +20,7 @@ small { font-weight: 400; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } img { diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 9b289b1a1..4685e4cd4 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -8,7 +8,7 @@ border: 10px none; border-radius: 4px; box-sizing: border-box; - color: var(--primary-text-color); + color: #fff; cursor: pointer; display: inline-block; font-family: inherit; @@ -89,7 +89,7 @@ } &.button-secondary { - color: $darker-text-color; + color: var(--primary-color-faint); background: transparent; padding: 3px 15px; border: 1px solid $ui-primary-color; @@ -121,7 +121,7 @@ .icon-button { display: inline-block; padding: 0; - color: $gab-secondary-text; + color: var(--primary-color-faint); border: 0; background: transparent; cursor: pointer; @@ -158,7 +158,7 @@ } &.inverted { - color: $gab-secondary-text; + color: var(--primary-color-faint); &:hover, &:active, @@ -181,19 +181,19 @@ &.overlayed { box-sizing: content-box; - background: rgba($base-overlay-background, 0.6); + background: var(--foreground-color); color: var(--primary-text-color-faint); border-radius: 4px; padding: 2px; &:hover { - background: rgba($base-overlay-background, 0.9); + background: var(--background-color); } } } .text-icon-button { - color: $gab-secondary-text; + color: var(--primary-color-faint); border: 0; background: transparent; cursor: pointer; @@ -561,11 +561,11 @@ &.light { .status__relative-time { - color: $light-text-color; + color: var(--primary-text-color-faint); } .status__display-name { - color: $inverted-text-color; + color: var(--primary-text-color-faint); } .display-name { @@ -598,7 +598,7 @@ &__meta { font-size: 14px; - color: $gab-secondary-text; + color: var(--primary-color-faint); a { color: var(--brand-color); @@ -624,13 +624,13 @@ .status__relative-time, .notification__relative_time { - color: $dark-text-color; + color: var(--primary-text-color-faint); float: right; font-size: 14px; } .status__display-name { - color: $dark-text-color; + color: var(--primary-text-color-faint); } .status__info .status__display-name { @@ -786,7 +786,7 @@ .account__display-name { flex: 1 1 auto; display: block; - color: $darker-text-color; + color: var(--primary-color-faint); overflow: hidden; text-decoration: none; font-size: 14px; @@ -862,7 +862,7 @@ a .account__avatar { .account__reciprocal_follow_message { padding: 0 5px; - color: $gab-secondary-text; + color: var(--primary-color-faint); text-align: center; } @@ -948,7 +948,7 @@ a .account__avatar { display: block; text-transform: uppercase; font-size: 11px; - color: $darker-text-color; + color: var(--primary-color-faint); } strong { @@ -1023,7 +1023,7 @@ a.account__display-name { } .detailed-status__display-name { - color: $secondary-text-color; + color: var(--primary-text-color-faint); display: flex; line-height: 24px; margin-bottom: 15px; @@ -1098,7 +1098,7 @@ a.account__display-name { margin: 0 10px 0 68px; padding: 8px 0 0; cursor: default; - color: $gab-secondary-text; + color: var(--primary-color-faint); font-size: 15px; line-height: 22px; position: relative; @@ -1223,10 +1223,10 @@ a.account__display-name { align-items: center; flex-shrink: 0; cursor: default; - color: $darker-text-color; + color: var(--primary-color-faint); strong { - color: $secondary-text-color; + color: var(--primary-text-color-faint); } a { @@ -1346,11 +1346,6 @@ a.account__display-name { box-sizing: border-box; display: flex; flex-direction: column; - - article { - // TEMPORARY - content of columns may be significantly altered - background: $gab-background-container; - } } .ui { @@ -1368,7 +1363,7 @@ a.account__display-name { width: 100%; height: auto; z-index: 105; - background: $gab-background-container-light; + background: var(--foreground-color); @media (min-width: 895px) { top: -290px; @@ -1397,7 +1392,7 @@ a.account__display-name { display: block; flex: 1 1 auto; padding: 15px 5px 13px; - color: $darker-text-color; + color: var(--primary-color-faint); text-decoration: none; text-align: center; font-size: 16px; @@ -1462,6 +1457,7 @@ a.account__display-name { height: 100%; padding: 0; } + .autosuggest-textarea__textarea {font-size: 16px;} .search__input { @@ -1647,11 +1643,12 @@ a.account__display-name { } .promo-panel-item { + @include light-theme-shadow; display: block; height: 42px; line-height: 42px; border-bottom: 1px solid var(--brand-color-med); - background: $gab-background-container; + background: var(--foreground-color); &--highlighted { background-color: #30ce7d; @@ -2017,13 +2014,13 @@ a.account__display-name { } .getting-started { - color: $dark-text-color; overflow: auto; &__footer { flex: 0 0 auto; padding: 10px; padding-top: 20px; + opacity: 0.7; ul { margin-bottom: 10px; @@ -2034,19 +2031,21 @@ a.account__display-name { } p { - color: $dark-text-color; + color: var(--primary-text-color); font-size: 13px; margin-bottom: 20px; a { - color: $gab-secondary-text; + color: var(--primary-text-color-faint); text-decoration: underline; + opacity: 0.8; } } a { text-decoration: none; - color: $gab-secondary-text; + color: var(--primary-text-color-faint); + opacity: 0.8; &:hover, &:focus, @@ -2079,7 +2078,7 @@ a.account__display-name { } .setting-text { - color: $darker-text-color; + color: var(--primary-color-faint); background: transparent; border: 0; border-bottom: 2px solid $ui-primary-color; @@ -2162,7 +2161,7 @@ a.account__display-name { button, a { display: inline; - color: $secondary-text-color; + color: var(--primary-text-color-faint); background: transparent; border: 0; padding: 0 8px; @@ -2213,7 +2212,7 @@ a.status-card { display: block; font-weight: 500; margin-bottom: 5px; - color: $darker-text-color; + color: var(--primary-color-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -2227,7 +2226,7 @@ a.status-card { } .status-card__description { - color: $darker-text-color; + color: var(--primary-color-faint); } .status-card__host { @@ -2391,7 +2390,9 @@ a.status-card.compact:hover { } } -.columns-area--mobile .column {@include gab-container-standards;} +.columns-area--mobile .column { + @include gab-container-standards; +} .column-header__wrapper { position: relative; @@ -2419,7 +2420,6 @@ a.status-card.compact:hover { .column-header { display: flex; font-size: 16px; - background: $gab-background-container; flex: 0 0 auto; cursor: pointer; position: relative; @@ -2503,8 +2503,11 @@ a.status-card.compact:hover { padding: 0 15px; font-size: 16px; color: #fff; - background: $gab-background-container; - &:hover {color: lighten($darker-text-color, 7%);} + background: transparent; + + &:hover { + color: lighten($darker-text-color, 7%); + } &.active { color: var(--primary-text-color); @@ -2521,7 +2524,7 @@ a.status-card.compact:hover { max-height: 70vh; overflow: hidden; overflow-y: auto; - color: $darker-text-color; + color: var(--primary-color-faint); transition: max-height 150ms ease-in-out, opacity 300ms linear; opacity: 1; @@ -2558,7 +2561,7 @@ a.status-card.compact:hover { } &:hover { - color: $darker-text-color; + color: var(--primary-color-faint); text-decoration: underline; } } @@ -2676,7 +2679,7 @@ a.status-card.compact:hover { .video-error-cover { align-items: center; - background: $base-overlay-background; + background: var(--background-color); color: var(--primary-text-color); cursor: pointer; display: flex; @@ -2690,8 +2693,8 @@ a.status-card.compact:hover { } .media-spoiler { - background: $base-overlay-background; - color: $darker-text-color; + background: var(--background-color); + color: var(--primary-color-faint); border: 0; padding: 0; width: 100%; @@ -2790,7 +2793,7 @@ a.status-card.compact:hover { } .column-settings__section { - color: $darker-text-color; + color: var(--primary-color-faint); cursor: default; display: block; font-weight: 500; @@ -2834,7 +2837,7 @@ a.status-card.compact:hover { &__multi-value__label, &__input { - color: $darker-text-color; + color: var(--primary-color-faint); } &__clear-indicator, @@ -2888,7 +2891,7 @@ a.status-card.compact:hover { margin-bottom: 4px; display: block; vertical-align: top; - background-color: $base-overlay-background; + background-color: var(--background-color); text-transform: uppercase; font-size: 11px; font-weight: 500; @@ -2907,7 +2910,7 @@ a.status-card.compact:hover { } .setting-toggle__label { - color: $darker-text-color; + color: var(--primary-color-faint); display: inline-block; margin-bottom: 14px; margin-left: 8px; @@ -3124,7 +3127,7 @@ a.status-card.compact:hover { display: flex; align-items: center; justify-content: center; - color: $secondary-text-color; + color: var(--primary-text-color-faint); font-size: 18px; font-weight: 500; border: 2px dashed var(--brand-color-med); @@ -3399,7 +3402,7 @@ a.status-card.compact:hover { .search-results__hashtag { display: block; padding: 10px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); text-decoration: none; &:hover, @@ -3545,7 +3548,7 @@ a.status-card.compact:hover { cursor: zoom-in; display: block; text-decoration: none; - color: $secondary-text-color; + color: var(--primary-text-color-faint); line-height: 0; position: relative; z-index: 1; @@ -3567,7 +3570,7 @@ a.status-card.compact:hover { content: 'GIF'; position: absolute; color: var(--primary-text-color); - background: rgba($base-overlay-background, 0.5); + background: var(--foreground-color); bottom: 6px; left: 6px; padding: 2px 6px; @@ -3603,7 +3606,7 @@ a.status-card.compact:hover { top: 0; left: 0; z-index: 0; - background: $base-overlay-background; + background: var(--background-color); &--hidden { display: none; @@ -3638,7 +3641,7 @@ a.status-card.compact:hover { /* Status Video Player */ .status__video-player { - background: $base-overlay-background; + background: var(--background-color); box-sizing: border-box; cursor: default; /* May not be needed */ margin-top: 8px; @@ -3774,8 +3777,8 @@ a.status-card.compact:hover { height: 100%; z-index: 4; border: 0; - background: $base-overlay-background; - color: $darker-text-color; + background: var(--background-color); + color: var(--primary-color-faint); transition: none; pointer-events: none; @@ -4058,7 +4061,7 @@ a.status-card.compact:hover { a { display: block; flex: 1 1 auto; - color: $secondary-text-color; + color: var(--primary-text-color-faint); padding: 15px 0; font-size: 14px; font-weight: 500; @@ -4127,7 +4130,7 @@ noscript { div { font-size: 14px; margin: 30px auto; - color: $secondary-text-color; + color: var(--primary-text-color-faint); max-width: 400px; a { @@ -4530,7 +4533,7 @@ noscript { } .account__header__content { - color: $darker-text-color; + color: var(--primary-color-faint); font-size: 14px; font-weight: 400; overflow: hidden; @@ -4594,7 +4597,7 @@ noscript { } a { - color: $darker-text-color; + color: var(--primary-color-faint); text-decoration: none; font-size: 14px; font-weight: 500; @@ -4620,7 +4623,7 @@ noscript { line-height: 36px; font-weight: 500; text-align: center; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } &__sparkline { @@ -4724,7 +4727,7 @@ noscript { &__subtitle { display: block; padding: 0 15px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } &__form { @@ -4798,7 +4801,7 @@ noscript { padding-top: 6px; &__button { - display: flex; + display: flex; } &__icon { @@ -4991,7 +4994,7 @@ noscript { span:first-of-type { font-size: 20px !important; line-height: 1.25; - color: #ffffff; + color: var(--primary-text-color); font-weight: 600 !important; max-width: 260px; } @@ -5000,7 +5003,7 @@ noscript { display: block; font-size: 16px; line-height: 1.5; - color: $secondary-text-color; + color: var(--primary-text-color-faint); font-weight: 400; overflow: hidden; text-overflow: ellipsis; @@ -5101,7 +5104,7 @@ noscript { > span { font-size: 14px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); a { color: var(--brand-color) !important; @@ -5122,7 +5125,7 @@ noscript { span { display: block; text-align: center; - color: $secondary-text-color; + color: var(--primary-text-color-faint); } a { @@ -5185,15 +5188,17 @@ noscript { width: 100%; max-height: 46px; position: relative; - background-color: darken($ui-base-color, 8%); + background-color: var(--brand-color-faint); border-bottom: 1px solid; border-top: 1px solid; border-color: var(--brand-color-faint); transition: max-height 150ms ease; overflow: hidden; + opacity: 1; &.hidden { max-height: 0; + opacity: 0; } &__btn { @@ -5204,7 +5209,7 @@ noscript { line-height: 46px; font-size: 14px; cursor: pointer; - color: $secondary-text-color; + color: var(--primary-text-color-faint); span { height: 46px; diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index 1626963ef..c0702b301 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -115,7 +115,7 @@ &__links { display: flex; font-size: 14px; - color: $darker-text-color; + color: var(--primary-color-faint); @media screen and (max-width: 895px) { justify-content: center; flex-wrap: wrap; @@ -143,7 +143,7 @@ } &:last-of-type { - color: $ui-secondary-color; + color: var(--primary-text-color-faint); font-size: 12px; line-height: 14px; padding-top: 2px; diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index c51f7a3e5..05e43be4f 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -219,7 +219,7 @@ .icon-button { flex: 0 1 auto; - color: $gab-secondary-text; + color: var(--primary-color-faint); font-size: 14px; font-weight: 500; padding: 10px; @@ -250,8 +250,8 @@ background: rgba(0, 0, 0, 0.3); box-sizing: border-box; background: transparent; - color: $gab-secondary-text; - border: 1px solid $gab-secondary-text; + color: var(--primary-color-faint); + border: 1px solid var(--primary-color-faint); outline: none; padding: 10px; margin: 0; @@ -263,7 +263,7 @@ &:focus {color: #fff;} &::placeholder { - color: $gab-secondary-text; + color: var(--primary-color-faint); } } &.active {opacity: 1;} @@ -314,7 +314,7 @@ font-family: $font-sans-serif, sans-serif; font-size: 14px; font-weight: 600; - color: $gab-secondary-text; + color: var(--primary-color-faint); &.character-counter--over {color: $warning-red;} } } diff --git a/app/styles/soapbox/components/detailed-status.scss b/app/styles/soapbox/components/detailed-status.scss index fe665967b..e00395446 100644 --- a/app/styles/soapbox/components/detailed-status.scss +++ b/app/styles/soapbox/components/detailed-status.scss @@ -45,7 +45,7 @@ .detailed-status__meta { margin-top: 15px; - color: $dark-text-color; + color: var(--primary-text-color-faint); font-size: 14px; line-height: 18px; display: flex; @@ -60,7 +60,7 @@ } .detailed-status__link { - color: $action-button-color; + color: var(--primary-text-color-faint); cursor: pointer; text-decoration: none; font-size: 13px; diff --git a/app/styles/soapbox/components/dropdown-menu.scss b/app/styles/soapbox/components/dropdown-menu.scss index d90118e40..905a1b7fe 100644 --- a/app/styles/soapbox/components/dropdown-menu.scss +++ b/app/styles/soapbox/components/dropdown-menu.scss @@ -4,10 +4,10 @@ @include font-weight(normal); z-index: 9999; position: absolute; - background: $gab-background-base-light; + background: var(--background-color); border-radius: 6px; padding: 4px 0; - color: $gab-secondary-text; + color: var(--primary-text-color); box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.5); &.left {transform-origin: 100% 50%;} &.top {transform-origin: 50% 100%;} @@ -24,28 +24,28 @@ right: -5px; margin-top: -5px; border-width: 5px 0 5px 5px; - border-left-color: $gab-background-base-light; + border-left-color: var(--background-color); } &.top { bottom: -5px; margin-left: -5px; border-width: 5px 5px 0; - border-top-color: $gab-background-base-light; + border-top-color: var(--background-color); } &.bottom { top: -5px; margin-left: -5px; border-width: 0 5px 5px; - border-bottom-color: $gab-background-base-light; + border-bottom-color: var(--background-color); } &.right { left: -5px; margin-top: -5px; border-width: 5px 5px 5px 0; - border-right-color: $gab-background-base-light; + border-right-color: var(--background-color); } } @@ -63,7 +63,7 @@ text-overflow: ellipsis; white-space: nowrap; text-transform: capitalize; - color: $gab-secondary-text; + color: var(--primary-text-color); &:focus, &:hover, @@ -78,7 +78,7 @@ display: block; margin: 10px !important; height: 1px; - background: $gab-background-base; + background: var(--foreground-color); } } // end .dropdown-menu @@ -146,7 +146,7 @@ &:hover { background: var(--brand-color); - color: $secondary-text-color; + color: var(--primary-text-color-faint); } } } diff --git a/app/styles/soapbox/components/emoji-reacts.scss b/app/styles/soapbox/components/emoji-reacts.scss index 24783b3f3..14b5aeba9 100644 --- a/app/styles/soapbox/components/emoji-reacts.scss +++ b/app/styles/soapbox/components/emoji-reacts.scss @@ -6,7 +6,7 @@ img { width: 20px; height: 20px; - filter: drop-shadow(2px 0 0 #fff); // FIXME: Use theme color + filter: drop-shadow(2px 0 0 var(--foreground-color)); } } @@ -57,7 +57,7 @@ .emoji-react-selector { position: absolute; display: flex; - background-color: #fff; + background-color: var(--background-color); padding: 5px 8px; border-radius: 9999px; box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1); diff --git a/app/styles/soapbox/components/group-card.scss b/app/styles/soapbox/components/group-card.scss index 567a170cb..a846da2f6 100644 --- a/app/styles/soapbox/components/group-card.scss +++ b/app/styles/soapbox/components/group-card.scss @@ -53,7 +53,7 @@ } .group-card__meta { - color: $gab-secondary-text; + color: var(--primary-color-faint); font-size: 14px; margin-top: 5px; margin-bottom: 10px; diff --git a/app/styles/soapbox/components/group-form.scss b/app/styles/soapbox/components/group-form.scss index e9cef5766..41fce791d 100644 --- a/app/styles/soapbox/components/group-form.scss +++ b/app/styles/soapbox/components/group-form.scss @@ -31,7 +31,7 @@ float: left; height: 20px; padding: 3px 0 0 33px; - color: $gab-secondary-text; + color: var(--primary-color-faint); background-repeat: no-repeat; background-image: url('../images/sprite-post-functions.png'); background-size: 100px 1200px; diff --git a/app/styles/soapbox/components/group-sidebar-panel.scss b/app/styles/soapbox/components/group-sidebar-panel.scss index 6b4fa681d..e8d84d8cd 100644 --- a/app/styles/soapbox/components/group-sidebar-panel.scss +++ b/app/styles/soapbox/components/group-sidebar-panel.scss @@ -23,7 +23,7 @@ &__meta { font-size: 0.8em; - color: $gab-secondary-text; + color: var(--primary-color-faint); &__unread { color: var(--brand-color); diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index 3c9587fa6..9d48af78d 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -290,7 +290,7 @@ &__case { background: var(--brand-color-med); - color: $secondary-text-color; + color: var(--primary-text-color-faint); font-weight: 500; padding: 10px; border-radius: 4px; @@ -316,7 +316,7 @@ max-width: 90vw; border-radius: 4px; border: 1px solid $gab-placeholder-accent; - color: $gab-secondary-text; + color: var(--primary-color-faint); background: $gab-background-container; .status__display-name { @@ -440,7 +440,7 @@ .status__content, .status__content p { - color: $gab-secondary-text; + color: var(--primary-color-faint); } @media screen and (max-width: 480px) { @@ -532,7 +532,7 @@ align-items: center; padding: 13px 10px 12px; @inclide font-size(14); - color: $gab-secondary-text; + color: var(--primary-color-faint); text-decoration: none; &, diff --git a/app/styles/soapbox/components/user-panel.scss b/app/styles/soapbox/components/user-panel.scss index 63fcc31fa..80edc0ab9 100644 --- a/app/styles/soapbox/components/user-panel.scss +++ b/app/styles/soapbox/components/user-panel.scss @@ -9,7 +9,7 @@ display: block; height: 112px; width: 100%; - background: lighten($gab-background-container, 4%); + background: var(--brand-color-faint); img { display: block; @@ -30,7 +30,7 @@ display: block; width: 82px; height: 82px; - border: 6px solid $gab-background-base; + border: 6px solid var(--foreground-color); background-size: cover; } } @@ -51,7 +51,7 @@ font-size: 20px; font-weight: bold; line-height: 24px; - color: #fff; + color: var(--primary-text-color); } &:hover & { @@ -64,7 +64,7 @@ display: block; font-size: 14px; line-height: 16px; - color: $gab-secondary-text; + color: var(--primary-color-faint); text-decoration: none !important; } } @@ -84,7 +84,6 @@ a { text-decoration: none; - color: var(--primary-text-color); &:hover { @@ -95,7 +94,7 @@ &__value { display: block; width: 100%; - color: #fff; + color: var(--primary-text-color); font-size: 20px; font-weight: 800; line-height: 24px; @@ -104,7 +103,7 @@ &__label { display: block; width: 100%; - color: $gab-secondary-text; + color: var(--primary-color-faint); font-size: 12px; line-height: 14px; } diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index 030c17940..410b2b3cd 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -94,7 +94,7 @@ .name { flex: 1 1 auto; - color: $secondary-text-color; + color: var(--primary-text-color-faint); width: calc(100% - 88px); .username { @@ -431,7 +431,7 @@ } .logo-button { - background-color: $secondary-text-color; + background-color: var(--primary-text-color-faint); } } @@ -612,7 +612,7 @@ text-shadow: none; small { - color: $darker-text-color; + color: var(--primary-color-faint); } } } @@ -640,7 +640,7 @@ width: 33.3%; box-sizing: border-box; flex: 0 0 auto; - color: $darker-text-color; + color: var(--primary-color-faint); padding: 10px; border-right: 1px solid var(--brand-color-faint); cursor: default; @@ -674,7 +674,7 @@ } &.inactive::after { - border-bottom-color: $secondary-text-color; + border-bottom-color: var(--primary-text-color-faint); } } @@ -737,11 +737,11 @@ &__links { margin-top: -15px; font-size: 14px; - color: $darker-text-color; + color: var(--primary-color-faint); a { display: inline-block; - color: $darker-text-color; + color: var(--primary-color-faint); text-decoration: none; padding: 15px; font-weight: 500; @@ -812,7 +812,7 @@ .roles { padding: 20px; font-size: 14px; - color: $darker-text-color; + color: var(--primary-color-faint); } .roles { diff --git a/app/styles/soapbox/dashboard.scss b/app/styles/soapbox/dashboard.scss index 8b8654e0c..5da8419cf 100644 --- a/app/styles/soapbox/dashboard.scss +++ b/app/styles/soapbox/dashboard.scss @@ -48,7 +48,7 @@ &__label { font-size: 14px; - color: $gab-secondary-text; + color: var(--primary-color-faint); text-align: center; font-weight: 500; } diff --git a/app/styles/soapbox/footer.scss b/app/styles/soapbox/footer.scss index 1a2b2f578..e1695bcdf 100644 --- a/app/styles/soapbox/footer.scss +++ b/app/styles/soapbox/footer.scss @@ -34,7 +34,7 @@ text-transform: uppercase; font-weight: 700; margin-bottom: 8px; - color: $darker-text-color; + color: var(--primary-color-faint); font-size: 1.6rem; line-height: 1.5; diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index 5bbf634cf..e7dd7dee6 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -95,7 +95,7 @@ code { } .hint { - color: $gab-secondary-text; + color: var(--primary-color-faint); a { color: var(--highlight-text-color); @@ -116,7 +116,7 @@ code { p.hint { margin-bottom: 15px; - color: $gab-secondary-text; + color: var(--primary-color-faint); &.subtle-hint { text-align: center; @@ -390,7 +390,7 @@ code { border: 0; border-radius: 4px; background: var(--brand-color); - color: var(--primary-text-color); + color: #fff; font-size: 18px; line-height: inherit; height: auto; @@ -519,7 +519,7 @@ code { .flash-message { background: var(--brand-color-med); - color: $darker-text-color; + color: var(--primary-color-faint); border-radius: 4px; padding: 15px 10px; margin-bottom: 30px; @@ -539,7 +539,7 @@ code { a { display: inline-block; - color: $darker-text-color; + color: var(--primary-color-faint); text-decoration: none; &:hover { @@ -600,7 +600,7 @@ code { text-align: center; a { - color: $darker-text-color; + color: var(--primary-color-faint); text-decoration: none; &:hover { @@ -636,7 +636,7 @@ code { .oauth-prompt, .follow-prompt { margin-bottom: 30px; - color: $darker-text-color; + color: var(--primary-color-faint); h2 { font-size: 16px; @@ -645,7 +645,7 @@ code { } strong { - color: $secondary-text-color; + color: var(--primary-text-color-faint); font-weight: 500; @each $lang in $cjk-langs { @@ -682,7 +682,7 @@ code { .qr-alternative { margin-bottom: 20px; - color: $secondary-text-color; + color: var(--primary-text-color-faint); flex: 150px; samp { @@ -767,7 +767,7 @@ code { .post-follow-actions { text-align: center; - color: $darker-text-color; + color: var(--primary-color-faint); div { margin-bottom: 4px; diff --git a/app/styles/soapbox/introduction.scss b/app/styles/soapbox/introduction.scss index 161238937..aad322e60 100644 --- a/app/styles/soapbox/introduction.scss +++ b/app/styles/soapbox/introduction.scss @@ -92,7 +92,7 @@ font-size: 16px; line-height: 24px; font-weight: 400; - color: $darker-text-color; + color: var(--primary-color-faint); code { display: inline-block; diff --git a/app/styles/soapbox/stream_entries.scss b/app/styles/soapbox/stream_entries.scss index ab098eef3..c45192f50 100644 --- a/app/styles/soapbox/stream_entries.scss +++ b/app/styles/soapbox/stream_entries.scss @@ -77,7 +77,7 @@ flex: 0 auto; font-size: 14px; background: var(--brand-color); - color: var(--primary-text-color); + color: #fff; text-transform: none; line-height: 36px; height: auto; diff --git a/app/styles/soapbox/tables.scss b/app/styles/soapbox/tables.scss index 41ed16dc6..f498cfec2 100644 --- a/app/styles/soapbox/tables.scss +++ b/app/styles/soapbox/tables.scss @@ -109,7 +109,7 @@ a.table-action-link { display: inline-block; margin-right: 5px; padding: 0 10px; - color: $gab-secondary-text; + color: var(--primary-color-faint); font-weight: 500; &:hover { diff --git a/app/styles/soapbox/variables.scss b/app/styles/soapbox/variables.scss index e8f32439c..08aec71a0 100644 --- a/app/styles/soapbox/variables.scss +++ b/app/styles/soapbox/variables.scss @@ -24,7 +24,6 @@ $gab-placeholder-accent: #666 !default; // light theme $gab-background-base-light: #f6f2f6 !default; -$gab-background-container-light: #fff !default; $gab-default-text-light: #6c6c6c !default; $gab-background: $gab-background-base !default; diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index 704cd0d97..c51a8cca2 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -24,7 +24,7 @@ padding: 20px; border-radius: 0 0 4px 4px; font-size: 15px; - color: $darker-text-color; + color: var(--primary-color-faint); line-height: 20px; word-wrap: break-word; font-weight: 400; @@ -56,7 +56,7 @@ } a { - color: $secondary-text-color; + color: var(--primary-text-color-faint); text-decoration: none; &:hover { @@ -79,7 +79,7 @@ text-transform: uppercase; font-weight: 700; font-size: 13px; - color: $darker-text-color; + color: var(--primary-color-faint); } .account { @@ -121,7 +121,7 @@ .contact-widget { font-size: 15px; - color: $darker-text-color; + color: var(--primary-color-faint); line-height: 20px; word-wrap: break-word; font-weight: 400; @@ -154,7 +154,7 @@ border-radius: 4px; background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); - color: $secondary-text-color; + color: var(--primary-text-color-faint); font-weight: 400; margin-bottom: 10px; @@ -197,7 +197,7 @@ .fa { margin-right: 5px; - color: $darker-text-color; + color: var(--primary-color-faint); } } @@ -224,7 +224,7 @@ background: $base-shadow-color; box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); font-size: 14px; - color: $darker-text-color; + color: var(--primary-color-faint); margin-bottom: 10px; } @@ -246,7 +246,7 @@ p { font-size: 15px; - color: $darker-text-color; + color: var(--primary-color-faint); } @media screen and (max-width: $no-gap-breakpoint) { @@ -309,7 +309,7 @@ text-overflow: ellipsis; .fa { - color: $darker-text-color; + color: var(--primary-color-faint); } small { @@ -317,7 +317,7 @@ font-weight: 400; font-size: 15px; margin-top: 8px; - color: $darker-text-color; + color: var(--primary-color-faint); } } @@ -383,7 +383,7 @@ thead th { text-align: center; text-transform: uppercase; - color: $darker-text-color; + color: var(--primary-color-faint); font-weight: 700; padding: 10px; @@ -411,7 +411,7 @@ small { display: block; - color: $darker-text-color; + color: var(--primary-color-faint); font-weight: 400; font-size: 14px; } @@ -508,7 +508,7 @@ $fluid-breakpoint: $maximum-width + 20px; .notice-widget { margin-bottom: 10px; - color: $darker-text-color; + color: var(--primary-color-faint); p { margin-bottom: 10px; From f3f647961e0115752ad241b08edb398772238e92 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 21:16:32 -0500 Subject: [PATCH 25/46] --primary-color-faint -> --primary-text-color-faint --- app/styles/soapbox-light/diff.scss | 8 +-- app/styles/soapbox/_mixins.scss | 4 +- app/styles/soapbox/about.scss | 20 ++++---- app/styles/soapbox/accounts.scss | 8 +-- app/styles/soapbox/basics.scss | 2 +- app/styles/soapbox/compact_header.scss | 2 +- app/styles/soapbox/components.scss | 50 +++++++++---------- .../soapbox/components/account-header.scss | 2 +- .../soapbox/components/compose-form.scss | 10 ++-- app/styles/soapbox/components/group-card.scss | 2 +- app/styles/soapbox/components/group-form.scss | 2 +- .../components/group-sidebar-panel.scss | 2 +- app/styles/soapbox/components/modal.scss | 6 +-- app/styles/soapbox/components/user-panel.scss | 4 +- app/styles/soapbox/containers.scss | 10 ++-- app/styles/soapbox/dashboard.scss | 2 +- app/styles/soapbox/footer.scss | 2 +- app/styles/soapbox/forms.scss | 14 +++--- app/styles/soapbox/introduction.scss | 2 +- app/styles/soapbox/tables.scss | 2 +- app/styles/soapbox/widgets.scss | 22 ++++---- 21 files changed, 88 insertions(+), 88 deletions(-) diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss index ecfd000bd..eac696bf8 100644 --- a/app/styles/soapbox-light/diff.scss +++ b/app/styles/soapbox-light/diff.scss @@ -87,7 +87,7 @@ // .dropdown-menu { // &__item { // a { -// color: var(--primary-color-faint); +// color: var(--primary-text-color-faint); // } // } // } @@ -219,7 +219,7 @@ // } // // .username { -// color: var(--primary-color-faint); +// color: var(--primary-text-color-faint); // } // // .account__header__content { @@ -251,7 +251,7 @@ // // .simple_form select, // .admin select.dropdown { -// border-color: var(--primary-color-faint); +// border-color: var(--primary-text-color-faint); // } // // .button.logo-button { @@ -342,7 +342,7 @@ // &.standard { // @include input-placeholder($gab-secondary-text); // color: $gab-placeholder-accent; -// border-color: var(--primary-color-faint); +// border-color: var(--primary-text-color-faint); // background: $gab-background-base-light; // } // } diff --git a/app/styles/soapbox/_mixins.scss b/app/styles/soapbox/_mixins.scss index aceaae121..ea2e30969 100644 --- a/app/styles/soapbox/_mixins.scss +++ b/app/styles/soapbox/_mixins.scss @@ -42,7 +42,7 @@ border: 1px $gab-placeholder-accent solid; box-shadow: none; font-family: inherit; - background: $nav-ui-search-bg-color; + background: var(--background-color); color: var(--highlight-text-color); margin: 0; border-radius: 4px; @@ -72,7 +72,7 @@ border: 1px solid $gab-placeholder-accent; padding: 8px 10px 17px; margin: 4px 0 0; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.5); h4 { diff --git a/app/styles/soapbox/about.scss b/app/styles/soapbox/about.scss index e24368a53..7e6c3d21b 100644 --- a/app/styles/soapbox/about.scss +++ b/app/styles/soapbox/about.scss @@ -21,7 +21,7 @@ $small-breakpoint: 960px; font-weight: 400; font-size: 16px; line-height: 30px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); max-width: 600px; padding: 15px 30px; @@ -47,7 +47,7 @@ $small-breakpoint: 960px; font-weight: 400; font-size: 16px; line-height: 30px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); a { color: var(--highlight-text-color); @@ -232,7 +232,7 @@ $small-breakpoint: 960px; font-size: 14px; line-height: 24px; font-weight: 500; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); padding-bottom: 5px; margin-bottom: 15px; border-bottom: 1px solid var(--brand-color-faint); @@ -286,7 +286,7 @@ $small-breakpoint: 960px; .username { display: block; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } } } @@ -301,7 +301,7 @@ $small-breakpoint: 960px; font-size: 16px; line-height: 30px; margin-bottom: 12px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); a { color: var(--highlight-text-color); @@ -590,7 +590,7 @@ $small-breakpoint: 960px; margin-bottom: 0; small { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); span { color: var(--primary-text-color-faint); @@ -812,7 +812,7 @@ $small-breakpoint: 960px; text-transform: uppercase; font-weight: 700; font-size: 13px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } &__text { @@ -859,18 +859,18 @@ $small-breakpoint: 960px; span { font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } } } .simple_form .user_agreement .label_input > label { font-weight: 400; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } .simple_form p.lead { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 15px; line-height: 20px; font-weight: 400; diff --git a/app/styles/soapbox/accounts.scss b/app/styles/soapbox/accounts.scss index b7d130979..75d4ae122 100644 --- a/app/styles/soapbox/accounts.scss +++ b/app/styles/soapbox/accounts.scss @@ -87,7 +87,7 @@ span { display: block; font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-weight: 400; overflow: hidden; text-overflow: ellipsis; @@ -175,7 +175,7 @@ .nothing-here { background: var(--brand-color-med); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 14px; font-weight: 500; text-align: center; @@ -257,7 +257,7 @@ dd { flex: 1 1 auto; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } a { @@ -296,7 +296,7 @@ .pending-account { &__header { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); a { color: $ui-secondary-color; diff --git a/app/styles/soapbox/basics.scss b/app/styles/soapbox/basics.scss index 454b35d79..a012f6622 100644 --- a/app/styles/soapbox/basics.scss +++ b/app/styles/soapbox/basics.scss @@ -95,7 +95,7 @@ body { &.error { position: absolute; text-align: center; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); background: var(--brand-color-med); width: 100%; height: 100%; diff --git a/app/styles/soapbox/compact_header.scss b/app/styles/soapbox/compact_header.scss index 5357ced5c..71d5f9eb9 100644 --- a/app/styles/soapbox/compact_header.scss +++ b/app/styles/soapbox/compact_header.scss @@ -2,7 +2,7 @@ h1 { font-size: 24px; line-height: 28px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-weight: 500; margin-bottom: 20px; padding: 0 10px; diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 4685e4cd4..811464208 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -89,7 +89,7 @@ } &.button-secondary { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); background: transparent; padding: 3px 15px; border: 1px solid $ui-primary-color; @@ -121,7 +121,7 @@ .icon-button { display: inline-block; padding: 0; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); border: 0; background: transparent; cursor: pointer; @@ -158,7 +158,7 @@ } &.inverted { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); &:hover, &:active, @@ -193,7 +193,7 @@ } .text-icon-button { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); border: 0; background: transparent; cursor: pointer; @@ -598,7 +598,7 @@ &__meta { font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); a { color: var(--brand-color); @@ -786,7 +786,7 @@ .account__display-name { flex: 1 1 auto; display: block; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); overflow: hidden; text-decoration: none; font-size: 14px; @@ -862,7 +862,7 @@ a .account__avatar { .account__reciprocal_follow_message { padding: 0 5px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-align: center; } @@ -948,7 +948,7 @@ a .account__avatar { display: block; text-transform: uppercase; font-size: 11px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } strong { @@ -1098,7 +1098,7 @@ a.account__display-name { margin: 0 10px 0 68px; padding: 8px 0 0; cursor: default; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 15px; line-height: 22px; position: relative; @@ -1223,7 +1223,7 @@ a.account__display-name { align-items: center; flex-shrink: 0; cursor: default; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); strong { color: var(--primary-text-color-faint); @@ -1392,7 +1392,7 @@ a.account__display-name { display: block; flex: 1 1 auto; padding: 15px 5px 13px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none; text-align: center; font-size: 16px; @@ -2078,7 +2078,7 @@ a.account__display-name { } .setting-text { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); background: transparent; border: 0; border-bottom: 2px solid $ui-primary-color; @@ -2212,7 +2212,7 @@ a.status-card { display: block; font-weight: 500; margin-bottom: 5px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -2226,7 +2226,7 @@ a.status-card { } .status-card__description { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } .status-card__host { @@ -2502,11 +2502,11 @@ a.status-card.compact:hover { border: 0; padding: 0 15px; font-size: 16px; - color: #fff; + color: var(--primary-text-color); background: transparent; &:hover { - color: lighten($darker-text-color, 7%); + color: var(--primary-text-color-faint); } &.active { @@ -2524,7 +2524,7 @@ a.status-card.compact:hover { max-height: 70vh; overflow: hidden; overflow-y: auto; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); transition: max-height 150ms ease-in-out, opacity 300ms linear; opacity: 1; @@ -2561,7 +2561,7 @@ a.status-card.compact:hover { } &:hover { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: underline; } } @@ -2694,7 +2694,7 @@ a.status-card.compact:hover { .media-spoiler { background: var(--background-color); - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); border: 0; padding: 0; width: 100%; @@ -2793,7 +2793,7 @@ a.status-card.compact:hover { } .column-settings__section { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); cursor: default; display: block; font-weight: 500; @@ -2837,7 +2837,7 @@ a.status-card.compact:hover { &__multi-value__label, &__input { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } &__clear-indicator, @@ -2910,7 +2910,7 @@ a.status-card.compact:hover { } .setting-toggle__label { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); display: inline-block; margin-bottom: 14px; margin-left: 8px; @@ -3778,7 +3778,7 @@ a.status-card.compact:hover { z-index: 4; border: 0; background: var(--background-color); - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); transition: none; pointer-events: none; @@ -4533,7 +4533,7 @@ noscript { } .account__header__content { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 14px; font-weight: 400; overflow: hidden; @@ -4597,7 +4597,7 @@ noscript { } a { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none; font-size: 14px; font-weight: 500; diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/soapbox/components/account-header.scss index c0702b301..d5b081ad3 100644 --- a/app/styles/soapbox/components/account-header.scss +++ b/app/styles/soapbox/components/account-header.scss @@ -115,7 +115,7 @@ &__links { display: flex; font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); @media screen and (max-width: 895px) { justify-content: center; flex-wrap: wrap; diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/soapbox/components/compose-form.scss index 05e43be4f..f97dadc50 100644 --- a/app/styles/soapbox/components/compose-form.scss +++ b/app/styles/soapbox/components/compose-form.scss @@ -219,7 +219,7 @@ .icon-button { flex: 0 1 auto; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 14px; font-weight: 500; padding: 10px; @@ -250,8 +250,8 @@ background: rgba(0, 0, 0, 0.3); box-sizing: border-box; background: transparent; - color: var(--primary-color-faint); - border: 1px solid var(--primary-color-faint); + color: var(--primary-text-color-faint); + border: 1px solid var(--primary-text-color-faint); outline: none; padding: 10px; margin: 0; @@ -263,7 +263,7 @@ &:focus {color: #fff;} &::placeholder { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } } &.active {opacity: 1;} @@ -314,7 +314,7 @@ font-family: $font-sans-serif, sans-serif; font-size: 14px; font-weight: 600; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); &.character-counter--over {color: $warning-red;} } } diff --git a/app/styles/soapbox/components/group-card.scss b/app/styles/soapbox/components/group-card.scss index a846da2f6..fb4cad7c1 100644 --- a/app/styles/soapbox/components/group-card.scss +++ b/app/styles/soapbox/components/group-card.scss @@ -53,7 +53,7 @@ } .group-card__meta { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 14px; margin-top: 5px; margin-bottom: 10px; diff --git a/app/styles/soapbox/components/group-form.scss b/app/styles/soapbox/components/group-form.scss index 41fce791d..9bfe325d4 100644 --- a/app/styles/soapbox/components/group-form.scss +++ b/app/styles/soapbox/components/group-form.scss @@ -31,7 +31,7 @@ float: left; height: 20px; padding: 3px 0 0 33px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); background-repeat: no-repeat; background-image: url('../images/sprite-post-functions.png'); background-size: 100px 1200px; diff --git a/app/styles/soapbox/components/group-sidebar-panel.scss b/app/styles/soapbox/components/group-sidebar-panel.scss index e8d84d8cd..aee27a8e1 100644 --- a/app/styles/soapbox/components/group-sidebar-panel.scss +++ b/app/styles/soapbox/components/group-sidebar-panel.scss @@ -23,7 +23,7 @@ &__meta { font-size: 0.8em; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); &__unread { color: var(--brand-color); diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/soapbox/components/modal.scss index 9d48af78d..f8dbb43cd 100644 --- a/app/styles/soapbox/components/modal.scss +++ b/app/styles/soapbox/components/modal.scss @@ -316,7 +316,7 @@ max-width: 90vw; border-radius: 4px; border: 1px solid $gab-placeholder-accent; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); background: $gab-background-container; .status__display-name { @@ -440,7 +440,7 @@ .status__content, .status__content p { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } @media screen and (max-width: 480px) { @@ -532,7 +532,7 @@ align-items: center; padding: 13px 10px 12px; @inclide font-size(14); - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none; &, diff --git a/app/styles/soapbox/components/user-panel.scss b/app/styles/soapbox/components/user-panel.scss index 80edc0ab9..6ec6aefda 100644 --- a/app/styles/soapbox/components/user-panel.scss +++ b/app/styles/soapbox/components/user-panel.scss @@ -64,7 +64,7 @@ display: block; font-size: 14px; line-height: 16px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none !important; } } @@ -103,7 +103,7 @@ &__label { display: block; width: 100%; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 12px; line-height: 14px; } diff --git a/app/styles/soapbox/containers.scss b/app/styles/soapbox/containers.scss index 410b2b3cd..135f06635 100644 --- a/app/styles/soapbox/containers.scss +++ b/app/styles/soapbox/containers.scss @@ -612,7 +612,7 @@ text-shadow: none; small { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } } } @@ -640,7 +640,7 @@ width: 33.3%; box-sizing: border-box; flex: 0 0 auto; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); padding: 10px; border-right: 1px solid var(--brand-color-faint); cursor: default; @@ -737,11 +737,11 @@ &__links { margin-top: -15px; font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); a { display: inline-block; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none; padding: 15px; font-weight: 500; @@ -812,7 +812,7 @@ .roles { padding: 20px; font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } .roles { diff --git a/app/styles/soapbox/dashboard.scss b/app/styles/soapbox/dashboard.scss index 5da8419cf..51b9810e2 100644 --- a/app/styles/soapbox/dashboard.scss +++ b/app/styles/soapbox/dashboard.scss @@ -48,7 +48,7 @@ &__label { font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-align: center; font-weight: 500; } diff --git a/app/styles/soapbox/footer.scss b/app/styles/soapbox/footer.scss index e1695bcdf..29e6f32db 100644 --- a/app/styles/soapbox/footer.scss +++ b/app/styles/soapbox/footer.scss @@ -34,7 +34,7 @@ text-transform: uppercase; font-weight: 700; margin-bottom: 8px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-size: 1.6rem; line-height: 1.5; diff --git a/app/styles/soapbox/forms.scss b/app/styles/soapbox/forms.scss index e7dd7dee6..5a84ec2cb 100644 --- a/app/styles/soapbox/forms.scss +++ b/app/styles/soapbox/forms.scss @@ -95,7 +95,7 @@ code { } .hint { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); a { color: var(--highlight-text-color); @@ -116,7 +116,7 @@ code { p.hint { margin-bottom: 15px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); &.subtle-hint { text-align: center; @@ -519,7 +519,7 @@ code { .flash-message { background: var(--brand-color-med); - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); border-radius: 4px; padding: 15px 10px; margin-bottom: 30px; @@ -539,7 +539,7 @@ code { a { display: inline-block; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none; &:hover { @@ -600,7 +600,7 @@ code { text-align: center; a { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); text-decoration: none; &:hover { @@ -636,7 +636,7 @@ code { .oauth-prompt, .follow-prompt { margin-bottom: 30px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); h2 { font-size: 16px; @@ -767,7 +767,7 @@ code { .post-follow-actions { text-align: center; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); div { margin-bottom: 4px; diff --git a/app/styles/soapbox/introduction.scss b/app/styles/soapbox/introduction.scss index aad322e60..dd9b46101 100644 --- a/app/styles/soapbox/introduction.scss +++ b/app/styles/soapbox/introduction.scss @@ -92,7 +92,7 @@ font-size: 16px; line-height: 24px; font-weight: 400; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); code { display: inline-block; diff --git a/app/styles/soapbox/tables.scss b/app/styles/soapbox/tables.scss index f498cfec2..d0036a81d 100644 --- a/app/styles/soapbox/tables.scss +++ b/app/styles/soapbox/tables.scss @@ -109,7 +109,7 @@ a.table-action-link { display: inline-block; margin-right: 5px; padding: 0 10px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-weight: 500; &:hover { diff --git a/app/styles/soapbox/widgets.scss b/app/styles/soapbox/widgets.scss index c51a8cca2..df236d003 100644 --- a/app/styles/soapbox/widgets.scss +++ b/app/styles/soapbox/widgets.scss @@ -24,7 +24,7 @@ padding: 20px; border-radius: 0 0 4px 4px; font-size: 15px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); line-height: 20px; word-wrap: break-word; font-weight: 400; @@ -79,7 +79,7 @@ text-transform: uppercase; font-weight: 700; font-size: 13px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } .account { @@ -121,7 +121,7 @@ .contact-widget { font-size: 15px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); line-height: 20px; word-wrap: break-word; font-weight: 400; @@ -197,7 +197,7 @@ .fa { margin-right: 5px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } } @@ -224,7 +224,7 @@ background: $base-shadow-color; box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); font-size: 14px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); margin-bottom: 10px; } @@ -246,7 +246,7 @@ p { font-size: 15px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } @media screen and (max-width: $no-gap-breakpoint) { @@ -309,7 +309,7 @@ text-overflow: ellipsis; .fa { - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } small { @@ -317,7 +317,7 @@ font-weight: 400; font-size: 15px; margin-top: 8px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); } } @@ -383,7 +383,7 @@ thead th { text-align: center; text-transform: uppercase; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-weight: 700; padding: 10px; @@ -411,7 +411,7 @@ small { display: block; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); font-weight: 400; font-size: 14px; } @@ -508,7 +508,7 @@ $fluid-breakpoint: $maximum-width + 20px; .notice-widget { margin-bottom: 10px; - color: var(--primary-color-faint); + color: var(--primary-text-color-faint); p { margin-bottom: 10px; From 4ddcb9bcd087206a3ea029eafee840f2769eb0f3 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 23:08:47 -0500 Subject: [PATCH 26/46] Lighten --primary-text-color-faint, fix wtf-panel shadow --- app/soapbox/containers/soapbox.js | 6 ------ app/soapbox/reducers/theme.js | 4 ++-- app/styles/soapbox/components.scss | 10 ++++++---- app/styles/soapbox/components/user-panel.scss | 1 + 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index 1b4a6ab3c..878f78b3c 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -70,11 +70,6 @@ class SoapboxMount extends React.PureComponent { dispatch: PropTypes.func, }; - getThemeChunk = theme => { - const cssChunks = JSON.parse(document.getElementById('css-chunks').innerHTML); - return cssChunks.filter(chunk => chunk.startsWith(theme))[0]; - }; - componentDidMount() { this.props.dispatch(generateTheme('#bb0000', 'light')); } @@ -106,7 +101,6 @@ class SoapboxMount extends React.PureComponent { <> - {theme && } {themeCss && } diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 233aa74b3..81b9912b1 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -10,13 +10,13 @@ const initialState = ImmutableMap(); const modes = ImmutableMap({ light: ImmutableMap({ 'primary-text-color': '#000000', - 'primary-text-color-faint': 'rgba(0, 0, 0, 0.7)', + 'primary-text-color-faint': 'rgba(0, 0, 0, 0.6)', 'background-color': '#f2f2f2', 'foreground-color': '#ffffff', }), dark: ImmutableMap({ 'primary-text-color': '#ffffff', - 'primary-text-color-faint': 'rgba(255, 255, 255, 0.7)', + 'primary-text-color-faint': 'rgba(255, 255, 255, 0.6)', 'background-color': '#333333', 'foreground-color': '#222222', }), diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index 811464208..a8cd66b90 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -1949,7 +1949,7 @@ a.account__display-name { &:hover, &:focus, &:active { - background: lighten($ui-base-color, 11%); + background: var(--brand-color-faint); } &:focus { @@ -1991,7 +1991,7 @@ a.account__display-name { .column-subheading { background: var(--brand-color-med); - color: $dark-text-color; + color: var(--primary-text-color-faint); padding: 8px 20px; font-size: 12px; font-weight: 500; @@ -2081,7 +2081,7 @@ a.account__display-name { color: var(--primary-text-color-faint); background: transparent; border: 0; - border-bottom: 2px solid $ui-primary-color; + border-bottom: 2px solid var(--brand-color); box-sizing: border-box; display: block; font-family: inherit; @@ -2446,6 +2446,7 @@ a.status-card.compact:hover { &.grouped { margin: 6px; + color: var(--primary-text-color-faint); } &.active { @@ -2547,7 +2548,7 @@ a.status-card.compact:hover { } .column-header__collapsible-inner { - background: #3f3f3f; + background: var(--background-color); padding: 15px; } @@ -4684,6 +4685,7 @@ noscript { } .wtf-panel { + @include light-theme-shadow; display: flex; width: 100%; border-radius: 10px; diff --git a/app/styles/soapbox/components/user-panel.scss b/app/styles/soapbox/components/user-panel.scss index 6ec6aefda..5a4b4861a 100644 --- a/app/styles/soapbox/components/user-panel.scss +++ b/app/styles/soapbox/components/user-panel.scss @@ -38,6 +38,7 @@ &__meta { display: block; padding: 6px 20px 17px; + opacity: 0.6; } &__account { From 9d242a403b775a920801f4f3abe33206247e4d64 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 23:09:21 -0500 Subject: [PATCH 27/46] Simplify Webpack CSS --- app/index.ejs | 12 - app/styles/soapbox-light/diff.scss | 384 ------------------------ app/styles/soapbox-light/variables.scss | 39 --- webpack/config/themes.yml | 2 - webpack/configuration.js | 4 - webpack/shared.js | 10 +- 6 files changed, 3 insertions(+), 448 deletions(-) delete mode 100644 app/styles/soapbox-light/diff.scss delete mode 100644 app/styles/soapbox-light/variables.scss delete mode 100644 webpack/config/themes.yml diff --git a/app/index.ejs b/app/index.ejs index 2a2aa1bee..4ccca8631 100644 --- a/app/index.ejs +++ b/app/index.ejs @@ -5,18 +5,6 @@ Soapbox - <%= htmlWebpackPlugin.tags.headTags.map(t => { - if (t.attributes['href'].startsWith('/packs/css/azure')) t.attributes['data-react-helmet'] = "true"; - return t; - }).join("\n ") %> - <%= htmlWebpackPlugin.tags.bodyTags.join("\n ") %> - diff --git a/app/styles/soapbox-light/diff.scss b/app/styles/soapbox-light/diff.scss deleted file mode 100644 index eac696bf8..000000000 --- a/app/styles/soapbox-light/diff.scss +++ /dev/null @@ -1,384 +0,0 @@ -// // Notes! -// // Sass color functions, "darken" and "lighten" are automatically replaced. -// -// // Change the colors of button texts -// .button { -// color: #ffffff; -// -// &.button-alternative-2 { -// color: #000; -// } -// } -// -// .drawer__inner { -// background: var(--brand-color-med); -// } -// -// .drawer__inner__soapbox { -// background: var(--brand-color-med) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; -// } -// -// // Change the colors used in compose-form -// .compose-form { -// .compose-form__modifiers { -// .compose-form__upload-description input { -// color: lighten(#ffffff, 7%); -// &::placeholder {color: lighten(#ffffff, 7%);} -// } -// } -// -// .autosuggest-textarea__suggestions { -// background: darken($ui-base-color, 6%); -// } -// -// .autosuggest-textarea__suggestions__item { -// &:hover, -// &:focus, -// &:active, -// &.selected { -// background: var(--brand-color-faint); -// } -// } -// } -// -// .emoji-mart-bar { -// border-color: var(--brand-color-faint); -// -// &:first-child { -// background: darken($ui-base-color, 6%); -// } -// } -// -// .emoji-mart-search input { -// background: rgba($ui-base-color, 0.3); -// border-color: var(--brand-color-med); -// } -// -// // Change the background colors of statuses -// .focusable:focus { -// background: var(--brand-color-faint); -// } -// -// .status.status-direct { -// background: var(--brand-color-faint); -// } -// -// .focusable:focus .status.status-direct { -// background: var(--brand-color-med); -// } -// -// // Change the background colors of status__content__spoiler-link -// .reply-indicator__content .status__content__spoiler-link, -// .status__content .status__content__spoiler-link { -// background: $ui-base-lighter-color; -// -// &:hover { -// background: lighten($ui-base-lighter-color, 6%); -// } -// } -// -// // Change the background colors of media and video spoilers -// .media-spoiler, -// .video-player__spoiler { -// background: var(--brand-color-med); -// } -// -// // Change the colors used in the dropdown menu -// .dropdown-menu { -// &__item { -// a { -// color: var(--primary-text-color-faint); -// } -// } -// } -// -// // Change the text colors on inverted background -// .privacy-dropdown__option.active .privacy-dropdown__option__content, -// .privacy-dropdown__option.active .privacy-dropdown__option__content strong, -// .privacy-dropdown__option:hover .privacy-dropdown__option__content, -// .privacy-dropdown__option:hover .privacy-dropdown__option__content strong, -// .actions-modal ul li:not(:empty) a.active, -// .actions-modal ul li:not(:empty) a.active button, -// .actions-modal ul li:not(:empty) a:active, -// .actions-modal ul li:not(:empty) a:active button, -// .actions-modal ul li:not(:empty) a:focus, -// .actions-modal ul li:not(:empty) a:focus button, -// .actions-modal ul li:not(:empty) a:hover, -// .actions-modal ul li:not(:empty) a:hover button, -// .simple_form .block-button, -// .simple_form .button, -// .simple_form button { -// color: #ffffff; -// } -// -// .dropdown-menu__separator { -// border-bottom-color: var(--brand-color-med); -// } -// -// // Change the background colors of modals -// .actions-modal, -// .boost-modal, -// .confirmation-modal, -// .mute-modal, -// .report-modal, -// .error-modal, -// .onboarding-modal { -// background: var(--brand-color-med); -// } -// -// .embed-modal { -// background: #333; -// color: #fff; -// } -// -// .boost-modal__action-bar, -// .confirmation-modal__action-bar, -// .mute-modal__action-bar, -// .onboarding-modal__paginator, -// .error-modal__footer { -// background: darken($ui-base-color, 6%); -// -// .onboarding-modal__nav, -// .error-modal__nav { -// &:hover, -// &:focus, -// &:active { -// background-color: darken($ui-base-color, 12%); -// } -// } -// } -// -// .display-case__case { -// background: #ffffff; -// } -// -// .embed-modal .embed-modal__container .embed-modal__html { -// background: #ffffff; -// -// &:focus { -// background: darken($ui-base-color, 6%); -// } -// } -// -// .react-toggle-track { -// background: $ui-secondary-color; -// } -// -// .react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { -// background: darken($ui-secondary-color, 10%); -// } -// -// .react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { -// background: lighten($gab-brand-default, 10%); -// } -// -// // Change the default color used for the text in an empty column or on the error column -// .empty-column-indicator, -// .error-column { -// color: var(--primary-text-color); -// background: #ffffff; -// } -// -// // Change the default colors used on some parts of the profile pages -// .activity-stream-tabs { -// background: $account-background-color; -// border-bottom-color: var(--brand-color-med); -// } -// -// .activity-stream { -// .entry { -// background: $account-background-color; -// -// .detailed-status.light, -// .more.light, -// .status.light { -// border-bottom-color: var(--brand-color-med); -// } -// } -// -// .status.light { -// .status__content { -// color: var(--primary-text-color); -// } -// -// .display-name { -// strong { -// color: var(--primary-text-color); -// } -// } -// } -// } -// -// .accounts-grid { -// .account-grid-card { -// -// .name { -// a { -// color: var(--primary-text-color); -// } -// } -// -// .username { -// color: var(--primary-text-color-faint); -// } -// -// .account__header__content { -// color: var(--primary-text-color); -// } -// } -// } -// -// .simple_form, -// .table-form { -// .warning { -// box-shadow: none; -// background: rgba($error-red, 0.5); -// text-shadow: none; -// } -// } -// -// .simple_form input[type="text"], -// .simple_form input[type="number"], -// .simple_form input[type="email"], -// .simple_form input[type="password"], -// .simple_form textarea { -// border-color: var(--brand-color); -// -// &:hover { -// border-color: var(--brand-color); -// } -// } -// -// .simple_form select, -// .admin select.dropdown { -// border-color: var(--primary-text-color-faint); -// } -// -// .button.logo-button { -// color: #ffffff; -// -// svg { -// fill: #ffffff; -// } -// } -// -// .public-layout { -// .header, -// .public-account-header, -// .public-account-bio { -// box-shadow: none; -// } -// -// .public-account-header { -// &__image { -// background: var(--brand-color-med); -// -// &::after { -// box-shadow: none; -// } -// } -// -// &__tabs { -// &__name { -// h1, -// h1 small { -// color: #ffffff; -// } -// } -// } -// } -// } -// -// .account__section-headline a.active::after { -// border-color: transparent transparent #ffffff; -// } -// -// .hero-widget, -// .box-widget, -// .contact-widget, -// .landing-page__information.contact-widget, -// .moved-account-widget, -// .memoriam-widget, -// .activity-stream, -// .nothing-here, -// .directory__tag > a, -// .directory__tag > div { -// box-shadow: none; -// } -// -// .btngroup__btn--active { -// color: #fff; -// } -// -// .wtf-panel { -// @include light-theme-shadow; -// background: var(--foreground-color); -// } -// -// .profile-info-panel .profile-info-panel-content span, -// .profile-info-panel .profile-info-panel-content__name h1, -// .profile-info-panel .profile-info-panel-content__name h1 span:first-of-type { -// color: $gab-default-text-light; -// } -// -// .group-card .group-card__header img { -// background: var(--foreground-color); -// } -// -// .group .group__header { -// background: var(--foreground-color); -// } -// -// .group .group__panel .group__panel__label { -// background: var(--foreground-color); -// } -// -// .group .group__feed { -// background: var(--foreground-color); -// } -// -// input[type='text'], -// textarea { -// &.standard { -// @include input-placeholder($gab-secondary-text); -// color: $gab-placeholder-accent; -// border-color: var(--primary-text-color-faint); -// background: $gab-background-base-light; -// } -// } -// -// -// .boost-modal, -// .confirmation-modal, -// .report-modal, -// .actions-modal, -// .mute-modal { -// color: $gab-default-text-light; -// } -// -// .report-modal__statuses { -// .status__content, -// .status__content p { -// color: $gab-default-text-light; -// } -// } -// -// .user-panel__header { -// background: darken($gab-background-container-light, 4%); -// } -// -// .user-panel__profile .account__avatar { -// border: 6px solid $gab-background-base-light; -// } -// -// .user-panel .user-panel-stats-item__value { -// color: $gab-default-text-light; -// } -// -// .poll__text { -// color: $gab-default-text-light; -// } -// -// .fa-site-icon::before { -// filter: grayscale(100%) invert(0); -// } diff --git a/app/styles/soapbox-light/variables.scss b/app/styles/soapbox-light/variables.scss deleted file mode 100644 index 79173d7bd..000000000 --- a/app/styles/soapbox-light/variables.scss +++ /dev/null @@ -1,39 +0,0 @@ -$light-theme: true; -$gab-background: #f6f2f6; - -$classic-base-color: #282c37; -$classic-primary-color: #9baec8; -$classic-secondary-color: lighten(#be9bc8, 30%); -$classic-highlight-color: #2b90d9; - -// Differences -$success-green: #3c754d; - -$base-overlay-background: #ffffff !default; -$valid-value-color: $success-green !default; - -$ui-base-color: $classic-secondary-color !default; -$ui-base-lighter-color: #f4c6f4; -$ui-primary-color: #9bcbed; -$ui-secondary-color: $classic-base-color !default; -$ui-highlight-color: #990099; - -$darker-text-color: $classic-base-color !default; -$dark-text-color: #444b5d; -$action-button-color: #606984; - -$inverted-text-color: #000000 !default; -$lighter-text-color: $classic-base-color !default; -$light-text-color: #444b5d; - -//Newly added colors -$account-background-color: #ffffff !default; - -//Invert darkened and lightened colors -@function darken($color, $amount) { - @return hsl(hue($color), saturation($color), lightness($color) + $amount); -} - -@function lighten($color, $amount) { - @return hsl(hue($color), saturation($color), lightness($color) - $amount); -} diff --git a/webpack/config/themes.yml b/webpack/config/themes.yml deleted file mode 100644 index 17dc07cd3..000000000 --- a/webpack/config/themes.yml +++ /dev/null @@ -1,2 +0,0 @@ -azure: styles/azure.scss -purple-dark: styles/application.scss diff --git a/webpack/configuration.js b/webpack/configuration.js index 0af340386..703119e3a 100644 --- a/webpack/configuration.js +++ b/webpack/configuration.js @@ -8,9 +8,6 @@ const { readFileSync } = require('fs'); const configPath = join(__dirname, 'config', 'webpacker.yml'); const settings = safeLoad(readFileSync(configPath), 'utf8')[env.NODE_ENV]; -const themePath = join(__dirname, 'config', 'themes.yml'); -const themes = safeLoad(readFileSync(themePath), 'utf8'); - function removeOuterSlashes(string) { return string.replace(/^\/*/, '').replace(/\/*$/, ''); } @@ -31,7 +28,6 @@ const output = { module.exports = { settings, - themes, env: { CDN_HOST: env.CDN_HOST, NODE_ENV: env.NODE_ENV, diff --git a/webpack/shared.js b/webpack/shared.js index 740c33f22..643309192 100644 --- a/webpack/shared.js +++ b/webpack/shared.js @@ -7,7 +7,7 @@ const AssetsManifestPlugin = require('webpack-assets-manifest'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin'); const extname = require('path-complete-extname'); -const { env, settings, themes, output } = require('./configuration'); +const { env, settings, output } = require('./configuration'); const rules = require('./rules'); const localePackPaths = require('./generateLocalePacks'); @@ -19,10 +19,7 @@ module.exports = { localMap[basename(entry, extname(entry, extname(entry)))] = resolve(entry); return localMap; }, {}), - Object.keys(themes).reduce((themePaths, name) => { - themePaths[name] = resolve(join(settings.source_path, themes[name])); - return themePaths; - }, {}) + { styles: resolve(join(settings.source_path, 'styles/application.scss')) } ), output: { @@ -78,10 +75,9 @@ module.exports = { }), // https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ - inject: false, template: 'app/index.ejs', chunksSortMode: 'manual', - chunks: ['common', 'locale_en', 'application', 'azure'], + chunks: ['common', 'locale_en', 'application', 'styles'], alwaysWriteToDisk: true, }), new HtmlWebpackHarddiskPlugin({ From 9e0010e2cedf1176994bed05f2a303d0211d7f34 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 23:18:39 -0500 Subject: [PATCH 28/46] Merge azure.scss and delete it --- app/styles/azure.scss | 77 --------------------- app/styles/soapbox/_mixins.scss | 5 +- app/styles/soapbox/components.scss | 2 +- app/styles/soapbox/components/tabs-bar.scss | 44 ++++++++++-- 4 files changed, 41 insertions(+), 87 deletions(-) delete mode 100644 app/styles/azure.scss diff --git a/app/styles/azure.scss b/app/styles/azure.scss deleted file mode 100644 index ccf45b00f..000000000 --- a/app/styles/azure.scss +++ /dev/null @@ -1,77 +0,0 @@ -@import 'soapbox-light/variables'; - -$gab-brand-default: #0482d8; -$gab-background-base-light: #f2f3f6; -$gab-background: $gab-background-base-light; -$ui-base-color: #d9f2f9; -$ui-highlight-color: $gab-brand-default; -$nav-ui-highlight-color: #149dfb; -$ui-base-lighter-color: #b0c0cf; - -@import 'application'; -@import 'soapbox-light/diff'; - -.tabs-bar__link { - font-weight: bold; - transition: 0.1s; - outline: none; - - &::before { - bottom: auto; - opacity: 0; - height: 15px; - border-radius: 999px; - z-index: -1; - width: calc(100% + 20px); - margin-left: -12px; - - @media screen and (max-width: 895px) { - height: 0; - border-radius: 3px 3px 0 0; - bottom: 0; - } - } - - &.active::before, - &:hover::before { - height: 30px; - opacity: 1; - - @media screen and (max-width: 895px) { - height: 7px; - width: 36px; - margin: 0; - } - } - -} - -.tabs-bar__split--left:hover .tabs-bar__link { - &::before { - height: 15px; - opacity: 0; - - @media screen and (max-width: 895px) { - height: 0; - } - } - - &:hover::before { - height: 30px; - opacity: 1; - - @media screen and (max-width: 895px) { - height: 7px; - } - } -} - -.search__input { - border-radius: 999px; - border: 0; - padding-left: 15px; -} - -.search__icon .fa { - right: 8px; -} diff --git a/app/styles/soapbox/_mixins.scss b/app/styles/soapbox/_mixins.scss index ea2e30969..2d899e45d 100644 --- a/app/styles/soapbox/_mixins.scss +++ b/app/styles/soapbox/_mixins.scss @@ -39,13 +39,14 @@ outline: 0; box-sizing: border-box; width: 100%; - border: 1px $gab-placeholder-accent solid; box-shadow: none; font-family: inherit; background: var(--background-color); color: var(--highlight-text-color); margin: 0; - border-radius: 4px; + border-radius: 999px; + border: 0; + padding-left: 15px; // Chrome does not like these concatinated together &::placeholder {color: $gab-placeholder-accent;} diff --git a/app/styles/soapbox/components.scss b/app/styles/soapbox/components.scss index a8cd66b90..ec417f727 100644 --- a/app/styles/soapbox/components.scss +++ b/app/styles/soapbox/components.scss @@ -3338,7 +3338,7 @@ a.status-card.compact:hover { display: inline-block; position: absolute; top: 8px; - right: 6px; + right: 8px; z-index: 2; width: 18px; height: 18px; diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/soapbox/components/tabs-bar.scss index 5ef20c826..ce5e1888a 100644 --- a/app/styles/soapbox/components/tabs-bar.scss +++ b/app/styles/soapbox/components/tabs-bar.scss @@ -150,6 +150,9 @@ position: relative; align-items: center; padding-right: 4px; + font-weight: bold; + transition: 0.1s; + outline: none; @media screen and (max-width: 895px) { width: 36px; @@ -201,18 +204,35 @@ &::before { content: ""; display: block; - width: 100%; - height: 0; background: var(--accent-color); position: absolute; - bottom: 0; - left: 0; transition: 0.2s; + left: 0; + bottom: auto; + opacity: 0; + height: 15px; + border-radius: 999px; + z-index: -1; + width: calc(100% + 20px); + margin-left: -12px; + + @media screen and (max-width: 895px) { + height: 0; + border-radius: 3px 3px 0 0; + bottom: 0; + } } &.active::before, &:hover::before { - height: 7px; + height: 30px; + opacity: 1; + + @media screen and (max-width: 895px) { + height: 7px; + width: 36px; + margin: 0; + } } &--logo { @@ -247,10 +267,20 @@ .tabs-bar__split--left:hover .tabs-bar__link { &::before { - height: 0; + height: 15px; + opacity: 0; + + @media screen and (max-width: 895px) { + height: 0; + } } &:hover::before { - height: 7px; + height: 30px; + opacity: 1; + + @media screen and (max-width: 895px) { + height: 7px; + } } } From 6b6c9f41ea158c6eb17d1871c2cdd723bf8031c2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 23:21:25 -0500 Subject: [PATCH 29/46] Reorganize styles directory --- app/styles/{soapbox => }/_mixins.scss | 0 app/styles/{soapbox => }/about.scss | 0 app/styles/{soapbox => }/accessibility.scss | 0 app/styles/{soapbox => }/accounts.scss | 0 app/styles/application.scss | 86 +++++++++---------- app/styles/{soapbox => }/basics.scss | 0 app/styles/{soapbox => }/boost.scss | 0 app/styles/{soapbox => }/compact_header.scss | 0 app/styles/{soapbox => }/components.scss | 0 .../components/account-header.scss | 0 .../{soapbox => }/components/buttons.scss | 0 .../components/compose-form.scss | 0 .../components/detailed-status.scss | 0 .../components/dropdown-menu.scss | 0 .../components/emoji-reacts.scss | 0 .../{soapbox => }/components/group-card.scss | 0 .../components/group-detail.scss | 0 .../{soapbox => }/components/group-form.scss | 0 .../components/group-sidebar-panel.scss | 0 .../components/hotkeys-modal.scss | 0 .../{soapbox => }/components/inputs.scss | 0 .../{soapbox => }/components/modal.scss | 0 .../components/sidebar-menu.scss | 0 .../{soapbox => }/components/tabs-bar.scss | 0 .../{soapbox => }/components/user-panel.scss | 0 app/styles/{soapbox => }/containers.scss | 0 app/styles/{soapbox => }/dashboard.scss | 0 app/styles/{soapbox => }/demetricator.scss | 0 app/styles/{soapbox => }/donations.scss | 0 app/styles/{soapbox => }/dyslexic.scss | 0 app/styles/{soapbox => }/emoji_picker.scss | 0 app/styles/{soapbox => }/fonts.scss | 0 app/styles/{soapbox => }/footer.scss | 0 app/styles/{soapbox => }/forms.scss | 0 app/styles/{soapbox => }/introduction.scss | 0 app/styles/{soapbox => }/lists.scss | 0 app/styles/{soapbox => }/modal.scss | 0 app/styles/{soapbox => }/polls.scss | 0 app/styles/{soapbox => }/pro.scss | 0 app/styles/{soapbox => }/reset.scss | 0 app/styles/{soapbox => }/rtl.scss | 0 app/styles/{soapbox => }/stream_entries.scss | 0 app/styles/{soapbox => }/tables.scss | 0 app/styles/{soapbox => }/variables.scss | 0 app/styles/{soapbox => }/widgets.scss | 0 45 files changed, 43 insertions(+), 43 deletions(-) rename app/styles/{soapbox => }/_mixins.scss (100%) rename app/styles/{soapbox => }/about.scss (100%) rename app/styles/{soapbox => }/accessibility.scss (100%) rename app/styles/{soapbox => }/accounts.scss (100%) rename app/styles/{soapbox => }/basics.scss (100%) rename app/styles/{soapbox => }/boost.scss (100%) rename app/styles/{soapbox => }/compact_header.scss (100%) rename app/styles/{soapbox => }/components.scss (100%) rename app/styles/{soapbox => }/components/account-header.scss (100%) rename app/styles/{soapbox => }/components/buttons.scss (100%) rename app/styles/{soapbox => }/components/compose-form.scss (100%) rename app/styles/{soapbox => }/components/detailed-status.scss (100%) rename app/styles/{soapbox => }/components/dropdown-menu.scss (100%) rename app/styles/{soapbox => }/components/emoji-reacts.scss (100%) rename app/styles/{soapbox => }/components/group-card.scss (100%) rename app/styles/{soapbox => }/components/group-detail.scss (100%) rename app/styles/{soapbox => }/components/group-form.scss (100%) rename app/styles/{soapbox => }/components/group-sidebar-panel.scss (100%) rename app/styles/{soapbox => }/components/hotkeys-modal.scss (100%) rename app/styles/{soapbox => }/components/inputs.scss (100%) rename app/styles/{soapbox => }/components/modal.scss (100%) rename app/styles/{soapbox => }/components/sidebar-menu.scss (100%) rename app/styles/{soapbox => }/components/tabs-bar.scss (100%) rename app/styles/{soapbox => }/components/user-panel.scss (100%) rename app/styles/{soapbox => }/containers.scss (100%) rename app/styles/{soapbox => }/dashboard.scss (100%) rename app/styles/{soapbox => }/demetricator.scss (100%) rename app/styles/{soapbox => }/donations.scss (100%) rename app/styles/{soapbox => }/dyslexic.scss (100%) rename app/styles/{soapbox => }/emoji_picker.scss (100%) rename app/styles/{soapbox => }/fonts.scss (100%) rename app/styles/{soapbox => }/footer.scss (100%) rename app/styles/{soapbox => }/forms.scss (100%) rename app/styles/{soapbox => }/introduction.scss (100%) rename app/styles/{soapbox => }/lists.scss (100%) rename app/styles/{soapbox => }/modal.scss (100%) rename app/styles/{soapbox => }/polls.scss (100%) rename app/styles/{soapbox => }/pro.scss (100%) rename app/styles/{soapbox => }/reset.scss (100%) rename app/styles/{soapbox => }/rtl.scss (100%) rename app/styles/{soapbox => }/stream_entries.scss (100%) rename app/styles/{soapbox => }/tables.scss (100%) rename app/styles/{soapbox => }/variables.scss (100%) rename app/styles/{soapbox => }/widgets.scss (100%) diff --git a/app/styles/soapbox/_mixins.scss b/app/styles/_mixins.scss similarity index 100% rename from app/styles/soapbox/_mixins.scss rename to app/styles/_mixins.scss diff --git a/app/styles/soapbox/about.scss b/app/styles/about.scss similarity index 100% rename from app/styles/soapbox/about.scss rename to app/styles/about.scss diff --git a/app/styles/soapbox/accessibility.scss b/app/styles/accessibility.scss similarity index 100% rename from app/styles/soapbox/accessibility.scss rename to app/styles/accessibility.scss diff --git a/app/styles/soapbox/accounts.scss b/app/styles/accounts.scss similarity index 100% rename from app/styles/soapbox/accounts.scss rename to app/styles/accounts.scss diff --git a/app/styles/application.scss b/app/styles/application.scss index 0fe9ed5d7..0f5cfbe2d 100644 --- a/app/styles/application.scss +++ b/app/styles/application.scss @@ -1,48 +1,48 @@ -@import 'soapbox/mixins'; -@import 'soapbox/variables'; -@import 'soapbox/fonts'; -@import 'soapbox/reset'; -@import 'soapbox/basics'; -@import 'soapbox/containers'; -@import 'soapbox/lists'; -@import 'soapbox/footer'; -@import 'soapbox/compact_header'; -@import 'soapbox/widgets'; -@import 'soapbox/forms'; -@import 'soapbox/accounts'; -@import 'soapbox/stream_entries'; -@import 'soapbox/boost'; +@import 'mixins'; +@import 'variables'; +@import 'fonts'; +@import 'reset'; +@import 'basics'; +@import 'containers'; +@import 'lists'; +@import 'footer'; +@import 'compact_header'; +@import 'widgets'; +@import 'forms'; +@import 'accounts'; +@import 'stream_entries'; +@import 'boost'; // NOTE - In the process of stripping this giant file into individual components (below) -@import 'soapbox/components'; +@import 'components'; // COMPONENTS -@import 'soapbox/components/buttons'; -@import 'soapbox/components/inputs'; -@import 'soapbox/components/tabs-bar'; -@import 'soapbox/components/dropdown-menu'; -@import 'soapbox/components/modal'; -@import 'soapbox/components/account-header'; -@import 'soapbox/components/user-panel'; -@import 'soapbox/components/compose-form'; -@import 'soapbox/components/group-card'; -@import 'soapbox/components/group-detail'; -@import 'soapbox/components/group-form'; -@import 'soapbox/components/group-sidebar-panel'; -@import 'soapbox/components/sidebar-menu'; -@import 'soapbox/components/hotkeys-modal'; -@import 'soapbox/components/emoji-reacts'; -@import 'soapbox/components/detailed-status'; +@import 'components/buttons'; +@import 'components/inputs'; +@import 'components/tabs-bar'; +@import 'components/dropdown-menu'; +@import 'components/modal'; +@import 'components/account-header'; +@import 'components/user-panel'; +@import 'components/compose-form'; +@import 'components/group-card'; +@import 'components/group-detail'; +@import 'components/group-form'; +@import 'components/group-sidebar-panel'; +@import 'components/sidebar-menu'; +@import 'components/hotkeys-modal'; +@import 'components/emoji-reacts'; +@import 'components/detailed-status'; -@import 'soapbox/polls'; -@import 'soapbox/introduction'; -@import 'soapbox/emoji_picker'; -@import 'soapbox/about'; -@import 'soapbox/tables'; -@import 'soapbox/dashboard'; -@import 'soapbox/rtl'; -@import 'soapbox/accessibility'; -@import 'soapbox/donations'; -@import 'soapbox/dyslexic'; -@import 'soapbox/demetricator'; -@import 'soapbox/pro'; +@import 'polls'; +@import 'introduction'; +@import 'emoji_picker'; +@import 'about'; +@import 'tables'; +@import 'dashboard'; +@import 'rtl'; +@import 'accessibility'; +@import 'donations'; +@import 'dyslexic'; +@import 'demetricator'; +@import 'pro'; diff --git a/app/styles/soapbox/basics.scss b/app/styles/basics.scss similarity index 100% rename from app/styles/soapbox/basics.scss rename to app/styles/basics.scss diff --git a/app/styles/soapbox/boost.scss b/app/styles/boost.scss similarity index 100% rename from app/styles/soapbox/boost.scss rename to app/styles/boost.scss diff --git a/app/styles/soapbox/compact_header.scss b/app/styles/compact_header.scss similarity index 100% rename from app/styles/soapbox/compact_header.scss rename to app/styles/compact_header.scss diff --git a/app/styles/soapbox/components.scss b/app/styles/components.scss similarity index 100% rename from app/styles/soapbox/components.scss rename to app/styles/components.scss diff --git a/app/styles/soapbox/components/account-header.scss b/app/styles/components/account-header.scss similarity index 100% rename from app/styles/soapbox/components/account-header.scss rename to app/styles/components/account-header.scss diff --git a/app/styles/soapbox/components/buttons.scss b/app/styles/components/buttons.scss similarity index 100% rename from app/styles/soapbox/components/buttons.scss rename to app/styles/components/buttons.scss diff --git a/app/styles/soapbox/components/compose-form.scss b/app/styles/components/compose-form.scss similarity index 100% rename from app/styles/soapbox/components/compose-form.scss rename to app/styles/components/compose-form.scss diff --git a/app/styles/soapbox/components/detailed-status.scss b/app/styles/components/detailed-status.scss similarity index 100% rename from app/styles/soapbox/components/detailed-status.scss rename to app/styles/components/detailed-status.scss diff --git a/app/styles/soapbox/components/dropdown-menu.scss b/app/styles/components/dropdown-menu.scss similarity index 100% rename from app/styles/soapbox/components/dropdown-menu.scss rename to app/styles/components/dropdown-menu.scss diff --git a/app/styles/soapbox/components/emoji-reacts.scss b/app/styles/components/emoji-reacts.scss similarity index 100% rename from app/styles/soapbox/components/emoji-reacts.scss rename to app/styles/components/emoji-reacts.scss diff --git a/app/styles/soapbox/components/group-card.scss b/app/styles/components/group-card.scss similarity index 100% rename from app/styles/soapbox/components/group-card.scss rename to app/styles/components/group-card.scss diff --git a/app/styles/soapbox/components/group-detail.scss b/app/styles/components/group-detail.scss similarity index 100% rename from app/styles/soapbox/components/group-detail.scss rename to app/styles/components/group-detail.scss diff --git a/app/styles/soapbox/components/group-form.scss b/app/styles/components/group-form.scss similarity index 100% rename from app/styles/soapbox/components/group-form.scss rename to app/styles/components/group-form.scss diff --git a/app/styles/soapbox/components/group-sidebar-panel.scss b/app/styles/components/group-sidebar-panel.scss similarity index 100% rename from app/styles/soapbox/components/group-sidebar-panel.scss rename to app/styles/components/group-sidebar-panel.scss diff --git a/app/styles/soapbox/components/hotkeys-modal.scss b/app/styles/components/hotkeys-modal.scss similarity index 100% rename from app/styles/soapbox/components/hotkeys-modal.scss rename to app/styles/components/hotkeys-modal.scss diff --git a/app/styles/soapbox/components/inputs.scss b/app/styles/components/inputs.scss similarity index 100% rename from app/styles/soapbox/components/inputs.scss rename to app/styles/components/inputs.scss diff --git a/app/styles/soapbox/components/modal.scss b/app/styles/components/modal.scss similarity index 100% rename from app/styles/soapbox/components/modal.scss rename to app/styles/components/modal.scss diff --git a/app/styles/soapbox/components/sidebar-menu.scss b/app/styles/components/sidebar-menu.scss similarity index 100% rename from app/styles/soapbox/components/sidebar-menu.scss rename to app/styles/components/sidebar-menu.scss diff --git a/app/styles/soapbox/components/tabs-bar.scss b/app/styles/components/tabs-bar.scss similarity index 100% rename from app/styles/soapbox/components/tabs-bar.scss rename to app/styles/components/tabs-bar.scss diff --git a/app/styles/soapbox/components/user-panel.scss b/app/styles/components/user-panel.scss similarity index 100% rename from app/styles/soapbox/components/user-panel.scss rename to app/styles/components/user-panel.scss diff --git a/app/styles/soapbox/containers.scss b/app/styles/containers.scss similarity index 100% rename from app/styles/soapbox/containers.scss rename to app/styles/containers.scss diff --git a/app/styles/soapbox/dashboard.scss b/app/styles/dashboard.scss similarity index 100% rename from app/styles/soapbox/dashboard.scss rename to app/styles/dashboard.scss diff --git a/app/styles/soapbox/demetricator.scss b/app/styles/demetricator.scss similarity index 100% rename from app/styles/soapbox/demetricator.scss rename to app/styles/demetricator.scss diff --git a/app/styles/soapbox/donations.scss b/app/styles/donations.scss similarity index 100% rename from app/styles/soapbox/donations.scss rename to app/styles/donations.scss diff --git a/app/styles/soapbox/dyslexic.scss b/app/styles/dyslexic.scss similarity index 100% rename from app/styles/soapbox/dyslexic.scss rename to app/styles/dyslexic.scss diff --git a/app/styles/soapbox/emoji_picker.scss b/app/styles/emoji_picker.scss similarity index 100% rename from app/styles/soapbox/emoji_picker.scss rename to app/styles/emoji_picker.scss diff --git a/app/styles/soapbox/fonts.scss b/app/styles/fonts.scss similarity index 100% rename from app/styles/soapbox/fonts.scss rename to app/styles/fonts.scss diff --git a/app/styles/soapbox/footer.scss b/app/styles/footer.scss similarity index 100% rename from app/styles/soapbox/footer.scss rename to app/styles/footer.scss diff --git a/app/styles/soapbox/forms.scss b/app/styles/forms.scss similarity index 100% rename from app/styles/soapbox/forms.scss rename to app/styles/forms.scss diff --git a/app/styles/soapbox/introduction.scss b/app/styles/introduction.scss similarity index 100% rename from app/styles/soapbox/introduction.scss rename to app/styles/introduction.scss diff --git a/app/styles/soapbox/lists.scss b/app/styles/lists.scss similarity index 100% rename from app/styles/soapbox/lists.scss rename to app/styles/lists.scss diff --git a/app/styles/soapbox/modal.scss b/app/styles/modal.scss similarity index 100% rename from app/styles/soapbox/modal.scss rename to app/styles/modal.scss diff --git a/app/styles/soapbox/polls.scss b/app/styles/polls.scss similarity index 100% rename from app/styles/soapbox/polls.scss rename to app/styles/polls.scss diff --git a/app/styles/soapbox/pro.scss b/app/styles/pro.scss similarity index 100% rename from app/styles/soapbox/pro.scss rename to app/styles/pro.scss diff --git a/app/styles/soapbox/reset.scss b/app/styles/reset.scss similarity index 100% rename from app/styles/soapbox/reset.scss rename to app/styles/reset.scss diff --git a/app/styles/soapbox/rtl.scss b/app/styles/rtl.scss similarity index 100% rename from app/styles/soapbox/rtl.scss rename to app/styles/rtl.scss diff --git a/app/styles/soapbox/stream_entries.scss b/app/styles/stream_entries.scss similarity index 100% rename from app/styles/soapbox/stream_entries.scss rename to app/styles/stream_entries.scss diff --git a/app/styles/soapbox/tables.scss b/app/styles/tables.scss similarity index 100% rename from app/styles/soapbox/tables.scss rename to app/styles/tables.scss diff --git a/app/styles/soapbox/variables.scss b/app/styles/variables.scss similarity index 100% rename from app/styles/soapbox/variables.scss rename to app/styles/variables.scss diff --git a/app/styles/soapbox/widgets.scss b/app/styles/widgets.scss similarity index 100% rename from app/styles/soapbox/widgets.scss rename to app/styles/widgets.scss From 3a7178300faf30177f1158280a04f8f74a06bd61 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 31 May 2020 23:24:31 -0500 Subject: [PATCH 30/46] Delete spaces in rgba colors --- app/soapbox/reducers/theme.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 81b9912b1..f4582473a 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -10,13 +10,13 @@ const initialState = ImmutableMap(); const modes = ImmutableMap({ light: ImmutableMap({ 'primary-text-color': '#000000', - 'primary-text-color-faint': 'rgba(0, 0, 0, 0.6)', + 'primary-text-color-faint': 'rgba(0,0,0,0.6)', 'background-color': '#f2f2f2', 'foreground-color': '#ffffff', }), dark: ImmutableMap({ 'primary-text-color': '#ffffff', - 'primary-text-color-faint': 'rgba(255, 255, 255, 0.6)', + 'primary-text-color-faint': 'rgba(255,255,255,0.6)', 'background-color': '#333333', 'foreground-color': '#222222', }), From 3fc5d7a83c97902d54a63e39145d90fc697616c6 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 1 Jun 2020 00:49:43 -0500 Subject: [PATCH 31/46] Get theme from soapbox.json --- app/soapbox/actions/soapbox.js | 4 ++++ app/soapbox/containers/soapbox.js | 9 +-------- app/soapbox/reducers/theme.js | 3 ++- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/soapbox/actions/soapbox.js b/app/soapbox/actions/soapbox.js index 7da3be86d..4e0b41f5f 100644 --- a/app/soapbox/actions/soapbox.js +++ b/app/soapbox/actions/soapbox.js @@ -1,4 +1,6 @@ import api from '../api'; +import { get } from 'lodash'; +import { generateTheme } from 'soapbox/actions/theme'; export const SOAPBOX_CONFIG_IMPORT = 'SOAPBOX_CONFIG_IMPORT'; export const SOAPBOX_CONFIG_FAIL = 'SOAPBOX_CONFIG_FAIL'; @@ -6,7 +8,9 @@ export const SOAPBOX_CONFIG_FAIL = 'SOAPBOX_CONFIG_FAIL'; export function fetchSoapboxConfig() { return (dispatch, getState) => { api(getState).get('/instance/soapbox.json').then(response => { + const { brandColor, mode } = get(response.data, 'theme'); dispatch(importSoapboxConfig(response.data)); + dispatch(generateTheme(brandColor, mode)); }).catch(error => { dispatch(soapboxConfigFail(error)); }); diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index 878f78b3c..b668b5a57 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -44,7 +44,6 @@ const mapStateToProps = (state) => { return { showIntroduction, me, - theme: settings.get('theme'), reduceMotion: settings.get('reduceMotion'), systemFont: settings.get('systemFont'), dyslexicFont: settings.get('dyslexicFont'), @@ -60,7 +59,6 @@ class SoapboxMount extends React.PureComponent { static propTypes = { showIntroduction: PropTypes.bool, me: SoapboxPropTypes.me, - theme: PropTypes.string, reduceMotion: PropTypes.bool, systemFont: PropTypes.bool, dyslexicFont: PropTypes.bool, @@ -70,12 +68,8 @@ class SoapboxMount extends React.PureComponent { dispatch: PropTypes.func, }; - componentDidMount() { - this.props.dispatch(generateTheme('#bb0000', 'light')); - } - render() { - const { me, theme, themeCss, reduceMotion, systemFont, dyslexicFont, demetricator, locale } = this.props; + const { me, themeCss, reduceMotion, systemFont, dyslexicFont, demetricator, locale } = this.props; if (me === null) return null; const { localeData, messages } = getLocale(); @@ -89,7 +83,6 @@ class SoapboxMount extends React.PureComponent { // } const bodyClass = classNames('app-body', { - [`theme-${theme}`]: theme, 'system-font': systemFont, 'no-reduce-motion': !reduceMotion, 'dyslexic': dyslexicFont, diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index f4582473a..42f379b68 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -32,7 +32,8 @@ const makeContrast = (percent, color, mode) => { return brightness(percent, color); }; -export const generateTheme = (brandColor, mode) => { +export const generateTheme = (brandColor, mode = 'light') => { + if (!brandColor) return modes.get(mode); return modes.get(mode).merge(ImmutableMap({ 'brand-color': brandColor, 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, From d4a88c02435ad043d457f70bb223ebad68b2d33e Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 1 Jun 2020 08:31:42 -0500 Subject: [PATCH 32/46] Remove unused import --- app/soapbox/containers/soapbox.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index b668b5a57..cd9a43195 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -24,7 +24,6 @@ import { fetchMe } from 'soapbox/actions/me'; import PublicLayout from 'soapbox/features/public_layout'; import { getSettings } from 'soapbox/actions/settings'; import { themeDataToCss } from 'soapbox/utils/theme'; -import { generateTheme } from 'soapbox/actions/theme'; export const store = configureStore(); const hydrateAction = hydrateStore(initialState); From be2f26980a5c68f6d753f9f10f55222cc205eda2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 1 Jun 2020 19:53:22 -0500 Subject: [PATCH 33/46] Various color variable replacements --- app/styles/components.scss | 17 +++++++++-------- app/styles/components/account-header.scss | 3 ++- app/styles/components/compose-form.scss | 2 +- app/styles/forms.scss | 14 +++++--------- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/app/styles/components.scss b/app/styles/components.scss index ec417f727..b2134add6 100644 --- a/app/styles/components.scss +++ b/app/styles/components.scss @@ -423,10 +423,11 @@ } .status__content__spoiler-link { - background: $action-button-color; + background: var(--brand-color-med); + transition: 0.2s; &:hover { - background: lighten($action-button-color, 7%); + background: var(--brand-color-faint); text-decoration: none; } @@ -1565,7 +1566,7 @@ a.account__display-name { &:hover, &:focus, &:active { - background-color: darken($nav-ui-highlight-color, 10%) !important; + background-color: var(--brand-color-hicontrast); } i.fa { @@ -2602,7 +2603,7 @@ a.status-card.compact:hover { } .loading-indicator { - color: $dark-text-color; + color: var(--primary-text-color-faint); font-size: 12px; font-weight: 400; text-transform: uppercase; @@ -4880,9 +4881,10 @@ noscript { } &__close { - position: absolute; - right: 10px; - top: 10px; + position: absolute; + right: 10px; + top: 10px; + color: #999; } &__content { @@ -5190,7 +5192,6 @@ noscript { width: 100%; max-height: 46px; position: relative; - background-color: var(--brand-color-faint); border-bottom: 1px solid; border-top: 1px solid; border-color: var(--brand-color-faint); diff --git a/app/styles/components/account-header.scss b/app/styles/components/account-header.scss index d5b081ad3..8778945f9 100644 --- a/app/styles/components/account-header.scss +++ b/app/styles/components/account-header.scss @@ -49,7 +49,7 @@ border-radius: 50%; height: 200px; width: 200px; - background-color: darken($ui-base-color, 8%); + background-color: var(--foreground-color); // NOTE - patch fix for avatar size. Wrapper may not be needed when I do polish up on the page .account__avatar { @@ -57,6 +57,7 @@ height: 200px; background-size: 200px 200px; } + @media screen and (max-width: 895px) { top: -45px; left: 10px; diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss index f97dadc50..35e5b3bb2 100644 --- a/app/styles/components/compose-form.scss +++ b/app/styles/components/compose-form.scss @@ -98,7 +98,7 @@ width: 100%; margin: 0; color: $inverted-text-color; - background: $gab-background-base-light; + background: #f2f2f2; padding: 10px; font-family: inherit; font-size: 14px; diff --git a/app/styles/forms.scss b/app/styles/forms.scss index 5a84ec2cb..2f875f209 100644 --- a/app/styles/forms.scss +++ b/app/styles/forms.scss @@ -318,10 +318,11 @@ code { outline: 0; font-family: inherit; resize: vertical; - background: darken($ui-base-color, 10%); - border: 1px solid darken($ui-base-color, 14%); + background: var(--foreground-color); + border: 1px solid var(--brand-color-faint); border-radius: 4px; padding: 10px; + transition: 0.2s; &:invalid { box-shadow: none; @@ -335,14 +336,9 @@ code { border-color: $valid-value-color; } - &:hover { - border-color: darken($ui-base-color, 20%); - } - &:active, &:focus { border-color: var(--highlight-text-color); - background: darken($ui-base-color, 8%); } } @@ -439,8 +435,8 @@ code { outline: 0; font-family: inherit; resize: vertical; - background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; - border: 1px solid darken($ui-base-color, 14%); + background: var(--foreground-color) url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; + border: 1px solid var(--brand-color-faint); border-radius: 4px; padding-left: 10px; padding-right: 30px; From 6f8ca449843557169aff98b355854ffec56b3f7d Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 1 Jun 2020 23:24:36 -0500 Subject: [PATCH 34/46] Homepage css fixes --- app/soapbox/features/public_layout/index.js | 21 +- app/styles/about.scss | 716 +++++++++++++++++++- app/styles/containers.scss | 691 ------------------- app/styles/forms.scss | 4 +- 4 files changed, 727 insertions(+), 705 deletions(-) diff --git a/app/soapbox/features/public_layout/index.js b/app/soapbox/features/public_layout/index.js index 737220c47..afc04b51f 100644 --- a/app/soapbox/features/public_layout/index.js +++ b/app/soapbox/features/public_layout/index.js @@ -13,6 +13,12 @@ const mapStateToProps = (state, props) => ({ soapbox: state.get('soapbox'), }); +const wave = ( + + + +); + class PublicLayout extends ImmutablePureComponent { render() { @@ -21,12 +27,15 @@ class PublicLayout extends ImmutablePureComponent { return (
-
-
- - - - +
+ {wave} +
+
+ + + + +
diff --git a/app/styles/about.scss b/app/styles/about.scss index 7e6c3d21b..a111afa5b 100644 --- a/app/styles/about.scss +++ b/app/styles/about.scss @@ -3,6 +3,688 @@ $fluid-breakpoint: $maximum-width + 20px; $column-breakpoint: 700px; $small-breakpoint: 960px; +.public-layout { + .container { + width: 100%; + max-width: 960px; + + @media screen and (max-width: $no-gap-breakpoint) { + padding: 0; + } + } + + .content { + display: block; + margin: 40px 0; + background: #fff; + border-radius: 6px; + + @media screen and (max-width: 767px) { + margin-top: 0; + } + } + + .header { + height: 80px; + display: flex; + align-items: stretch; + justify-content: center; + flex-wrap: nowrap; + padding: 14px 0; + box-sizing: border-box; + + @media screen and (max-width: 1024px) { + padding: 14px 20px; + } + + .header-container { + display: flex; + width: 960px; + align-items: stretch; + justify-content: center; + flex-wrap: nowrap; + + & > div { + flex: 1 1 33.3%; + min-height: 1px; + } + } + + .nav-left { + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: nowrap; + } + + .nav-center { + display: flex; + align-items: stretch; + justify-content: center; + flex-wrap: nowrap; + } + + .nav-right { + display: flex; + align-items: center; + justify-content: flex-end; + flex-wrap: nowrap; + + .simple_form.new_user { + display: flex; + flex-direction: row; + align-items: center; + + .fields-group { + display: flex; + flex-direction: row; + margin-bottom: 0; + position: relative; + + p.hint.subtle-hint { + position: absolute; + top: 30px; + left: 160px; + border-radius: 4px; + background: #fff; + overflow: hidden; + + a { + padding: 4px; + background-color: var(--brand-color-med); + } + } + + .input { + margin-bottom: 0; + margin-right: 10px; + + input { + min-width: 150px; + font-size: 14px; + } + } + } + + .actions { + display: flex; + margin-top: 0; + + .button { + margin-bottom: 0 !important; + line-height: 38px !important; + border: 1px solid #333 !important; + height: 38px !important; + box-sizing: border-box !important; + padding: 0 18px !important; + text-transform: none !important; + } + } + } + } + + .brand { + display: block; + + img { + display: block; + height: 30px; + width: auto; + position: relative; + bottom: -2px; + + @media screen and (max-width: $no-gap-breakpoint) { + height: 20px; + } + } + } + + .nav-link { + display: flex; + align-items: center; + padding: 12px 22px; + font-size: 14px; + font-weight: 600; + text-decoration: none; + color: var(--primary-text-color); + white-space: nowrap; + text-align: center; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + color: var(--primary-text-color); + } + + &--hollow { + background-color: var(--brand-color-med); + + &:hover, + &:focus, + &:active { + color: var(--brand-color); + } + + } + + @media screen and (max-width: 550px) { + &.optional { + display: none; + } + } + } + + .nav-button { + background: var(--brand-color); + color: #fff; + margin: 8px; + margin-left: 0; + border-radius: 4px; + + &:hover, + &:focus, + &:active { + opacity: 0.9; + color: #fff; + text-decoration: none; + } + } + } + + $no-columns-breakpoint: 600px; + + .grid { + display: grid; + grid-gap: 10px; + grid-template-columns: minmax(300px, 3fr) minmax(298px, 1fr); + grid-auto-columns: 25%; + grid-auto-rows: max-content; + + .column-0 { + grid-row: 1; + grid-column: 1; + } + + .column-1 { + grid-row: 1; + grid-column: 2; + } + + @media screen and (max-width: $no-columns-breakpoint) { + grid-template-columns: 100%; + grid-gap: 0; + + .column-1 { + display: none; + } + } + } + + .public-account-header { + overflow: hidden; + margin-bottom: 10px; + box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + + &.inactive { + opacity: 0.5; + + .public-account-header__image, + .avatar { + filter: grayscale(100%); + } + + .logo-button { + background-color: var(--primary-text-color-faint); + } + } + + &__image { + border-radius: 4px 4px 0 0; + overflow: hidden; + height: 300px; + position: relative; + background: darken($ui-base-color, 12%); + + &::after { + content: ""; + display: block; + position: absolute; + width: 100%; + height: 100%; + box-shadow: inset 0 -1px 1px 1px rgba($base-shadow-color, 0.15); + top: 0; + left: 0; + } + + img { + object-fit: cover; + display: block; + width: 100%; + height: 100%; + margin: 0; + border-radius: 4px 4px 0 0; + } + + @media screen and (max-width: 600px) { + height: 200px; + } + } + + &--no-bar { + margin-bottom: 0; + + .public-account-header__image, + .public-account-header__image img { + border-radius: 4px; + + @media screen and (max-width: $no-gap-breakpoint) { + border-radius: 0; + } + } + } + + @media screen and (max-width: $no-gap-breakpoint) { + margin-bottom: 0; + box-shadow: none; + + &__image::after { + display: none; + } + + &__image, + &__image img { + border-radius: 0; + } + } + + &__bar { + position: relative; + margin-top: -80px; + display: flex; + justify-content: flex-start; + + &::before { + content: ""; + display: block; + background: var(--brand-color-faint); + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 60px; + border-radius: 0 0 4px 4px; + z-index: -1; + } + + .avatar { + display: block; + width: 120px; + height: 120px; + padding-left: 20px - 4px; + flex: 0 0 auto; + + img { + display: block; + width: 100%; + height: 100%; + margin: 0; + border-radius: 50%; + border: 4px solid var(--brand-color-faint); + background: darken($ui-base-color, 8%); + } + } + + @media screen and (max-width: 600px) { + margin-top: 0; + background: var(--brand-color-faint); + border-radius: 0 0 4px 4px; + padding: 5px; + + &::before { + display: none; + } + + .avatar { + width: 48px; + height: 48px; + padding: 7px 0; + padding-left: 10px; + + img { + border: 0; + border-radius: 4px; + } + + @media screen and (max-width: 360px) { + display: none; + } + } + } + + @media screen and (max-width: $no-gap-breakpoint) { + border-radius: 0; + } + + @media screen and (max-width: $no-columns-breakpoint) { + flex-wrap: wrap; + } + } + + &__tabs { + flex: 1 1 auto; + margin-left: 20px; + + &__name { + padding-top: 20px; + padding-bottom: 8px; + + h1 { + font-size: 20px; + line-height: 18px * 1.5; + color: var(--primary-text-color); + font-weight: 500; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + text-shadow: 1px 1px 1px $base-shadow-color; + + small { + display: block; + font-size: 14px; + color: var(--primary-text-color); + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + + @media screen and (max-width: 600px) { + margin-left: 15px; + display: flex; + justify-content: space-between; + align-items: center; + + &__name { + padding-top: 0; + padding-bottom: 0; + + h1 { + font-size: 16px; + line-height: 24px; + text-shadow: none; + + small { + color: var(--primary-text-color-faint); + } + } + } + } + + &__tabs { + display: flex; + justify-content: flex-start; + align-items: stretch; + height: 58px; + + .details-counters { + display: flex; + flex-direction: row; + min-width: 300px; + } + + @media screen and (max-width: $no-columns-breakpoint) { + .details-counters { + display: none; + } + } + + .counter { + width: 33.3%; + box-sizing: border-box; + flex: 0 0 auto; + color: var(--primary-text-color-faint); + padding: 10px; + border-right: 1px solid var(--brand-color-faint); + cursor: default; + text-align: center; + position: relative; + + a { + display: block; + } + + &:last-child { + border-right: 0; + } + + &::after { + display: block; + content: ""; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + border-bottom: 4px solid $ui-primary-color; + opacity: 0.5; + transition: all 400ms ease; + } + + &.active { + &::after { + border-bottom: 4px solid $highlight-text-color; + opacity: 1; + } + + &.inactive::after { + border-bottom-color: var(--primary-text-color-faint); + } + } + + &:hover { + &::after { + opacity: 1; + transition-duration: 100ms; + } + } + + a { + text-decoration: none; + color: inherit; + } + + .counter-label { + font-size: 12px; + display: block; + } + + .counter-number { + font-weight: 500; + font-size: 18px; + margin-bottom: 5px; + color: var(--primary-text-color); + font-family: $font-display, sans-serif; + } + } + + .spacer { + flex: 1 1 auto; + height: 1px; + } + + &__buttons { + padding: 7px 8px; + } + } + } + + &__extra { + display: none; + margin-top: 4px; + + .public-account-bio { + border-radius: 0; + box-shadow: none; + background: transparent; + margin: 0 -5px; + + .account__header__fields { + border-top: 1px solid var(--brand-color-med); + } + + .roles { + display: none; + } + } + + &__links { + margin-top: -15px; + font-size: 14px; + color: var(--primary-text-color-faint); + + a { + display: inline-block; + color: var(--primary-text-color-faint); + text-decoration: none; + padding: 15px; + font-weight: 500; + + strong { + font-weight: 700; + color: var(--primary-text-color); + } + } + } + + @media screen and (max-width: $no-columns-breakpoint) { + display: block; + flex: 100%; + } + } + } + + .account__section-headline { + border-radius: 4px 4px 0 0; + + @media screen and (max-width: $no-gap-breakpoint) { + border-radius: 0; + } + } + + .detailed-status__meta { + margin-top: 25px; + } + + .public-account-bio { + background: var(--brand-color-med); + box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + border-radius: 4px; + overflow: hidden; + margin-bottom: 10px; + + @media screen and (max-width: $no-gap-breakpoint) { + box-shadow: none; + margin-bottom: 0; + border-radius: 0; + } + + .account__header__fields { + margin: 0; + border-top: 0; + + a { + color: lighten($ui-highlight-color, 8%); + } + + dl:first-child .verified { + border-radius: 0 4px 0 0; + } + + .verified a { + color: $valid-value-color; + } + } + + .account__header__content { + padding: 20px; + padding-bottom: 0; + color: var(--primary-text-color); + } + + &__extra, + .roles { + padding: 20px; + font-size: 14px; + color: var(--primary-text-color-faint); + } + + .roles { + padding-bottom: 0; + } + } + + .static-icon-button { + color: $action-button-color; + font-size: 18px; + + & > span { + font-size: 14px; + font-weight: 500; + } + } + + .card-grid { + display: flex; + flex-wrap: wrap; + min-width: 100%; + margin: 0 -5px; + + & > div { + box-sizing: border-box; + flex: 1 0 auto; + width: 300px; + padding: 0 5px; + margin-bottom: 10px; + max-width: 33.333%; + + @media screen and (max-width: 900px) { + max-width: 50%; + } + + @media screen and (max-width: 600px) { + max-width: 100%; + } + } + + @media screen and (max-width: $no-gap-breakpoint) { + margin: 0; + border-top: 1px solid var(--brand-color-med); + + & > div { + width: 100%; + padding: 0; + margin-bottom: 0; + border-bottom: 1px solid var(--brand-color-med); + + &:last-child { + border-bottom: 0; + } + + .card__bar { + background: var(--brand-color-med); + + &:hover, + &:active, + &:focus { + background: var(--brand-color-faint); + } + } + } + } + } +} + .container { box-sizing: border-box; max-width: $maximum-width; @@ -661,7 +1343,6 @@ $small-breakpoint: 960px; .public-layout { position: relative; background-color: var(--brand-color); - background-image: url('data:image/svg+xml;utf8,'); background-size: 100% auto; background-repeat: no-repeat; background-position: 0 -106px; @@ -670,7 +1351,9 @@ $small-breakpoint: 960px; flex-direction: column; @media screen and (max-width: 767px) { - background-image: none; + .wave { + display: none; + } .brand__tagline, .brand h1 { @@ -684,7 +1367,7 @@ $small-breakpoint: 960px; &:hover, &:focus, &:active { - color: $gab-background-base-light; + opacity: 0.9; } } @@ -693,12 +1376,13 @@ $small-breakpoint: 960px; } .nav-button { - background: darken($gab-brand-default, 10%); + background: var(--accent-color); + color: #fff; &:hover, &:focus, &:active { - background: darken($gab-brand-default, 15%); + opacity: 0.9; } } } @@ -870,7 +1554,7 @@ $small-breakpoint: 960px; } .simple_form p.lead { - color: var(--primary-text-color-faint); + color: var(--primary-text-color); font-size: 15px; line-height: 20px; font-weight: 400; @@ -1016,3 +1700,23 @@ $small-breakpoint: 960px; .about-page { background: var(--brand-color-faint); } + +.public-layout__top { + position: relative; + + .header, + .container { + position: relative; + z-index: 1; + } +} + +.public-layout__top .wave { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + bottom: 0; + right: 0; +} diff --git a/app/styles/containers.scss b/app/styles/containers.scss index 135f06635..f2fa0fc4a 100644 --- a/app/styles/containers.scss +++ b/app/styles/containers.scss @@ -189,694 +189,3 @@ } } } - -.public-layout { - .container { - width: 100%; - max-width: 960px; - - @media screen and (max-width: $no-gap-breakpoint) { - padding: 0; - } - } - - .content { - display: block; - margin: 40px 0; - background: #fff; - border-radius: 6px; - - @media screen and (max-width: 767px) { - margin-top: 0; - } - } - - .header { - height: 80px; - display: flex; - align-items: stretch; - justify-content: center; - flex-wrap: nowrap; - padding: 14px 0; - box-sizing: border-box; - - @media screen and (max-width: 1024px) { - padding: 14px 20px; - } - - .header-container { - display: flex; - width: 960px; - align-items: stretch; - justify-content: center; - flex-wrap: nowrap; - - & > div { - flex: 1 1 33.3%; - min-height: 1px; - } - } - - .nav-left { - display: flex; - align-items: center; - justify-content: flex-start; - flex-wrap: nowrap; - } - - .nav-center { - display: flex; - align-items: stretch; - justify-content: center; - flex-wrap: nowrap; - } - - .nav-right { - display: flex; - align-items: center; - justify-content: flex-end; - flex-wrap: nowrap; - - .simple_form.new_user { - display: flex; - flex-direction: row; - align-items: center; - - .fields-group { - display: flex; - flex-direction: row; - margin-bottom: 0; - position: relative; - - p.hint.subtle-hint { - position: absolute; - top: 30px; - left: 160px; - border-radius: 4px; - background: #fff; - overflow: hidden; - - a { - padding: 4px; - background-color: var(--brand-color-med); - } - } - - .input { - margin-bottom: 0; - margin-right: 10px; - - input { - min-width: 150px; - font-size: 14px; - } - } - } - - .actions { - display: flex; - margin-top: 0; - - .button { - margin-bottom: 0 !important; - line-height: 38px !important; - border: 1px solid #333 !important; - height: 38px !important; - box-sizing: border-box !important; - padding: 0 18px !important; - text-transform: none !important; - } - } - } - } - - .brand { - display: block; - - img { - display: block; - height: 30px; - width: auto; - position: relative; - bottom: -2px; - - @media screen and (max-width: $no-gap-breakpoint) { - height: 20px; - } - } - } - - .nav-link { - display: flex; - align-items: center; - padding: 12px 22px; - font-size: 14px; - font-weight: 600; - text-decoration: none; - color: var(--primary-text-color); - white-space: nowrap; - text-align: center; - - &:hover, - &:focus, - &:active { - text-decoration: underline; - color: var(--primary-text-color); - } - - &--hollow { - background-color: var(--brand-color-med); - - &:hover, - &:focus, - &:active { - color: var(--brand-color); - } - - } - - @media screen and (max-width: 550px) { - &.optional { - display: none; - } - } - } - - .nav-button { - background: var(--brand-color); - color: #fff; - margin: 8px; - margin-left: 0; - border-radius: 4px; - - &:hover, - &:focus, - &:active { - text-decoration: none; - background: darken($gab-brand-default, 10%); - } - - &--hollow { - background: transparent; - - &:hover, - &:focus, - &:active { - background: rgba($gab-brand-default, 0.2); - } - } - } - } - - $no-columns-breakpoint: 600px; - - .grid { - display: grid; - grid-gap: 10px; - grid-template-columns: minmax(300px, 3fr) minmax(298px, 1fr); - grid-auto-columns: 25%; - grid-auto-rows: max-content; - - .column-0 { - grid-row: 1; - grid-column: 1; - } - - .column-1 { - grid-row: 1; - grid-column: 2; - } - - @media screen and (max-width: $no-columns-breakpoint) { - grid-template-columns: 100%; - grid-gap: 0; - - .column-1 { - display: none; - } - } - } - - .public-account-header { - overflow: hidden; - margin-bottom: 10px; - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); - - &.inactive { - opacity: 0.5; - - .public-account-header__image, - .avatar { - filter: grayscale(100%); - } - - .logo-button { - background-color: var(--primary-text-color-faint); - } - } - - &__image { - border-radius: 4px 4px 0 0; - overflow: hidden; - height: 300px; - position: relative; - background: darken($ui-base-color, 12%); - - &::after { - content: ""; - display: block; - position: absolute; - width: 100%; - height: 100%; - box-shadow: inset 0 -1px 1px 1px rgba($base-shadow-color, 0.15); - top: 0; - left: 0; - } - - img { - object-fit: cover; - display: block; - width: 100%; - height: 100%; - margin: 0; - border-radius: 4px 4px 0 0; - } - - @media screen and (max-width: 600px) { - height: 200px; - } - } - - &--no-bar { - margin-bottom: 0; - - .public-account-header__image, - .public-account-header__image img { - border-radius: 4px; - - @media screen and (max-width: $no-gap-breakpoint) { - border-radius: 0; - } - } - } - - @media screen and (max-width: $no-gap-breakpoint) { - margin-bottom: 0; - box-shadow: none; - - &__image::after { - display: none; - } - - &__image, - &__image img { - border-radius: 0; - } - } - - &__bar { - position: relative; - margin-top: -80px; - display: flex; - justify-content: flex-start; - - &::before { - content: ""; - display: block; - background: var(--brand-color-faint); - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 60px; - border-radius: 0 0 4px 4px; - z-index: -1; - } - - .avatar { - display: block; - width: 120px; - height: 120px; - padding-left: 20px - 4px; - flex: 0 0 auto; - - img { - display: block; - width: 100%; - height: 100%; - margin: 0; - border-radius: 50%; - border: 4px solid var(--brand-color-faint); - background: darken($ui-base-color, 8%); - } - } - - @media screen and (max-width: 600px) { - margin-top: 0; - background: var(--brand-color-faint); - border-radius: 0 0 4px 4px; - padding: 5px; - - &::before { - display: none; - } - - .avatar { - width: 48px; - height: 48px; - padding: 7px 0; - padding-left: 10px; - - img { - border: 0; - border-radius: 4px; - } - - @media screen and (max-width: 360px) { - display: none; - } - } - } - - @media screen and (max-width: $no-gap-breakpoint) { - border-radius: 0; - } - - @media screen and (max-width: $no-columns-breakpoint) { - flex-wrap: wrap; - } - } - - &__tabs { - flex: 1 1 auto; - margin-left: 20px; - - &__name { - padding-top: 20px; - padding-bottom: 8px; - - h1 { - font-size: 20px; - line-height: 18px * 1.5; - color: var(--primary-text-color); - font-weight: 500; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - text-shadow: 1px 1px 1px $base-shadow-color; - - small { - display: block; - font-size: 14px; - color: var(--primary-text-color); - font-weight: 400; - overflow: hidden; - text-overflow: ellipsis; - } - } - } - - @media screen and (max-width: 600px) { - margin-left: 15px; - display: flex; - justify-content: space-between; - align-items: center; - - &__name { - padding-top: 0; - padding-bottom: 0; - - h1 { - font-size: 16px; - line-height: 24px; - text-shadow: none; - - small { - color: var(--primary-text-color-faint); - } - } - } - } - - &__tabs { - display: flex; - justify-content: flex-start; - align-items: stretch; - height: 58px; - - .details-counters { - display: flex; - flex-direction: row; - min-width: 300px; - } - - @media screen and (max-width: $no-columns-breakpoint) { - .details-counters { - display: none; - } - } - - .counter { - width: 33.3%; - box-sizing: border-box; - flex: 0 0 auto; - color: var(--primary-text-color-faint); - padding: 10px; - border-right: 1px solid var(--brand-color-faint); - cursor: default; - text-align: center; - position: relative; - - a { - display: block; - } - - &:last-child { - border-right: 0; - } - - &::after { - display: block; - content: ""; - position: absolute; - bottom: 0; - left: 0; - width: 100%; - border-bottom: 4px solid $ui-primary-color; - opacity: 0.5; - transition: all 400ms ease; - } - - &.active { - &::after { - border-bottom: 4px solid $highlight-text-color; - opacity: 1; - } - - &.inactive::after { - border-bottom-color: var(--primary-text-color-faint); - } - } - - &:hover { - &::after { - opacity: 1; - transition-duration: 100ms; - } - } - - a { - text-decoration: none; - color: inherit; - } - - .counter-label { - font-size: 12px; - display: block; - } - - .counter-number { - font-weight: 500; - font-size: 18px; - margin-bottom: 5px; - color: var(--primary-text-color); - font-family: $font-display, sans-serif; - } - } - - .spacer { - flex: 1 1 auto; - height: 1px; - } - - &__buttons { - padding: 7px 8px; - } - } - } - - &__extra { - display: none; - margin-top: 4px; - - .public-account-bio { - border-radius: 0; - box-shadow: none; - background: transparent; - margin: 0 -5px; - - .account__header__fields { - border-top: 1px solid var(--brand-color-med); - } - - .roles { - display: none; - } - } - - &__links { - margin-top: -15px; - font-size: 14px; - color: var(--primary-text-color-faint); - - a { - display: inline-block; - color: var(--primary-text-color-faint); - text-decoration: none; - padding: 15px; - font-weight: 500; - - strong { - font-weight: 700; - color: var(--primary-text-color); - } - } - } - - @media screen and (max-width: $no-columns-breakpoint) { - display: block; - flex: 100%; - } - } - } - - .account__section-headline { - border-radius: 4px 4px 0 0; - - @media screen and (max-width: $no-gap-breakpoint) { - border-radius: 0; - } - } - - .detailed-status__meta { - margin-top: 25px; - } - - .public-account-bio { - background: var(--brand-color-med); - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); - border-radius: 4px; - overflow: hidden; - margin-bottom: 10px; - - @media screen and (max-width: $no-gap-breakpoint) { - box-shadow: none; - margin-bottom: 0; - border-radius: 0; - } - - .account__header__fields { - margin: 0; - border-top: 0; - - a { - color: lighten($ui-highlight-color, 8%); - } - - dl:first-child .verified { - border-radius: 0 4px 0 0; - } - - .verified a { - color: $valid-value-color; - } - } - - .account__header__content { - padding: 20px; - padding-bottom: 0; - color: var(--primary-text-color); - } - - &__extra, - .roles { - padding: 20px; - font-size: 14px; - color: var(--primary-text-color-faint); - } - - .roles { - padding-bottom: 0; - } - } - - .static-icon-button { - color: $action-button-color; - font-size: 18px; - - & > span { - font-size: 14px; - font-weight: 500; - } - } - - .card-grid { - display: flex; - flex-wrap: wrap; - min-width: 100%; - margin: 0 -5px; - - & > div { - box-sizing: border-box; - flex: 1 0 auto; - width: 300px; - padding: 0 5px; - margin-bottom: 10px; - max-width: 33.333%; - - @media screen and (max-width: 900px) { - max-width: 50%; - } - - @media screen and (max-width: 600px) { - max-width: 100%; - } - } - - @media screen and (max-width: $no-gap-breakpoint) { - margin: 0; - border-top: 1px solid var(--brand-color-med); - - & > div { - width: 100%; - padding: 0; - margin-bottom: 0; - border-bottom: 1px solid var(--brand-color-med); - - &:last-child { - border-bottom: 0; - } - - .card__bar { - background: var(--brand-color-med); - - &:hover, - &:active, - &:focus { - background: var(--brand-color-faint); - } - } - } - } - } -} diff --git a/app/styles/forms.scss b/app/styles/forms.scss index 2f875f209..db2067516 100644 --- a/app/styles/forms.scss +++ b/app/styles/forms.scss @@ -319,7 +319,7 @@ code { font-family: inherit; resize: vertical; background: var(--foreground-color); - border: 1px solid var(--brand-color-faint); + border: 1px solid var(--highlight-text-color); border-radius: 4px; padding: 10px; transition: 0.2s; @@ -338,7 +338,7 @@ code { &:active, &:focus { - border-color: var(--highlight-text-color); + border-color: var(--brand-color-hicontrast); } } From c4a2a866183bc6ebd615b3a7fa821805b718cec3 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 12:16:26 -0500 Subject: [PATCH 35/46] Theme mode set in Preferences --- app/soapbox/actions/settings.js | 2 +- app/soapbox/actions/soapbox.js | 4 ---- app/soapbox/containers/soapbox.js | 19 +++++++++++++++++++ app/soapbox/features/preferences/index.js | 14 ++++---------- static/instance/soapbox.example.json | 3 ++- 5 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/soapbox/actions/settings.js b/app/soapbox/actions/settings.js index 7ad8410d8..10005844c 100644 --- a/app/soapbox/actions/settings.js +++ b/app/soapbox/actions/settings.js @@ -20,7 +20,7 @@ const defaultSettings = ImmutableMap({ boostModal: false, deleteModal: true, defaultPrivacy: 'public', - theme: 'azure', + themeMode: 'light', // locale: navigator.language.slice(0, 2) || 'en', // FIXME: Dynamic locales locale: 'en', diff --git a/app/soapbox/actions/soapbox.js b/app/soapbox/actions/soapbox.js index 4e0b41f5f..7da3be86d 100644 --- a/app/soapbox/actions/soapbox.js +++ b/app/soapbox/actions/soapbox.js @@ -1,6 +1,4 @@ import api from '../api'; -import { get } from 'lodash'; -import { generateTheme } from 'soapbox/actions/theme'; export const SOAPBOX_CONFIG_IMPORT = 'SOAPBOX_CONFIG_IMPORT'; export const SOAPBOX_CONFIG_FAIL = 'SOAPBOX_CONFIG_FAIL'; @@ -8,9 +6,7 @@ export const SOAPBOX_CONFIG_FAIL = 'SOAPBOX_CONFIG_FAIL'; export function fetchSoapboxConfig() { return (dispatch, getState) => { api(getState).get('/instance/soapbox.json').then(response => { - const { brandColor, mode } = get(response.data, 'theme'); dispatch(importSoapboxConfig(response.data)); - dispatch(generateTheme(brandColor, mode)); }).catch(error => { dispatch(soapboxConfigFail(error)); }); diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index cd9a43195..86190eb10 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -24,6 +24,7 @@ import { fetchMe } from 'soapbox/actions/me'; import PublicLayout from 'soapbox/features/public_layout'; import { getSettings } from 'soapbox/actions/settings'; import { themeDataToCss } from 'soapbox/utils/theme'; +import { generateTheme } from 'soapbox/actions/theme'; export const store = configureStore(); const hydrateAction = hydrateStore(initialState); @@ -49,6 +50,8 @@ const mapStateToProps = (state) => { demetricator: settings.get('demetricator'), locale: settings.get('locale'), themeCss: themeDataToCss(state.get('theme')), + themeMode: settings.get('themeMode'), + brandColor: state.getIn(['soapbox', 'brandColor']), }; }; @@ -64,9 +67,25 @@ class SoapboxMount extends React.PureComponent { demetricator: PropTypes.bool, locale: PropTypes.string.isRequired, themeCss: PropTypes.string, + brandColor: PropTypes.string, + themeMode: PropTypes.string, dispatch: PropTypes.func, }; + maybeUpdateTheme = prevProps => { + const updates = [ + this.props.brandColor !== prevProps.brandColor, + this.props.themeMode !== prevProps.themeMode, + ]; + if (updates.some(u => u)) this.props.dispatch( + generateTheme(this.props.brandColor, this.props.themeMode) + ); + } + + componentDidUpdate(prevProps) { + this.maybeUpdateTheme(prevProps); + } + render() { const { me, themeCss, reduceMotion, systemFont, dyslexicFont, demetricator, locale } = this.props; if (me === null) return null; diff --git a/app/soapbox/features/preferences/index.js b/app/soapbox/features/preferences/index.js index 3f7ea81be..97225ceee 100644 --- a/app/soapbox/features/preferences/index.js +++ b/app/soapbox/features/preferences/index.js @@ -19,12 +19,6 @@ const messages = defineMessages({ heading: { id: 'column.preferences', defaultMessage: 'Preferences' }, }); -// TODO: Pull dynamically -const themes = { - 'azure': 'Light', - 'purple-dark': 'Dark', -}; - const mapStateToProps = state => ({ settings: state.get('settings'), }); @@ -41,7 +35,7 @@ class Preferences extends ImmutablePureComponent { onThemeChange = e => { const { dispatch } = this.props; - dispatch(changeSetting(['theme'], e.target.value)); + dispatch(changeSetting(['themeMode'], e.target.value)); } onDefaultPrivacyChange = e => { @@ -57,9 +51,9 @@ class Preferences extends ImmutablePureComponent { diff --git a/static/instance/soapbox.example.json b/static/instance/soapbox.example.json index 8fae384ce..3402c9d48 100644 --- a/static/instance/soapbox.example.json +++ b/static/instance/soapbox.example.json @@ -1,5 +1,6 @@ { "logo": "https://media.gleasonator.com/site_uploads/files/000/000/002/original/logo.svg", + "brandColor": "#0482d8", "promoPanel": { "items": [{ "icon": "area-chart", @@ -16,7 +17,7 @@ }, "defaultSettings": { "autoPlayGif": false, - "theme": "azure" + "themeMode": "light" }, "copyright": "♡2020. Copying is an act of love. Please copy and share.", "navlinks": { From eb9517873d8b54d58b33afded3acec8805abd57c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 15:28:15 -0500 Subject: [PATCH 36/46] Extrapolate meta colors in css instead of JS --- app/soapbox/containers/soapbox.js | 12 ++++---- app/soapbox/reducers/theme.js | 42 +++++--------------------- app/styles/application.scss | 1 + app/styles/themes.scss | 50 +++++++++++++++++++++++++++++++ package.json | 1 - yarn.lock | 5 ---- 6 files changed, 65 insertions(+), 46 deletions(-) create mode 100644 app/styles/themes.scss diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index 86190eb10..d4dccf7c0 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -87,7 +87,7 @@ class SoapboxMount extends React.PureComponent { } render() { - const { me, themeCss, reduceMotion, systemFont, dyslexicFont, demetricator, locale } = this.props; + const { me, themeCss, locale } = this.props; if (me === null) return null; const { localeData, messages } = getLocale(); @@ -100,11 +100,11 @@ class SoapboxMount extends React.PureComponent { // return ; // } - const bodyClass = classNames('app-body', { - 'system-font': systemFont, - 'no-reduce-motion': !reduceMotion, - 'dyslexic': dyslexicFont, - 'demetricator': demetricator, + const bodyClass = classNames('app-body', `theme-mode-${this.props.themeMode}`, { + 'system-font': this.props.systemFont, + 'no-reduce-motion': !this.props.reduceMotion, + 'dyslexic': this.props.dyslexicFont, + 'demetricator': this.props.demetricator, }); return ( diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js index 42f379b68..d87297e88 100644 --- a/app/soapbox/reducers/theme.js +++ b/app/soapbox/reducers/theme.js @@ -3,45 +3,19 @@ import { THEME_GENERATE, } from '../actions/theme'; import { Map as ImmutableMap } from 'immutable'; -import { brightness, hue, convert } from 'chromatism'; const initialState = ImmutableMap(); -const modes = ImmutableMap({ - light: ImmutableMap({ - 'primary-text-color': '#000000', - 'primary-text-color-faint': 'rgba(0,0,0,0.6)', - 'background-color': '#f2f2f2', - 'foreground-color': '#ffffff', - }), - dark: ImmutableMap({ - 'primary-text-color': '#ffffff', - 'primary-text-color-faint': 'rgba(255,255,255,0.6)', - 'background-color': '#333333', - 'foreground-color': '#222222', - }), -}); - -const cssrgba = (color, a) => { - const { r, g, b } = convert(color).rgb; - return `rgba(${[r, g, b, a].join(',')})`; -}; - -const makeContrast = (percent, color, mode) => { - percent = mode === 'light' ? -percent : percent; - return brightness(percent, color); -}; +const hex2rgb = c => c.substr(1).match(/../g).map(x => + `0x${x}`); export const generateTheme = (brandColor, mode = 'light') => { - if (!brandColor) return modes.get(mode); - return modes.get(mode).merge(ImmutableMap({ - 'brand-color': brandColor, - 'accent-color': brightness(10, hue(-3, brandColor).hex).hex, - 'brand-color-faint': cssrgba(brandColor, 0.1), - 'brand-color-med': cssrgba(brandColor, 0.2), - 'highlight-text-color': makeContrast(5, brandColor, mode).hex, - 'brand-color-hicontrast': makeContrast(15, brandColor, mode).hex, - })); + if (!brandColor) return false; + const [ r, g, b ] = hex2rgb(brandColor); + return ImmutableMap({ + 'brand-color-r': r, + 'brand-color-g': g, + 'brand-color-b': b, + }); }; export const setTheme = themeData => { diff --git a/app/styles/application.scss b/app/styles/application.scss index 0f5cfbe2d..3b5222fe1 100644 --- a/app/styles/application.scss +++ b/app/styles/application.scss @@ -1,4 +1,5 @@ @import 'mixins'; +@import 'themes'; @import 'variables'; @import 'fonts'; @import 'reset'; diff --git a/app/styles/themes.scss b/app/styles/themes.scss new file mode 100644 index 000000000..f6be5fadc --- /dev/null +++ b/app/styles/themes.scss @@ -0,0 +1,50 @@ +body { + --brand-color-rgb: var(--brand-color-r), var(--brand-color-g), var(--brand-color-b); + --brand-color: rgb(var(--brand-color-rgb)); + --brand-color-faint: rgba(var(--brand-color-rgb), 0.1); + --brand-color-med: rgba(var(--brand-color-rgb), 0.2); + --accent-color: rgb( + calc(var(--brand-color-r) + 25), + calc(var(--brand-color-g) + 25), + calc(var(--brand-color-b) + 25) + ); + --primary-text-color-rgb: var(--primary-text-color-r), var(--primary-text-color-g), var(--primary-text-color-b); + --primary-text-color: rgb(var(--primary-text-color-rgb)); + --primary-text-color-faint: rgba(var(--primary-text-color-rgb), 0.6); +} + +body.theme-mode-light { + --primary-text-color-r: 0; + --primary-text-color-g: 0; + --primary-text-color-b: 0; + --background-color: #f2f2f2; + --foreground-color: #ffffff; + --highlight-text-color: rgb( + calc(var(--brand-color-r) - 25), + calc(var(--brand-color-g) - 25), + calc(var(--brand-color-b) - 25) + ); + --brand-color-hicontrast: rgb( + calc(var(--brand-color-r) - 50), + calc(var(--brand-color-g) - 50), + calc(var(--brand-color-b) - 50) + ); +} + +body.theme-mode-dark { + --primary-text-color-r: 255; + --primary-text-color-g: 255; + --primary-text-color-b: 255; + --background-color: #333333; + --foreground-color: #222222; + --highlight-text-color: rgb( + calc(var(--brand-color-r) + 25), + calc(var(--brand-color-g) + 25), + calc(var(--brand-color-b) + 25) + ); + --brand-color-hicontrast: rgb( + calc(var(--brand-color-r) + 50), + calc(var(--brand-color-g) + 50), + calc(var(--brand-color-b) + 50) + ); +} diff --git a/package.json b/package.json index 9aafa764c..8e700dc41 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,6 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-runtime": "^6.26.0", "blurhash": "^1.0.0", - "chromatism": "^3.0.0", "classnames": "^2.2.5", "compression-webpack-plugin": "^3.0.0", "cross-env": "^6.0.0", diff --git a/yarn.lock b/yarn.lock index 378e1fd67..8185280d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2445,11 +2445,6 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== -chromatism@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chromatism/-/chromatism-3.0.0.tgz#a7249d353c1e4f3577e444ac41171c4e2e624b12" - integrity sha1-pySdNTweTzV35ESsQRccTi5iSxI= - chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" From d21db82247507252b429f2e5b5e0969a7c22d345 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 15:48:27 -0500 Subject: [PATCH 37/46] Remove theming cruft --- app/soapbox/actions/theme.js | 17 --------------- app/soapbox/containers/soapbox.js | 21 ++----------------- app/soapbox/reducers/index.js | 2 -- app/soapbox/reducers/theme.js | 35 ------------------------------- app/soapbox/utils/theme.js | 18 ++++++++++++++++ 5 files changed, 20 insertions(+), 73 deletions(-) delete mode 100644 app/soapbox/actions/theme.js delete mode 100644 app/soapbox/reducers/theme.js diff --git a/app/soapbox/actions/theme.js b/app/soapbox/actions/theme.js deleted file mode 100644 index c33b4ea4d..000000000 --- a/app/soapbox/actions/theme.js +++ /dev/null @@ -1,17 +0,0 @@ -export const THEME_SET = 'THEME_SET'; -export const THEME_GENERATE = 'THEME_GENERATE'; - -export function generateTheme(brandColor, mode) { - return { - type: THEME_GENERATE, - brandColor, - mode, - }; -} - -export function setTheme(themeData) { - return { - type: THEME_SET, - themeData, - }; -} diff --git a/app/soapbox/containers/soapbox.js b/app/soapbox/containers/soapbox.js index d4dccf7c0..7c196252a 100644 --- a/app/soapbox/containers/soapbox.js +++ b/app/soapbox/containers/soapbox.js @@ -23,8 +23,7 @@ import { fetchSoapboxConfig } from 'soapbox/actions/soapbox'; import { fetchMe } from 'soapbox/actions/me'; import PublicLayout from 'soapbox/features/public_layout'; import { getSettings } from 'soapbox/actions/settings'; -import { themeDataToCss } from 'soapbox/utils/theme'; -import { generateTheme } from 'soapbox/actions/theme'; +import { generateThemeCss } from 'soapbox/utils/theme'; export const store = configureStore(); const hydrateAction = hydrateStore(initialState); @@ -49,9 +48,8 @@ const mapStateToProps = (state) => { dyslexicFont: settings.get('dyslexicFont'), demetricator: settings.get('demetricator'), locale: settings.get('locale'), - themeCss: themeDataToCss(state.get('theme')), + themeCss: generateThemeCss(state.getIn(['soapbox', 'brandColor'])), themeMode: settings.get('themeMode'), - brandColor: state.getIn(['soapbox', 'brandColor']), }; }; @@ -67,25 +65,10 @@ class SoapboxMount extends React.PureComponent { demetricator: PropTypes.bool, locale: PropTypes.string.isRequired, themeCss: PropTypes.string, - brandColor: PropTypes.string, themeMode: PropTypes.string, dispatch: PropTypes.func, }; - maybeUpdateTheme = prevProps => { - const updates = [ - this.props.brandColor !== prevProps.brandColor, - this.props.themeMode !== prevProps.themeMode, - ]; - if (updates.some(u => u)) this.props.dispatch( - generateTheme(this.props.brandColor, this.props.themeMode) - ); - } - - componentDidUpdate(prevProps) { - this.maybeUpdateTheme(prevProps); - } - render() { const { me, themeCss, locale } = this.props; if (me === null) return null; diff --git a/app/soapbox/reducers/index.js b/app/soapbox/reducers/index.js index 7d3f59a98..c91f2f0cb 100644 --- a/app/soapbox/reducers/index.js +++ b/app/soapbox/reducers/index.js @@ -42,7 +42,6 @@ import soapbox from './soapbox'; import instance from './instance'; import me from './me'; import auth from './auth'; -import theme from './theme'; const reducers = { dropdown_menu, @@ -88,7 +87,6 @@ const reducers = { instance, me, auth, - theme, }; export default combineReducers(reducers); diff --git a/app/soapbox/reducers/theme.js b/app/soapbox/reducers/theme.js deleted file mode 100644 index d87297e88..000000000 --- a/app/soapbox/reducers/theme.js +++ /dev/null @@ -1,35 +0,0 @@ -import { - THEME_SET, - THEME_GENERATE, -} from '../actions/theme'; -import { Map as ImmutableMap } from 'immutable'; - -const initialState = ImmutableMap(); - -const hex2rgb = c => c.substr(1).match(/../g).map(x => + `0x${x}`); - -export const generateTheme = (brandColor, mode = 'light') => { - if (!brandColor) return false; - const [ r, g, b ] = hex2rgb(brandColor); - return ImmutableMap({ - 'brand-color-r': r, - 'brand-color-g': g, - 'brand-color-b': b, - }); -}; - -export const setTheme = themeData => { - const { 'brand-color': brandColor } = themeData.toObject(); - return ImmutableMap(generateTheme(brandColor, 'light')).merge(themeData); -}; - -export default function theme(state = initialState, action) { - switch(action.type) { - case THEME_GENERATE: - return generateTheme(action.brandColor, action.mode); - case THEME_SET: - return setTheme(ImmutableMap(action.brandColor)); - default: - return state; - } -}; diff --git a/app/soapbox/utils/theme.js b/app/soapbox/utils/theme.js index 017cce544..d0bb42ef8 100644 --- a/app/soapbox/utils/theme.js +++ b/app/soapbox/utils/theme.js @@ -1,3 +1,21 @@ +import { Map as ImmutableMap } from 'immutable'; + +const hex2rgb = c => c.substr(1).match(/../g).map(x => + `0x${x}`); + +export const generateThemeCss = brandColor => { + if (!brandColor) return null; + return themeDataToCss(brandColorToThemeData(brandColor)); +}; + +export const brandColorToThemeData = brandColor => { + const [ r, g, b ] = hex2rgb(brandColor); + return ImmutableMap({ + 'brand-color-r': r, + 'brand-color-g': g, + 'brand-color-b': b, + }); +}; + export const themeDataToCss = themeData => ( themeData .entrySeq() From 0587798cb499f91698869005d45e44bac484ec28 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 16:49:42 -0500 Subject: [PATCH 38/46] More theme tweaks --- app/styles/about.scss | 4 +- app/styles/components.scss | 56 ++++++---------------- app/styles/components/account-header.scss | 2 +- app/styles/components/detailed-status.scss | 8 ++-- app/styles/components/emoji-reacts.scss | 2 +- app/styles/polls.scss | 2 +- 6 files changed, 24 insertions(+), 50 deletions(-) diff --git a/app/styles/about.scss b/app/styles/about.scss index a111afa5b..5f4d94595 100644 --- a/app/styles/about.scss +++ b/app/styles/about.scss @@ -16,7 +16,7 @@ $small-breakpoint: 960px; .content { display: block; margin: 40px 0; - background: #fff; + background: var(--foreground-color); border-radius: 6px; @media screen and (max-width: 767px) { @@ -1413,7 +1413,7 @@ $small-breakpoint: 960px; &--right { margin-left: auto; width: 395px; - background-color: #fff; + background-color: var(--foreground-color); border-radius: 6px; .simple_form { diff --git a/app/styles/components.scss b/app/styles/components.scss index b2134add6..28fb3b924 100644 --- a/app/styles/components.scss +++ b/app/styles/components.scss @@ -427,7 +427,7 @@ transition: 0.2s; &:hover { - background: var(--brand-color-faint); + background: rgba(var(--brand-color-rgb), 0.5); text-decoration: none; } @@ -476,7 +476,7 @@ border-radius: 2px; background: transparent; border: 0; - color: $inverted-text-color; + color: var(--primary-text-color); font-weight: 700; font-size: 11px; padding: 0 6px; @@ -1701,7 +1701,7 @@ a.account__display-name { .drawer__inner { top: 0; left: 0; - background: lighten($ui-base-color, 13%); + background: var(--foreground-color); box-sizing: border-box; padding: 0; display: flex; @@ -1710,32 +1710,6 @@ a.account__display-name { overflow-y: auto; width: 100%; height: 100%; - - &.darker { - background: var(--brand-color-med); - } -} - -.drawer__inner__soapbox { - background: lighten($ui-base-color, 13%) url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; - flex: 1; - min-height: 47px; - display: none; - - > img { - display: block; - object-fit: contain; - object-position: bottom left; - width: 100%; - height: 100%; - pointer-events: none; - user-drag: none; - user-select: none; - } - - @media screen and (min-height: 640px) { - display: block; - } } .pseudo-drawer { @@ -1776,7 +1750,7 @@ a.account__display-name { } .column-back-button { - background: var(--brand-color-faint); + background: var(--brand-color-med); color: var(--highlight-text-color); cursor: pointer; flex: 0 0 auto; @@ -2632,7 +2606,7 @@ a.status-card.compact:hover { height: 42px; box-sizing: border-box; background-color: transparent; - border: 0 solid var(--brand-color-med); + border: 0 solid rgba(var(--brand-color-rgb), 0.5); border-width: 6px; border-radius: 50%; } @@ -2649,11 +2623,11 @@ a.status-card.compact:hover { 0% { width: 0; height: 0; - background-color: var(--brand-color-med); + background-color: rgba(var(--brand-color-rgb), 0.5); } 29% { - background-color: var(--brand-color-med); + background-color: rgba(var(--brand-color-rgb), 0.5); } 30% { @@ -3364,7 +3338,7 @@ a.status-card.compact:hover { .search-results__header { color: $dark-text-color; - background: var(--brand-color-faint); + background: var(--brand-color-med); padding: 15px; font-weight: 500; font-size: 16px; @@ -3380,8 +3354,8 @@ a.status-card.compact:hover { margin-bottom: 5px; h5 { - background: var(--brand-color-med); - border-bottom: 1px solid var(--brand-color-med); + background: var(--brand-color-faint); + border-bottom: 1px solid var(--brand-color-faint); cursor: default; display: flex; padding: 15px; @@ -4047,8 +4021,8 @@ a.status-card.compact:hover { .notification__filter-bar, .account__section-headline { - background: var(--brand-color-med); - border-bottom: 1px solid var(--brand-color-med); + background: var(--brand-color-faint); + border-bottom: 1px solid var(--brand-color-faint); cursor: default; display: flex; flex-shrink: 0; @@ -4086,12 +4060,12 @@ a.status-card.compact:hover { transform: translateX(-50%); border-style: solid; border-width: 0 10px 10px; - border-color: transparent transparent var(--brand-color-med); + border-color: transparent transparent var(--foreground-color); } &::after { bottom: -1px; - border-color: transparent transparent var(--brand-color-med); + border-color: transparent transparent var(--foreground-color); } } } @@ -5148,7 +5122,7 @@ noscript { &__text-container { display: none; padding: 25px 0; - background-color: var(--brand-color-faint); + background-color: var(--brand-color-med); @media (min-width: 895px) { display: block; diff --git a/app/styles/components/account-header.scss b/app/styles/components/account-header.scss index 8778945f9..06b08a8aa 100644 --- a/app/styles/components/account-header.scss +++ b/app/styles/components/account-header.scss @@ -36,7 +36,7 @@ min-height: 74px; width: 100%; position: relative; - background: var(--brand-color-faint); + background: var(--brand-color-med); @media (min-width: 895px) {height: 74px;} } diff --git a/app/styles/components/detailed-status.scss b/app/styles/components/detailed-status.scss index e00395446..807c1638a 100644 --- a/app/styles/components/detailed-status.scss +++ b/app/styles/components/detailed-status.scss @@ -7,7 +7,7 @@ } .detailed-status { - background: var(--brand-color-faint); + background: rgba(var(--brand-color-rgb), 0.03); padding: 14px 10px; &--flex { @@ -52,9 +52,9 @@ } .detailed-status__action-bar { - background: var(--brand-color-faint); - border-top: 1px solid var(--brand-color-med); - border-bottom: 1px solid var(--brand-color-med); + background: rgba(var(--brand-color-rgb), 0.03); + border-top: 1px solid var(--brand-color-faint); + border-bottom: 1px solid var(--brand-color-faint); display: flex; flex-direction: row; } diff --git a/app/styles/components/emoji-reacts.scss b/app/styles/components/emoji-reacts.scss index 14b5aeba9..7ce5731f8 100644 --- a/app/styles/components/emoji-reacts.scss +++ b/app/styles/components/emoji-reacts.scss @@ -57,7 +57,7 @@ .emoji-react-selector { position: absolute; display: flex; - background-color: var(--background-color); + background-color: var(--foreground-color); padding: 5px 8px; border-radius: 9999px; box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1); diff --git a/app/styles/polls.scss b/app/styles/polls.scss index 5c9a2c88a..8ad9596da 100644 --- a/app/styles/polls.scss +++ b/app/styles/polls.scss @@ -27,7 +27,7 @@ overflow: hidden; width: 100%; text-overflow: ellipsis; - color: #fff; + color: var(--primary-text-color-faint); input[type=radio], input[type=checkbox] { From ca4bc1d8e88d3579353fddacc56f85bef88d52c8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 17:42:09 -0500 Subject: [PATCH 39/46] Replace most color variables --- app/styles/_mixins.scss | 19 ++- app/styles/about.scss | 64 ++++---- app/styles/accounts.scss | 18 +-- app/styles/basics.scss | 3 +- app/styles/boost.scss | 6 +- app/styles/components.scss | 186 +++++++++++------------ app/styles/components/buttons.scss | 2 +- app/styles/components/compose-form.scss | 22 +-- app/styles/components/dropdown-menu.scss | 6 +- app/styles/components/group-card.scss | 6 +- app/styles/components/group-detail.scss | 6 +- app/styles/components/group-form.scss | 2 +- app/styles/components/hotkeys-modal.scss | 4 +- app/styles/components/inputs.scss | 6 +- app/styles/components/modal.scss | 50 +++--- app/styles/components/sidebar-menu.scss | 2 +- app/styles/components/user-panel.scss | 2 +- app/styles/containers.scss | 1 - app/styles/dashboard.scss | 4 +- app/styles/donations.scss | 4 +- app/styles/emoji_picker.scss | 20 +-- app/styles/forms.scss | 22 +-- app/styles/introduction.scss | 6 +- app/styles/modal.scss | 2 +- app/styles/polls.scss | 30 ++-- app/styles/rtl.scss | 4 +- app/styles/tables.scss | 22 +-- app/styles/themes.scss | 5 + app/styles/variables.scss | 73 +-------- app/styles/widgets.scss | 8 +- 30 files changed, 269 insertions(+), 336 deletions(-) diff --git a/app/styles/_mixins.scss b/app/styles/_mixins.scss index 2d899e45d..086627589 100644 --- a/app/styles/_mixins.scss +++ b/app/styles/_mixins.scss @@ -1,13 +1,13 @@ // THEME MIXINS // standard container drop shadow -@mixin light-theme-shadow { +@mixin standard-panel-shadow { box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1); } // common properties for all standard containers -@mixin gab-container-standards { - @include light-theme-shadow; +@mixin standard-panel { + @include standard-panel-shadow; border-radius: 10px; background: var(--foreground-color); } @@ -49,9 +49,9 @@ padding-left: 15px; // Chrome does not like these concatinated together - &::placeholder {color: $gab-placeholder-accent;} - &:-ms-input-placeholder {color: $gab-placeholder-accent;} - &::-ms-input-placeholder {color: $gab-placeholder-accent;} + &::placeholder {color: var(--primary-text-color-faint);} + &:-ms-input-placeholder {color: var(--primary-text-color-faint);} + &::-ms-input-placeholder {color: var(--primary-text-color-faint);} &::-moz-focus-inner { border: 0; @@ -68,9 +68,8 @@ @include font-size(12); @include line-height(14); @include font-weight(normal); - background: $gab-background-container; - border-radius: 4px; - border: 1px solid $gab-placeholder-accent; + background: var(--background-color); + border-radius: 6px; padding: 8px 10px 17px; margin: 4px 0 0; color: var(--primary-text-color-faint); @@ -80,7 +79,7 @@ @include font-size(14); @include line-height(16); @include font-weight(bold); - color: #fff; + color: var(--primary-text-color); } ul { diff --git a/app/styles/about.scss b/app/styles/about.scss index 5f4d94595..7986ac846 100644 --- a/app/styles/about.scss +++ b/app/styles/about.scss @@ -244,7 +244,7 @@ $small-breakpoint: 960px; overflow: hidden; height: 300px; position: relative; - background: darken($ui-base-color, 12%); + background: var(--background-color); &::after { content: ""; @@ -331,7 +331,7 @@ $small-breakpoint: 960px; margin: 0; border-radius: 50%; border: 4px solid var(--brand-color-faint); - background: darken($ui-base-color, 8%); + background: var(--background-color); } } @@ -466,14 +466,14 @@ $small-breakpoint: 960px; bottom: 0; left: 0; width: 100%; - border-bottom: 4px solid $ui-primary-color; + border-bottom: 4px solid var(--brand-color); opacity: 0.5; transition: all 400ms ease; } &.active { &::after { - border-bottom: 4px solid $highlight-text-color; + border-bottom: 4px solid var(--highlight-text-color); opacity: 1; } @@ -504,7 +504,7 @@ $small-breakpoint: 960px; font-size: 18px; margin-bottom: 5px; color: var(--primary-text-color); - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; } } @@ -594,7 +594,7 @@ $small-breakpoint: 960px; border-top: 0; a { - color: lighten($ui-highlight-color, 8%); + color: var(--brand-color); } dl:first-child .verified { @@ -625,7 +625,7 @@ $small-breakpoint: 960px; } .static-icon-button { - color: $action-button-color; + color: #0482d8; font-size: 18px; & > span { @@ -698,7 +698,7 @@ $small-breakpoint: 960px; } .rich-formatting { - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; font-size: 16px; font-weight: 400; font-size: 16px; @@ -724,7 +724,7 @@ $small-breakpoint: 960px; p, li { - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; font-size: 16px; font-weight: 400; font-size: 16px; @@ -741,7 +741,7 @@ $small-breakpoint: 960px; em, b { font-weight: bold; - color: lighten($darker-text-color, 10%); + color: var(--primary-text-color); } h1, @@ -750,7 +750,7 @@ $small-breakpoint: 960px; h4, h5, h6 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; margin-top: 2em; margin-bottom: 1.25em; font-weight: 500; @@ -773,11 +773,11 @@ $small-breakpoint: 960px; line-height: 30px; small { - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; display: block; font-size: 18px; font-weight: 400; - color: lighten($darker-text-color, 10%); + color: var(--primary-text-color); } } @@ -841,7 +841,7 @@ $small-breakpoint: 960px; width: 100%; height: 0; border: 0; - border-bottom: 1px solid rgba($ui-base-lighter-color, .6); + border-bottom: 1px solid rgba(var(--background-color), .6); margin: 2em 0; &.spacer { @@ -868,7 +868,7 @@ $small-breakpoint: 960px; &__section { flex: 1 0 0; - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; font-size: 16px; line-height: 28px; color: var(--primary-text-color); @@ -887,7 +887,7 @@ $small-breakpoint: 960px; } strong { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-weight: 500; font-size: 32px; line-height: 48px; @@ -902,7 +902,7 @@ $small-breakpoint: 960px; position: absolute; width: 280px; box-sizing: border-box; - background: darken($ui-base-color, 8%); + background: var(--background-color); padding: 20px; padding-top: 10px; border-radius: 4px 4px 0 0; @@ -910,7 +910,7 @@ $small-breakpoint: 960px; bottom: -40px; .panel-header { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 14px; line-height: 24px; font-weight: 500; @@ -925,7 +925,7 @@ $small-breakpoint: 960px; a, span { font-weight: 400; - color: darken($darker-text-color, 10%); + color: var(--primary-text-color); } a { @@ -977,7 +977,7 @@ $small-breakpoint: 960px; .landing-page { p, li { - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; font-size: 16px; font-weight: 400; font-size: 16px; @@ -1000,11 +1000,11 @@ $small-breakpoint: 960px; font-family: inherit; font-size: inherit; line-height: inherit; - color: lighten($darker-text-color, 10%); + color: var(--primary-text-color); } h1 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 26px; line-height: 30px; font-weight: 500; @@ -1012,16 +1012,16 @@ $small-breakpoint: 960px; color: var(--primary-text-color-faint); small { - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; display: block; font-size: 18px; font-weight: 400; - color: lighten($darker-text-color, 10%); + color: var(--primary-text-color); } } h2 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 22px; line-height: 26px; font-weight: 500; @@ -1030,7 +1030,7 @@ $small-breakpoint: 960px; } h3 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 18px; line-height: 24px; font-weight: 500; @@ -1039,7 +1039,7 @@ $small-breakpoint: 960px; } h4 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 16px; line-height: 24px; font-weight: 500; @@ -1048,7 +1048,7 @@ $small-breakpoint: 960px; } h5 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 14px; line-height: 24px; font-weight: 500; @@ -1057,7 +1057,7 @@ $small-breakpoint: 960px; } h6 { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 12px; line-height: 24px; font-weight: 500; @@ -1095,7 +1095,7 @@ $small-breakpoint: 960px; width: 100%; height: 0; border: 0; - border-bottom: 1px solid rgba($ui-base-lighter-color, .6); + border-bottom: 1px solid rgba(var(--background-color), .6); margin: 20px 0; &.spacer { @@ -1171,7 +1171,7 @@ $small-breakpoint: 960px; strong { font-weight: 500; - color: lighten($darker-text-color, 10%); + color: var(--primary-text-color); } .account { @@ -1535,7 +1535,7 @@ $small-breakpoint: 960px; padding: 10px; strong { - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; font-size: 15px; font-weight: 700; display: block; diff --git a/app/styles/accounts.scss b/app/styles/accounts.scss index 75d4ae122..e6dd0829f 100644 --- a/app/styles/accounts.scss +++ b/app/styles/accounts.scss @@ -21,7 +21,7 @@ &__img { height: 130px; position: relative; - background: darken($ui-base-color, 12%); + background: var(--background-color); border-radius: 4px 4px 0 0; img { @@ -67,7 +67,7 @@ display: block; margin: 0; border-radius: 4px; - background: darken($ui-base-color, 8%); + background: var(--background-color); object-fit: cover; } } @@ -118,7 +118,7 @@ .current { background: $simple-background-color; border-radius: 100px; - color: $inverted-text-color; + color: var(--inverted-text-color); cursor: default; margin: 0 10px; } @@ -155,7 +155,7 @@ .disabled { cursor: default; - color: lighten($inverted-text-color, 10%); + color: var(--inverted-text-color); } @media screen and (max-width: 700px) { @@ -205,9 +205,9 @@ font-size: 12px; line-height: 12px; font-weight: 500; - color: $ui-secondary-color; - background-color: rgba($ui-secondary-color, 0.1); - border: 1px solid rgba($ui-secondary-color, 0.5); + color: var(--background-color); + background-color: rgba(var(--background-color), 0.1); + border: 1px solid rgba(var(--background-color), 0.5); &.moderator { color: $success-green; @@ -252,7 +252,7 @@ width: 120px; flex: 0 0 auto; color: var(--primary-text-color-faint); - background: rgba(darken($ui-base-color, 8%), 0.5); + background: rgba(var(--background-color), 0.5); } dd { @@ -299,7 +299,7 @@ color: var(--primary-text-color-faint); a { - color: $ui-secondary-color; + color: var(--background-color); text-decoration: none; &:hover, diff --git a/app/styles/basics.scss b/app/styles/basics.scss index a012f6622..458526353 100644 --- a/app/styles/basics.scss +++ b/app/styles/basics.scss @@ -37,8 +37,7 @@ body { // Fira Sans => Firefox OS // Droid Sans => Older Androids (<4.0) // Helvetica Neue => Older macOS <10.11 - // $font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0) - font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", $font-sans-serif, sans-serif; + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; } &.app-body { diff --git a/app/styles/boost.scss b/app/styles/boost.scss index 5a6d6ae40..a26292c35 100644 --- a/app/styles/boost.scss +++ b/app/styles/boost.scss @@ -1,11 +1,11 @@ button.icon-button i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,"); + background-image: url("data:image/svg+xml;utf8,"); &:hover { - background-image: url("data:image/svg+xml;utf8,"); + background-image: url("data:image/svg+xml;utf8,"); } } button.icon-button.disabled i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,"); + background-image: url("data:image/svg+xml;utf8,"); } diff --git a/app/styles/components.scss b/app/styles/components.scss index 28fb3b924..bdcf0c6eb 100644 --- a/app/styles/components.scss +++ b/app/styles/components.scss @@ -68,13 +68,13 @@ } &.button-alternative { - color: $inverted-text-color; - background: $ui-primary-color; + color: var(--inverted-text-color); + background: var(--brand-color); &:active, &:focus, &:hover { - background-color: lighten($ui-primary-color, 4%); + background-color: var(--brand-color); } } @@ -92,13 +92,13 @@ color: var(--primary-text-color-faint); background: transparent; padding: 3px 15px; - border: 1px solid $ui-primary-color; + border: 1px solid var(--brand-color); &:active, &:focus, &:hover { - border-color: lighten($ui-primary-color, 4%); - color: lighten($darker-text-color, 4%); + border-color: var(--brand-color); + color: var(--primary-text-color); } &:disabled { @@ -121,7 +121,7 @@ .icon-button { display: inline-block; padding: 0; - color: var(--primary-text-color-faint); + color: rgba(var(--primary-text-color-rgb), 0.4); border: 0; background: transparent; cursor: pointer; @@ -134,12 +134,12 @@ &:hover, &:active, &:focus { - color: lighten($action-button-color, 7%); + color: lighten(#0482d8, 7%); transition: color 200ms ease-out; } &.disabled { - color: darken($action-button-color, 13%); + color: darken(#0482d8, 13%); cursor: default; } @@ -163,18 +163,18 @@ &:hover, &:active, &:focus { - color: darken($lighter-text-color, 7%); + color: var(--primary-text-color-faint); } &.disabled { - color: lighten($lighter-text-color, 7%); + color: var(--primary-text-color-faint); } &.active { color: var(--highlight-text-color); &.disabled { - color: lighten($highlight-text-color, 13%); + color: var(--highlight-text-color); } } } @@ -207,12 +207,12 @@ &:hover, &:active, &:focus { - color: darken($lighter-text-color, 7%); + color: var(--primary-text-color-faint); transition: color 200ms ease-out; } &.disabled { - color: lighten($lighter-text-color, 20%); + color: var(--primary-text-color-faint); cursor: default; } @@ -252,7 +252,7 @@ .ellipsis::after {content: "…";} .timeline-compose-block { - @include gab-container-standards; + @include standard-panel; display: flex; align-items: flex-start; padding: 20px; @@ -317,7 +317,7 @@ .reply-indicator { border-radius: 4px; margin-bottom: 10px; - background: $gab-background-base-light; + background: var(--background-color); padding: 10px; min-height: 23px; overflow-y: auto; @@ -338,7 +338,7 @@ } .reply-indicator__display-name { - color: $inverted-text-color; + color: var(--inverted-text-color); display: block; max-width: 100%; line-height: 24px; @@ -403,7 +403,7 @@ text-decoration: underline; .fa { - color: lighten($dark-text-color, 7%); + color: var(--primary-text-color); } } @@ -418,7 +418,7 @@ } .fa { - color: $dark-text-color; + color: var(--primary-text-color); } } @@ -487,7 +487,7 @@ } .status__wrapper--filtered { - color: $dark-text-color; + color: var(--primary-text-color); border: 0; font-size: inherit; text-align: center; @@ -571,16 +571,16 @@ .display-name { strong { - color: $inverted-text-color; + color: var(--inverted-text-color); } span { - color: $light-text-color; + color: var(--primary-text-color-faint); } } .status__content { - color: $inverted-text-color; + color: var(--inverted-text-color); a { color: var(--highlight-text-color); @@ -588,10 +588,10 @@ a.status__content__spoiler-link { color: var(--primary-text-color); - background: $ui-primary-color; + background: var(--brand-color); &:hover { - background: lighten($ui-primary-color, 8%); + background: var(--brand-color); } } } @@ -618,7 +618,7 @@ background: transparent; .icon-button.disabled { - color: lighten($action-button-color, 13%); + color: lighten(#0482d8, 13%); } } } @@ -646,7 +646,7 @@ } .status-check-box { - border-bottom: 1px solid $ui-secondary-color; + border-bottom: 1px solid var(--background-color); display: flex; .status-check-box__status { @@ -683,14 +683,14 @@ .status__prepend { margin-left: 68px; - color: $dark-text-color; + color: var(--primary-text-color); padding: 8px 0; padding-bottom: 2px; font-size: 14px; position: relative; .status__display-name strong { - color: $dark-text-color; + color: var(--primary-text-color); } > span { @@ -720,7 +720,7 @@ width: 14px; font-size: 12px; font-weight: 500; - color: $action-button-color; + color: #0482d8; } } } @@ -735,7 +735,7 @@ } .reply-indicator__content { - color: $gab-default-text-light; + color: var(--primary-text-color); font-size: 14px; user-select: text; @@ -870,7 +870,7 @@ a .account__avatar { .account__disclaimer { padding: 10px; border-top: 1px solid var(--brand-color-med); - color: $dark-text-color; + color: var(--primary-text-color); strong { font-weight: 500; @@ -1073,11 +1073,11 @@ a.account__display-name { .muted { .status__content p, .status__content a { - color: $dark-text-color; + color: var(--primary-text-color); } .status__display-name strong { - color: $dark-text-color; + color: var(--primary-text-color); } .status__avatar { @@ -1086,7 +1086,7 @@ a.account__display-name { a.status__content__spoiler-link { background: var(--brand-color-med); - color: $inverted-text-color; + color: var(--inverted-text-color); &:hover { background: var(--brand-color-faint); @@ -1625,7 +1625,7 @@ a.account__display-name { border-radius: 8px; text-align: center; color: #fff; - background: $nav-ui-highlight-color; + background: var(--brand-color); @media screen and (max-width: 895px) { top: 0; @@ -1634,7 +1634,7 @@ a.account__display-name { } .column-link--transparent .icon-with-badge__badge { - border-color: darken($ui-base-color, 8%); + border-color: var(--background-color); } .promo-panel { @@ -1644,7 +1644,7 @@ a.account__display-name { } .promo-panel-item { - @include light-theme-shadow; + @include standard-panel-shadow; display: block; height: 42px; line-height: 42px; @@ -1713,7 +1713,7 @@ a.account__display-name { } .pseudo-drawer { - background: lighten($ui-base-color, 13%); + background: var(--background-color); font-size: 13px; text-align: left; } @@ -1730,7 +1730,7 @@ a.account__display-name { transition: background 100ms ease-in; &:hover { - background: lighten($ui-base-color, 3%); + background: var(--background-color); transition: background 200ms ease-out; } } @@ -1846,7 +1846,7 @@ a.account__display-name { } .react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { - background-color: darken($ui-base-color, 10%); + background-color: var(--background-color); } .react-toggle--checked .react-toggle-track { @@ -1854,7 +1854,7 @@ a.account__display-name { } .react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { - background-color: lighten($gab-brand-default, 10%); + background-color: var(--brand-color-hicontrast); } .react-toggle-track-check { @@ -1933,7 +1933,7 @@ a.account__display-name { &--transparent { background: transparent; - color: $ui-secondary-color; + color: var(--background-color); &:hover, &:focus, @@ -2095,7 +2095,7 @@ a.account__display-name { } .reduce-motion button.icon-button i.fa-retweet { - color: $action-button-color; + color: #0482d8; transition: color 100ms ease-in; } @@ -2108,7 +2108,7 @@ a.account__display-name { font-size: 14px; border: 1px solid var(--brand-color-med); border-radius: 4px; - color: $dark-text-color; + color: var(--primary-text-color); margin-top: 14px; text-decoration: none; overflow: hidden; @@ -2282,7 +2282,7 @@ a.status-card.compact:hover { .load-more { display: block; - color: $dark-text-color; + color: var(--primary-text-color); background-color: transparent; border: 0; font-size: inherit; @@ -2308,7 +2308,7 @@ a.status-card.compact:hover { text-align: center; font-size: 16px; font-weight: 500; - color: $dark-text-color; + color: var(--primary-text-color); background: var(--brand-color-med); cursor: default; display: flex; @@ -2327,7 +2327,7 @@ a.status-card.compact:hover { strong { display: block; margin-bottom: 10px; - color: $dark-text-color; + color: var(--primary-text-color); } span { @@ -2341,7 +2341,7 @@ a.status-card.compact:hover { text-align: center; font-size: 16px; font-weight: 500; - color: $dark-text-color; + color: var(--primary-text-color); background: var(--brand-color-med); cursor: default; display: flex; @@ -2360,13 +2360,13 @@ a.status-card.compact:hover { strong { display: block; margin-bottom: 10px; - color: $dark-text-color; + color: var(--primary-text-color); } } } .columns-area--mobile .column { - @include gab-container-standards; + @include standard-panel; } .column-header__wrapper { @@ -2387,7 +2387,7 @@ a.status-card.compact:hover { pointer-events: none; height: 28px; z-index: 1; - background: radial-gradient(ellipse, rgba($ui-highlight-color, 0.23) 0%, rgba($ui-highlight-color, 0) 60%); + background: radial-gradient(ellipse, rgba(var(--brand-color), 0.23) 0%, rgba(var(--brand-color), 0) 60%); } } } @@ -2449,11 +2449,11 @@ a.status-card.compact:hover { } &.active { - box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3); + box-shadow: 0 1px 0 rgba(var(--highlight-text-color), 0.3); .column-header__icon { color: var(--highlight-text-color); - text-shadow: 0 0 10px rgba($highlight-text-color, 0.4); + text-shadow: 0 0 10px rgba(var(--highlight-text-color), 0.4); } } @@ -2478,11 +2478,11 @@ a.status-card.compact:hover { border: 0; padding: 0 15px; font-size: 16px; - color: var(--primary-text-color); + color: var(--primary-text-color-faint); background: transparent; &:hover { - color: var(--primary-text-color-faint); + color: rgba(var(--primary-text-color-rgb), 0.8); } &.active { @@ -2682,7 +2682,7 @@ a.status-card.compact:hover { &:active, &:focus { padding: 0; - color: lighten($darker-text-color, 8%); + color: var(--primary-text-color); } } @@ -2787,7 +2787,7 @@ a.status-card.compact:hover { } &__placeholder { - color: $dark-text-color; + color: var(--primary-text-color); padding-left: 2px; font-size: 12px; } @@ -2806,7 +2806,7 @@ a.status-card.compact:hover { &:active, &:focus { background: var(--brand-color-med); - color: lighten($darker-text-color, 4%); + color: var(--primary-text-color); } } } @@ -2820,12 +2820,12 @@ a.status-card.compact:hover { &__dropdown-indicator { cursor: pointer; transition: none; - color: $dark-text-color; + color: var(--primary-text-color); &:hover, &:active, &:focus { - color: lighten($dark-text-color, 4%); + color: var(--primary-text-color); } } @@ -2836,7 +2836,7 @@ a.status-card.compact:hover { &__menu { @include search-popout; padding: 0; - background: $ui-secondary-color; + background: var(--background-color); } &__menu-list { @@ -2844,13 +2844,13 @@ a.status-card.compact:hover { } &__option { - color: $inverted-text-color; + color: var(--inverted-text-color); border-radius: 4px; font-size: 14px; &--is-focused, &--is-selected { - background: darken($ui-secondary-color, 10%); + background: var(--background-color); } } } @@ -2895,7 +2895,7 @@ a.status-card.compact:hover { .empty-column-indicator, .error-column { - color: $dark-text-color; + color: var(--primary-text-color); background: var(--brand-color-med); text-align: center; padding: 40px; @@ -3043,7 +3043,7 @@ a.status-card.compact:hover { &:hover, &:focus, &:active { - background: rgba($ui-secondary-color, 0.4); + background: rgba(var(--background-color), 0.4); } } @@ -3209,7 +3209,7 @@ a.status-card.compact:hover { } .privacy-dropdown__option { - color: $inverted-text-color; + color: var(--inverted-text-color); padding: 10px; cursor: pointer; display: flex; @@ -3230,7 +3230,7 @@ a.status-card.compact:hover { } &.active:hover { - background: lighten($ui-highlight-color, 4%); + background: var(--brand-color); } } @@ -3248,7 +3248,7 @@ a.status-card.compact:hover { strong { font-weight: 500; display: block; - color: $inverted-text-color; + color: var(--inverted-text-color); @each $lang in $cjk-langs { &:lang(#{$lang}) { @@ -3317,7 +3317,7 @@ a.status-card.compact:hover { z-index: 2; width: 18px; height: 18px; - color: $gab-placeholder-accent; + color: var(--primary-text-color-faint); opacity: 0; pointer-events: none; @@ -3337,7 +3337,7 @@ a.status-card.compact:hover { } .search-results__header { - color: $dark-text-color; + color: var(--primary-text-color); background: var(--brand-color-med); padding: 15px; font-weight: 500; @@ -3361,7 +3361,7 @@ a.status-card.compact:hover { padding: 15px; font-weight: 500; font-size: 16px; - color: $dark-text-color; + color: var(--primary-text-color); .fa { display: inline-block; @@ -3384,7 +3384,7 @@ a.status-card.compact:hover { &:hover, &:active, &:focus { - color: lighten($secondary-text-color, 4%); + color: var(--primary-text-color); text-decoration: underline; } } @@ -3445,7 +3445,7 @@ a.status-card.compact:hover { &__icon { flex: 0 0 auto; - color: $dark-text-color; + color: var(--primary-text-color); padding: 8px 18px; cursor: default; border-right: 1px solid var(--brand-color-med); @@ -3475,7 +3475,7 @@ a.status-card.compact:hover { a { text-decoration: none; - color: $dark-text-color; + color: var(--primary-text-color); font-weight: 500; &:hover { @@ -3494,7 +3494,7 @@ a.status-card.compact:hover { } .fa { - color: $dark-text-color; + color: var(--primary-text-color); } } } @@ -3765,7 +3765,7 @@ a.status-card.compact:hover { &:hover, &:active, &:focus { - color: lighten($darker-text-color, 7%); + color: var(--primary-text-color); } } @@ -4233,7 +4233,7 @@ noscript { border: 0; border-radius: 5px; padding: 10px; - font-family: $font-monospace, monospace; + font-family: var(--font-monospace), monospace; background: var(--brand-color-med); color: var(--primary-text-color); font-size: 14px; @@ -4282,7 +4282,7 @@ noscript { &__message { position: relative; margin-left: 58px; - color: $dark-text-color; + color: var(--primary-text-color); padding: 8px 0; padding-top: 0; padding-bottom: 4px; @@ -4359,7 +4359,7 @@ noscript { h4 { padding: 15px 0; - background: lighten($ui-base-color, 13%); + background: var(--background-color); font-weight: 500; font-size: 16px; text-align: center; @@ -4377,7 +4377,7 @@ noscript { } &__accounts { - background: lighten($ui-base-color, 13%); + background: var(--background-color); overflow-y: auto; max-height: 200px; } @@ -4424,12 +4424,12 @@ noscript { } &__account { - background: lighten($ui-base-color, 13%); + background: var(--background-color); border-radius: 4px; } &__lists { - background: lighten($ui-base-color, 13%); + background: var(--background-color); } .list { @@ -4536,7 +4536,7 @@ noscript { .trends { &__header { - color: $dark-text-color; + color: var(--primary-text-color); background: var(--brand-color-faint); border-bottom: 1px solid var(--brand-color-med); font-weight: 500; @@ -4562,7 +4562,7 @@ noscript { &__name { flex: 1 1 auto; - color: $dark-text-color; + color: var(--primary-text-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -4607,7 +4607,7 @@ noscript { width: 50px; path { - stroke: lighten($highlight-text-color, 6%) !important; + stroke: var(--highlight-text-color) !important; } } } @@ -4629,7 +4629,7 @@ noscript { &:focus, &:active { svg path:first-child { - fill: lighten($ui-base-color, 16%); + fill: var(--background-color); } } } @@ -4643,7 +4643,7 @@ noscript { } path:last-child { - fill: darken($ui-base-color, 14%); + fill: var(--background-color); } } @@ -4660,14 +4660,14 @@ noscript { } .wtf-panel { - @include light-theme-shadow; + @include standard-panel-shadow; display: flex; width: 100%; border-radius: 10px; flex-direction: column; height: auto; box-sizing: border-box; - background: $gab-background-container; + background: var(--foreground-color); &:not(:last-of-type) { margin-bottom: 10px; @@ -4828,7 +4828,7 @@ noscript { .compose-modal { padding: 8px 0 0; overflow: hidden; - background-color: $classic-base-color; + background-color: var(--background-color); border-radius: 6px; flex-direction: column; width: 600px; @@ -4837,7 +4837,7 @@ noscript { &__header { display: block; position: relative; - border-bottom: 1px solid lighten($classic-base-color, 8%); + border-bottom: 1px solid var(--background-color); border-radius: 6px 6px 0 0; padding-top: 12px; padding-bottom: 12px; @@ -4849,7 +4849,7 @@ noscript { font-size: 18px; font-weight: bold; line-height: 24px; - color: $gab-background-base-light; + color: var(--background-color); text-align: center; } } diff --git a/app/styles/components/buttons.scss b/app/styles/components/buttons.scss index 2dfb4c394..b29aa9827 100644 --- a/app/styles/components/buttons.scss +++ b/app/styles/components/buttons.scss @@ -14,7 +14,7 @@ a.button { border-radius: 4px; text-transform: uppercase; color: #fff; - background: $gab-small-cta-primary; + background: #607cf5; } } diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss index 35e5b3bb2..9b48619df 100644 --- a/app/styles/components/compose-form.scss +++ b/app/styles/components/compose-form.scss @@ -12,7 +12,7 @@ .checkbox { display: inline-block; position: relative; - border: 1px solid $ui-primary-color; + border: 1px solid var(--brand-color); box-sizing: border-box; width: 18px; height: 18px; @@ -32,7 +32,7 @@ .compose-form__warning { color: var(--primary-text-color); margin-bottom: 10px; - background: $ui-primary-color; + background: var(--brand-color); box-shadow: 0 2px 6px rgba($base-shadow-color, 0.3); padding: 8px 10px; border-radius: 4px; @@ -40,7 +40,7 @@ font-weight: 400; strong { - color: $inverted-text-color; + color: var(--inverted-text-color); font-weight: 500; @each $lang in $cjk-langs { &:lang(#{$lang}) { @@ -97,7 +97,7 @@ box-sizing: border-box; width: 100%; margin: 0; - color: $inverted-text-color; + color: var(--inverted-text-color); background: #f2f2f2; padding: 10px; font-family: inherit; @@ -146,9 +146,9 @@ width: 100%; z-index: 99; box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4); - background: $ui-secondary-color; + background: var(--background-color); border-radius: 0 0 4px 4px; - color: $inverted-text-color; + color: var(--inverted-text-color); font-size: 14px; padding: 6px; &.autosuggest-textarea__suggestions--visible {display: block;} @@ -163,7 +163,7 @@ &:focus, &:active, &.selected { - background: darken($ui-secondary-color, 10%); + background: var(--background-color); } } @@ -187,7 +187,7 @@ .autosuggest-account .display-name__account {color: var(--highlight-text-color);} .compose-form__modifiers { - color: $inverted-text-color; + color: var(--inverted-text-color); font-family: inherit; font-size: 14px; background: $simple-background-color; @@ -228,7 +228,7 @@ &:hover, &:focus, &:active { - color: $gab-text-highlight; + color: var(--highlight-text-color); } } &.active {opacity: 1;} @@ -283,7 +283,7 @@ .compose-form__buttons-wrapper { padding: 10px; - background: $gab-background-base-light; + background: var(--background-color); border-radius: 0 0 4px 4px; display: flex; justify-content: space-between; @@ -311,7 +311,7 @@ .character-counter { cursor: default; - font-family: $font-sans-serif, sans-serif; + font-family: var(--font-sans-serif), sans-serif; font-size: 14px; font-weight: 600; color: var(--primary-text-color-faint); diff --git a/app/styles/components/dropdown-menu.scss b/app/styles/components/dropdown-menu.scss index 905a1b7fe..7893df7c5 100644 --- a/app/styles/components/dropdown-menu.scss +++ b/app/styles/components/dropdown-menu.scss @@ -109,7 +109,7 @@ & > ul { list-style: none; - background: $ui-secondary-color; + background: var(--background-color); padding: 4px 0; border-radius: 4px; box-shadow: 0 0 15px rgba($base-shadow-color, 0.4); @@ -134,8 +134,8 @@ padding: 4px 14px; box-sizing: border-box; text-decoration: none; - background: $ui-secondary-color; - color: $inverted-text-color; + background: var(--background-color); + color: var(--inverted-text-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; diff --git a/app/styles/components/group-card.scss b/app/styles/components/group-card.scss index fb4cad7c1..0fbb4f195 100644 --- a/app/styles/components/group-card.scss +++ b/app/styles/components/group-card.scss @@ -1,5 +1,5 @@ .group-column-header { - @include gab-container-standards; + @include standard-panel; overflow: hidden; .group-column-header__title { @@ -26,7 +26,7 @@ } .group-card { - @include gab-container-standards; + @include standard-panel; display: block; flex: 0 0 calc(50% - 20px/2); margin-bottom: 20px; @@ -39,7 +39,7 @@ img { pointer-events: none; width: 100%; - background: $gab-background-container; + background: var(--foreground-color); } } diff --git a/app/styles/components/group-detail.scss b/app/styles/components/group-detail.scss index 43c798fb6..b5c96aff0 100644 --- a/app/styles/components/group-detail.scss +++ b/app/styles/components/group-detail.scss @@ -9,7 +9,7 @@ .group__header { width: 100%; max-width: 1150px; - background: $gab-background-container; + background: var(--foreground-color); border-radius: 10px; overflow: hidden; margin: 20px 0; @@ -69,14 +69,14 @@ display: inline-block; margin-bottom: 10px; border-radius: 4px; - background: $gab-background-container; + background: var(--foreground-color); font-size: 13px; padding: 4px 8px; } } .group__feed { - background: $gab-background-container; + background: var(--foreground-color); border-top-left-radius: 10px; border-top-right-radius: 10px; overflow: hidden; diff --git a/app/styles/components/group-form.scss b/app/styles/components/group-form.scss index 9bfe325d4..0b89bc87b 100644 --- a/app/styles/components/group-form.scss +++ b/app/styles/components/group-form.scss @@ -1,5 +1,5 @@ .group-form { - @include gab-container-standards; + @include standard-panel; padding: 20px; &, diff --git a/app/styles/components/hotkeys-modal.scss b/app/styles/components/hotkeys-modal.scss index af5ef6cd8..504a000fe 100644 --- a/app/styles/components/hotkeys-modal.scss +++ b/app/styles/components/hotkeys-modal.scss @@ -1,7 +1,7 @@ .hotkeys-modal { padding: 8px 0 0; overflow: hidden; - background-color: $classic-base-color; + background-color: var(--background-color); border-radius: 6px; flex-direction: column; @@ -10,7 +10,7 @@ } .compose-modal__content { - background-color: $gab-background-base-light; + background-color: var(--background-color); margin: 5px; @media screen and (max-width: 960px) { diff --git a/app/styles/components/inputs.scss b/app/styles/components/inputs.scss index ecd73d096..e38654acb 100644 --- a/app/styles/components/inputs.scss +++ b/app/styles/components/inputs.scss @@ -3,14 +3,14 @@ textarea { &.standard { @include font-size(16); @include line-height(18); - @include input-placeholder($gab-placeholder-accent); + @include input-placeholder(var(--primary-text-color-faint)); box-sizing: border-box; padding: 7px 10px; border: 1px solid; border-radius: 4px; color: var(--brand-color); - border-color: $gab-placeholder-accent; - background: $gab-background-container; + border-color: var(--primary-text-color-faint); + background: var(--foreground-color); &:focus {outline: none;} } } diff --git a/app/styles/components/modal.scss b/app/styles/components/modal.scss index f8dbb43cd..897af0e1a 100644 --- a/app/styles/components/modal.scss +++ b/app/styles/components/modal.scss @@ -143,7 +143,7 @@ a { text-decoration: none; font-weight: 500; - color: $ui-secondary-color; + color: var(--background-color); &:hover, &:focus, @@ -182,8 +182,8 @@ .onboarding-modal, .error-modal, .embed-modal { - background: $ui-secondary-color; - color: $inverted-text-color; + background: var(--background-color); + color: var(--inverted-text-color); border-radius: 8px; overflow: hidden; display: flex; @@ -230,7 +230,7 @@ .onboarding-modal__paginator, .error-modal__footer { flex: 0 0 auto; - background: darken($ui-secondary-color, 8%); + background: var(--background-color); display: flex; padding: 25px; @@ -254,18 +254,18 @@ &:hover, &:focus, &:active { - color: darken($lighter-text-color, 4%); - background-color: darken($ui-secondary-color, 16%); + color: var(--primary-text-color-faint); + background-color: var(--background-color); } &.onboarding-modal__done, &.onboarding-modal__next { - color: $inverted-text-color; + color: var(--inverted-text-color); &:hover, &:focus, &:active { - color: lighten($inverted-text-color, 4%); + color: var(--inverted-text-color); } } } @@ -282,7 +282,7 @@ &__label { font-weight: 500; - color: $inverted-text-color; + color: var(--inverted-text-color); margin-bottom: 5px; text-transform: uppercase; font-size: 12px; @@ -315,9 +315,9 @@ width: 480px; max-width: 90vw; border-radius: 4px; - border: 1px solid $gab-placeholder-accent; + border: 1px solid var(--primary-text-color-faint); color: var(--primary-text-color-faint); - background: $gab-background-container; + background: var(--foreground-color); .status__display-name { display: block; @@ -334,14 +334,14 @@ } .status__content__spoiler-link { - color: lighten($secondary-text-color, 8%); + color: var(--primary-text-color); } } .actions-modal { .status { background: #ffffff; - border-bottom-color: $ui-secondary-color; + border-bottom-color: var(--background-color); padding-top: 10px; padding-bottom: 10px; } @@ -350,7 +350,7 @@ display: block; margin: 10px; height: 1px; - background: $gab-background-base; + background: var(--background-color); } } @@ -369,7 +369,7 @@ .mute-modal__action-bar { display: flex; justify-content: space-between; - background: $ui-secondary-color; + background: var(--background-color); padding: 10px; line-height: 36px; @@ -409,7 +409,7 @@ .report-modal__container { display: flex; - border-top: 1px solid $ui-secondary-color; + border-top: 1px solid var(--background-color); @media screen and (max-width: 480px) { flex-wrap: wrap; @@ -450,7 +450,7 @@ .report-modal__comment { padding: 20px; - border-right: 1px solid $ui-secondary-color; + border-right: 1px solid var(--background-color); max-width: 320px; p { @@ -464,7 +464,7 @@ box-sizing: border-box; width: 100%; margin: 0; - color: $inverted-text-color; + color: var(--inverted-text-color); background: #ffffff; padding: 10px; font-family: inherit; @@ -473,11 +473,11 @@ border: 0; outline: 0; border-radius: 4px; - border: 1px solid $ui-secondary-color; + border: 1px solid var(--background-color); margin-bottom: 20px; &:focus { - border: 1px solid darken($ui-secondary-color, 8%); + border: 1px solid var(--background-color); } } @@ -486,7 +486,7 @@ margin-bottom: 24px; &__label { - color: $inverted-text-color; + color: var(--inverted-text-color); font-size: 14px; } } @@ -546,8 +546,8 @@ &:focus { &, button { - background: $gab-background-base; - color: $gab-text-highlight; + background: var(--background-color); + color: var(--highlight-text-color); box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.5); } } @@ -570,7 +570,7 @@ &:hover, &:focus, &:active { - color: darken($lighter-text-color, 4%); + color: var(--primary-text-color-faint); } } @@ -607,7 +607,7 @@ } .modal-layout { - background: var(--brand-color-med) url('data:image/svg+xml;utf8,') repeat-x bottom fixed; + background: var(--brand-color-med) url('data:image/svg+xml;utf8,') repeat-x bottom fixed; display: flex; flex-direction: column; height: 100vh; diff --git a/app/styles/components/sidebar-menu.scss b/app/styles/components/sidebar-menu.scss index 15af6eff4..4ab2b450c 100644 --- a/app/styles/components/sidebar-menu.scss +++ b/app/styles/components/sidebar-menu.scss @@ -152,7 +152,7 @@ font-weight: 400; &:hover { - background-color: rgba($gab-brand-default, 0.1); + background-color: rgba(var(--brand-color-rgb), 0.1); .fa { color: #000; diff --git a/app/styles/components/user-panel.scss b/app/styles/components/user-panel.scss index 5a4b4861a..38aa6b1f3 100644 --- a/app/styles/components/user-panel.scss +++ b/app/styles/components/user-panel.scss @@ -1,5 +1,5 @@ .user-panel { - @include gab-container-standards; + @include standard-panel; display: flex; width: 265px; flex-direction: column; diff --git a/app/styles/containers.scss b/app/styles/containers.scss index f2fa0fc4a..87ce413ad 100644 --- a/app/styles/containers.scss +++ b/app/styles/containers.scss @@ -35,7 +35,6 @@ outline: 0; padding: 12px 16px; line-height: 32px; - font-family: $font-display, sans-serif; font-weight: 500; font-size: 14px; } diff --git a/app/styles/dashboard.scss b/app/styles/dashboard.scss index 51b9810e2..600cacc97 100644 --- a/app/styles/dashboard.scss +++ b/app/styles/dashboard.scss @@ -37,7 +37,7 @@ font-size: 24px; line-height: 21px; color: var(--primary-text-color); - font-family: $font-display, sans-serif; + font-family: var(--font-display), sans-serif; margin-bottom: 20px; line-height: 30px; } @@ -69,7 +69,7 @@ } a:not(.name-tag) { - color: $ui-secondary-color; + color: var(--background-color); font-weight: 500; text-decoration: none; } diff --git a/app/styles/donations.scss b/app/styles/donations.scss index f9e63420a..963e9e544 100644 --- a/app/styles/donations.scss +++ b/app/styles/donations.scss @@ -26,7 +26,7 @@ } .sub { - border: 1px solid rgba($darker-text-color, 0.5); + border: 1px solid rgba(var(--primary-text-color-rgb), 0.5); padding: 20px; position: relative; border-radius: 4px; @@ -203,7 +203,7 @@ body.admin { height: 8px; width: 100%; border-radius: 4px; - background: $gab-background-base-light; + background: var(--background-color); overflow: hidden; &__progress { diff --git a/app/styles/emoji_picker.scss b/app/styles/emoji_picker.scss index 51439dab9..8bc0280f5 100644 --- a/app/styles/emoji_picker.scss +++ b/app/styles/emoji_picker.scss @@ -1,7 +1,7 @@ .emoji-mart { font-size: 13px; display: inline-block; - color: $inverted-text-color; + color: var(--inverted-text-color); &, * { @@ -15,13 +15,13 @@ } .emoji-mart-bar { - border: 0 solid darken($ui-secondary-color, 8%); + border: 0 solid var(--background-color); &:first-child { border-bottom-width: 1px; border-top-left-radius: 5px; border-top-right-radius: 5px; - background: $ui-secondary-color; + background: var(--background-color); } &:last-child { @@ -50,7 +50,7 @@ cursor: pointer; &:hover { - color: darken($lighter-text-color, 4%); + color: var(--primary-text-color-faint); } } @@ -58,7 +58,7 @@ color: var(--highlight-text-color); &:hover { - color: darken($highlight-text-color, 4%); + color: var(--highlight-text-color); } .emoji-mart-anchor-bar { @@ -114,9 +114,9 @@ font-family: inherit; display: block; width: 100%; - background: rgba($ui-secondary-color, 0.3); - color: $inverted-text-color; - border: 1px solid $ui-secondary-color; + background: rgba(var(--background-color), 0.3); + color: var(--inverted-text-color); + border: 1px solid var(--background-color); border-radius: 4px; &::-moz-focus-inner { @@ -148,7 +148,7 @@ left: 0; width: 100%; height: 100%; - background-color: rgba($ui-secondary-color, 0.7); + background-color: rgba(var(--background-color), 0.7); border-radius: 100%; } } @@ -184,7 +184,7 @@ font-size: 14px; text-align: center; padding-top: 70px; - color: $light-text-color; + color: var(--primary-text-color-faint); .emoji-mart-category-label { display: none; diff --git a/app/styles/forms.scss b/app/styles/forms.scss index db2067516..d9a3e3551 100644 --- a/app/styles/forms.scss +++ b/app/styles/forms.scss @@ -1,7 +1,7 @@ $no-columns-breakpoint: 600px; code { - font-family: $font-monospace, monospace; + font-family: var(--font-monospace), monospace; font-weight: 400; } @@ -104,7 +104,7 @@ code { code { border-radius: 3px; padding: 0.2em 0.4em; - background: darken($ui-base-color, 12%); + background: var(--background-color); } } @@ -455,7 +455,7 @@ code { padding: 10px; padding-bottom: 9px; font-size: 16px; - color: $dark-text-color; + color: var(--primary-text-color); font-family: inherit; pointer-events: none; cursor: default; @@ -471,7 +471,7 @@ code { right: 0; bottom: 1px; width: 5px; - background-image: linear-gradient(to right, rgba(darken($ui-base-color, 10%), 0), darken($ui-base-color, 10%)); + background-image: linear-gradient(to right, rgba(var(--background-color), 0), var(--background-color)); } } } @@ -488,7 +488,7 @@ code { display: flex; justify-content: center; align-items: center; - background: rgba($ui-base-color, 0.65); + background: var(--background-color); backdrop-filter: blur(2px); border-radius: 4px; @@ -555,7 +555,7 @@ code { width: 100%; border: 0; padding: 10px; - font-family: $font-monospace, monospace; + font-family: var(--font-monospace), monospace; background: var(--brand-color-med); color: var(--primary-text-color); font-size: 14px; @@ -624,7 +624,7 @@ code { &:hover, &:focus, &:active { - color: lighten($highlight-text-color, 8%); + color: var(--highlight-text-color); } } } @@ -799,13 +799,13 @@ code { .form_admin_settings_custom_css, .form_admin_settings_closed_registrations_message { textarea { - font-family: $font-monospace, monospace; + font-family: var(--font-monospace), monospace; } } .input-copy { - background: darken($ui-base-color, 10%); - border: 1px solid darken($ui-base-color, 14%); + background: var(--background-color); + border: 1px solid var(--background-color); border-radius: 4px; display: flex; align-items: center; @@ -823,7 +823,7 @@ code { border: 0; padding: 10px; font-size: 14px; - font-family: $font-monospace, monospace; + font-family: var(--font-monospace), monospace; } button { diff --git a/app/styles/introduction.scss b/app/styles/introduction.scss index dd9b46101..e9dbb9ffe 100644 --- a/app/styles/introduction.scss +++ b/app/styles/introduction.scss @@ -5,12 +5,12 @@ align-items: center !important; @media screen and (max-width: 920px) { - background: darken($ui-base-color, 8%); + background: var(--background-color); display: block !important; } &__pager { - background: darken($ui-base-color, 8%); + background: var(--background-color); box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); overflow: hidden; } @@ -96,7 +96,7 @@ code { display: inline-block; - background: darken($ui-base-color, 8%); + background: var(--background-color); font-size: 15px; border: 1px solid var(--brand-color-med); border-radius: 2px; diff --git a/app/styles/modal.scss b/app/styles/modal.scss index 98bcce1da..edfc214c2 100644 --- a/app/styles/modal.scss +++ b/app/styles/modal.scss @@ -1,5 +1,5 @@ .modal-layout { - background: $ui-base-color url('data:image/svg+xml;utf8,') repeat-x bottom fixed; + background: var(--background-color) url('data:image/svg+xml;utf8,') repeat-x bottom fixed; display: flex; flex-direction: column; height: 100vh; diff --git a/app/styles/polls.scss b/app/styles/polls.scss index 8ad9596da..e330775d7 100644 --- a/app/styles/polls.scss +++ b/app/styles/polls.scss @@ -14,8 +14,8 @@ height: 100%; display: inline-block; border-radius: 4px; - background: rgba($gab-placeholder-accent, .3); - &.leading {background: rgba($gab-placeholder-accent, .6);} + background: rgba(var(--primary-text-color-rgb), .3); + &.leading {background: rgba(var(--primary-text-color-rgb), .6);} } &__text { @@ -47,7 +47,7 @@ box-sizing: border-box; width: 100%; font-size: 14px; - color: $inverted-text-color; + color: var(--inverted-text-color); display: block; outline: 0; font-family: inherit; @@ -79,7 +79,7 @@ &__input { display: inline-block; position: relative; - border: 1px solid $ui-primary-color; + border: 1px solid var(--brand-color); box-sizing: border-box; width: 18px; height: 18px; @@ -110,7 +110,7 @@ &__footer { padding-top: 6px; padding-bottom: 5px; - color: $dark-text-color; + color: var(--primary-text-color); } &__link { @@ -119,7 +119,7 @@ padding: 0; margin: 0; border: 0; - color: $dark-text-color; + color: var(--primary-text-color); text-decoration: underline; font-size: inherit; @@ -129,7 +129,7 @@ &:active, &:focus { - background-color: rgba($dark-text-color, .1); + background-color: rgba(var(--primary-text-color-rgb), .1); } } @@ -166,8 +166,8 @@ padding: 6px 10px; height: auto; line-height: inherit; - color: $action-button-color; - border-color: $action-button-color; + color: #0482d8; + border-color: #0482d8; } li { @@ -185,17 +185,17 @@ appearance: none; box-sizing: border-box; font-size: 14px; - color: $action-button-color; + color: #0482d8; display: inline-block; width: auto; outline: 0; font-family: inherit; background-color: $simple-background-color; - background-image: url("data:image/svg+xml;utf8,"); + background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; background-position: right 8px center; background-size: auto 16px; - border: 1px solid $action-button-color; + border: 1px solid #0482d8; border-radius: 4px; padding: 6px 10px; padding-right: 30px; @@ -207,13 +207,13 @@ } .muted .poll { - color: $dark-text-color; + color: var(--primary-text-color); &__chart { - background: rgba(darken($ui-primary-color, 14%), 0.2); + background: rgba(var(--brand-color), 0.2); &.leading { - background: rgba($ui-highlight-color, 0.2); + background: rgba(var(--brand-color), 0.2); } } } diff --git a/app/styles/rtl.scss b/app/styles/rtl.scss index 56f49e9dd..b47035515 100644 --- a/app/styles/rtl.scss +++ b/app/styles/rtl.scss @@ -238,12 +238,12 @@ body.rtl { &::after { right: auto; left: 0; - background-image: linear-gradient(to left, rgba(darken($ui-base-color, 10%), 0), darken($ui-base-color, 10%)); + background-image: linear-gradient(to left, rgba(var(--background-color), 0), var(--background-color)); } } .simple_form select { - background: darken($ui-base-color, 10%) url("data:image/svg+xml;utf8,") no-repeat left 8px center / auto 16px; + background: var(--background-color) url("data:image/svg+xml;utf8,") no-repeat left 8px center / auto 16px; } .table th, diff --git a/app/styles/tables.scss b/app/styles/tables.scss index d0036a81d..0a8eb0589 100644 --- a/app/styles/tables.scss +++ b/app/styles/tables.scss @@ -68,17 +68,17 @@ &.batch-table { & > thead > tr > th { background: var(--brand-color-med); - border-top: 1px solid darken($ui-base-color, 8%); - border-bottom: 1px solid darken($ui-base-color, 8%); + border-top: 1px solid var(--background-color); + border-bottom: 1px solid var(--background-color); &:first-child { border-radius: 4px 0 0; - border-left: 1px solid darken($ui-base-color, 8%); + border-left: 1px solid var(--background-color); } &:last-child { border-radius: 0 4px 0 0; - border-right: 1px solid darken($ui-base-color, 8%); + border-right: 1px solid var(--background-color); } } } @@ -94,7 +94,7 @@ } samp { - font-family: $font-monospace, monospace; + font-family: var(--font-monospace), monospace; } button.table-action-link { @@ -164,7 +164,7 @@ a.table-action-link { } &__toolbar { - border: 1px solid darken($ui-base-color, 8%); + border: 1px solid var(--background-color); background: var(--brand-color-med); border-radius: 4px 0 0; height: 47px; @@ -181,18 +181,18 @@ a.table-action-link { } &__row { - border: 1px solid darken($ui-base-color, 8%); + border: 1px solid var(--background-color); border-top: 0; background: var(--brand-color-med); @media screen and (max-width: $no-gap-breakpoint) { &:first-child { - border-top: 1px solid darken($ui-base-color, 8%); + border-top: 1px solid var(--background-color); } } &:hover { - background: darken($ui-base-color, 2%); + background: var(--background-color); } &:nth-child(even) { @@ -226,12 +226,12 @@ a.table-action-link { } .nothing-here { - border: 1px solid darken($ui-base-color, 8%); + border: 1px solid var(--background-color); border-top: 0; box-shadow: none; @media screen and (max-width: $no-gap-breakpoint) { - border-top: 1px solid darken($ui-base-color, 8%); + border-top: 1px solid var(--background-color); } } diff --git a/app/styles/themes.scss b/app/styles/themes.scss index f6be5fadc..e905cb8d3 100644 --- a/app/styles/themes.scss +++ b/app/styles/themes.scss @@ -11,6 +11,11 @@ body { --primary-text-color-rgb: var(--primary-text-color-r), var(--primary-text-color-g), var(--primary-text-color-b); --primary-text-color: rgb(var(--primary-text-color-rgb)); --primary-text-color-faint: rgba(var(--primary-text-color-rgb), 0.6); + --inverted-text-color: rgb( + calc(255 - var(--primary-text-color-r)), + calc(255 - var(--primary-text-color-g)), + calc(255 - var(--primary-text-color-b)) + ); } body.theme-mode-light { diff --git a/app/styles/variables.scss b/app/styles/variables.scss index 08aec71a0..047828cc7 100644 --- a/app/styles/variables.scss +++ b/app/styles/variables.scss @@ -1,35 +1,3 @@ -// Going to create a Gab Specific color stack and gracefully remove the existing stack -// We know what colors we want to use for everything in the UI -// The existing color stack is based on propagating color tint variants of a few basic colors - -////////// GAB SPECIFIC VARIABLE STACK ////////// - -// NOTE - will eventually create a systematic approach of setting color variables to easily change instance themes - -// STATIC COLORS - -$gab-brand-default: #990099 !default; -$gab-secondary-text: #999 !default; -$gab-text-highlight: #e600e6 !default; -$gab-small-cta-primary: #607cf5 !default; - - -// THEME COLORS - -// default theme (dark) -$gab-background-base: #333 !default; -$gab-background-container: #222 !default; -$gab-placeholder-accent: #666 !default; - - -// light theme -$gab-background-base-light: #f6f2f6 !default; -$gab-default-text-light: #6c6c6c !default; - -$gab-background: $gab-background-base !default; - - - // BREAKPOINT SETS // navigation breakpoints - by default show all elements and link names along with icons @@ -38,16 +6,11 @@ $gab-background: $gab-background-base !default; $nav-breakpoint-1: 850px; // search field hidden and replaced with search icon link $nav-breakpoint-2: 650px; -// "Gab" button hidden and replaced with floating button on bottom corner +// "Post" button hidden and replaced with floating button on bottom corner $nav-breakpoint-3: 450px; -// Gab Logo hidden - bare minimum navigation for smallest width devices +// Site Logo hidden - bare minimum navigation for smallest width devices $nav-breakpoint-4: 375px; - - - -////////// EXISTING VARIABLE STACK (with modifications) ////////// - // Commonly used web colors $success-green: #79bd9a !default; // Padua @@ -55,12 +18,6 @@ $error-red: #df405a !default; // Cerise $warning-red: #ff5050 !default; // Sunset Orange $gold-star: #ca8f04 !default; // Dark Goldenrod -// Values from the classic Gab Social UI -$classic-base-color: $gab-background-base; -$classic-primary-color: $gab-background-base; -$classic-secondary-color: $gab-placeholder-accent; -$classic-highlight-color: $gab-text-highlight; - // Variables for defaults in UI $base-shadow-color: #000000 !default; $base-overlay-background: #000000 !default; @@ -68,28 +25,6 @@ $simple-background-color: #ffffff !default; $valid-value-color: $success-green !default; $error-value-color: $error-red !default; -// Tell UI to use selected colors -$ui-base-color: $classic-base-color !default; // Darkest -$ui-base-lighter-color: lighten($ui-base-color, 26%) !default; // Lighter darkest -$ui-primary-color: $classic-primary-color !default; // Lighter -$ui-secondary-color: $classic-secondary-color !default; // Lightest -$ui-highlight-color: $classic-highlight-color !default; - -// Nav UI -$nav-ui-highlight-color: $gab-text-highlight !default; -$nav-ui-search-bg-color: darken($nav-ui-highlight-color, 52%) !default; - -// Variables for texts -$darker-text-color: $gab-secondary-text !default; -$dark-text-color: $ui-base-lighter-color !default; -$secondary-text-color: $ui-secondary-color !default; -$highlight-text-color: $ui-highlight-color !default; -$action-button-color: $ui-base-lighter-color !default; -// For texts on inverted backgrounds -$inverted-text-color: $ui-base-color !default; -$lighter-text-color: $ui-base-lighter-color !default; -$light-text-color: $ui-primary-color !default; - // Language codes that uses CJK fonts $cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW; @@ -99,7 +34,3 @@ $media-modal-media-max-width: 100%; $media-modal-media-max-height: 80%; $no-gap-breakpoint: 415px; - -$font-sans-serif: 'soapbox-font-sans-serif' !default; -$font-display: 'soapbox-font-display' !default; -$font-monospace: 'soapbox-font-monospace' !default; diff --git a/app/styles/widgets.scss b/app/styles/widgets.scss index df236d003..db2fcc537 100644 --- a/app/styles/widgets.scss +++ b/app/styles/widgets.scss @@ -52,7 +52,7 @@ font-family: inherit; font-size: inherit; line-height: inherit; - color: lighten($darker-text-color, 10%); + color: var(--primary-text-color); } a { @@ -105,7 +105,7 @@ .box-widget { padding: 20px; border-radius: 4px; - background: lighten($ui-base-color, 2.5%); + background: var(--background-color); box-shadow: 0 0 1px 1px rgba($base-shadow-color, 0.2); } @@ -351,7 +351,7 @@ border-radius: 50%; position: relative; margin-left: -10px; - background: darken($ui-base-color, 8%); + background: var(--background-color); border: 2px solid var(--brand-color-med); &:nth-child(1) { @@ -473,7 +473,7 @@ $fluid-breakpoint: $maximum-width + 20px; border-radius: 4px; @media screen and (max-width: $no-gap-breakpoint) { - border-top: 1px solid lighten($ui-base-color, 16%); + border-top: 1px solid var(--background-color); } &.compact { From d5fba20091fdb9cf2342f41df8db1aa9bd7906c5 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 17:45:06 -0500 Subject: [PATCH 40/46] Update gab references --- app/soapbox/features/search/components/header.js | 12 ------------ webpack/translationRunner.js | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/app/soapbox/features/search/components/header.js b/app/soapbox/features/search/components/header.js index cf9415b8f..02f7cd36e 100644 --- a/app/soapbox/features/search/components/header.js +++ b/app/soapbox/features/search/components/header.js @@ -48,18 +48,6 @@ class Header extends ImmutablePureComponent { - {/* - - - - - - - - - - - */}
diff --git a/webpack/translationRunner.js b/webpack/translationRunner.js index c6d28627a..69766a1a8 100644 --- a/webpack/translationRunner.js +++ b/webpack/translationRunner.js @@ -51,7 +51,7 @@ Use yarn "manage:translations -- --help" for usage information const usage = `Usage: yarn manage:translations [OPTIONS] [LANGUAGES] -Manage JavaScript translation files in Gab Social. Generates and update translations in translationsDirectory: ${translationsDirectory} +Manage JavaScript translation files in Soapbox FE. Generates and update translations in translationsDirectory: ${translationsDirectory} LANGUAGES The RFC5646 language tag for the language you want to test or fix. If you want to input multiple languages, separate them with space. From 8159a7edc7b239238e6ebfa7eb80b92159620ef8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 18:31:55 -0500 Subject: [PATCH 41/46] Emoji mart styling --- .../features/ui/components/compose_modal.js | 4 +-- app/styles/about.scss | 4 +-- app/styles/accounts.scss | 8 ++--- app/styles/components.scss | 36 +++++++++---------- app/styles/components/compose-form.scss | 26 +++++++++----- app/styles/emoji_picker.scss | 20 +++++------ app/styles/forms.scss | 4 +-- app/styles/polls.scss | 12 +++---- app/styles/rtl.scss | 2 +- app/styles/themes.scss | 10 ++++-- app/styles/variables.scss | 1 - 11 files changed, 68 insertions(+), 59 deletions(-) diff --git a/app/soapbox/features/ui/components/compose_modal.js b/app/soapbox/features/ui/components/compose_modal.js index 1a3aae011..0e5e65a87 100644 --- a/app/soapbox/features/ui/components/compose_modal.js +++ b/app/soapbox/features/ui/components/compose_modal.js @@ -59,9 +59,7 @@ class ComposeModal extends ImmutablePureComponent {
-
- -
+
); diff --git a/app/styles/about.scss b/app/styles/about.scss index 7986ac846..7c8ed6f45 100644 --- a/app/styles/about.scss +++ b/app/styles/about.scss @@ -841,7 +841,7 @@ $small-breakpoint: 960px; width: 100%; height: 0; border: 0; - border-bottom: 1px solid rgba(var(--background-color), .6); + border-bottom: 1px solid rgba(var(--background-color-rgb), .6); margin: 2em 0; &.spacer { @@ -1095,7 +1095,7 @@ $small-breakpoint: 960px; width: 100%; height: 0; border: 0; - border-bottom: 1px solid rgba(var(--background-color), .6); + border-bottom: 1px solid rgba(var(--background-color-rgb), .6); margin: 20px 0; &.spacer { diff --git a/app/styles/accounts.scss b/app/styles/accounts.scss index e6dd0829f..b37dbddf4 100644 --- a/app/styles/accounts.scss +++ b/app/styles/accounts.scss @@ -116,7 +116,7 @@ } .current { - background: $simple-background-color; + background: var(--foreground-color); border-radius: 100px; color: var(--inverted-text-color); cursor: default; @@ -206,8 +206,8 @@ line-height: 12px; font-weight: 500; color: var(--background-color); - background-color: rgba(var(--background-color), 0.1); - border: 1px solid rgba(var(--background-color), 0.5); + background-color: rgba(var(--background-color-rgb), 0.1); + border: 1px solid rgba(var(--background-color-rgb), 0.5); &.moderator { color: $success-green; @@ -252,7 +252,7 @@ width: 120px; flex: 0 0 auto; color: var(--primary-text-color-faint); - background: rgba(var(--background-color), 0.5); + background: rgba(var(--background-color-rgb), 0.5); } dd { diff --git a/app/styles/components.scss b/app/styles/components.scss index bdcf0c6eb..8b6b0a1e8 100644 --- a/app/styles/components.scss +++ b/app/styles/components.scss @@ -279,7 +279,7 @@ height: 0; width: 0; border-top: 11px solid transparent; - border-right: 12px solid #fff; + border-right: 12px solid var(--background-color); border-bottom: 11px solid transparent; border-left: 11px solid transparent; left: -22px; @@ -317,7 +317,7 @@ .reply-indicator { border-radius: 4px; margin-bottom: 10px; - background: var(--background-color); + background: var(--brand-color-faint); padding: 10px; min-height: 23px; overflow-y: auto; @@ -338,13 +338,17 @@ } .reply-indicator__display-name { - color: var(--inverted-text-color); + color: var(--primary-text-color); display: block; max-width: 100%; line-height: 24px; overflow: hidden; padding-right: 25px; text-decoration: none; + + .display-name__account { + color: var(--primary-text-color-faint); + } } .reply-indicator__display-avatar { @@ -1902,7 +1906,7 @@ a.account__display-name { height: 22px; border: 1px solid var(--brand-color-med); border-radius: 50%; - background-color: darken($simple-background-color, 2%); + background-color: var(--background-color); box-sizing: border-box; transition: all 0.25s ease; transition-property: border-color, left; @@ -3000,10 +3004,9 @@ a.status-card.compact:hover { } .emoji-picker-dropdown__menu { - background: $simple-background-color; + @include standard-panel; + background: var(--foreground-color); position: absolute; - box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4); - border-radius: 4px; margin-top: 5px; z-index: 20000; @@ -3028,7 +3031,7 @@ a.status-card.compact:hover { z-index: 4; top: -4px; left: -8px; - background: $simple-background-color; + background: var(--foreground-color); border-radius: 4px; box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); overflow: hidden; @@ -3043,7 +3046,7 @@ a.status-card.compact:hover { &:hover, &:focus, &:active { - background: rgba(var(--background-color), 0.4); + background: rgba(var(--background-color-rgb), 0.4); } } @@ -3192,7 +3195,7 @@ a.status-card.compact:hover { .privacy-dropdown__dropdown { position: absolute; - background: $simple-background-color; + background: var(--foreground-color); box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); border-radius: 4px; margin-left: 40px; @@ -3260,7 +3263,7 @@ a.status-card.compact:hover { .privacy-dropdown.active { .privacy-dropdown__value { - background: $simple-background-color; + background: var(--foreground-color); border-radius: 4px 4px 0 0; box-shadow: 0 -4px 4px rgba($base-shadow-color, 0.1); @@ -4837,10 +4840,7 @@ noscript { &__header { display: block; position: relative; - border-bottom: 1px solid var(--background-color); - border-radius: 6px 6px 0 0; - padding-top: 12px; - padding-bottom: 12px; + padding: 5px 0; &__title { display: block; @@ -4849,7 +4849,7 @@ noscript { font-size: 18px; font-weight: bold; line-height: 24px; - color: var(--background-color); + color: var(--primary-text-color); text-align: center; } } @@ -4857,7 +4857,7 @@ noscript { &__close { position: absolute; right: 10px; - top: 10px; + top: 5px; color: #999; } @@ -4876,7 +4876,7 @@ noscript { .timeline-compose-block { background: transparent !important; width: 100%; - padding: 10px 5px; + padding: 0; margin-bottom: 0; .compose-form { diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss index 9b48619df..52cb2c020 100644 --- a/app/styles/components/compose-form.scss +++ b/app/styles/components/compose-form.scss @@ -1,5 +1,4 @@ .compose-form { - padding: 10px; &__sensitive-button { padding: 10px; @@ -97,16 +96,22 @@ box-sizing: border-box; width: 100%; margin: 0; - color: var(--inverted-text-color); - background: #f2f2f2; + background: var(--background-color); + color: var(--primary-text-color); padding: 10px; font-family: inherit; - font-size: 14px; + font-size: 16px; resize: vertical; border: 0; outline: 0; - &:focus {outline: 0;} - @media screen and (max-width: 600px) {font-size: 16px;} + + &:focus { + outline: 0; + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } } .spoiler-input__input {border-radius: 4px;} @@ -184,13 +189,16 @@ width: 16px; height: 16px; } - .autosuggest-account .display-name__account {color: var(--highlight-text-color);} + + .autosuggest-account .display-name__account { + color: var(--highlight-text-color-faint); + } .compose-form__modifiers { color: var(--inverted-text-color); font-family: inherit; font-size: 14px; - background: $simple-background-color; + background: var(--foreground-color); .compose-form__upload-wrapper {overflow: hidden;} .compose-form__uploads-wrapper { @@ -200,7 +208,7 @@ &.contains-media { padding: 5px; - border-top: 1px solid darken($simple-background-color, 8%); + border-top: 1px solid var(--foreground-color); } } diff --git a/app/styles/emoji_picker.scss b/app/styles/emoji_picker.scss index 8bc0280f5..474766a66 100644 --- a/app/styles/emoji_picker.scss +++ b/app/styles/emoji_picker.scss @@ -1,7 +1,7 @@ .emoji-mart { font-size: 13px; display: inline-block; - color: var(--inverted-text-color); + color: var(--primary-text-color); &, * { @@ -21,7 +21,6 @@ border-bottom-width: 1px; border-top-left-radius: 5px; border-top-right-radius: 5px; - background: var(--background-color); } &:last-child { @@ -36,7 +35,7 @@ display: flex; justify-content: space-between; padding: 0 6px; - color: var(--highlight-text-color); + color: var(--primary-text-color-faint); line-height: 0; } @@ -93,7 +92,7 @@ height: 270px; max-height: 35vh; padding: 0 6px 6px; - background: $simple-background-color; + background: var(--foreground-color); will-change: transform; &::-webkit-scrollbar-track:hover, @@ -105,7 +104,7 @@ .emoji-mart-search { padding: 10px; padding-right: 45px; - background: $simple-background-color; + background: var(--foreground-color); input { font-size: 14px; @@ -114,10 +113,9 @@ font-family: inherit; display: block; width: 100%; - background: rgba(var(--background-color), 0.3); - color: var(--inverted-text-color); - border: 1px solid var(--background-color); - border-radius: 4px; + background: var(--background-color); + border: 1px solid var(--brand-color-faint); + border-radius: 9999px; &::-moz-focus-inner { border: 0; @@ -148,7 +146,7 @@ left: 0; width: 100%; height: 100%; - background-color: rgba(var(--background-color), 0.7); + background-color: rgba(var(--background-color-rgb), 0.7); border-radius: 100%; } } @@ -165,7 +163,7 @@ width: 100%; font-weight: 500; padding: 5px 6px; - background: $simple-background-color; + background: var(--foreground-color); } } diff --git a/app/styles/forms.scss b/app/styles/forms.scss index d9a3e3551..53c8fc65f 100644 --- a/app/styles/forms.scss +++ b/app/styles/forms.scss @@ -471,7 +471,7 @@ code { right: 0; bottom: 1px; width: 5px; - background-image: linear-gradient(to right, rgba(var(--background-color), 0), var(--background-color)); + background-image: linear-gradient(to right, rgba(var(--background-color-rgb), 0), var(--background-color)); } } } @@ -664,7 +664,7 @@ code { .qr-code { flex: 0 0 auto; - background: $simple-background-color; + background: var(--foreground-color); padding: 4px; margin: 0 10px 20px 0; box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); diff --git a/app/styles/polls.scss b/app/styles/polls.scss index e330775d7..72746e862 100644 --- a/app/styles/polls.scss +++ b/app/styles/polls.scss @@ -51,8 +51,8 @@ display: block; outline: 0; font-family: inherit; - background: $simple-background-color; - border: 1px solid darken($simple-background-color, 14%); + background: var(--foreground-color); + border: 1px solid var(--foreground-color); border-radius: 4px; padding: 6px 10px; @@ -142,14 +142,14 @@ } .compose-form__poll-wrapper { - border-top: 1px solid darken($simple-background-color, 8%); + border-top: 1px solid var(--foreground-color); ul { padding: 10px; } .poll__footer { - border-top: 1px solid darken($simple-background-color, 8%); + border-top: 1px solid var(--foreground-color); padding: 10px; margin: -5px 0 0 -5px; @@ -190,7 +190,7 @@ width: auto; outline: 0; font-family: inherit; - background-color: $simple-background-color; + background-color: var(--foreground-color); background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; background-position: right 8px center; @@ -202,7 +202,7 @@ } .icon-button.disabled { - color: darken($simple-background-color, 14%); + color: var(--foreground-color); } } diff --git a/app/styles/rtl.scss b/app/styles/rtl.scss index b47035515..0322ce20b 100644 --- a/app/styles/rtl.scss +++ b/app/styles/rtl.scss @@ -238,7 +238,7 @@ body.rtl { &::after { right: auto; left: 0; - background-image: linear-gradient(to left, rgba(var(--background-color), 0), var(--background-color)); + background-image: linear-gradient(to left, rgba(var(--background-color-rgb), 0), var(--background-color)); } } diff --git a/app/styles/themes.scss b/app/styles/themes.scss index e905cb8d3..528da5fc4 100644 --- a/app/styles/themes.scss +++ b/app/styles/themes.scss @@ -16,13 +16,17 @@ body { calc(255 - var(--primary-text-color-g)), calc(255 - var(--primary-text-color-b)) ); + --background-color-rgb: var(--background-color-r), var(--background-color-g), var(--background-color-b); + --background-color: rgb(var(--background-color-rgb)); } body.theme-mode-light { --primary-text-color-r: 0; --primary-text-color-g: 0; --primary-text-color-b: 0; - --background-color: #f2f2f2; + --background-color-r: 242; + --background-color-g: 242; + --background-color-b: 242; --foreground-color: #ffffff; --highlight-text-color: rgb( calc(var(--brand-color-r) - 25), @@ -40,7 +44,9 @@ body.theme-mode-dark { --primary-text-color-r: 255; --primary-text-color-g: 255; --primary-text-color-b: 255; - --background-color: #333333; + --background-color-r: 51; + --background-color-g: 51; + --background-color-b: 51; --foreground-color: #222222; --highlight-text-color: rgb( calc(var(--brand-color-r) + 25), diff --git a/app/styles/variables.scss b/app/styles/variables.scss index 047828cc7..75f571b1d 100644 --- a/app/styles/variables.scss +++ b/app/styles/variables.scss @@ -21,7 +21,6 @@ $gold-star: #ca8f04 !default; // Dark Goldenrod // Variables for defaults in UI $base-shadow-color: #000000 !default; $base-overlay-background: #000000 !default; -$simple-background-color: #ffffff !default; $valid-value-color: $success-green !default; $error-value-color: $error-red !default; From 89667673237e63c533275bf7d81e8e74ed9d781f Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 18:49:50 -0500 Subject: [PATCH 42/46] Forms and input CSS tweaks --- app/styles/basics.scss | 2 +- app/styles/components/compose-form.scss | 5 ++--- app/styles/forms.scss | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/styles/basics.scss b/app/styles/basics.scss index 458526353..fd7f33ac1 100644 --- a/app/styles/basics.scss +++ b/app/styles/basics.scss @@ -159,7 +159,7 @@ button { } ::selection { - background: var(--brand-color); + background: var(--highlight-text-color); color: #ffffff; } diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss index 52cb2c020..7091e42e1 100644 --- a/app/styles/components/compose-form.scss +++ b/app/styles/components/compose-form.scss @@ -153,7 +153,6 @@ box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4); background: var(--background-color); border-radius: 0 0 4px 4px; - color: var(--inverted-text-color); font-size: 14px; padding: 6px; &.autosuggest-textarea__suggestions--visible {display: block;} @@ -168,7 +167,7 @@ &:focus, &:active, &.selected { - background: var(--background-color); + background: var(--brand-color-med); } } @@ -191,7 +190,7 @@ } .autosuggest-account .display-name__account { - color: var(--highlight-text-color-faint); + color: var(--primary-text-color-faint); } .compose-form__modifiers { diff --git a/app/styles/forms.scss b/app/styles/forms.scss index 53c8fc65f..3ef1ca2d9 100644 --- a/app/styles/forms.scss +++ b/app/styles/forms.scss @@ -318,7 +318,7 @@ code { outline: 0; font-family: inherit; resize: vertical; - background: var(--foreground-color); + background: var(--background-color); border: 1px solid var(--highlight-text-color); border-radius: 4px; padding: 10px; From f40fe82c4ed04960e0a899019977ac16d8ad9d2a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 19:15:06 -0500 Subject: [PATCH 43/46] Refactor boost icon, match theme color --- app/styles/boost.scss | 47 +++++++++++++++++++++++++++++++++----- app/styles/components.scss | 32 ++------------------------ 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/app/styles/boost.scss b/app/styles/boost.scss index a26292c35..30365ea1c 100644 --- a/app/styles/boost.scss +++ b/app/styles/boost.scss @@ -1,11 +1,46 @@ -button.icon-button i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,"); +button.icon-button { + i.fa-retweet { + background: rgba(var(--primary-text-color-rgb), 0.4); + mask: url("data:image/svg+xml;utf8,"); + } + + &:hover, + &:active, + &:focus { + i.fa-retweet { + background: rgba(var(--primary-text-color-rgb), 0.6); + transition: background-color 200ms ease-out; + } + } - &:hover { - background-image: url("data:image/svg+xml;utf8,"); + &.disabled i.fa-retweet { + background: rgba(var(--primary-text-color-rgb), 0.2); + cursor: default; } + + &.active i.fa-retweet { + background: var(--highlight-text-color); + } +} + +.no-reduce-motion button.icon-button i.fa-retweet { + mask-position: 0 0; + height: 19px; + transition: mask-position 0.9s steps(10); + transition-duration: 0s; + vertical-align: middle; + width: 22px; + + &::before { + display: none !important; + } +} + +.no-reduce-motion button.icon-button.active i.fa-retweet { + transition-duration: 0.9s; + mask-position: 0 100%; } -button.icon-button.disabled i.fa-retweet { - background-image: url("data:image/svg+xml;utf8,"); +.reduce-motion button.icon-button i.fa-retweet { + transition: background-color 100ms ease-in; } diff --git a/app/styles/components.scss b/app/styles/components.scss index 8b6b0a1e8..8a9b28696 100644 --- a/app/styles/components.scss +++ b/app/styles/components.scss @@ -134,12 +134,12 @@ &:hover, &:active, &:focus { - color: lighten(#0482d8, 7%); + color: rgba(var(--primary-text-color-rgb), 0.6); transition: color 200ms ease-out; } &.disabled { - color: darken(#0482d8, 13%); + color: rgba(var(--primary-text-color-rgb), 0.2); cursor: default; } @@ -2079,34 +2079,6 @@ a.account__display-name { } } -.no-reduce-motion button.icon-button i.fa-retweet { - background-position: 0 0; - height: 19px; - transition: background-position 0.9s steps(10); - transition-duration: 0s; - vertical-align: middle; - width: 22px; - - &::before { - display: none !important; - } - -} - -.no-reduce-motion button.icon-button.active i.fa-retweet { - transition-duration: 0.9s; - background-position: 0 100%; -} - -.reduce-motion button.icon-button i.fa-retweet { - color: #0482d8; - transition: color 100ms ease-in; -} - -.reduce-motion button.icon-button.active i.fa-retweet { - color: var(--highlight-text-color); -} - .status-card { display: flex; font-size: 14px; From f563f6234b718f106863b3c3e382feedacdd777c Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 20:12:36 -0500 Subject: [PATCH 44/46] More CSS fixes --- app/styles/about.scss | 4 ++- app/styles/accounts.scss | 4 +-- app/styles/components.scss | 39 +++++++++++++++--------- app/styles/components/compose-form.scss | 6 ++-- app/styles/components/dropdown-menu.scss | 2 +- app/styles/components/modal.scss | 12 ++++---- app/styles/components/tabs-bar.scss | 9 ++++-- app/styles/forms.scss | 6 ++-- app/styles/polls.scss | 12 +++----- app/styles/themes.scss | 16 +++++----- 10 files changed, 61 insertions(+), 49 deletions(-) diff --git a/app/styles/about.scss b/app/styles/about.scss index 7c8ed6f45..c7a0a039a 100644 --- a/app/styles/about.scss +++ b/app/styles/about.scss @@ -625,7 +625,7 @@ $small-breakpoint: 960px; } .static-icon-button { - color: #0482d8; + color: var(--brand-color); font-size: 18px; & > span { @@ -1367,6 +1367,7 @@ $small-breakpoint: 960px; &:hover, &:focus, &:active { + color: #fff; opacity: 0.9; } } @@ -1703,6 +1704,7 @@ $small-breakpoint: 960px; .public-layout__top { position: relative; + flex: 1; .header, .container { diff --git a/app/styles/accounts.scss b/app/styles/accounts.scss index b37dbddf4..f54595588 100644 --- a/app/styles/accounts.scss +++ b/app/styles/accounts.scss @@ -118,7 +118,7 @@ .current { background: var(--foreground-color); border-radius: 100px; - color: var(--inverted-text-color); + color: var(--primary-text-color); cursor: default; margin: 0 10px; } @@ -155,7 +155,7 @@ .disabled { cursor: default; - color: var(--inverted-text-color); + color: var(--primary-text-color); } @media screen and (max-width: 700px) { diff --git a/app/styles/components.scss b/app/styles/components.scss index 8a9b28696..8f10df23e 100644 --- a/app/styles/components.scss +++ b/app/styles/components.scss @@ -68,7 +68,7 @@ } &.button-alternative { - color: var(--inverted-text-color); + color: var(--primary-text-color); background: var(--brand-color); &:active, @@ -575,7 +575,7 @@ .display-name { strong { - color: var(--inverted-text-color); + color: var(--primary-text-color); } span { @@ -584,7 +584,7 @@ } .status__content { - color: var(--inverted-text-color); + color: var(--primary-text-color); a { color: var(--highlight-text-color); @@ -622,7 +622,7 @@ background: transparent; .icon-button.disabled { - color: lighten(#0482d8, 13%); + color: rgba(var(--brand-color-rgb), 0.2); } } } @@ -724,7 +724,7 @@ width: 14px; font-size: 12px; font-weight: 500; - color: #0482d8; + color: var(--brand-color); } } } @@ -1090,7 +1090,7 @@ a.account__display-name { a.status__content__spoiler-link { background: var(--brand-color-med); - color: var(--inverted-text-color); + color: var(--primary-text-color); &:hover { background: var(--brand-color-faint); @@ -1562,6 +1562,7 @@ a.account__display-name { font-size: 30px; align-items: center; justify-content: center; + transition: 0.2s; @media screen and (max-width: 895px) { display: flex; @@ -2820,7 +2821,7 @@ a.status-card.compact:hover { } &__option { - color: var(--inverted-text-color); + color: var(--primary-text-color); border-radius: 4px; font-size: 14px; @@ -3166,6 +3167,7 @@ a.status-card.compact:hover { } .privacy-dropdown__dropdown { + font-size: 14px; position: absolute; background: var(--foreground-color); box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); @@ -3184,14 +3186,14 @@ a.status-card.compact:hover { } .privacy-dropdown__option { - color: var(--inverted-text-color); + color: var(--primary-text-color); padding: 10px; cursor: pointer; display: flex; &:hover, &.active { - background: var(--brand-color); + background: var(--brand-color-med); color: var(--primary-text-color); outline: 0; @@ -3205,7 +3207,7 @@ a.status-card.compact:hover { } &.active:hover { - background: var(--brand-color); + background: rgba(var(--brand-color-rgb), 0.5); } } @@ -3223,7 +3225,7 @@ a.status-card.compact:hover { strong { font-weight: 500; display: block; - color: var(--inverted-text-color); + color: var(--primary-text-color); @each $lang in $cjk-langs { &:lang(#{$lang}) { @@ -3996,14 +3998,12 @@ a.status-card.compact:hover { .notification__filter-bar, .account__section-headline { - background: var(--brand-color-faint); border-bottom: 1px solid var(--brand-color-faint); cursor: default; display: flex; flex-shrink: 0; button { - background: var(--brand-color-med); border: 0; margin: 0; } @@ -4019,6 +4019,7 @@ a.status-card.compact:hover { text-align: center; text-decoration: none; position: relative; + background: transparent; &.active { color: var(--primary-text-color); @@ -4035,24 +4036,32 @@ a.status-card.compact:hover { transform: translateX(-50%); border-style: solid; border-width: 0 10px 10px; - border-color: transparent transparent var(--foreground-color); + border-color: transparent transparent var(--brand-color-faint); } &::after { bottom: -1px; - border-color: transparent transparent var(--foreground-color); } } } } .account__section-headline { + background: var(--brand-color-faint); + button, a { flex: none; padding: 18px 15px; font-size: 16px; font-weight: 600; + + &.active { + &::before, + &::after { + border-color: transparent transparent var(--foreground-color); + } + } } } diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss index 7091e42e1..95dee51e7 100644 --- a/app/styles/components/compose-form.scss +++ b/app/styles/components/compose-form.scss @@ -39,7 +39,7 @@ font-weight: 400; strong { - color: var(--inverted-text-color); + color: var(--primary-text-color); font-weight: 500; @each $lang in $cjk-langs { &:lang(#{$lang}) { @@ -194,10 +194,10 @@ } .compose-form__modifiers { - color: var(--inverted-text-color); + color: var(--primary-text-color); font-family: inherit; font-size: 14px; - background: var(--foreground-color); + background: var(--background-color); .compose-form__upload-wrapper {overflow: hidden;} .compose-form__uploads-wrapper { diff --git a/app/styles/components/dropdown-menu.scss b/app/styles/components/dropdown-menu.scss index 7893df7c5..7612421d2 100644 --- a/app/styles/components/dropdown-menu.scss +++ b/app/styles/components/dropdown-menu.scss @@ -135,7 +135,7 @@ box-sizing: border-box; text-decoration: none; background: var(--background-color); - color: var(--inverted-text-color); + color: var(--primary-text-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; diff --git a/app/styles/components/modal.scss b/app/styles/components/modal.scss index 897af0e1a..f515ef9d9 100644 --- a/app/styles/components/modal.scss +++ b/app/styles/components/modal.scss @@ -183,7 +183,7 @@ .error-modal, .embed-modal { background: var(--background-color); - color: var(--inverted-text-color); + color: var(--primary-text-color); border-radius: 8px; overflow: hidden; display: flex; @@ -260,12 +260,12 @@ &.onboarding-modal__done, &.onboarding-modal__next { - color: var(--inverted-text-color); + color: var(--primary-text-color); &:hover, &:focus, &:active { - color: var(--inverted-text-color); + color: var(--primary-text-color); } } } @@ -282,7 +282,7 @@ &__label { font-weight: 500; - color: var(--inverted-text-color); + color: var(--primary-text-color); margin-bottom: 5px; text-transform: uppercase; font-size: 12px; @@ -464,7 +464,7 @@ box-sizing: border-box; width: 100%; margin: 0; - color: var(--inverted-text-color); + color: var(--primary-text-color); background: #ffffff; padding: 10px; font-family: inherit; @@ -486,7 +486,7 @@ margin-bottom: 24px; &__label { - color: var(--inverted-text-color); + color: var(--primary-text-color); font-size: 14px; } } diff --git a/app/styles/components/tabs-bar.scss b/app/styles/components/tabs-bar.scss index ce5e1888a..2ed6bbc47 100644 --- a/app/styles/components/tabs-bar.scss +++ b/app/styles/components/tabs-bar.scss @@ -118,14 +118,17 @@ height: 34px; margin-left: 20px; border-radius: 6px; - background-color: var(--accent-color) !important; - transition: background-color 0.2s; + background-color: var(--accent-color); font-weight: bold; font-size: 16px; transition: 0.2s; &:hover { - box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.2); + background-color: rgb( + calc(var(--accent-color-r) + 10), + calc(var(--accent-color-g) + 10), + calc(var(--accent-color-b) + 10) + ); } } diff --git a/app/styles/forms.scss b/app/styles/forms.scss index 3ef1ca2d9..d954d4e74 100644 --- a/app/styles/forms.scss +++ b/app/styles/forms.scss @@ -426,21 +426,21 @@ code { } select { - appearance: none; box-sizing: border-box; font-size: 16px; color: var(--primary-text-color); + background: var(--background-color); display: block; width: 100%; outline: 0; font-family: inherit; resize: vertical; - background: var(--foreground-color) url("data:image/svg+xml;utf8,") no-repeat right 8px center / auto 16px; - border: 1px solid var(--brand-color-faint); + border: 1px solid var(--highlight-text-color); border-radius: 4px; padding-left: 10px; padding-right: 30px; height: 41px; + position: relative; } .label_input { diff --git a/app/styles/polls.scss b/app/styles/polls.scss index 72746e862..7b1c62315 100644 --- a/app/styles/polls.scss +++ b/app/styles/polls.scss @@ -47,7 +47,7 @@ box-sizing: border-box; width: 100%; font-size: 14px; - color: var(--inverted-text-color); + color: var(--primary-text-color); display: block; outline: 0; font-family: inherit; @@ -166,8 +166,8 @@ padding: 6px 10px; height: auto; line-height: inherit; - color: #0482d8; - border-color: #0482d8; + color: var(--brand-color); + border-color: var(--brand-color); } li { @@ -182,20 +182,18 @@ } select { - appearance: none; box-sizing: border-box; font-size: 14px; - color: #0482d8; + color: var(--brand-color); display: inline-block; width: auto; outline: 0; font-family: inherit; background-color: var(--foreground-color); - background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; background-position: right 8px center; background-size: auto 16px; - border: 1px solid #0482d8; + border: 1px solid var(--brand-color); border-radius: 4px; padding: 6px 10px; padding-right: 30px; diff --git a/app/styles/themes.scss b/app/styles/themes.scss index 528da5fc4..a5743eb5a 100644 --- a/app/styles/themes.scss +++ b/app/styles/themes.scss @@ -3,11 +3,11 @@ body { --brand-color: rgb(var(--brand-color-rgb)); --brand-color-faint: rgba(var(--brand-color-rgb), 0.1); --brand-color-med: rgba(var(--brand-color-rgb), 0.2); - --accent-color: rgb( - calc(var(--brand-color-r) + 25), - calc(var(--brand-color-g) + 25), - calc(var(--brand-color-b) + 25) - ); + --accent-color-r: calc(var(--brand-color-r) + 25); + --accent-color-g: calc(var(--brand-color-g) + 25); + --accent-color-b: calc(var(--brand-color-b) + 25); + --accent-color-rgb: var(--accent-color-r), var(--accent-color-g), var(--accent-color-b); + --accent-color: rgb(var(--accent-color-rgb)); --primary-text-color-rgb: var(--primary-text-color-r), var(--primary-text-color-g), var(--primary-text-color-b); --primary-text-color: rgb(var(--primary-text-color-rgb)); --primary-text-color-faint: rgba(var(--primary-text-color-rgb), 0.6); @@ -49,9 +49,9 @@ body.theme-mode-dark { --background-color-b: 51; --foreground-color: #222222; --highlight-text-color: rgb( - calc(var(--brand-color-r) + 25), - calc(var(--brand-color-g) + 25), - calc(var(--brand-color-b) + 25) + calc(var(--brand-color-r) + 40), + calc(var(--brand-color-g) + 40), + calc(var(--brand-color-b) + 40) ); --brand-color-hicontrast: rgb( calc(var(--brand-color-r) + 50), From 077278b7dcd6ca5d7001afe01649f2c6c38cf097 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 21:11:01 -0500 Subject: [PATCH 45/46] Break out components.scss --- app/styles/accounts.scss | 333 ++ app/styles/application.scss | 52 +- app/styles/basics.scss | 154 +- app/styles/components.scss | 5212 ----------------- app/styles/components/account-header.scss | 33 + app/styles/components/badge.scss | 35 + app/styles/components/columns.scss | 662 +++ app/styles/components/compose-form.scss | 227 + app/styles/components/detailed-status.scss | 35 + app/styles/components/display-name.scss | 61 + app/styles/components/drawer.scss | 81 + app/styles/components/error-boundary.scss | 18 + app/styles/components/getting-started.scss | 77 + app/styles/components/list-forms.scss | 119 + app/styles/components/media-gallery.scss | 145 + app/styles/components/media-spoiler.scss | 28 + app/styles/components/modal.scss | 227 + app/styles/components/navigation-bar.scss | 138 + app/styles/components/notification.scss | 53 + app/styles/components/profile-info-panel.scss | 135 + app/styles/components/promo-panel.scss | 51 + app/styles/components/react-toggle.scss | 105 + app/styles/components/reply-indicator.scss | 51 + app/styles/components/search.scss | 162 + app/styles/components/setting-toggle.scss | 12 + app/styles/components/spoiler-button.scss | 46 + app/styles/components/status.scss | 558 ++ .../components/timeline-queue-header.scss | 32 + app/styles/components/trends.scss | 78 + app/styles/components/video-player.scss | 388 ++ app/styles/components/wtf-panel.scss | 128 + app/styles/emoji_picker.scss | 58 + app/styles/loading.scss | 210 + app/styles/modal.scss | 13 - app/styles/ui.scss | 749 +++ 35 files changed, 5218 insertions(+), 5248 deletions(-) delete mode 100644 app/styles/components.scss create mode 100644 app/styles/components/badge.scss create mode 100644 app/styles/components/columns.scss create mode 100644 app/styles/components/display-name.scss create mode 100644 app/styles/components/drawer.scss create mode 100644 app/styles/components/error-boundary.scss create mode 100644 app/styles/components/getting-started.scss create mode 100644 app/styles/components/list-forms.scss create mode 100644 app/styles/components/media-gallery.scss create mode 100644 app/styles/components/media-spoiler.scss create mode 100644 app/styles/components/navigation-bar.scss create mode 100644 app/styles/components/notification.scss create mode 100644 app/styles/components/profile-info-panel.scss create mode 100644 app/styles/components/promo-panel.scss create mode 100644 app/styles/components/react-toggle.scss create mode 100644 app/styles/components/reply-indicator.scss create mode 100644 app/styles/components/search.scss create mode 100644 app/styles/components/setting-toggle.scss create mode 100644 app/styles/components/spoiler-button.scss create mode 100644 app/styles/components/status.scss create mode 100644 app/styles/components/timeline-queue-header.scss create mode 100644 app/styles/components/trends.scss create mode 100644 app/styles/components/video-player.scss create mode 100644 app/styles/components/wtf-panel.scss create mode 100644 app/styles/loading.scss delete mode 100644 app/styles/modal.scss create mode 100644 app/styles/ui.scss diff --git a/app/styles/accounts.scss b/app/styles/accounts.scss index f54595588..30528f2dd 100644 --- a/app/styles/accounts.scss +++ b/app/styles/accounts.scss @@ -319,3 +319,336 @@ margin-top: 10px; } } + +.account { + padding: 10px; + + &:not(:last-of-type) { + border-bottom: 1px solid var(--brand-color-med); + } + + &.compact { + padding: 0; + border-bottom: 0; + + .account__avatar-wrapper { + margin-left: 0; + } + } + + .account__display-name { + flex: 1 1 auto; + display: block; + color: var(--primary-text-color-faint); + overflow: hidden; + text-decoration: none; + font-size: 14px; + } +} + +.account__wrapper { + display: flex; +} + +.account__avatar-wrapper { + float: left; + margin-right: 12px; +} + +.account__avatar { + @include avatar-radius; + position: relative; + background-color: var(--brand-color-faint); + + &-inline { + display: inline-block; + vertical-align: middle; + margin-right: 5px; + } + + &-composite { + @include avatar-radius; + overflow: hidden; + + & > div { + @include avatar-radius; + float: left; + position: relative; + box-sizing: border-box; + } + } +} + +a .account__avatar { + cursor: pointer; +} + +.account__avatar-overlay { + @include avatar-size(48px); + + &-base { + @include avatar-radius; + @include avatar-size(36px); + } + + &-overlay { + @include avatar-radius; + @include avatar-size(24px); + + position: absolute; + bottom: 0; + right: 0; + z-index: 1; + } +} + +.account__relationship { + height: auto; + padding: 0 0 0 5px; + position: relative; + + .dismiss-account-btn { + display: block; + margin-bottom: 5px; + } +} + +.account__reciprocal_follow_message { + padding: 0 5px; + color: var(--primary-text-color-faint); + text-align: center; +} + +.account__disclaimer { + padding: 10px; + border-top: 1px solid var(--brand-color-med); + color: var(--primary-text-color); + + strong { + font-weight: 500; + + @each $lang in $cjk-langs { + &:lang(#{$lang}) { + font-weight: 700; + } + } + } + + a { + font-weight: 500; + color: inherit; + text-decoration: underline; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } + } +} + +.account__action-bar { + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); + line-height: 36px; + overflow: hidden; + flex: 0 0 auto; + display: flex; +} + +.account__action-bar-dropdown { + padding: 10px; + + .icon-button { + vertical-align: middle; + } + + .dropdown--active { + .dropdown__content.dropdown__right { + left: 6px; + right: initial; + } + + &::after { + bottom: initial; + margin-left: 11px; + margin-top: -7px; + right: initial; + } + } +} + +.account__action-bar-links { + display: flex; + flex: 1 1 auto; + line-height: 18px; + text-align: center; +} + +.account__action-bar__tab { + text-decoration: none; + overflow: hidden; + flex: 0 1 100%; + border-right: 1px solid var(--brand-color-med); + padding: 10px 0; + border-bottom: 4px solid transparent; + + &.active { + border-bottom: 4px solid var(--brand-color); + } + + & > span { + display: block; + text-transform: uppercase; + font-size: 11px; + color: var(--primary-text-color-faint); + } + + strong { + display: block; + font-size: 15px; + font-weight: 500; + color: var(--primary-text-color); + + @each $lang in $cjk-langs { + &:lang(#{$lang}) { + font-weight: 700; + } + } + } +} + +.account-authorize { + padding: 14px 10px; + + .detailed-status__display-name { + display: block; + margin-bottom: 15px; + overflow: hidden; + } +} + +.account-authorize__avatar { + float: left; + margin-right: 10px; +} + +// TEMPORARY - need a default size for the avatars for now +// They are sized individually all over the application and need to change with breakpoints as well +// Might create a mixin to accept the size attribute and apply the various properties where necessary +.account__avatar { + width: 56px; + height: 56px; + background-size: cover; +} + +.account-gallery__container { + display: flex; + flex-wrap: wrap; + padding: 4px 2px; +} + +.account-gallery__item { + border: 0; + box-sizing: border-box; + display: block; + position: relative; + border-radius: 4px; + overflow: hidden; + margin: 2px; + + a { + background: var(--brand-color-faint); + } + + &__icons { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 24px; + } +} + +.account--panel { + background: var(--brand-color-faint); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); + display: flex; + flex-direction: row; + padding: 10px 0; +} + +.account__section-headline { + background: var(--brand-color-faint); + + button, + a { + flex: none; + padding: 18px 15px; + font-size: 16px; + font-weight: 600; + + &.active { + &::before, + &::after { + border-color: transparent transparent var(--foreground-color); + } + } + } +} + +.account__moved-note { + padding: 14px 10px; + padding-bottom: 16px; + background: var(--brand-color-faint); + border-top: 1px solid var(--brand-color-med); + border-bottom: 1px solid var(--brand-color-med); + + &__message { + position: relative; + margin-left: 58px; + color: var(--primary-text-color); + padding: 8px 0; + padding-top: 0; + padding-bottom: 4px; + font-size: 14px; + + > span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + } + } + + &__icon-wrapper { + left: -26px; + position: absolute; + } + + .detailed-status__display-avatar { + position: relative; + } + + .detailed-status__display-name { + margin-bottom: 0; + } +} + +.relationship-tag { + color: var(--primary-text-color); + margin-bottom: 4px; + display: block; + vertical-align: top; + background-color: var(--background-color); + text-transform: uppercase; + font-size: 11px; + font-weight: 500; + padding: 4px; + border-radius: 4px; + opacity: 0.7; + + &:hover { + opacity: 1; + } +} diff --git a/app/styles/application.scss b/app/styles/application.scss index 3b5222fe1..8c32a2289 100644 --- a/app/styles/application.scss +++ b/app/styles/application.scss @@ -13,9 +13,20 @@ @import 'accounts'; @import 'stream_entries'; @import 'boost'; - -// NOTE - In the process of stripping this giant file into individual components (below) -@import 'components'; +@import 'loading'; +@import 'ui'; +@import 'polls'; +@import 'introduction'; +@import 'emoji_picker'; +@import 'about'; +@import 'tables'; +@import 'dashboard'; +@import 'rtl'; +@import 'accessibility'; +@import 'donations'; +@import 'dyslexic'; +@import 'demetricator'; +@import 'pro'; // COMPONENTS @import 'components/buttons'; @@ -33,17 +44,26 @@ @import 'components/sidebar-menu'; @import 'components/hotkeys-modal'; @import 'components/emoji-reacts'; +@import 'components/status'; +@import 'components/reply-indicator'; @import 'components/detailed-status'; - -@import 'polls'; -@import 'introduction'; -@import 'emoji_picker'; -@import 'about'; -@import 'tables'; -@import 'dashboard'; -@import 'rtl'; -@import 'accessibility'; -@import 'donations'; -@import 'dyslexic'; -@import 'demetricator'; -@import 'pro'; +@import 'components/list-forms'; +@import 'components/media-gallery'; +@import 'components/notification'; +@import 'components/display-name'; +@import 'components/columns'; +@import 'components/search'; +@import 'components/react-toggle'; +@import 'components/getting-started'; +@import 'components/navigation-bar'; +@import 'components/promo-panel'; +@import 'components/drawer'; +@import 'components/timeline-queue-header'; +@import 'components/badge'; +@import 'components/trends'; +@import 'components/wtf-panel'; +@import 'components/profile-info-panel'; +@import 'components/setting-toggle'; +@import 'components/spoiler-button'; +@import 'components/media-spoiler'; +@import 'components/error-boundary'; diff --git a/app/styles/basics.scss b/app/styles/basics.scss index fd7f33ac1..c2f448c42 100644 --- a/app/styles/basics.scss +++ b/app/styles/basics.scss @@ -126,13 +126,9 @@ body { } } -button { - font-family: inherit; - cursor: pointer; - - &:focus { - outline: none; - } +.app-body { + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; } .app-holder { @@ -193,3 +189,147 @@ button { } } } + +button { + font-family: inherit; + cursor: pointer; + + &:focus { + outline: none; + } +} + +.button { + background-color: var(--brand-color); + border: 10px none; + border-radius: 4px; + box-sizing: border-box; + color: #fff; + cursor: pointer; + display: inline-block; + font-family: inherit; + font-size: 14px; + font-weight: 500; + height: 36px; + letter-spacing: 0; + line-height: 36px; + overflow: hidden; + padding: 0 16px; + position: relative; + text-align: center; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + width: auto; + transition: 0.2s; + + &:active, + &:focus, + &:hover { + background-color: var(--brand-color-hicontrast); + } + + &--destructive { + transition: none; + + &:active, + &:focus, + &:hover { + background-color: $error-red; + transition: none; + } + } + + &--small { + font-size: 13px; + height: auto; + line-height: normal; + padding: 4px 8px; + } + + &:disabled, + &.disabled { + background-color: var(--brand-color-med); + cursor: default; + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &.button-alternative { + color: var(--primary-text-color); + background: var(--brand-color); + + &:active, + &:focus, + &:hover { + background-color: var(--brand-color); + } + } + + &.button-alternative-2 { + background: var(--brand-color-med); + + &:active, + &:focus, + &:hover { + background-color: var(--brand-color-faint); + } + } + + &.button-secondary { + color: var(--primary-text-color-faint); + background: transparent; + padding: 3px 15px; + border: 1px solid var(--brand-color); + + &:active, + &:focus, + &:hover { + border-color: var(--brand-color); + color: var(--primary-text-color); + } + + &:disabled { + opacity: 0.5; + } + } + + &.button--block { + display: block; + width: 100%; + } +} + +noscript { + text-align: center; + + img { + width: 200px; + opacity: 0.5; + animation: flicker 4s infinite; + } + + div { + font-size: 14px; + margin: 30px auto; + color: var(--primary-text-color-faint); + max-width: 400px; + + a { + color: var(--highlight-text-color); + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + } +} diff --git a/app/styles/components.scss b/app/styles/components.scss deleted file mode 100644 index 8f10df23e..000000000 --- a/app/styles/components.scss +++ /dev/null @@ -1,5212 +0,0 @@ -.app-body { - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; -} - -.button { - background-color: var(--brand-color); - border: 10px none; - border-radius: 4px; - box-sizing: border-box; - color: #fff; - cursor: pointer; - display: inline-block; - font-family: inherit; - font-size: 14px; - font-weight: 500; - height: 36px; - letter-spacing: 0; - line-height: 36px; - overflow: hidden; - padding: 0 16px; - position: relative; - text-align: center; - text-decoration: none; - text-overflow: ellipsis; - white-space: nowrap; - width: auto; - transition: 0.2s; - - &:active, - &:focus, - &:hover { - background-color: var(--brand-color-hicontrast); - } - - &--destructive { - transition: none; - - &:active, - &:focus, - &:hover { - background-color: $error-red; - transition: none; - } - } - - &--small { - font-size: 13px; - height: auto; - line-height: normal; - padding: 4px 8px; - } - - &:disabled, - &.disabled { - background-color: var(--brand-color-med); - cursor: default; - } - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - - &.button-alternative { - color: var(--primary-text-color); - background: var(--brand-color); - - &:active, - &:focus, - &:hover { - background-color: var(--brand-color); - } - } - - &.button-alternative-2 { - background: var(--brand-color-med); - - &:active, - &:focus, - &:hover { - background-color: var(--brand-color-faint); - } - } - - &.button-secondary { - color: var(--primary-text-color-faint); - background: transparent; - padding: 3px 15px; - border: 1px solid var(--brand-color); - - &:active, - &:focus, - &:hover { - border-color: var(--brand-color); - color: var(--primary-text-color); - } - - &:disabled { - opacity: 0.5; - } - } - - &.button--block { - display: block; - width: 100%; - } -} - -.column__wrapper { - display: flex; - flex: 1 1 auto; - position: relative; -} - -.icon-button { - display: inline-block; - padding: 0; - color: rgba(var(--primary-text-color-rgb), 0.4); - border: 0; - background: transparent; - cursor: pointer; - transition: color 100ms ease-in; - - i.fa { - margin: 0; - } - - &:hover, - &:active, - &:focus { - color: rgba(var(--primary-text-color-rgb), 0.6); - transition: color 200ms ease-out; - } - - &.disabled { - color: rgba(var(--primary-text-color-rgb), 0.2); - cursor: default; - } - - &.active { - color: var(--highlight-text-color); - } - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - - &.inverted { - color: var(--primary-text-color-faint); - - &:hover, - &:active, - &:focus { - color: var(--primary-text-color-faint); - } - - &.disabled { - color: var(--primary-text-color-faint); - } - - &.active { - color: var(--highlight-text-color); - - &.disabled { - color: var(--highlight-text-color); - } - } - } - - &.overlayed { - box-sizing: content-box; - background: var(--foreground-color); - color: var(--primary-text-color-faint); - border-radius: 4px; - padding: 2px; - - &:hover { - background: var(--background-color); - } - } -} - -.text-icon-button { - color: var(--primary-text-color-faint); - border: 0; - background: transparent; - cursor: pointer; - font-weight: 600; - font-size: 11px; - padding: 0 3px; - line-height: 27px; - outline: 0; - transition: color 100ms ease-in; - - &:hover, - &:active, - &:focus { - color: var(--primary-text-color-faint); - transition: color 200ms ease-out; - } - - &.disabled { - color: var(--primary-text-color-faint); - cursor: default; - } - - &.active { - color: var(--highlight-text-color); - } - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } -} - -.invisible { - font-size: 0 !important; - line-height: 0 !important; - display: inline-block; - width: 0; - height: 0; - position: absolute; - - img, - svg { - margin: 0 !important; - border: 0 !important; - padding: 0 !important; - width: 0 !important; - height: 0 !important; - } -} - -.ellipsis::after {content: "…";} - -.timeline-compose-block { - @include standard-panel; - display: flex; - align-items: flex-start; - padding: 20px; - margin-bottom: 20px; - - .emoji-picker-wrapper { - .emoji-picker-dropdown {top: 10px;} - } - - .compose-form { - flex: 1 1; - padding: 0 0 0 20px !important; - position: relative; - - @media(max-width: 405px) { - padding: 0 !important; - } - - .compose-form__autosuggest-wrapper { - &::before { - content: ""; - display: block; - position: absolute; - height: 0; - width: 0; - border-top: 11px solid transparent; - border-right: 12px solid var(--background-color); - border-bottom: 11px solid transparent; - border-left: 11px solid transparent; - left: -22px; - top: 13px; - } - - .autosuggest-textarea__textarea { - padding: 14px 32px 13px 10px !important; - } - } - } - - &__avatar { - @media(max-width: 405px) { display: none; } - } -} - -.no-reduce-motion .spoiler-input { - transition: height 0.4s ease, opacity 0.4s ease; -} - -.emojione { - font-size: inherit; - vertical-align: middle; - object-fit: contain; - margin: -.2ex .15em .2ex; - width: 16px; - height: 16px; - - img { - width: auto; - } -} - -.reply-indicator { - border-radius: 4px; - margin-bottom: 10px; - background: var(--brand-color-faint); - padding: 10px; - min-height: 23px; - overflow-y: auto; - flex: 0 2 auto; - max-height: 500px; - @media screen and (min-width: 320px) and (max-width: 375px) {max-height: 220px;} - @media screen and (max-width: 320px) {max-height: 130px;} -} - -.reply-indicator__header { - margin-bottom: 5px; - overflow: hidden; -} - -.reply-indicator__cancel { - float: right; - line-height: 24px; -} - -.reply-indicator__display-name { - color: var(--primary-text-color); - display: block; - max-width: 100%; - line-height: 24px; - overflow: hidden; - padding-right: 25px; - text-decoration: none; - - .display-name__account { - color: var(--primary-text-color-faint); - } -} - -.reply-indicator__display-avatar { - float: left; - margin-right: 5px; -} - -.status__content--with-action { - cursor: pointer; -} - -.status__content, -.reply-indicator__content { - position: relative; - font-size: 15px; - line-height: 20px; - word-wrap: break-word; - font-weight: 400; - overflow: hidden; - text-overflow: ellipsis; - padding-top: 2px; - color: var(--primary-text-color); - - &:focus { - outline: 0; - } - - &.status__content--with-spoiler { - white-space: normal; - - .status__content__text { - white-space: pre-wrap; - } - } - - .emojione { - width: 20px; - height: 20px; - margin: -3px 0 0; - } - - p { - margin-bottom: 20px; - white-space: pre-wrap; - - &:last-child { - margin-bottom: 2px; - } - } - - a { - color: var(--highlight-text-color); - text-decoration: none; - - &:hover { - text-decoration: underline; - - .fa { - color: var(--primary-text-color); - } - } - - &.mention { - &:hover { - text-decoration: none; - - span { - text-decoration: underline; - } - } - } - - .fa { - color: var(--primary-text-color); - } - } - - .status__content__spoiler-link { - background: var(--brand-color-med); - transition: 0.2s; - - &:hover { - background: rgba(var(--brand-color-rgb), 0.5); - text-decoration: none; - } - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - } - - .status__content__text { - display: none; - - &.status__content__text--visible { - display: block; - } - } -} - -.status__content.status__content--collapsed { - max-height: 20px * 15; // 15 lines is roughly above 500 characters -} - -.status__content__read-more-button { - display: block; - font-size: 15px; - line-height: 20px; - color: var(--highlight-text-color); - border: 0; - background: transparent; - padding: 0; - padding-top: 8px; - - &:hover, - &:active { - text-decoration: underline; - } -} - -.status__content__spoiler-link { - display: inline-block; - border-radius: 2px; - background: transparent; - border: 0; - color: var(--primary-text-color); - font-weight: 700; - font-size: 11px; - padding: 0 6px; - text-transform: uppercase; - line-height: 20px; - cursor: pointer; - vertical-align: middle; -} - -.status__wrapper--filtered { - color: var(--primary-text-color); - border: 0; - font-size: inherit; - text-align: center; - line-height: inherit; - margin: 0; - padding: 15px; - box-sizing: border-box; - width: 100%; - clear: both; - border-bottom: 1px solid var(--brand-color-med); -} - -.status__prepend-icon-wrapper { - left: -26px; - position: absolute; -} - -.focusable { - &:focus { - outline: 0; - background: var(--brand-color-faint); - - .status.status-direct { - background: var(--brand-color-med); - - &.muted { - background: transparent; - } - } - - .detailed-status, - .detailed-status__action-bar { - background: var(--brand-color-med); - } - } -} - -.status { - padding: 8px 10px; - padding-left: 68px; - position: relative; - min-height: 54px; - border-bottom: 1px solid var(--brand-color-faint); - cursor: default; - - @supports (-ms-overflow-style: -ms-autohiding-scrollbar) { - // Add margin to avoid Edge auto-hiding scrollbar appearing over content. - // On Edge 16 this is 16px and Edge <=15 it's 12px, so aim for 16px. - padding-right: 26px; // 10px + 16px - } - - @keyframes fade { - 0% { opacity: 0; } - 100% { opacity: 1; } - } - - opacity: 1; - animation: fade 150ms linear; - - .video-player { - margin-top: 8px; - } - - &.status-direct:not(.read) { - background: var(--brand-color-med); - border-bottom-color: var(--brand-color-med); - - .status__content a { - color: var(--brand-color-hicontrast); - } - } - - &.light { - .status__relative-time { - color: var(--primary-text-color-faint); - } - - .status__display-name { - color: var(--primary-text-color-faint); - } - - .display-name { - strong { - color: var(--primary-text-color); - } - - span { - color: var(--primary-text-color-faint); - } - } - - .status__content { - color: var(--primary-text-color); - - a { - color: var(--highlight-text-color); - } - - a.status__content__spoiler-link { - color: var(--primary-text-color); - background: var(--brand-color); - - &:hover { - background: var(--brand-color); - } - } - } - } - - &__meta { - font-size: 14px; - color: var(--primary-text-color-faint); - - a { - color: var(--brand-color); - font-weight: bold; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } - } -} - -.notification-favourite { - .status.status-direct { - background: transparent; - - .icon-button.disabled { - color: rgba(var(--brand-color-rgb), 0.2); - } - } -} - -.status__relative-time, -.notification__relative_time { - color: var(--primary-text-color-faint); - float: right; - font-size: 14px; -} - -.status__display-name { - color: var(--primary-text-color-faint); -} - -.status__info .status__display-name { - display: block; - max-width: 100%; - padding-right: 25px; -} - -.status__info { - font-size: 15px; - z-index: 4; -} - -.status-check-box { - border-bottom: 1px solid var(--background-color); - display: flex; - - .status-check-box__status { - margin: 10px 0 10px 10px; - flex: 1; - - .media-gallery { - max-width: 250px; - } - - .status__content { - padding: 0; - white-space: normal; - } - - .video-player { - margin-top: 8px; - max-width: 250px; - } - - .media-gallery__item-thumbnail { - cursor: default; - } - } -} - -.status-check-box-toggle { - align-items: center; - display: flex; - flex: 0 0 auto; - justify-content: center; - padding: 10px; -} - -.status__prepend { - margin-left: 68px; - color: var(--primary-text-color); - padding: 8px 0; - padding-bottom: 2px; - font-size: 14px; - position: relative; - - .status__display-name strong { - color: var(--primary-text-color); - } - - > span { - display: block; - overflow: hidden; - text-overflow: ellipsis; - } -} - -.status__action-bar { - align-items: center; - display: flex; - margin-top: 25px; - z-index: 4; - - &__counter { - display: inline-flex; - margin-right: 22px; - align-items: center; - - .status__action-bar-button { - margin-right: 4px; - } - - &__label { - display: inline-block; - width: 14px; - font-size: 12px; - font-weight: 500; - color: var(--brand-color); - } - } -} - -.status__action-bar-button { - margin-right: 18px; -} - -.status__action-bar-dropdown { - height: 23.15px; - width: 23.15px; -} - -.reply-indicator__content { - color: var(--primary-text-color); - font-size: 14px; - user-select: text; - - a { - color: var(--highlight-text-color); - } -} - -.domain { - padding: 10px; - border-bottom: 1px solid var(--brand-color-med); - - .domain__domain-name { - flex: 1 1 auto; - display: block; - color: var(--primary-text-color); - text-decoration: none; - font-size: 14px; - font-weight: 500; - } -} - -.domain__wrapper { - display: flex; -} - -.domain_buttons { - height: 18px; - padding: 10px; - white-space: nowrap; -} - -.account { - padding: 10px; - - &:not(:last-of-type) { - border-bottom: 1px solid var(--brand-color-med); - } - - &.compact { - padding: 0; - border-bottom: 0; - - .account__avatar-wrapper { - margin-left: 0; - } - } - - .account__display-name { - flex: 1 1 auto; - display: block; - color: var(--primary-text-color-faint); - overflow: hidden; - text-decoration: none; - font-size: 14px; - } -} - -.account__wrapper { - display: flex; -} - -.account__avatar-wrapper { - float: left; - margin-right: 12px; -} - -.account__avatar { - @include avatar-radius; - position: relative; - background-color: var(--brand-color-faint); - - &-inline { - display: inline-block; - vertical-align: middle; - margin-right: 5px; - } - - &-composite { - @include avatar-radius; - overflow: hidden; - - & > div { - @include avatar-radius; - float: left; - position: relative; - box-sizing: border-box; - } - } -} - -a .account__avatar { - cursor: pointer; -} - -.account__avatar-overlay { - @include avatar-size(48px); - - &-base { - @include avatar-radius; - @include avatar-size(36px); - } - - &-overlay { - @include avatar-radius; - @include avatar-size(24px); - - position: absolute; - bottom: 0; - right: 0; - z-index: 1; - } -} - -.account__relationship { - height: auto; - padding: 0 0 0 5px; - position: relative; - - .dismiss-account-btn { - display: block; - margin-bottom: 5px; - } -} - -.account__reciprocal_follow_message { - padding: 0 5px; - color: var(--primary-text-color-faint); - text-align: center; -} - -.account__disclaimer { - padding: 10px; - border-top: 1px solid var(--brand-color-med); - color: var(--primary-text-color); - - strong { - font-weight: 500; - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } - - a { - font-weight: 500; - color: inherit; - text-decoration: underline; - - &:hover, - &:focus, - &:active { - text-decoration: none; - } - } -} - -.account__action-bar { - border-top: 1px solid var(--brand-color-med); - border-bottom: 1px solid var(--brand-color-med); - line-height: 36px; - overflow: hidden; - flex: 0 0 auto; - display: flex; -} - -.account__action-bar-dropdown { - padding: 10px; - - .icon-button { - vertical-align: middle; - } - - .dropdown--active { - .dropdown__content.dropdown__right { - left: 6px; - right: initial; - } - - &::after { - bottom: initial; - margin-left: 11px; - margin-top: -7px; - right: initial; - } - } -} - -.account__action-bar-links { - display: flex; - flex: 1 1 auto; - line-height: 18px; - text-align: center; -} - -.account__action-bar__tab { - text-decoration: none; - overflow: hidden; - flex: 0 1 100%; - border-right: 1px solid var(--brand-color-med); - padding: 10px 0; - border-bottom: 4px solid transparent; - - &.active { - border-bottom: 4px solid var(--brand-color); - } - - & > span { - display: block; - text-transform: uppercase; - font-size: 11px; - color: var(--primary-text-color-faint); - } - - strong { - display: block; - font-size: 15px; - font-weight: 500; - color: var(--primary-text-color); - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } -} - -.account-authorize { - padding: 14px 10px; - - .detailed-status__display-name { - display: block; - margin-bottom: 15px; - overflow: hidden; - } -} - -.account-authorize__avatar { - float: left; - margin-right: 10px; -} - -.status__display-name, -.status__relative-time, -.detailed-status__display-name, -.detailed-status__datetime, -.detailed-status__application, -.account__display-name { - text-decoration: none; -} - -.status__display-name, -.account__display-name { - strong { - color: var(--primary-text-color); - } -} - -.muted { - .emojione { - opacity: 0.5; - } -} - -.status__display-name, -.reply-indicator__display-name, -.detailed-status__display-name, -a.account__display-name { - &:hover strong { - text-decoration: underline; - } -} - -.account__display-name strong { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} - -.detailed-status__application, -.detailed-status__datetime { - color: inherit; -} - -.detailed-status__display-name { - color: var(--primary-text-color-faint); - display: flex; - line-height: 24px; - margin-bottom: 15px; - overflow: hidden; - - strong, - span { - display: inline-block; - text-overflow: ellipsis; - overflow: hidden; - } - - strong { - font-size: 16px; - color: var(--primary-text-color); - } - - .display-name__account { - display: block; - margin-top: -10px; - } -} - -.detailed-status__display-avatar { - float: left; - margin-right: 10px; -} - -.status__avatar { - height: 48px; - left: 10px; - position: absolute; - top: 10px; - width: 48px; -} - -.status__expand { - width: 68px; - position: absolute; - left: 0; - top: 0; - height: 100%; - cursor: pointer; -} - -.muted { - .status__content p, - .status__content a { - color: var(--primary-text-color); - } - - .status__display-name strong { - color: var(--primary-text-color); - } - - .status__avatar { - opacity: 0.5; - } - - a.status__content__spoiler-link { - background: var(--brand-color-med); - color: var(--primary-text-color); - - &:hover { - background: var(--brand-color-faint); - text-decoration: none; - } - } -} - -.notification__message { - margin: 0 10px 0 68px; - padding: 8px 0 0; - cursor: default; - color: var(--primary-text-color-faint); - font-size: 15px; - line-height: 22px; - position: relative; - - .fa { - color: var(--highlight-text-color); - } - - > span { - display: inline; - overflow: hidden; - text-overflow: ellipsis; - } -} - -.notification__favourite-icon-wrapper { - left: -26px; - position: absolute; - - .star-icon { - color: $gold-star; - } -} - -.star-icon.active { - color: $gold-star; -} - -.notification__display-name { - color: inherit; - font-weight: 500; - text-decoration: none; - - &:hover { - color: var(--primary-text-color); - text-decoration: underline; - } -} - -.notification__relative_time { - float: right; -} - -.display-name { - display: block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.display-name__html { - font-weight: 600; - padding-right: 4px; -} - -.display-name__account { - font-size: 14px; -} - -// Hide "verified" emoji to avoid confusion -.display-name, -.notification__display-name { - .emojione[alt*="verified"] { - display: none; - } -} - -.status__relative-time, -.detailed-status__datetime { - &:hover { - text-decoration: underline; - } -} - -.image-loader { - position: relative; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - - .image-loader__preview-canvas { - max-width: $media-modal-media-max-width; - max-height: $media-modal-media-max-height; - background: url('../images/void.png') repeat; - object-fit: contain; - } - - .loading-bar { - position: relative; - } - - &.image-loader--amorphous .image-loader__preview-canvas { - display: none; - } -} - -.zoomable-image { - position: relative; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - - img { - max-width: $media-modal-media-max-width; - max-height: $media-modal-media-max-height; - width: auto; - height: auto; - object-fit: contain; - box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.5); - } -} - -.navigation-bar { - padding: 10px; - display: flex; - align-items: center; - flex-shrink: 0; - cursor: default; - color: var(--primary-text-color-faint); - - strong { - color: var(--primary-text-color-faint); - } - - a { - color: inherit; - } - - .permalink { - text-decoration: none; - } - - .navigation-bar__actions { - position: relative; - - .icon-button.close { - position: absolute; - pointer-events: none; - transform: scale(0, 1) translate(-100%, 0); - opacity: 0; - } - - .compose__action-bar .icon-button { - pointer-events: auto; - transform: scale(1, 1) translate(0, 0); - opacity: 1; - } - } -} - -.navigation-bar__profile { - flex: 1 1 auto; - margin-left: 8px; - line-height: 20px; - margin-top: -1px; - overflow: hidden; -} - -.navigation-bar__profile-account { - display: block; - font-weight: 500; - overflow: hidden; - text-overflow: ellipsis; -} - -.navigation-bar__profile-edit { - color: inherit; - text-decoration: none; -} - -.columns-area { - display: flex; - flex: 1 1 auto; - flex-direction: row; - justify-content: flex-start; - position: relative; - - &__panels { - display: flex; - justify-content: center; - width: 100%; - height: 100%; - - &__pane { - height: 100%; - pointer-events: none; - display: flex; - justify-content: flex-end; - padding-top: 15px; - - &--start { - justify-content: flex-start; - } - - &__inner { - width: 265px; - pointer-events: auto; - height: 100%; - } - } - - &__main { - display: flex; - flex-direction: column; - box-sizing: border-box; - width: 100%; - max-width: 600px; - padding: 0 20px; - @media screen and (max-width: 375px) { - padding: 0 10px; - } - @media screen and (min-width: 895px) { - margin: 0 20px; - padding: 0; - } - } - } -} - -.react-swipeable-view-container { - &, - .columns-area, - .drawer, - .column { - height: 100%; - } -} - -.react-swipeable-view-container > * { - display: flex; - align-items: center; - justify-content: center; - height: 100%; -} - -.column { - width: 350px; - position: relative; - box-sizing: border-box; - display: flex; - flex-direction: column; -} - -.ui { - display: block; - width: 100%; - padding: 0 0 100px; - - .page { - display: flex; - flex-direction: column; - width: 100%; - - &__top { - display: flex; - width: 100%; - height: auto; - z-index: 105; - background: var(--foreground-color); - - @media (min-width: 895px) { - top: -290px; - position: sticky; - } - } - - &__columns { - display: flex; - flex-direction: column; - width: 100%; - height: 100%; - } - } -} - -.drawer { - width: 300px; - box-sizing: border-box; - display: flex; - flex-direction: column; - overflow-y: hidden; -} - -.drawer__tab { - display: block; - flex: 1 1 auto; - padding: 15px 5px 13px; - color: var(--primary-text-color-faint); - text-decoration: none; - text-align: center; - font-size: 16px; - border-bottom: 2px solid transparent; -} - -.column, -.drawer { - flex: 1 1 100%; - overflow: hidden; -} - -@media screen and (min-width: 631px) { - .columns-area { - padding: 0; - } - - .column, - .drawer { - flex: 0 0 auto; - padding: 10px; - padding-left: 5px; - padding-right: 5px; - - &:first-child { - padding-left: 10px; - } - - &:last-child { - padding-right: 10px; - } - } - - .columns-area > div { - .column, - .drawer { - padding-left: 5px; - padding-right: 5px; - } - } -} - -// TEMPORARY - need a default size for the avatars for now -// They are sized individually all over the application and need to change with breakpoints as well -// Might create a mixin to accept the size attribute and apply the various properties where necessary -.account__avatar { - width: 56px; - height: 56px; - background-size: cover; -} - -.columns-area--mobile { - display: block; - flex-direction: column; - width: 100%; - margin: 0 auto; - padding: 15px 0; - - .column, - .drawer { - width: 100%; - height: 100%; - padding: 0; - } - - .autosuggest-textarea__textarea {font-size: 16px;} - - .search__input { - line-height: 18px; - font-size: 16px; - padding: 15px; - padding-right: 30px; - } - .search__icon .fa {top: 15px;} - @media screen and (min-width: 630px) { - .detailed-status { - padding: 15px; - - .media-gallery, - .video-player { - margin-top: 15px; - } - } - .account__header__bar {padding: 5px 10px;} - - .navigation-bar, - .compose-form { - padding: 15px; - } - .compose-form .compose-form__publish .compose-form__publish-button-wrapper {padding-top: 15px;} - - .status { - padding: 15px 15px 15px (48px + 15px * 2); - min-height: 48px + 2px; - - &__avatar { - left: 15px; - top: 17px; - } - - &__content { - padding-top: 5px; - } - - &__prepend { - margin-left: 48px + 15px * 2; - padding-top: 15px; - } - - &__prepend-icon-wrapper { - left: -32px; - } - - .media-gallery, - .video-player { - margin-top: 10px; - } - } - - .account { - padding: 15px 10px; - } - - .notification { - &__message { - margin-left: 48px + 15px * 2; - padding-top: 15px; - } - - &__favourite-icon-wrapper { - left: -32px; - } - - .status { - padding-top: 8px; - } - - .account { - padding-top: 8px; - } - - .account__avatar-wrapper { - margin-left: 17px; - margin-right: 15px; - } - } - } -} - -.floating-action-button { - z-index: 1000; - display: none; - position: fixed; - bottom: 14px; - right: 14px; - width: 61px; - height: 61px; - background-color: var(--brand-color); - border: 0; - border-radius: 999px; - box-shadow: 2px 5px 5px rgba(0, 0, 0, 0.5); - font-size: 30px; - align-items: center; - justify-content: center; - transition: 0.2s; - - @media screen and (max-width: 895px) { - display: flex; - } - - &:hover, - &:focus, - &:active { - background-color: var(--brand-color-hicontrast); - } - - i.fa { - display: flex; - align-items: center; - justify-content: center; - color: #fff; - margin: 0; - } -} - -@media screen and (min-width: 360px) { - .getting-started__wrapper, - .getting-started__trends { - margin-bottom: 10px; - } -} - -// NOTE - Remove all of these weird breakpoint calculations which just spit out an integer. -// This controls where the left column breaks. -@media screen and (max-width: 600px + (285px * 1) + (10px * 1)) { - .columns-area__panels__pane--left { - display: none; - } -} - -// NOTE - Remove all of these weird breakpoint calculations which just spit out an integer. -@media screen and (min-width: 600px + (285px * 1) + (10px * 1)) { - .search-page .search { - display: none; - } -} - -// NOTE - Remove all of these weird breakpoint calculations which just spit out an integer. -@media screen and (max-width: 600px + (285px * 2) + (10px * 2)) { - .columns-area__panels__pane--right { - display: none; - } -} - -.icon-with-badge { - position: relative; - height: 100%; - - &__badge { - @include font-montserrat; - @include font-size(14); - @include line-height(14); - position: absolute; - box-sizing: border-box; - left: -10px; - top: 3px; - min-width: 16px; - height: 16px; - padding: 1px 3px 0; - border-radius: 8px; - text-align: center; - color: #fff; - background: var(--brand-color); - - @media screen and (max-width: 895px) { - top: 0; - } - } -} - -.column-link--transparent .icon-with-badge__badge { - border-color: var(--background-color); -} - -.promo-panel { - margin-top: 10px; - background-color: transparent !important; - overflow: hidden; -} - -.promo-panel-item { - @include standard-panel-shadow; - display: block; - height: 42px; - line-height: 42px; - border-bottom: 1px solid var(--brand-color-med); - background: var(--foreground-color); - - &--highlighted { - background-color: #30ce7d; - border-radius: 10px; - font-weight: 600; - margin-bottom: 10px; - } - - &--top-rounded { - border-top-right-radius: 10px; - border-top-left-radius: 10px; - } - - &:last-of-type { - border-bottom: 0; - } - - &__btn { - display: block; - text-align: left; - color: var(--primary-text-color); - text-decoration: none; - font-size: 15px; - padding: 0 20px; - - &:hover { - color: var(--primary-text-color-faint); - - span { - text-decoration: underline; - } - } - } - - &__icon { - margin-right: 12px; - } -} - -.drawer__pager { - box-sizing: border-box; - padding: 0; - flex-grow: 1; - position: relative; - overflow: hidden; - display: flex; -} - -.drawer__inner { - top: 0; - left: 0; - background: var(--foreground-color); - box-sizing: border-box; - padding: 0; - display: flex; - flex-direction: column; - overflow: hidden; - overflow-y: auto; - width: 100%; - height: 100%; -} - -.pseudo-drawer { - background: var(--background-color); - font-size: 13px; - text-align: left; -} - -.drawer__header { - flex: 0 0 auto; - font-size: 16px; - background: var(--brand-color-med); - margin-bottom: 10px; - display: flex; - flex-direction: row; - - a { - transition: background 100ms ease-in; - - &:hover { - background: var(--background-color); - transition: background 200ms ease-out; - } - } -} - -.slist { - &--flex { - display: flex; - flex-direction: column; - } - - &__append { - flex: 1 1 auto; - position: relative; - min-height: 120px; - } -} - -.column-back-button { - background: var(--brand-color-med); - color: var(--highlight-text-color); - cursor: pointer; - flex: 0 0 auto; - font-size: 16px; - line-height: inherit; - border: 0; - text-align: unset; - padding: 15px; - margin: 0; - z-index: 3; - outline: 0; - - &:hover { - text-decoration: underline; - } -} - -.column-header__back-button { - background: var(--brand-color-faint); - border: 0; - font-family: inherit; - color: var(--highlight-text-color); - cursor: pointer; - white-space: nowrap; - font-size: 16px; - padding: 0 5px 0 0; - z-index: 3; - - &:hover { - text-decoration: underline; - } - - &:last-child { - padding: 0 15px 0 0; - } -} - -.column-back-button__icon { - display: inline-block; - margin-right: 5px; -} - -.column-back-button--slim { - position: relative; -} - -.column-back-button--slim-button { - cursor: pointer; - flex: 0 0 auto; - font-size: 16px; - padding: 15px; - position: absolute; - right: 0; - top: -48px; -} - -.react-toggle { - display: inline-block; - position: relative; - cursor: pointer; - background-color: transparent; - border: 0; - padding: 0; - user-select: none; - -webkit-tap-highlight-color: rgba($base-overlay-background, 0); - -webkit-tap-highlight-color: transparent; -} - -.react-toggle-screenreader-only { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -.react-toggle--disabled { - cursor: not-allowed; - opacity: 0.5; - transition: opacity 0.25s; -} - -.react-toggle-track { - width: 50px; - height: 24px; - padding: 0; - border-radius: 30px; - background-color: var(--brand-color-med); - transition: background-color 0.2s ease; -} - -.react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { - background-color: var(--background-color); -} - -.react-toggle--checked .react-toggle-track { - background-color: var(--brand-color); -} - -.react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { - background-color: var(--brand-color-hicontrast); -} - -.react-toggle-track-check { - position: absolute; - width: 14px; - height: 10px; - top: 0; - bottom: 0; - margin-top: auto; - margin-bottom: auto; - line-height: 0; - left: 8px; - opacity: 0; - transition: opacity 0.25s ease; -} - -.react-toggle--checked .react-toggle-track-check { - opacity: 1; - transition: opacity 0.25s ease; -} - -.react-toggle-track-x { - position: absolute; - width: 10px; - height: 10px; - top: 0; - bottom: 0; - margin-top: auto; - margin-bottom: auto; - line-height: 0; - right: 10px; - opacity: 1; - transition: opacity 0.25s ease; -} - -.react-toggle--checked .react-toggle-track-x { - opacity: 0; -} - -.react-toggle-thumb { - position: absolute; - top: 1px; - left: 1px; - width: 22px; - height: 22px; - border: 1px solid var(--brand-color-med); - border-radius: 50%; - background-color: var(--background-color); - box-sizing: border-box; - transition: all 0.25s ease; - transition-property: border-color, left; -} - -.react-toggle--checked .react-toggle-thumb { - left: 27px; - border-color: var(--brand-color); -} - -.column-link { - background: var(--brand-color-med); - color: var(--primary-text-color); - display: block; - font-size: 16px; - padding: 15px; - text-decoration: none; - - &:hover, - &:focus, - &:active { - background: var(--brand-color-faint); - } - - &:focus { - outline: 0; - } - - &--transparent { - background: transparent; - color: var(--background-color); - - &:hover, - &:focus, - &:active { - background: transparent; - color: var(--primary-text-color); - } - - &.active { - color: var(--brand-color); - } - } -} - -.column-link__icon { - display: inline-block; - margin-right: 5px; -} - -.column-link__badge { - display: inline-block; - border-radius: 4px; - font-size: 12px; - line-height: 19px; - font-weight: 500; - background: var(--brand-color-med); - padding: 4px 8px; - margin: -6px 10px; -} - -.column-subheading { - background: var(--brand-color-med); - color: var(--primary-text-color-faint); - padding: 8px 20px; - font-size: 12px; - font-weight: 500; - text-transform: uppercase; - cursor: default; -} - -.getting-started__wrapper, -.getting-started, -.flex-spacer { - background: var(--brand-color-med); -} - -.getting-started__wrapper { - flex: 0 0 auto; -} - -.flex-spacer { - flex: 1 1 auto; -} - -.getting-started { - overflow: auto; - - &__footer { - flex: 0 0 auto; - padding: 10px; - padding-top: 20px; - opacity: 0.7; - - ul { - margin-bottom: 10px; - } - - ul li { - display: inline; - } - - p { - color: var(--primary-text-color); - font-size: 13px; - margin-bottom: 20px; - - a { - color: var(--primary-text-color-faint); - text-decoration: underline; - opacity: 0.8; - } - } - - a { - text-decoration: none; - color: var(--primary-text-color-faint); - opacity: 0.8; - - &:hover, - &:focus, - &:active { - text-decoration: underline; - } - } - } - - &__trends { - background: var(--brand-color-med); - flex: 0 1 auto; - - @media screen and (max-height: 810px) { - .trends__item:nth-child(3) { - display: none; - } - } - - @media screen and (max-height: 720px) { - .trends__item:nth-child(2) { - display: none; - } - } - - @media screen and (max-height: 670px) { - display: none; - } - } -} - -.setting-text { - color: var(--primary-text-color-faint); - background: transparent; - border: 0; - border-bottom: 2px solid var(--brand-color); - box-sizing: border-box; - display: block; - font-family: inherit; - margin-bottom: 10px; - padding: 7px 0; - width: 100%; - - &:focus, - &:active { - color: var(--primary-text-color); - border-bottom-color: var(--highlight-text-color); - } - - @media screen and (max-width: 600px) { - font-size: 16px; - } -} - -.status-card { - display: flex; - font-size: 14px; - border: 1px solid var(--brand-color-med); - border-radius: 4px; - color: var(--primary-text-color); - margin-top: 14px; - text-decoration: none; - overflow: hidden; - - &__actions { - bottom: 0; - left: 0; - position: absolute; - right: 0; - top: 0; - display: flex; - justify-content: center; - align-items: center; - - & > div { - background: rgba($base-shadow-color, 0.6); - border-radius: 8px; - padding: 12px 9px; - flex: 0 0 auto; - display: flex; - justify-content: center; - align-items: center; - } - - button, - a { - display: inline; - color: var(--primary-text-color-faint); - background: transparent; - border: 0; - padding: 0 8px; - text-decoration: none; - font-size: 18px; - line-height: 18px; - - &:hover, - &:active, - &:focus { - color: var(--primary-text-color); - } - } - - a { - font-size: 19px; - position: relative; - bottom: -1px; - } - } -} - -a.status-card { - cursor: pointer; - - &:hover { - background: var(--brand-color-med); - } -} - -.status-card-photo { - cursor: zoom-in; - display: block; - text-decoration: none; - width: 100%; - height: auto; - margin: 0; -} - -.status-card-video { - iframe { - width: 100%; - height: 100%; - } -} - -.status-card__title { - display: block; - font-weight: 500; - margin-bottom: 5px; - color: var(--primary-text-color-faint); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - text-decoration: none; -} - -.status-card__content { - flex: 1 1 auto; - overflow: hidden; - padding: 14px 14px 14px 8px; -} - -.status-card__description { - color: var(--primary-text-color-faint); -} - -.status-card__host { - display: block; - margin-top: 5px; - font-size: 13px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.status-card__image { - flex: 0 0 100px; - background: var(--brand-color-med); - position: relative; - - & > .fa { - font-size: 21px; - position: absolute; - transform-origin: 50% 50%; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } -} - -.status-card.horizontal { - display: block; - - .status-card__image { - width: 100%; - } - - .status-card__image-image { - border-radius: 4px 4px 0 0; - } - - .status-card__title { - white-space: inherit; - } -} - -.status-card.compact { - border-color: var(--brand-color-faint); - - &.interactive { - border: 0; - } - - .status-card__content { - padding: 8px; - padding-top: 10px; - } - - .status-card__title { - white-space: nowrap; - } - - .status-card__image { - flex: 0 0 60px; - } -} - -a.status-card.compact:hover { - background-color: var(--brand-color-faint); -} - -.status-card__image-image { - border-radius: 4px 0 0 4px; - display: block; - margin: 0; - width: 100%; - height: 100%; - object-fit: cover; - background-size: cover; - background-position: center center; -} - -.load-more { - display: block; - color: var(--primary-text-color); - background-color: transparent; - border: 0; - font-size: inherit; - text-align: center; - line-height: inherit; - margin: 0; - padding: 15px; - box-sizing: border-box; - width: 100%; - clear: both; - text-decoration: none; - - &:hover { - background: var(--brand-color-faint); - } -} - -.load-gap { - border-bottom: 1px solid var(--brand-color-med); -} - -.regeneration-indicator { - text-align: center; - font-size: 16px; - font-weight: 500; - color: var(--primary-text-color); - background: var(--brand-color-med); - cursor: default; - display: flex; - flex: 1 1 auto; - align-items: center; - justify-content: center; - padding: 20px; - - & > div { - width: 100%; - background: transparent; - padding-top: 0; - } - - &__label { - strong { - display: block; - margin-bottom: 10px; - color: var(--primary-text-color); - } - - span { - font-size: 15px; - font-weight: 400; - } - } -} - -.morefollows-indicator { - text-align: center; - font-size: 16px; - font-weight: 500; - color: var(--primary-text-color); - background: var(--brand-color-med); - cursor: default; - display: flex; - flex: 1 1 auto; - align-items: center; - justify-content: center; - padding: 20px; - - & > div { - width: 100%; - background: transparent; - padding-top: 0; - } - - &__label { - strong { - display: block; - margin-bottom: 10px; - color: var(--primary-text-color); - } - } -} - -.columns-area--mobile .column { - @include standard-panel; -} - -.column-header__wrapper { - position: relative; - flex: 0 0 auto; - overflow: hidden; - - &.active { - &::before { - display: block; - content: ""; - position: absolute; - top: 35px; - left: 0; - right: 0; - margin: 0 auto; - width: 60%; - pointer-events: none; - height: 28px; - z-index: 1; - background: radial-gradient(ellipse, rgba(var(--brand-color), 0.23) 0%, rgba(var(--brand-color), 0) 60%); - } - } -} - -.column-header { - display: flex; - font-size: 16px; - flex: 0 0 auto; - cursor: pointer; - position: relative; - z-index: 2; - outline: 0; - overflow-x: auto; - - & > button, - & > .btn { - margin: 0; - border: 0; - padding: 15px; - color: inherit; - background: transparent; - font: inherit; - text-align: left; - text-decoration: none; - white-space: nowrap; - - &--sub { - font-size: 14px; - padding: 6px 10px; - } - - &.grouped { - margin: 6px; - color: var(--primary-text-color-faint); - } - - &.active { - color: var(--primary-text-color); - border-radius: 10px; - background-color: var(--brand-color-faint); - } - - @media screen and (max-width: $nav-breakpoint-2) { - padding: 8px; - font-size: 14px; - - &.grouped { - margin: 6px 2px 6px 6px; - } - - &.active { - border-radius: 5px; - } - } - } - - & > .column-header__back-button { - color: var(--highlight-text-color); - } - - &.active { - box-shadow: 0 1px 0 rgba(var(--highlight-text-color), 0.3); - - .column-header__icon { - color: var(--highlight-text-color); - text-shadow: 0 0 10px rgba(var(--highlight-text-color), 0.4); - } - } - - &:focus, - &:active { - outline: 0; - } -} - -.column-header__buttons { - height: 48px; - display: flex; - margin-left: auto; -} - -.column-header__links .text-btn { - margin-right: 10px; -} - -.column-header__button { - cursor: pointer; - border: 0; - padding: 0 15px; - font-size: 16px; - color: var(--primary-text-color-faint); - background: transparent; - - &:hover { - color: rgba(var(--primary-text-color-rgb), 0.8); - } - - &.active { - color: var(--primary-text-color); - background: var(--brand-color-med); - - &:hover { - color: var(--primary-text-color); - background: var(--brand-color-med); - } - } -} - -.column-header__collapsible { - max-height: 70vh; - overflow: hidden; - overflow-y: auto; - color: var(--primary-text-color-faint); - transition: max-height 150ms ease-in-out, opacity 300ms linear; - opacity: 1; - - &.collapsed { - max-height: 0; - opacity: 0.5; - } - - &.animating { - overflow-y: hidden; - } - - hr { - height: 0; - background: transparent; - border: 0; - border-top: 1px solid var(--brand-color-med); - margin: 10px 0; - } -} - -.column-header__collapsible-inner { - background: var(--background-color); - padding: 15px; -} - -.column-header__setting-btn { - &--link { - text-decoration: none; - - .fa { - margin-left: 10px; - } - } - - &:hover { - color: var(--primary-text-color-faint); - text-decoration: underline; - } -} - -.column-header__setting-arrows { - float: right; - - .column-header__setting-btn { - padding: 0 10px; - - &:last-child { - padding-right: 0; - } - } -} - -.column-header__expansion { - overflow-x: scroll; - overflow-y: hidden; - white-space: nowrap; -} - -.text-btn { - display: inline-block; - padding: 0; - font-family: inherit; - font-size: inherit; - color: inherit; - border: 0; - background: transparent; - cursor: pointer; -} - -.column-header__icon { - display: inline-block; - margin-right: 5px; -} - -.loading-indicator { - color: var(--primary-text-color-faint); - font-size: 12px; - font-weight: 400; - text-transform: uppercase; - overflow: visible; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - - span { - display: block; - float: left; - margin-left: 50%; - transform: translateX(-50%); - margin: 82px 0 0 50%; - white-space: nowrap; - } -} - -.loading-indicator__figure { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 42px; - height: 42px; - box-sizing: border-box; - background-color: transparent; - border: 0 solid rgba(var(--brand-color-rgb), 0.5); - border-width: 6px; - border-radius: 50%; -} - -.no-reduce-motion .loading-indicator span { - animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); -} - -.no-reduce-motion .loading-indicator__figure { - animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); -} - -@keyframes loader-figure { - 0% { - width: 0; - height: 0; - background-color: rgba(var(--brand-color-rgb), 0.5); - } - - 29% { - background-color: rgba(var(--brand-color-rgb), 0.5); - } - - 30% { - width: 42px; - height: 42px; - background-color: transparent; - border-width: 21px; - opacity: 1; - } - - 100% { - width: 42px; - height: 42px; - border-width: 0; - opacity: 0; - background-color: transparent; - } -} - -@keyframes loader-label { - 0% { opacity: 0.25; } - 30% { opacity: 1; } - 100% { opacity: 0.25; } -} - -.video-error-cover { - align-items: center; - background: var(--background-color); - color: var(--primary-text-color); - cursor: pointer; - display: flex; - flex-direction: column; - height: 100%; - justify-content: center; - margin-top: 8px; - position: relative; - text-align: center; - z-index: 100; -} - -.media-spoiler { - background: var(--background-color); - color: var(--primary-text-color-faint); - border: 0; - padding: 0; - width: 100%; - height: 100%; - border-radius: 4px; - appearance: none; - - &:hover, - &:active, - &:focus { - padding: 0; - color: var(--primary-text-color); - } -} - -.media-spoiler__warning { - display: block; - font-size: 14px; -} - -.media-spoiler__trigger { - display: block; - font-size: 11px; - font-weight: 700; -} - -.spoiler-button { - top: 0; - left: 0; - width: 100%; - height: 100%; - position: absolute; - z-index: 100; - - &--minified { - display: block; - left: 4px; - top: 4px; - width: auto; - height: auto; - } - - &--hidden { - display: none; - } - - &__overlay { - display: block; - background: transparent; - width: 100%; - height: 100%; - border: 0; - - &__label { - display: inline-block; - background: rgba($base-overlay-background, 0.5); - border-radius: 8px; - padding: 8px 12px; - color: var(--primary-text-color); - font-weight: 500; - font-size: 14px; - } - - &:hover, - &:focus, - &:active { - .spoiler-button__overlay__label { - background: rgba($base-overlay-background, 0.8); - } - } - } -} - -.modal-container--preloader { - background: var(--brand-color-med); -} - -.account--panel { - background: var(--brand-color-faint); - border-top: 1px solid var(--brand-color-med); - border-bottom: 1px solid var(--brand-color-med); - display: flex; - flex-direction: row; - padding: 10px 0; -} - -.account--panel__button, -.detailed-status__button { - flex: 1 1 auto; - text-align: center; -} - -.column-settings__outer { - background: var(--brand-color-med); - padding: 15px; -} - -.column-settings__section { - color: var(--primary-text-color-faint); - cursor: default; - display: block; - font-weight: 500; - margin-bottom: 10px; -} - -.column-settings__hashtags { - .column-settings__row { - margin-bottom: 15px; - } - - .column-select { - &__control { - @include search-input; - } - - &__placeholder { - color: var(--primary-text-color); - padding-left: 2px; - font-size: 12px; - } - - &__value-container { - padding-left: 6px; - } - - &__multi-value { - background: var(--brand-color-med); - - &__remove { - cursor: pointer; - - &:hover, - &:active, - &:focus { - background: var(--brand-color-med); - color: var(--primary-text-color); - } - } - } - - &__multi-value__label, - &__input { - color: var(--primary-text-color-faint); - } - - &__clear-indicator, - &__dropdown-indicator { - cursor: pointer; - transition: none; - color: var(--primary-text-color); - - &:hover, - &:active, - &:focus { - color: var(--primary-text-color); - } - } - - &__indicator-separator { - background-color: var(--brand-color-med); - } - - &__menu { - @include search-popout; - padding: 0; - background: var(--background-color); - } - - &__menu-list { - padding: 6px; - } - - &__option { - color: var(--primary-text-color); - border-radius: 4px; - font-size: 14px; - - &--is-focused, - &--is-selected { - background: var(--background-color); - } - } - } -} - -.column-settings__row { - .text-btn { - margin-bottom: 15px; - } -} - -.relationship-tag { - color: var(--primary-text-color); - margin-bottom: 4px; - display: block; - vertical-align: top; - background-color: var(--background-color); - text-transform: uppercase; - font-size: 11px; - font-weight: 500; - padding: 4px; - border-radius: 4px; - opacity: 0.7; - - &:hover { - opacity: 1; - } -} - -.setting-toggle { - display: block; - line-height: 24px; -} - -.setting-toggle__label { - color: var(--primary-text-color-faint); - display: inline-block; - margin-bottom: 14px; - margin-left: 8px; - vertical-align: middle; -} - -.empty-column-indicator, -.error-column { - color: var(--primary-text-color); - background: var(--brand-color-med); - text-align: center; - padding: 40px; - font-size: 15px; - font-weight: 400; - cursor: default; - display: flex; - flex: 1 1 auto; - align-items: center; - justify-content: center; - min-height: 160px; - - @supports(display: grid) { // hack to fix Chrome <57 - contain: strict; - } - - & > span { - max-width: 400px; - } - - a { - color: var(--highlight-text-color); - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } -} - -.error-column { - flex-direction: column; -} - -@keyframes heartbeat { - from { - transform: scale(1); - animation-timing-function: ease-out; - } - - 10% { - transform: scale(0.91); - animation-timing-function: ease-in; - } - - 17% { - transform: scale(0.98); - animation-timing-function: ease-out; - } - - 33% { - transform: scale(0.87); - animation-timing-function: ease-in; - } - - 45% { - transform: scale(1); - animation-timing-function: ease-out; - } -} - -.no-reduce-motion .pulse-loading { - transform-origin: center center; - animation: heartbeat 1.5s ease-in-out infinite both; -} - -@keyframes shake-bottom { - 0%, - 100% { - transform: rotate(0deg); - transform-origin: 50% 100%; - } - - 10% { - transform: rotate(2deg); - } - - 20%, - 40%, - 60% { - transform: rotate(-4deg); - } - - 30%, - 50%, - 70% { - transform: rotate(4deg); - } - - 80% { - transform: rotate(-2deg); - } - - 90% { - transform: rotate(2deg); - } -} - -.no-reduce-motion .shake-bottom { - transform-origin: 50% 100%; - animation: shake-bottom 0.8s cubic-bezier(0.455, 0.03, 0.515, 0.955) 2s 2 both; -} - -.emoji-picker-dropdown__menu { - @include standard-panel; - background: var(--foreground-color); - position: absolute; - margin-top: 5px; - z-index: 20000; - - .emoji-mart-scroll { - transition: opacity 200ms ease; - } - - &.selecting .emoji-mart-scroll { - opacity: 0.5; - } -} - -.emoji-picker-dropdown__modifiers { - position: absolute; - top: 60px; - right: 11px; - cursor: pointer; -} - -.emoji-picker-dropdown__modifiers__menu { - position: absolute; - z-index: 4; - top: -4px; - left: -8px; - background: var(--foreground-color); - border-radius: 4px; - box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); - overflow: hidden; - - button { - display: block; - cursor: pointer; - border: 0; - padding: 4px 8px; - background: transparent; - - &:hover, - &:focus, - &:active { - background: rgba(var(--background-color-rgb), 0.4); - } - } - - .emoji-mart-emoji { - height: 22px; - } -} - -.emoji-mart-emoji { - span { - background-repeat: no-repeat; - } -} - -.upload-area { - align-items: center; - background: rgba($base-overlay-background, 0.8); - display: flex; - height: 100%; - justify-content: center; - left: 0; - opacity: 0; - position: absolute; - top: 0; - visibility: hidden; - width: 100%; - z-index: 2000; - - * { - pointer-events: none; - } -} - -.upload-area__drop { - width: 320px; - height: 160px; - display: flex; - box-sizing: border-box; - position: relative; - padding: 8px; -} - -.upload-area__background { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; - border-radius: 4px; - background: var(--brand-color-med); - box-shadow: 0 0 5px rgba($base-shadow-color, 0.2); -} - -.upload-area__content { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - color: var(--primary-text-color-faint); - font-size: 18px; - font-weight: 500; - border: 2px dashed var(--brand-color-med); - border-radius: 4px; -} - -.upload-progress { - padding: 10px; - color: var(--highlight-text-color); - overflow: hidden; - display: flex; - - .fa { - font-size: 34px; - margin-right: 10px; - } - - span { - font-size: 12px; - text-transform: uppercase; - font-weight: 500; - display: block; - } -} - -.upload-progess__message { - flex: 1 1 auto; -} - -.upload-progress__backdrop { - width: 100%; - height: 6px; - border-radius: 6px; - background: var(--brand-color-med); - position: relative; - margin-top: 5px; -} - -.upload-progress__tracker { - position: absolute; - left: 0; - top: 0; - height: 6px; - background: var(--brand-color); - border-radius: 6px; -} - -.emoji-button { - display: block; - font-size: 24px; - line-height: 24px; - margin-left: 2px; - width: 24px; - outline: 0; - cursor: pointer; - - &:active, - &:focus { - outline: 0 !important; - } - - img { - filter: grayscale(100%); - opacity: 0.8; - display: block; - margin: 0; - width: 22px; - height: 22px; - margin-top: 2px; - } - - &:hover, - &:active, - &:focus { - img { - opacity: 1; - filter: none; - } - } -} - -.dropdown--active .emoji-button img { - opacity: 1; - filter: none; -} - -.privacy-dropdown__dropdown { - font-size: 14px; - position: absolute; - background: var(--foreground-color); - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); - border-radius: 4px; - margin-left: 40px; - overflow: hidden; - z-index: 10000; - - &.top { - transform-origin: 50% 100%; - } - - &.bottom { - transform-origin: 50% 0; - } -} - -.privacy-dropdown__option { - color: var(--primary-text-color); - padding: 10px; - cursor: pointer; - display: flex; - - &:hover, - &.active { - background: var(--brand-color-med); - color: var(--primary-text-color); - outline: 0; - - .privacy-dropdown__option__content { - color: var(--primary-text-color); - - strong { - color: var(--primary-text-color); - } - } - } - - &.active:hover { - background: rgba(var(--brand-color-rgb), 0.5); - } -} - -.privacy-dropdown__option__icon { - display: flex; - align-items: center; - justify-content: center; - margin-right: 10px; -} - -.privacy-dropdown__option__content { - flex: 1 1 auto; - color: var(--highlight-text-color); - - strong { - font-weight: 500; - display: block; - color: var(--primary-text-color); - - @each $lang in $cjk-langs { - &:lang(#{$lang}) { - font-weight: 700; - } - } - } -} - -.privacy-dropdown.active { - .privacy-dropdown__value { - background: var(--foreground-color); - border-radius: 4px 4px 0 0; - box-shadow: 0 -4px 4px rgba($base-shadow-color, 0.1); - - .icon-button { - transition: none; - } - - &.active { - background: var(--brand-color); - - .icon-button { - color: var(--primary-text-color); - } - } - } - - &.top .privacy-dropdown__value { - border-radius: 0 0 4px 4px; - } - - .privacy-dropdown__dropdown { - display: block; - box-shadow: 2px 4px 6px rgba($base-shadow-color, 0.1); - } -} - -.search { - position: relative; -} - -.search__input { - @include search-input; - display: block; - padding: 7px 30px 6px 10px; -} - -.search__icon { - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus { - outline: 0 !important; - } - - .fa { - @include font-size(16); - cursor: default; - display: inline-block; - position: absolute; - top: 8px; - right: 8px; - z-index: 2; - width: 18px; - height: 18px; - color: var(--primary-text-color-faint); - opacity: 0; - pointer-events: none; - - &.active { - pointer-events: auto; - opacity: 1; - } - } - .fa-search.active {pointer-events: none;} - - .fa-times-circle { - @include font-size(17); - cursor: pointer; - color: var(--highlight-text-color); - &:hover {color: var(--brand-color);} - } -} - -.search-results__header { - color: var(--primary-text-color); - background: var(--brand-color-med); - padding: 15px; - font-weight: 500; - font-size: 16px; - cursor: default; - - .fa { - display: inline-block; - margin-right: 5px; - } -} - -.search-results__section { - margin-bottom: 5px; - - h5 { - background: var(--brand-color-faint); - border-bottom: 1px solid var(--brand-color-faint); - cursor: default; - display: flex; - padding: 15px; - font-weight: 500; - font-size: 16px; - color: var(--primary-text-color); - - .fa { - display: inline-block; - margin-right: 5px; - } - } - - .account:last-child, - & > div:last-child .status { - border-bottom: 0; - } -} - -.search-results__hashtag { - display: block; - padding: 10px; - color: var(--primary-text-color-faint); - text-decoration: none; - - &:hover, - &:active, - &:focus { - color: var(--primary-text-color); - text-decoration: underline; - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////////////////////////// - - -.loading-bar { - background-color: var(--highlight-text-color); - height: 3px; - position: absolute; - top: 0; - left: 0; -} - -.media-gallery__gifv__label { - display: block; - position: absolute; - color: var(--primary-text-color); - background: rgba($base-overlay-background, 0.5); - bottom: 6px; - left: 6px; - padding: 2px 6px; - border-radius: 2px; - font-size: 11px; - font-weight: 600; - z-index: 1; - pointer-events: none; - opacity: 0.9; - transition: opacity 0.1s ease; - line-height: 18px; -} - -.media-gallery__gifv { - &.autoplay { - .media-gallery__gifv__label { - display: none; - } - } - - &:hover { - .media-gallery__gifv__label { - opacity: 1; - } - } -} - -.attachment-list { - display: flex; - font-size: 14px; - border: 1px solid var(--brand-color-med); - border-radius: 4px; - margin-top: 14px; - overflow: hidden; - - &__icon { - flex: 0 0 auto; - color: var(--primary-text-color); - padding: 8px 18px; - cursor: default; - border-right: 1px solid var(--brand-color-med); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: 26px; - - .fa { - display: block; - } - } - - &__list { - list-style: none; - padding: 4px 0; - padding-left: 8px; - display: flex; - flex-direction: column; - justify-content: center; - - li { - display: block; - padding: 4px 0; - } - - a { - text-decoration: none; - color: var(--primary-text-color); - font-weight: 500; - - &:hover { - text-decoration: underline; - } - } - } - - &.compact { - border: 0; - margin-top: 4px; - - .attachment-list__list { - padding: 0; - display: block; - } - - .fa { - color: var(--primary-text-color); - } - } -} - -/* Media Gallery */ -.media-gallery { - box-sizing: border-box; - margin-top: 8px; - overflow: hidden; - border-radius: 4px; - position: relative; - width: 100%; - background-color: var(--brand-color-faint); -} - -.media-gallery__item { - border: 0; - box-sizing: border-box; - display: block; - float: left; - position: relative; - border-radius: 4px; - overflow: hidden; -} - -.media-gallery__item-thumbnail { - cursor: zoom-in; - display: block; - text-decoration: none; - color: var(--primary-text-color-faint); - line-height: 0; - position: relative; - z-index: 1; - - &, - img, - canvas { - height: 100%; - width: 100%; - } - - img, - canvas { - object-fit: cover; - } - - &--play-on-hover { - &::before { - content: 'GIF'; - position: absolute; - color: var(--primary-text-color); - background: var(--foreground-color); - bottom: 6px; - left: 6px; - padding: 2px 6px; - border-radius: 2px; - font-size: 11px; - font-weight: 600; - pointer-events: none; - opacity: 0.9; - transition: opacity 0.1s ease; - line-height: 18px; - } - - img { - position: absolute; - } - - img, - &:hover::before { - visibility: hidden; - } - - &:hover img { - visibility: visible; - } - } -} - -.media-gallery__preview { - width: 100%; - height: 100%; - object-fit: cover; - position: absolute; - top: 0; - left: 0; - z-index: 0; - background: var(--background-color); - - &--hidden { - display: none; - } -} - -.media-gallery__gifv { - height: 100%; - overflow: hidden; - position: relative; - width: 100%; -} - -.media-gallery__item-gifv-thumbnail { - cursor: zoom-in; - height: 100%; - object-fit: cover; - position: relative; - width: 100%; - z-index: 1; - transform: none; - top: 0; -} - -.media-gallery__item-thumbnail-label { - clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ - clip: rect(1px, 1px, 1px, 1px); - overflow: hidden; - position: absolute; -} -/* End Media Gallery */ - -/* Status Video Player */ -.status__video-player { - background: var(--background-color); - box-sizing: border-box; - cursor: default; /* May not be needed */ - margin-top: 8px; - overflow: hidden; - position: relative; -} - -.status__video-player-video { - height: 100%; - object-fit: cover; - position: relative; - top: 50%; - transform: translateY(-50%); - width: 100%; - z-index: 1; -} - -.status__video-player-expand, -.status__video-player-mute { - color: var(--primary-text-color); - opacity: 0.8; - position: absolute; - right: 4px; - text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; -} - -.status__video-player-spoiler { - display: none; - color: var(--primary-text-color); - left: 4px; - position: absolute; - text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; - top: 4px; - z-index: 100; - - &.status__video-player-spoiler--visible { - display: block; - } -} - -.status__video-player-expand { - bottom: 4px; - z-index: 100; -} - -.status__video-player-mute { - top: 4px; - z-index: 5; -} - -.detailed, -.fullscreen { - .video-player__volume__current, - .video-player__volume::before { - bottom: 27px; - } - - .video-player__volume__handle { - bottom: 23px; - } - -} - -.video-player { - overflow: hidden; - position: relative; - background: $base-shadow-color; - max-width: 100%; - border-radius: 4px; - - &:focus { - outline: 0; - } - - video { - max-width: 100vw; - max-height: 80vh; - min-height: 120px; - object-fit: contain; - z-index: 1; - } - - &.fullscreen { - width: 100% !important; - height: 100% !important; - margin: 0; - - video { - max-width: 100% !important; - max-height: 100% !important; - width: 100% !important; - height: 100% !important; - } - } - - &.inline { - video { - object-fit: contain; - position: relative; - } - } - - &__controls { - position: absolute; - z-index: 2; - bottom: 0; - left: 0; - right: 0; - box-sizing: border-box; - background: linear-gradient(0deg, rgba($base-shadow-color, 0.85) 0, rgba($base-shadow-color, 0.45) 60%, transparent); - padding: 0 15px; - opacity: 0; - transition: opacity .1s ease; - - &.active { - opacity: 1; - } - } - - &.inactive { - video, - .video-player__controls { - visibility: hidden; - } - } - - &__spoiler { - display: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 4; - border: 0; - background: var(--background-color); - color: var(--primary-text-color-faint); - transition: none; - pointer-events: none; - - &.active { - display: block; - pointer-events: auto; - - &:hover, - &:active, - &:focus { - color: var(--primary-text-color); - } - } - - &__title { - display: block; - font-size: 14px; - } - - &__subtitle { - display: block; - font-size: 11px; - font-weight: 500; - } - } - - &__buttons-bar { - display: flex; - justify-content: space-between; - padding-bottom: 10px; - } - - &__buttons { - font-size: 16px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - - &.left { - button { - padding-left: 0; - } - } - - &.right { - button { - padding-right: 0; - } - } - - button { - background: transparent; - padding: 2px 10px; - font-size: 16px; - border: 0; - color: rgba(#ffffff, 0.75); - - &:active, - &:hover, - &:focus { - color: #ffffff; - } - } - } - - &__time-sep, - &__time-total, - &__time-current { - font-size: 14px; - font-weight: 500; - } - - &__time-current { - color: #ffffff; - margin-left: 60px; - } - - &__time-sep { - display: inline-block; - margin: 0 6px; - } - - &__time-sep, - &__time-total { - color: #ffffff; - } - - &__volume { - cursor: pointer; - height: 24px; - display: inline; - - &::before { - content: ""; - width: 50px; - background: rgba(#ffffff, 0.35); - border-radius: 4px; - display: block; - position: absolute; - height: 4px; - left: 70px; - bottom: 20px; - } - - &__current { - display: block; - position: absolute; - height: 4px; - border-radius: 4px; - left: 70px; - bottom: 20px; - background: var(--brand-color); - } - - &__handle { - position: absolute; - z-index: 3; - border-radius: 50%; - width: 12px; - height: 12px; - bottom: 16px; - left: 70px; - transition: opacity .1s ease; - background: var(--brand-color); - box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); - pointer-events: none; - } - } - - &__link { - padding: 2px 10px; - - a { - text-decoration: none; - font-size: 14px; - font-weight: 500; - color: #ffffff; - - &:hover, - &:active, - &:focus { - text-decoration: underline; - } - } - } - - &__seek { - cursor: pointer; - height: 24px; - position: relative; - - &::before { - content: ""; - width: 100%; - background: rgba(#ffffff, 0.35); - border-radius: 4px; - display: block; - position: absolute; - height: 4px; - top: 10px; - } - - &__progress, - &__buffer { - display: block; - position: absolute; - height: 4px; - border-radius: 4px; - top: 10px; - background: var(--brand-color); - } - - &__buffer { - background: rgba(#ffffff, 0.2); - } - - &__handle { - position: absolute; - z-index: 3; - opacity: 0; - border-radius: 50%; - width: 12px; - height: 12px; - top: 6px; - margin-left: -6px; - transition: opacity .1s ease; - background: var(--brand-color); - box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); - pointer-events: none; - - &.active { - opacity: 1; - } - } - - &:hover { - .video-player__seek__handle { - opacity: 1; - } - } - } - - &.detailed, - &.fullscreen { - .video-player__buttons { - button { - padding-top: 10px; - padding-bottom: 10px; - } - } - } -} - -.media-spoiler-video { - background-size: cover; - background-repeat: no-repeat; - background-position: center; - cursor: pointer; - margin-top: 8px; - position: relative; - border: 0; - display: block; -} - -.media-spoiler-video-play-icon { - border-radius: 100px; - color: var(--primary-text-color-faint); - font-size: 36px; - left: 50%; - padding: 5px; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); -} -/* End Video Player */ - -.account-gallery__container { - display: flex; - flex-wrap: wrap; - padding: 4px 2px; -} - -.account-gallery__item { - border: 0; - box-sizing: border-box; - display: block; - position: relative; - border-radius: 4px; - overflow: hidden; - margin: 2px; - - a { - background: var(--brand-color-faint); - } - - &__icons { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font-size: 24px; - } -} - -.notification__filter-bar, -.account__section-headline { - border-bottom: 1px solid var(--brand-color-faint); - cursor: default; - display: flex; - flex-shrink: 0; - - button { - border: 0; - margin: 0; - } - - button, - a { - display: block; - flex: 1 1 auto; - color: var(--primary-text-color-faint); - padding: 15px 0; - font-size: 14px; - font-weight: 500; - text-align: center; - text-decoration: none; - position: relative; - background: transparent; - - &.active { - color: var(--primary-text-color); - - &::before, - &::after { - display: block; - content: ""; - position: absolute; - bottom: 0; - left: 50%; - width: 0; - height: 0; - transform: translateX(-50%); - border-style: solid; - border-width: 0 10px 10px; - border-color: transparent transparent var(--brand-color-faint); - } - - &::after { - bottom: -1px; - } - } - } -} - -.account__section-headline { - background: var(--brand-color-faint); - - button, - a { - flex: none; - padding: 18px 15px; - font-size: 16px; - font-weight: 600; - - &.active { - &::before, - &::after { - border-color: transparent transparent var(--foreground-color); - } - } - } -} - -::-webkit-scrollbar-thumb { - border-radius: 0; -} - -.search-popout-container { - width: 251px; - @media screen and (max-width: $nav-breakpoint-2) {width: 100%;} -} - -.search-popout { - @include search-popout; -} - -noscript { - text-align: center; - - img { - width: 200px; - opacity: 0.5; - animation: flicker 4s infinite; - } - - div { - font-size: 14px; - margin: 30px auto; - color: var(--primary-text-color-faint); - max-width: 400px; - - a { - color: var(--highlight-text-color); - text-decoration: underline; - - &:hover { - text-decoration: none; - } - } - } -} - -@keyframes flicker { - 0% { opacity: 1; } - 30% { opacity: 0.75; } - 100% { opacity: 1; } -} - -@media screen and (max-width: 630px) and (max-height: 400px) { - $duration: 400ms; - $delay: 100ms; - - .tabs-bar, - .search { - will-change: margin-top; - transition: margin-top $duration $delay; - } - - .navigation-bar { - will-change: padding-bottom; - transition: padding-bottom $duration $delay; - } - - .navigation-bar { - & > a:first-child { - will-change: margin-top, margin-left, margin-right, width; - transition: margin-top $duration $delay, margin-left $duration ($duration + $delay), margin-right $duration ($duration + $delay); - } - - & > .navigation-bar__profile-edit { - will-change: margin-top; - transition: margin-top $duration $delay; - } - - .navigation-bar__actions { - & > .icon-button.close { - will-change: opacity transform; - transition: opacity $duration * 0.5 $delay, - transform $duration $delay; - } - - & > .compose__action-bar .icon-button { - will-change: opacity transform; - transition: opacity $duration * 0.5 $delay + $duration * 0.5, - transform $duration $delay; - } - } - } - - .is-composing { - .tabs-bar, - .search { - margin-top: -50px; - } - - .navigation-bar { - padding-bottom: 0; - - & > a:first-child { - margin: -100px 10px 0 -50px; - } - - .navigation-bar__profile { - padding-top: 2px; - } - - .navigation-bar__profile-edit { - position: absolute; - margin-top: -60px; - } - - .navigation-bar__actions { - .icon-button.close { - pointer-events: auto; - opacity: 1; - transform: scale(1, 1) translate(0, 0); - bottom: 5px; - } - - .compose__action-bar .icon-button { - pointer-events: none; - opacity: 0; - transform: scale(0, 1) translate(100%, 0); - } - } - } - } -} - -.embed-modal { - max-width: 80vw; - max-height: 80vh; - - h4 { - padding: 30px; - font-weight: 500; - font-size: 16px; - text-align: center; - } - - .embed-modal__container { - padding: 10px; - - .hint { - margin-bottom: 15px; - } - - .embed-modal__html { - outline: 0; - box-sizing: border-box; - display: block; - width: 100%; - border: 0; - border-radius: 5px; - padding: 10px; - font-family: var(--font-monospace), monospace; - background: var(--brand-color-med); - color: var(--primary-text-color); - font-size: 14px; - margin: 0; - margin-bottom: 15px; - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - - &:focus { - background: var(--brand-color-faint); - } - - @media screen and (max-width: 600px) { - font-size: 16px; - } - } - - .embed-modal__iframe { - width: 100%; - max-width: 100%; - overflow: hidden; - border: 0; - - iframe { - width: 100%; - } - } - } -} - -.account__moved-note { - padding: 14px 10px; - padding-bottom: 16px; - background: var(--brand-color-faint); - border-top: 1px solid var(--brand-color-med); - border-bottom: 1px solid var(--brand-color-med); - - &__message { - position: relative; - margin-left: 58px; - color: var(--primary-text-color); - padding: 8px 0; - padding-top: 0; - padding-bottom: 4px; - font-size: 14px; - - > span { - display: block; - overflow: hidden; - text-overflow: ellipsis; - } - } - - &__icon-wrapper { - left: -26px; - position: absolute; - } - - .detailed-status__display-avatar { - position: relative; - } - - .detailed-status__display-name { - margin-bottom: 0; - } -} - -.column-inline-form { - padding: 7px 15px; - padding-right: 5px; - display: flex; - justify-content: flex-start; - align-items: center; - background: var(--brand-color-faint); - - label { - flex: 1 1 auto; - - input { - width: 100%; - margin-bottom: 6px; - - &:focus { - outline: 0; - } - } - } - - .icon-button { - flex: 0 0 auto; - margin: 0 5px; - } -} - -.drawer__backdrop { - cursor: pointer; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba($base-overlay-background, 0.5); -} - -.list-editor { - flex-direction: column; - width: 100%; - overflow: hidden; - height: 100%; - overflow-y: scroll; - - @media screen and (max-width: 420px) { - width: 90%; - } - - h4 { - padding: 15px 0; - background: var(--background-color); - font-weight: 500; - font-size: 16px; - text-align: center; - border-radius: 8px 8px 0 0; - } - - .drawer__inner { - border-radius: 0 0 8px 8px; - - &.backdrop { - width: calc(100% - 60px); - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); - border-radius: 0 0 0 8px; - } - } - - &__accounts { - background: var(--background-color); - overflow-y: auto; - max-height: 200px; - } - - .account__display-name { - &:hover strong { - text-decoration: none; - } - } - - .account__avatar { - cursor: default; - } - - .search { - display: flex; - flex-direction: row; - margin: 10px 0; - - > label { - flex: 1 1; - } - - > .search__icon .fa { - right: 102px !important; - } - - > .button { - width: 80px; - margin-left: 10px; - } - } -} - -.list-adder { - flex-direction: column; - width: 100%; - overflow: hidden; - height: 100%; - overflow-y: scroll; - - @media screen and (max-width: 420px) { - width: 90%; - } - - &__account { - background: var(--background-color); - border-radius: 4px; - } - - &__lists { - background: var(--background-color); - } - - .list { - padding: 4px; - border-bottom: 1px solid var(--brand-color-med); - } - - .list__wrapper { - display: flex; - - .account__relationship { - padding: 8px 5px 0; - } - } - - .list__display-name { - flex: 1 1 auto; - overflow: hidden; - text-decoration: none; - font-size: 16px; - padding: 10px; - } -} - -.new-list-form, -.edit-list-form { - &__btn { - margin-left: 6px; - width: 112px; - } - - &__input { - height: 36px; - } -} - -.focal-point-modal { - max-width: 80vw; - max-height: 80vh; - position: relative; -} - -.focal-point { - position: relative; - cursor: pointer; - overflow: hidden; - - &.dragging { - cursor: move; - } - - img { - max-width: 80vw; - max-height: 80vh; - width: auto; - height: auto; - margin: auto; - } - - &__reticle { - position: absolute; - width: 100px; - height: 100px; - transform: translate(-50%, -50%); - background: url('../images/reticle.png') no-repeat 0 0; - border-radius: 50%; - box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35); - } - - &__overlay { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - } -} - -.account__header__content { - color: var(--primary-text-color-faint); - font-size: 14px; - font-weight: 400; - overflow: hidden; - word-break: normal; - word-wrap: break-word; - - p { - margin-bottom: 20px; - - &:last-child { - margin-bottom: 0; - } - } - - a { - color: inherit; - text-decoration: underline; - - &:hover { - text-decoration: none; - } - } -} - -.trends { - &__header { - color: var(--primary-text-color); - background: var(--brand-color-faint); - border-bottom: 1px solid var(--brand-color-med); - font-weight: 500; - padding: 15px; - font-size: 16px; - cursor: default; - - .fa { - display: inline-block; - margin-right: 5px; - } - } - - &__item { - display: flex; - align-items: center; - padding: 15px; - border-bottom: 1px solid var(--brand-color-med); - - &:last-child { - border-bottom: 0; - } - - &__name { - flex: 1 1 auto; - color: var(--primary-text-color); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - font-size: 13px; - - strong { - font-weight: bold; - } - - a { - color: var(--primary-text-color-faint); - text-decoration: none; - font-size: 14px; - font-weight: 500; - display: block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - - &:hover, - &:focus, - &:active { - span { - text-decoration: underline; - } - } - } - } - - &__current { - flex: 0 0 auto; - width: 100px; - font-size: 24px; - line-height: 36px; - font-weight: 500; - text-align: center; - color: var(--primary-text-color-faint); - } - - &__sparkline { - flex: 0 0 auto; - width: 50px; - - path { - stroke: var(--highlight-text-color) !important; - } - } - } -} - -.layout-toggle { - display: flex; - padding: 5px; - - button { - box-sizing: border-box; - flex: 0 0 50%; - background: transparent; - padding: 5px; - border: 0; - position: relative; - - &:hover, - &:focus, - &:active { - svg path:first-child { - fill: var(--background-color); - } - } - } - - svg { - width: 100%; - height: auto; - - path:first-child { - fill: var(--brand-color-med); - } - - path:last-child { - fill: var(--background-color); - } - } - - &__active { - color: var(--brand-color); - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background: var(--brand-color-med); - border-radius: 50%; - padding: 0.35rem; - } -} - -.wtf-panel { - @include standard-panel-shadow; - display: flex; - width: 100%; - border-radius: 10px; - flex-direction: column; - height: auto; - box-sizing: border-box; - background: var(--foreground-color); - - &:not(:last-of-type) { - margin-bottom: 10px; - } - - .wtf-panel-header { - display: flex; - align-items: baseline; - margin-bottom: 10px; - padding: 15px 15px 0; - - &__icon { - margin-right: 10px; - } - - &__label { - flex: 1 1; - color: var(--primary-text-color); - font-size: 16px; - font-weight: bold; - line-height: 19px; - } - } - - &__content { - width: 100%; - padding-top: 8px; - } - - &__list { - padding: 0 5px; - } - - &__subtitle { - display: block; - padding: 0 15px; - color: var(--primary-text-color-faint); - } - - &__form { - display: block; - padding: 15px; - - &.button { - width: 100%; - } - } - - .wtf-panel-list-item { - display: block; - padding-bottom: 10px; - - &:not(:first-of-type) { - margin-top: 12px; - } - - &:not(:last-of-type) { - border-bottom: 1px solid var(--brand-color-med); - } - - &__content { - display: flex; - flex-direction: row; - min-height: 46px; - margin-left: 58px; - } - - &__account-block { - display: flex; - position: relative; - align-items: baseline; - padding-right: 10px; - - &__avatar { - height: 46px; - width: 46px; - background-color: #ff0000; - left: -58px; - position: absolute; - } - - &__name { - display: flex; - flex-wrap: wrap; - flex-direction: column; - margin-top: 6px; - - &__name { - color: var(--primary-text-color); - font-size: 14px; - font-weight: bold; - line-height: 16px; - margin-bottom: 2px; - max-height: 32px; //2 lines of text - overflow: hidden; - } - - &__username { - color: var(--highlight-text-color); - font-size: 12px; - line-height: 14px; - } - } - } - - &__follow-block { - margin-left: auto; - padding-top: 6px; - - &__button { - display: flex; - } - - &__icon { - color: var(--primary-text-color); - } - } - } -} - -.verified-icon { - display: inline-block; - margin: 0 4px 0 1px; - vertical-align: top; - position: relative; - width: 15px; - height: 15px; - - &::before { - display: block; - content: ""; - position: absolute; - background-color: #00a3ed; - top: 0; - right: 0; - left: 0; - bottom: 0; - border-radius: 50%; - } - - &::after { - display: block; - position: absolute; - content: '\f00c'; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - color: #fff; - font-size: 0.6em; - line-height: 15px; - width: 15px; - height: 15px; - text-align: center; - } -} - -.compose-modal { - padding: 8px 0 0; - overflow: hidden; - background-color: var(--background-color); - border-radius: 6px; - flex-direction: column; - width: 600px; - margin: 10px 0; - - &__header { - display: block; - position: relative; - padding: 5px 0; - - &__title { - display: block; - width: 80%; - margin: 0 auto; - font-size: 18px; - font-weight: bold; - line-height: 24px; - color: var(--primary-text-color); - text-align: center; - } - } - - &__close { - position: absolute; - right: 10px; - top: 5px; - color: #999; - } - - &__content { - display: flex; - flex-direction: row; - flex: 1; - padding: 10px; - overflow-y: hidden; - - &--scroll { - display: block; - overflow-y: auto; - } - - .timeline-compose-block { - background: transparent !important; - width: 100%; - padding: 0; - margin-bottom: 0; - - .compose-form { - max-height: 100%; - max-width: 100%; - display: flex; - flex-direction: column; - padding: 0 !important; - - .compose-form__autosuggest-wrapper .autosuggest-textarea__textarea { - max-height: 160px !important; - } - - .compose-form__autosuggest-wrapper::before { - content: none !important; - } - } - } - } - - @media screen and (max-width: 895px) { - margin: 0; - border-radius: 0; - height: 100vh; - width: 100vw; - } -} - -.account-timeline { - &__header { - display: block; - width: 100%; - } -} - -.profile-info-panel { - display: block; - position: relative; - - &__content { - display: flex; - flex-direction: column; - flex: 1 1; - - @media (min-width: 895px) { - padding-top: 60px; - } - } - - .profile-info-panel-content { - display: flex; - - &__badges { - display: flex; - margin: 5px 0; - flex-direction: row; - flex-wrap: wrap; - - &__join-date { - display: block; - margin-top: 5px; - - .fa { - margin-right: 8px; - } - - span { - color: var(--primary-text-color); - font-size: 15px; - line-height: 1.25; - } - } - } - - &__name { - display: block; - - .account-role { - vertical-align: top; - } - - .emojione { - width: 22px; - height: 22px; - } - - // Hide "verified" emoji to avoid confusion - .emojione[alt*="verified"] { - display: none; - } - - h1 { - span:first-of-type { - font-size: 20px !important; - line-height: 1.25; - color: var(--primary-text-color); - font-weight: 600 !important; - max-width: 260px; - } - - small { - display: block; - font-size: 16px; - line-height: 1.5; - color: var(--primary-text-color-faint); - font-weight: 400; - overflow: hidden; - text-overflow: ellipsis; - } - } - } - - &__bio { - display: block; - flex: 1 1; - color: var(--primary-text-color); - margin: 15px 0; - font-size: 15px; - line-height: 1.25; - - a { - color: var(--highlight-text-color); - } - } - - &__fields { - display: flex; - flex-direction: column; - border-top: 1px solid var(--brand-color-med); - padding: 10px 0; - margin: 5px 0; - - @media screen and (max-width: 895px) { - border-bottom: 1px solid var(--brand-color-med); - } - - a { - color: var(--highlight-text-color); - } - - dl:first-child .verified { - border-radius: 0 4px 0 0; - } - - .verified a { - color: $valid-value-color; - } - - &__item { - display: block; - padding: 2px 0; - margin: 2px 0; - flex: 1 1; - - * { - font-size: 15px; - line-height: 24px; - } - - dt { - min-width: 26px; - } - - dd { - padding-left: 4px; - } - } - } - } -} - -.unauthorized-modal { - width: 440px !important; - - &__content { - display: flex; - width: 100%; - height: 150px; - justify-content: center; - align-items: center; - flex-direction: column; - } - - .unauthorized-modal-content { - &__text { - display: block; - margin-bottom: 18px; - color: #fff; - font-size: 14px; - } - - &__button { - width: 200px; - } - } - - &__footer { - display: flex; - border-top: 1px solid #666; - padding: 10px; - justify-content: center; - align-items: center; - - > span { - font-size: 14px; - color: var(--primary-text-color-faint); - - a { - color: var(--brand-color) !important; - } - } - } - - @media screen and (max-width: 895px) { - height: 270px !important; - width: 330px !important; - } -} - -.error-boundary { - > div { - margin: auto; - - span { - display: block; - text-align: center; - color: var(--primary-text-color-faint); - } - - a { - display: block; - margin: 15px auto; - text-align: center; - color: var(--brand-color); - } - } -} - -.search-header { - display: block; - width: 100%; - - &__text-container { - display: none; - padding: 25px 0; - background-color: var(--brand-color-med); - - @media (min-width: 895px) { - display: block; - } - } - - &__title-text { - color: var(--primary-text-color); - font-size: 27px; - font-weight: bold; - line-height: 32px; - overflow: hidden; - padding-left: 20px; - text-overflow: ellipsis; - white-space: nowrap; - max-width: 1200px; - margin: 0 auto; - } - - &__type-filters-tabs { - display: flex; - width: 100%; - max-width: 1200px; - margin: 0 auto; - - @media screen and (max-width: 895px) { - max-width: 580px; - } - } - - @media (min-width: 895px) and (max-width: 1190px) { - &__title-text, - &__type-filters-tabs { - max-width: 900px; - } - } -} - -.timeline-queue-header { - display: block; - width: 100%; - max-height: 46px; - position: relative; - border-bottom: 1px solid; - border-top: 1px solid; - border-color: var(--brand-color-faint); - transition: max-height 150ms ease; - overflow: hidden; - opacity: 1; - - &.hidden { - max-height: 0; - opacity: 0; - } - - &__btn { - display: block; - width: 100%; - height: 100%; - text-align: center; - line-height: 46px; - font-size: 14px; - cursor: pointer; - color: var(--primary-text-color-faint); - - span { - height: 46px; - } - } -} - -.badge { - background-color: var(--brand-color); - color: #fff; - font-size: 12px; - font-weight: normal; - text-transform: uppercase; - padding: 2px 6px; - border-radius: 2px; - margin: 0 5px 5px 0; - - &--pro { - background-color: #8a2be2; - color: #fff; - } - - &--investor { - background-color: #ffd700; - color: #000; - } - - &--donor { - background-color: #90ee90; - color: #000; - } - - &--admin { - background-color: #000; - color: #fff; - } - - &--moderator { - background-color: #048ba8; - color: #fff; - } -} diff --git a/app/styles/components/account-header.scss b/app/styles/components/account-header.scss index 06b08a8aa..a6fcb7d82 100644 --- a/app/styles/components/account-header.scss +++ b/app/styles/components/account-header.scss @@ -170,3 +170,36 @@ } } } // end .account__header + +.account-timeline { + &__header { + display: block; + width: 100%; + } +} + +.account__header__content { + color: var(--primary-text-color-faint); + font-size: 14px; + font-weight: 400; + overflow: hidden; + word-break: normal; + word-wrap: break-word; + + p { + margin-bottom: 20px; + + &:last-child { + margin-bottom: 0; + } + } + + a { + color: inherit; + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } +} diff --git a/app/styles/components/badge.scss b/app/styles/components/badge.scss new file mode 100644 index 000000000..e700875e0 --- /dev/null +++ b/app/styles/components/badge.scss @@ -0,0 +1,35 @@ +.badge { + background-color: var(--brand-color); + color: #fff; + font-size: 12px; + font-weight: normal; + text-transform: uppercase; + padding: 2px 6px; + border-radius: 2px; + margin: 0 5px 5px 0; + + &--pro { + background-color: #8a2be2; + color: #fff; + } + + &--investor { + background-color: #ffd700; + color: #000; + } + + &--donor { + background-color: #90ee90; + color: #000; + } + + &--admin { + background-color: #000; + color: #fff; + } + + &--moderator { + background-color: #048ba8; + color: #fff; + } +} diff --git a/app/styles/components/columns.scss b/app/styles/components/columns.scss new file mode 100644 index 000000000..df27b3921 --- /dev/null +++ b/app/styles/components/columns.scss @@ -0,0 +1,662 @@ +.column__wrapper { + display: flex; + flex: 1 1 auto; + position: relative; +} + +.columns-area { + display: flex; + flex: 1 1 auto; + flex-direction: row; + justify-content: flex-start; + position: relative; + + &__panels { + display: flex; + justify-content: center; + width: 100%; + height: 100%; + + &__pane { + height: 100%; + pointer-events: none; + display: flex; + justify-content: flex-end; + padding-top: 15px; + + &--start { + justify-content: flex-start; + } + + &__inner { + width: 265px; + pointer-events: auto; + height: 100%; + } + } + + &__main { + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 100%; + max-width: 600px; + padding: 0 20px; + @media screen and (max-width: 375px) { + padding: 0 10px; + } + @media screen and (min-width: 895px) { + margin: 0 20px; + padding: 0; + } + } + } +} + +.column { + width: 350px; + position: relative; + box-sizing: border-box; + display: flex; + flex-direction: column; +} + +@media screen and (min-width: 631px) { + .columns-area { + padding: 0; + } + + .column, + .drawer { + flex: 0 0 auto; + padding: 10px; + padding-left: 5px; + padding-right: 5px; + + &:first-child { + padding-left: 10px; + } + + &:last-child { + padding-right: 10px; + } + } + + .columns-area > div { + .column, + .drawer { + padding-left: 5px; + padding-right: 5px; + } + } +} + +.columns-area--mobile { + display: block; + flex-direction: column; + width: 100%; + margin: 0 auto; + padding: 15px 0; + + .column, + .drawer { + width: 100%; + height: 100%; + padding: 0; + } + + .autosuggest-textarea__textarea {font-size: 16px;} + + .search__input { + line-height: 18px; + font-size: 16px; + padding: 15px; + padding-right: 30px; + } + .search__icon .fa {top: 15px;} + @media screen and (min-width: 630px) { + .detailed-status { + padding: 15px; + + .media-gallery, + .video-player { + margin-top: 15px; + } + } + .account__header__bar {padding: 5px 10px;} + + .navigation-bar, + .compose-form { + padding: 15px; + } + .compose-form .compose-form__publish .compose-form__publish-button-wrapper {padding-top: 15px;} + + .status { + padding: 15px 15px 15px (48px + 15px * 2); + min-height: 48px + 2px; + + &__avatar { + left: 15px; + top: 17px; + } + + &__content { + padding-top: 5px; + } + + &__prepend { + margin-left: 48px + 15px * 2; + padding-top: 15px; + } + + &__prepend-icon-wrapper { + left: -32px; + } + + .media-gallery, + .video-player { + margin-top: 10px; + } + } + + .account { + padding: 15px 10px; + } + + .notification { + &__message { + margin-left: 48px + 15px * 2; + padding-top: 15px; + } + + &__favourite-icon-wrapper { + left: -32px; + } + + .status { + padding-top: 8px; + } + + .account { + padding-top: 8px; + } + + .account__avatar-wrapper { + margin-left: 17px; + margin-right: 15px; + } + } + } +} + +// This controls where the left column breaks. +@media screen and (max-width: 600px + (285px * 1) + (10px * 1)) { + .columns-area__panels__pane--left { + display: none; + } +} + +@media screen and (max-width: 600px + (285px * 2) + (10px * 2)) { + .columns-area__panels__pane--right { + display: none; + } +} + +.column-back-button { + background: var(--brand-color-med); + color: var(--highlight-text-color); + cursor: pointer; + flex: 0 0 auto; + font-size: 16px; + line-height: inherit; + border: 0; + text-align: unset; + padding: 15px; + margin: 0; + z-index: 3; + outline: 0; + + &:hover { + text-decoration: underline; + } +} + +.column-header__back-button { + background: var(--brand-color-faint); + border: 0; + font-family: inherit; + color: var(--highlight-text-color); + cursor: pointer; + white-space: nowrap; + font-size: 16px; + padding: 0 5px 0 0; + z-index: 3; + + &:hover { + text-decoration: underline; + } + + &:last-child { + padding: 0 15px 0 0; + } +} + +.column-back-button__icon { + display: inline-block; + margin-right: 5px; +} + +.column-back-button--slim { + position: relative; +} + +.column-back-button--slim-button { + cursor: pointer; + flex: 0 0 auto; + font-size: 16px; + padding: 15px; + position: absolute; + right: 0; + top: -48px; +} + +.column-link { + background: var(--brand-color-med); + color: var(--primary-text-color); + display: block; + font-size: 16px; + padding: 15px; + text-decoration: none; + + &:hover, + &:focus, + &:active { + background: var(--brand-color-faint); + } + + &:focus { + outline: 0; + } + + &--transparent { + background: transparent; + color: var(--background-color); + + &:hover, + &:focus, + &:active { + background: transparent; + color: var(--primary-text-color); + } + + &.active { + color: var(--brand-color); + } + } +} + +.column-link__icon { + display: inline-block; + margin-right: 5px; +} + +.column-link__badge { + display: inline-block; + border-radius: 4px; + font-size: 12px; + line-height: 19px; + font-weight: 500; + background: var(--brand-color-med); + padding: 4px 8px; + margin: -6px 10px; +} + +.column-subheading { + background: var(--brand-color-med); + color: var(--primary-text-color-faint); + padding: 8px 20px; + font-size: 12px; + font-weight: 500; + text-transform: uppercase; + cursor: default; +} + +.columns-area--mobile .column { + @include standard-panel; +} + +.column-header__wrapper { + position: relative; + flex: 0 0 auto; + overflow: hidden; + + &.active { + &::before { + display: block; + content: ""; + position: absolute; + top: 35px; + left: 0; + right: 0; + margin: 0 auto; + width: 60%; + pointer-events: none; + height: 28px; + z-index: 1; + background: radial-gradient(ellipse, rgba(var(--brand-color), 0.23) 0%, rgba(var(--brand-color), 0) 60%); + } + } +} + +.column-header { + display: flex; + font-size: 16px; + flex: 0 0 auto; + cursor: pointer; + position: relative; + z-index: 2; + outline: 0; + overflow-x: auto; + + & > button, + & > .btn { + margin: 0; + border: 0; + padding: 15px; + color: inherit; + background: transparent; + font: inherit; + text-align: left; + text-decoration: none; + white-space: nowrap; + + &--sub { + font-size: 14px; + padding: 6px 10px; + } + + &.grouped { + margin: 6px; + color: var(--primary-text-color-faint); + } + + &.active { + color: var(--primary-text-color); + border-radius: 10px; + background-color: var(--brand-color-faint); + } + + @media screen and (max-width: $nav-breakpoint-2) { + padding: 8px; + font-size: 14px; + + &.grouped { + margin: 6px 2px 6px 6px; + } + + &.active { + border-radius: 5px; + } + } + } + + & > .column-header__back-button { + color: var(--highlight-text-color); + } + + &.active { + box-shadow: 0 1px 0 rgba(var(--highlight-text-color), 0.3); + + .column-header__icon { + color: var(--highlight-text-color); + text-shadow: 0 0 10px rgba(var(--highlight-text-color), 0.4); + } + } + + &:focus, + &:active { + outline: 0; + } +} + +.column-header__buttons { + height: 48px; + display: flex; + margin-left: auto; +} + +.column-header__links .text-btn { + margin-right: 10px; +} + +.column-header__button { + cursor: pointer; + border: 0; + padding: 0 15px; + font-size: 16px; + color: var(--primary-text-color-faint); + background: transparent; + + &:hover { + color: rgba(var(--primary-text-color-rgb), 0.8); + } + + &.active { + color: var(--primary-text-color); + background: var(--brand-color-med); + + &:hover { + color: var(--primary-text-color); + background: var(--brand-color-med); + } + } +} + +.column-header__collapsible { + max-height: 70vh; + overflow: hidden; + overflow-y: auto; + color: var(--primary-text-color-faint); + transition: max-height 150ms ease-in-out, opacity 300ms linear; + opacity: 1; + + &.collapsed { + max-height: 0; + opacity: 0.5; + } + + &.animating { + overflow-y: hidden; + } + + hr { + height: 0; + background: transparent; + border: 0; + border-top: 1px solid var(--brand-color-med); + margin: 10px 0; + } +} + +.column-header__collapsible-inner { + background: var(--background-color); + padding: 15px; +} + +.column-header__setting-btn { + &--link { + text-decoration: none; + + .fa { + margin-left: 10px; + } + } + + &:hover { + color: var(--primary-text-color-faint); + text-decoration: underline; + } +} + +.column-header__setting-arrows { + float: right; + + .column-header__setting-btn { + padding: 0 10px; + + &:last-child { + padding-right: 0; + } + } +} + +.column-header__expansion { + overflow-x: scroll; + overflow-y: hidden; + white-space: nowrap; +} + +.column-header__icon { + display: inline-block; + margin-right: 5px; +} + +.column-settings__outer { + background: var(--brand-color-med); + padding: 15px; +} + +.column-settings__section { + color: var(--primary-text-color-faint); + cursor: default; + display: block; + font-weight: 500; + margin-bottom: 10px; +} + +.column-settings__hashtags { + .column-settings__row { + margin-bottom: 15px; + } + + .column-select { + &__control { + @include search-input; + } + + &__placeholder { + color: var(--primary-text-color); + padding-left: 2px; + font-size: 12px; + } + + &__value-container { + padding-left: 6px; + } + + &__multi-value { + background: var(--brand-color-med); + + &__remove { + cursor: pointer; + + &:hover, + &:active, + &:focus { + background: var(--brand-color-med); + color: var(--primary-text-color); + } + } + } + + &__multi-value__label, + &__input { + color: var(--primary-text-color-faint); + } + + &__clear-indicator, + &__dropdown-indicator { + cursor: pointer; + transition: none; + color: var(--primary-text-color); + + &:hover, + &:active, + &:focus { + color: var(--primary-text-color); + } + } + + &__indicator-separator { + background-color: var(--brand-color-med); + } + + &__menu { + @include search-popout; + padding: 0; + background: var(--background-color); + } + + &__menu-list { + padding: 6px; + } + + &__option { + color: var(--primary-text-color); + border-radius: 4px; + font-size: 14px; + + &--is-focused, + &--is-selected { + background: var(--background-color); + } + } + } +} + +.column-settings__row { + .text-btn { + margin-bottom: 15px; + } +} + +.empty-column-indicator, +.error-column { + color: var(--primary-text-color); + background: var(--brand-color-med); + text-align: center; + padding: 40px; + font-size: 15px; + font-weight: 400; + cursor: default; + display: flex; + flex: 1 1 auto; + align-items: center; + justify-content: center; + min-height: 160px; + + @supports(display: grid) { // hack to fix Chrome <57 + contain: strict; + } + + & > span { + max-width: 400px; + } + + a { + color: var(--highlight-text-color); + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } +} + +.error-column { + flex-direction: column; +} + +.column-link--transparent .icon-with-badge__badge { + border-color: var(--background-color); +} diff --git a/app/styles/components/compose-form.scss b/app/styles/components/compose-form.scss index 95dee51e7..6e0c54174 100644 --- a/app/styles/components/compose-form.scss +++ b/app/styles/components/compose-form.scss @@ -339,3 +339,230 @@ } } } // end .compose-form + +.upload-area { + align-items: center; + background: rgba($base-overlay-background, 0.8); + display: flex; + height: 100%; + justify-content: center; + left: 0; + opacity: 0; + position: absolute; + top: 0; + visibility: hidden; + width: 100%; + z-index: 2000; + + * { + pointer-events: none; + } +} + +.upload-area__drop { + width: 320px; + height: 160px; + display: flex; + box-sizing: border-box; + position: relative; + padding: 8px; +} + +.upload-area__background { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + border-radius: 4px; + background: var(--brand-color-med); + box-shadow: 0 0 5px rgba($base-shadow-color, 0.2); +} + +.upload-area__content { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + color: var(--primary-text-color-faint); + font-size: 18px; + font-weight: 500; + border: 2px dashed var(--brand-color-med); + border-radius: 4px; +} + +.upload-progress { + padding: 10px; + color: var(--highlight-text-color); + overflow: hidden; + display: flex; + + .fa { + font-size: 34px; + margin-right: 10px; + } + + span { + font-size: 12px; + text-transform: uppercase; + font-weight: 500; + display: block; + } +} + +.upload-progess__message { + flex: 1 1 auto; +} + +.upload-progress__backdrop { + width: 100%; + height: 6px; + border-radius: 6px; + background: var(--brand-color-med); + position: relative; + margin-top: 5px; +} + +.upload-progress__tracker { + position: absolute; + left: 0; + top: 0; + height: 6px; + background: var(--brand-color); + border-radius: 6px; +} + +.privacy-dropdown__dropdown { + font-size: 14px; + position: absolute; + background: var(--foreground-color); + box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); + border-radius: 4px; + margin-left: 40px; + overflow: hidden; + z-index: 10000; + + &.top { + transform-origin: 50% 100%; + } + + &.bottom { + transform-origin: 50% 0; + } +} + +.privacy-dropdown__option { + color: var(--primary-text-color); + padding: 10px; + cursor: pointer; + display: flex; + + &:hover, + &.active { + background: var(--brand-color-med); + color: var(--primary-text-color); + outline: 0; + + .privacy-dropdown__option__content { + color: var(--primary-text-color); + + strong { + color: var(--primary-text-color); + } + } + } + + &.active:hover { + background: rgba(var(--brand-color-rgb), 0.5); + } +} + +.privacy-dropdown__option__icon { + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; +} + +.privacy-dropdown__option__content { + flex: 1 1 auto; + color: var(--highlight-text-color); + + strong { + font-weight: 500; + display: block; + color: var(--primary-text-color); + + @each $lang in $cjk-langs { + &:lang(#{$lang}) { + font-weight: 700; + } + } + } +} + +.privacy-dropdown.active { + .privacy-dropdown__value { + background: var(--foreground-color); + border-radius: 4px 4px 0 0; + box-shadow: 0 -4px 4px rgba($base-shadow-color, 0.1); + + .icon-button { + transition: none; + } + + &.active { + background: var(--brand-color); + + .icon-button { + color: var(--primary-text-color); + } + } + } + + &.top .privacy-dropdown__value { + border-radius: 0 0 4px 4px; + } + + .privacy-dropdown__dropdown { + display: block; + box-shadow: 2px 4px 6px rgba($base-shadow-color, 0.1); + } +} + +.focal-point { + position: relative; + cursor: pointer; + overflow: hidden; + + &.dragging { + cursor: move; + } + + img { + max-width: 80vw; + max-height: 80vh; + width: auto; + height: auto; + margin: auto; + } + + &__reticle { + position: absolute; + width: 100px; + height: 100px; + transform: translate(-50%, -50%); + background: url('../images/reticle.png') no-repeat 0 0; + border-radius: 50%; + box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35); + } + + &__overlay { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + } +} diff --git a/app/styles/components/detailed-status.scss b/app/styles/components/detailed-status.scss index 807c1638a..99e378b94 100644 --- a/app/styles/components/detailed-status.scss +++ b/app/styles/components/detailed-status.scss @@ -92,3 +92,38 @@ .detailed-status__wrapper { position: relative; } + +.detailed-status__application, +.detailed-status__datetime { + color: inherit; +} + +.detailed-status__display-name { + color: var(--primary-text-color-faint); + display: flex; + line-height: 24px; + margin-bottom: 15px; + overflow: hidden; + + strong, + span { + display: inline-block; + text-overflow: ellipsis; + overflow: hidden; + } + + strong { + font-size: 16px; + color: var(--primary-text-color); + } + + .display-name__account { + display: block; + margin-top: -10px; + } +} + +.detailed-status__display-avatar { + float: left; + margin-right: 10px; +} diff --git a/app/styles/components/display-name.scss b/app/styles/components/display-name.scss new file mode 100644 index 000000000..2337a3239 --- /dev/null +++ b/app/styles/components/display-name.scss @@ -0,0 +1,61 @@ +.status__display-name, +.status__relative-time, +.detailed-status__display-name, +.detailed-status__datetime, +.detailed-status__application, +.account__display-name { + text-decoration: none; +} + +.status__display-name, +.account__display-name { + strong { + color: var(--primary-text-color); + } +} + +.muted { + .emojione { + opacity: 0.5; + } +} + +.status__display-name, +.reply-indicator__display-name, +.detailed-status__display-name, +a.account__display-name { + &:hover strong { + text-decoration: underline; + } +} + +.account__display-name strong { + display: block; + overflow: hidden; + text-overflow: ellipsis; +} + +.display-name { + display: block; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.display-name__html { + font-weight: 600; + padding-right: 4px; +} + +.display-name__account { + font-size: 14px; +} + +// Hide "verified" emoji to avoid confusion +.display-name, +.notification__display-name { + .emojione[alt*="verified"] { + display: none; + } +} diff --git a/app/styles/components/drawer.scss b/app/styles/components/drawer.scss new file mode 100644 index 000000000..5b107b85e --- /dev/null +++ b/app/styles/components/drawer.scss @@ -0,0 +1,81 @@ +.drawer { + width: 300px; + box-sizing: border-box; + display: flex; + flex-direction: column; + overflow-y: hidden; +} + +.drawer__tab { + display: block; + flex: 1 1 auto; + padding: 15px 5px 13px; + color: var(--primary-text-color-faint); + text-decoration: none; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; +} + +.column, +.drawer { + flex: 1 1 100%; + overflow: hidden; +} + +.drawer__pager { + box-sizing: border-box; + padding: 0; + flex-grow: 1; + position: relative; + overflow: hidden; + display: flex; +} + +.drawer__inner { + top: 0; + left: 0; + background: var(--foreground-color); + box-sizing: border-box; + padding: 0; + display: flex; + flex-direction: column; + overflow: hidden; + overflow-y: auto; + width: 100%; + height: 100%; +} + +.pseudo-drawer { + background: var(--background-color); + font-size: 13px; + text-align: left; +} + +.drawer__header { + flex: 0 0 auto; + font-size: 16px; + background: var(--brand-color-med); + margin-bottom: 10px; + display: flex; + flex-direction: row; + + a { + transition: background 100ms ease-in; + + &:hover { + background: var(--background-color); + transition: background 200ms ease-out; + } + } +} + +.drawer__backdrop { + cursor: pointer; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba($base-overlay-background, 0.5); +} diff --git a/app/styles/components/error-boundary.scss b/app/styles/components/error-boundary.scss new file mode 100644 index 000000000..bedd0daf5 --- /dev/null +++ b/app/styles/components/error-boundary.scss @@ -0,0 +1,18 @@ +.error-boundary { + > div { + margin: auto; + + span { + display: block; + text-align: center; + color: var(--primary-text-color-faint); + } + + a { + display: block; + margin: 15px auto; + text-align: center; + color: var(--brand-color); + } + } +} diff --git a/app/styles/components/getting-started.scss b/app/styles/components/getting-started.scss new file mode 100644 index 000000000..a99a3c2d3 --- /dev/null +++ b/app/styles/components/getting-started.scss @@ -0,0 +1,77 @@ +.getting-started__wrapper, +.getting-started, +.flex-spacer { + background: var(--brand-color-med); +} + +.getting-started__wrapper { + flex: 0 0 auto; +} + +.flex-spacer { + flex: 1 1 auto; +} + +.getting-started { + overflow: auto; + + &__footer { + flex: 0 0 auto; + padding: 10px; + padding-top: 20px; + opacity: 0.7; + + ul { + margin-bottom: 10px; + } + + ul li { + display: inline; + } + + p { + color: var(--primary-text-color); + font-size: 13px; + margin-bottom: 20px; + + a { + color: var(--primary-text-color-faint); + text-decoration: underline; + opacity: 0.8; + } + } + + a { + text-decoration: none; + color: var(--primary-text-color-faint); + opacity: 0.8; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } + } + } + + &__trends { + background: var(--brand-color-med); + flex: 0 1 auto; + + @media screen and (max-height: 810px) { + .trends__item:nth-child(3) { + display: none; + } + } + + @media screen and (max-height: 720px) { + .trends__item:nth-child(2) { + display: none; + } + } + + @media screen and (max-height: 670px) { + display: none; + } + } +} diff --git a/app/styles/components/list-forms.scss b/app/styles/components/list-forms.scss new file mode 100644 index 000000000..5b70d99b0 --- /dev/null +++ b/app/styles/components/list-forms.scss @@ -0,0 +1,119 @@ +.list-editor { + flex-direction: column; + width: 100%; + overflow: hidden; + height: 100%; + overflow-y: scroll; + + @media screen and (max-width: 420px) { + width: 90%; + } + + h4 { + padding: 15px 0; + background: var(--background-color); + font-weight: 500; + font-size: 16px; + text-align: center; + border-radius: 8px 8px 0 0; + } + + .drawer__inner { + border-radius: 0 0 8px 8px; + + &.backdrop { + width: calc(100% - 60px); + box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); + border-radius: 0 0 0 8px; + } + } + + &__accounts { + background: var(--background-color); + overflow-y: auto; + max-height: 200px; + } + + .account__display-name { + &:hover strong { + text-decoration: none; + } + } + + .account__avatar { + cursor: default; + } + + .search { + display: flex; + flex-direction: row; + margin: 10px 0; + + > label { + flex: 1 1; + } + + > .search__icon .fa { + right: 102px !important; + } + + > .button { + width: 80px; + margin-left: 10px; + } + } +} + +.list-adder { + flex-direction: column; + width: 100%; + overflow: hidden; + height: 100%; + overflow-y: scroll; + + @media screen and (max-width: 420px) { + width: 90%; + } + + &__account { + background: var(--background-color); + border-radius: 4px; + } + + &__lists { + background: var(--background-color); + } + + .list { + padding: 4px; + border-bottom: 1px solid var(--brand-color-med); + } + + .list__wrapper { + display: flex; + + .account__relationship { + padding: 8px 5px 0; + } + } + + .list__display-name { + flex: 1 1 auto; + overflow: hidden; + text-decoration: none; + font-size: 16px; + padding: 10px; + } +} + +.new-list-form, +.edit-list-form { + &__btn { + margin-left: 6px; + width: 112px; + } + + &__input { + height: 36px; + } +} diff --git a/app/styles/components/media-gallery.scss b/app/styles/components/media-gallery.scss new file mode 100644 index 000000000..e94285fc3 --- /dev/null +++ b/app/styles/components/media-gallery.scss @@ -0,0 +1,145 @@ +.media-gallery { + box-sizing: border-box; + margin-top: 8px; + overflow: hidden; + border-radius: 4px; + position: relative; + width: 100%; + background-color: var(--brand-color-faint); +} + +.media-gallery__item { + border: 0; + box-sizing: border-box; + display: block; + float: left; + position: relative; + border-radius: 4px; + overflow: hidden; +} + +.media-gallery__item-thumbnail { + cursor: zoom-in; + display: block; + text-decoration: none; + color: var(--primary-text-color-faint); + line-height: 0; + position: relative; + z-index: 1; + + &, + img, + canvas { + height: 100%; + width: 100%; + } + + img, + canvas { + object-fit: cover; + } + + &--play-on-hover { + &::before { + content: 'GIF'; + position: absolute; + color: var(--primary-text-color); + background: var(--foreground-color); + bottom: 6px; + left: 6px; + padding: 2px 6px; + border-radius: 2px; + font-size: 11px; + font-weight: 600; + pointer-events: none; + opacity: 0.9; + transition: opacity 0.1s ease; + line-height: 18px; + } + + img { + position: absolute; + } + + img, + &:hover::before { + visibility: hidden; + } + + &:hover img { + visibility: visible; + } + } +} + +.media-gallery__preview { + width: 100%; + height: 100%; + object-fit: cover; + position: absolute; + top: 0; + left: 0; + z-index: 0; + background: var(--background-color); + + &--hidden { + display: none; + } +} + +.media-gallery__gifv { + height: 100%; + overflow: hidden; + position: relative; + width: 100%; +} + +.media-gallery__item-gifv-thumbnail { + cursor: zoom-in; + height: 100%; + object-fit: cover; + position: relative; + width: 100%; + z-index: 1; + transform: none; + top: 0; +} + +.media-gallery__item-thumbnail-label { + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); + overflow: hidden; + position: absolute; +} + +.media-gallery__gifv__label { + display: block; + position: absolute; + color: var(--primary-text-color); + background: rgba($base-overlay-background, 0.5); + bottom: 6px; + left: 6px; + padding: 2px 6px; + border-radius: 2px; + font-size: 11px; + font-weight: 600; + z-index: 1; + pointer-events: none; + opacity: 0.9; + transition: opacity 0.1s ease; + line-height: 18px; +} + +.media-gallery__gifv { + &.autoplay { + .media-gallery__gifv__label { + display: none; + } + } + + &:hover { + .media-gallery__gifv__label { + opacity: 1; + } + } +} diff --git a/app/styles/components/media-spoiler.scss b/app/styles/components/media-spoiler.scss new file mode 100644 index 000000000..61f19e0e6 --- /dev/null +++ b/app/styles/components/media-spoiler.scss @@ -0,0 +1,28 @@ +.media-spoiler { + background: var(--background-color); + color: var(--primary-text-color-faint); + border: 0; + padding: 0; + width: 100%; + height: 100%; + border-radius: 4px; + appearance: none; + + &:hover, + &:active, + &:focus { + padding: 0; + color: var(--primary-text-color); + } +} + +.media-spoiler__warning { + display: block; + font-size: 14px; +} + +.media-spoiler__trigger { + display: block; + font-size: 11px; + font-weight: 700; +} diff --git a/app/styles/components/modal.scss b/app/styles/components/modal.scss index f515ef9d9..939f79ed5 100644 --- a/app/styles/components/modal.scss +++ b/app/styles/components/modal.scss @@ -619,3 +619,230 @@ margin-top: 0; } } + +.compose-modal { + padding: 8px 0 0; + overflow: hidden; + background-color: var(--background-color); + border-radius: 6px; + flex-direction: column; + width: 600px; + margin: 10px 0; + + &__header { + display: block; + position: relative; + padding: 5px 0; + + &__title { + display: block; + width: 80%; + margin: 0 auto; + font-size: 18px; + font-weight: bold; + line-height: 24px; + color: var(--primary-text-color); + text-align: center; + } + } + + &__close { + position: absolute; + right: 10px; + top: 5px; + color: #999; + } + + &__content { + display: flex; + flex-direction: row; + flex: 1; + padding: 10px; + overflow-y: hidden; + + &--scroll { + display: block; + overflow-y: auto; + } + + .timeline-compose-block { + background: transparent !important; + width: 100%; + padding: 0; + margin-bottom: 0; + + .compose-form { + max-height: 100%; + max-width: 100%; + display: flex; + flex-direction: column; + padding: 0 !important; + + .compose-form__autosuggest-wrapper .autosuggest-textarea__textarea { + max-height: 160px !important; + } + + .compose-form__autosuggest-wrapper::before { + content: none !important; + } + } + } + } + + @media screen and (max-width: 895px) { + margin: 0; + border-radius: 0; + height: 100vh; + width: 100vw; + } +} + +.unauthorized-modal { + width: 440px !important; + + &__content { + display: flex; + width: 100%; + height: 150px; + justify-content: center; + align-items: center; + flex-direction: column; + } + + .unauthorized-modal-content { + &__text { + display: block; + margin-bottom: 18px; + color: #fff; + font-size: 14px; + } + + &__button { + width: 200px; + } + } + + &__footer { + display: flex; + border-top: 1px solid #666; + padding: 10px; + justify-content: center; + align-items: center; + + > span { + font-size: 14px; + color: var(--primary-text-color-faint); + + a { + color: var(--brand-color) !important; + } + } + } + + @media screen and (max-width: 895px) { + height: 270px !important; + width: 330px !important; + } +} + +.focal-point-modal { + max-width: 80vw; + max-height: 80vh; + position: relative; +} + +.embed-modal { + max-width: 80vw; + max-height: 80vh; + + h4 { + padding: 30px; + font-weight: 500; + font-size: 16px; + text-align: center; + } + + .embed-modal__container { + padding: 10px; + + .hint { + margin-bottom: 15px; + } + + .embed-modal__html { + outline: 0; + box-sizing: border-box; + display: block; + width: 100%; + border: 0; + border-radius: 5px; + padding: 10px; + font-family: var(--font-monospace), monospace; + background: var(--brand-color-med); + color: var(--primary-text-color); + font-size: 14px; + margin: 0; + margin-bottom: 15px; + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &:focus { + background: var(--brand-color-faint); + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } + } + + .embed-modal__iframe { + width: 100%; + max-width: 100%; + overflow: hidden; + border: 0; + + iframe { + width: 100%; + } + } + } +} + +.modal-container--preloader { + background: var(--brand-color-med); +} + +.column-inline-form { + padding: 7px 15px; + padding-right: 5px; + display: flex; + justify-content: flex-start; + align-items: center; + background: var(--brand-color-faint); + + label { + flex: 1 1 auto; + + input { + width: 100%; + margin-bottom: 6px; + + &:focus { + outline: 0; + } + } + } + + .icon-button { + flex: 0 0 auto; + margin: 0 5px; + } +} diff --git a/app/styles/components/navigation-bar.scss b/app/styles/components/navigation-bar.scss new file mode 100644 index 000000000..5fab3883d --- /dev/null +++ b/app/styles/components/navigation-bar.scss @@ -0,0 +1,138 @@ +.navigation-bar { + padding: 10px; + display: flex; + align-items: center; + flex-shrink: 0; + cursor: default; + color: var(--primary-text-color-faint); + + strong { + color: var(--primary-text-color-faint); + } + + a { + color: inherit; + } + + .permalink { + text-decoration: none; + } + + .navigation-bar__actions { + position: relative; + + .icon-button.close { + position: absolute; + pointer-events: none; + transform: scale(0, 1) translate(-100%, 0); + opacity: 0; + } + + .compose__action-bar .icon-button { + pointer-events: auto; + transform: scale(1, 1) translate(0, 0); + opacity: 1; + } + } +} + +.navigation-bar__profile { + flex: 1 1 auto; + margin-left: 8px; + line-height: 20px; + margin-top: -1px; + overflow: hidden; +} + +.navigation-bar__profile-account { + display: block; + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; +} + +.navigation-bar__profile-edit { + color: inherit; + text-decoration: none; +} + +@media screen and (max-width: 630px) and (max-height: 400px) { + $duration: 400ms; + $delay: 100ms; + + .tabs-bar, + .search { + will-change: margin-top; + transition: margin-top $duration $delay; + } + + .navigation-bar { + will-change: padding-bottom; + transition: padding-bottom $duration $delay; + } + + .navigation-bar { + & > a:first-child { + will-change: margin-top, margin-left, margin-right, width; + transition: margin-top $duration $delay, margin-left $duration ($duration + $delay), margin-right $duration ($duration + $delay); + } + + & > .navigation-bar__profile-edit { + will-change: margin-top; + transition: margin-top $duration $delay; + } + + .navigation-bar__actions { + & > .icon-button.close { + will-change: opacity transform; + transition: opacity $duration * 0.5 $delay, + transform $duration $delay; + } + + & > .compose__action-bar .icon-button { + will-change: opacity transform; + transition: opacity $duration * 0.5 $delay + $duration * 0.5, + transform $duration $delay; + } + } + } + + .is-composing { + .tabs-bar, + .search { + margin-top: -50px; + } + + .navigation-bar { + padding-bottom: 0; + + & > a:first-child { + margin: -100px 10px 0 -50px; + } + + .navigation-bar__profile { + padding-top: 2px; + } + + .navigation-bar__profile-edit { + position: absolute; + margin-top: -60px; + } + + .navigation-bar__actions { + .icon-button.close { + pointer-events: auto; + opacity: 1; + transform: scale(1, 1) translate(0, 0); + bottom: 5px; + } + + .compose__action-bar .icon-button { + pointer-events: none; + opacity: 0; + transform: scale(0, 1) translate(100%, 0); + } + } + } + } +} diff --git a/app/styles/components/notification.scss b/app/styles/components/notification.scss new file mode 100644 index 000000000..7cef280da --- /dev/null +++ b/app/styles/components/notification.scss @@ -0,0 +1,53 @@ +.notification-favourite { + .status.status-direct { + background: transparent; + + .icon-button.disabled { + color: rgba(var(--brand-color-rgb), 0.2); + } + } +} + +.notification__message { + margin: 0 10px 0 68px; + padding: 8px 0 0; + cursor: default; + color: var(--primary-text-color-faint); + font-size: 15px; + line-height: 22px; + position: relative; + + .fa { + color: var(--highlight-text-color); + } + + > span { + display: inline; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.notification__favourite-icon-wrapper { + left: -26px; + position: absolute; + + .star-icon { + color: $gold-star; + } +} + +.notification__display-name { + color: inherit; + font-weight: 500; + text-decoration: none; + + &:hover { + color: var(--primary-text-color); + text-decoration: underline; + } +} + +.notification__relative_time { + float: right; +} diff --git a/app/styles/components/profile-info-panel.scss b/app/styles/components/profile-info-panel.scss new file mode 100644 index 000000000..91deaa2e3 --- /dev/null +++ b/app/styles/components/profile-info-panel.scss @@ -0,0 +1,135 @@ +.profile-info-panel { + display: block; + position: relative; + + &__content { + display: flex; + flex-direction: column; + flex: 1 1; + + @media (min-width: 895px) { + padding-top: 60px; + } + } + + .profile-info-panel-content { + display: flex; + + &__badges { + display: flex; + margin: 5px 0; + flex-direction: row; + flex-wrap: wrap; + + &__join-date { + display: block; + margin-top: 5px; + + .fa { + margin-right: 8px; + } + + span { + color: var(--primary-text-color); + font-size: 15px; + line-height: 1.25; + } + } + } + + &__name { + display: block; + + .account-role { + vertical-align: top; + } + + .emojione { + width: 22px; + height: 22px; + } + + // Hide "verified" emoji to avoid confusion + .emojione[alt*="verified"] { + display: none; + } + + h1 { + span:first-of-type { + font-size: 20px !important; + line-height: 1.25; + color: var(--primary-text-color); + font-weight: 600 !important; + max-width: 260px; + } + + small { + display: block; + font-size: 16px; + line-height: 1.5; + color: var(--primary-text-color-faint); + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + + &__bio { + display: block; + flex: 1 1; + color: var(--primary-text-color); + margin: 15px 0; + font-size: 15px; + line-height: 1.25; + + a { + color: var(--highlight-text-color); + } + } + + &__fields { + display: flex; + flex-direction: column; + border-top: 1px solid var(--brand-color-med); + padding: 10px 0; + margin: 5px 0; + + @media screen and (max-width: 895px) { + border-bottom: 1px solid var(--brand-color-med); + } + + a { + color: var(--highlight-text-color); + } + + dl:first-child .verified { + border-radius: 0 4px 0 0; + } + + .verified a { + color: $valid-value-color; + } + + &__item { + display: block; + padding: 2px 0; + margin: 2px 0; + flex: 1 1; + + * { + font-size: 15px; + line-height: 24px; + } + + dt { + min-width: 26px; + } + + dd { + padding-left: 4px; + } + } + } + } +} diff --git a/app/styles/components/promo-panel.scss b/app/styles/components/promo-panel.scss new file mode 100644 index 000000000..8fdceb7ed --- /dev/null +++ b/app/styles/components/promo-panel.scss @@ -0,0 +1,51 @@ +.promo-panel { + margin-top: 10px; + background-color: transparent !important; + overflow: hidden; +} + +.promo-panel-item { + @include standard-panel-shadow; + display: block; + height: 42px; + line-height: 42px; + border-bottom: 1px solid var(--brand-color-med); + background: var(--foreground-color); + + &--highlighted { + background-color: #30ce7d; + border-radius: 10px; + font-weight: 600; + margin-bottom: 10px; + } + + &--top-rounded { + border-top-right-radius: 10px; + border-top-left-radius: 10px; + } + + &:last-of-type { + border-bottom: 0; + } + + &__btn { + display: block; + text-align: left; + color: var(--primary-text-color); + text-decoration: none; + font-size: 15px; + padding: 0 20px; + + &:hover { + color: var(--primary-text-color-faint); + + span { + text-decoration: underline; + } + } + } + + &__icon { + margin-right: 12px; + } +} diff --git a/app/styles/components/react-toggle.scss b/app/styles/components/react-toggle.scss new file mode 100644 index 000000000..2cef9254c --- /dev/null +++ b/app/styles/components/react-toggle.scss @@ -0,0 +1,105 @@ +.react-toggle { + display: inline-block; + position: relative; + cursor: pointer; + background-color: transparent; + border: 0; + padding: 0; + user-select: none; + -webkit-tap-highlight-color: rgba($base-overlay-background, 0); + -webkit-tap-highlight-color: transparent; +} + +.react-toggle-screenreader-only { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.react-toggle--disabled { + cursor: not-allowed; + opacity: 0.5; + transition: opacity 0.25s; +} + +.react-toggle-track { + width: 50px; + height: 24px; + padding: 0; + border-radius: 30px; + background-color: var(--brand-color-med); + transition: background-color 0.2s ease; +} + +.react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { + background-color: var(--background-color); +} + +.react-toggle--checked .react-toggle-track { + background-color: var(--brand-color); +} + +.react-toggle--checked:hover:not(.react-toggle--disabled) .react-toggle-track { + background-color: var(--brand-color-hicontrast); +} + +.react-toggle-track-check { + position: absolute; + width: 14px; + height: 10px; + top: 0; + bottom: 0; + margin-top: auto; + margin-bottom: auto; + line-height: 0; + left: 8px; + opacity: 0; + transition: opacity 0.25s ease; +} + +.react-toggle--checked .react-toggle-track-check { + opacity: 1; + transition: opacity 0.25s ease; +} + +.react-toggle-track-x { + position: absolute; + width: 10px; + height: 10px; + top: 0; + bottom: 0; + margin-top: auto; + margin-bottom: auto; + line-height: 0; + right: 10px; + opacity: 1; + transition: opacity 0.25s ease; +} + +.react-toggle--checked .react-toggle-track-x { + opacity: 0; +} + +.react-toggle-thumb { + position: absolute; + top: 1px; + left: 1px; + width: 22px; + height: 22px; + border: 1px solid var(--brand-color-med); + border-radius: 50%; + background-color: var(--background-color); + box-sizing: border-box; + transition: all 0.25s ease; + transition-property: border-color, left; +} + +.react-toggle--checked .react-toggle-thumb { + left: 27px; + border-color: var(--brand-color); +} diff --git a/app/styles/components/reply-indicator.scss b/app/styles/components/reply-indicator.scss new file mode 100644 index 000000000..a5b9c4bc9 --- /dev/null +++ b/app/styles/components/reply-indicator.scss @@ -0,0 +1,51 @@ +.reply-indicator { + border-radius: 4px; + margin-bottom: 10px; + background: var(--brand-color-faint); + padding: 10px; + min-height: 23px; + overflow-y: auto; + flex: 0 2 auto; + max-height: 500px; + @media screen and (min-width: 320px) and (max-width: 375px) {max-height: 220px;} + @media screen and (max-width: 320px) {max-height: 130px;} +} + +.reply-indicator__header { + margin-bottom: 5px; + overflow: hidden; +} + +.reply-indicator__cancel { + float: right; + line-height: 24px; +} + +.reply-indicator__display-name { + color: var(--primary-text-color); + display: block; + max-width: 100%; + line-height: 24px; + overflow: hidden; + padding-right: 25px; + text-decoration: none; + + .display-name__account { + color: var(--primary-text-color-faint); + } +} + +.reply-indicator__display-avatar { + float: left; + margin-right: 5px; +} + +.reply-indicator__content { + color: var(--primary-text-color); + font-size: 14px; + user-select: text; + + a { + color: var(--highlight-text-color); + } +} diff --git a/app/styles/components/search.scss b/app/styles/components/search.scss new file mode 100644 index 000000000..69945b302 --- /dev/null +++ b/app/styles/components/search.scss @@ -0,0 +1,162 @@ +@media screen and (min-width: 600px + (285px * 1) + (10px * 1)) { + .search-page .search { + display: none; + } +} + +.search { + position: relative; +} + +.search__input { + @include search-input; + display: block; + padding: 7px 30px 6px 10px; +} + +.search__icon { + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus { + outline: 0 !important; + } + + .fa { + @include font-size(16); + cursor: default; + display: inline-block; + position: absolute; + top: 8px; + right: 8px; + z-index: 2; + width: 18px; + height: 18px; + color: var(--primary-text-color-faint); + opacity: 0; + pointer-events: none; + + &.active { + pointer-events: auto; + opacity: 1; + } + } + .fa-search.active {pointer-events: none;} + + .fa-times-circle { + @include font-size(17); + cursor: pointer; + color: var(--highlight-text-color); + &:hover {color: var(--brand-color);} + } +} + +.search-results__header { + color: var(--primary-text-color); + background: var(--brand-color-med); + padding: 15px; + font-weight: 500; + font-size: 16px; + cursor: default; + + .fa { + display: inline-block; + margin-right: 5px; + } +} + +.search-results__section { + margin-bottom: 5px; + + h5 { + background: var(--brand-color-faint); + border-bottom: 1px solid var(--brand-color-faint); + cursor: default; + display: flex; + padding: 15px; + font-weight: 500; + font-size: 16px; + color: var(--primary-text-color); + + .fa { + display: inline-block; + margin-right: 5px; + } + } + + .account:last-child, + & > div:last-child .status { + border-bottom: 0; + } +} + +.search-results__hashtag { + display: block; + padding: 10px; + color: var(--primary-text-color-faint); + text-decoration: none; + + &:hover, + &:active, + &:focus { + color: var(--primary-text-color); + text-decoration: underline; + } +} + +.search-header { + display: block; + width: 100%; + + &__text-container { + display: none; + padding: 25px 0; + background-color: var(--brand-color-med); + + @media (min-width: 895px) { + display: block; + } + } + + &__title-text { + color: var(--primary-text-color); + font-size: 27px; + font-weight: bold; + line-height: 32px; + overflow: hidden; + padding-left: 20px; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 1200px; + margin: 0 auto; + } + + &__type-filters-tabs { + display: flex; + width: 100%; + max-width: 1200px; + margin: 0 auto; + + @media screen and (max-width: 895px) { + max-width: 580px; + } + } + + @media (min-width: 895px) and (max-width: 1190px) { + &__title-text, + &__type-filters-tabs { + max-width: 900px; + } + } +} + +.search-popout-container { + width: 251px; + @media screen and (max-width: $nav-breakpoint-2) {width: 100%;} +} + +.search-popout { + @include search-popout; +} diff --git a/app/styles/components/setting-toggle.scss b/app/styles/components/setting-toggle.scss new file mode 100644 index 000000000..2c04e5fae --- /dev/null +++ b/app/styles/components/setting-toggle.scss @@ -0,0 +1,12 @@ +.setting-toggle { + display: block; + line-height: 24px; +} + +.setting-toggle__label { + color: var(--primary-text-color-faint); + display: inline-block; + margin-bottom: 14px; + margin-left: 8px; + vertical-align: middle; +} diff --git a/app/styles/components/spoiler-button.scss b/app/styles/components/spoiler-button.scss new file mode 100644 index 000000000..75427e536 --- /dev/null +++ b/app/styles/components/spoiler-button.scss @@ -0,0 +1,46 @@ +.spoiler-button { + top: 0; + left: 0; + width: 100%; + height: 100%; + position: absolute; + z-index: 100; + + &--minified { + display: block; + left: 4px; + top: 4px; + width: auto; + height: auto; + } + + &--hidden { + display: none; + } + + &__overlay { + display: block; + background: transparent; + width: 100%; + height: 100%; + border: 0; + + &__label { + display: inline-block; + background: rgba($base-overlay-background, 0.5); + border-radius: 8px; + padding: 8px 12px; + color: var(--primary-text-color); + font-weight: 500; + font-size: 14px; + } + + &:hover, + &:focus, + &:active { + .spoiler-button__overlay__label { + background: rgba($base-overlay-background, 0.8); + } + } + } +} diff --git a/app/styles/components/status.scss b/app/styles/components/status.scss new file mode 100644 index 000000000..4c42c8c2b --- /dev/null +++ b/app/styles/components/status.scss @@ -0,0 +1,558 @@ +.status__content--with-action { + cursor: pointer; +} + +.status__content.status__content--collapsed { + max-height: 20px * 15; // 15 lines is roughly above 500 characters +} + +.status__content__read-more-button { + display: block; + font-size: 15px; + line-height: 20px; + color: var(--highlight-text-color); + border: 0; + background: transparent; + padding: 0; + padding-top: 8px; + + &:hover, + &:active { + text-decoration: underline; + } +} + +.status__content__spoiler-link { + display: inline-block; + border-radius: 2px; + background: transparent; + border: 0; + color: var(--primary-text-color); + font-weight: 700; + font-size: 11px; + padding: 0 6px; + text-transform: uppercase; + line-height: 20px; + cursor: pointer; + vertical-align: middle; +} + +.status__wrapper--filtered { + color: var(--primary-text-color); + border: 0; + font-size: inherit; + text-align: center; + line-height: inherit; + margin: 0; + padding: 15px; + box-sizing: border-box; + width: 100%; + clear: both; + border-bottom: 1px solid var(--brand-color-med); +} + +.status__prepend-icon-wrapper { + left: -26px; + position: absolute; +} + +.status { + padding: 8px 10px; + padding-left: 68px; + position: relative; + min-height: 54px; + border-bottom: 1px solid var(--brand-color-faint); + cursor: default; + + @supports (-ms-overflow-style: -ms-autohiding-scrollbar) { + // Add margin to avoid Edge auto-hiding scrollbar appearing over content. + // On Edge 16 this is 16px and Edge <=15 it's 12px, so aim for 16px. + padding-right: 26px; // 10px + 16px + } + + @keyframes fade { + 0% { opacity: 0; } + 100% { opacity: 1; } + } + + opacity: 1; + animation: fade 150ms linear; + + .video-player { + margin-top: 8px; + } + + &.status-direct:not(.read) { + background: var(--brand-color-med); + border-bottom-color: var(--brand-color-med); + + .status__content a { + color: var(--brand-color-hicontrast); + } + } + + &.light { + .status__relative-time { + color: var(--primary-text-color-faint); + } + + .status__display-name { + color: var(--primary-text-color-faint); + } + + .display-name { + strong { + color: var(--primary-text-color); + } + + span { + color: var(--primary-text-color-faint); + } + } + + .status__content { + color: var(--primary-text-color); + + a { + color: var(--highlight-text-color); + } + + a.status__content__spoiler-link { + color: var(--primary-text-color); + background: var(--brand-color); + + &:hover { + background: var(--brand-color); + } + } + } + } + + &__meta { + font-size: 14px; + color: var(--primary-text-color-faint); + + a { + color: var(--brand-color); + font-weight: bold; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + } +} + +.status__display-name { + color: var(--primary-text-color-faint); +} + +.status__info .status__display-name { + display: block; + max-width: 100%; + padding-right: 25px; +} + +.status__info { + font-size: 15px; + z-index: 4; +} + +.status-check-box { + border-bottom: 1px solid var(--background-color); + display: flex; + + .status-check-box__status { + margin: 10px 0 10px 10px; + flex: 1; + + .media-gallery { + max-width: 250px; + } + + .status__content { + padding: 0; + white-space: normal; + } + + .video-player { + margin-top: 8px; + max-width: 250px; + } + + .media-gallery__item-thumbnail { + cursor: default; + } + } +} + +.status-check-box-toggle { + align-items: center; + display: flex; + flex: 0 0 auto; + justify-content: center; + padding: 10px; +} + +.status__prepend { + margin-left: 68px; + color: var(--primary-text-color); + padding: 8px 0; + padding-bottom: 2px; + font-size: 14px; + position: relative; + + .status__display-name strong { + color: var(--primary-text-color); + } + + > span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.status__action-bar { + align-items: center; + display: flex; + margin-top: 25px; + z-index: 4; + + &__counter { + display: inline-flex; + margin-right: 22px; + align-items: center; + + .status__action-bar-button { + margin-right: 4px; + } + + &__label { + display: inline-block; + width: 14px; + font-size: 12px; + font-weight: 500; + color: var(--brand-color); + } + } +} + +.status__action-bar-button { + margin-right: 18px; +} + +.status__action-bar-dropdown { + height: 23.15px; + width: 23.15px; +} + +.status__avatar { + height: 48px; + left: 10px; + position: absolute; + top: 10px; + width: 48px; +} + +.status__expand { + width: 68px; + position: absolute; + left: 0; + top: 0; + height: 100%; + cursor: pointer; +} + +.status__content, +.reply-indicator__content { + position: relative; + font-size: 15px; + line-height: 20px; + word-wrap: break-word; + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + padding-top: 2px; + color: var(--primary-text-color); + + &:focus { + outline: 0; + } + + &.status__content--with-spoiler { + white-space: normal; + + .status__content__text { + white-space: pre-wrap; + } + } + + .emojione { + width: 20px; + height: 20px; + margin: -3px 0 0; + } + + p { + margin-bottom: 20px; + white-space: pre-wrap; + + &:last-child { + margin-bottom: 2px; + } + } + + a { + color: var(--highlight-text-color); + text-decoration: none; + + &:hover { + text-decoration: underline; + + .fa { + color: var(--primary-text-color); + } + } + + &.mention { + &:hover { + text-decoration: none; + + span { + text-decoration: underline; + } + } + } + + .fa { + color: var(--primary-text-color); + } + } + + .status__content__spoiler-link { + background: var(--brand-color-med); + transition: 0.2s; + + &:hover { + background: rgba(var(--brand-color-rgb), 0.5); + text-decoration: none; + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + } + + .status__content__text { + display: none; + + &.status__content__text--visible { + display: block; + } + } +} + +.focusable { + &:focus { + outline: 0; + background: var(--brand-color-faint); + + .status.status-direct { + background: var(--brand-color-med); + + &.muted { + background: transparent; + } + } + + .detailed-status, + .detailed-status__action-bar { + background: var(--brand-color-med); + } + } +} + +.status-card { + display: flex; + font-size: 14px; + border: 1px solid var(--brand-color-med); + border-radius: 4px; + color: var(--primary-text-color); + margin-top: 14px; + text-decoration: none; + overflow: hidden; + + &__actions { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + display: flex; + justify-content: center; + align-items: center; + + & > div { + background: rgba($base-shadow-color, 0.6); + border-radius: 8px; + padding: 12px 9px; + flex: 0 0 auto; + display: flex; + justify-content: center; + align-items: center; + } + + button, + a { + display: inline; + color: var(--primary-text-color-faint); + background: transparent; + border: 0; + padding: 0 8px; + text-decoration: none; + font-size: 18px; + line-height: 18px; + + &:hover, + &:active, + &:focus { + color: var(--primary-text-color); + } + } + + a { + font-size: 19px; + position: relative; + bottom: -1px; + } + } +} + +a.status-card { + cursor: pointer; + + &:hover { + background: var(--brand-color-med); + } +} + +.status-card-photo { + cursor: zoom-in; + display: block; + text-decoration: none; + width: 100%; + height: auto; + margin: 0; +} + +.status-card-video { + iframe { + width: 100%; + height: 100%; + } +} + +.status-card__title { + display: block; + font-weight: 500; + margin-bottom: 5px; + color: var(--primary-text-color-faint); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-decoration: none; +} + +.status-card__content { + flex: 1 1 auto; + overflow: hidden; + padding: 14px 14px 14px 8px; +} + +.status-card__description { + color: var(--primary-text-color-faint); +} + +.status-card__host { + display: block; + margin-top: 5px; + font-size: 13px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.status-card__image { + flex: 0 0 100px; + background: var(--brand-color-med); + position: relative; + + & > .fa { + font-size: 21px; + position: absolute; + transform-origin: 50% 50%; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} + +.status-card.horizontal { + display: block; + + .status-card__image { + width: 100%; + } + + .status-card__image-image { + border-radius: 4px 4px 0 0; + } + + .status-card__title { + white-space: inherit; + } +} + +.status-card.compact { + border-color: var(--brand-color-faint); + + &.interactive { + border: 0; + } + + .status-card__content { + padding: 8px; + padding-top: 10px; + } + + .status-card__title { + white-space: nowrap; + } + + .status-card__image { + flex: 0 0 60px; + } +} + +a.status-card.compact:hover { + background-color: var(--brand-color-faint); +} + +.status-card__image-image { + border-radius: 4px 0 0 4px; + display: block; + margin: 0; + width: 100%; + height: 100%; + object-fit: cover; + background-size: cover; + background-position: center center; +} diff --git a/app/styles/components/timeline-queue-header.scss b/app/styles/components/timeline-queue-header.scss new file mode 100644 index 000000000..de71d4529 --- /dev/null +++ b/app/styles/components/timeline-queue-header.scss @@ -0,0 +1,32 @@ +.timeline-queue-header { + display: block; + width: 100%; + max-height: 46px; + position: relative; + border-bottom: 1px solid; + border-top: 1px solid; + border-color: var(--brand-color-faint); + transition: max-height 150ms ease; + overflow: hidden; + opacity: 1; + + &.hidden { + max-height: 0; + opacity: 0; + } + + &__btn { + display: block; + width: 100%; + height: 100%; + text-align: center; + line-height: 46px; + font-size: 14px; + cursor: pointer; + color: var(--primary-text-color); + + span { + height: 46px; + } + } +} diff --git a/app/styles/components/trends.scss b/app/styles/components/trends.scss new file mode 100644 index 000000000..88abcf5bc --- /dev/null +++ b/app/styles/components/trends.scss @@ -0,0 +1,78 @@ +.trends { + &__header { + color: var(--primary-text-color); + background: var(--brand-color-faint); + border-bottom: 1px solid var(--brand-color-med); + font-weight: 500; + padding: 15px; + font-size: 16px; + cursor: default; + + .fa { + display: inline-block; + margin-right: 5px; + } + } + + &__item { + display: flex; + align-items: center; + padding: 15px; + border-bottom: 1px solid var(--brand-color-med); + + &:last-child { + border-bottom: 0; + } + + &__name { + flex: 1 1 auto; + color: var(--primary-text-color); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 13px; + + strong { + font-weight: bold; + } + + a { + color: var(--primary-text-color-faint); + text-decoration: none; + font-size: 14px; + font-weight: 500; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:hover, + &:focus, + &:active { + span { + text-decoration: underline; + } + } + } + } + + &__current { + flex: 0 0 auto; + width: 100px; + font-size: 24px; + line-height: 36px; + font-weight: 500; + text-align: center; + color: var(--primary-text-color-faint); + } + + &__sparkline { + flex: 0 0 auto; + width: 50px; + + path { + stroke: var(--highlight-text-color) !important; + } + } + } +} diff --git a/app/styles/components/video-player.scss b/app/styles/components/video-player.scss new file mode 100644 index 000000000..eb2d7090e --- /dev/null +++ b/app/styles/components/video-player.scss @@ -0,0 +1,388 @@ +.video-error-cover { + align-items: center; + background: var(--background-color); + color: var(--primary-text-color); + cursor: pointer; + display: flex; + flex-direction: column; + height: 100%; + justify-content: center; + margin-top: 8px; + position: relative; + text-align: center; + z-index: 100; +} + +.status__video-player { + background: var(--background-color); + box-sizing: border-box; + cursor: default; /* May not be needed */ + margin-top: 8px; + overflow: hidden; + position: relative; +} + +.status__video-player-video { + height: 100%; + object-fit: cover; + position: relative; + top: 50%; + transform: translateY(-50%); + width: 100%; + z-index: 1; +} + +.status__video-player-expand, +.status__video-player-mute { + color: var(--primary-text-color); + opacity: 0.8; + position: absolute; + right: 4px; + text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; +} + +.status__video-player-spoiler { + display: none; + color: var(--primary-text-color); + left: 4px; + position: absolute; + text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; + top: 4px; + z-index: 100; + + &.status__video-player-spoiler--visible { + display: block; + } +} + +.status__video-player-expand { + bottom: 4px; + z-index: 100; +} + +.status__video-player-mute { + top: 4px; + z-index: 5; +} + +.detailed, +.fullscreen { + .video-player__volume__current, + .video-player__volume::before { + bottom: 27px; + } + + .video-player__volume__handle { + bottom: 23px; + } + +} + +.video-player { + overflow: hidden; + position: relative; + background: $base-shadow-color; + max-width: 100%; + border-radius: 4px; + + &:focus { + outline: 0; + } + + video { + max-width: 100vw; + max-height: 80vh; + min-height: 120px; + object-fit: contain; + z-index: 1; + } + + &.fullscreen { + width: 100% !important; + height: 100% !important; + margin: 0; + + video { + max-width: 100% !important; + max-height: 100% !important; + width: 100% !important; + height: 100% !important; + } + } + + &.inline { + video { + object-fit: contain; + position: relative; + } + } + + &__controls { + position: absolute; + z-index: 2; + bottom: 0; + left: 0; + right: 0; + box-sizing: border-box; + background: linear-gradient(0deg, rgba($base-shadow-color, 0.85) 0, rgba($base-shadow-color, 0.45) 60%, transparent); + padding: 0 15px; + opacity: 0; + transition: opacity .1s ease; + + &.active { + opacity: 1; + } + } + + &.inactive { + video, + .video-player__controls { + visibility: hidden; + } + } + + &__spoiler { + display: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 4; + border: 0; + background: var(--background-color); + color: var(--primary-text-color-faint); + transition: none; + pointer-events: none; + + &.active { + display: block; + pointer-events: auto; + + &:hover, + &:active, + &:focus { + color: var(--primary-text-color); + } + } + + &__title { + display: block; + font-size: 14px; + } + + &__subtitle { + display: block; + font-size: 11px; + font-weight: 500; + } + } + + &__buttons-bar { + display: flex; + justify-content: space-between; + padding-bottom: 10px; + } + + &__buttons { + font-size: 16px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + &.left { + button { + padding-left: 0; + } + } + + &.right { + button { + padding-right: 0; + } + } + + button { + background: transparent; + padding: 2px 10px; + font-size: 16px; + border: 0; + color: rgba(#ffffff, 0.75); + + &:active, + &:hover, + &:focus { + color: #ffffff; + } + } + } + + &__time-sep, + &__time-total, + &__time-current { + font-size: 14px; + font-weight: 500; + } + + &__time-current { + color: #ffffff; + margin-left: 60px; + } + + &__time-sep { + display: inline-block; + margin: 0 6px; + } + + &__time-sep, + &__time-total { + color: #ffffff; + } + + &__volume { + cursor: pointer; + height: 24px; + display: inline; + + &::before { + content: ""; + width: 50px; + background: rgba(#ffffff, 0.35); + border-radius: 4px; + display: block; + position: absolute; + height: 4px; + left: 70px; + bottom: 20px; + } + + &__current { + display: block; + position: absolute; + height: 4px; + border-radius: 4px; + left: 70px; + bottom: 20px; + background: var(--brand-color); + } + + &__handle { + position: absolute; + z-index: 3; + border-radius: 50%; + width: 12px; + height: 12px; + bottom: 16px; + left: 70px; + transition: opacity .1s ease; + background: var(--brand-color); + box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); + pointer-events: none; + } + } + + &__link { + padding: 2px 10px; + + a { + text-decoration: none; + font-size: 14px; + font-weight: 500; + color: #ffffff; + + &:hover, + &:active, + &:focus { + text-decoration: underline; + } + } + } + + &__seek { + cursor: pointer; + height: 24px; + position: relative; + + &::before { + content: ""; + width: 100%; + background: rgba(#ffffff, 0.35); + border-radius: 4px; + display: block; + position: absolute; + height: 4px; + top: 10px; + } + + &__progress, + &__buffer { + display: block; + position: absolute; + height: 4px; + border-radius: 4px; + top: 10px; + background: var(--brand-color); + } + + &__buffer { + background: rgba(#ffffff, 0.2); + } + + &__handle { + position: absolute; + z-index: 3; + opacity: 0; + border-radius: 50%; + width: 12px; + height: 12px; + top: 6px; + margin-left: -6px; + transition: opacity .1s ease; + background: var(--brand-color); + box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); + pointer-events: none; + + &.active { + opacity: 1; + } + } + + &:hover { + .video-player__seek__handle { + opacity: 1; + } + } + } + + &.detailed, + &.fullscreen { + .video-player__buttons { + button { + padding-top: 10px; + padding-bottom: 10px; + } + } + } +} + +.media-spoiler-video { + background-size: cover; + background-repeat: no-repeat; + background-position: center; + cursor: pointer; + margin-top: 8px; + position: relative; + border: 0; + display: block; +} + +.media-spoiler-video-play-icon { + border-radius: 100px; + color: var(--primary-text-color-faint); + font-size: 36px; + left: 50%; + padding: 5px; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); +} diff --git a/app/styles/components/wtf-panel.scss b/app/styles/components/wtf-panel.scss new file mode 100644 index 000000000..79674c1d8 --- /dev/null +++ b/app/styles/components/wtf-panel.scss @@ -0,0 +1,128 @@ +.wtf-panel { + @include standard-panel-shadow; + display: flex; + width: 100%; + border-radius: 10px; + flex-direction: column; + height: auto; + box-sizing: border-box; + background: var(--foreground-color); + + &:not(:last-of-type) { + margin-bottom: 10px; + } + + .wtf-panel-header { + display: flex; + align-items: baseline; + margin-bottom: 10px; + padding: 15px 15px 0; + + &__icon { + margin-right: 10px; + } + + &__label { + flex: 1 1; + color: var(--primary-text-color); + font-size: 16px; + font-weight: bold; + line-height: 19px; + } + } + + &__content { + width: 100%; + padding-top: 8px; + } + + &__list { + padding: 0 5px; + } + + &__subtitle { + display: block; + padding: 0 15px; + color: var(--primary-text-color-faint); + } + + &__form { + display: block; + padding: 15px; + + &.button { + width: 100%; + } + } + + .wtf-panel-list-item { + display: block; + padding-bottom: 10px; + + &:not(:first-of-type) { + margin-top: 12px; + } + + &:not(:last-of-type) { + border-bottom: 1px solid var(--brand-color-med); + } + + &__content { + display: flex; + flex-direction: row; + min-height: 46px; + margin-left: 58px; + } + + &__account-block { + display: flex; + position: relative; + align-items: baseline; + padding-right: 10px; + + &__avatar { + height: 46px; + width: 46px; + background-color: #ff0000; + left: -58px; + position: absolute; + } + + &__name { + display: flex; + flex-wrap: wrap; + flex-direction: column; + margin-top: 6px; + + &__name { + color: var(--primary-text-color); + font-size: 14px; + font-weight: bold; + line-height: 16px; + margin-bottom: 2px; + max-height: 32px; //2 lines of text + overflow: hidden; + } + + &__username { + color: var(--highlight-text-color); + font-size: 12px; + line-height: 14px; + } + } + } + + &__follow-block { + margin-left: auto; + padding-top: 6px; + + &__button { + display: flex; + } + + &__icon { + color: var(--primary-text-color); + } + } + } +} diff --git a/app/styles/emoji_picker.scss b/app/styles/emoji_picker.scss index 474766a66..b8697002d 100644 --- a/app/styles/emoji_picker.scss +++ b/app/styles/emoji_picker.scss @@ -200,3 +200,61 @@ .emoji-mart-preview { display: none; } + +.emoji-picker-dropdown__menu { + @include standard-panel; + background: var(--foreground-color); + position: absolute; + margin-top: 5px; + z-index: 20000; + + .emoji-mart-scroll { + transition: opacity 200ms ease; + } + + &.selecting .emoji-mart-scroll { + opacity: 0.5; + } +} + +.emoji-picker-dropdown__modifiers { + position: absolute; + top: 60px; + right: 11px; + cursor: pointer; +} + +.emoji-picker-dropdown__modifiers__menu { + position: absolute; + z-index: 4; + top: -4px; + left: -8px; + background: var(--foreground-color); + border-radius: 4px; + box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); + overflow: hidden; + + button { + display: block; + cursor: pointer; + border: 0; + padding: 4px 8px; + background: transparent; + + &:hover, + &:focus, + &:active { + background: rgba(var(--background-color-rgb), 0.4); + } + } + + .emoji-mart-emoji { + height: 22px; + } +} + +.emoji-mart-emoji { + span { + background-repeat: no-repeat; + } +} diff --git a/app/styles/loading.scss b/app/styles/loading.scss new file mode 100644 index 000000000..9d61770e4 --- /dev/null +++ b/app/styles/loading.scss @@ -0,0 +1,210 @@ +.loading-indicator { + color: var(--primary-text-color-faint); + font-size: 12px; + font-weight: 400; + text-transform: uppercase; + overflow: visible; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + + span { + display: block; + float: left; + margin-left: 50%; + transform: translateX(-50%); + margin: 82px 0 0 50%; + white-space: nowrap; + } +} + +.loading-indicator__figure { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 42px; + height: 42px; + box-sizing: border-box; + background-color: transparent; + border: 0 solid rgba(var(--brand-color-rgb), 0.5); + border-width: 6px; + border-radius: 50%; +} + +.no-reduce-motion .loading-indicator span { + animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); +} + +.no-reduce-motion .loading-indicator__figure { + animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); +} + +@keyframes loader-figure { + 0% { + width: 0; + height: 0; + background-color: rgba(var(--brand-color-rgb), 0.5); + } + + 29% { + background-color: rgba(var(--brand-color-rgb), 0.5); + } + + 30% { + width: 42px; + height: 42px; + background-color: transparent; + border-width: 21px; + opacity: 1; + } + + 100% { + width: 42px; + height: 42px; + border-width: 0; + opacity: 0; + background-color: transparent; + } +} + +@keyframes loader-label { + 0% { opacity: 0.25; } + 30% { opacity: 1; } + 100% { opacity: 0.25; } +} + +@keyframes heartbeat { + from { + transform: scale(1); + animation-timing-function: ease-out; + } + + 10% { + transform: scale(0.91); + animation-timing-function: ease-in; + } + + 17% { + transform: scale(0.98); + animation-timing-function: ease-out; + } + + 33% { + transform: scale(0.87); + animation-timing-function: ease-in; + } + + 45% { + transform: scale(1); + animation-timing-function: ease-out; + } +} + +.no-reduce-motion .pulse-loading { + transform-origin: center center; + animation: heartbeat 1.5s ease-in-out infinite both; +} + +@keyframes shake-bottom { + 0%, + 100% { + transform: rotate(0deg); + transform-origin: 50% 100%; + } + + 10% { + transform: rotate(2deg); + } + + 20%, + 40%, + 60% { + transform: rotate(-4deg); + } + + 30%, + 50%, + 70% { + transform: rotate(4deg); + } + + 80% { + transform: rotate(-2deg); + } + + 90% { + transform: rotate(2deg); + } +} + +.no-reduce-motion .shake-bottom { + transform-origin: 50% 100%; + animation: shake-bottom 0.8s cubic-bezier(0.455, 0.03, 0.515, 0.955) 2s 2 both; +} + +.loading-bar { + background-color: var(--highlight-text-color); + height: 3px; + position: absolute; + top: 0; + left: 0; +} + +.load-more { + display: block; + color: var(--primary-text-color); + background-color: transparent; + border: 0; + font-size: inherit; + text-align: center; + line-height: inherit; + margin: 0; + padding: 15px; + box-sizing: border-box; + width: 100%; + clear: both; + text-decoration: none; + + &:hover { + background: var(--brand-color-faint); + } +} + +.load-gap { + border-bottom: 1px solid var(--brand-color-med); +} + +.regeneration-indicator { + text-align: center; + font-size: 16px; + font-weight: 500; + color: var(--primary-text-color); + background: var(--brand-color-med); + cursor: default; + display: flex; + flex: 1 1 auto; + align-items: center; + justify-content: center; + padding: 20px; + + & > div { + width: 100%; + background: transparent; + padding-top: 0; + } + + &__label { + strong { + display: block; + margin-bottom: 10px; + color: var(--primary-text-color); + } + + span { + font-size: 15px; + font-weight: 400; + } + } +} diff --git a/app/styles/modal.scss b/app/styles/modal.scss deleted file mode 100644 index edfc214c2..000000000 --- a/app/styles/modal.scss +++ /dev/null @@ -1,13 +0,0 @@ -.modal-layout { - background: var(--background-color) url('data:image/svg+xml;utf8,') repeat-x bottom fixed; - display: flex; - flex-direction: column; - height: 100vh; - padding: 0; -} - -@media screen and (max-width: 600px) { - .account-header { - margin-top: 0; - } -} diff --git a/app/styles/ui.scss b/app/styles/ui.scss new file mode 100644 index 000000000..b70154d5e --- /dev/null +++ b/app/styles/ui.scss @@ -0,0 +1,749 @@ +.icon-button { + display: inline-block; + padding: 0; + color: rgba(var(--primary-text-color-rgb), 0.4); + border: 0; + background: transparent; + cursor: pointer; + transition: color 100ms ease-in; + + i.fa { + margin: 0; + } + + &:hover, + &:active, + &:focus { + color: rgba(var(--primary-text-color-rgb), 0.6); + transition: color 200ms ease-out; + } + + &.disabled { + color: rgba(var(--primary-text-color-rgb), 0.2); + cursor: default; + } + + &.active { + color: var(--highlight-text-color); + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &.inverted { + color: var(--primary-text-color-faint); + + &:hover, + &:active, + &:focus { + color: var(--primary-text-color-faint); + } + + &.disabled { + color: var(--primary-text-color-faint); + } + + &.active { + color: var(--highlight-text-color); + + &.disabled { + color: var(--highlight-text-color); + } + } + } + + &.overlayed { + box-sizing: content-box; + background: var(--foreground-color); + color: var(--primary-text-color-faint); + border-radius: 4px; + padding: 2px; + + &:hover { + background: var(--background-color); + } + } +} + +.text-icon-button { + color: var(--primary-text-color-faint); + border: 0; + background: transparent; + cursor: pointer; + font-weight: 600; + font-size: 11px; + padding: 0 3px; + line-height: 27px; + outline: 0; + transition: color 100ms ease-in; + + &:hover, + &:active, + &:focus { + color: var(--primary-text-color-faint); + transition: color 200ms ease-out; + } + + &.disabled { + color: var(--primary-text-color-faint); + cursor: default; + } + + &.active { + color: var(--highlight-text-color); + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } +} + +.invisible { + font-size: 0 !important; + line-height: 0 !important; + display: inline-block; + width: 0; + height: 0; + position: absolute; + + img, + svg { + margin: 0 !important; + border: 0 !important; + padding: 0 !important; + width: 0 !important; + height: 0 !important; + } +} + +.ellipsis::after {content: "…";} + +.timeline-compose-block { + @include standard-panel; + display: flex; + align-items: flex-start; + padding: 20px; + margin-bottom: 20px; + + .emoji-picker-wrapper { + .emoji-picker-dropdown {top: 10px;} + } + + .compose-form { + flex: 1 1; + padding: 0 0 0 20px !important; + position: relative; + + @media(max-width: 405px) { + padding: 0 !important; + } + + .compose-form__autosuggest-wrapper { + &::before { + content: ""; + display: block; + position: absolute; + height: 0; + width: 0; + border-top: 11px solid transparent; + border-right: 12px solid var(--background-color); + border-bottom: 11px solid transparent; + border-left: 11px solid transparent; + left: -22px; + top: 13px; + } + + .autosuggest-textarea__textarea { + padding: 14px 32px 13px 10px !important; + } + } + } + + &__avatar { + @media(max-width: 405px) { display: none; } + } +} + +.no-reduce-motion .spoiler-input { + transition: height 0.4s ease, opacity 0.4s ease; +} + +.emojione { + font-size: inherit; + vertical-align: middle; + object-fit: contain; + margin: -.2ex .15em .2ex; + width: 16px; + height: 16px; + + img { + width: auto; + } +} + +.status__relative-time, +.notification__relative_time { + color: var(--primary-text-color-faint); + float: right; + font-size: 14px; +} + +.domain { + padding: 10px; + border-bottom: 1px solid var(--brand-color-med); + + .domain__domain-name { + flex: 1 1 auto; + display: block; + color: var(--primary-text-color); + text-decoration: none; + font-size: 14px; + font-weight: 500; + } +} + +.domain__wrapper { + display: flex; +} + +.domain_buttons { + height: 18px; + padding: 10px; + white-space: nowrap; +} + +.muted { + .status__content p, + .status__content a { + color: var(--primary-text-color); + } + + .status__display-name strong { + color: var(--primary-text-color); + } + + .status__avatar { + opacity: 0.5; + } + + a.status__content__spoiler-link { + background: var(--brand-color-med); + color: var(--primary-text-color); + + &:hover { + background: var(--brand-color-faint); + text-decoration: none; + } + } +} + +.star-icon.active { + color: $gold-star; +} + +.status__relative-time, +.detailed-status__datetime { + &:hover { + text-decoration: underline; + } +} + +.image-loader { + position: relative; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + .image-loader__preview-canvas { + max-width: $media-modal-media-max-width; + max-height: $media-modal-media-max-height; + background: url('../images/void.png') repeat; + object-fit: contain; + } + + .loading-bar { + position: relative; + } + + &.image-loader--amorphous .image-loader__preview-canvas { + display: none; + } +} + +.zoomable-image { + position: relative; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + + img { + max-width: $media-modal-media-max-width; + max-height: $media-modal-media-max-height; + width: auto; + height: auto; + object-fit: contain; + box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.5); + } +} + +.react-swipeable-view-container { + &, + .columns-area, + .drawer, + .column { + height: 100%; + } +} + +.react-swipeable-view-container > * { + display: flex; + align-items: center; + justify-content: center; + height: 100%; +} + +.ui { + display: block; + width: 100%; + padding: 0 0 100px; + + .page { + display: flex; + flex-direction: column; + width: 100%; + + &__top { + display: flex; + width: 100%; + height: auto; + z-index: 105; + background: var(--foreground-color); + + @media (min-width: 895px) { + top: -290px; + position: sticky; + } + } + + &__columns { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + } + } +} + +.floating-action-button { + z-index: 1000; + display: none; + position: fixed; + bottom: 14px; + right: 14px; + width: 61px; + height: 61px; + background-color: var(--brand-color); + border: 0; + border-radius: 999px; + box-shadow: 2px 5px 5px rgba(0, 0, 0, 0.5); + font-size: 30px; + align-items: center; + justify-content: center; + transition: 0.2s; + + @media screen and (max-width: 895px) { + display: flex; + } + + &:hover, + &:focus, + &:active { + background-color: var(--brand-color-hicontrast); + } + + i.fa { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + margin: 0; + } +} + +@media screen and (min-width: 360px) { + .getting-started__wrapper, + .getting-started__trends { + margin-bottom: 10px; + } +} + +.icon-with-badge { + position: relative; + height: 100%; + + &__badge { + @include font-montserrat; + @include font-size(14); + @include line-height(14); + position: absolute; + box-sizing: border-box; + left: -10px; + top: 3px; + min-width: 16px; + height: 16px; + padding: 1px 3px 0; + border-radius: 8px; + text-align: center; + color: #fff; + background: var(--brand-color); + + @media screen and (max-width: 895px) { + top: 0; + } + } +} + +.slist { + &--flex { + display: flex; + flex-direction: column; + } + + &__append { + flex: 1 1 auto; + position: relative; + min-height: 120px; + } +} + +.setting-text { + color: var(--primary-text-color-faint); + background: transparent; + border: 0; + border-bottom: 2px solid var(--brand-color); + box-sizing: border-box; + display: block; + font-family: inherit; + margin-bottom: 10px; + padding: 7px 0; + width: 100%; + + &:focus, + &:active { + color: var(--primary-text-color); + border-bottom-color: var(--highlight-text-color); + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } +} + +.morefollows-indicator { + text-align: center; + font-size: 16px; + font-weight: 500; + color: var(--primary-text-color); + background: var(--brand-color-med); + cursor: default; + display: flex; + flex: 1 1 auto; + align-items: center; + justify-content: center; + padding: 20px; + + & > div { + width: 100%; + background: transparent; + padding-top: 0; + } + + &__label { + strong { + display: block; + margin-bottom: 10px; + color: var(--primary-text-color); + } + } +} + +.text-btn { + display: inline-block; + padding: 0; + font-family: inherit; + font-size: inherit; + color: inherit; + border: 0; + background: transparent; + cursor: pointer; +} + +.account--panel__button, +.detailed-status__button { + flex: 1 1 auto; + text-align: center; +} + +.emoji-button { + display: block; + font-size: 24px; + line-height: 24px; + margin-left: 2px; + width: 24px; + outline: 0; + cursor: pointer; + + &:active, + &:focus { + outline: 0 !important; + } + + img { + filter: grayscale(100%); + opacity: 0.8; + display: block; + margin: 0; + width: 22px; + height: 22px; + margin-top: 2px; + } + + &:hover, + &:active, + &:focus { + img { + opacity: 1; + filter: none; + } + } +} + +.dropdown--active .emoji-button img { + opacity: 1; + filter: none; +} + +.attachment-list { + display: flex; + font-size: 14px; + border: 1px solid var(--brand-color-med); + border-radius: 4px; + margin-top: 14px; + overflow: hidden; + + &__icon { + flex: 0 0 auto; + color: var(--primary-text-color); + padding: 8px 18px; + cursor: default; + border-right: 1px solid var(--brand-color-med); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 26px; + + .fa { + display: block; + } + } + + &__list { + list-style: none; + padding: 4px 0; + padding-left: 8px; + display: flex; + flex-direction: column; + justify-content: center; + + li { + display: block; + padding: 4px 0; + } + + a { + text-decoration: none; + color: var(--primary-text-color); + font-weight: 500; + + &:hover { + text-decoration: underline; + } + } + } + + &.compact { + border: 0; + margin-top: 4px; + + .attachment-list__list { + padding: 0; + display: block; + } + + .fa { + color: var(--primary-text-color); + } + } +} + +.notification__filter-bar, +.account__section-headline { + border-bottom: 1px solid var(--brand-color-faint); + cursor: default; + display: flex; + flex-shrink: 0; + + button { + border: 0; + margin: 0; + } + + button, + a { + display: block; + flex: 1 1 auto; + color: var(--primary-text-color-faint); + padding: 15px 0; + font-size: 14px; + font-weight: 500; + text-align: center; + text-decoration: none; + position: relative; + background: transparent; + + &.active { + color: var(--primary-text-color); + + &::before, + &::after { + display: block; + content: ""; + position: absolute; + bottom: 0; + left: 50%; + width: 0; + height: 0; + transform: translateX(-50%); + border-style: solid; + border-width: 0 10px 10px; + border-color: transparent transparent var(--brand-color-faint); + } + + &::after { + bottom: -1px; + } + } + } +} + +::-webkit-scrollbar-thumb { + border-radius: 0; +} + +@keyframes flicker { + 0% { opacity: 1; } + 30% { opacity: 0.75; } + 100% { opacity: 1; } +} + +.layout-toggle { + display: flex; + padding: 5px; + + button { + box-sizing: border-box; + flex: 0 0 50%; + background: transparent; + padding: 5px; + border: 0; + position: relative; + + &:hover, + &:focus, + &:active { + svg path:first-child { + fill: var(--background-color); + } + } + } + + svg { + width: 100%; + height: auto; + + path:first-child { + fill: var(--brand-color-med); + } + + path:last-child { + fill: var(--background-color); + } + } + + &__active { + color: var(--brand-color); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: var(--brand-color-med); + border-radius: 50%; + padding: 0.35rem; + } +} + +.verified-icon { + display: inline-block; + margin: 0 4px 0 1px; + vertical-align: top; + position: relative; + width: 15px; + height: 15px; + + &::before { + display: block; + content: ""; + position: absolute; + background-color: #00a3ed; + top: 0; + right: 0; + left: 0; + bottom: 0; + border-radius: 50%; + } + + &::after { + display: block; + position: absolute; + content: '\f00c'; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + color: #fff; + font-size: 0.6em; + line-height: 15px; + width: 15px; + height: 15px; + text-align: center; + } +} From a46fb79401da068f2f6b0e09ecc55cc9454fe3b2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 2 Jun 2020 21:16:05 -0500 Subject: [PATCH 46/46] React Toggle css fixes --- app/styles/components/react-toggle.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/styles/components/react-toggle.scss b/app/styles/components/react-toggle.scss index 2cef9254c..25bd90b15 100644 --- a/app/styles/components/react-toggle.scss +++ b/app/styles/components/react-toggle.scss @@ -32,12 +32,12 @@ height: 24px; padding: 0; border-radius: 30px; - background-color: var(--brand-color-med); + background-color: var(--brand-color); transition: background-color 0.2s ease; } .react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { - background-color: var(--background-color); + background-color: var(--brand-color-hicontrast); } .react-toggle--checked .react-toggle-track {