diff --git a/resources/skins/solarized-dark/html_adblocked.html b/resources/skins/solarized-dark/html_adblocked.html
new file mode 100644
index 000000000..b82730e92
--- /dev/null
+++ b/resources/skins/solarized-dark/html_adblocked.html
@@ -0,0 +1,4 @@
+
diff --git a/resources/skins/solarized-dark/html_enclosure_every.html b/resources/skins/solarized-dark/html_enclosure_every.html
new file mode 100644
index 000000000..21386fd63
--- /dev/null
+++ b/resources/skins/solarized-dark/html_enclosure_every.html
@@ -0,0 +1 @@
+ / %2
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/html_enclosure_image.html b/resources/skins/solarized-dark/html_enclosure_image.html
new file mode 100644
index 000000000..e049442a3
--- /dev/null
+++ b/resources/skins/solarized-dark/html_enclosure_image.html
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/html_single_message.html b/resources/skins/solarized-dark/html_single_message.html
new file mode 100644
index 000000000..7aa4c3e5d
--- /dev/null
+++ b/resources/skins/solarized-dark/html_single_message.html
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/html_style.css b/resources/skins/solarized-dark/html_style.css
new file mode 100644
index 000000000..0f019d934
--- /dev/null
+++ b/resources/skins/solarized-dark/html_style.css
@@ -0,0 +1,393 @@
+@charset "UTF-8";
+* {
+ font-family: inherit;
+ font-size: inherit; }
+
+body, h1, h2, h3, h4, h5, h6,
+p, blockquote, pre, hr,
+dl, dd, ol, ul, figure {
+ margin: 0;
+ padding: 0; }
+
+body {
+ background-color: #2F3134;
+ box-sizing: border-box;
+ color: #f5f5f5;
+ -webkit-text-size-adjust: 100%;
+ -webkit-font-feature-settings: "kern" 1;
+ font-feature-settings: "kern" 1;
+ font-kerning: normal;
+ padding: 10px !important;
+ min-height: 100vh; }
+
+::selection {
+ background-color: #647595;
+ text-shadow: none; }
+
+h1, h2, h3, h4, h5, h6,
+p, blockquote, pre,
+ul, ol, dl, figure,
+details {
+ margin-bottom: 10px; }
+
+hr {
+ background-color: #545556;
+ border: none;
+ display: block;
+ height: 2px;
+ margin: 10px 0; }
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: 600 !important; }
+
+h1 {
+ font-size: 1.25rem !important; }
+
+h2 {
+ font-size: 1.20rem !important; }
+
+h3 {
+ font-size: 1.15rem !important; }
+
+h4 {
+ font-size: 1.1rem !important; }
+
+h5 {
+ font-size: 1rem !important; }
+
+h6 {
+ font-size: .95rem !important; }
+
+b {
+ font-weight: bold !important; }
+
+i {
+ font-style: italic !important; }
+
+strong {
+ font-weight: 800 !important; }
+
+em {
+ font-style: oblique !important; }
+
+mark {
+ background-color: #f8d08c66; }
+
+sub,
+sup {
+ font-size: .8rem !important; }
+
+small {
+ font-size: .9rem !important; }
+
+abbr {
+ cursor: help;
+ font-style: italic !important;
+ font-weight: 100 !important; }
+
+q {
+ font-style: italic !important; }
+ q::before {
+ content: '“'; }
+ q::after {
+ content: '”'; }
+
+time {
+ font-weight: 450 !important; }
+
+var {
+ font-style: oblique !important;
+ font-weight: 500 !important; }
+
+a {
+ color: #647595; }
+ a:hover {
+ text-decoration: none; }
+ a:focus {
+ box-shadow: none;
+ outline: none; }
+
+cite {
+ font-style: italic !important;
+ font-weight: bold !important; }
+
+figure {
+ max-width: 100%; }
+
+figure > img {
+ display: block; }
+
+figcaption {
+ font-size: .8rem !important; }
+
+blockquote {
+ border-left: 0.3em solid #545556;
+ margin-left: 0;
+ padding: 0 10px; }
+ blockquote,
+ blockquote p {
+ color: #E2E2E2; }
+
+pre,
+code {
+ border: 1px solid #222325;
+ border-radius: 0.3em;
+ color: #E2E2E2;
+ font-family: monospace;
+ font-size: .95rem !important; }
+
+code {
+ background-color: rgba(33, 35, 39, 0.4);
+ padding: 0 .25em;
+ word-break: break-word; }
+
+pre {
+ background-color: rgba(33, 35, 39, 0.4);
+ overflow-x: auto;
+ padding: 7px 13px;
+ tab-size: 2;
+ white-space: pre !important;
+ width: unset !important; }
+ pre > code {
+ background-color: unset;
+ border: none;
+ color: unset;
+ padding-right: 0;
+ padding-left: 0;
+ tab-size: 2; }
+
+kbd {
+ background: rgba(33, 35, 39, 0.4);
+ border: 1px solid #222325;
+ border-bottom: 3px solid #1b1c1d;
+ border-radius: 0.3em;
+ box-shadow: 0 2px 4px #202224, inset 0 1px #2F3134;
+ font-size: .9rem !important;
+ padding: .1em .4em .2em .4em; }
+
+select {
+ background-color: rgba(33, 35, 39, 0.4);
+ border: 1px solid #222325;
+ border-radius: 0.3em;
+ color: #f5f5f5;
+ padding: .04em .25em;
+ width: 100%; }
+ select:focus {
+ box-shadow: none;
+ outline: none;
+ background-color: #2F3134; }
+ select > option {
+ background-color: #2F3134; }
+
+table {
+ border-collapse: collapse;
+ width: 100% !important; }
+
+li {
+ display: list-item; }
+
+ul,
+ol {
+ padding-left: 1.5em; }
+
+ul {
+ list-style-type: disc; }
+ ul li ul {
+ list-style-type: square; }
+
+ol {
+ list-style-type: decimal; }
+ ol li ol {
+ list-style-type: lower-roman; }
+
+details {
+ border: 1px solid rgba(33, 35, 39, 0.4);
+ border-radius: 0.3em;
+ padding: .5em .5em 0; }
+ details > summary {
+ background-color: rgba(33, 35, 39, 0.4);
+ border-radius: 0.27em;
+ cursor: pointer;
+ margin: -.5em -.5em 0;
+ padding-left: .5em; }
+ details > summary:focus {
+ box-shadow: none;
+ outline: none; }
+ details *:last-child {
+ margin-bottom: 0; }
+
+details[open] {
+ border-color: #222325;
+ padding: .5em; }
+ details[open] > summary {
+ border-bottom: 1px solid #222325;
+ border-radius: 0.27em 0.27em 0 0;
+ margin-bottom: .5em; }
+
+iframe {
+ max-width: 100%;
+ height: auto;
+ width: auto; }
+
+a:focus,
+select:focus,
+summary:focus {
+ background-color: #222325;
+ text-shadow: 0 -1px #2F3134; }
+
+:target {
+ outline: 1px solid #647595; }
+
+.rssguard-mwrapper {
+ padding: 0px !important; }
+ .rssguard-mwrapper .rssguard-mhead .msmall,
+ .rssguard-mwrapper .rssguard-mhead .mlinks {
+ opacity: .8; }
+ .rssguard-mwrapper .rssguard-mhead > h1 {
+ margin: 0; }
+ .rssguard-mwrapper .rssguard-mhead .msmall {
+ font-size: .9em; }
+ .rssguard-mwrapper .rssguard-mhead .mlinks .menc {
+ word-break: break-word; }
+ .rssguard-mwrapper .rssguard-mhead .mlinks .mwrapurl {
+ display: inline-flex; }
+ .rssguard-mwrapper .rssguard-mhead .mlinks .mwrapurl a[href=""], .rssguard-mwrapper .rssguard-mhead .mlinks .mwrapurl a[href=""] + span {
+ display: none; }
+ @media only screen and (max-width: 800px) {
+ .rssguard-mwrapper img, .rssguard-mwrapper video {
+ max-width: 100% !important; } }
+
+.rssguard-mbody {
+ word-break: break-word; }
+
+table {
+ word-break: normal; }
+
+html::before,
+html::after,
+body::before,
+body::after {
+ content: "";
+ background-color: #222325;
+ display: block;
+ position: fixed;
+ z-index: 5; }
+
+html::before {
+ height: 1px;
+ left: 0;
+ right: 0;
+ top: 0; }
+
+html::after {
+ width: 1px;
+ top: 0;
+ right: 0;
+ bottom: 0; }
+
+body::before {
+ height: 1px;
+ right: 0;
+ bottom: 0;
+ left: 0; }
+
+body::after {
+ width: 1px;
+ top: 0;
+ bottom: 0;
+ left: 0; }
+
+::-webkit-scrollbar {
+ height: 13px;
+ width: 14px; }
+
+::-webkit-scrollbar-track,
+::-webkit-scrollbar-corner {
+ background-color: #313235;
+ box-shadow: inset 1px 1px #2c2d30; }
+
+::-webkit-scrollbar-corner {
+ border-radius: 0 0 0.3em 0; }
+
+::-webkit-scrollbar-thumb {
+ box-shadow: inset 1px 1px #515258, inset -1px -1px #515258, inset 0px 1px #515258, inset 0px -1px #515258, inset 1px 0px #515258, inset 1px -1px #515258, inset -1px 0px #515258, inset -1px 1px #515258; }
+ ::-webkit-scrollbar-thumb:horizontal {
+ background-image: linear-gradient(#3b3c40 5%, #36373b);
+ min-width: 25px; }
+ ::-webkit-scrollbar-thumb:horizontal:hover {
+ background-image: linear-gradient(#3d3e43 25%, #36373b); }
+ ::-webkit-scrollbar-thumb:vertical {
+ background-image: linear-gradient(to right, #3b3c40 5%, #36373b);
+ min-height: 25px; }
+ ::-webkit-scrollbar-thumb:vertical:hover {
+ background-image: linear-gradient(to right, #3d3e43 25%, #36373b); }
+ ::-webkit-scrollbar-thumb:active {
+ background-image: linear-gradient(#36373b, #36373b) !important; }
+
+:not(body)::-webkit-scrollbar-thumb:horizontal {
+ box-shadow: inset 1px 1px #515258, inset -1px -1px #515258, inset 0px 1px #515258, inset 0px -1px #515258, inset 1px 0px #515258, inset 1px -1px #515258, inset -1px 0px #515258, inset -1px 1px #515258, 1px 0px #222325, 1px 1px #222325, -1px 1px #222325, -1px 0px #222325; }
+:not(body)::-webkit-scrollbar-thumb:vertical {
+ box-shadow: inset 1px 1px #515258, inset -1px -1px #515258, inset 0px 1px #515258, inset 0px -1px #515258, inset 1px 0px #515258, inset 1px -1px #515258, inset -1px 0px #515258, inset -1px 1px #515258, 0px -1px #222325, 1px -1px #222325, 1px 1px #222325, 0px 1px #222325; }
+
+::-webkit-scrollbar-thumb:horizontal,
+::-webkit-scrollbar-track:horizontal {
+ border-top: 1px solid #222325; }
+::-webkit-scrollbar-thumb:vertical,
+::-webkit-scrollbar-track:vertical {
+ border-left: 1px solid #222325; }
+
+body::-webkit-scrollbar-thumb:horizontal, body::-webkit-scrollbar-thumb:vertical,
+body::-webkit-scrollbar-track:horizontal,
+body::-webkit-scrollbar-track:vertical {
+ border: 1px solid #222325; }
+body::-webkit-scrollbar-thumb:horizontal,
+body::-webkit-scrollbar-track:horizontal {
+ border-top: none; }
+body::-webkit-scrollbar-thumb:vertical,
+body::-webkit-scrollbar-track:vertical {
+ border-left: none; }
+
+body::-webkit-scrollbar-corner {
+ border: 1px solid #222325;
+ border-top: none;
+ border-left: none; }
+
+::-webkit-scrollbar-track:corner-present:horizontal,
+::-webkit-scrollbar-thumb:corner-present:horizontal {
+ border-radius: 0 0 0 0.3em; }
+::-webkit-scrollbar-track:corner-present:vertical,
+::-webkit-scrollbar-thumb:corner-present:vertical {
+ border-radius: 0 0.3em 0 0; }
+::-webkit-scrollbar-track:horizontal,
+::-webkit-scrollbar-thumb:horizontal {
+ border-radius: 0 0 0.3em 0.3em; }
+::-webkit-scrollbar-track:vertical,
+::-webkit-scrollbar-thumb:vertical {
+ border-radius: 0 0.3em 0.3em 0; }
+
+/* Please enable JS for additional colouring features */
+:root {
+ --rssguard-red: 0;
+ --rssguard-green: 0;
+ --rssguard-blue: 0;
+ --rssguard-threshold: 0.5; }
+
+:root {
+ --rssguard-r: calc(var(--rssguard-red) * 0.2126);
+ --rssguard-g: calc(var(--rssguard-green) * 0.7152);
+ --rssguard-b: calc(var(--rssguard-blue) * 0.0722);
+ --rssguard-sum:
+ calc(
+ var(--rssguard-r) +
+ var(--rssguard-g) +
+ var(--rssguard-b)
+ );
+ --rssguard-perceived-lightness: calc(var(--rssguard-sum) / 255); }
+
+body,
+::selection,
+mark, code, pre, pre > code,
+blockquote, blockquote p {
+ color: hsla(0, 0%, calc( ( var(--rssguard-perceived-lightness) - var(--rssguard-threshold) ) * -10000000% ), 0.9); }
+
+/*# sourceMappingURL=html_style.css.map */
diff --git a/resources/skins/solarized-dark/html_style.scss b/resources/skins/solarized-dark/html_style.scss
new file mode 100644
index 000000000..481e2e3a7
--- /dev/null
+++ b/resources/skins/solarized-dark/html_style.scss
@@ -0,0 +1,309 @@
+@charset "utf-8";
+
+$qtbg-base: #2F3134 !default; // clr_basbg
+$qtbg-button: #2C2D30 !default; // clr_altbg // button bg (scrollbar, alt bg)
+$qcselbg: #647595 !default; // clr_selbg
+
+// {{{ Emulate Fusion colour processing (dark only)
+
+// Scrollbar colours
+
+//$qcbgbg: lighten($qtbg-button, 6%); // See toolbar bg
+$bgscroll: lighten($qtbg-button, 2%) !default; // track and corner bg
+$tr-border: darken($qtbg-button, 4%) !default; // track brdr
+
+// {{{ Scrollbar thumb
+
+// Thumb bg gradient
+
+// Normal
+$thscrlin: lighten($qtbg-button, 6%) !default;
+$thscrlout: lighten($qtbg-button, 4%) !default;
+
+// Hover
+$thscrlhvin: lighten($qtbg-button, 7%) !default;
+$thscrlhvout: $thscrlout;
+
+// Light outline
+$th-border: lighten($qtbg-button, 15%) !default;
+
+// }}}
+
+// }}}
+
+// {{{ HTML palette (Colours)
+
+$cbg00: $qtbg-base;
+
+// {{{ Irrelevant, because colour switcher (see below) overrides all fg colours (either with JS on or off)
+$cfg00: #f5f5f5 !default;
+$cfg10: #E2E2E2 !default;
+$cfg11: $cfg10;
+// }}}
+
+$cbor2: #545556 !default;
+
+$ccodeblock: rgba(33, 35, 39, 0.4) !default;
+$ccode: $ccodeblock;
+$cbor3: $tr-border;
+$cmark: #f8d08c66 !default; // 40% transparency
+
+$clink: $qcselbg;
+
+// }}}
+
+// Other
+
+$radius-unit: .3em !default;
+
+@import
+ "../nudus-base/html_style_base"
+;
+
+//
+// Dark CSS style has following additions:
+//
+
+// {{{ Border around viewport
+
+// https://csswizardry.com/2010/12/simplified-page-borders-in-pure-css/
+
+html::before,
+html::after,
+body::before,
+body::after {
+ content: "";
+ background-color: $tr-border;
+ display: block;
+ position: fixed;
+ z-index: 5;
+}
+
+html::before {
+ height: 1px;
+ left: 0;
+ right: 0;
+ top: 0;
+}
+
+html::after {
+ width: 1px;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+
+body::before {
+ height: 1px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+
+body::after {
+ width: 1px;
+ top: 0;
+ bottom: 0;
+ left: 0;
+}
+
+// }}}
+
+// {{{ Dark-coloured scrollbar
+
+::-webkit-scrollbar {
+ height: 13px;
+ width: 14px;
+}
+
+::-webkit-scrollbar-track,
+::-webkit-scrollbar-corner {
+ background-color: $bgscroll;
+ box-shadow: inset 1px 1px lighten($tr-border, 4%);
+}
+
+// Part where vertical and horizontal scrollbars meet
+::-webkit-scrollbar-corner {
+ border-radius: 0 0 $radius-unit 0;
+}
+
+// TODO: Can be simplified to @include and function
+$th-outline:
+ inset 1px 1px $th-border,
+ inset -1px -1px $th-border,
+
+ inset 0px 1px $th-border,
+ inset 0px -1px $th-border,
+
+ inset 1px 0px $th-border,
+ inset 1px -1px $th-border,
+
+ inset -1px 0px $th-border,
+ inset -1px 1px $th-border
+;
+
+::-webkit-scrollbar-thumb {
+ $th-min-unit: 25px;
+ box-shadow: $th-outline;
+
+ &:horizontal {
+ background-image: linear-gradient($thscrlin 5%, $thscrlout);
+ min-width: $th-min-unit;
+
+ &:hover {
+ background-image: linear-gradient($thscrlhvin 25%, $thscrlhvout);
+ }
+ }
+
+ &:vertical {
+ background-image: linear-gradient(to right, $thscrlin 5%, $thscrlout);
+ min-height: $th-min-unit;
+
+ &:hover {
+ background-image: linear-gradient(to right, $thscrlhvin 25%, $thscrlhvout);
+ }
+ }
+
+ &:active {
+ background-image: linear-gradient($thscrlout, $thscrlout) !important;
+ }
+}
+
+// Light and dark borders to outline the thumb
+// Clockwise (x y)
+:not(body)::-webkit-scrollbar-thumb {
+
+ &:horizontal {
+ box-shadow:
+ $th-outline,
+ 1px 0px $tr-border,
+ 1px 1px $tr-border,
+ -1px 1px $tr-border,
+ -1px 0px $tr-border
+ ;
+ }
+
+ &:vertical {
+ box-shadow:
+ $th-outline,
+ 0px -1px $tr-border,
+ 1px -1px $tr-border,
+ 1px 1px $tr-border,
+ 0px 1px $tr-border
+ ;
+ }
+}
+
+::-webkit-scrollbar-thumb,
+::-webkit-scrollbar-track {
+
+ &:horizontal {
+ border-top: 1px solid $tr-border;
+ }
+
+ &:vertical {
+ border-left: 1px solid $tr-border;
+ }
+}
+
+// Complete the borders for body scrollbar
+body::-webkit-scrollbar-thumb,
+body::-webkit-scrollbar-track {
+
+ &:horizontal,
+ &:vertical {
+ border: 1px solid $tr-border;
+ }
+
+ &:horizontal {
+ border-top: none;
+ }
+
+ &:vertical {
+ border-left: none;
+ }
+}
+
+body::-webkit-scrollbar-corner {
+ border: 1px solid $tr-border;
+ border-top: none;
+ border-left: none;
+}
+
+::-webkit-scrollbar-track,
+::-webkit-scrollbar-thumb {
+
+ &:corner-present {
+
+ &:horizontal {
+ border-radius: 0 0 0 $radius-unit;
+ }
+
+ &:vertical {
+ border-radius: 0 $radius-unit 0 0;
+ }
+ }
+
+ &:horizontal {
+ border-radius: 0 0 $radius-unit $radius-unit;
+ }
+
+ &:vertical {
+ border-radius: 0 $radius-unit $radius-unit 0;
+ }
+}
+
+// }}}
+
+// {{{ Fg colour switcher
+
+// Thank you so much!!
+// https://css-tricks.com/switch-font-color-for-different-backgrounds-with-css/
+
+/* Please enable JS for additional colouring features */
+:root {
+ // Default RGB values for background colour
+ --rssguard-red: 0;
+ --rssguard-green: 0;
+ --rssguard-blue: 0;
+ // The threshold at which colours are considered "light
+ // Range: decimals from 0 to 1, recommended 0.5 - 0.6
+ --rssguard-threshold: 0.5;
+}
+
+:root {
+ // Calculates perceived lightness using the sRGB Luma method
+ // Luma = (red * 0.2126 + green * 0.7152 + blue * 0.0722) / 255
+ --rssguard-r: calc(var(--rssguard-red) * 0.2126);
+ --rssguard-g: calc(var(--rssguard-green) * 0.7152);
+ --rssguard-b: calc(var(--rssguard-blue) * 0.0722);
+ --rssguard-sum:
+ calc(
+ var(--rssguard-r) +
+ var(--rssguard-g) +
+ var(--rssguard-b)
+ );
+ --rssguard-perceived-lightness: calc(var(--rssguard-sum) / 255);
+}
+
+// Shows either white or black colour depending on perceived lightness
+body,
+::selection,
+mark, code, pre, pre > code,
+blockquote, blockquote p { // TODO: why did not I add 'blockquote p' here before?
+ color:
+ hsla(
+ 0,
+ 0%,
+ calc(
+ (
+ var(--rssguard-perceived-lightness) -
+ var(--rssguard-threshold)
+ ) *
+ -10000000%
+ ),
+ .9
+ );
+}
+// }}}
+// vim:foldmethod=marker
diff --git a/resources/skins/solarized-dark/html_style_base.scss b/resources/skins/solarized-dark/html_style_base.scss
new file mode 100644
index 000000000..d8a9322a3
--- /dev/null
+++ b/resources/skins/solarized-dark/html_style_base.scss
@@ -0,0 +1,423 @@
+// ___________________________
+// < I'm an expert in my field. >
+// ---------------------------
+// \ ^__^
+// \ (oo)\_______
+// (__)\ )\/\
+// ||----w |
+// || ||
+
+//
+// Variables
+//
+
+$base-unit: 10px !default;
+
+//
+// Styling
+//
+
+// Let the font be customised via RSS Guard settings
+* {
+ font-family: inherit;
+ font-size: inherit;
+}
+
+//
+// Reset some basic elements
+//
+
+body, h1, h2, h3, h4, h5, h6,
+p, blockquote, pre, hr,
+dl, dd, ol, ul, figure {
+ margin: 0;
+ padding: 0;
+}
+
+//
+// Add some basic styling
+//
+
+body {
+ background-color: $cbg00;
+
+ box-sizing: border-box;
+ color: $cfg00;
+ //cursor: default;
+ -webkit-text-size-adjust: 100%;
+ -webkit-font-feature-settings: "kern" 1;
+ font-feature-settings: "kern" 1;
+ font-kerning: normal;
+ padding: 10px !important;
+ min-height: 100vh;
+}
+
+::selection {
+ background-color: $clink;
+ text-shadow: none;
+}
+
+h1, h2, h3, h4, h5, h6,
+p, blockquote, pre,
+ul, ol, dl, figure,
+details {
+ margin-bottom: $base-unit;
+}
+
+hr {
+ background-color: $cbor2;
+ border: none;
+ display: block;
+ height: 2px;
+ margin: $base-unit 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: 600 !important;
+}
+
+h1 { font-size: 1.25rem !important; }
+h2 { font-size: 1.20rem !important; }
+h3 { font-size: 1.15rem !important; }
+h4 { font-size: 1.1rem !important; }
+h5 { font-size: 1rem !important; }
+h6 { font-size: .95rem !important; }
+
+b {
+ font-weight: bold !important;
+}
+
+i {
+ font-style: italic !important;
+}
+
+strong {
+ font-weight: 800 !important;
+}
+
+em {
+ font-style: oblique !important;
+}
+
+mark {
+ background-color: $cmark;
+}
+
+sub,
+sup {
+ font-size: .8rem !important;
+}
+
+small {
+ font-size: .9rem !important;
+}
+
+abbr {
+ cursor: help;
+ font-style: italic !important;
+ font-weight: 100 !important;
+}
+
+q {
+ font-style: italic !important;
+
+ &::before {
+ content: '“';
+ }
+
+ &::after {
+ content: '”';
+ }
+}
+
+time {
+ font-weight: 450 !important;
+}
+
+var {
+ font-style: oblique !important;
+ font-weight: 500 !important;
+}
+
+a {
+ color: $clink;
+
+ &:hover {
+ text-decoration: none;
+ }
+
+ &:focus {
+ box-shadow: none;
+ outline: none;
+ }
+}
+
+cite {
+ font-style: italic !important;
+ font-weight: bold !important;
+}
+
+// override if width is defined in element's style attribute
+figure {
+ max-width: 100%;
+}
+
+figure > img {
+ display: block;
+}
+
+figcaption {
+ font-size: .8rem !important;
+}
+
+blockquote {
+ border-left: .3em solid $cbor2;
+ margin-left: 0;
+ padding: 0 $base-unit;
+
+ &,
+ p {
+ color: $cfg11;
+ }
+}
+
+pre,
+code {
+ border: 1px solid $cbor3;
+ border-radius: $radius-unit;
+ color: $cfg10;
+ //cursor: text;
+
+ // Font for code blocks falls back to system default monospace
+ font-family: monospace;
+ font-size: .95rem !important;
+}
+
+code {
+ background-color: $ccode;
+ padding: 0 .25em;
+ word-break: break-word;
+}
+
+pre {
+ background-color: $ccodeblock;
+ overflow-x: auto;
+ padding: 7px 13px;
+ tab-size: 2;
+ // For
+ white-space: pre !important;
+
+ // For
+ width: unset !important;
+
+ > code {
+ background-color: unset;
+ border: none;
+ color: unset;
+ padding-right: 0;
+ padding-left: 0;
+ tab-size: 2;
+ }
+}
+
+kbd {
+ background: $ccode;
+ border: 1px solid $cbor3;
+ border-bottom: 3px solid darken($cbor3, 3%);
+ border-radius: $radius-unit;
+ box-shadow:
+ 0 2px 4px darken($cbg00, 6%),
+ inset 0 1px $cbg00
+ ;
+ font-size: .9rem !important;
+ padding: .1em .4em .2em .4em;
+}
+
+select {
+ background-color: $ccodeblock;
+ border: 1px solid $cbor3;
+ border-radius: $radius-unit;
+ color: $cfg00;
+ padding: .04em .25em;
+ // Do not use max-width here
+ width: 100%;
+
+ &:focus {
+ box-shadow: none;
+ outline: none;
+
+ background-color: $cbg00;
+ }
+
+ > option {
+ background-color: $cbg00;
+ }
+}
+
+table {
+ border-collapse: collapse;
+ // `!important` is set to override something like
+ width: 100% !important;
+}
+
+// Return this if something goes wrong, and return the JS override for dark theme
+//table,
+//th,
+//td {
+// color: $cfg00;
+//}
+
+li {
+ display: list-item;
+}
+
+ul,
+ol {
+ padding-left: 1.5em;
+}
+
+ul {
+ list-style-type: disc;
+
+ li ul {
+ list-style-type: square;
+ }
+}
+
+ol {
+ list-style-type: decimal;
+
+ li ol {
+ list-style-type: lower-roman;
+ }
+}
+
+img {
+ // Let the width be defined (see .rssguard-mbody img), but keep aspect ratio
+ //height: auto;
+ // `width auto` creates many problems even if set as a fallback
+ //width: auto;
+}
+
+details {
+ border: 1px solid $ccodeblock;
+ border-radius: $radius-unit;
+ padding: .5em .5em 0;
+
+ > summary {
+ background-color: $ccodeblock;
+ border-radius: $radius-unit * 0.9;
+ cursor: pointer;
+ margin: -.5em -.5em 0;
+ padding-left: .5em;
+
+ &:focus {
+ box-shadow: none;
+ outline: none;
+ }
+ }
+
+ & *:last-child {
+ margin-bottom: 0;
+ }
+}
+
+details[open] {
+ border-color: $cbor3;
+ padding: .5em;
+
+ > summary {
+ border-bottom: 1px solid $cbor3;
+ border-radius: ($radius-unit * 0.9) ($radius-unit * 0.9) 0 0;
+ margin-bottom: .5em;
+ }
+}
+
+iframe {
+ max-width: 100%;
+ height: auto;
+ width: auto;
+}
+
+a,
+select,
+summary {
+
+ &:focus {
+ background-color: $cbor3;
+ text-shadow: 0 -1px $cbg00;
+ }
+}
+
+:target {
+ outline: 1px solid $clink;
+}
+
+// m* == message*
+.rssguard-mwrapper {
+ padding: 0px !important;
+
+ .rssguard-mhead {
+
+ .msmall,
+ .mlinks {
+ opacity: .8;
+ }
+
+ > h1 {
+ margin: 0;
+ }
+
+ .msmall {
+ font-size: .9em;
+ }
+
+ .mlinks {
+
+ .menc {
+ word-break: break-word;
+ }
+
+ .mwrapurl {
+ display: inline-flex;
+
+ a[href=""] {
+
+ &,
+ & + span {
+ display: none;
+ }
+ }
+ }
+ }
+ }
+
+ img, video {
+ // Needs to be `!important` when max-width is defined by image style
+ //
+ //max-width: 450px !important;
+ // For cases when they both are set
+ //max-height: unset !important;
+
+ @media only screen and (max-width: 800px) {
+ // `!important` to override `!important` that is set above
+ max-width: 100% !important;
+ }
+ }
+}
+
+//
+// Other
+//
+
+// For articles without any html elements;
+// If not applied to _all_, *must* be applied to links in mbody
+// mbody == article body
+.rssguard-mbody {
+ word-break: break-word;
+}
+
+// Fix at least some mess produced by above
+table {
+ word-break: normal;
+}
diff --git a/resources/skins/solarized-dark/html_wrapper.html b/resources/skins/solarized-dark/html_wrapper.html
new file mode 100644
index 000000000..e9f5b6666
--- /dev/null
+++ b/resources/skins/solarized-dark/html_wrapper.html
@@ -0,0 +1,29 @@
+
+
+
+%1
+
+
+
+
+
+
+%2
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/lite_html_enclosure_every.html b/resources/skins/solarized-dark/lite_html_enclosure_every.html
new file mode 100644
index 000000000..cf7567733
--- /dev/null
+++ b/resources/skins/solarized-dark/lite_html_enclosure_every.html
@@ -0,0 +1 @@
+ / %2
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/lite_html_enclosure_image.html b/resources/skins/solarized-dark/lite_html_enclosure_image.html
new file mode 100644
index 000000000..ece447112
--- /dev/null
+++ b/resources/skins/solarized-dark/lite_html_enclosure_image.html
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/lite_html_single_message.html b/resources/skins/solarized-dark/lite_html_single_message.html
new file mode 100644
index 000000000..ab85bb344
--- /dev/null
+++ b/resources/skins/solarized-dark/lite_html_single_message.html
@@ -0,0 +1,15 @@
+
+
+
+
%7
+
%2
+
%1%6 / URL
+
%5
+
+
+
+
+
+%4
+
+
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/lite_html_style.css b/resources/skins/solarized-dark/lite_html_style.css
new file mode 100644
index 000000000..a64e7e5aa
--- /dev/null
+++ b/resources/skins/solarized-dark/lite_html_style.css
@@ -0,0 +1,25 @@
+body,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+hr,
+dl,
+dd,
+ol,
+ul,
+figure {
+ margin: 0;
+ padding: 0; }
+
+body {
+ background-color: #2F3134;
+ color: #f5f5f5; }
+
+a {
+ color: #647595; }
diff --git a/resources/skins/solarized-dark/lite_html_style.scss b/resources/skins/solarized-dark/lite_html_style.scss
new file mode 100644
index 000000000..7ca73f03b
--- /dev/null
+++ b/resources/skins/solarized-dark/lite_html_style.scss
@@ -0,0 +1,7 @@
+@charset "utf-8";
+
+$col_back: #2F3134 !default;
+$col_front: #f5f5f5 !default;
+$col_link: #647595 !default;
+
+@import "../nudus-base/lite_html_style_base";
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/lite_html_style_base.scss b/resources/skins/solarized-dark/lite_html_style_base.scss
new file mode 100644
index 000000000..ef4522001
--- /dev/null
+++ b/resources/skins/solarized-dark/lite_html_style_base.scss
@@ -0,0 +1,28 @@
+body,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+hr,
+dl,
+dd,
+ol,
+ul,
+figure {
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ background-color: $col_back;
+ color: $col_front;
+}
+
+a {
+ color: $col_link;
+}
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/metadata.xml b/resources/skins/solarized-dark/metadata.xml
new file mode 100644
index 000000000..073e929f3
--- /dev/null
+++ b/resources/skins/solarized-dark/metadata.xml
@@ -0,0 +1,61 @@
+
+
+
+ martinrotter
+
+ Dark variation of solarized theme.
+
+
+ #acc2c5
+ #acc2c5
+ #B58900
+ #B58900
+ #DC322F
+ #DC322F
+ #586e75
+ #859900
+
+
+ Fusion
+ true
+
+
+
+ #002b36
+ #073642
+ #586e75
+ #001f27
+ #586e75
+ #657b83
+ #073642
+ #839496
+ #d33682
+
+ #073642
+ #073642
+
+ #96aaac
+ #ffffff
+ #ffffff
+ #586e75
+ #96aaac
+ #ffffff
+ #96aaac
+ #268bd2
+ #6c71c4
+
+ #073642
+
+
+
+ #002b36
+ #001f27
+ #073642
+ #586e75
+ #586e75
+ #586e75
+ #d33682
+
+
+
+
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/qt_style.qss b/resources/skins/solarized-dark/qt_style.qss
new file mode 100644
index 000000000..2a963a3a0
--- /dev/null
+++ b/resources/skins/solarized-dark/qt_style.qss
@@ -0,0 +1,4 @@
+QProgressBar {
+ background-color: palette(highlight);
+ color: palette(window);
+}
\ No newline at end of file
diff --git a/resources/skins/solarized-dark/qt_style_forced.qss b/resources/skins/solarized-dark/qt_style_forced.qss
new file mode 100644
index 000000000..57152d57e
--- /dev/null
+++ b/resources/skins/solarized-dark/qt_style_forced.qss
@@ -0,0 +1,24 @@
+QListWidget,
+QScrollArea {
+ border: 1px solid palette(light);
+}
+
+
+QPlainTextEdit:focus {
+ border: 1px solid palette(highlight);
+}
+
+QToolTip {
+ background-color: palette(window);
+ color: palette(text);
+ border: 1px solid palette(highlight);
+ border-radius: 2px;
+}
+
+QSplitter::handle {
+ background: palette(light);
+}
+
+QStatusBar::item {
+ border: none;
+}
diff --git a/src/librssguard/core/messagesmodel.cpp b/src/librssguard/core/messagesmodel.cpp
index e16357c21..ed3a2656f 100644
--- a/src/librssguard/core/messagesmodel.cpp
+++ b/src/librssguard/core/messagesmodel.cpp
@@ -94,7 +94,7 @@ QIcon MessagesModel::generateUnreadIcon() {
QPointF center(64, 64);
qreal radius = 32;
- QColor custom_clr = qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgNewMessages).value();
+ QColor custom_clr = qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgInteresting).value();
if (!custom_clr.isValid()) {
custom_clr = QColor(RAD_COLOR);
diff --git a/src/librssguard/miscellaneous/skinfactory.cpp b/src/librssguard/miscellaneous/skinfactory.cpp
index 35e0ac6ac..154572c95 100644
--- a/src/librssguard/miscellaneous/skinfactory.cpp
+++ b/src/librssguard/miscellaneous/skinfactory.cpp
@@ -63,34 +63,18 @@ bool SkinFactory::isStyleGoodForAlternativeStylePalette(const QString& style_nam
// This is here because in Qt 6.5.0, they hardcoded
// DARK palette if user has enabled "dark mode" in OS.
QPalette qt_fusionPalette(bool dark_appearance) {
- // Define Solarized dark and light colors
- const QColor solarized_base03 = QColor(0, 43, 54); // Dark background for Solarized dark
- const QColor solarized_base2 = QColor(238, 232, 213); // Light background for Solarized light
- const QColor solarized_yellow = QColor(181, 137, 0);
- const QColor solarized_orange = QColor(203, 75, 22);
- const QColor solarized_red = QColor(220, 50, 47);
- const QColor solarized_magenta = QColor(211, 54, 130);
- const QColor solarized_violet = QColor(108, 113, 196);
- const QColor solarized_blue = QColor(38, 139, 210);
- const QColor solarized_cyan = QColor(42, 161, 152);
- const QColor solarized_green = QColor(133, 153, 0);
-
- // Choose background and text colors based on appearance
- const QColor background = dark_appearance ? solarized_base03 : solarized_base2;
- const QColor window_text = dark_appearance ? QColor(131, 148, 150) : QColor(0, 43, 54); // Adjusted for contrast
- const QColor text = window_text;
-
- // Derive other colors
- const QColor light_color = background.lighter(150);
- const QColor middle_color = (background.darker(130));
- const QColor middle_light_color = middle_color.lighter(110);
- const QColor base = dark_appearance ? background.darker(140) : QColor(253, 246, 227); // Solarized base2 for light
- const QColor disabled_base = background;
+ const QColor window_text = dark_appearance ? QColor(240, 240, 240) : Qt::black;
+ const QColor background = dark_appearance ? QColor(50, 50, 50) : QColor(239, 239, 239);
+ const QColor light = background.lighter(150);
+ const QColor mid = (background.darker(130));
+ const QColor midlight = mid.lighter(110);
+ const QColor base = dark_appearance ? background.darker(140) : Qt::white;
+ const QColor disabled_base(background);
const QColor dark = background.darker(150);
const QColor disabled_dark = QColor(209, 209, 209).darker(110);
- const QColor highlight = dark_appearance ? solarized_magenta : solarized_yellow; // Example highlight
- const QColor disabled_highlight = QColor(145, 145, 145);
- const QColor highlighted_text = dark_appearance ? window_text : QColor(0, 43, 54);
+ const QColor text = dark_appearance ? window_text : Qt::black;
+ const QColor highlight = QColor(48, 140, 198);
+ const QColor hightlighted_text = dark_appearance ? window_text : Qt::white;
const QColor disabled_text = dark_appearance ? QColor(130, 130, 130) : QColor(190, 190, 190);
const QColor button = background;
const QColor shadow = dark.darker(135);
@@ -99,11 +83,11 @@ QPalette qt_fusionPalette(bool dark_appearance) {
QColor placeholder = text;
placeholder.setAlpha(128);
- QPalette fusion_palette(window_text, background, light_color, dark, middle_color, text, base);
- fusion_palette.setBrush(QPalette::Midlight, middle_light_color);
+ QPalette fusion_palette(window_text, background, light, dark, mid, text, base);
+ fusion_palette.setBrush(QPalette::Midlight, midlight);
fusion_palette.setBrush(QPalette::Button, button);
fusion_palette.setBrush(QPalette::Shadow, shadow);
- fusion_palette.setBrush(QPalette::HighlightedText, highlighted_text);
+ fusion_palette.setBrush(QPalette::HighlightedText, hightlighted_text);
fusion_palette.setBrush(QPalette::Disabled, QPalette::Text, disabled_text);
fusion_palette.setBrush(QPalette::Disabled, QPalette::WindowText, disabled_text);
@@ -114,7 +98,7 @@ QPalette qt_fusionPalette(bool dark_appearance) {
fusion_palette.setBrush(QPalette::Active, QPalette::Highlight, highlight);
fusion_palette.setBrush(QPalette::Inactive, QPalette::Highlight, highlight);
- fusion_palette.setBrush(QPalette::Disabled, QPalette::Highlight, disabled_highlight);
+ fusion_palette.setBrush(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
fusion_palette.setBrush(QPalette::PlaceholderText, placeholder);
@@ -125,61 +109,6 @@ QPalette qt_fusionPalette(bool dark_appearance) {
return fusion_palette;
}
-/*
- * QPalette qt_fusionPalette(bool dark_appearance) {
- // Define pastel and well-readable colors depending on appearance
- const QColor window_text = dark_appearance ? QColor(200, 200, 200) : QColor(30, 30, 30);
- const QColor background = dark_appearance ? QColor(40, 40, 50) : QColor(245, 245, 245);
- const QColor light_color = background.lighter(150);
- const QColor middle_color = background.darker(130);
- const QColor middle_light_color = middle_color.lighter(110);
- const QColor base = dark_appearance ? background.darker(140) : QColor(255, 255, 255);
- const QColor disabled_base = background;
- const QColor dark = background.darker(150);
- const QColor disabled_dark = QColor(180, 180, 180).darker(110);
-
-// Pastel accent colors for highlights
-const QColor highlight = dark_appearance ? QColor(150, 200, 225) : QColor(100, 180, 220);
-const QColor disabled_highlight = QColor(180, 180, 180);
-const QColor highlighted_text = dark_appearance ? window_text : QColor(255, 255, 255);
-const QColor disabled_text = dark_appearance ? QColor(130, 130, 130) : QColor(180, 180, 180);
-const QColor button = background;
-const QColor shadow = dark.darker(135);
-const QColor disabled_shadow = shadow.lighter(150);
-
-// Placeholder with semi-transparent effect
-QColor placeholder = highlighted_text;
-placeholder.setAlpha(128);
-
-QPalette fusion_palette(window_text, background, light_color, dark, middle_color, highlighted_text, base);
-fusion_palette.setBrush(QPalette::Midlight, middle_light_color);
-fusion_palette.setBrush(QPalette::Button, button);
-fusion_palette.setBrush(QPalette::Shadow, shadow);
-fusion_palette.setBrush(QPalette::HighlightedText, highlighted_text);
-
-// Disabled states
-fusion_palette.setBrush(QPalette::Disabled, QPalette::Text, disabled_text);
-fusion_palette.setBrush(QPalette::Disabled, QPalette::WindowText, disabled_text);
-fusion_palette.setBrush(QPalette::Disabled, QPalette::ButtonText, disabled_text);
-fusion_palette.setBrush(QPalette::Disabled, QPalette::Base, disabled_base);
-fusion_palette.setBrush(QPalette::Disabled, QPalette::Dark, disabled_dark);
-fusion_palette.setBrush(QPalette::Disabled, QPalette::Shadow, disabled_shadow);
-
-// Highlight states
-fusion_palette.setBrush(QPalette::Active, QPalette::Highlight, highlight);
-fusion_palette.setBrush(QPalette::Inactive, QPalette::Highlight, highlight);
-fusion_palette.setBrush(QPalette::Disabled, QPalette::Highlight, disabled_highlight);
-
-// Placeholder text
-fusion_palette.setBrush(QPalette::PlaceholderText, placeholder);
-
-if (dark_appearance) {
- fusion_palette.setBrush(QPalette::Link, highlight);
-}
-
-return fusion_palette;
-}*/
-
void SkinFactory::loadSkinFromData(const Skin& skin, bool replace_existing_qss) {
#if QT_VERSION >= 0x060500 // Qt >= 6.5.0
auto system_color_scheme = qApp->styleHints()->colorScheme();
@@ -261,7 +190,7 @@ void SkinFactory::loadSkinFromData(const Skin& skin, bool replace_existing_qss)
// colors are now derived from system.
#if QT_VERSION >= 0x060500 // Qt >= 6.5.0
else /*if (qApp->styleHints()->colorScheme() == Qt::ColorScheme::Light)*/ {
- qApp->setPalette(qt_fusionPalette(true));
+ qApp->setPalette(qt_fusionPalette(false));
}
#endif
}