diff --git a/frontend/.stylelintrc b/frontend/.stylelintrc index fb0d550bf..019d72ae1 100644 --- a/frontend/.stylelintrc +++ b/frontend/.stylelintrc @@ -4,6 +4,7 @@ ], "ignoreFiles": [ "frontend/src/Styles/scaffolding.css", + "**/Theme.Park/**/*.css", "**/*.js" ], "rules": { diff --git a/frontend/build/webpack.config.js b/frontend/build/webpack.config.js index 6f324ac95..1c44380f1 100644 --- a/frontend/build/webpack.config.js +++ b/frontend/build/webpack.config.js @@ -124,6 +124,20 @@ module.exports = (env) => { { source: 'frontend/src/Content/robots.txt', destination: path.join(distFolder, 'Content/robots.txt') + }, + + // Theme.Park + { + source: 'frontend/src/Content/Theme.Park/*', + destination: path.join(distFolder, 'Content/Theme.Park') + }, + { + source: 'frontend/src/Content/Theme.Park/Themes/*', + destination: path.join(distFolder, 'Content/Theme.Park/Themes') + }, + { + source: 'frontend/src/Content/Theme.Park/Resources/*', + destination: path.join(distFolder, 'Content/Theme.Park/Resources') } ] } @@ -243,6 +257,19 @@ module.exports = (env) => { } } ] + }, + + { + test: /\.(png)?$/, + use: [ + { + loader: 'file-loader', + options: { + emitFile: false, + name: 'Content/Theme.Park/Resources/[name].[ext]' + } + } + ] } ] } diff --git a/frontend/src/App/ThemeSelector.js b/frontend/src/App/ThemeSelector.js new file mode 100644 index 000000000..f60e2da0f --- /dev/null +++ b/frontend/src/App/ThemeSelector.js @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +const theme = window.Radarr.theme; + +function ThemeSelector({ children }) { + return ( + <> + { + theme !== 'default' && + <> + + + + } + {children} + + ); +} + +ThemeSelector.propTypes = { + children: PropTypes.object.isRequired +}; + +export default ThemeSelector; diff --git a/frontend/src/Components/Form/FormInputGroup.js b/frontend/src/Components/Form/FormInputGroup.js index 1c50e3398..c097624dd 100644 --- a/frontend/src/Components/Form/FormInputGroup.js +++ b/frontend/src/Components/Form/FormInputGroup.js @@ -113,6 +113,8 @@ function FormInputGroup(props) { helpTexts, helpTextWarning, helpLink, + inlineLink, + tooltip, pending, errors, warnings, @@ -182,6 +184,9 @@ function FormInputGroup(props) { !checkInput && helpText && } @@ -263,6 +268,8 @@ FormInputGroup.propTypes = { helpTexts: PropTypes.arrayOf(PropTypes.string), helpTextWarning: PropTypes.string, helpLink: PropTypes.string, + inlineLink: PropTypes.string, + tooltip: PropTypes.string, pending: PropTypes.bool, errors: PropTypes.arrayOf(PropTypes.object), warnings: PropTypes.arrayOf(PropTypes.object) diff --git a/frontend/src/Content/Theme.Park/Resources/blur-noise.png b/frontend/src/Content/Theme.Park/Resources/blur-noise.png new file mode 100644 index 000000000..45e676186 Binary files /dev/null and b/frontend/src/Content/Theme.Park/Resources/blur-noise.png differ diff --git a/frontend/src/Content/Theme.Park/Themes/aquamarine.css b/frontend/src/Content/Theme.Park/Themes/aquamarine.css new file mode 100644 index 000000000..88dd6fe68 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/aquamarine.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: radial-gradient(ellipse at center, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + + --button-color: #009688; + --button-color-hover: #12afa0; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 18, 175, 160; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #0ed2bf; + --link-color-hover: #36e7d6; + --label-text-color: #fff; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #009688; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: rgb(21, 213, 194); + --petio-spinner: invert(39%) sepia(98%) saturate(527%) hue-rotate(129deg) brightness(94%) contrast(101%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 18, 175, 160; +} diff --git a/frontend/src/Content/Theme.Park/Themes/dark.css b/frontend/src/Content/Theme.Park/Themes/dark.css new file mode 100644 index 000000000..d3ecc7ac6 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/dark.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: radial-gradient(circle, #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(circle , #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(circle , #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(circle , #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + + --drop-down-menu-bg: #2d2d2d; + + --button-color: #7a7a7a; + --button-color-hover: #9b9b9b; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 170, 170, 170; + --accent-color-hover: rgba(255, 255, 255, 0.45); + --link-color: #7a7a7a; + --link-color-hover: #fff; + --label-text-color: black; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #6b5; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #e5a00d; + --petio-spinner: invert(35%) sepia(12%) saturate(4%) hue-rotate(2deg) brightness(104%) contrast(86%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 255, 255, 255; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/dracula.css b/frontend/src/Content/Theme.Park/Themes/dracula.css new file mode 100644 index 000000000..f7fbf04f6 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/dracula.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: #282a36; + + --modal-bg-color: #1e2029; + --modal-header-color: #1e2029; + --modal-footer-color: #1e2029; + + --drop-down-menu-bg: #1e2029; + + --button-color: #bd93f9; + --button-color-hover: #ff79c6; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 80, 250, 123; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #ff79c6; + --link-color-hover: #8be9fd; + --label-text-color: #282a36; + + --text:#6272a4; + --text-hover: #95adfa; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #50fa7b; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #bd93f9; + --petio-spinner: invert(79%) sepia(27%) saturate(1033%) hue-rotate(74deg) brightness(104%) contrast(96%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 80, 250, 123; + } \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/hotline.css b/frontend/src/Content/Theme.Park/Themes/hotline.css new file mode 100644 index 000000000..f576a9d6c --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/hotline.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + + --modal-bg-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + --modal-header-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + --modal-footer-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: linear-gradient(90deg, rgba(247,101,184,1) 0%, rgba(21, 95, 165) 100%) center center/cover no-repeat fixed; + + --button-color: #f98dc9; + --button-color-hover: #ff4cb1; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 249, 141, 201; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color:rgb(255, 179, 222); + --link-color-hover: #d7fffe; + --label-text-color: #fff; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #f98dc9; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #f765b8; + --petio-spinner: invert(78%) sepia(17%) saturate(4447%) hue-rotate(290deg) brightness(109%) contrast(95%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 215,255,254; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/hotpink.css b/frontend/src/Content/Theme.Park/Themes/hotpink.css new file mode 100644 index 000000000..864dc7f67 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/hotpink.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: linear-gradient(45deg, #fb3f62 0%, #204c80 37%, #004249 97%) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(circle, #204c80 0%, #000 100%) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(circle, #204c80 0%, #000 100%) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(circle, #204c80 0%, #000 100%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: #204c80; + + --button-color: #fb3f62; + --button-color-hover: #cd4164; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 251, 63, 98; + --accent-color-hover: rgba(var(--accent-color), .8); + --link-color: rgb(0, 255, 157); + --link-color-hover: rgba(0, 255, 157, 0.8); + --label-text-color: #282a36; + + --text:#eee; + --text-hover: #fff; + --text-muted: #999; + + --arr-queue-color: rgb(0, 255, 157); + --plex-poster-unwatched: #fb3f62; + --petio-spinner: invert(29%) sepia(87%) saturate(2199%) hue-rotate(331deg) brightness(115%) contrast(97%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 251, 63, 98; + } + diff --git a/frontend/src/Content/Theme.Park/Themes/nord.css b/frontend/src/Content/Theme.Park/Themes/nord.css new file mode 100644 index 000000000..2de36393c --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/nord.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: #2E3440; + + --modal-bg-color: #3B4252; + --modal-header-color: #434C5E; + --modal-footer-color: #434C5E; + + --drop-down-menu-bg: #3B4252; + + --button-color: #79b8ca; + --button-color-hover: #6a9daf; + --button-text: #2E3440; + --button-text-hover: #D8DEE9; + + --accent-color: 121, 184, 202; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #81A1C1; + --link-color-hover: #88C0D0; + --label-text-color: #222730; + + --text:#D8DEE9; + --text-hover: #ECEFF4; + --text-muted: #81A1C1; + + /*Specials*/ + --arr-queue-color: #A3BE8C; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #D08770; + --petio-spinner: invert(83%) sepia(9%) saturate(1787%) hue-rotate(156deg) brightness(85%) contrast(83%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 121, 184, 202; + } \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/organizr.css b/frontend/src/Content/Theme.Park/Themes/organizr.css new file mode 100644 index 000000000..279336e25 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/organizr.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: #1f1f1f; + + --modal-bg-color: #333; + --modal-header-color: #232323; + --modal-footer-color: #232323; + + --drop-down-menu-bg: #1b1b1b; + + --button-color: #2cabe3; + --button-color-hover: #298fbc; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 44, 171, 227; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #2cabe3; + --link-color-hover: #3cc5ff; + --label-text-color: #fff; + + --text:#96a2b4; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #2cabe3; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #2cabe3; + --petio-spinner: invert(65%) sepia(83%) saturate(2026%) hue-rotate(167deg) brightness(90%) contrast(97%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 44, 171, 227; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/overseerr.css b/frontend/src/Content/Theme.Park/Themes/overseerr.css new file mode 100644 index 000000000..7cffcc5ed --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/overseerr.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: linear-gradient(360deg, hsl(221, 39%, 11%) 65%, hsl(215, 28%, 17%) 100%); + + --modal-bg-color: #1f2937; + --modal-header-color: #1f2937; + --modal-footer-color: #1f2937; + + --drop-down-menu-bg: #374151; + + --button-color: #4f46e5; + --button-color-hover: #6366f1; + --button-text: #e5e7eb; + --button-text-hover: #fff; + + --accent-color: 167, 139, 250; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #6366f1; + --link-color-hover: #a78bfa; + --label-text-color: #000; + + --text: #d1d5db; + --text-hover: #fff; + --text-muted: #9ca3af; + + /*Specials*/ + --arr-queue-color: #6366f1; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #6366f1; + --petio-spinner: invert(24%) sepia(59%) saturate(3411%) hue-rotate(237deg) brightness(91%) contrast(96%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 98, 116, 145; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/plex.css b/frontend/src/Content/Theme.Park/Themes/plex.css new file mode 100644 index 000000000..4dfde0f1f --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/plex.css @@ -0,0 +1,28 @@ +:root { + --main-bg-color: url("Resources/blur-noise.png") repeat scroll 0% 0%, radial-gradient(circle at 0% 100%, rgba(54, 66, 84, 0.55) 0%, rgba(54, 66, 84, 0.043) 70%, rgba(54, 66, 84, 0) 80%), radial-gradient(circle at 100% 100%, rgba(113, 135, 153, 0.55) 0%, rgba(113, 135, 153, 0.043) 70%, rgba(113, 135, 153, 0) 80%), radial-gradient(circle at 100% 0%, rgba(54, 66, 84, 0.55) 0%, rgba(54, 66, 84, 0.043) 70%, rgba(54, 66, 84, 0) 80%), radial-gradient(circle at 0% 0%, rgba(91, 114, 135, 0.55) 0%, rgba(91, 114, 135, 0.043) 70%, rgba(91, 114, 135, 0) 80%), rgb(0, 0, 0) center center/cover no-repeat fixed; + + --modal-bg-color: #1f2326; + --modal-header-color: #1f2326; + --modal-footer-color: #323232; + + --drop-down-menu-bg: #191a1c; + + --button-color: #cc7b19; + --button-color-hover: #e59029; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 229, 160, 13; + --accent-color-hover: #ffc107; + --link-color: #e5a00d; + --link-color-hover: #fff; + --label-text-color: #fff; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + --arr-queue-color: #27c24c; + --petio-spinner: invert(0%) sepia(0%) saturate(100%) hue-rotate(0deg) brightness(100%) contrast(100%); + --gitea-color-primary-dark-4: 255, 193, 7; +} diff --git a/frontend/src/Content/Theme.Park/Themes/radarr-darker.css b/frontend/src/Content/Theme.Park/Themes/radarr-darker.css new file mode 100644 index 000000000..1b7f3bca4 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/radarr-darker.css @@ -0,0 +1,124 @@ +:root { + --main-bg-color: #454545; + + --modal-bg-color: #595959; + --modal-header-color: #595959; + --modal-footer-color: #595959; + + --drop-down-menu-bg: #606060; + + --button-color: #5899eb; + --button-color-hover: #4b91ea; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 255, 194, 48; + --accent-color-hover: rgb(255, 194, 48, .8); + --link-color: rgb(255, 194, 48); + --link-color-hover: rgb(255, 194, 48, .8); + --label-text-color: #eee; + + --text: #ccc; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #5d9cec; + --side-menu-active: #333333; + --scroller-hover: #606060; + --scroller: #707070; + --border-color: #606060; + --label-color: #707070; + --label-info: #5d9cec; + --header-color: #464b51; + --side-menu-color: #595959; +} + +/* HEADER */ + +[class*="PageHeader-header-"] { + background-color: var(--header-color); + color: #fff; +} + +[class*="PageToolbar-toolbar-"] { + background-color: #707070; + color: var(--text); +} + +/* SIDE MENU */ + +[class*="PageSidebar-sidebar-"] { + background-color: var(--side-menu-color); + color: #fff; +} + +[class*=PageSidebarItem-link-]:focus { + color: rgb(var(--accent-color)) !important; +} + +[class*=PageSidebarItem-isActiveLink-] { + color: var(--link-color) !important; +} + +[class*=PageSidebarItem-isActiveParentLink-] { + background-color: var(--side-menu-active); +} + +/* SCROLLER */ +[class*=ImportSeriesSelectSeries-results-]::-webkit-scrollbar-thumb:hover, +[class*=OverlayScroller-thumb-]:hover { + background-color: var(--scroller-hover) !important; +} + +[class*="OverlayScroller-thumb-"], +[class*=Scroller-scroller-]::-webkit-scrollbar-thumb { + background-color: var(--scroller) !important; +} + +/* MODALS */ + +[class*=ModalHeader-modalHeader-], +[class*=FieldSet-legend-] { + border-bottom: 1px solid var(--border-color); +} + +[class*=ModalFooter-modalFooter-] { + border-top: 1px solid var(--border-color); +} + +/* LABLES */ + +[class*="Label-default-"] { + border-color: var(--label-color); + background-color: var(--label-color); + color: white; +} + +[class*="Label-info-"]:not([class*="PageSidebarItem-status-"] [class*="Label-info-"]) { + border-color: var(--label-info); + background-color: var(--label-info); + color: #fff; +} + +/* SETTINGS */ + +[class*=Settings-link-] { + border-bottom: 1px solid var(--border-color); +} + +/* SEARCH DROP DOWN */ + +[class*="MovieSearchInput-containerOpen-"] [class*="MovieSearchInput-movieContainer-"] { + border: 1px solid var(--drop-down-menu-bg); + background-color: var(--drop-down-menu-bg); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%); + color: #e1e2e3; +} + +/* SERIES PAGE */ + +[class*="MovieIndexPoster-controls-"] { + background-color: var(--label-color) !important; + color: #fff !important; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/space-gray.css b/frontend/src/Content/Theme.Park/Themes/space-gray.css new file mode 100644 index 000000000..bcfda52b0 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/space-gray.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: radial-gradient(ellipse at center, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + + --button-color: #607D8B; + --button-color-hover: #81a6b7; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 129, 166, 183; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #81a6b7; + --link-color-hover: #9adfff; + --label-text-color: #fff; + + --text:#bbb; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #81a6b7; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #70aeca; + --petio-spinner: invert(50%) sepia(31%) saturate(341%) hue-rotate(155deg) brightness(88%) contrast(85%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 129, 166, 183; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/radarr-base.css b/frontend/src/Content/Theme.Park/radarr-base.css new file mode 100644 index 000000000..7e122cbc4 --- /dev/null +++ b/frontend/src/Content/Theme.Park/radarr-base.css @@ -0,0 +1,1101 @@ +/* dP dP dP */ +/* 88 88 88 */ +/* d8888P 88d888b. .d8888b. 88d8b.d8b. .d8888b. 88d888b. .d8888b. 88d888b. 88 .dP */ +/* 88 88' `88 88ooood8 88'`88'`88 88ooood8 88' `88 88' `88 88' `88 88888" */ +/* 88 88 88 88. ... 88 88 88 88. ... 88. .88 88. .88 88 88 `8b. */ +/* dP dP dP `88888P' dP dP dP `88888P' 88 88Y888P' `88888P8 dP dP `YP */ +/* 88 */ +/* dP */ + +/* Made by @gilbN */ +/* https://github.com/gilbN/theme.park */ +:root { + --calendar-in-cinemas: 53, 197, 244; + --calendar-downloading: 122 67 182; + --calendar-unmonitored: 173 173 173; + --calendar-unaired: 93 156 236; + --calendar-missing: 240 80 80; + --calendar-available: 39 194 76; + } + +body { + background: var(--main-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +/* Froms */ + +[class*="FormInputHelpText-helpText-"] { + color: var(--text); +} + +[class*="FormInputGroup-inputUnit-"] { + color: var(--text) !important; +} + +/* LINKS */ +[class*="Link-to-"] { + color: var(--text); +} + +[class*="Link-to-"]:hover { + color: var(--text-hover); + text-decoration: none; +} + +a { + color: var(--link-color); +} + +a:hover { + color: var(--link-color-hover); +} + +[class*="TableRowCell-cell-"] [class*="Link-to-"] { + color: var(--link-color) !important; +} + +[class*="TableRowCell-cell-"] [class*="Link-to-"]:hover { + color: var(--link-color-hover) !important; +} + +/* Buttons */ + +[class*="Button-default-"] { + color: var(--button-text); + background-color: var(--button-color); + border-color: transparent; +} + +[class*="Button-default-"]:hover { + border-color: transparent; + background-color: var(--button-color-hover) !important; + color: var(--button-text-hover); +} + +[class*="Button-primary-"] { + border-color: transparent; + background-color: var(--button-color); + color: var(--button-text); +} + +[class*="Button-primary-"]:hover { + border-color: transparent; + background-color: var(--button-color-hover) !important; + color: var(--button-text-hover); +} + +[class*="Button-success-"] { + border-color: var(--button-color); + background-color: var(--button-color); + color: var(--button-text); +} + +[class*="Button-success-"]:hover { + border-color: var(--button-color-hover); + background-color: var(--button-color-hover); + color: var(--button-text-hover); +} + +/* LOADING PAGE */ +[class*="ErrorPage-page-"], +[class*="ErrorPage-version-"], +[class*="LoadingMessage-loadingMessage-"] { + color: var(--text); +} + +[class*="LoadingIndicator-ripple-"] { + border: 2px solid #fff; +} + +/* MODAL */ +[class*="ModalHeader-modalHeader-"] { + background: var(--modal-header-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text-hover); + border-bottom: 1px solid rgb(var(--accent-color)); +} + +[class*="ModalContent-modalContent-"] { + background: var(--modal-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +[class*="ModalFooter-modalFooter-"] { + background: var(--modal-footer-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: #fff; + border-top: 1px solid rgb(var(--accent-color)); +} + +[class*="ModalContent-closeButton-"]:hover { + color: #fff; +} + +/* INPUT */ +[class*="TagInput-internalInput-"] { + background-color: transparent; + color: #fff; +} + +[class*="SelectInput-select-"] { + background-color: rgba(0, 0, 0, 0.25) !important; +} + +[class*="SelectInput-select-"]:active, +[class*="SelectInput-select-"]:focus { + background: #1e1e1e !important; +} + +[class*="AutoSuggestInput-suggestionsList-"], +[class*="AutoSuggestInput-suggestionsContainerOpen-"], +[class*="AutoSuggestInput-suggestionsContainer-"] { + background-color: #323232 !important; + color: white; + border: none !important; +} + +[class*="AutoSuggestInput-suggestionHighlighted-"] { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="CheckInput-primaryIsChecked-"] { + border-color: rgb(var(--accent-color)) !important; + background-color: rgb(var(--accent-color)) !important; + color: var(--label-text-color) !important; +} + +[class*="CheckInput-input-"][class*="CheckInput-isNotChecked-"] { + background: #fff; +} + +/* HEADER */ + +[class*="PageHeader-header-"] { + background-color: rgba(0, 0, 0, .35); +} + +/* SEARCH DROPDOWN HEADER */ + +[class*="PageHeader-donate-"] { + color: #c4273c !important; +} + +/* RADARR SPECIFIC */ +[class*="MovieSearchInput-sectionTitle-"] { + color: #fff; +} + +[class*="MovieSearchInput-containerOpen-"] [class*="MovieSearchInput-movieContainer-"] { + border: none !important; + background: var(--modal-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: #fff !important; + box-shadow: 0 0 10px 1px transparent !important; +} + +[class*="MovieSearchInput-highlighted-"] { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="MovieSearchInput-movieContainer-"]::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.25); +} + +/* SIDE MENU */ +[class*="PageSidebar-sidebarContainer-"] { + background-color: rgba(0, 0, 0, .25); +} + +[class*="PageSidebar-sidebar-"] { + background-color: transparent; +} + +[class*="PageSidebarItem-link-"]:hover { + color: rgb(var(--accent-color)); + text-decoration: none; +} + +[class*="PageSidebarItem-isActiveLink-"], +[class*="PageSidebarItem-isActiveLink-"]:hover, +[class*="PageSidebarItem-link-"]:focus { + color: rgb(var(--accent-color)) !important; +} + +[class*="PageSidebarItem-isActiveParentLink-"] { + background-color: rgba(0, 0, 0, 0.15); +} + +@media only screen and (max-width: 768px) { + [class*="PageSidebar-sidebarContainer-"] { + background: var(--main-bg-color) !important; + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + } +} + +[class*="PageSidebarItem-isActiveItem-"] { + border-left: 3px solid rgb(var(--accent-color)); +} + +/* MOVIES PAGE */ +/* RADARR SPECIFIC */ +[class*="MovieIndexPoster-controls-"] { + background-color: rgb(var(--accent-color)) !important; +} + +[class*="MovieTitlesTableContent-blankpad-"], +[class*="ExtraFileTableContent-blankpad-"], +[class*="MovieHistoryTableContent-blankpad-"] { + color: var(--text); +} + +/* OVERVIEW PAGE */ + +[class*="MovieIndexOverviews-container-"], +[class*="MovieIndexOverviews-container-"]:hover { + background-color: transparent !important; +} + +[class*="MovieIndexOverview-container-"]:hover [class*="MovieIndexOverview-content-"] { + background-color: transparent; +} + +[class*="AddListMovieOverview-container-"]:hover [class*="AddListMovieOverview-content-"] { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="AddListMoviePoster-title-"] { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="MovieIndexOverview-content-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="MovieIndexOverview-link-"]:hover { + text-decoration: none; +} + +[class*="ProgressBar-container-"] { + background-color: rgba(0, 0, 0, 0.25); +} + +[class*=".ProgressBar-purple-"] { + background-color: rgb(var(--accent-color)); +} + +/* MOVIE PAGE */ +[class*="MovieDetailsSeason-season-"], +[class*="MovieDetailsSeason-collapseButtonContainer-"] { + border: none !important; + background-color: rgba(0, 0, 0, .25) !important; +} + +[class*="MovieDetailsSeason-actionButton-"], +[class*="MovieDetailsSeason-collapseButtonIcon-"] { + color: var(--text) !important; +} + +.fa-search:hover { + color: var(--text-hover) !important; +} + +[class*="Icon-default-"]:hover:not([class*="Label-large-"] [class*="Icon-default-"], [class*="PathInput-fileBrowserButton-"]svg) { + color: var(--text-hover); +} + +[class*="MonitorToggleButton-toggleButton-"] { + color: #dadada; +} + + +[class*="ProtocolLabel-torrent-"] { + border-color: #00853d !important; + background-color: #00853d !important; + color: #fff !important; +} + +[class*="ProtocolLabel-usenet-"] { + border-color: #17b1d9 !important; + background-color: #17b1d9 !important; + color: #fff !important; +} + +[class*="MovieDetailsSeason-seasonNumber-"] { + color: #fff; +} + +[class*="MovieDetailsSeason-collapseButtonContainer-"] { + border: none !important; + background-color: rgba(0, 0, 0, .25) !important; +} + +[class*="MovieFileEditorTable-container-"] { + border: 1px solid transparent; + background-color: rgba(0, 0, 0, 0.25); +} + +[class*="ExtraFileTable-container-"] { + border: 1px solid transparent; + background-color: rgba(0, 0, 0, .25); +} + +[class*="Popover-title-"], +[class*="SeasonInfo-title-"], +[class*="Popover-body-"], +[class*="Tooltip-body-"] { + background: var(--modal-bg-color) !important; + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; +} + +[class*="Tooltip-tooltipContainer-"] { + color: #fff; +} + +[class*="Tooltip-bottom-"][class*="Tooltip-default-"] { + border-bottom-color: var(--text); +} + +[class*="Tooltip-right-"][class*="Tooltip-default-"] { + border-right-color: var(--text); +} + +[class*="EpisodeTitleLink-link-"]:hover { + color: #fff; + text-decoration: none; +} + +[class*="IconButton-button-"] { + color: var(--text); +} + +[class*="Label-default-"] [class*="IconButton-button-"], +[class*="Label-small-"] [class*="IconButton-button-"]:hover { + color: var(--label-text-color); +} + +[class*="IconButton-button-"]:hover { + background-color: transparent; + color: var(--text-hover); +} + +[class*="Table-tableContainer-"] [class*="IconButton-button-"]:hover { + background-color: transparent; + color: var(--text-hover); +} + +[class*="Label-default-"] { + border-color: rgb(var(--accent-color)); + background-color: rgb(var(--accent-color)); + color: var(--label-text-color); +} + +[class*="Label-info-"] { + border-color: rgb(var(--accent-color)); + background-color: rgb(var(--accent-color)); + color: var(--label-text-color); +} + +[class*="PageSidebarItem-status-"][class*="Label-info-"] { + border-color: var(--arr-queue-color); + background-color: var(--arr-queue-color); + color: var(--label-text-color); +} + +[class*="MovieDetails-selectedTab-"] { + border-bottom: 4px solid rgb(var(--accent-color)); +} + +[class*="MovieDetails-tabList-"] { + color: var(--text-hover); +} + +/* Table options*/ +[class*="TableOptionsColumn-column-"] { + background: rgba(0, 0, 0, .25); + color: var(--text-hover); + border: none; +} + +[class*="TableHeaderCell-headerCell-"] { + color: var(--text-hover); +} + +[class*="Table-table-"] { + color: var(--text); +} + +[class*="TableRow-row-"]:hover { + background-color: hsla(0, 0%, 100%, .08); + color: var(--text-hover); +} + +[class*="TableRowCell-cell-"] { + border-top: 1px solid rgb(255 255 255 / 25%); +} + +/* TOP MENU SERIES */ +[class*="PageToolbar-toolbar-"] { + background-color: rgba(0, 0, 0, .25); + color: var(--text); +} + +[class*="PageToolbarButton-label-"] { + color: var(--text); +} + +[class*="PageToolbarButton-toolbarButton-"][class*="PageToolbarButton-isDisabled-"] { + opacity: .5; + color: var(--text); +} + +[class*="PageToolbarButton-toolbarButton-"][class*="PageToolbarButton-isDisabled-"]:hover, +[class*="PageToolbarButton-isDisabled-"]:hover { + color: var(--text) !important; +} + +[class*="PageToolbarButton-label-"] { + color: var(--text); +} + +[class*="PageToolbarButton-toolbarButton-"]:hover { + color: rgb(var(--accent-color)); +} + +[class*="MenuButton-menuButton-"]:hover { + color: rgb(var(--accent-color)); +} + +/* POSTERS */ +[class*="MovieIndexPoster-title-"], +[class*="MovieIndexPoster-nextAiring-"], +[class*="MovieIndexPosterInfo-info-"], +[class*="MovieIndexPosterInfo-info-"], +[class*="MovieCreditPoster-title-"] { + background-color: rgba(255, 255, 255, 0.08); + color: var(--text-hover); +} + +/* LIBRARY TOP HEADER DROPDOWN */ +[class*="MenuItem-menuItem-"], +[class*="MenuContent-menuContent-"] { + background: var(--drop-down-menu-bg); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +[class*="MenuContent-scroller-"] { + box-shadow: black 0 0 5px 0px; +} + +[class*="MenuItem-menuItem-"]:hover, +[class*="MenuItem-menuItem-"]:focus { + background: hsla(0, 0%, 100%, .08) !important; + color: var(--text-hover); + text-decoration: none; +} + +[class*="MenuItemSeparator-separator-"] { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +/* ALPHABET JUMP BAR */ +[class*="PageJumpBar-jumpBar-"] { + color: #FFF; +} + +/* MINI RIGHT SCROLL BAR */ +[class*="OverlayScroller-thumb-"], +[class*="Scroller-scroller-"]::-webkit-scrollbar-thumb { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="OverlayScroller-thumb-"]:hover, +[class*="Scroller-scroller-"]::-webkit-scrollbar-thumb:hover { + background-color: rgba(255, 255, 255, 0.25) !important; +} + +/* ADD NEW */ + +[class*="EnhancedSelectInput-options-"] { + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 4px; + background: var(--drop-down-menu-bg); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +[class*="EnhancedSelectInputOption-isSelected-"], +[class*="EnhancedSelectInputOption-isSelected-"]:hover { + background-color: rgba(255, 255, 255, 0.20) !important; + color: var(--text-hover); +} + +[class*="EnhancedSelectInputOption-option-"]:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="HintedSelectInputOption-hintText-"] { + color: var(--text); +} + +/* SEARCH BAR */ +[class*="Input-input-"], +[class*="AddNewMovie-searchIconContainer-"], +[class*="CheckInput-isIndeterminate-"] { + border: none; + background-color: rgba(255, 255, 255, 0.08); + color: #fff; +} + +[class*="MovieSearchInput-container-"] [class*="Input-input-"] { + background: transparent; + border-bottom: solid 1px #fff; +} + +[class*="MovieSearchInput-container-"] [class*="Input-input-"]:focus { + border-bottom: none; + background: transparent; +} + +[class*="MovieSearchResult-alternateTitle-"] { + color: #fff; + font-size: 12px; +} + +[class*="AddNewMovieSearchResult-year-"] { + color: #fff !important; +} + +[class*="Input-input-"]:focus { + outline: 0; + border-color: #fff; + box-shadow: none; + background-color: rgba(255, 255, 255, 0.25); +} + +[class*="TagInput-input-"][class*="TagInput-isFocused-"] { + outline: 0; + border-color: #fff; + box-shadow: none; +} + +/* TEXT COLOR */ + +[class*="PageContentBody-innerContentBody-"], +[class*="PageContentBody-contentBody-"], +.react-tabs__tab-panel .react-tabs__tab-panel--selected>div { + color: var(--text); +} + +/* SEARCH RESULTS */ +[class*="AddNewMovieSearchResult-searchResult-"], +[class*="AddNewMovieSearchResult-underlay-"] { + background-color: transparent !important; +} + +[class*="AddNewMovieSearchResult-searchResult-"]:hover, +[class*="AddNewMovieSearchResult-underlay-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="AddNewmovieModalContent-year-"] { + color: #fff; +} + +[class*="RootFolderSelectInputSelectedValue-movieFolder-"], +[class*="RootFolderSelectInputSelectedValue-freeSpace-"] { + color: #fff; +} + +[class*="RootFolderSelectInputOption-freeSpace-"], +[class*="RootFolderSelectInputOption-movieFolder-"] { + color: var(--text-muted); +} + +/* MOVE THIS */ +input::-webkit-input-placeholder { + color: var(--text); +} + +input:focus::-webkit-input-placeholder { + color: var(--text-hover); +} + +/* Firefox < 19 */ +input:-moz-placeholder { + color: var(--text); +} + +input:focus:-moz-placeholder { + color: var(--text-hover); +} + +/* Firefox > 19 */ +input::-moz-placeholder { + color: var(--text); +} + +input:focus::-moz-placeholder { + color: var(--text-hover); +} + +/* Internet Explorer 10 */ +input:-ms-input-placeholder { + color: var(--text); +} + +input:focus:-ms-input-placeholder { + color: var(--text-hover); +} + +/* IMPORT */ + +[class*="FieldSet-legend-"] { + color: var(--text-hover); + border-bottom: 1px solid rgb(var(--accent-color)); +} + +[class*="VirtualTableRow-row-"]:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +/* Drop down menu/button*/ +[class*="ImportMovieSelectMovie-button-"] { + border: none !important; + background-color: rgba(0, 0, 0, 0.25) !important; +} + +[class*="ImportMovieSelectMovie-content-"], +[class*="ImportMovieSelectMovie-searchIconContainer-"] { + border: none; + background: var(--modal-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: white; +} + +[class*="ImportMovieSearchResult-movie-"]:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="ImportMovieTitle-year-"] { + color: var(--text-muted); +} + +/* DISCOVER */ +[class*="DiscoverMovieOverview-link-"] { + color: var(--text); +} + +[class*="DiscoverMovieOverview-link-"]:hover { + color: var(--text-hover); + text-decoration: none; +} + +[class*="DiscoverMoviePoster-title-"], +[class*="DiscoverMoviePosterInfo-info-"] { + background-color: rgba(255, 255, 255, 0.08); + color: var(--text-hover); +} + +/*Title*/ +[class*="AddListMovieOverview-link-"] { + color: var(--text); +} + +[class*="AddListMovieOverview-link-"]:hover { + color: #fff; +} + +[class*="AddListMovieOverview-content-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="PageJumpBarItem-jumpBarItem-"]:hover { + color: #fff; + background: hsla(0, 0%, 100%, .08); +} + +/*Posters*/ +[class*="AddListMoviePoster-title-"] { + background-color: rgba(255, 255, 255, 0.08); + color: #fff; +} + +/* MASS EDITOR */ +/* FOOTER */ +[class*="PageContentFooter-contentFooter-"] { + border: none; + background-color: rgba(0, 0, 0, .25); + color: #FFF; +} + +/* CALENDAR */ +[class*="CalendarEvent-downloaded-"] { + background: rgb(var(--calendar-available) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-downloaded-"]:hover { + background: rgb(var(--calendar-available) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-missing-"] { + background: rgb(var(--calendar-missing) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-missing-"]:hover { + background: rgba(var(--calendar-missing) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-unreleased-"] { + background: rgb(var(--calendar-unaired) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-unreleased-"]:hover { + background: rgb(var(--calendar-unaired) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-unmonitored-"] { + background: rgb(var(--calendar-unmonitored) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-unmonitored-"]:hover { + background: rgb(var(--calendar-unmonitored) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-downloading-"] { + background: rgb(var(--calendar-downloading) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-downloading-"]:hover { + background: rgb(var(--calendar-downloading) / .5) !important; + border-left-color: transparent !important; +} + +[class*="DayOfWeek-dayOfWeek-"] { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="CalendarDay-dayOfMonth-"] { + border-bottom: 1px solid hsla(0, 0%, 100%, .08); + background-color: rgba(0, 0, 0, .25); +} + +[class*="CalendarDay-isToday-"], +[class*="DayOfWeek-isToday-"] { + background-color: hsla(0, 0%, 100%, .25) !important; +} + +[class*="CalendarDay-day-"], +[class*="CalendarDays-days-"] { + -webkit-box-flex: 1; + -webkit-flex: 1 0 14.28%; + flex: 1 0 14.28%; + overflow: hidden; + min-height: 70px; + border-bottom: 1px solid hsla(0, 0%, 100%, .08); + border-left: 1px solid hsla(0, 0%, 100%, .08); + border-right: 1px solid hsla(0, 0%, 100%, .08); +} + +[class*="CalendarEvent-movieTitle-"], +[class*="CalendarEvent-movieInfo-"], +[class*="CalendarEvent-episodeInfo-"], +[class*="CalendarEvent-airTime-"] { + color: #fff !important; +} + +[class*="CalendarEvent-event-"] { + border-bottom: 1px solid transparent; +} + +[class*="CalendarEventGroup-eventGroup-"] { + border-bottom: 1px solid hsla(0, 0%, 100%, .08) !important; +} + +[class*="CalendarEventGroup-movieTitle-"] { + color: #fff !important; +} + +[class*="CalendarEventGroup-airTime-"] { + color: var(--text); +} + +[class*="CalendarEventGroup-episodeInfo-"] { + color: var(--text); +} + +/* calendar agenda */ +[class*="AgendaEvent-event-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +/* SETTINGS */ +[class*="Settings-link-"] { + color: var(--text-hover); + border-bottom: 1px solid rgb(var(--accent-color)); +} + +[class*="Settings-summary-"] { + color: var(--text); +} + +[class*="FormLabel-large-"] { + color: var(--text-hover); +} + +[class*="FormLabel-isAdvanced-"] { + color: #ff902b; +} + +/* MEDIA MANAGEMENT - FILE NAME TOKENS */ +[class*="NamingOption-small-"] { + border: 1px solid transparent; +} + +[class*="NamingOption-token-"] { + background-color: rgba(255, 255, 255, 0.15); +} + +[class*="NamingOption-token-"] { + background-color: rgba(255, 255, 255, 0.15); +} + +[class*="NamingOption-example-"] { + background-color: rgba(255, 255, 255, 0.25); +} + +[class*="NamingOption-option-"] { + border: 1px solid transparent; +} + +[class*="NamingOption-option-"]:hover [class*="NamingOption-token-"] { + background-color: rgba(255, 255, 2550, 0.25); +} + +[class*="NamingOption-option-"]:hover [class*="NamingOption-example-"] { + background-color: rgba(255, 255, 2550, 0.35); +} + +/* PROFILES */ +[class*="Card-card-"], +[class*="QualityProfiles-addQualityProfile-"] { + background-color: rgba(0, 0, 0, .45); + box-shadow: 0 0 10px 1px #000000; + color: var(--text); +} + +[class*="Card-card-"]:hover { + color: var(--text-hover); +} + +[class*="QualityProfiles-center-"], +[class*="LanguageProfiles-center-"], +[class*="ReleaseProfiles-center-"] { + background-color: transparent; + border: none; +} + +[class*="QualityProfileItem-qualityProfileItem-"], +[class*="QualityProfileItemGroup-qualityProfileItemGroup-"], +[class*="LanguageProfileItem-languageProfileItem-"] { + border: none; + background-color: rgba(0, 0, 0, .25); + color: #FFF; +} + +[class*="QualityProfileItemGroup-qualityProfileItemGroup-"][class*="QualityProfileItemGroup-editGroups-"] { + background: rgba(0, 0, 0, 0.25); +} + +[class*="KeyValueListInputItem-keyInput-"], +[class*="KeyValueListInputItem-valueInput-"] { + border: none; + background: transparent; + color: white; +} + +[class*="QualityProfileFormatItem-qualityProfileFormatItem-"] { + border: 1px solid transparent; + background: rgba(0, 0, 0, .25); +} + +[class*="QualityDefinitions-sizeLimitHelpText-"] { + color: var(--text); +} + +/* PROFILES */ +[class*="Indexers-center-"] { + background-color: transparent; + border: none; +} + +/* DOWNLOAD CLIENTS */ +[class*="DownloadClients-center-"] { + background-color: transparent; + border: none; +} + +/* CONNECTIONS */ +[class*="Notifications-center-"] { + background-color: transparent; + border: none; +} + +/* LISTS */ +[class*="ImportLists-center-"] { + background-color: transparent; + border: none; +} + +/* LOG */ +[class*="Alert-info-"] { + border-color: transparent; + background-color: rgba(0, 0, 0, 0.25); + color: #FFC107; +} + +/* INDEXER */ +[class*="Restrictions-center-"] { + border: 1px solid transparent; + background-color: transparent; +} + +/* LISTS */ +[class*="NetImports-center-"] { + border: 1px solid transparent; + background-color: transparent; +} + +/* CUSTOM FORMAT */ +[class*="CustomFormats-center-"], +[class*="EditCustomFormatModalContent-center-"] { + border: 1px solid transparent; + background-color: transparent; +} + +/* Login Page */ + +.panel-body { + background-color: rgba(0, 0, 0, 0.25); + color: var(--text); +} + +.panel-header { + background-color: rgba(0, 0, 0, 0.45); +} + +.forgot-password { + color: var(--text) !important; +} + +input[type=email], +input[type=password] { + border: none; + background-color: rgba(255, 255, 255, 0.08); + color: #FFF; +} + +.button { + border-color: var(--button-color); + background-color: var(--button-color); + cursor: pointer; +} + +.button:hover { + border-color: var(--button-color-hover); + background-color: var(--button-color-hover); + color: #fff; + text-decoration: none; +} + +.form-input:focus { + outline: 0; + border-color: #fff; + box-shadow: none; + background-color: rgba(255, 255, 255, 0.25); +} + +/* Custom filter */ +[class*="FilterBuilderRow-filterRow-"]:hover { + background-color: transparent; +} + +[class*="CustomFilter-customFilter-"]:hover { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="SelectMovieModalContent-path-"] { + color: var(--text); +} \ No newline at end of file diff --git a/frontend/src/Settings/UI/UISettings.js b/frontend/src/Settings/UI/UISettings.js index 65462863c..1fda7c4b8 100644 --- a/frontend/src/Settings/UI/UISettings.js +++ b/frontend/src/Settings/UI/UISettings.js @@ -48,6 +48,21 @@ export const movieRuntimeFormatOptions = [ { key: 'minutes', value: '75 mins' } ]; +export const themeOptions = [ + { key: 'default', value: 'Default' }, + { key: 'aquamarine', value: 'Aquamarine' }, + { key: 'dark', value: 'Dark' }, + { key: 'dracula', value: 'Dracula' }, + { key: 'hotline', value: 'Hotline' }, + { key: 'hotpink', value: 'Hotpink' }, + { key: 'nord', value: 'Nord' }, + { key: 'organizr', value: 'Organizr' }, + { key: 'overseerr', value: 'Overseerr' }, + { key: 'plex', value: 'Plex' }, + { key: 'radarr-darker', value: 'Radarr Darker' }, + { key: 'space-gray', value: 'Space Gray' } +]; + class UISettings extends Component { // @@ -184,6 +199,21 @@ class UISettings extends Component {
+ + {translate('Theme')} + + + {translate('SettingsEnableColorImpairedMode')} , + + + , document.getElementById('root') ); diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 46e2f396c..550ce05a7 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -43,6 +43,7 @@ namespace NzbDrone.Core.Configuration string SslCertPassword { get; } string UrlBase { get; } string UiFolder { get; } + string Theme { get; } bool UpdateAutomatically { get; } UpdateMechanism UpdateMechanism { get; } string UpdateScriptPath { get; } @@ -140,6 +141,8 @@ namespace NzbDrone.Core.Configuration public int SslPort => GetValueInt("SslPort", 9898); + public string Theme => GetValue("Theme", "default"); + public bool EnableSsl => GetValueBoolean("EnableSsl", false); public bool LaunchBrowser => GetValueBoolean("LaunchBrowser", true); diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index c41194e9f..109188fe6 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -976,6 +976,9 @@ "TestAllIndexers": "Test All Indexers", "TestAllLists": "Test All Lists", "TheLogLevelDefault": "The log level defaults to 'Info' and can be changed in", + "Theme": "Theme", + "ThemeHelpText": "Themes maintained by {0}!", + "ThemeHelpTextWarning": "Reload required after saving", "ThisCannotBeCancelled": "This cannot be cancelled once started without restarting Radarr.", "ThisConditionMatchesUsingRegularExpressions": "This condition matches using Regular Expressions. Note that the characters {0} have special meanings and need escaping with a {1}", "Time": "Time", diff --git a/src/Radarr.Api.V3/Config/ConfigController.cs b/src/Radarr.Api.V3/Config/ConfigController.cs index e9ab4cbfe..e630612ed 100644 --- a/src/Radarr.Api.V3/Config/ConfigController.cs +++ b/src/Radarr.Api.V3/Config/ConfigController.cs @@ -10,7 +10,7 @@ namespace Radarr.Api.V3.Config public abstract class ConfigController : RestController where TResource : RestResource, new() { - private readonly IConfigService _configService; + protected readonly IConfigService _configService; protected ConfigController(IConfigService configService) { @@ -32,7 +32,7 @@ namespace Radarr.Api.V3.Config } [RestPutById] - public ActionResult SaveConfig(TResource resource) + public virtual ActionResult SaveConfig(TResource resource) { var dictionary = resource.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public) diff --git a/src/Radarr.Api.V3/Config/HostConfigController.cs b/src/Radarr.Api.V3/Config/HostConfigController.cs index 21d381820..ee3fa7bed 100644 --- a/src/Radarr.Api.V3/Config/HostConfigController.cs +++ b/src/Radarr.Api.V3/Config/HostConfigController.cs @@ -86,7 +86,7 @@ namespace Radarr.Api.V3.Config [HttpGet] public HostConfigResource GetHostConfig() { - var resource = _configFileProvider.ToResource(_configService); + var resource = HostConfigResourceMapper.ToResource(_configFileProvider, _configService); resource.Id = 1; var user = _userService.FindUser(); diff --git a/src/Radarr.Api.V3/Config/UiConfigController.cs b/src/Radarr.Api.V3/Config/UiConfigController.cs index 9904c15ea..3c6c22200 100644 --- a/src/Radarr.Api.V3/Config/UiConfigController.cs +++ b/src/Radarr.Api.V3/Config/UiConfigController.cs @@ -1,19 +1,39 @@ +using System.Linq; +using System.Reflection; +using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Configuration; using Radarr.Http; +using Radarr.Http.REST.Attributes; namespace Radarr.Api.V3.Config { [V3ApiController("config/ui")] public class UiConfigController : ConfigController { - public UiConfigController(IConfigService configService) + private readonly IConfigFileProvider _configFileProvider; + + public UiConfigController(IConfigService configService, IConfigFileProvider configFileProvider) : base(configService) { + _configFileProvider = configFileProvider; } protected override UiConfigResource ToResource(IConfigService model) { - return UiConfigResourceMapper.ToResource(model); + return UiConfigResourceMapper.ToResource(_configFileProvider, model); + } + + [RestPutById] + public override ActionResult SaveConfig(UiConfigResource resource) + { + var dictionary = resource.GetType() + .GetProperties(BindingFlags.Instance | BindingFlags.Public) + .ToDictionary(prop => prop.Name, prop => prop.GetValue(resource, null)); + + _configFileProvider.SaveConfigDictionary(dictionary); + _configService.SaveConfigDictionary(dictionary); + + return Accepted(resource.Id); } } } diff --git a/src/Radarr.Api.V3/Config/UiConfigResource.cs b/src/Radarr.Api.V3/Config/UiConfigResource.cs index bb1fef871..a7f773024 100644 --- a/src/Radarr.Api.V3/Config/UiConfigResource.cs +++ b/src/Radarr.Api.V3/Config/UiConfigResource.cs @@ -21,27 +21,29 @@ namespace Radarr.Api.V3.Config public bool EnableColorImpairedMode { get; set; } public int MovieInfoLanguage { get; set; } public int UILanguage { get; set; } + public string Theme { get; set; } } public static class UiConfigResourceMapper { - public static UiConfigResource ToResource(IConfigService model) + public static UiConfigResource ToResource(this IConfigFileProvider model, IConfigService configService) { return new UiConfigResource { - FirstDayOfWeek = model.FirstDayOfWeek, - CalendarWeekColumnHeader = model.CalendarWeekColumnHeader, + FirstDayOfWeek = configService.FirstDayOfWeek, + CalendarWeekColumnHeader = configService.CalendarWeekColumnHeader, - MovieRuntimeFormat = model.MovieRuntimeFormat, + MovieRuntimeFormat = configService.MovieRuntimeFormat, - ShortDateFormat = model.ShortDateFormat, - LongDateFormat = model.LongDateFormat, - TimeFormat = model.TimeFormat, - ShowRelativeDates = model.ShowRelativeDates, + ShortDateFormat = configService.ShortDateFormat, + LongDateFormat = configService.LongDateFormat, + TimeFormat = configService.TimeFormat, + ShowRelativeDates = configService.ShowRelativeDates, - EnableColorImpairedMode = model.EnableColorImpairedMode, - MovieInfoLanguage = model.MovieInfoLanguage, - UILanguage = model.UILanguage + EnableColorImpairedMode = configService.EnableColorImpairedMode, + MovieInfoLanguage = configService.MovieInfoLanguage, + UILanguage = configService.UILanguage, + Theme = model.Theme }; } } diff --git a/src/Radarr.Http/Frontend/InitializeJsController.cs b/src/Radarr.Http/Frontend/InitializeJsController.cs index e06343e2e..2e06d4623 100644 --- a/src/Radarr.Http/Frontend/InitializeJsController.cs +++ b/src/Radarr.Http/Frontend/InitializeJsController.cs @@ -46,6 +46,7 @@ namespace Radarr.Http.Frontend builder.AppendLine("window.Radarr = {"); builder.AppendLine($" apiRoot: '{_urlBase}/api/v3',"); builder.AppendLine($" apiKey: '{_apiKey}',"); + builder.AppendLine($" theme: '{_configFileProvider.Theme}',"); builder.AppendLine($" release: '{BuildInfo.Release}',"); builder.AppendLine($" version: '{BuildInfo.Version.ToString()}',"); builder.AppendLine($" branch: '{_configFileProvider.Branch.ToLower()}',");