forked from FoundKeyGang/FoundKey
テーマに関して強化
This commit is contained in:
parent
f2b9863eea
commit
6b96bd0185
15 changed files with 569 additions and 513 deletions
|
@ -134,6 +134,8 @@
|
||||||
"is-url": "1.2.4",
|
"is-url": "1.2.4",
|
||||||
"js-yaml": "3.12.0",
|
"js-yaml": "3.12.0",
|
||||||
"jsdom": "11.12.0",
|
"jsdom": "11.12.0",
|
||||||
|
"json5": "2.1.0",
|
||||||
|
"json5-loader": "1.0.1",
|
||||||
"koa": "2.5.1",
|
"koa": "2.5.1",
|
||||||
"koa-bodyparser": "4.2.1",
|
"koa-bodyparser": "4.2.1",
|
||||||
"koa-compress": "3.0.0",
|
"koa-compress": "3.0.0",
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { url, lang } from './config';
|
import { url, lang } from './config';
|
||||||
import applyTheme from './common/scripts/theme';
|
|
||||||
const darkTheme = require('../theme/dark');
|
|
||||||
const halloweenTheme = require('../theme/halloween');
|
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
const theme = localStorage.getItem('theme');
|
const theme = localStorage.getItem('theme');
|
||||||
if (theme) {
|
if (theme) {
|
||||||
Object.entries(JSON.parse(theme)).forEach(([k, v]) => {
|
Object.entries(JSON.parse(theme)).forEach(([k, v]) => {
|
||||||
if (k == 'meta') return;
|
|
||||||
document.documentElement.style.setProperty(`--${k}`, v.toString());
|
document.documentElement.style.setProperty(`--${k}`, v.toString());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
<label>
|
<label>
|
||||||
<span>%i18n:@light-theme%</span>
|
<span>%i18n:@light-theme%</span>
|
||||||
<ui-select v-model="light" placeholder="%i18n:@light-theme%">
|
<ui-select v-model="light" placeholder="%i18n:@light-theme%">
|
||||||
<option v-for="x in themes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
|
<option v-for="x in themes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label>
|
<label>
|
||||||
<span>%i18n:@dark-theme%</span>
|
<span>%i18n:@dark-theme%</span>
|
||||||
<ui-select v-model="dark" placeholder="%i18n:@dark-theme%">
|
<ui-select v-model="dark" placeholder="%i18n:@dark-theme%">
|
||||||
<option v-for="x in themes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
|
<option v-for="x in themes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
<details>
|
<details>
|
||||||
<summary>%i18n:@installed-themes%</summary>
|
<summary>%i18n:@installed-themes%</summary>
|
||||||
<ui-select v-model="selectedInstalledTheme" placeholder="%i18n:@select-theme%">
|
<ui-select v-model="selectedInstalledTheme" placeholder="%i18n:@select-theme%">
|
||||||
<option v-for="x in installedThemes" :value="x.meta.id" :key="x.meta.id">{{ x.meta.name }}</option>
|
<option v-for="x in installedThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
<ui-textarea readonly :value="selectedInstalledThemeCode">
|
<ui-textarea readonly :value="selectedInstalledThemeCode">
|
||||||
<span>%i18n:@theme-code%</span>
|
<span>%i18n:@theme-code%</span>
|
||||||
|
@ -65,10 +65,25 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import { lightTheme, darkTheme, builtinThemes, applyTheme } from '../../../theme';
|
import { lightTheme, darkTheme, builtinThemes, applyTheme, Theme } from '../../../theme';
|
||||||
import { Chrome } from 'vue-color';
|
import { Chrome } from 'vue-color';
|
||||||
import * as uuid from 'uuid';
|
import * as uuid from 'uuid';
|
||||||
import * as tinycolor from 'tinycolor2';
|
import * as tinycolor from 'tinycolor2';
|
||||||
|
import * as JSON5 from 'json5';
|
||||||
|
|
||||||
|
// 後方互換性のため
|
||||||
|
function convertOldThemedefinition(t) {
|
||||||
|
const t2 = {
|
||||||
|
id: t.meta.id,
|
||||||
|
name: t.meta.name,
|
||||||
|
author: t.meta.author,
|
||||||
|
base: t.meta.base,
|
||||||
|
vars: t.meta.vars,
|
||||||
|
props: t
|
||||||
|
};
|
||||||
|
delete t2.props.meta;
|
||||||
|
return t2;
|
||||||
|
}
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
components: {
|
components: {
|
||||||
|
@ -81,18 +96,18 @@ export default Vue.extend({
|
||||||
selectedInstalledTheme: null,
|
selectedInstalledTheme: null,
|
||||||
myThemeBase: 'light',
|
myThemeBase: 'light',
|
||||||
myThemeName: '',
|
myThemeName: '',
|
||||||
myThemePrimary: lightTheme.meta.vars.primary,
|
myThemePrimary: lightTheme.vars.primary,
|
||||||
myThemeSecondary: lightTheme.meta.vars.secondary,
|
myThemeSecondary: lightTheme.vars.secondary,
|
||||||
myThemeText: lightTheme.meta.vars.text
|
myThemeText: lightTheme.vars.text
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
themes(): any {
|
themes(): Theme[] {
|
||||||
return this.$store.state.device.themes.concat(builtinThemes);
|
return this.$store.state.device.themes.concat(builtinThemes);
|
||||||
},
|
},
|
||||||
|
|
||||||
installedThemes(): any {
|
installedThemes(): Theme[] {
|
||||||
return this.$store.state.device.themes;
|
return this.$store.state.device.themes;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -108,20 +123,18 @@ export default Vue.extend({
|
||||||
|
|
||||||
selectedInstalledThemeCode() {
|
selectedInstalledThemeCode() {
|
||||||
if (this.selectedInstalledTheme == null) return null;
|
if (this.selectedInstalledTheme == null) return null;
|
||||||
return JSON.stringify(this.installedThemes.find(x => x.meta.id == this.selectedInstalledTheme));
|
return JSON5.stringify(this.installedThemes.find(x => x.id == this.selectedInstalledTheme), null, '\t');
|
||||||
},
|
},
|
||||||
|
|
||||||
myTheme(): any {
|
myTheme(): any {
|
||||||
return {
|
return {
|
||||||
meta: {
|
name: this.myThemeName,
|
||||||
name: this.myThemeName,
|
author: this.$store.state.i.name,
|
||||||
author: this.$store.state.i.name,
|
base: this.myThemeBase,
|
||||||
base: this.myThemeBase,
|
vars: {
|
||||||
vars: {
|
primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
|
||||||
primary: tinycolor(typeof this.myThemePrimary == 'string' ? this.myThemePrimary : this.myThemePrimary.rgba).toRgbString(),
|
secondary: tinycolor(typeof this.myThemeSecondary == 'string' ? this.myThemeSecondary : this.myThemeSecondary.rgba).toRgbString(),
|
||||||
secondary: tinycolor(typeof this.myThemeSecondary == 'string' ? this.myThemeSecondary : this.myThemeSecondary.rgba).toRgbString(),
|
text: tinycolor(typeof this.myThemeText == 'string' ? this.myThemeText : this.myThemeText.rgba).toRgbString()
|
||||||
text: tinycolor(typeof this.myThemeText == 'string' ? this.myThemeText : this.myThemeText.rgba).toRgbString()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -130,37 +143,67 @@ export default Vue.extend({
|
||||||
watch: {
|
watch: {
|
||||||
myThemeBase(v) {
|
myThemeBase(v) {
|
||||||
const theme = v == 'light' ? lightTheme : darkTheme;
|
const theme = v == 'light' ? lightTheme : darkTheme;
|
||||||
this.myThemePrimary = theme.meta.vars.primary;
|
this.myThemePrimary = theme.vars.primary;
|
||||||
this.myThemeSecondary = theme.meta.vars.secondary;
|
this.myThemeSecondary = theme.vars.secondary;
|
||||||
this.myThemeText = theme.meta.vars.text;
|
this.myThemeText = theme.vars.text;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
beforeCreate() {
|
||||||
|
// migrate old theme definitions
|
||||||
|
// 後方互換性のため
|
||||||
|
this.$store.commit('device/set', {
|
||||||
|
key: 'themes', value: this.$store.state.device.themes.map(t => {
|
||||||
|
if (t.id == null) {
|
||||||
|
return convertOldThemedefinition(t);
|
||||||
|
} else {
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
install() {
|
install() {
|
||||||
const theme = JSON.parse(this.installThemeCode);
|
let theme;
|
||||||
if (theme.meta == null || theme.meta.id == null) {
|
|
||||||
|
try {
|
||||||
|
theme = JSON5.parse(this.installThemeCode);
|
||||||
|
} catch (e) {
|
||||||
alert('%i18n:@invalid-theme%');
|
alert('%i18n:@invalid-theme%');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.$store.state.device.themes.some(t => t.meta.id == theme.meta.id)) {
|
|
||||||
|
// 後方互換性のため
|
||||||
|
if (theme.id == null && theme.meta != null) {
|
||||||
|
theme = convertOldThemedefinition(theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (theme.id == null) {
|
||||||
|
alert('%i18n:@invalid-theme%');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.$store.state.device.themes.some(t => t.id == theme.id)) {
|
||||||
alert('%i18n:@already-installed%');
|
alert('%i18n:@already-installed%');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const themes = this.$store.state.device.themes.concat(theme);
|
const themes = this.$store.state.device.themes.concat(theme);
|
||||||
this.$store.commit('device/set', {
|
this.$store.commit('device/set', {
|
||||||
key: 'themes', value: themes
|
key: 'themes', value: themes
|
||||||
});
|
});
|
||||||
alert('%i18n:@installed%'.replace('{}', theme.meta.name));
|
|
||||||
|
alert('%i18n:@installed%'.replace('{}', theme.name));
|
||||||
},
|
},
|
||||||
|
|
||||||
uninstall() {
|
uninstall() {
|
||||||
const theme = this.installedThemes.find(x => x.meta.id == this.selectedInstalledTheme);
|
const theme = this.installedThemes.find(x => x.id == this.selectedInstalledTheme);
|
||||||
const themes = this.$store.state.device.themes.filter(t => t.meta.id != theme.meta.id);
|
const themes = this.$store.state.device.themes.filter(t => t.id != theme.id);
|
||||||
this.$store.commit('device/set', {
|
this.$store.commit('device/set', {
|
||||||
key: 'themes', value: themes
|
key: 'themes', value: themes
|
||||||
});
|
});
|
||||||
alert('%i18n:@uninstalled%'.replace('{}', theme.meta.name));
|
alert('%i18n:@uninstalled%'.replace('{}', theme.name));
|
||||||
},
|
},
|
||||||
|
|
||||||
preview() {
|
preview() {
|
||||||
|
@ -169,7 +212,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
gen() {
|
gen() {
|
||||||
const theme = this.myTheme;
|
const theme = this.myTheme;
|
||||||
theme.meta.id = uuid();
|
theme.id = uuid();
|
||||||
const themes = this.$store.state.device.themes.concat(theme);
|
const themes = this.$store.state.device.themes.concat(theme);
|
||||||
this.$store.commit('device/set', {
|
this.$store.commit('device/set', {
|
||||||
key: 'themes', value: themes
|
key: 'themes', value: themes
|
||||||
|
|
|
@ -14,8 +14,7 @@ import App from './app.vue';
|
||||||
import checkForUpdate from './common/scripts/check-for-update';
|
import checkForUpdate from './common/scripts/check-for-update';
|
||||||
import MiOS, { API } from './mios';
|
import MiOS, { API } from './mios';
|
||||||
import { version, codename, lang } from './config';
|
import { version, codename, lang } from './config';
|
||||||
import { builtinThemes, applyTheme } from './theme';
|
import { builtinThemes, lightTheme, applyTheme } from './theme';
|
||||||
const lightTheme = require('../theme/light.json');
|
|
||||||
|
|
||||||
if (localStorage.getItem('theme') == null) {
|
if (localStorage.getItem('theme') == null) {
|
||||||
applyTheme(lightTheme);
|
applyTheme(lightTheme);
|
||||||
|
@ -97,15 +96,15 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
|
||||||
return s.device.darkmode;
|
return s.device.darkmode;
|
||||||
}, v => {
|
}, v => {
|
||||||
const themes = os.store.state.device.themes.concat(builtinThemes);
|
const themes = os.store.state.device.themes.concat(builtinThemes);
|
||||||
const dark = themes.find(t => t.meta.id == os.store.state.device.darkTheme);
|
const dark = themes.find(t => t.id == os.store.state.device.darkTheme);
|
||||||
const light = themes.find(t => t.meta.id == os.store.state.device.lightTheme);
|
const light = themes.find(t => t.id == os.store.state.device.lightTheme);
|
||||||
applyTheme(v ? dark : light);
|
applyTheme(v ? dark : light);
|
||||||
});
|
});
|
||||||
os.store.watch(s => {
|
os.store.watch(s => {
|
||||||
return s.device.lightTheme;
|
return s.device.lightTheme;
|
||||||
}, v => {
|
}, v => {
|
||||||
const themes = os.store.state.device.themes.concat(builtinThemes);
|
const themes = os.store.state.device.themes.concat(builtinThemes);
|
||||||
const theme = themes.find(t => t.meta.id == v);
|
const theme = themes.find(t => t.id == v);
|
||||||
if (!os.store.state.device.darkmode) {
|
if (!os.store.state.device.darkmode) {
|
||||||
applyTheme(theme);
|
applyTheme(theme);
|
||||||
}
|
}
|
||||||
|
@ -114,7 +113,7 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
|
||||||
return s.device.darkTheme;
|
return s.device.darkTheme;
|
||||||
}, v => {
|
}, v => {
|
||||||
const themes = os.store.state.device.themes.concat(builtinThemes);
|
const themes = os.store.state.device.themes.concat(builtinThemes);
|
||||||
const theme = themes.find(t => t.meta.id == v);
|
const theme = themes.find(t => t.id == v);
|
||||||
if (os.store.state.device.darkmode) {
|
if (os.store.state.device.darkmode) {
|
||||||
applyTheme(theme);
|
applyTheme(theme);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,40 @@
|
||||||
import * as tinycolor from 'tinycolor2';
|
import * as tinycolor from 'tinycolor2';
|
||||||
|
|
||||||
type Theme = {
|
export type Theme = {
|
||||||
meta: {
|
id: string;
|
||||||
id: string;
|
name: string;
|
||||||
name: string;
|
author: string;
|
||||||
author: string;
|
desc?: string;
|
||||||
base?: string;
|
base?: 'dark' | 'light';
|
||||||
vars: any;
|
vars: { [key: string]: string };
|
||||||
};
|
props: { [key: string]: string };
|
||||||
} & {
|
|
||||||
[key: string]: string;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const lightTheme: Theme = require('../theme/light.json5');
|
||||||
|
export const darkTheme: Theme = require('../theme/dark.json5');
|
||||||
|
export const pinkTheme: Theme = require('../theme/pink.json5');
|
||||||
|
export const halloweenTheme: Theme = require('../theme/halloween.json5');
|
||||||
|
|
||||||
|
export const builtinThemes = [
|
||||||
|
lightTheme,
|
||||||
|
darkTheme,
|
||||||
|
pinkTheme,
|
||||||
|
halloweenTheme
|
||||||
|
];
|
||||||
|
|
||||||
export function applyTheme(theme: Theme, persisted = true) {
|
export function applyTheme(theme: Theme, persisted = true) {
|
||||||
if (theme.meta.base) {
|
// Deep copy
|
||||||
const base = [lightTheme, darkTheme].find(x => x.meta.id == theme.meta.base);
|
const _theme = JSON.parse(JSON.stringify(theme));
|
||||||
theme = Object.assign({}, base, theme);
|
|
||||||
|
if (_theme.base) {
|
||||||
|
const base = [lightTheme, darkTheme].find(x => x.id == _theme.base);
|
||||||
|
_theme.vars = Object.assign({}, base.vars, _theme.vars);
|
||||||
|
_theme.props = Object.assign({}, base.props, _theme.props);
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = compile(theme);
|
const props = compile(_theme);
|
||||||
|
|
||||||
Object.entries(props).forEach(([k, v]) => {
|
Object.entries(props).forEach(([k, v]) => {
|
||||||
if (k == 'meta') return;
|
|
||||||
document.documentElement.style.setProperty(`--${k}`, v.toString());
|
document.documentElement.style.setProperty(`--${k}`, v.toString());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -34,10 +47,10 @@ function compile(theme: Theme): { [key: string]: string } {
|
||||||
function getColor(code: string): tinycolor.Instance {
|
function getColor(code: string): tinycolor.Instance {
|
||||||
// ref
|
// ref
|
||||||
if (code[0] == '@') {
|
if (code[0] == '@') {
|
||||||
return getColor(theme[code.substr(1)]);
|
return getColor(theme.props[code.substr(1)]);
|
||||||
}
|
}
|
||||||
if (code[0] == '$') {
|
if (code[0] == '$') {
|
||||||
return getColor(theme.meta.vars[code.substr(1)]);
|
return getColor(theme.vars[code.substr(1)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// func
|
// func
|
||||||
|
@ -59,8 +72,7 @@ function compile(theme: Theme): { [key: string]: string } {
|
||||||
|
|
||||||
const props = {};
|
const props = {};
|
||||||
|
|
||||||
Object.entries(theme).forEach(([k, v]) => {
|
Object.entries(theme.props).forEach(([k, v]) => {
|
||||||
if (k == 'meta') return;
|
|
||||||
const c = getColor(v);
|
const c = getColor(v);
|
||||||
props[k] = genValue(c);
|
props[k] = genValue(c);
|
||||||
});
|
});
|
||||||
|
@ -88,15 +100,3 @@ function compile(theme: Theme): { [key: string]: string } {
|
||||||
function genValue(c: tinycolor.Instance): string {
|
function genValue(c: tinycolor.Instance): string {
|
||||||
return c.toRgbString();
|
return c.toRgbString();
|
||||||
}
|
}
|
||||||
|
|
||||||
export const lightTheme = require('../theme/light.json');
|
|
||||||
export const darkTheme = require('../theme/dark.json');
|
|
||||||
export const pinkTheme = require('../theme/pink.json');
|
|
||||||
export const halloweenTheme = require('../theme/halloween.json');
|
|
||||||
|
|
||||||
export const builtinThemes = [
|
|
||||||
lightTheme,
|
|
||||||
darkTheme,
|
|
||||||
pinkTheme,
|
|
||||||
halloweenTheme
|
|
||||||
];
|
|
||||||
|
|
|
@ -1,204 +0,0 @@
|
||||||
{
|
|
||||||
"meta": {
|
|
||||||
"id": "dark",
|
|
||||||
"name": "Dark",
|
|
||||||
"author": "syuilo",
|
|
||||||
"vars": {
|
|
||||||
"primary": "#fb4e4e",
|
|
||||||
"secondary": "#282C37",
|
|
||||||
"text": "#d6dae0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"primary": "$primary",
|
|
||||||
"primaryForeground": "#fff",
|
|
||||||
"secondary": "$secondary",
|
|
||||||
"bg": ":darken<8<$secondary",
|
|
||||||
"text": "$text",
|
|
||||||
|
|
||||||
"scrollbarTrack": ":darken<5<$secondary",
|
|
||||||
"scrollbarHandle": ":lighten<5<$secondary",
|
|
||||||
"scrollbarHandleHover": ":lighten<10<$secondary",
|
|
||||||
|
|
||||||
"face": "$secondary",
|
|
||||||
"faceText": "#fff",
|
|
||||||
"faceHeader": ":lighten<5<$secondary",
|
|
||||||
"faceHeaderText": "#e3e5e8",
|
|
||||||
"faceDivider": "rgba(0, 0, 0, 0.3)",
|
|
||||||
"faceTextButton": "#9baec8",
|
|
||||||
"faceTextButtonHover": "#b2c1d5",
|
|
||||||
"faceTextButtonActive": "#b2c1d5",
|
|
||||||
"faceClearButtonHover": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"faceClearButtonActive": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"popupBg": ":lighten<5<$secondary",
|
|
||||||
"popupFg": "#d6dce2",
|
|
||||||
|
|
||||||
"subNoteBg": "rgba(0, 0, 0, 0.18)",
|
|
||||||
"subNoteText": ":alpha<0.7<$text",
|
|
||||||
"renoteGradient": "#314027",
|
|
||||||
"renoteText": "#9dbb00",
|
|
||||||
"quoteBorder": "#4e945e",
|
|
||||||
"noteText": "#fff",
|
|
||||||
"noteHeaderName": "#fff",
|
|
||||||
"noteHeaderBadgeFg": "#758188",
|
|
||||||
"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.25)",
|
|
||||||
"noteHeaderAdminFg": "#f15f71",
|
|
||||||
"noteHeaderAdminBg": "#5d282e",
|
|
||||||
"noteHeaderAcct": "#606984",
|
|
||||||
"noteHeaderInfo": "#606984",
|
|
||||||
|
|
||||||
"noteActions": "#606984",
|
|
||||||
"noteActionsHover": "#a1a8bf",
|
|
||||||
"noteActionsReplyHover": "#0af",
|
|
||||||
"noteActionsRenoteHover": "#8d0",
|
|
||||||
"noteActionsReactionHover": "#fa0",
|
|
||||||
"noteActionsHighlighted": "#707b97",
|
|
||||||
|
|
||||||
"noteAttachedFile": "rgba(255, 255, 255, 0.1)",
|
|
||||||
|
|
||||||
"modalBackdrop": "rgba(0, 0, 0, 0.5)",
|
|
||||||
|
|
||||||
"dateDividerBg": ":darken<2<$secondary",
|
|
||||||
"dateDividerFg": ":alpha<0.7<$text",
|
|
||||||
|
|
||||||
"switchTrack": "rgba(255, 255, 255, 0.15)",
|
|
||||||
"radioBorder": "rgba(255, 255, 255, 0.6)",
|
|
||||||
"inputBorder": "rgba(255, 255, 255, 0.7)",
|
|
||||||
"inputLabel": "rgba(255, 255, 255, 0.7)",
|
|
||||||
"inputText": "#fff",
|
|
||||||
|
|
||||||
"buttonBg": "rgba(255, 255, 255, 0.05)",
|
|
||||||
"buttonHoverBg": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"buttonActiveBg": "rgba(255, 255, 255, 0.15)",
|
|
||||||
|
|
||||||
"autocompleteItemHoverBg": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"autocompleteItemText": "rgba(255, 255, 255, 0.8)",
|
|
||||||
"autocompleteItemTextSub": "rgba(255, 255, 255, 0.3)",
|
|
||||||
|
|
||||||
"cwButtonBg": "#687390",
|
|
||||||
"cwButtonFg": "#393f4f",
|
|
||||||
"cwButtonHoverBg": "#707b97",
|
|
||||||
|
|
||||||
"reactionPickerButtonHoverBg": "rgba(255, 255, 255, 0.18)",
|
|
||||||
|
|
||||||
"reactionViewerBorder": "rgba(255, 255, 255, 0.1)",
|
|
||||||
|
|
||||||
"pollEditorInputBg": "rgba(0, 0, 0, 0.25)",
|
|
||||||
|
|
||||||
"pollChoiceText": "#fff",
|
|
||||||
"pollChoiceBorder": "rgba(255, 255, 255, 0.1)",
|
|
||||||
|
|
||||||
"urlPreviewBorder": "rgba(0, 0, 0, 0.4)",
|
|
||||||
"urlPreviewBorderHover": "rgba(255, 255, 255, 0.2)",
|
|
||||||
"urlPreviewTitle": "$text",
|
|
||||||
"urlPreviewText": ":alpha<0.7<$text",
|
|
||||||
"urlPreviewInfo": ":alpha<0.8<$text",
|
|
||||||
|
|
||||||
"calendarWeek": "#43d5dc",
|
|
||||||
"calendarSaturdayOrSunday": "#ff6679",
|
|
||||||
"calendarDay": "#c5ced6",
|
|
||||||
|
|
||||||
"materBg": "rgba(0, 0, 0, 0.3)",
|
|
||||||
|
|
||||||
"chartCaption": ":alpha<0.6<$text",
|
|
||||||
|
|
||||||
"announcementsBg": "#253a50",
|
|
||||||
"announcementsTitle": "#539eff",
|
|
||||||
"announcementsText": "#fff",
|
|
||||||
|
|
||||||
"donationBg": "#5d5242",
|
|
||||||
"donationFg": "#e4dbce",
|
|
||||||
|
|
||||||
"googleSearchBg": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"googleSearchFg": "#dee4e8",
|
|
||||||
"googleSearchBorder": "rgba(255, 255, 255, 0.2)",
|
|
||||||
"googleSearchHoverBorder": "rgba(255, 255, 255, 0.3)",
|
|
||||||
"googleSearchHoverButton": "rgba(255, 255, 255, 0.1)",
|
|
||||||
|
|
||||||
"mfmTitleBg": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"mfmQuote": ":alpha<0.7<$text",
|
|
||||||
"mfmQuoteLine": ":alpha<0.6<$text",
|
|
||||||
|
|
||||||
"suspendedInfoBg": "#611d1d",
|
|
||||||
"suspendedInfoFg": "#ffb4b4",
|
|
||||||
"remoteInfoBg": "#42321c",
|
|
||||||
"remoteInfoFg": "#ffbd3e",
|
|
||||||
|
|
||||||
"messagingRoomBg": "@bg",
|
|
||||||
"messagingRoomInfo": "#fff",
|
|
||||||
"messagingRoomDateDividerLine": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"messagingRoomDateDividerText": "rgba(255, 255, 255, 0.3)",
|
|
||||||
"messagingRoomMessageInfo": "rgba(255, 255, 255, 0.4)",
|
|
||||||
"messagingRoomMessageBg": "$secondary",
|
|
||||||
"messagingRoomMessageFg": "#fff",
|
|
||||||
|
|
||||||
"formButtonBorder": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"formButtonHoverBg": ":alpha<0.2<$primary",
|
|
||||||
"formButtonHoverBorder": ":alpha<0.5<$primary",
|
|
||||||
"formButtonActiveBg": ":alpha<0.12<$primary",
|
|
||||||
|
|
||||||
"desktopHeaderBg": ":lighten<5<$secondary",
|
|
||||||
"desktopHeaderFg": "$text",
|
|
||||||
"desktopHeaderHoverFg": "#fff",
|
|
||||||
"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"desktopHeaderSearchHoverBg": "rgba(255, 255, 255, 0.04)",
|
|
||||||
"desktopHeaderSearchFg": "#fff",
|
|
||||||
"desktopNotificationBg": ":alpha<0.9<$secondary",
|
|
||||||
"desktopNotificationFg": ":alpha<0.7<$text",
|
|
||||||
"desktopNotificationShadow": "rgba(0, 0, 0, 0.4)",
|
|
||||||
"desktopPostFormBg": "@face",
|
|
||||||
"desktopPostFormTextareaBg": "rgba(0, 0, 0, 0.25)",
|
|
||||||
"desktopPostFormTextareaFg": "#fff",
|
|
||||||
"desktopPostFormTransparentButtonFg": "$primary",
|
|
||||||
"desktopPostFormTransparentButtonActiveGradientStart": ":darken<8<$secondary",
|
|
||||||
"desktopPostFormTransparentButtonActiveGradientEnd": ":darken<3<$secondary",
|
|
||||||
"desktopRenoteFormFooter": ":lighten<5<$secondary",
|
|
||||||
"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.15)",
|
|
||||||
"desktopTimelineSrc": "@faceTextButton",
|
|
||||||
"desktopTimelineSrcHover": "@faceTextButtonHover",
|
|
||||||
"desktopWindowTitle": "@faceHeaderText",
|
|
||||||
"desktopWindowShadow": "rgba(0, 0, 0, 0.5)",
|
|
||||||
"desktopDriveBg": "@bg",
|
|
||||||
"desktopDriveFolderBg": ":alpha<0.2<$primary",
|
|
||||||
"desktopDriveFolderHoverBg": ":alpha<0.3<$primary",
|
|
||||||
"desktopDriveFolderActiveBg": ":alpha<0.3<:darken<10<$primary",
|
|
||||||
"desktopDriveFolderFg": "#fff",
|
|
||||||
"desktopSettingsNavItem": ":alpha<0.8<$text",
|
|
||||||
"desktopSettingsNavItemHover": ":lighten<10<$text",
|
|
||||||
|
|
||||||
"deckAcrylicColumnBg": "rgba(0, 0, 0, 0.25)",
|
|
||||||
|
|
||||||
"mobileHeaderBg": ":lighten<5<$secondary",
|
|
||||||
"mobileHeaderFg": "$text",
|
|
||||||
"mobileNavBackdrop": "rgba(0, 0, 0, 0.7)",
|
|
||||||
"mobilePostFormDivider": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"mobilePostFormTextareaBg": "rgba(0, 0, 0, 0.3)",
|
|
||||||
"mobileDriveNavBg": ":alpha<0.75<$secondary",
|
|
||||||
"mobileHomeTlItemHover": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"mobileUserPageName": "#fff",
|
|
||||||
"mobileUserPageAcct": "$text",
|
|
||||||
"mobileUserPageDescription": "$text",
|
|
||||||
"mobileUserPageFollowedBg": "rgba(0, 0, 0, 0.3)",
|
|
||||||
"mobileUserPageFollowedFg": "$text",
|
|
||||||
"mobileUserPageStatusHighlight": "#fff",
|
|
||||||
"mobileUserPageHeaderShadow": "rgba(0, 0, 0, 0.3)",
|
|
||||||
"mobileAnnouncement": "rgba(30, 129, 216, 0.2)",
|
|
||||||
"mobileAnnouncementFg": "#fff",
|
|
||||||
"mobileSignedInAsBg": "#273c34",
|
|
||||||
"mobileSignedInAsFg": "#49ab63",
|
|
||||||
"mobileSignoutBg": "#652222",
|
|
||||||
"mobileSignoutFg": "#ff5f56",
|
|
||||||
|
|
||||||
"reversiBannerGradientStart": "#45730e",
|
|
||||||
"reversiBannerGradientEnd": "#464300",
|
|
||||||
"reversiDescBg": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"reversiListItemShadow": "rgba(0, 0, 0, 0.7)",
|
|
||||||
"reversiMapSelectBorder": "rgba(255, 255, 255, 0.1)",
|
|
||||||
"reversiMapSelectHoverBorder": "rgba(255, 255, 255, 0.2)",
|
|
||||||
"reversiRoomFormShadow": "rgba(0, 0, 0, 0.7)",
|
|
||||||
"reversiRoomFooterBg": ":alpha<0.9<$secondary",
|
|
||||||
"reversiGameHeaderLine": ":alpha<0.5<$secondary",
|
|
||||||
"reversiGameEmptyCell": ":lighten<2<$secondary",
|
|
||||||
"reversiGameEmptyCellMyTurn": ":lighten<5<$secondary",
|
|
||||||
"reversiGameEmptyCellCanPut": ":lighten<4<$secondary"
|
|
||||||
}
|
|
207
src/client/theme/dark.json5
Normal file
207
src/client/theme/dark.json5
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
{
|
||||||
|
id: 'dark',
|
||||||
|
|
||||||
|
name: 'Dark',
|
||||||
|
author: 'syuilo',
|
||||||
|
desc: 'Default dark theme',
|
||||||
|
|
||||||
|
vars: {
|
||||||
|
primary: '#fb4e4e',
|
||||||
|
secondary: '#282C37',
|
||||||
|
text: '#d6dae0',
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
primary: '$primary',
|
||||||
|
primaryForeground: '#fff',
|
||||||
|
secondary: '$secondary',
|
||||||
|
bg: ':darken<8<$secondary',
|
||||||
|
text: '$text',
|
||||||
|
|
||||||
|
scrollbarTrack: ':darken<5<$secondary',
|
||||||
|
scrollbarHandle: ':lighten<5<$secondary',
|
||||||
|
scrollbarHandleHover: ':lighten<10<$secondary',
|
||||||
|
|
||||||
|
face: '$secondary',
|
||||||
|
faceText: '#fff',
|
||||||
|
faceHeader: ':lighten<5<$secondary',
|
||||||
|
faceHeaderText: '#e3e5e8',
|
||||||
|
faceDivider: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
faceTextButton: '$text',
|
||||||
|
faceTextButtonHover: ':lighten<10<$text',
|
||||||
|
faceTextButtonActive: ':darken<10<$text',
|
||||||
|
faceClearButtonHover: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
faceClearButtonActive: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
popupBg: ':lighten<5<$secondary',
|
||||||
|
popupFg: '#d6dce2',
|
||||||
|
|
||||||
|
subNoteBg: 'rgba(0, 0, 0, 0.18)',
|
||||||
|
subNoteText: ':alpha<0.7<$text',
|
||||||
|
renoteGradient: '#314027',
|
||||||
|
renoteText: '#9dbb00',
|
||||||
|
quoteBorder: '#4e945e',
|
||||||
|
noteText: '#fff',
|
||||||
|
noteHeaderName: '#fff',
|
||||||
|
noteHeaderBadgeFg: '#758188',
|
||||||
|
noteHeaderBadgeBg: 'rgba(0, 0, 0, 0.25)',
|
||||||
|
noteHeaderAdminFg: '#f15f71',
|
||||||
|
noteHeaderAdminBg: '#5d282e',
|
||||||
|
noteHeaderAcct: '#606984',
|
||||||
|
noteHeaderInfo: '#606984',
|
||||||
|
|
||||||
|
noteActions: '#606984',
|
||||||
|
noteActionsHover: '#a1a8bf',
|
||||||
|
noteActionsReplyHover: '#0af',
|
||||||
|
noteActionsRenoteHover: '#8d0',
|
||||||
|
noteActionsReactionHover: '#fa0',
|
||||||
|
noteActionsHighlighted: '#707b97',
|
||||||
|
|
||||||
|
noteAttachedFile: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
|
||||||
|
modalBackdrop: 'rgba(0, 0, 0, 0.5)',
|
||||||
|
|
||||||
|
dateDividerBg: ':darken<2<$secondary',
|
||||||
|
dateDividerFg: ':alpha<0.7<$text',
|
||||||
|
|
||||||
|
switchTrack: 'rgba(255, 255, 255, 0.15)',
|
||||||
|
radioBorder: 'rgba(255, 255, 255, 0.6)',
|
||||||
|
inputBorder: 'rgba(255, 255, 255, 0.7)',
|
||||||
|
inputLabel: 'rgba(255, 255, 255, 0.7)',
|
||||||
|
inputText: '#fff',
|
||||||
|
|
||||||
|
buttonBg: 'rgba(255, 255, 255, 0.05)',
|
||||||
|
buttonHoverBg: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
buttonActiveBg: 'rgba(255, 255, 255, 0.15)',
|
||||||
|
|
||||||
|
autocompleteItemHoverBg: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
autocompleteItemText: 'rgba(255, 255, 255, 0.8)',
|
||||||
|
autocompleteItemTextSub: 'rgba(255, 255, 255, 0.3)',
|
||||||
|
|
||||||
|
cwButtonBg: '#687390',
|
||||||
|
cwButtonFg: '#393f4f',
|
||||||
|
cwButtonHoverBg: '#707b97',
|
||||||
|
|
||||||
|
reactionPickerButtonHoverBg: 'rgba(255, 255, 255, 0.18)',
|
||||||
|
|
||||||
|
reactionViewerBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
|
||||||
|
pollEditorInputBg: 'rgba(0, 0, 0, 0.25)',
|
||||||
|
|
||||||
|
pollChoiceText: '#fff',
|
||||||
|
pollChoiceBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
|
||||||
|
urlPreviewBorder: 'rgba(0, 0, 0, 0.4)',
|
||||||
|
urlPreviewBorderHover: 'rgba(255, 255, 255, 0.2)',
|
||||||
|
urlPreviewTitle: '$text',
|
||||||
|
urlPreviewText: ':alpha<0.7<$text',
|
||||||
|
urlPreviewInfo: ':alpha<0.8<$text',
|
||||||
|
|
||||||
|
calendarWeek: '#43d5dc',
|
||||||
|
calendarSaturdayOrSunday: '#ff6679',
|
||||||
|
calendarDay: '#c5ced6',
|
||||||
|
|
||||||
|
materBg: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
|
||||||
|
chartCaption: ':alpha<0.6<$text',
|
||||||
|
|
||||||
|
announcementsBg: '#253a50',
|
||||||
|
announcementsTitle: '#539eff',
|
||||||
|
announcementsText: '#fff',
|
||||||
|
|
||||||
|
donationBg: '#5d5242',
|
||||||
|
donationFg: '#e4dbce',
|
||||||
|
|
||||||
|
googleSearchBg: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
googleSearchFg: '#dee4e8',
|
||||||
|
googleSearchBorder: 'rgba(255, 255, 255, 0.2)',
|
||||||
|
googleSearchHoverBorder: 'rgba(255, 255, 255, 0.3)',
|
||||||
|
googleSearchHoverButton: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
|
||||||
|
mfmTitleBg: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
mfmQuote: ':alpha<0.7<$text',
|
||||||
|
mfmQuoteLine: ':alpha<0.6<$text',
|
||||||
|
|
||||||
|
suspendedInfoBg: '#611d1d',
|
||||||
|
suspendedInfoFg: '#ffb4b4',
|
||||||
|
remoteInfoBg: '#42321c',
|
||||||
|
remoteInfoFg: '#ffbd3e',
|
||||||
|
|
||||||
|
messagingRoomBg: '@bg',
|
||||||
|
messagingRoomInfo: '#fff',
|
||||||
|
messagingRoomDateDividerLine: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
messagingRoomDateDividerText: 'rgba(255, 255, 255, 0.3)',
|
||||||
|
messagingRoomMessageInfo: 'rgba(255, 255, 255, 0.4)',
|
||||||
|
messagingRoomMessageBg: '$secondary',
|
||||||
|
messagingRoomMessageFg: '#fff',
|
||||||
|
|
||||||
|
formButtonBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
formButtonHoverBg: ':alpha<0.2<$primary',
|
||||||
|
formButtonHoverBorder: ':alpha<0.5<$primary',
|
||||||
|
formButtonActiveBg: ':alpha<0.12<$primary',
|
||||||
|
|
||||||
|
desktopHeaderBg: ':lighten<5<$secondary',
|
||||||
|
desktopHeaderFg: '$text',
|
||||||
|
desktopHeaderHoverFg: '#fff',
|
||||||
|
desktopHeaderSearchBg: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
desktopHeaderSearchHoverBg: 'rgba(255, 255, 255, 0.04)',
|
||||||
|
desktopHeaderSearchFg: '#fff',
|
||||||
|
desktopNotificationBg: ':alpha<0.9<$secondary',
|
||||||
|
desktopNotificationFg: ':alpha<0.7<$text',
|
||||||
|
desktopNotificationShadow: 'rgba(0, 0, 0, 0.4)',
|
||||||
|
desktopPostFormBg: '@face',
|
||||||
|
desktopPostFormTextareaBg: 'rgba(0, 0, 0, 0.25)',
|
||||||
|
desktopPostFormTextareaFg: '#fff',
|
||||||
|
desktopPostFormTransparentButtonFg: '$primary',
|
||||||
|
desktopPostFormTransparentButtonActiveGradientStart: ':darken<8<$secondary',
|
||||||
|
desktopPostFormTransparentButtonActiveGradientEnd: ':darken<3<$secondary',
|
||||||
|
desktopRenoteFormFooter: ':lighten<5<$secondary',
|
||||||
|
desktopTimelineHeaderShadow: 'rgba(0, 0, 0, 0.15)',
|
||||||
|
desktopTimelineSrc: '@faceTextButton',
|
||||||
|
desktopTimelineSrcHover: '@faceTextButtonHover',
|
||||||
|
desktopWindowTitle: '@faceHeaderText',
|
||||||
|
desktopWindowShadow: 'rgba(0, 0, 0, 0.5)',
|
||||||
|
desktopDriveBg: '@bg',
|
||||||
|
desktopDriveFolderBg: ':alpha<0.2<$primary',
|
||||||
|
desktopDriveFolderHoverBg: ':alpha<0.3<$primary',
|
||||||
|
desktopDriveFolderActiveBg: ':alpha<0.3<:darken<10<$primary',
|
||||||
|
desktopDriveFolderFg: '#fff',
|
||||||
|
desktopSettingsNavItem: ':alpha<0.8<$text',
|
||||||
|
desktopSettingsNavItemHover: ':lighten<10<$text',
|
||||||
|
|
||||||
|
deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.25)',
|
||||||
|
|
||||||
|
mobileHeaderBg: ':lighten<5<$secondary',
|
||||||
|
mobileHeaderFg: '$text',
|
||||||
|
mobileNavBackdrop: 'rgba(0, 0, 0, 0.7)',
|
||||||
|
mobilePostFormDivider: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
mobilePostFormTextareaBg: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
mobileDriveNavBg: ':alpha<0.75<$secondary',
|
||||||
|
mobileHomeTlItemHover: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
mobileUserPageName: '#fff',
|
||||||
|
mobileUserPageAcct: '$text',
|
||||||
|
mobileUserPageDescription: '$text',
|
||||||
|
mobileUserPageFollowedBg: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
mobileUserPageFollowedFg: '$text',
|
||||||
|
mobileUserPageStatusHighlight: '#fff',
|
||||||
|
mobileUserPageHeaderShadow: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
mobileAnnouncement: 'rgba(30, 129, 216, 0.2)',
|
||||||
|
mobileAnnouncementFg: '#fff',
|
||||||
|
mobileSignedInAsBg: '#273c34',
|
||||||
|
mobileSignedInAsFg: '#49ab63',
|
||||||
|
mobileSignoutBg: '#652222',
|
||||||
|
mobileSignoutFg: '#ff5f56',
|
||||||
|
|
||||||
|
reversiBannerGradientStart: '#45730e',
|
||||||
|
reversiBannerGradientEnd: '#464300',
|
||||||
|
reversiDescBg: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
reversiListItemShadow: 'rgba(0, 0, 0, 0.7)',
|
||||||
|
reversiMapSelectBorder: 'rgba(255, 255, 255, 0.1)',
|
||||||
|
reversiMapSelectHoverBorder: 'rgba(255, 255, 255, 0.2)',
|
||||||
|
reversiRoomFormShadow: 'rgba(0, 0, 0, 0.7)',
|
||||||
|
reversiRoomFooterBg: ':alpha<0.9<$secondary',
|
||||||
|
reversiGameHeaderLine: ':alpha<0.5<$secondary',
|
||||||
|
reversiGameEmptyCell: ':lighten<2<$secondary',
|
||||||
|
reversiGameEmptyCellMyTurn: ':lighten<5<$secondary',
|
||||||
|
reversiGameEmptyCellCanPut: ':lighten<4<$secondary',
|
||||||
|
},
|
||||||
|
}
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"meta": {
|
|
||||||
"id": "42e4f09b-67d5-498c-af7d-29faa54745b0",
|
|
||||||
"name": "Halloween",
|
|
||||||
"author": "syuilo",
|
|
||||||
"base": "dark",
|
|
||||||
"vars": {
|
|
||||||
"primary": "#d67036",
|
|
||||||
"secondary": "#1f1d30",
|
|
||||||
"text": "#b1bee3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"renoteGradient": "#5d2d1a",
|
|
||||||
"renoteText": "#ff6c00",
|
|
||||||
"quoteBorder": "#c3631c"
|
|
||||||
}
|
|
21
src/client/theme/halloween.json5
Normal file
21
src/client/theme/halloween.json5
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
id: '42e4f09b-67d5-498c-af7d-29faa54745b0',
|
||||||
|
|
||||||
|
name: 'Halloween',
|
||||||
|
author: 'syuilo',
|
||||||
|
desc: 'Hello, Happy Halloween!',
|
||||||
|
|
||||||
|
base: 'dark',
|
||||||
|
|
||||||
|
vars: {
|
||||||
|
primary: '#d67036',
|
||||||
|
secondary: '#1f1d30',
|
||||||
|
text: '#b1bee3',
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
renoteGradient: '#5d2d1a',
|
||||||
|
renoteText: '#ff6c00',
|
||||||
|
quoteBorder: '#c3631c',
|
||||||
|
},
|
||||||
|
}
|
|
@ -1,204 +0,0 @@
|
||||||
{
|
|
||||||
"meta": {
|
|
||||||
"id": "light",
|
|
||||||
"name": "Light",
|
|
||||||
"author": "syuilo",
|
|
||||||
"vars": {
|
|
||||||
"primary": "#fb4e4e",
|
|
||||||
"secondary": "#fff",
|
|
||||||
"text": "#666"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"primary": "$primary",
|
|
||||||
"primaryForeground": "#fff",
|
|
||||||
"secondary": "$secondary",
|
|
||||||
"bg": ":darken<8<$secondary",
|
|
||||||
"text": "$text",
|
|
||||||
|
|
||||||
"scrollbarTrack": "#fff",
|
|
||||||
"scrollbarHandle": "#00000033",
|
|
||||||
"scrollbarHandleHover": "#00000066",
|
|
||||||
|
|
||||||
"face": "$secondary",
|
|
||||||
"faceText": "#444",
|
|
||||||
"faceHeader": ":lighten<5<$secondary",
|
|
||||||
"faceHeaderText": "#888",
|
|
||||||
"faceDivider": "rgba(0, 0, 0, 0.082)",
|
|
||||||
"faceTextButton": "#ccc",
|
|
||||||
"faceTextButtonHover": "#aaa",
|
|
||||||
"faceTextButtonActive": "#999",
|
|
||||||
"faceClearButtonHover": "rgba(0, 0, 0, 0.025)",
|
|
||||||
"faceClearButtonActive": "rgba(0, 0, 0, 0.05)",
|
|
||||||
"popupBg": ":lighten<5<$secondary",
|
|
||||||
"popupFg": "#586069",
|
|
||||||
|
|
||||||
"subNoteBg": "rgba(0, 0, 0, 0.01)",
|
|
||||||
"subNoteText": ":alpha<0.7<$text",
|
|
||||||
"renoteGradient": "#edfde2",
|
|
||||||
"renoteText": "#9dbb00",
|
|
||||||
"quoteBorder": "#c0dac6",
|
|
||||||
"noteText": "#717171",
|
|
||||||
"noteHeaderName": ":darken<2<$text",
|
|
||||||
"noteHeaderBadgeFg": "#aaa",
|
|
||||||
"noteHeaderBadgeBg": "rgba(0, 0, 0, 0.05)",
|
|
||||||
"noteHeaderAdminFg": "#f15f71",
|
|
||||||
"noteHeaderAdminBg": "#ffdfdf",
|
|
||||||
"noteHeaderAcct": ":alpha<0.7<@noteHeaderName",
|
|
||||||
"noteHeaderInfo": ":alpha<0.7<@noteHeaderName",
|
|
||||||
|
|
||||||
"noteActions": ":alpha<0.3<$text",
|
|
||||||
"noteActionsHover": ":alpha<0.9<$text",
|
|
||||||
"noteActionsReplyHover": "#0af",
|
|
||||||
"noteActionsRenoteHover": "#8d0",
|
|
||||||
"noteActionsReactionHover": "#fa0",
|
|
||||||
"noteActionsHighlighted": "#888",
|
|
||||||
|
|
||||||
"noteAttachedFile": "rgba(0, 0, 0, 0.05)",
|
|
||||||
|
|
||||||
"modalBackdrop": "rgba(0, 0, 0, 0.1)",
|
|
||||||
|
|
||||||
"dateDividerBg": ":darken<2<$secondary",
|
|
||||||
"dateDividerFg": ":alpha<0.7<$text",
|
|
||||||
|
|
||||||
"switchTrack": "rgba(0, 0, 0, 0.25)",
|
|
||||||
"radioBorder": "rgba(0, 0, 0, 0.4)",
|
|
||||||
"inputBorder": "rgba(0, 0, 0, 0.42)",
|
|
||||||
"inputLabel": "rgba(0, 0, 0, 0.54)",
|
|
||||||
"inputText": "#000",
|
|
||||||
|
|
||||||
"buttonBg": "rgba(0, 0, 0, 0.05)",
|
|
||||||
"buttonHoverBg": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"buttonActiveBg": "rgba(0, 0, 0, 0.15)",
|
|
||||||
|
|
||||||
"autocompleteItemHoverBg": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"autocompleteItemText": "rgba(0, 0, 0, 0.8)",
|
|
||||||
"autocompleteItemTextSub": "rgba(0, 0, 0, 0.3)",
|
|
||||||
|
|
||||||
"cwButtonBg": "#b1b9c1",
|
|
||||||
"cwButtonFg": "#fff",
|
|
||||||
"cwButtonHoverBg": "#bbc4ce",
|
|
||||||
|
|
||||||
"reactionPickerButtonHoverBg": "#eee",
|
|
||||||
|
|
||||||
"reactionViewerBorder": "rgba(0, 0, 0, 0.1)",
|
|
||||||
|
|
||||||
"pollEditorInputBg": "#fff",
|
|
||||||
|
|
||||||
"pollChoiceText": "#000",
|
|
||||||
"pollChoiceBorder": "rgba(0, 0, 0, 0.1)",
|
|
||||||
|
|
||||||
"urlPreviewBorder": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"urlPreviewBorderHover": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"urlPreviewTitle": "$text",
|
|
||||||
"urlPreviewText": ":alpha<0.7<$text",
|
|
||||||
"urlPreviewInfo": ":alpha<0.8<$text",
|
|
||||||
|
|
||||||
"calendarWeek": "#19a2a9",
|
|
||||||
"calendarSaturdayOrSunday": "#ef95a0",
|
|
||||||
"calendarDay": "#777",
|
|
||||||
|
|
||||||
"materBg": "rgba(0, 0, 0, 0.1)",
|
|
||||||
|
|
||||||
"chartCaption": ":alpha<0.6<$text",
|
|
||||||
|
|
||||||
"announcementsBg": "#f3f9ff",
|
|
||||||
"announcementsTitle": "#4078c0",
|
|
||||||
"announcementsText": "#57616f",
|
|
||||||
|
|
||||||
"donationBg": "#fbead4",
|
|
||||||
"donationFg": "#777d71",
|
|
||||||
|
|
||||||
"googleSearchBg": "#fff",
|
|
||||||
"googleSearchFg": "#55595c",
|
|
||||||
"googleSearchBorder": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"googleSearchHoverBorder": "rgba(0, 0, 0, 0.3)",
|
|
||||||
"googleSearchHoverButton": "rgba(0, 0, 0, 0.05)",
|
|
||||||
|
|
||||||
"mfmTitleBg": "rgba(0, 0, 0, 0.07)",
|
|
||||||
"mfmQuote": ":alpha<0.6<$text",
|
|
||||||
"mfmQuoteLine": ":alpha<0.5<$text",
|
|
||||||
|
|
||||||
"suspendedInfoBg": "#ffdbdb",
|
|
||||||
"suspendedInfoFg": "#570808",
|
|
||||||
"remoteInfoBg": "#fff0db",
|
|
||||||
"remoteInfoFg": "#573c08",
|
|
||||||
|
|
||||||
"messagingRoomBg": "#fff",
|
|
||||||
"messagingRoomInfo": "#000",
|
|
||||||
"messagingRoomDateDividerLine": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"messagingRoomDateDividerText": "rgba(0, 0, 0, 0.3)",
|
|
||||||
"messagingRoomMessageInfo": "rgba(0, 0, 0, 0.4)",
|
|
||||||
"messagingRoomMessageBg": "#eee",
|
|
||||||
"messagingRoomMessageFg": "#333",
|
|
||||||
|
|
||||||
"formButtonBorder": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"formButtonHoverBg": ":alpha<0.12<$primary",
|
|
||||||
"formButtonHoverBorder": ":alpha<0.3<$primary",
|
|
||||||
"formButtonActiveBg": ":alpha<0.12<$primary",
|
|
||||||
|
|
||||||
"desktopHeaderBg": ":lighten<5<$secondary",
|
|
||||||
"desktopHeaderFg": "$text",
|
|
||||||
"desktopHeaderHoverFg": "#7b8c88",
|
|
||||||
"desktopHeaderSearchBg": "rgba(0, 0, 0, 0.05)",
|
|
||||||
"desktopHeaderSearchHoverBg": "rgba(0, 0, 0, 0.08)",
|
|
||||||
"desktopHeaderSearchFg": "#000",
|
|
||||||
"desktopNotificationBg": ":alpha<0.9<$secondary",
|
|
||||||
"desktopNotificationFg": ":alpha<0.7<$text",
|
|
||||||
"desktopNotificationShadow": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"desktopPostFormBg": ":lighten<33<$primary",
|
|
||||||
"desktopPostFormTextareaBg": "#fff",
|
|
||||||
"desktopPostFormTextareaFg": "#333",
|
|
||||||
"desktopPostFormTransparentButtonFg": ":alpha<0.5<$primary",
|
|
||||||
"desktopPostFormTransparentButtonActiveGradientStart": ":lighten<30<$primary",
|
|
||||||
"desktopPostFormTransparentButtonActiveGradientEnd": ":lighten<33<$primary",
|
|
||||||
"desktopRenoteFormFooter": ":lighten<33<$primary",
|
|
||||||
"desktopTimelineHeaderShadow": "rgba(0, 0, 0, 0.08)",
|
|
||||||
"desktopTimelineSrc": "#6f7477",
|
|
||||||
"desktopTimelineSrcHover": "#525a5f",
|
|
||||||
"desktopWindowTitle": "#666",
|
|
||||||
"desktopWindowShadow": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"desktopDriveBg": "#fff",
|
|
||||||
"desktopDriveFolderBg": ":lighten<31<$primary",
|
|
||||||
"desktopDriveFolderHoverBg": ":lighten<27<$primary",
|
|
||||||
"desktopDriveFolderActiveBg": ":lighten<25<$primary",
|
|
||||||
"desktopDriveFolderFg": ":darken<10<$primary",
|
|
||||||
"desktopSettingsNavItem": ":alpha<0.8<$text",
|
|
||||||
"desktopSettingsNavItemHover": ":darken<10<$text",
|
|
||||||
|
|
||||||
"deckAcrylicColumnBg": "rgba(0, 0, 0, 0.1)",
|
|
||||||
|
|
||||||
"mobileHeaderBg": ":lighten<5<$secondary",
|
|
||||||
"mobileHeaderFg": "$text",
|
|
||||||
"mobileNavBackdrop": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"mobilePostFormDivider": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"mobilePostFormTextareaBg": "#fff",
|
|
||||||
"mobileDriveNavBg": ":alpha<0.75<$secondary",
|
|
||||||
"mobileHomeTlItemHover": "rgba(0, 0, 0, 0.05)",
|
|
||||||
"mobileUserPageName": "#757c82",
|
|
||||||
"mobileUserPageAcct": "#969ea5",
|
|
||||||
"mobileUserPageDescription": "#757c82",
|
|
||||||
"mobileUserPageFollowedBg": "#a7bec7",
|
|
||||||
"mobileUserPageFollowedFg": "#fff",
|
|
||||||
"mobileUserPageStatusHighlight": "#787e86",
|
|
||||||
"mobileUserPageHeaderShadow": "rgba(0, 0, 0, 0.07)",
|
|
||||||
"mobileAnnouncement": "rgba(155, 196, 232, 0.2)",
|
|
||||||
"mobileAnnouncementFg": "#3f4967",
|
|
||||||
"mobileSignedInAsBg": "#fcfff5",
|
|
||||||
"mobileSignedInAsFg": "#2c662d",
|
|
||||||
"mobileSignoutBg": "#fff6f5",
|
|
||||||
"mobileSignoutFg": "#cc2727",
|
|
||||||
|
|
||||||
"reversiBannerGradientStart": "#8bca3e",
|
|
||||||
"reversiBannerGradientEnd": "#d6cf31",
|
|
||||||
"reversiDescBg": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"reversiListItemShadow": "rgba(0, 0, 0, 0.15)",
|
|
||||||
"reversiMapSelectBorder": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"reversiMapSelectHoverBorder": "rgba(0, 0, 0, 0.2)",
|
|
||||||
"reversiRoomFormShadow": "rgba(0, 0, 0, 0.1)",
|
|
||||||
"reversiRoomFooterBg": ":alpha<0.9<$secondary",
|
|
||||||
"reversiGameHeaderLine": "#c4cdd4",
|
|
||||||
"reversiGameEmptyCell": "rgba(0, 0, 0, 0.06)",
|
|
||||||
"reversiGameEmptyCellMyTurn": "rgba(0, 0, 0, 0.12)",
|
|
||||||
"reversiGameEmptyCellCanPut": "rgba(0, 0, 0, 0.9)"
|
|
||||||
}
|
|
207
src/client/theme/light.json5
Normal file
207
src/client/theme/light.json5
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
{
|
||||||
|
id: 'light',
|
||||||
|
|
||||||
|
name: 'Light',
|
||||||
|
author: 'syuilo',
|
||||||
|
desc: 'Default light theme',
|
||||||
|
|
||||||
|
vars: {
|
||||||
|
primary: '#fb4e4e',
|
||||||
|
secondary: '#fff',
|
||||||
|
text: '#666',
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
primary: '$primary',
|
||||||
|
primaryForeground: '#fff',
|
||||||
|
secondary: '$secondary',
|
||||||
|
bg: ':darken<8<$secondary',
|
||||||
|
text: '$text',
|
||||||
|
|
||||||
|
scrollbarTrack: '#fff',
|
||||||
|
scrollbarHandle: '#00000033',
|
||||||
|
scrollbarHandleHover: '#00000066',
|
||||||
|
|
||||||
|
face: '$secondary',
|
||||||
|
faceText: '#444',
|
||||||
|
faceHeader: ':lighten<5<$secondary',
|
||||||
|
faceHeaderText: '#888',
|
||||||
|
faceDivider: 'rgba(0, 0, 0, 0.082)',
|
||||||
|
faceTextButton: '#ccc',
|
||||||
|
faceTextButtonHover: '#aaa',
|
||||||
|
faceTextButtonActive: '#999',
|
||||||
|
faceClearButtonHover: 'rgba(0, 0, 0, 0.025)',
|
||||||
|
faceClearButtonActive: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
popupBg: ':lighten<5<$secondary',
|
||||||
|
popupFg: '#586069',
|
||||||
|
|
||||||
|
subNoteBg: 'rgba(0, 0, 0, 0.01)',
|
||||||
|
subNoteText: ':alpha<0.7<$text',
|
||||||
|
renoteGradient: '#edfde2',
|
||||||
|
renoteText: '#9dbb00',
|
||||||
|
quoteBorder: '#c0dac6',
|
||||||
|
noteText: '#717171',
|
||||||
|
noteHeaderName: ':darken<2<$text',
|
||||||
|
noteHeaderBadgeFg: '#aaa',
|
||||||
|
noteHeaderBadgeBg: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
noteHeaderAdminFg: '#f15f71',
|
||||||
|
noteHeaderAdminBg: '#ffdfdf',
|
||||||
|
noteHeaderAcct: ':alpha<0.7<@noteHeaderName',
|
||||||
|
noteHeaderInfo: ':alpha<0.7<@noteHeaderName',
|
||||||
|
|
||||||
|
noteActions: ':alpha<0.3<$text',
|
||||||
|
noteActionsHover: ':alpha<0.9<$text',
|
||||||
|
noteActionsReplyHover: '#0af',
|
||||||
|
noteActionsRenoteHover: '#8d0',
|
||||||
|
noteActionsReactionHover: '#fa0',
|
||||||
|
noteActionsHighlighted: '#888',
|
||||||
|
|
||||||
|
noteAttachedFile: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
|
||||||
|
modalBackdrop: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
|
||||||
|
dateDividerBg: ':darken<2<$secondary',
|
||||||
|
dateDividerFg: ':alpha<0.7<$text',
|
||||||
|
|
||||||
|
switchTrack: 'rgba(0, 0, 0, 0.25)',
|
||||||
|
radioBorder: 'rgba(0, 0, 0, 0.4)',
|
||||||
|
inputBorder: 'rgba(0, 0, 0, 0.42)',
|
||||||
|
inputLabel: 'rgba(0, 0, 0, 0.54)',
|
||||||
|
inputText: '#000',
|
||||||
|
|
||||||
|
buttonBg: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
buttonHoverBg: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
buttonActiveBg: 'rgba(0, 0, 0, 0.15)',
|
||||||
|
|
||||||
|
autocompleteItemHoverBg: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
autocompleteItemText: 'rgba(0, 0, 0, 0.8)',
|
||||||
|
autocompleteItemTextSub: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
|
||||||
|
cwButtonBg: '#b1b9c1',
|
||||||
|
cwButtonFg: '#fff',
|
||||||
|
cwButtonHoverBg: '#bbc4ce',
|
||||||
|
|
||||||
|
reactionPickerButtonHoverBg: '#eee',
|
||||||
|
|
||||||
|
reactionViewerBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
|
||||||
|
pollEditorInputBg: '#fff',
|
||||||
|
|
||||||
|
pollChoiceText: '#000',
|
||||||
|
pollChoiceBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
|
||||||
|
urlPreviewBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
urlPreviewBorderHover: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
urlPreviewTitle: '$text',
|
||||||
|
urlPreviewText: ':alpha<0.7<$text',
|
||||||
|
urlPreviewInfo: ':alpha<0.8<$text',
|
||||||
|
|
||||||
|
calendarWeek: '#19a2a9',
|
||||||
|
calendarSaturdayOrSunday: '#ef95a0',
|
||||||
|
calendarDay: '#777',
|
||||||
|
|
||||||
|
materBg: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
|
||||||
|
chartCaption: ':alpha<0.6<$text',
|
||||||
|
|
||||||
|
announcementsBg: '#f3f9ff',
|
||||||
|
announcementsTitle: '#4078c0',
|
||||||
|
announcementsText: '#57616f',
|
||||||
|
|
||||||
|
donationBg: '#fbead4',
|
||||||
|
donationFg: '#777d71',
|
||||||
|
|
||||||
|
googleSearchBg: '#fff',
|
||||||
|
googleSearchFg: '#55595c',
|
||||||
|
googleSearchBorder: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
googleSearchHoverBorder: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
googleSearchHoverButton: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
|
||||||
|
mfmTitleBg: 'rgba(0, 0, 0, 0.07)',
|
||||||
|
mfmQuote: ':alpha<0.6<$text',
|
||||||
|
mfmQuoteLine: ':alpha<0.5<$text',
|
||||||
|
|
||||||
|
suspendedInfoBg: '#ffdbdb',
|
||||||
|
suspendedInfoFg: '#570808',
|
||||||
|
remoteInfoBg: '#fff0db',
|
||||||
|
remoteInfoFg: '#573c08',
|
||||||
|
|
||||||
|
messagingRoomBg: '#fff',
|
||||||
|
messagingRoomInfo: '#000',
|
||||||
|
messagingRoomDateDividerLine: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
messagingRoomDateDividerText: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
messagingRoomMessageInfo: 'rgba(0, 0, 0, 0.4)',
|
||||||
|
messagingRoomMessageBg: '#eee',
|
||||||
|
messagingRoomMessageFg: '#333',
|
||||||
|
|
||||||
|
formButtonBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
formButtonHoverBg: ':alpha<0.12<$primary',
|
||||||
|
formButtonHoverBorder: ':alpha<0.3<$primary',
|
||||||
|
formButtonActiveBg: ':alpha<0.12<$primary',
|
||||||
|
|
||||||
|
desktopHeaderBg: ':lighten<5<$secondary',
|
||||||
|
desktopHeaderFg: '$text',
|
||||||
|
desktopHeaderHoverFg: '#7b8c88',
|
||||||
|
desktopHeaderSearchBg: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
desktopHeaderSearchHoverBg: 'rgba(0, 0, 0, 0.08)',
|
||||||
|
desktopHeaderSearchFg: '#000',
|
||||||
|
desktopNotificationBg: ':alpha<0.9<$secondary',
|
||||||
|
desktopNotificationFg: ':alpha<0.7<$text',
|
||||||
|
desktopNotificationShadow: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
desktopPostFormBg: ':lighten<33<$primary',
|
||||||
|
desktopPostFormTextareaBg: '#fff',
|
||||||
|
desktopPostFormTextareaFg: '#333',
|
||||||
|
desktopPostFormTransparentButtonFg: ':alpha<0.5<$primary',
|
||||||
|
desktopPostFormTransparentButtonActiveGradientStart: ':lighten<30<$primary',
|
||||||
|
desktopPostFormTransparentButtonActiveGradientEnd: ':lighten<33<$primary',
|
||||||
|
desktopRenoteFormFooter: ':lighten<33<$primary',
|
||||||
|
desktopTimelineHeaderShadow: 'rgba(0, 0, 0, 0.08)',
|
||||||
|
desktopTimelineSrc: '#6f7477',
|
||||||
|
desktopTimelineSrcHover: '#525a5f',
|
||||||
|
desktopWindowTitle: '#666',
|
||||||
|
desktopWindowShadow: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
desktopDriveBg: '#fff',
|
||||||
|
desktopDriveFolderBg: ':lighten<31<$primary',
|
||||||
|
desktopDriveFolderHoverBg: ':lighten<27<$primary',
|
||||||
|
desktopDriveFolderActiveBg: ':lighten<25<$primary',
|
||||||
|
desktopDriveFolderFg: ':darken<10<$primary',
|
||||||
|
desktopSettingsNavItem: ':alpha<0.8<$text',
|
||||||
|
desktopSettingsNavItemHover: ':darken<10<$text',
|
||||||
|
|
||||||
|
deckAcrylicColumnBg: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
|
||||||
|
mobileHeaderBg: ':lighten<5<$secondary',
|
||||||
|
mobileHeaderFg: '$text',
|
||||||
|
mobileNavBackdrop: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
mobilePostFormDivider: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
mobilePostFormTextareaBg: '#fff',
|
||||||
|
mobileDriveNavBg: ':alpha<0.75<$secondary',
|
||||||
|
mobileHomeTlItemHover: 'rgba(0, 0, 0, 0.05)',
|
||||||
|
mobileUserPageName: '#757c82',
|
||||||
|
mobileUserPageAcct: '#969ea5',
|
||||||
|
mobileUserPageDescription: '#757c82',
|
||||||
|
mobileUserPageFollowedBg: '#a7bec7',
|
||||||
|
mobileUserPageFollowedFg: '#fff',
|
||||||
|
mobileUserPageStatusHighlight: '#787e86',
|
||||||
|
mobileUserPageHeaderShadow: 'rgba(0, 0, 0, 0.07)',
|
||||||
|
mobileAnnouncement: 'rgba(155, 196, 232, 0.2)',
|
||||||
|
mobileAnnouncementFg: '#3f4967',
|
||||||
|
mobileSignedInAsBg: '#fcfff5',
|
||||||
|
mobileSignedInAsFg: '#2c662d',
|
||||||
|
mobileSignoutBg: '#fff6f5',
|
||||||
|
mobileSignoutFg: '#cc2727',
|
||||||
|
|
||||||
|
reversiBannerGradientStart: '#8bca3e',
|
||||||
|
reversiBannerGradientEnd: '#d6cf31',
|
||||||
|
reversiDescBg: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
reversiListItemShadow: 'rgba(0, 0, 0, 0.15)',
|
||||||
|
reversiMapSelectBorder: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
reversiMapSelectHoverBorder: 'rgba(0, 0, 0, 0.2)',
|
||||||
|
reversiRoomFormShadow: 'rgba(0, 0, 0, 0.1)',
|
||||||
|
reversiRoomFooterBg: ':alpha<0.9<$secondary',
|
||||||
|
reversiGameHeaderLine: '#c4cdd4',
|
||||||
|
reversiGameEmptyCell: 'rgba(0, 0, 0, 0.06)',
|
||||||
|
reversiGameEmptyCellMyTurn: 'rgba(0, 0, 0, 0.12)',
|
||||||
|
reversiGameEmptyCellCanPut: 'rgba(0, 0, 0, 0.9)',
|
||||||
|
},
|
||||||
|
}
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"meta": {
|
|
||||||
"id": "e9c8c01d-9c15-48d0-9b5c-3d00843b5b36",
|
|
||||||
"name": "Pink",
|
|
||||||
"author": "syuilo",
|
|
||||||
"base": "light",
|
|
||||||
"vars": {
|
|
||||||
"primary": "rgb(251, 78, 112)",
|
|
||||||
"secondary": "rgb(255, 218, 240)",
|
|
||||||
"text": "rgb(113, 91, 102)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"renoteGradient": "#ffb1c9",
|
|
||||||
"renoteText": "#ff588d",
|
|
||||||
"quoteBorder": "#ff6c9b"
|
|
||||||
}
|
|
20
src/client/theme/pink.json5
Normal file
20
src/client/theme/pink.json5
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
id: 'e9c8c01d-9c15-48d0-9b5c-3d00843b5b36',
|
||||||
|
|
||||||
|
name: 'Pink',
|
||||||
|
author: 'syuilo',
|
||||||
|
|
||||||
|
base: 'light',
|
||||||
|
|
||||||
|
vars: {
|
||||||
|
primary: 'rgb(251, 78, 112)',
|
||||||
|
secondary: 'rgb(255, 218, 240)',
|
||||||
|
text: 'rgb(113, 91, 102)',
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
renoteGradient: '#ffb1c9',
|
||||||
|
renoteText: '#ff588d',
|
||||||
|
quoteBorder: '#ff6c9b',
|
||||||
|
},
|
||||||
|
}
|
|
@ -196,6 +196,9 @@ module.exports = {
|
||||||
}, {
|
}, {
|
||||||
test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
|
test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
|
||||||
loader: 'url-loader'
|
loader: 'url-loader'
|
||||||
|
}, {
|
||||||
|
test: /\.json5$/,
|
||||||
|
loader: 'json5-loader'
|
||||||
}, {
|
}, {
|
||||||
test: /\.ts$/,
|
test: /\.ts$/,
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
|
|
Loading…
Reference in a new issue