diff --git a/scripts/userstyles.yml b/scripts/userstyles.yml
index a642797032..eb8ad843c6 100644
--- a/scripts/userstyles.yml
+++ b/scripts/userstyles.yml
@@ -157,6 +157,9 @@ collaborators:
url: https://github.com/steinuil
- &husjon
url: https://github.com/husjon
+ - &waterlilly-lilly
+ name: Maestoso
+ url: https://github.com/waterlilly-lilly
userstyles:
advent-of-code:
@@ -840,6 +843,13 @@ userstyles:
readme:
app-link: https://planetminecraft.com
current-maintainers: [*nyameliaaaa]
+ pluralkit:
+ name: PluralKit
+ categories: [social_networking]
+ color: peach
+ readme:
+ app-link: https://dash.pluralkit.me
+ current-maintainers: [*waterlilly-lilly]
porkbun:
name: Porkbun
categories: [productivity]
diff --git a/styles/pluralkit/catppuccin.user.less b/styles/pluralkit/catppuccin.user.less
new file mode 100644
index 0000000000..a8dca395c4
--- /dev/null
+++ b/styles/pluralkit/catppuccin.user.less
@@ -0,0 +1,505 @@
+/* ==UserStyle==
+@name PluralKit Catppuccin
+@namespace github.com/catppuccin/userstyles/styles/pluralkit
+@homepageURL https://github.com/catppuccin/userstyles/tree/main/styles/pluralkit
+@version 2000.01.01
+@updateURL https://github.com/catppuccin/userstyles/raw/main/styles/pluralkit/catppuccin.user.less
+@supportURL https://github.com/catppuccin/userstyles/issues?q=is%3Aopen+is%3Aissue+label%3Apluralkit
+@description Soothing pastel theme for PluralKit
+@author Catppuccin
+@license MIT
+
+@preprocessor less
+@var select lightFlavor "Light Flavor" ["latte:Latte*", "frappe:Frappé", "macchiato:Macchiato", "mocha:Mocha"]
+@var select darkFlavor "Dark Flavor" ["latte:Latte", "frappe:Frappé", "macchiato:Macchiato", "mocha:Mocha*"]
+@var select accentColor "Accent" ["rosewater:Rosewater", "flamingo:Flamingo", "pink:Pink", "mauve:Mauve*", "red:Red", "maroon:Maroon", "peach:Peach", "yellow:Yellow", "green:Green", "teal:Teal", "blue:Blue", "sapphire:Sapphire", "sky:Sky", "lavender:Lavender", "subtext0:Gray"]
+==/UserStyle== */
+
+@-moz-document domain("dash.pluralkit.me") {
+ :root.dark {
+ #catppuccin(@darkFlavor);
+ }
+ :root.light {
+ #catppuccin(@lightFlavor);
+ }
+
+ #catppuccin(@flavor) {
+ @rosewater: @catppuccin[@@flavor][@rosewater];
+ @flamingo: @catppuccin[@@flavor][@flamingo];
+ @pink: @catppuccin[@@flavor][@pink];
+ @mauve: @catppuccin[@@flavor][@mauve];
+ @red: @catppuccin[@@flavor][@red];
+ @maroon: @catppuccin[@@flavor][@maroon];
+ @peach: @catppuccin[@@flavor][@peach];
+ @yellow: @catppuccin[@@flavor][@yellow];
+ @green: @catppuccin[@@flavor][@green];
+ @teal: @catppuccin[@@flavor][@teal];
+ @sky: @catppuccin[@@flavor][@sky];
+ @sapphire: @catppuccin[@@flavor][@sapphire];
+ @blue: @catppuccin[@@flavor][@blue];
+ @lavender: @catppuccin[@@flavor][@lavender];
+ @text: @catppuccin[@@flavor][@text];
+ @subtext1: @catppuccin[@@flavor][@subtext1];
+ @subtext0: @catppuccin[@@flavor][@subtext0];
+ @overlay2: @catppuccin[@@flavor][@overlay2];
+ @overlay1: @catppuccin[@@flavor][@overlay1];
+ @overlay0: @catppuccin[@@flavor][@overlay0];
+ @surface2: @catppuccin[@@flavor][@surface2];
+ @surface1: @catppuccin[@@flavor][@surface1];
+ @surface0: @catppuccin[@@flavor][@surface0];
+ @base: @catppuccin[@@flavor][@base];
+ @mantle: @catppuccin[@@flavor][@mantle];
+ @crust: @catppuccin[@@flavor][@crust];
+ @accent: @catppuccin[@@flavor][@@accentColor];
+
+ color-scheme: if(@flavor = latte, light, dark);
+
+ ::selection {
+ background-color: fade(@accent, 30%);
+ }
+
+ input,
+ textarea {
+ &::placeholder {
+ color: @subtext0 !important;
+ }
+ }
+
+ body {
+ background-color: @base;
+ color: @text;
+ }
+ .navbar {
+ &.bg-light {
+ background-color: @base !important;
+ }
+ &-light {
+ .navbar-brand {
+ color: @text;
+ }
+ }
+ &-bar {
+ &:hover {
+ color: lighten(@subtext0, 5%);
+ }
+ }
+ &-nav .nav-link {
+ color: @subtext0;
+
+ &:hover {
+ color: lighten(@subtext0, 5%);
+ }
+ &:focus {
+ color: lighten(@subtext0, 5%);
+ }
+ }
+ }
+ .nav-tabs .nav-link {
+ background-color: @crust !important;
+ border-color: darken(@mantle, 5%) !important;
+ color: @accent;
+ &:hover {
+ color: lighten(@accent, 5%);
+ }
+ &.active {
+ color: @subtext1 !important;
+ }
+ }
+ .dropdown {
+ &-menu {
+ background-color: @mantle;
+ }
+ &-item {
+ color: @subtext0;
+
+ &:active {
+ color: contrast(@accent);
+ background-color: @accent;
+ }
+ &:hover {
+ color: @text;
+ background-color: lighten(@mantle, 10%);
+ }
+ }
+ }
+ .card {
+ background-color: @mantle;
+ border-color: darken(@mantle, 5%);
+ &-header {
+ background-color: @crust;
+ border-bottom-color: lighten(@mantle, 5%);
+ }
+ &-body {
+ background-color: @mantle;
+ }
+ }
+ .btn {
+ color: @text;
+ &:focus {
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ }
+ &-danger {
+ color: contrast(@red);
+ background-color: @red;
+ border-color: @red;
+ }
+ &-primary {
+ color: contrast(@accent);
+ background-color: @accent;
+ border-color: @accent;
+ &:hover {
+ background-color: lighten(@accent, 5%);
+ border-color: lighten(@accent, 5%);
+ }
+ &:active {
+ background-color: saturate(@accent, 5%);
+ border-color: saturate(@accent, 5%);
+ }
+ &:focus {
+ background-color: lighten(@accent, 5%);
+ border-color: lighten(@accent, 5%);
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ }
+ &:disabled {
+ background-color: desaturate(@accent, 5%);
+ border-color: desaturate(@accent, 5%);
+ color: desaturate(contrast(@accent), 5%);
+ }
+ }
+ &-secondary {
+ background-color: @surface0;
+ border-color: @surface0;
+ &:hover {
+ background-color: lighten(@surface0, 5%);
+ border-color: lighten(@surface0, 5%);
+ }
+ &:focus {
+ background-color: lighten(@surface0, 5%);
+ border-color: lighten(@surface0, 5%);
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ }
+ &:active {
+ background-color: saturate(@surface0, 5%);
+ border-color: saturate(@surface0, 5%);
+ color: contrast(@surface0);
+ }
+ }
+ &-dark {
+ .btn-dark {
+ background-color: @subtext0;
+ border-color: @subtext0;
+ color: contrast(@subtext0);
+ }
+ }
+ &-close {
+ @btn-close-svg: escape(
+ ''
+ );
+ background-image: url("data:image/svg+xml,@{btn-close-svg}");
+ }
+ }
+ .form {
+ &-control {
+ color: @subtext0;
+ background-color: @crust;
+ border-color: lighten(@crust, 5%);
+ &:disabled {
+ background-color: desaturate(@crust, 5%);
+ }
+ &:hover {
+ color: @subtext0;
+ background-color: @crust;
+ border-color: lighten(@accent, 5%);
+ }
+ &:focus {
+ color: @subtext0;
+ background-color: @crust;
+ border-color: lighten(@accent, 10%);
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ }
+ }
+ &-select {
+ color: @subtext0;
+ background-color: @crust;
+ border-color: lighten(@crust, 5%);
+ &:hover {
+ color: @subtext0;
+ background-color: @crust;
+ border-color: lighten(@accent, 5%);
+ }
+ &:focus {
+ color: @subtext0;
+ background-color: @crust;
+ border-color: lighten(@accent, 10%);
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ }
+ }
+ &-check-input {
+ border-color: darken(@mantle, 5%);
+ &:focus {
+ border-color: lighten(@accent, 10%);
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ &:not(:checked) {
+ @form-check-input-svg: escape(
+ ''
+ );
+ background-image: url("data:image/svg+xml,@{form-check-input-svg}")
+ !important;
+ }
+ background-color: @crust;
+ }
+ &:checked {
+ background-color: @accent;
+ border-color: @accent;
+ }
+ }
+ }
+ .svelecte-control .sv-control {
+ border-color: lighten(@crust, 5%) !important;
+ }
+ .sv {
+ &-control,
+ &-input-row {
+ background-color: @crust !important;
+ color: @text !important;
+ }
+ &-dropdown,
+ &-item,
+ &-item-content {
+ background-color: @mantle !important;
+ color: @text !important;
+ }
+ }
+ .input-group-text {
+ color: @subtext0;
+ background-color: @mantle;
+ border-color: lighten(@crust, 5%);
+ }
+
+ .list-group-item {
+ background-color: @mantle;
+ color: @text;
+ border-color: lighten(@crust, 5%);
+ }
+ a {
+ color: @accent;
+ &:hover {
+ color: lighten(@accent, 5%);
+ }
+ &:visited {
+ color: lighten(@accent, 10%);
+ }
+ }
+ .page-item {
+ color: @text;
+ &.active .page-link {
+ background-color: @accent;
+ border-color: @accent;
+ }
+ .page-link {
+ background-color: @crust;
+ border-color: lighten(@crust, 5%);
+ }
+ &.disabled .page-link {
+ background-color: @crust;
+ border-color: lighten(@crust, 5%);
+ }
+ }
+ .accordion {
+ &-item {
+ background-color: @mantle;
+ border-color: darken(@mantle, 5%);
+ }
+ &-button {
+ color: @text;
+ background-color: @mantle;
+
+ &:focus {
+ color: @text;
+ background-color: @accent;
+ border-color: lighten(@accent, 10%);
+ box-shadow: 0 0 0 0.25rem fade(lighten(@accent, 10%), 25%);
+ }
+ &:not(.collapsed) {
+ color: lighten(@accent, 10%);
+ background-color: darken(@accent, 10%);
+ box-shadow: inset 0 -1px fade(lighten(@accent, 10%), 15%);
+ }
+ }
+ &-header {
+ background-color: @mantle;
+ }
+ &-body {
+ color: @subtext0;
+ background-color: @crust;
+ }
+ }
+ .modal-content {
+ background-color: @crust;
+ }
+ code {
+ background: @crust !important;
+ color: @text;
+ }
+ /* the checkboxes on the settings page are different than anywhere else for...some reason? */
+ button.svelte-1y1be9d {
+ color: @text !important;
+ &[aria-checked="true"] {
+ background-color: @accent !important;
+ }
+ &[aria-checked="false"] {
+ background-color: @crust !important;
+ }
+ }
+ /* see https://github.com/PluralKit/PluralKit/blob/main/dashboard/src/components/status/Shard.svelte. this should be fine (though not very maintainable) */
+ .shard {
+ &[style*="#000"] {
+ background-color: @crust !important;
+ }
+ &[style*="#00cc00"] {
+ background-color: @green !important;
+ }
+ &[style*="#da9317"] {
+ background-color: @yellow !important;
+ }
+ &[style*="#cc0000"] {
+ background-color: @red !important;
+ }
+ }
+ .alert {
+ color: contrast(@green);
+ background-color: @green;
+ border-color: @green;
+ &-warning {
+ color: contrast(@yellow);
+ background-color: @yellow;
+ border-color: @yellow;
+ }
+ &-danger {
+ color: contrast(@red);
+ background-color: @red;
+ border-color: @red;
+ }
+ }
+ .spinner-border {
+ border-color: @accent;
+ border-right-color: transparent;
+ }
+ }
+}
+
+/* deno-fmt-ignore */
+@catppuccin: {
+ @latte: {
+ @rosewater: #dc8a78;
+ @flamingo: #dd7878;
+ @pink: #ea76cb;
+ @mauve: #8839ef;
+ @red: #d20f39;
+ @maroon: #e64553;
+ @peach: #fe640b;
+ @yellow: #df8e1d;
+ @green: #40a02b;
+ @teal: #179299;
+ @sky: #04a5e5;
+ @sapphire: #209fb5;
+ @blue: #1e66f5;
+ @lavender: #7287fd;
+ @text: #4c4f69;
+ @subtext1: #5c5f77;
+ @subtext0: #6c6f85;
+ @overlay2: #7c7f93;
+ @overlay1: #8c8fa1;
+ @overlay0: #9ca0b0;
+ @surface2: #acb0be;
+ @surface1: #bcc0cc;
+ @surface0: #ccd0da;
+ @base: #eff1f5;
+ @mantle: #e6e9ef;
+ @crust: #dce0e8;
+ };
+ @frappe: {
+ @rosewater: #f2d5cf;
+ @flamingo: #eebebe;
+ @pink: #f4b8e4;
+ @mauve: #ca9ee6;
+ @red: #e78284;
+ @maroon: #ea999c;
+ @peach: #ef9f76;
+ @yellow: #e5c890;
+ @green: #a6d189;
+ @teal: #81c8be;
+ @sky: #99d1db;
+ @sapphire: #85c1dc;
+ @blue: #8caaee;
+ @lavender: #babbf1;
+ @text: #c6d0f5;
+ @subtext1: #b5bfe2;
+ @subtext0: #a5adce;
+ @overlay2: #949cbb;
+ @overlay1: #838ba7;
+ @overlay0: #737994;
+ @surface2: #626880;
+ @surface1: #51576d;
+ @surface0: #414559;
+ @base: #303446;
+ @mantle: #292c3c;
+ @crust: #232634;
+ };
+ @macchiato: {
+ @rosewater: #f4dbd6;
+ @flamingo: #f0c6c6;
+ @pink: #f5bde6;
+ @mauve: #c6a0f6;
+ @red: #ed8796;
+ @maroon: #ee99a0;
+ @peach: #f5a97f;
+ @yellow: #eed49f;
+ @green: #a6da95;
+ @teal: #8bd5ca;
+ @sky: #91d7e3;
+ @sapphire: #7dc4e4;
+ @blue: #8aadf4;
+ @lavender: #b7bdf8;
+ @text: #cad3f5;
+ @subtext1: #b8c0e0;
+ @subtext0: #a5adcb;
+ @overlay2: #939ab7;
+ @overlay1: #8087a2;
+ @overlay0: #6e738d;
+ @surface2: #5b6078;
+ @surface1: #494d64;
+ @surface0: #363a4f;
+ @base: #24273a;
+ @mantle: #1e2030;
+ @crust: #181926;
+ };
+ @mocha: {
+ @rosewater: #f5e0dc;
+ @flamingo: #f2cdcd;
+ @pink: #f5c2e7;
+ @mauve: #cba6f7;
+ @red: #f38ba8;
+ @maroon: #eba0ac;
+ @peach: #fab387;
+ @yellow: #f9e2af;
+ @green: #a6e3a1;
+ @teal: #94e2d5;
+ @sky: #89dceb;
+ @sapphire: #74c7ec;
+ @blue: #89b4fa;
+ @lavender: #b4befe;
+ @text: #cdd6f4;
+ @subtext1: #bac2de;
+ @subtext0: #a6adc8;
+ @overlay2: #9399b2;
+ @overlay1: #7f849c;
+ @overlay0: #6c7086;
+ @surface2: #585b70;
+ @surface1: #45475a;
+ @surface0: #313244;
+ @base: #1e1e2e;
+ @mantle: #181825;
+ @crust: #11111b;
+ };
+};
diff --git a/styles/pluralkit/preview.webp b/styles/pluralkit/preview.webp
new file mode 100644
index 0000000000..ac833849d5
Binary files /dev/null and b/styles/pluralkit/preview.webp differ