commit c19ea940bd44fda4008b533fbfbb7c78763033d7 Author: Nick Date: Sun Oct 6 15:25:05 2024 -0500 feat: init diff --git a/.envrc b/.envrc new file mode 100755 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..c985cdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.direnv +.vscode +.pre-commit-config.yaml +result diff --git a/.sops.yaml b/.sops.yaml new file mode 100755 index 0000000..ed567de --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,7 @@ +keys: + - &user0 age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0 +creation_rules: + - path_regex: secrets/secrets.yaml$ + key_groups: + - age: + - *user0 diff --git a/config/default.nix b/config/default.nix new file mode 100755 index 0000000..32f965f --- /dev/null +++ b/config/default.nix @@ -0,0 +1,168 @@ +{lib, ...}: let + deviceNames = [ + "desktop" + "fallaryn" + "laptop" + "nas" + "phone" + "server" + "tablet" + "wildcard" + ]; + instanceNames = [ + "acme" + "caddy" + "castopod" + "forgejo" + "jellyfin" + "mastodon" + "matrix" + "minecraft" + "nextcloud" + "nginx" + "ollama" + "peertube" + "postgresql" + "samba" + "syncthing" + "synology" + "vaultwarden" + "writefreely" + ]; + userNames = [ + "user0" + "user1" + "user2" + "user3" + ]; + stringType = lib.mkOption { + type = lib.types.str; + }; + intType = lib.mkOption { + type = lib.types.int; + }; + listType = lib.mkOption { + type = lib.types.listOf lib.types.str; + }; + + numOptions = 20; + + genOptions = config: prefix: + builtins.listToAttrs ( + map + (i: { + name = "${prefix}${toString i}"; + value = config; + }) + (builtins.genList (i: i) numOptions) + ); +in let + peopleSubmodule = lib.types.submodule { + options = + builtins.listToAttrs (map (name: { + inherit name; + value = stringType; + }) + userNames) + // { + user = lib.mkOption { + type = lib.types.attrsOf userSubmodule; + }; + }; + }; + userSubmodule = lib.types.submodule { + options = { + name = stringType; + sshKeys = listType; + group = stringType; + email = genOptions stringType "address"; + domain = genOptions stringType "url"; + dns = genOptions stringType "provider"; + git = genOptions stringType "path"; + }; + }; + serviceSubmodule = lib.types.submodule { + options = + builtins.listToAttrs ( + map + (name: { + inherit name; + value = stringType; + }) + instanceNames + ) + // { + instance = lib.mkOption { + type = lib.types.attrsOf instanceSubmodule; + }; + }; + }; + instanceSubmodule = lib.types.submodule { + options = { + subdomain = stringType; + label = stringType; + name = stringType; + sops = genOptions stringType "path"; + paths = genOptions stringType "path"; + ports = genOptions intType "port"; + ssl = { + cert = stringType; + key = stringType; + }; + }; + }; + systemSubmodule = lib.types.submodule { + options = + builtins.listToAttrs ( + map + (name: { + inherit name; + value = stringType; + }) + deviceNames + ) + // { + device = lib.mkOption { + type = lib.types.attrsOf deviceSubmodule; + }; + }; + }; + deviceSubmodule = let + mountConfig = { + mount = stringType; + device = stringType; + options = listType; + }; + in + lib.types.submodule { + options = + { + boot = mountConfig; + ip = genOptions stringType "address"; + label = stringType; + name = stringType; + sync = stringType; + } + // genOptions mountConfig "folder" + // genOptions mountConfig "samba" + // genOptions mountConfig "storage"; + }; +in { + options = { + service = lib.mkOption { + type = serviceSubmodule; + }; + system = lib.mkOption { + type = systemSubmodule; + }; + people = lib.mkOption { + type = peopleSubmodule; + }; + }; + + config = { + people = import ./user.nix; + service = import ./instance.nix; + system = import ./device.nix; + }; +} diff --git a/config/device.nix b/config/device.nix new file mode 100755 index 0000000..914608e --- /dev/null +++ b/config/device.nix @@ -0,0 +1,184 @@ +let + perms22 = ["fmask=0022" "dmask=0022"]; + perms77 = ["fmask=0077" "dmask=0077"]; + permsRW = ["rw"]; + permsSmb = ["rw" "gid=100" "vers=3.0" "x-systemd.automount" "x-systemd.requires=network-online.target"]; + permsFm = ["file_mode=0644" "dir_mode=0755"]; + uid0 = ["uid=1000"]; + uid1 = ["uid=1001"]; +in { + device = { + # Desktop + desktop = { + label = "Desktop"; + name = "desktop"; + sync = ""; + ip = { + address0 = "192.168.50.196"; + }; + boot = { + options = perms22; + }; + storage0 = { + mount = "/mnt/media/games"; + device = "/dev/disk/by-label/Games"; + options = permsRW; + }; + storage1 = { + mount = "/mnt/media/storage"; + device = "/dev/disk/by-label/Storage"; + options = permsRW; + }; + }; + + # Laptop + + laptop = { + label = "Laptop"; + name = "laptop"; + sync = ""; + ip = { + address0 = "192.168.50.142"; + }; + boot = { + options = perms22; + }; + }; + + # Server + + server = let + serverName = "server"; + serverIP = "192.168.50.140"; + in { + label = "Server"; + name = serverName; + ip = { + address0 = serverIP; + }; + boot = { + options = perms77; + }; + storage0 = let + nasPath = "NAS1"; + in { + mount = "/mnt/media/${nasPath}"; + device = "/dev/disk/by-label/${nasPath}"; + options = permsRW; + }; + samba0 = let + share0Name = "media"; + in { + mount = "/mnt/media/${serverName}/${share0Name}"; + device = "//${serverIP}/${share0Name}"; + options = permsSmb ++ permsFm ++ uid0; + }; + }; + + # Synology + + nas = let + user0 = "nick"; + user1 = "garnet"; + user2 = "fallaryn"; + user3 = "denise"; + user0Name = "Nick"; + user1Name = "Garnet"; + user2Name = "Fallaryn"; + user3Name = "Denise"; + nasName = "synology"; + nasIP = "192.168.50.209"; + in { + label = "Synology"; + sync = "MWRGX2V-F5XKE5E-REP6ECT-OOPFBMF-22NHSMW-YFBU6MB-PLFUN63-R3MW2QX"; + name = nasName; + ip = { + address0 = nasIP; + }; + # Nick Home Folder + folder0 = { + mount = "/mnt/media/${nasName}/${user0}"; + device = "//${nasIP}/homes/${user0Name}"; + options = permsSmb ++ uid0; + }; + # Garnet Home Folder + folder1 = { + mount = "/mnt/media/${nasName}/${user1}"; + device = "//${nasIP}/homes/${user1Name}"; + options = permsSmb ++ uid1; + }; + # Fallaryn Home Folder + folder2 = { + mount = "/mnt/media/${nasName}/${user2}"; + device = "//${nasIP}/homes/${user2Name}"; + options = permsSmb ++ uid0; + }; + # Denise Home Folder + folder3 = { + mount = "/mnt/media/${nasName}/${user3}"; + device = "//${nasIP}/homes/${user3Name}"; + options = permsSmb ++ uid0; + }; + # Minecraft Worlds + folder4 = { + mount = "/home/${user1}/.local/share/PrismLauncher/instances/1.21/.minecraft/saves"; + device = "//${nasIP}/homes/${user1Name}/Minecraft"; + options = permsSmb ++ uid1; + }; + }; + + # Fallaryn Desktop + + fallaryn = { + label = "fallaryn"; + name = "fallaryn"; + ip = { + address0 = ""; + }; + boot = { + options = perms22; + }; + storage0 = { + mount = "/run/media/games"; + device = "/dev/disk/by-label/Games"; + options = permsRW; + }; + storage1 = { + mount = "/run/media/entertainment"; + device = "/dev/disk/by-label/Entertainment"; + options = permsRW; + }; + }; + + # Pixel 7 Pro + + phone = { + name = "pixel"; + sync = "AE65XCK-4FYDDBB-SMPCDQO-U3CZUHA-LAWTKZY-ZBUGVNI-ZRYACB2-FFNFVQF"; + ip = { + address0 = "192.168.50.243"; + }; + }; + + # Samsung S7 FE + + tablet = { + name = "tablet"; + sync = "I2ZSCZU-T4JMUJJ-XCUQ3MY-G5EUFZ5-KRG2DRY-XIBJZZM-FQW3UMY-CBCTUQU"; + ip = { + address0 = "192.168.50.189"; + }; + }; + + # No particular system + + wildcard = { + ip = { + address0 = "127.0.0.1"; # Local + address1 = "0.0.0.0"; # All + address2 = "192.168.50.1"; # Router + address3 = "192.168.50.0"; # Router + }; + }; + }; +} diff --git a/config/instance.nix b/config/instance.nix new file mode 100755 index 0000000..4fe9a65 --- /dev/null +++ b/config/instance.nix @@ -0,0 +1,336 @@ +let + acmeLabel = "Acme"; + caddyLabel = "Caddy"; + castLabel = "Castopod"; + forgejoLabel = "Forgejo"; + jellyfinLabel = "Jellyfin"; + mastodonLabel = "Mastodon"; + matrixLabel = "Matrix"; + minecraftLabel = "Minecraft"; + nextcloudLabel = "Nextcloud"; + ollamaLabel = "Ollama"; + peertubeLabel = "PeerTube"; + postgresLabel = "PostgreSQL"; + sambaLabel = "Samba"; + syncthingLabel = "Syncthing"; + synologyLabel = "Synology"; + vaultwardenLabel = "Vaultwarden"; + writefreelyLabel = "WriteFreely"; + + acmeName = "acme"; + caddyName = "caddy"; + castName = "castopod"; + forgejoName = "forgejo"; + jellyfinName = "jellyfin"; + mastodonName = "mastodon"; + matrixName = "matrix"; + minecraftName = "minecraft"; + nextcloudName = "nextcloud"; + ollamaName = "ollama"; + peertubeName = "peertube"; + postgresName = "postgres"; + sambaName = "samba"; + syncthingName = "syncthing"; + synologyName = "synology"; + vaultwardenName = "vaultwarden"; + writefreelyName = "writefreely"; + + domain0 = "cloudbert.fun"; + domain1 = "the-nutrivore.social"; + + servicePath = "/mnt/media/NAS1"; + + sops = "/var/lib/secrets"; + + sslPath = "/var/lib/acme"; +in { + instance = { + acme = { + label = acmeLabel; + name = acmeName; + paths = { + path0 = sslPath; + }; + sops = { + path0 = "${sops}/${acmeName}"; + }; + }; + caddy = { + label = caddyLabel; + name = caddyName; + sops = { + path0 = "${sops}/${caddyName}"; + }; + ports = { + port0 = 80; + port1 = 443; + }; + }; + castopod = let + castDomain = "podcast"; + in { + label = castLabel; + name = castName; + sops = { + path0 = "${sops}/${castName}"; + }; + subdomain = castDomain; + paths = { + path0 = "${servicePath}/${castLabel}"; + }; + ports = { + port0 = 8000; + }; + ssl = { + cert = "${sslPath}/${castDomain}.${domain1}/fullchain.pem"; + key = "${sslPath}/${castDomain}.${domain1}/key.pem"; + }; + }; + forgejo = let + forgejoDomain = "source"; + in { + label = forgejoLabel; + name = forgejoName; + sops = { + path0 = "${sops}/${forgejoName}"; + }; + subdomain = forgejoDomain; + paths = { + path0 = "${servicePath}/${forgejoLabel}"; + }; + ports = { + port0 = 3000; + }; + ssl = { + cert = "${sslPath}/${forgejoDomain}.${domain1}/fullchain.pem"; + key = "${sslPath}/${forgejoDomain}.${domain1}/key.pem"; + }; + }; + jellyfin = { + label = jellyfinLabel; + name = jellyfinName; + sops = { + path0 = "${sops}/${jellyfinName}"; + }; + subdomain = jellyfinName; + paths = { + path0 = "${servicePath}/${jellyfinLabel}"; + }; + ports = { + port0 = 5055; # Jellyseer + port1 = 8096; # Jellyfin HTTP + port2 = 8920; # Jellyfin HTTPS + }; + ssl = { + cert = "${sslPath}/${jellyfinName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${jellyfinName}.${domain0}/key.pem"; + }; + }; + matrix = { + label = matrixLabel; + name = matrixName; + sops = { + path0 = "${sops}/${matrixName}"; + }; + subdomain = matrixName; + paths = { + path0 = "${servicePath}/${matrixLabel}"; + path1 = ""; + path2 = ""; + }; + }; + mastodon = { + label = mastodonLabel; + name = mastodonName; + sops = { + path0 = "${sops}/${mastodonName}"; + }; + paths = { + path0 = "${servicePath}/${mastodonLabel}"; + path1 = ""; + path2 = ""; + }; + ssl = { + cert = "${sslPath}/${domain1}/fullchain.pem"; + key = "${sslPath}/${domain1}/key.pem"; + }; + }; + minecraft = { + label = minecraftLabel; + name = minecraftName; + sops = { + path0 = "${sops}/${minecraftName}"; + }; + subdomain = minecraftName; + paths = { + path0 = "${servicePath}/${minecraftLabel}"; + }; + ports = { + port0 = 43000; # Minecraft (Brix on Nix) + }; + ssl = { + cert = "${sslPath}/${minecraftName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${minecraftName}.${domain0}/key.pem"; + }; + }; + nextcloud = { + label = nextcloudLabel; + name = nextcloudName; + sops = { + path0 = "${sops}/${nextcloudName}"; + }; + subdomain = nextcloudName; + paths = { + path0 = "${servicePath}/${nextcloudLabel}"; + }; + ports = { + port0 = 8354; # Nextcloud + }; + ssl = { + cert = "${sslPath}/${nextcloudName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${nextcloudName}.${domain0}/key.pem"; + }; + }; + nginx = { + ports = { + port0 = 8080; # HTTP + port1 = 8443; # HTTPS + }; + }; + ollama = { + label = ollamaLabel; + name = ollamaName; + sops = { + path0 = "${sops}/${ollamaName}"; + }; + subdomain = ollamaName; + paths = { + path0 = "${servicePath}/${ollamaLabel}"; + path1 = "/mnt/media/storage/${ollamaName}"; + }; + ports = { + port0 = 8088; # Open-WebUI (Ollama Front End) + port1 = 11434; # Ollama API + }; + ssl = { + cert = "${sslPath}/${ollamaName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${ollamaName}.${domain0}/key.pem"; + }; + }; + peertube = { + label = peertubeLabel; + name = peertubeName; + sops = { + path0 = "${sops}/${peertubeName}"; + }; + subdomain = "video"; + paths = { + path0 = "${servicePath}/${peertubeLabel}"; + }; + ports = { + port0 = 9000; # HTTP + port1 = 1935; + port2 = 1936; + port3 = 5432; + port4 = 52800; + }; + ssl = { + cert = "${sslPath}/video.${domain1}/fullchain.pem"; + key = "${sslPath}/video.${domain1}/key.pem"; + }; + }; + postgresql = { + label = postgresLabel; + name = postgresName; + sops = { + path0 = "${sops}/${postgresName}"; + }; + paths = { + path0 = "${servicePath}/${postgresLabel}"; + }; + ports = { + port0 = 5432; + }; + }; + samba = { + label = sambaLabel; + name = sambaName; + sops = { + path0 = "${sops}/${sambaName}"; + }; + paths = { + path0 = "${servicePath}/${jellyfinLabel}"; + path1 = ""; + path2 = ""; + }; + ports = { + port0 = 445; # Samba + }; + }; + synology = { + label = synologyLabel; + name = synologyName; + sops = { + path0 = "${sops}/${synologyName}"; + }; + ports = { + port0 = 5001; # Synology HTTPS + }; + }; + syncthing = { + label = syncthingLabel; + name = syncthingName; + sops = { + path0 = "${sops}/${syncthingName}"; + }; + subdomain = syncthingName; + ports = { + port0 = 8388; # Syncthing (WebUI) + port1 = 21027; # Syncthing (Discovery) + port2 = 22000; # Syncthing (Transfer) + }; + ssl = { + cert = "${sslPath}/${syncthingName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${syncthingName}.${domain0}/key.pem"; + }; + }; + vaultwarden = { + label = vaultwardenLabel; + name = vaultwardenName; + sops = { + path0 = "${sops}/${vaultwardenName}"; + }; + subdomain = vaultwardenName; + paths = { + path0 = "${servicePath}/${vaultwardenLabel}/BackupDir"; + }; + ports = { + port0 = 8085; # Vaultwarden WebUI + }; + ssl = { + cert = "${sslPath}/${vaultwardenName}.${domain0}/fullchain.pem"; + key = "${sslPath}/${vaultwardenName}.${domain0}/key.pem"; + }; + }; + writefreely = let + writefreelyDomain = "blog"; + in { + label = writefreelyLabel; + name = writefreelyName; + sops = { + path0 = "${sops}/${writefreelyName}"; + }; + subdomain = writefreelyDomain; + paths = { + path0 = "${servicePath}/${writefreelyLabel}/BackupDir"; + }; + ports = { + port0 = 8093; + }; + ssl = { + cert = "${sslPath}/${writefreelyDomain}.${domain0}/fullchain.pem"; + key = "${sslPath}/${writefreelyDomain}.${domain0}/key.pem"; + }; + }; + }; +} diff --git a/config/user.nix b/config/user.nix new file mode 100755 index 0000000..68eee09 --- /dev/null +++ b/config/user.nix @@ -0,0 +1,62 @@ +let + user0 = "nick"; + user1 = "garnet"; + user2 = "fallaryn"; + user3 = "denise"; +in { + inherit + user0 + user1 + user2 + user3 + ; + user = { + "${user0}" = { + name = "Nick"; + email = { + address0 = "nickjhiebert@proton.me"; + address1 = "thenutrivore@proton.me"; + address2 = "thenutrivore@the-nutrivore.social"; + address3 = "noreply@vaultwarden.cloudbert.fun"; + address4 = "noreply@video.the-nutrivore.social"; + address5 = "noreply@source.the-nutrivore.social"; + address6 = "noreply@podcast.the-nutrivore.social"; + }; + domain = { + url0 = "cloudbert.fun"; + url1 = "the-nutrivore.social"; + }; + git = { + path0 = "/home/${user0}/Files/Projects"; + }; + dns = { + provider0 = "namecheap"; + }; + sshKeys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop" + ]; + }; + "${user1}" = { + name = "Garnet"; + email = { + address0 = "ninaeffler@gmail.com"; + }; + }; + "${user2}" = { + name = "Fallaryn"; + email = { + address0 = "staciesimonson@gmail.com"; + }; + sshKeys = [ + ]; + }; + "${user3}" = { + name = "Denise"; + email = { + address0 = "denisehiebert@shaw.ca"; + }; + sshKeys = [ + ]; + }; + }; +} diff --git a/flake.lock b/flake.lock new file mode 100755 index 0000000..b4b75f2 --- /dev/null +++ b/flake.lock @@ -0,0 +1,640 @@ +{ + "nodes": { + "buildbot-nix": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1727658705, + "narHash": "sha256-OEoMO7bvKyRFyoAR4DIGoWWEJ1OlWveUAICRHhWasTs=", + "owner": "nix-community", + "repo": "buildbot-nix", + "rev": "d2dd93e4d12be7a05ef7640c7375c58739263d8d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "buildbot-nix", + "type": "github" + } + }, + "dream2nix": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ], + "purescript-overlay": "purescript-overlay", + "pyproject-nix": "pyproject-nix" + }, + "locked": { + "lastModified": 1727548743, + "narHash": "sha256-OwvwVlqCBa9IwcmdBd8Rhap6a0qw6KxVVJ5lUM5jmUw=", + "owner": "nix-community", + "repo": "dream2nix", + "rev": "2797dd2da736d0f69dfdb8fd7738d84f4578b03f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "dream2nix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727826117, + "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "ngipkgs", + "buildbot-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726153070, + "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": [ + "ngipkgs", + "systems" + ] + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1728041527, + "narHash": "sha256-03liqiJtk9UP7YQHW4r8MduKCK242FQzud8iWvvlK+o=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "509dbf8d45606b618e9ec3bbe4e936b7c5bc6c1e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1723503926, + "narHash": "sha256-Rosl9iA9MybF5Bud4BTAQ9adbY81aGmPfV8dDBGl34s=", + "rev": "bcaeb6388b8916ac6d1736e3aa2b13313e6a6bd2", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/bcaeb6388b8916ac6d1736e3aa2b13313e6a6bd2.tar.gz?rev=bcaeb6388b8916ac6d1736e3aa2b13313e6a6bd2" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/2.91.0.tar.gz" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils", + "flakey-profile": "flakey-profile", + "lix": "lix", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1723510904, + "narHash": "sha256-zNW/rqNJwhq2lYmQf19wJerRuNimjhxHKmzrWWFJYts=", + "rev": "622a2253a071a1fb97a4d3c8103a91114acc1140", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/622a2253a071a1fb97a4d3c8103a91114acc1140.tar.gz?rev=622a2253a071a1fb97a4d3c8103a91114acc1140" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.0.tar.gz" + } + }, + "ngipkgs": { + "inputs": { + "buildbot-nix": "buildbot-nix", + "dream2nix": "dream2nix", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs", + "nixpkgs-stable": "nixpkgs-stable", + "pre-commit-hooks": "pre-commit-hooks", + "sops-nix": "sops-nix", + "systems": "systems_2" + }, + "locked": { + "lastModified": 1727864923, + "narHash": "sha256-3nsPrhrcrO+t9STFt0vnuYXT/nChsZfjsYdk5h04ckg=", + "owner": "ngi-nix", + "repo": "ngipkgs", + "rev": "43150a5580e88278882339ea9f5f53a2f6420f6a", + "type": "github" + }, + "original": { + "owner": "ngi-nix", + "repo": "ngipkgs", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1727617520, + "narHash": "sha256-uNfh3aMyCekMpjtL/PZtl2Hz/YqNuUpCBEzVxt1QYck=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7eee17a8a5868ecf596bbb8c8beb527253ea8f4d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720535198, + "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1720386169, + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1728018373, + "narHash": "sha256-NOiTvBbRLIOe5F6RbHaAh6++BNjsb149fGZd1T4+KBg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bc947f541ae55e999ffdb4013441347d83b00feb", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "locked": { + "lastModified": 1728196319, + "narHash": "sha256-HqFjmlrlxLc9dhx3k8X/JbXUaanvg5HciiUHphL4jf4=", + "owner": "nix-community", + "repo": "NUR", + "rev": "1edcc31bb5ec6006e1d3021f30de2a04f24a89ca", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ], + "nixpkgs-stable": [ + "ngipkgs", + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1727514110, + "narHash": "sha256-0YRcOxJG12VGDFH8iS8pJ0aYQQUAgo/r3ZAL+cSh9nk=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "85f7a7177c678de68224af3402ab8ee1bcee25c8", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix": { + "inputs": { + "flake-compat": "flake-compat_3", + "gitignore": "gitignore_2", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1728092656, + "narHash": "sha256-eMeCTJZ5xBeQ0f9Os7K8DThNVSo9gy4umZLDfF5q6OM=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "1211305a5b237771e13fcca0c51e60ad47326a9a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "purescript-overlay": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "ngipkgs", + "dream2nix", + "nixpkgs" + ], + "slimlock": "slimlock" + }, + "locked": { + "lastModified": 1724504251, + "narHash": "sha256-TIw+sac0NX0FeAneud+sQZT+ql1G/WEb7/Vb436rUXM=", + "owner": "thomashoneyman", + "repo": "purescript-overlay", + "rev": "988b09676c2a0e6a46dfa3589aa6763c90476b8a", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "purescript-overlay", + "type": "github" + } + }, + "pyproject-nix": { + "flake": false, + "locked": { + "lastModified": 1702448246, + "narHash": "sha256-hFg5s/hoJFv7tDpiGvEvXP0UfFvFEDgTdyHIjDVHu1I=", + "owner": "davhau", + "repo": "pyproject.nix", + "rev": "5a06a2697b228c04dd2f35659b4b659ca74f7aeb", + "type": "github" + }, + "original": { + "owner": "davhau", + "ref": "dream2nix", + "repo": "pyproject.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "home-manager": "home-manager", + "lix-module": "lix-module", + "ngipkgs": "ngipkgs", + "nixpkgs": "nixpkgs_2", + "nur": "nur", + "pre-commit-hooks-nix": "pre-commit-hooks-nix", + "sops-nix": "sops-nix_2", + "systems": "systems_3" + } + }, + "slimlock": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "dream2nix", + "purescript-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688756706, + "narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=", + "owner": "thomashoneyman", + "repo": "slimlock", + "rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "slimlock", + "type": "github" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "nixpkgs" + ], + "nixpkgs-stable": [ + "ngipkgs", + "nixpkgs-stable" + ] + }, + "locked": { + "lastModified": 1727423009, + "narHash": "sha256-+4B/dQm2EnORIk0k2wV3aHGaE0WXTBjColXjj7qWh10=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "127a96f49ddc377be6ba76964411bab11ae27803", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "sops-nix_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727734513, + "narHash": "sha256-i47LQwoGCVQq4upV2YHV0OudkauHNuFsv306ualB/Sw=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "3198a242e547939c5e659353551b0668ec150268", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1680978846, + "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=", + "owner": "nix-systems", + "repo": "x86_64-linux", + "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "x86_64-linux", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "ngipkgs", + "buildbot-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727431250, + "narHash": "sha256-uGRlRT47ecicF9iLD1G3g43jn2e+b5KaMptb59LHnvM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "879b29ae9a0378904fbbefe0dadaed43c8905754", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100755 index 0000000..fc1a01f --- /dev/null +++ b/flake.nix @@ -0,0 +1,102 @@ +{ + description = "Nick's Big Fat Flakey Sausage"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + lix-module = { + url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.0.tar.gz"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + flake-parts = { + url = "github:hercules-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nur.url = "github:nix-community/NUR"; + ngipkgs.url = "github:ngi-nix/ngipkgs"; + pre-commit-hooks-nix = { + url = "github:cachix/pre-commit-hooks.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + systems.url = "github:nix-systems/x86_64-linux"; + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs-stable.follows = "nixpkgs"; + }; + }; + + outputs = inputs: + inputs.flake-parts.lib.mkFlake {inherit inputs;} { + imports = [ + inputs.pre-commit-hooks-nix.flakeModule + ./home-manager + ./lib + ./nixos + ./parts + ./config + ]; + + flake = {config, ...}: { + nixosConfigurations = { + desktop = inputs.self.lib.mkLinuxSystem [ + ./systems/desktop + ./profiles/user0 + ./profiles/user1 + config.nixosModules.personal + config.nixosModules.desktop + config.nixosModules.shared + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.nur.nixosModules.nur + inputs.sops-nix.nixosModules.sops + ]; + fallaryn = inputs.self.lib.mkLinuxSystem [ + ./systems/fallaryn + ./profiles/user2 + config.nixosModules.personal + config.nixosModules.shared + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.nur.nixosModules.nur + inputs.sops-nix.nixosModules.sops + ]; + laptop = inputs.self.lib.mkLinuxSystem [ + ./systems/laptop + ./profiles/user0 + ./profiles/user1 + ./profiles/user2 + config.nixosModules.personal + config.nixosModules.shared + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.nur.nixosModules.nur + inputs.sops-nix.nixosModules.sops + ]; + server = inputs.self.lib.mkLinuxSystem [ + ./systems/server + ./profiles/user0 + config.nixosModules.server + config.nixosModules.shared + inputs.home-manager.nixosModules.home-manager + inputs.lix-module.nixosModules.default + inputs.ngipkgs.nixosModules."services.peertube" + inputs.ngipkgs.nixosModules.default + inputs.nur.nixosModules.nur + inputs.sops-nix.nixosModules.sops + ]; + }; + templates = { + haskell = { + path = ./templates/haskell; + description = "Haskell/Elm Environment"; + }; + }; + }; + + systems = import inputs.systems; + }; +} diff --git a/home-manager/default.nix b/home-manager/default.nix new file mode 100755 index 0000000..decee49 --- /dev/null +++ b/home-manager/default.nix @@ -0,0 +1,203 @@ +let + # Folders + bat = import ./modules/bat; + firefox = import ./modules/firefox; + obs-studio = import ./modules/obs-studio; + qbittorrent = import ./modules/qbittorrent; + # Files + bottom = import ./modules/bottom.nix; + brave = import ./modules/brave.nix; + cursor = import ./modules/cursor.nix; + direnv = import ./modules/direnv.nix; + freetube = import ./modules/freetube.nix; + git = import ./modules/git.nix; + helix = import ./modules/helix.nix; + home-manager = import ./modules/home-manager.nix; + lazygit = import ./modules/lazygit.nix; + misc-android = import ./modules/misc/android.nix; + misc-commandLine = import ./modules/misc/command-line.nix; + misc-fileManagement = import ./modules/misc/file-management.nix; + misc-gaming = import ./modules/misc/gaming.nix; + misc-gnomeExtras = import ./modules/misc/gnome-extras.nix; + misc-internet-extras = import ./modules/misc/internet-extras.nix; + misc-internet = import ./modules/misc/internet.nix; + misc-jellyfin = import ./modules/misc/jellyfin.nix; + misc-kdeExtras = import ./modules/misc/kde-extras.nix; + misc-media = import ./modules/misc/media.nix; + misc-privacy = import ./modules/misc/privacy.nix; + misc-productionArt = import ./modules/misc/production-art.nix; + misc-productionArtExtras = import ./modules/misc/production-art-extras.nix; + misc-productionAudio = import ./modules/misc/production-audio.nix; + misc-productionCode = import ./modules/misc/production-code.nix; + misc-productionVideo = import ./modules/misc/production-video.nix; + misc-productionWriting = import ./modules/misc/production-writing.nix; + misc-virtualization = import ./modules/misc/virtualization.nix; + misc-yazi = import ./modules/misc/yazi.nix; + misc-wpsoffice = import ./modules/misc/wpsoffice.nix; + mpv = import ./modules/mpv.nix; + nextcloud = import ./modules/nextcloud.nix; + nushell = import ./modules/nushell.nix; + starship = import ./modules/starship.nix; + vscode = import ./modules/vscode.nix; + wezterm = import ./modules/wezterm.nix; + yazi = import ./modules/yazi.nix; + zellij = import ./modules/zellij.nix; + zoxide = import ./modules/zoxide.nix; +in { + flake.homeModules = { + inherit + # Folders + bat + firefox + obs-studio + qbittorrent + # Files + + bottom + brave + cursor + direnv + freetube + git + helix + home-manager + lazygit + misc-android + misc-commandLine + misc-fileManagement + misc-gaming + misc-gnomeExtras + misc-internet + misc-internet-extras + misc-jellyfin + misc-kdeExtras + misc-media + misc-privacy + misc-productionArtExtras + misc-productionArt + misc-productionAudio + misc-productionCode + misc-productionVideo + misc-productionWriting + misc-virtualization + misc-yazi + mpv + nextcloud + nushell + starship + vscode + wezterm + yazi + zellij + zoxide + ; + commandLine = { + imports = [ + bat + bottom + direnv + git + helix + home-manager + lazygit + misc-android + misc-commandLine + misc-virtualization + misc-yazi + nushell + starship + wezterm + yazi + zellij + zoxide + ]; + }; + entertainment = { + imports = [ + misc-gaming + misc-media + freetube + mpv + ]; + }; + extras = { + imports = [ + misc-gnomeExtras + misc-kdeExtras + ]; + }; + fileManagement = { + imports = [ + misc-fileManagement + ]; + }; + internetExtras = { + imports = [ + misc-internet-extras + ]; + }; + firefoxHM = { + imports = [ + firefox + ]; + }; + braveHM = { + imports = [ + brave + ]; + }; + internet = { + imports = [ + misc-internet + qbittorrent + ]; + }; + jellyfin = { + imports = [ + misc-jellyfin + ]; + }; + privacy = { + imports = [ + misc-privacy + ]; + }; + productionArtExtras = { + imports = [ + misc-productionArtExtras + ]; + }; + productionArt = { + imports = [ + misc-productionArt + ]; + }; + productionAudio = { + imports = [ + misc-productionAudio + ]; + }; + productionCode = { + imports = [ + misc-productionCode + vscode + ]; + }; + productionVideo = { + imports = [ + misc-productionVideo + obs-studio + ]; + }; + productionWriting = { + imports = [ + misc-productionWriting + ]; + }; + wpsOffice = { + imports = [ + misc-wpsoffice + ]; + }; + }; +} diff --git a/home-manager/modules/bat/catppuccin-macchiato.tmTheme b/home-manager/modules/bat/catppuccin-macchiato.tmTheme new file mode 100755 index 0000000..0beedb6 --- /dev/null +++ b/home-manager/modules/bat/catppuccin-macchiato.tmTheme @@ -0,0 +1,959 @@ + + + + + name + Catppuccin + settings + + + settings + + foreground + #cad3f5 + background + #24273a + caret + #b8c0e0 + invisibles + #a5adcb + gutterForeground + #939ab7 + gutterForegroundHighlight + #a6da95 + lineHighlight + #5b6078 + selection + #6e738d + selectionBorder + #24273a + activeGuide + #f5a97f + findHighlightForeground + #1e2030 + findHighlight + #eed49f + bracketsForeground + #939ab7 + bracketContentsForeground + #939ab7 + + + + name + Comment + scope + comment + settings + + foreground + #6e738d + fontStyle + italic + + + + name + String + scope + string + settings + + foreground + #a6da95 + fontStyle + + + + + name + String regex + scope + string.regexp + settings + + foreground + #f5a97f + fontStyle + + + + + name + Number + scope + constant.numeric + settings + + foreground + #f5a97f + fontStyle + + + + + name + Boolean + scope + constant.language.boolean + settings + + foreground + #f5a97f + fontStyle + bold italic + + + + name + Built-in constant + scope + constant.language + settings + + foreground + #b7bdf8 + fontStyle + italic + + + + name + Built-in function + scope + support.function.builtin + settings + + foreground + #f5a97f + fontStyle + italic + + + + name + User-defined constant + scope + variable.other.constant + settings + + foreground + #f5a97f + fontStyle + + + + + name + Variable + scope + variable + settings + + + + name + Keyword + scope + keyword + settings + + foreground + #ed8796 + fontStyle + italic + + + + name + Conditional/loop + scope + keyword.control.loop, keyword.control.conditional, keyword.control.c++ + settings + + foreground + #c6a0f6 + fontStyle + bold + + + + name + Return + scope + keyword.control.return, keyword.control.flow.return + settings + + foreground + #f5bde6 + fontStyle + bold + + + + name + Exception + scope + support.type.exception + settings + + foreground + #f5a97f + fontStyle + italic + + + + name + Operator + scope + keyword.operator, punctuation.accessor + settings + + foreground + #91d7e3 + fontStyle + bold + + + + name + Punctuation separator + scope + punctuation.separator + settings + + foreground + #8bd5ca + fontStyle + + + + + name + Punctuation terminator + scope + punctuation.terminator + settings + + foreground + #8bd5ca + fontStyle + + + + + name + Punctuation bracket + scope + punctuation.section + settings + + foreground + #939ab7 + fontStyle + + + + + name + Include + scope + keyword.control.import.include + settings + + foreground + #8bd5ca + fontStyle + italic + + + + name + Storage + scope + storage + settings + + foreground + #ed8796 + fontStyle + + + + + name + Storage type + scope + storage.type + settings + + foreground + #eed49f + fontStyle + italic + + + + name + Storage modifier + scope + storage.modifier + settings + + foreground + #ed8796 + fontStyle + + + + + name + Storage type namespace + scope + entity.name.namespace, meta.path + settings + + foreground + #f4dbd6 + fontStyle + italic + + + + name + Storage type class + scope + storage.type.class + settings + + foreground + #f4dbd6 + fontStyle + italic + + + + name + Label + scope + entity.name.label + settings + + foreground + #8aadf4 + fontStyle + + + + + name + Keyword class + scope + keyword.declaration.class + settings + + foreground + #ed8796 + fontStyle + italic + + + + name + Class name + scope + entity.name.class, meta.toc-list.full-identifier + settings + + foreground + #91d7e3 + fontStyle + + + + + name + Inherited class + scope + entity.other.inherited-class + settings + + foreground + #91d7e3 + fontStyle + italic + + + + name + Function name + scope + entity.name.function, variable.function + settings + + foreground + #8aadf4 + fontStyle + italic + + + + name + Function macro + scope + entity.name.function.preprocessor + settings + + foreground + #ed8796 + fontStyle + + + + + name + Macro directive - ifdef + scope + keyword.control.import + settings + + foreground + #ed8796 + fontStyle + + + + + name + Constructor + scope + entity.name.function.constructor, entity.name.function.destructor + settings + + foreground + #b7bdf8 + fontStyle + + + + + name + Function argument + scope + variable.parameter.function + settings + + foreground + #f4dbd6 + fontStyle + italic + + + + name + Function declaration + scope + keyword.declaration.function + settings + + foreground + #ee99a0 + fontStyle + italic + + + + name + Library function + scope + support.function + settings + + foreground + #91d7e3 + fontStyle + + + + + name + Library constant + scope + support.constant + settings + + foreground + #8aadf4 + fontStyle + + + + + name + Library class/type + scope + support.type, support.class + settings + + foreground + #8aadf4 + fontStyle + italic + + + + name + Library variable + scope + support.other.variable + settings + + fontStyle + + + + + name + Variable function + scope + variable.function + settings + + foreground + #8aadf4 + fontStyle + italic + + + + name + Variable parameter + scope + variable.parameter + settings + + foreground + #f4dbd6 + fontStyle + italic + + + + name + Variable other + scope + variable.other + settings + + foreground + #cad3f5 + fontStyle + italic + + + + name + Variable field + scope + variable.other.member + settings + + foreground + #f4dbd6 + fontStyle + + + + + name + Variable language + scope + variable.language + settings + + foreground + #8bd5ca + fontStyle + + + + + name + Tag name + scope + entity.name.tag + settings + + foreground + #f5a97f + fontStyle + + + + + name + Tag attribute + scope + entity.other.attribute-name + settings + + foreground + #c6a0f6 + fontStyle + italic + + + + name + Tag delimiter + scope + punctuation.definition.tag + settings + + foreground + #ee99a0 + fontStyle + + + + + name + Markdown URL + scope + markup.underline.link.markdown + settings + + foreground + #f4dbd6 + fontStyle + italic underline + + + + name + Markdown reference + scope + meta.link.inline.description + settings + + foreground + #b7bdf8 + fontStyle + bold + + + + name + Markdown literal + scope + comment.block.markdown, meta.code-fence, markup.raw.code-fence, markup.raw.inline + settings + + foreground + #8bd5ca + fontStyle + italic + + + + name + Markdown title + scope + punctuation.definition.heading, entity.name.section + settings + + foreground + #8aadf4 + fontStyle + bold + + + + name + Markdown emphasis + scope + markup.italic + settings + + foreground + #ee99a0 + fontStyle + italic + + + + name + Markdown strong + scope + markup.bold + settings + + foreground + #ee99a0 + fontStyle + bold + + + + name + Escape + scope + constant.character.escape + settings + + foreground + #f5bde6 + fontStyle + + + + + name + Bash built-in function + scope + source.shell.bash meta.function.shell meta.compound.shell meta.function-call.identifier.shell + settings + + foreground + #f5bde6 + fontStyle + + + + + name + Bash parameter + scope + variable.language.shell + settings + + foreground + #ed8796 + fontStyle + italic + + + + name + Lua field + scope + source.lua meta.function.lua meta.block.lua meta.mapping.value.lua meta.mapping.key.lua string.unquoted.key.lua + settings + + foreground + #b7bdf8 + fontStyle + italic + + + + name + Lua constructor + scope + source.lua meta.function.lua meta.block.lua meta.mapping.key.lua string.unquoted.key.lua + settings + + foreground + #f0c6c6 + fontStyle + + + + + name + Java constant + scope + entity.name.constant.java + settings + + foreground + #8bd5ca + fontStyle + + + + + name + CSS property + scope + support.type.property-name.css + settings + + foreground + #f0c6c6 + fontStyle + italic + + + + name + CSS constant + scope + support.constant.property-value.css + settings + + foreground + #cad3f5 + fontStyle + + + + + name + CSS suffix + scope + constant.numeric.suffix.css, keyword.other.unit.css + settings + + foreground + #8bd5ca + fontStyle + italic + + + + name + CSS variable property + scope + variable.other.custom-property.name.css, support.type.custom-property.name.css, punctuation.definition.custom-property.css + settings + + foreground + #8bd5ca + fontStyle + + + + + name + SCSS tag + scope + entity.name.tag.css + settings + + foreground + #b7bdf8 + fontStyle + + + + + name + SASS variable + scope + variable.other.sass + settings + + foreground + #8bd5ca + fontStyle + + + + + name + Invalid + scope + invalid + settings + + foreground + #cad3f5 + background + #ed8796 + fontStyle + + + + + name + Invalid deprecated + scope + invalid.deprecated + settings + + foreground + #cad3f5 + background + #c6a0f6 + fontStyle + + + + + name + Diff header + scope + meta.diff, meta.diff.header + settings + + foreground + #6e738d + fontStyle + + + + + name + Diff deleted + scope + markup.deleted + settings + + foreground + #ed8796 + fontStyle + + + + + name + Diff inserted + scope + markup.inserted + settings + + foreground + #a6da95 + fontStyle + + + + + name + Diff changed + scope + markup.changed + settings + + foreground + #eed49f + fontStyle + + + + + name + Message error + scope + message.error + settings + + foreground + #ed8796 + fontStyle + + + + + uuid + 4d0379b5-ef82-467b-b8b8-365889420646 + colorSpaceName + sRGB + semanticClass + theme.dark.Catppuccin + author + BrunDerSchwarzmagier + + diff --git a/home-manager/modules/bat/default.nix b/home-manager/modules/bat/default.nix new file mode 100755 index 0000000..c846004 --- /dev/null +++ b/home-manager/modules/bat/default.nix @@ -0,0 +1,7 @@ +{ + programs.bat = { + enable = true; + config.theme = "catppuccin-macchiato"; + }; + xdg.configFile."bat/themes/catppuccin-mocha.tmTheme".source = ./catppuccin-macchiato.tmTheme; +} diff --git a/home-manager/modules/bottom.nix b/home-manager/modules/bottom.nix new file mode 100755 index 0000000..83cb09d --- /dev/null +++ b/home-manager/modules/bottom.nix @@ -0,0 +1,30 @@ +{ + programs.bottom = { + enable = true; + settings = { + colors = { + tableHeaderColor = "#f4dbd6"; + allCpuColor = "#f4dbd6"; + avgCpuColor = "#ee99a0"; + cpuCoreColors = ["#ed8796" "#f5a97f" "#eed49f" "#a6da95" "#7dc4e4" "#c6a0f6"]; + ramColor = "#a6da95"; + swapColor = "#f5a97f"; + rxColor = "#a6da95"; + txColor = "#ed8796"; + widgetTitleColor = "#f0c6c6"; + borderColor = "#5b6078"; + highlightedBorderColor = "#f5bde6"; + textColor = "#cad3f5"; + graphColor = "#a5adcb"; + cursorColor = "#f5bde6"; + selectedTextColor = "#181926"; + selectedBgColor = "#c6a0f6"; + highBatteryColor = "#a6da95"; + mediumBatteryColor = "#eed49f"; + lowBatteryColor = "#ed8796"; + gpuCoreColors = ["#7dc4e4" "#c6a0f6" "#ed8796" "#f5a97f" "#eed49f" "#a6da95"]; + arcColor = "#91d7e3"; + }; + }; + }; +} diff --git a/home-manager/modules/brave.nix b/home-manager/modules/brave.nix new file mode 100755 index 0000000..8735cbf --- /dev/null +++ b/home-manager/modules/brave.nix @@ -0,0 +1,13 @@ +{ + programs.brave = { + enable = true; + extensions = [ + {id = "cjpalhdlnbpafiamejdnhcphjbkeiagm";} # uBlock Origin + {id = "cmpdlhmnmjhihmcfnigoememnffkimlk";} # Catppuccin Macchiato + {id = "dlnpfhfhmkiebpnlllpehlmklgdggbhn";} # Don't Close Last Tab + {id = "iplffkdpngmdjhlpjmppncnlhomiipha";} # Unpaywall + {id = "mnjggcdmjocbbbhaepdhchncahnbgone";} # SponsorBlock + {id = "ponfpcnoihfmfllpaingbgckeeldkhle";} # YouTube Enhancer + ]; + }; +} diff --git a/home-manager/modules/direnv.nix b/home-manager/modules/direnv.nix new file mode 100755 index 0000000..2b51c9d --- /dev/null +++ b/home-manager/modules/direnv.nix @@ -0,0 +1,6 @@ +{ + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; +} diff --git a/home-manager/modules/firefox/config/bookmarks.nix b/home-manager/modules/firefox/config/bookmarks.nix new file mode 100755 index 0000000..24735f6 --- /dev/null +++ b/home-manager/modules/firefox/config/bookmarks.nix @@ -0,0 +1,524 @@ +[ + { + name = "Bookmarks"; + toolbar = true; + bookmarks = [ + # Development + { + name = "GitHub"; + url = "https://github.com/BRBWaffles"; + tags = ["git" "github"]; + keyword = "GitHub"; + } + { + name = "GitLab (Appoota)"; + url = "https://gitlab.com/Appoota/dotfiles"; + tags = ["gitlab" "git"]; + keyword = "GitLab"; + } + { + name = "GitLab (Isaac)"; + url = "https://gitlab.com/askyourself/dotfiles"; + tags = ["gitlab" "git"]; + keyword = "GitLab"; + } + { + name = "GitLab (Nick)"; + url = "https://gitlab.com/BRBWaffles/dotfiles"; + tags = ["gitlab" "git"]; + keyword = "GitLab"; + } + { + name = "Hackage"; + url = "https://hackage.haskell.org/"; + tags = ["hackage" "hack" "haskell"]; + keyword = "Hack"; + } + { + name = "Nix Home Manager Options"; + url = "https://mipmip.github.io/home-manager-option-search/"; + tags = ["nix" "nixos" "home" "home manager" "options"]; + keyword = "Home"; + } + # Social Media + { + name = "Discord (Web Client)"; + url = "https://discord.com/channels/@me"; + tags = ["discord" "dis" "ds" "social"]; + keyword = "Discord"; + } + { + name = "Gmail"; + url = "https://mail.google.com/mail/u/0/#inbox"; + tags = ["gmail" "google" "mail" "gm" "email"]; + keyword = "Gmail"; + } + { + name = "Kijiji"; + url = "https://www.kijiji.ca"; + tags = ["kijiji" "kij" "ki"]; + keyword = "Kij"; + } + { + name = "Lemmy"; + url = "https://lemmy.world/"; + tags = ["lemmy" "social"]; + keyword = "Lem"; + } + { + name = "OnlyFans"; + url = "https://onlyfans.com/"; + tags = ["onlyfans" "only" "fans"]; + keyword = "Only"; + } + { + name = "Pixelfed"; + url = "https://pixelfed.social/i/web/profile/651714972141461392"; + tags = ["pixelfed" "pixel" "pi"]; + keyword = "Pix"; + } + { + name = "Proton Mail"; + url = "https://mail.proton.me/u/1/inbox"; + tags = ["protonmail" "proton" "mail" "pr" "email"]; + keyword = "Pro"; + } + { + name = "Reddit"; + url = "https://www.reddit.com/"; + tags = ["reddit" "social"]; + keyword = "Reddit"; + } + { + name = "StreamLabs"; + url = "https://streamlabs.com/dashboard"; + tags = ["streamlabs" "stream" "labs"]; + keyword = "Stream"; + } + { + name = "Tinder"; + url = "https://tinder.com/app/recs"; + tags = ["tinder" "dating" "booty"]; + keyword = "Tinder"; + } + { + name = "X (Twitter)"; + url = "https://twitter.com/TheNutrivore"; + tags = ["twitter" "x" "social"]; + keyword = "Twitter"; + } + # Streaming + { + name = "Disney+"; + url = "https://www.disneyplus.com/select-profile"; + tags = ["disney" "video" "streaming" "movies" "shows"]; + keyword = "Disney"; + } + { + name = "Netflix"; + url = "https://www.netflix.com/browse"; + tags = ["netflix" "video" "streaming" "movies" "shows"]; + keyword = "Netflix"; + } + { + name = "Prime Video"; + url = "https://www.primevideo.com/?ref_=av_auth_return_redir"; + tags = ["prime" "video" "amazon" "streaming" "movies" "shows"]; + keyword = "Prime"; + } + { + name = "YouTube Studio"; + url = "https://studio.youtube.com/channel/UCy9yYcDx2XuVVgcWLJJDoxw"; + tags = ["youtube" "you" "tube" "yt" "studio"]; + keyword = "Studio"; + } + { + name = "YouTube"; + url = "https://www.youtube.com/"; + tags = ["youtube" "you" "tube" "yt"]; + keyword = "You"; + } + # Shopping + { + name = "Amazon"; + url = "https://www.amazon.ca/"; + tags = ["amazon" "shopping" "supply"]; + keyword = "Amazon"; + } + { + name = "Door Dash"; + url = "https://www.doordash.com/"; + tags = ["doordash" "door" "dash" "food"]; + keyword = "Amazon"; + } + { + name = "FTY Supplies"; + url = "https://fytsupplies.ca/"; + tags = ["tattoo tat" "fyt" "shopping" "supply"]; + keyword = "FYT"; + } + { + name = "Skip the Dishes"; + url = "https://www.skipthedishes.com/"; + tags = ["skip" "dishes" "food"]; + keyword = "Skip"; + } + { + name = "Uber Eats"; + url = "https://www.ubereats.com/"; + tags = ["uber" "eats" "food"]; + keyword = "Uber"; + } + { + name = "TatSoul"; + url = "https://www.tatsoul.com/"; + tags = ["tattoo" "tat" "tatsoul" "shopping" "supply"]; + keyword = "TatSoul"; + } + # Gaming + { + name = "Chess.com"; + url = "https://www.chess.com/home"; + tags = ["chess"]; + keyword = "Chess"; + } + { + name = "Lichess"; + url = "https://lichess.org/"; + tags = ["lichess" "chess"]; + keyword = "Li"; + } + { + name = "ProtonDB"; + url = "https://www.protondb.com/"; + tags = ["steam" "db"]; + keyword = "DB"; + } + { + name = "SteamDB"; + url = "https://steamdb.info/"; + tags = ["steamdb" "steam" "db"]; + keyword = "SteamDB"; + } + # Finances + { + name = "Adsense"; + url = "https://www.google.com/adsense/new/u/0/pub-4524791551954022/payments"; + tags = ["google" "adsense" "ads" "money"]; + keyword = "Adsense"; + } + { + name = "Canada Revenue Agency"; + url = "https://apps4.ams-sga.cra-arc.gc.ca/gol-ged/awsc/amss/browser/check?program=mima&target=login&lang=en&idp=cms"; + tags = ["cra" "canada" "money"]; + keyword = "CRA"; + } + { + name = "Credit Karma"; + url = "https://www.creditkarma.ca/"; + tags = ["credit" "karma" "bank" "banking"]; + keyword = "Credit"; + } + { + name = "LiberaPay"; + url = "https://liberapay.com/TheNutrivore/"; + tags = ["libera" "liberapay" "donations" "bank" "banking" "money" "nutrivore"]; + keyword = "Libera"; + } + { + name = "Patreon"; + url = "https://www.patreon.com/thenutrivore"; + tags = ["patreon" "donations" "bank" "banking" "money" "nutrivore"]; + keyword = "Patreon"; + } + { + name = "PayPal"; + url = "https://www.paypal.com/myaccount/summary?intl=0"; + tags = ["paypal" "bank" "banking" "money"]; + keyword = "PayPal"; + } + { + name = "Shopify"; + url = "https://the-nutrivore.myshopify.com/admin"; + tags = ["shopify" "business" "shop" "bank" "banking" "money"]; + keyword = "Shopify"; + } + { + name = "Simplii"; + url = "https://online.simplii.com/ebm-resources/public/client/web/index.html#/signon"; + tags = ["simplii" "bank" "banking" "money"]; + keyword = "Simplii"; + } + { + name = "Stripe"; + url = "https://dashboard.stripe.com/settings/user"; + tags = ["stripe" "bank" "banking" "money"]; + keyword = "Stripe"; + } + { + name = "Wealthsimple"; + url = "https://my.wealthsimple.com/app/tax-onboarding/2021"; + tags = ["wealth" "simple" "bank" "banking" "crypto"]; + keyword = "Wealth"; + } + { + name = "Wix"; + url = "https://manage.wix.com/dashboard/413fd74d-8a8f-4c77-bd91-9ea560ffe906/home"; + tags = ["wix" "website" "business" "bills" "nutrivore"]; + keyword = "Wix"; + } + # Academic + { + name = "Nutrivore"; + url = "https://www.the-nutrivore.com/"; + tags = ["nutrivore" "blog"]; + keyword = "Nutrivore"; + } + { + name = "Proof Tree"; + url = "https://www.umsu.de/trees/"; + tags = ["proof" "tree" "logic" "academic"]; + keyword = "Logic"; + } + { + name = "PubMed"; + url = "https://pubmed.ncbi.nlm.nih.gov/"; + tags = ["pub" "pubmed" "science" "research" "academic"]; + keyword = "Pub"; + } + { + name = "Sci-Hub"; + url = "https://sci-hub.ee/"; + tags = ["sci" "sci-hub" "scihub" "science" "research" "academic" "torrent"]; + keyword = "Sci"; + } + { + name = "Stanford Encyclopedia of Philosophy"; + url = "https://plato.stanford.edu/"; + tags = ["standford" "encyclopedia" "philosophy" "phil"]; + keyword = "Phil"; + } + { + name = "Zotero Bibliography"; + url = "https://zbib.org/"; + tags = ["votero" "bibliography" "bib" "zbib"]; + keyword = "Bib"; + } + # Telus + { + name = "ADT"; + url = "https://www.adt.com/control-login"; + tags = ["adt" "security" "telus"]; + keyword = "ADT"; + } + { + name = "Telus"; + url = "https://www.telus.com/my-telus/billing/summary"; + tags = ["telus" "phone" "security" "bills" "money"]; + keyword = "Telus"; + } + # Tools + { + name = "Uncensored AI"; + url = "https://www.aiuncensored.info/"; + tags = ["uncensored" "ai"]; + keyword = "AI"; + } + { + name = "ChatGPT"; + url = "https://chatgpt.com/"; + tags = ["chat" "chatgpt" "gpt"]; + keyword = "Chat"; + } + { + name = "Claude AI"; + url = "https://claude.ai"; + tags = ["claude" "ai"]; + keyword = "Claude"; + } + { + name = "Cronometer"; + url = "https://cronometer.com/#diary"; + tags = ["cronometer" "cron" "nutrition"]; + keyword = "Cron"; + } + { + name = "DNS Checker"; + url = "https://dnschecker.org/"; + tags = ["dns" "checker"]; + keyword = "DNS"; + } + { + name = "EventBrite"; + url = "https://www.eventbrite.ca/d/canada--winnipeg/events--today/winnipeg/?page=1"; + tags = ["eventbrite" "event" "brite"]; + keyword = "Event"; + } + { + name = "Google Maps"; + url = "https://www.maps.google.com/"; + tags = ["maps" "google"]; + keyword = "Map"; + } + { + name = "Memory Express"; + url = "https://www.memoryexpress.com/"; + tags = ["memoryexpress" "memory" "mem" "express"]; + keyword = "Mem"; + } + { + name = "Portchecker"; + url = "https://portchecker.co/"; + tags = ["portchecker" "port" "checker"]; + keyword = "Port"; + } + { + name = "RhymeZone"; + url = "https://www.rhymezone.com/"; + tags = ["rhymezone" "rhyme" "zone"]; + keyword = "Rhyme"; + } + { + name = "Chmod Calculator"; + url = "https://chmod-calculator.com/"; + tags = ["chmod" "calculator"]; + keyword = "Chmod"; + } + { + name = "ListenBrainz"; + url = "https://listenbrainz.org/user/BRBWaffles/"; + tags = ["listenbrainz" "listen" "brains"]; + keyword = "Listen"; + } + { + name = "Speedtest"; + url = "https://www.speedtest.net/"; + tags = ["speedtest" "speed" "test"]; + keyword = "Speed"; + } + { + name = "TinEye"; + url = "https://tineye.com/"; + tags = ["tineye" "tin" "eye"]; + keyword = "Tin"; + } + { + name = "Percentage Calculator"; + url = "https://percentagecalculator.net"; + tags = ["percentage" "percent" "calculator"]; + keyword = "Percent"; + } + # Tracking + { + name = "Metal Tracker"; + url = "https://en.metal-tracker.com/"; + tags = ["metaltracker" "metal" "tracker"]; + keyword = "Metal"; + } + { + name = "Torrent Leech"; + url = "https://www.torrentleech.org/"; + tags = ["torrent" "leech"]; + keyword = "Leech"; + } + { + name = "1337"; + url = "https://1337x.to/"; + tags = ["torrent" "1337"]; + keyword = "1337"; + } + # Admin + { + name = "Discord (Development Portal)"; + url = "https://discord.com/developers/applications"; + tags = ["discord" "development" "portal" "bot"]; + keyword = "Discord"; + } + { + name = "Namecheap"; + url = "https://www.namecheap.com/"; + tags = ["namecheap" "name" "cheap" "dns"]; + keyword = "Name"; + } + { + name = "Router"; + url = "http://192.168.50.1"; + tags = ["router" "asus"]; + keyword = "Router"; + } + # Self-Hosted + { + name = "Forgejo"; + url = "https://source.the-nutrivore.social"; + tags = ["forgejo" "forge" "git"]; + keyword = "Forge"; + } + { + name = "Jellyfin (Internet)"; + url = "https://jellyfin.cloudbert.fun"; + tags = ["jelly" "video" "streaming" "movies" "shows" "music"]; + keyword = "Jelly"; + } + { + name = "Jellyfin (Local)"; + url = "http://192.168.50.140:8096"; + tags = ["jelly" "video" "streaming" "movies" "shows" "music"]; + keyword = "Jelly"; + } + { + name = "Mastodon"; + url = "https://the-nutrivore.social"; + tags = ["mastodon" "mast" "md"]; + keyword = "Mast"; + } + { + name = "Nextcloud"; + url = "https://nextcloud.cloudbert.fun"; + tags = ["nextcloud" "next" "cloud"]; + keyword = "Next"; + } + { + name = "Ollama (Server)"; + url = "https://ollama.cloudbert.fun"; + tags = ["ollama" "chat" "ai"]; + keyword = "Ollama"; + } + { + name = "Ollama (Desktop)"; + url = "http://localhost:8088"; + tags = ["ollama" "chat" "ai"]; + keyword = "Ollama"; + } + { + name = "PeerTube"; + url = "https://video.the-nutrivore.social"; + tags = ["peertube" "peer" "tube" "nutrivore"]; + keyword = "PeerTube"; + } + { + name = "Syncthing (Synology)"; + url = "http://192.168.50.209:8384"; + tags = ["syncthing" "sync" "thing" "synology"]; + keyword = "Sync"; + } + { + name = "Syncthing (Desktop)"; + url = "http://localhost:8388"; + tags = ["syncthing" "sync" "thing" "desktop"]; + keyword = "Sync"; + } + { + name = "Synology"; + url = "https://192.168.50.209:5001"; + tags = ["synology" "dsm" "cloud"]; + keyword = "DSM"; + } + { + name = "Vaultwarden"; + url = "https://vaultwarden.cloudbert.fun"; + tags = ["vaultwarden" "bitwarden" "vault" "bit" "warden"]; + keyword = "Vault"; + } + ]; + } +] diff --git a/home-manager/modules/firefox/config/extensions.nix b/home-manager/modules/firefox/config/extensions.nix new file mode 100755 index 0000000..7e9b7a2 --- /dev/null +++ b/home-manager/modules/firefox/config/extensions.nix @@ -0,0 +1,14 @@ +{nur, ...}: +builtins.attrValues { + inherit + (nur.repos.rycee.firefox-addons) + bitwarden + enhancer-for-youtube + localcdn + sponsorblock + ublock-origin + unpaywall + ; +} +# https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix + diff --git a/home-manager/modules/firefox/config/icons/13.png b/home-manager/modules/firefox/config/icons/13.png new file mode 100755 index 0000000..8bef493 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/13.png differ diff --git a/home-manager/modules/firefox/config/icons/al.png b/home-manager/modules/firefox/config/icons/al.png new file mode 100755 index 0000000..a8420f6 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/al.png differ diff --git a/home-manager/modules/firefox/config/icons/am.png b/home-manager/modules/firefox/config/icons/am.png new file mode 100755 index 0000000..afd11bb Binary files /dev/null and b/home-manager/modules/firefox/config/icons/am.png differ diff --git a/home-manager/modules/firefox/config/icons/br.png b/home-manager/modules/firefox/config/icons/br.png new file mode 100755 index 0000000..74a4557 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/br.png differ diff --git a/home-manager/modules/firefox/config/icons/fy.png b/home-manager/modules/firefox/config/icons/fy.png new file mode 100755 index 0000000..34341e0 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/fy.png differ diff --git a/home-manager/modules/firefox/config/icons/ha.png b/home-manager/modules/firefox/config/icons/ha.png new file mode 100755 index 0000000..972d5ad Binary files /dev/null and b/home-manager/modules/firefox/config/icons/ha.png differ diff --git a/home-manager/modules/firefox/config/icons/ho.png b/home-manager/modules/firefox/config/icons/ho.png new file mode 100755 index 0000000..04e4623 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/ho.png differ diff --git a/home-manager/modules/firefox/config/icons/jf.png b/home-manager/modules/firefox/config/icons/jf.png new file mode 100755 index 0000000..1709e06 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/jf.png differ diff --git a/home-manager/modules/firefox/config/icons/ka.png b/home-manager/modules/firefox/config/icons/ka.png new file mode 100755 index 0000000..612d510 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/ka.png differ diff --git a/home-manager/modules/firefox/config/icons/ne.png b/home-manager/modules/firefox/config/icons/ne.png new file mode 100755 index 0000000..3683220 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/ne.png differ diff --git a/home-manager/modules/firefox/config/icons/nx.png b/home-manager/modules/firefox/config/icons/nx.png new file mode 100755 index 0000000..8a00594 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/nx.png differ diff --git a/home-manager/modules/firefox/config/icons/ph.png b/home-manager/modules/firefox/config/icons/ph.png new file mode 100755 index 0000000..b049088 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/ph.png differ diff --git a/home-manager/modules/firefox/config/icons/pi.png b/home-manager/modules/firefox/config/icons/pi.png new file mode 100755 index 0000000..9dbe973 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/pi.png differ diff --git a/home-manager/modules/firefox/config/icons/re.png b/home-manager/modules/firefox/config/icons/re.png new file mode 100755 index 0000000..4365d5b Binary files /dev/null and b/home-manager/modules/firefox/config/icons/re.png differ diff --git a/home-manager/modules/firefox/config/icons/sc.png b/home-manager/modules/firefox/config/icons/sc.png new file mode 100755 index 0000000..85fb3c3 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/sc.png differ diff --git a/home-manager/modules/firefox/config/icons/tl.png b/home-manager/modules/firefox/config/icons/tl.png new file mode 100755 index 0000000..985ebfb Binary files /dev/null and b/home-manager/modules/firefox/config/icons/tl.png differ diff --git a/home-manager/modules/firefox/config/icons/ur.png b/home-manager/modules/firefox/config/icons/ur.png new file mode 100755 index 0000000..252ce67 Binary files /dev/null and b/home-manager/modules/firefox/config/icons/ur.png differ diff --git a/home-manager/modules/firefox/config/icons/vs.png b/home-manager/modules/firefox/config/icons/vs.png new file mode 100755 index 0000000..122ae5e Binary files /dev/null and b/home-manager/modules/firefox/config/icons/vs.png differ diff --git a/home-manager/modules/firefox/config/icons/wi.png b/home-manager/modules/firefox/config/icons/wi.png new file mode 100755 index 0000000..802344a Binary files /dev/null and b/home-manager/modules/firefox/config/icons/wi.png differ diff --git a/home-manager/modules/firefox/config/icons/xv.png b/home-manager/modules/firefox/config/icons/xv.png new file mode 100755 index 0000000..2a367fc Binary files /dev/null and b/home-manager/modules/firefox/config/icons/xv.png differ diff --git a/home-manager/modules/firefox/config/icons/yo.png b/home-manager/modules/firefox/config/icons/yo.png new file mode 100755 index 0000000..ce619ae Binary files /dev/null and b/home-manager/modules/firefox/config/icons/yo.png differ diff --git a/home-manager/modules/firefox/config/search.nix b/home-manager/modules/firefox/config/search.nix new file mode 100755 index 0000000..3ec1185 --- /dev/null +++ b/home-manager/modules/firefox/config/search.nix @@ -0,0 +1,149 @@ +{ + force = true; + default = "Kagi"; + engines = { + "AlternativeTo" = { + definedAliases = ["@al"]; + icon = ./icons/al.png; + urls = [{template = "https://alternativeto.net/browse/search/?q={searchTerms}";}]; + }; + "Amazon" = { + definedAliases = ["@am"]; + icon = ./icons/am.png; + urls = [{template = "https://www.amazon.ca/s?k={searchTerms}&ref=nav_bb_sb";}]; + }; + "Brave" = { + definedAliases = ["@br"]; + icon = ./icons/br.png; + urls = [{template = "https://search.brave.com/search?q={searchTerms}&source=web";}]; + }; + "Jellyfin" = { + definedAliases = ["@jf"]; + icon = ./icons/ka.png; + urls = [{template = "https://jellyfin.cloudbert.fun/web/#/search.html?query={searchTerms}";}]; + }; + "Hackage" = { + definedAliases = ["@ha"]; + icon = ./icons/ha.png; + urls = [{template = "https://hackage.haskell.org/packages/search?terms={searchTerms}";}]; + }; + "Kagi" = { + definedAliases = ["@ka"]; + icon = ./icons/ka.png; + urls = [{template = "https://kagi.com/search?q={searchTerms}";}]; + }; + "FYT Supplies" = { + definedAliases = ["@fy"]; + icon = ./icons/fy.png; + urls = [{template = "https://fytsupplies.ca/search?type=product%2Carticle%2Cpage%2Ccollection&options[prefix]=last&q={searchTerms}*";}]; + }; + "Hoogle" = { + definedAliases = ["@ho"]; + icon = ./icons/ho.png; + urls = [{template = "https://www.stackage.org/lts-22.33/hoogle?q={searchTerms}";}]; + }; + "Netflix" = { + definedAliases = ["@ne"]; + icon = ./icons/ne.png; + urls = [{template = "https://www.netflix.com/search?q={searchTerms}";}]; + }; + "Nix Packages" = { + definedAliases = ["@np"]; + icon = ./icons/nx.png; + urls = [{template = "https://searchix.alanpearce.eu/packages/nixpkgs/search?query={searchTerms}";}]; + }; + "Nix Options" = { + definedAliases = ["@no"]; + icon = ./icons/nx.png; + urls = [{template = "https://searchix.alanpearce.eu/options/nixos/search?query={searchTerms}";}]; + }; + "Nix Home Manager" = { + definedAliases = ["@nh"]; + icon = ./icons/nx.png; + urls = [{template = "https://searchix.alanpearce.eu/options/home-manager/search?query={searchTerms}";}]; + }; + "Nix Wiki" = { + definedAliases = ["@nw"]; + icon = ./icons/nx.png; + urls = [{template = "https://nixos.wiki/index.php?search={searchTerms}";}]; + }; + "The Pirate Bay" = { + definedAliases = ["@pi"]; + icon = ./icons/pi.png; + urls = [{template = "https://thepiratebay.org/search.php?q={searchTerms}&all=on&search=Pirate+Search&page=0&orderby=";}]; + }; + "Reddit" = { + definedAliases = ["@re"]; + icon = ./icons/re.png; + urls = [{template = "https://www.reddit.com/search/?q={searchTerms}";}]; + }; + "Sci-Hub" = { + definedAliases = ["@sc"]; + icon = ./icons/sc.png; + urls = [{template = "https://sci-hub.ee/{searchTerms}";}]; + }; + "Stanford Encyclopedia of Philosophy" = { + definedAliases = ["@ph"]; + icon = ./icons/ph.png; + urls = [{template = "https://plato.stanford.edu/search/searcher.py?query={searchTerms}";}]; + }; + "Urban Dictionary" = { + definedAliases = ["@ur"]; + icon = ./icons/ur.png; + urls = [{template = "https://www.urbandictionary.com/define.php?term={searchTerms}";}]; + }; + "VSTorrent" = { + definedAliases = ["@vs"]; + icon = ./icons/vs.png; + urls = [{template = "https://vstorrent.org/?s={searchTerms}";}]; + }; + "Wikipedia" = { + definedAliases = ["@wi"]; + icon = ./icons/wi.png; + urls = [{template = "https://en.wikipedia.org/wiki/{searchTerms}";}]; + }; + "XVideos" = { + definedAliases = ["@xv"]; + icon = ./icons/xv.png; + urls = [{template = "https://www.xvideos.com/?k={searchTerms}";}]; + }; + "YouTube" = { + definedAliases = ["@yo"]; + icon = ./icons/yo.png; + urls = [{template = "https://www.youtube.com/results?search_query={searchTerms}";}]; + }; + "1337x" = { + definedAliases = ["@13"]; + icon = ./icons/13.png; + urls = [{template = "https://1337x.to/search/{searchTerms}/1/";}]; + }; + "Torrent Leech" = { + definedAliases = ["@tl"]; + icon = ./icons/tl.png; + urls = [{template = "https://www.torrentleech.org/torrents/browse/index/query/{searchTerms}";}]; + }; + "Amazon.ca".metaData.hidden = true; + "Bing".metaData.hidden = true; + "eBay".metaData.hidden = true; + "Wikipedia (en)".metaData.hidden = true; + }; + order = [ + "AlternativeTo" + "Amazon" + "Hackage" + "FYT Supplies" + "Nix Packages" + "The Pirate Bay" + "Reddit" + "Urban Dictionary" + "VSTorrent" + "Wikipedia" + "XVideos" + "YouTube" + "1337x" + "Nix Packages" + "Nix Options" + "Brave" + "Google" + ]; +} diff --git a/home-manager/modules/firefox/config/settings.nix b/home-manager/modules/firefox/config/settings.nix new file mode 100755 index 0000000..c0b97ab --- /dev/null +++ b/home-manager/modules/firefox/config/settings.nix @@ -0,0 +1,233 @@ +{ + "ui.systemUsesDarkTheme" = 1; + "browser.aboutConfig.showWarning" = false; + "browser.aboutwelcome.enabled" = false; + "browser.bookmarks.addedImportButton" = false; + "browser.toolbars.bookmarks.visibility" = "never"; + "browser.urlbar.suggest.history" = false; + "browser.urlbar.suggest.bookmark" = true; + "browser.urlbar.suggest.openpage" = false; + "browser.urlbar.suggest.shortcut" = false; + "browser.urlbar.suggest.searches" = false; + "browser.urlbar.suggest.recentsearches" = false; + "dom.forms.autocomplete.formautofill" = true; + "extensions.pocket.enabled" = false; + "general.autoScroll" = true; + "media.eme.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.compactmode.show" = true; + + # STARTUP + "browser.newtab.url" = "about:home"; + "browser.newtabpage.activity-stream.default.sites" = ""; + "browser.newtabpage.activity-stream.feeds.system.topstories" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.newtabpage.activity-stream.showRecentSaves" = false; + "browser.newtabpage.activity-stream.showSearch" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.showWeather" = false; + "browser.newtabpage.enabled" = true; + "browser.startup.homepage" = "about:home"; + "browser.startup.page" = 1; + "browser.tabs.closeWindowWithLastTab" = false; + "browser.tabs.firefox-view-newIcon" = false; + "browser.tabs.firefox-view" = false; + "browser.tabs.inTitlebar" = 1; + "browser.tabs.loadBookmarksInBackground" = true; + "browser.tabs.tabmanager.enabled" = false; + + # GEOLOCATION + "geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"; + "geo.provider.ms-windows-location" = false; + "geo.provider.use_corelocation" = false; + "geo.provider.use_gpsd" = false; + "geo.provider.use_geoclue" = false; + + # TELEMETRY + "extensions.getAddons.showPane" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; + "browser.discovery.enabled" = false; + "browser.shopping.experience2023.enabled" = false; + "datareporting.policy.dataSubmissionEnabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.server" = "data:,"; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.newProfilePing.enabled" = false; + "toolkit.telemetry.shutdownPingSender.enabled" = false; + "toolkit.telemetry.updatePing.enabled" = false; + "toolkit.telemetry.bhrPing.enabled" = false; + "toolkit.telemetry.firstShutdownPing.enabled" = false; + "toolkit.telemetry.coverage.opt-out" = true; + "toolkit.coverage.opt-out" = true; + "toolkit.coverage.endpoint.base" = ""; + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "app.shield.optoutstudies.enabled" = false; + "app.normandy.enabled" = false; + "app.normandy.api_url" = ""; + "breakpad.reportURL" = ""; + "browser.tabs.crashReporting.sendReport" = false; + "network.captive-portal-service.enabled" = false; + "network.connectivity-service.enabled" = false; + + # SAFE BROWSING + "browser.safebrowsing.downloads.remote.enabled" = false; + + # BLOCK IMPLICIT OUTBOUND + "network.prefetch-next" = false; + "network.dns.disablePrefetch" = true; + "network.predictor.enabled" = false; + "network.predictor.enable-prefetch" = false; + "network.http.speculative-parallel-limit" = 0; + "browser.places.speculativeConnect.enabled" = false; + + # DNS / DoH / PROXY / SOCKS + "network.proxy.socks_remote_dns" = true; + "network.file.disable_unc_paths" = true; + "network.gio.supported-protocols" = ""; + + # LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS + "browser.urlbar.speculativeConnect.enabled" = false; + "browser.search.suggest.enabled" = false; + "browser.formfill.enable" = false; + "browser.search.separatePrivateDefault" = true; + "browser.search.separatePrivateDefault.ui.enabled" = true; + "extensions.formautofill.addresses.enabled" = false; + "extensions.formautofill.addresses.supported" = "on"; + "extensions.formautofill.addresses.usage.hasEntry" = true; + "extensions.formautofill.creditCards.enabled" = false; + "extensions.formautofill.heuristics.enabled" = false; + + # PASSWORDS + "network.auth.subresource-http-auth-allow" = 1; + "signon.autofillForms" = false; + "signon.formlessCapture.enabled" = false; + "signon.rememberSignons" = false; + + # DISK AVOIDANCE + "browser.cache.disk.enable" = false; + "browser.privatebrowsing.forceMediaMemoryCache" = true; + "media.memory_cache_max_size" = 65536; + "browser.sessionstore.privacy_level" = 2; + "toolkit.winRegisterApplicationRestart" = false; + "browser.shell.shortcutFavicons" = false; + + # HTTPS (SSL/TLS / OCSP / CERTS / HPKP) + "security.ssl.require_safe_negotiation" = true; + "security.tls.enable_0rtt_data" = false; + "security.OCSP.enabled" = 1; + "security.OCSP.require" = true; + "security.cert_pinning.enforcement_level" = 2; + "security.remote_settings.crlite_filters.enabled" = true; + "security.pki.crlite_mode" = 2; + "dom.security.https_only_mode" = true; + "dom.security.https_only_mode_send_http_background_request" = false; + "security.ssl.treat_unsafe_negotiation_as_broken" = true; + "browser.xul.error_pages.expert_bad_cert" = true; + + # REFERERS + "network.http.referer.XOriginTrimmingPolicy" = 2; + + # CONTAINERS + "privacy.userContext.enabled" = true; + "privacy.userContext.ui.enabled" = true; + + # PLUGINS / MEDIA / WEBRTC + "media.peerconnection.ice.proxy_only_if_behind_proxy" = true; + "media.peerconnection.ice.default_address_only" = true; + + # DOM (DOCUMENT OBJECT MODEL) + "dom.disable_window_move_resize" = true; + + # MISCELLANEOUS + "browser.download.start_downloads_in_tmp_dir" = true; + "browser.helperApps.deleteTempFileOnExit" = true; + "browser.uitour.enabled" = false; + "devtools.debugger.remote-enabled" = false; + "network.IDN_show_punycode" = true; + "pdfjs.disabled" = false; + "pdfjs.enableScripting" = false; + + # SHUTDOWN & SANITIZING + "privacy.sanitize.sanitizeOnShutdown" = false; + "privacy.clearOnShutdown.cache" = true; + "privacy.clearOnShutdown.downloads" = true; + "privacy.clearOnShutdown.formdata" = true; + "privacy.clearOnShutdown.history" = true; + "privacy.clearOnShutdown.cookies" = true; + "privacy.clearOnShutdown.offlineApps" = true; + "privacy.clearOnShutdown.sessions" = false; + "privacy.clearSiteData.cache" = true; + "privacy.clearSiteData.historyFormDataAndDownloads" = true; + "privacy.clearHistory.cache" = true; + "privacy.clearHistory.cookiesAndStorage" = false; + "privacy.clearHistory.historyFormDataAndDownloads" = true; + "privacy.cpd.sessions" = true; + + # FPP (fingerprintingProtection) + "privacy.fingerprintingProtection.pbmode" = true; + "privacy.fingerprintingProtection" = true; + + # RFP (resistFingerprinting) + "privacy.resistFingerprinting" = true; + "privacy.window.maxInnerWidth" = 1600; + "privacy.window.maxInnerHeight" = 900; + "privacy.resistFingerprinting.block_mozAddonManager" = true; + "privacy.resistFingerprinting.letterboxing" = false; + "privacy.spoof_english" = 1; + "browser.display.use_system_colors" = false; + "widget.non-native-theme.enabled" = true; + "browser.link.open_newwindow" = 3; + "browser.link.open_newwindow.restriction" = 0; + "webgl.disabled" = false; + + # OPTIONAL OPSEC + "browser.download.useDownloadDir" = false; + "browser.download.alwaysOpenPanel" = false; + "browser.download.manager.addToRecentDocs" = false; + "browser.download.always_ask_before_handling_new_types" = true; + "extensions.enabledScopes" = 5; + "extensions.postDownloadThirdPartyPrompt" = false; + + # ETP (ENHANCED TRACKING PROTECTION) + "browser.contentblocking.category" = "strict"; + + # SHUTDOWN & SANITIZING (continued) + "privacy.clearOnShutdown_v2.cache" = true; + "privacy.clearOnShutdown_v2.historyFormDataAndDownloads" = true; + "privacy.clearOnShutdown_v2.cookiesAndStorage" = true; + + # OPTIONAL HARDENING + # These settings are commented out in the original template; uncomment if needed + # "mathml.disabled" = true; + # "svg.disabled" = true; + # "gfx.font_rendering.graphite.enabled" = false; + # "javascript.options.asmjs" = false; + # "javascript.options.ion" = false; + # "javascript.options.baselinejit" = false; + # "javascript.options.jit_trustedprincipals" = true; + # "javascript.options.wasm" = false; + # "gfx.font_rendering.opentype_svg.enabled" = false; + # "media.eme.enabled" = false; + # "browser.eme.ui.enabled" = false; + # "network.dns.disableIPv6" = true; + + # DON'T TOUCH + "extensions.blocklist.enabled" = true; + "network.http.referer.spoofSource" = false; + "security.dialog_enable_delay" = 1000; + "privacy.firstparty.isolate" = false; + "extensions.webcompat.enable_shims" = true; + "security.tls.version.enable-deprecated" = false; + "extensions.webcompat-reporter.enabled" = false; + "extensions.quarantinedDomains.enabled" = true; + + # NON-PROJECT RELATED + # "browser.startup.homepage_override.mstone" = "ignore"; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + "browser.urlbar.showSearchTerms.enabled" = false; +} diff --git a/home-manager/modules/firefox/config/userChrome.css b/home-manager/modules/firefox/config/userChrome.css new file mode 100755 index 0000000..c00006c --- /dev/null +++ b/home-manager/modules/firefox/config/userChrome.css @@ -0,0 +1,98 @@ +/* Title bar */ +.titlebar-spacer { + display: none !important; +} + +/* Tab bar */ +#navigator-toolbox { + border: 0px !important; +} +#TabsToolbar { + margin-left: 3px !important; +} +#TabsToolbar > .tabbrowser-arrowscrollbox { + overflow: visible !important; +} + +/* Nav bar */ +#nav-bar { + height: 1px; + min-height: 1px !important; + overflow: hidden; + transition: height 0.3s ease-in-out; +} + +/* Only show nav-bar when specifically focused, not when clicking tab bar */ +#nav-bar:focus-within { + overflow: visible; + height: auto; +} + +/* Remove placeholder text in the URL bar */ +#urlbar-input::placeholder { + color: transparent !important; +} +#urlbar { + padding: 2px !important; +} + +/* Hide URL bar text */ +#urlbar-background { + border: none !important; +} + +#urlbar-border:focus-within { + overflow: visible; + height: auto; +} + +/* Hide search engine icon */ +#urlbar .search-one-offs:not([hidden]) { + display: none !important; +} + +/* Hide tracking protection icon */ +#tracking-protection-icon-container { + display: none !important; +} +#urlbar-container { + width: auto !important; +} +#urlbar { + box-shadow: none !important; +} +#page-action-buttons { + display: none !important; +} + +/* Hide site information button */ +#identity-box { + display: none !important; +} + +/* Hide shield icon */ +#tracking-protection-icon-container { + display: none !important; +} + +/* Hide forward and back buttons when not active */ +#back-button[disabled="true"] { + display: none !important; +} +#forward-button[disabled="true"] { + display: none !important; +} +.personalize-button { + display: none !important; +} + +.tab-close-button { + visibility: hidden !important; + margin-inline-end: 0 !important; + width: 16px !important; + height: 16px !important; + padding: 2px !important; +} +.tabbrowser-tab:hover .tab-close-button { + visibility: visible !important; +} \ No newline at end of file diff --git a/home-manager/modules/firefox/default.nix b/home-manager/modules/firefox/default.nix new file mode 100755 index 0000000..0977613 --- /dev/null +++ b/home-manager/modules/firefox/default.nix @@ -0,0 +1,23 @@ +{ + pkgs, + flake, + nur, + ... +}: let + inherit (flake.config.people) user0; +in { + programs.firefox = { + enable = true; + package = pkgs.firefox; + profiles = { + ${user0} = { + isDefault = true; + search = import ./config/search.nix; + bookmarks = import ./config/bookmarks.nix; + settings = import ./config/settings.nix; + extensions = import ./config/extensions.nix {inherit nur;}; + userChrome = builtins.readFile ./config/userChrome.css; + }; + }; + }; +} diff --git a/home-manager/modules/freetube.nix b/home-manager/modules/freetube.nix new file mode 100755 index 0000000..8018325 --- /dev/null +++ b/home-manager/modules/freetube.nix @@ -0,0 +1,49 @@ +{ + programs.freetube = { + enable = true; + settings = { + allSettingsSectionsExpandedByDefault = false; + barColor = false; + baseTheme = "catppuccinMocha"; + bounds = { + x = 880; + y = 221; + width = 1200; + height = 800; + maximized = false; + fullScreen = false; + }; + defaultQuality = "1080"; + downloadAskPath = false; + downloadBehavior = "download"; + downloadFolderPath = "/home/nick/Downloads/FreeTube"; + expandSideBar = true; + externalPlayer = "mpv"; + hideActiveSubscriptions = false; + hideCommentLikes = true; + hideCommentPhotos = true; + hideHeaderLogo = true; + hideLabelsSideBar = true; + hidePlaylists = true; + hidePopularVideos = true; + hideRecommendedVideos = true; + hideSubscriptionsShorts = false; + hideSubscriptionsVideos = false; + hideTrendingVideos = true; + hideVideoLikesAndDislikes = true; + mainColor = "CatppuccinMochaMauve"; + maxVideoPlaybackRate = 10; + playNextVideo = false; + quickBookmarkTargetPlaylistId = "favorites"; + rememberHistory = false; + saveWatchedProgress = false; + secColor = "CatppuccinMochaLavender"; + useDeArrowThumbnails = true; + useDeArrowTitles = true; + useSponsorBlock = true; + defaultTheatreMode = true; + listType = "grid"; + currentLocale = "en_GB"; + }; + }; +} diff --git a/home-manager/modules/git.nix b/home-manager/modules/git.nix new file mode 100755 index 0000000..6c32b3f --- /dev/null +++ b/home-manager/modules/git.nix @@ -0,0 +1,14 @@ +{ + config, + flake, + ... +}: let + user = config.home.username; + userConfig = flake.config.people.user.${user}; +in { + programs.git = { + enable = true; + userName = userConfig.name; + userEmail = userConfig.email.address0; + }; +} diff --git a/home-manager/modules/helix.nix b/home-manager/modules/helix.nix new file mode 100755 index 0000000..a0291a0 --- /dev/null +++ b/home-manager/modules/helix.nix @@ -0,0 +1,57 @@ +{pkgs, ...}: { + programs.helix = { + enable = true; + package = pkgs.helix; + languages = { + language = [ + { + auto-format = true; + formatter.command = "alejandra"; + name = "nix"; + } + { + auto-format = true; + formatter.command = "haskell"; + name = "haskell"; + } + { + auto-format = true; + formatter.command = "cssfmt"; + name = "css"; + } + { + auto-format = true; + formatter.command = "yuck"; + name = "yuck"; + } + { + auto-format = true; + formatter.command = "yamlfmt"; + name = "yaml"; + } + ]; + }; + settings = { + editor = { + mouse = true; + auto-format = true; + auto-save = true; + line-number = "relative"; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + }; + keys = { + normal = { + space = { + f = ":format"; + q = ":q"; + w = ":w"; + }; + }; + }; + theme = "catppuccin_macchiato"; + }; + }; +} diff --git a/home-manager/modules/home-manager.nix b/home-manager/modules/home-manager.nix new file mode 100755 index 0000000..551c718 --- /dev/null +++ b/home-manager/modules/home-manager.nix @@ -0,0 +1 @@ +{programs.home-manager.enable = true;} diff --git a/home-manager/modules/lazygit.nix b/home-manager/modules/lazygit.nix new file mode 100755 index 0000000..26dd88b --- /dev/null +++ b/home-manager/modules/lazygit.nix @@ -0,0 +1,7 @@ +{ + programs.lazygit = { + enable = true; + settings = { + }; + }; +} diff --git a/home-manager/modules/misc/android.nix b/home-manager/modules/misc/android.nix new file mode 100755 index 0000000..d91b347 --- /dev/null +++ b/home-manager/modules/misc/android.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + android-file-transfer + android-tools + scrcpy + ; + }; +} +#requires that users be part of the adbusers group + diff --git a/home-manager/modules/misc/command-line.nix b/home-manager/modules/misc/command-line.nix new file mode 100755 index 0000000..f228a7c --- /dev/null +++ b/home-manager/modules/misc/command-line.nix @@ -0,0 +1,36 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + acpi + cifs-utils + fastfetch + ffmpeg + flac + gvfs + hardinfo + inetutils + libgen-cli + libnatpmp + ncdu + networkmanager-openvpn + nftables + nyancat + openssl + pciutils + pinentry + playerctl + simple-mtpfs + sshfs + tokei + tomb + unrar + unzip + wezterm + wget + wine + xdotool + zip + ; + }; +} diff --git a/home-manager/modules/misc/file-management.nix b/home-manager/modules/misc/file-management.nix new file mode 100755 index 0000000..bbbc524 --- /dev/null +++ b/home-manager/modules/misc/file-management.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + celeste + bulky + flameshot + gparted + usbimager + ; + }; +} diff --git a/home-manager/modules/misc/gaming.nix b/home-manager/modules/misc/gaming.nix new file mode 100755 index 0000000..172f6b9 --- /dev/null +++ b/home-manager/modules/misc/gaming.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + lutris + prismlauncher + steam + ; + }; +} diff --git a/home-manager/modules/misc/gnome-extras.nix b/home-manager/modules/misc/gnome-extras.nix new file mode 100755 index 0000000..a8645c6 --- /dev/null +++ b/home-manager/modules/misc/gnome-extras.nix @@ -0,0 +1,34 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + evince + file-roller + gnome-calculator + gnome-characters + gnome-disk-utility + # gnome-remote-desktop + + # gnome-shell-extensions + + gnome-system-monitor + # gnome-tweaks + + nautilus + ; + + # inherit + # (pkgs.gnomeExtensions) + # appindicator + # dash-to-panel + # just-perfection + # keep-awake + # no-overview + # notification-banner-reloaded + # paperwm + # start-overlay-in-application-view + # tiling-assistant + # wallpaper-slideshow + # ; + }; +} diff --git a/home-manager/modules/misc/internet-extras.nix b/home-manager/modules/misc/internet-extras.nix new file mode 100755 index 0000000..0e9d6a1 --- /dev/null +++ b/home-manager/modules/misc/internet-extras.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + brave + firefox + tdesktop + teams-for-linux + whatsapp-for-linux + ; + }; +} diff --git a/home-manager/modules/misc/internet.nix b/home-manager/modules/misc/internet.nix new file mode 100755 index 0000000..50547f8 --- /dev/null +++ b/home-manager/modules/misc/internet.nix @@ -0,0 +1,13 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + discord + element-desktop + openvpn + signal-desktop + vesktop + xdg-utils + ; + }; +} diff --git a/home-manager/modules/misc/jellyfin.nix b/home-manager/modules/misc/jellyfin.nix new file mode 100755 index 0000000..a7c1197 --- /dev/null +++ b/home-manager/modules/misc/jellyfin.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + kid3 + mp3gain + nicotine-plus + puddletag + soulseekqt + ; + }; +} diff --git a/home-manager/modules/misc/kde-extras.nix b/home-manager/modules/misc/kde-extras.nix new file mode 100755 index 0000000..5f39b1c --- /dev/null +++ b/home-manager/modules/misc/kde-extras.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs.kdePackages) + okular + partitionmanager + kolourpaint + ; + }; +} diff --git a/home-manager/modules/misc/media.nix b/home-manager/modules/misc/media.nix new file mode 100755 index 0000000..2988219 --- /dev/null +++ b/home-manager/modules/misc/media.nix @@ -0,0 +1,16 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + beets + flameshot + celluloid + feishin + nomacs + mpv + open-dyslexic + spotify + vlc + ; + }; +} diff --git a/home-manager/modules/misc/privacy.nix b/home-manager/modules/misc/privacy.nix new file mode 100755 index 0000000..21459ad --- /dev/null +++ b/home-manager/modules/misc/privacy.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + bitwarden + ledger-live-desktop + protonvpn-gui + protonvpn-cli + tor-browser + ; + }; +} diff --git a/home-manager/modules/misc/production-art-extras.nix b/home-manager/modules/misc/production-art-extras.nix new file mode 100755 index 0000000..de613f7 --- /dev/null +++ b/home-manager/modules/misc/production-art-extras.nix @@ -0,0 +1,15 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + blender + darktable + gimp + opentabletdriver + ; + inherit + (pkgs.sweethome3d) + application + ; + }; +} diff --git a/home-manager/modules/misc/production-art.nix b/home-manager/modules/misc/production-art.nix new file mode 100755 index 0000000..0bb7ef0 --- /dev/null +++ b/home-manager/modules/misc/production-art.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + inkscape + krita + ; + }; +} diff --git a/home-manager/modules/misc/production-audio.nix b/home-manager/modules/misc/production-audio.nix new file mode 100755 index 0000000..5ee17fb --- /dev/null +++ b/home-manager/modules/misc/production-audio.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + reaper + ardour + yabridge + ; + }; +} diff --git a/home-manager/modules/misc/production-code.nix b/home-manager/modules/misc/production-code.nix new file mode 100755 index 0000000..0d1b621 --- /dev/null +++ b/home-manager/modules/misc/production-code.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs.nodePackages_latest) + dotenv-cli + forever + nodejs + ; + }; +} diff --git a/home-manager/modules/misc/production-video.nix b/home-manager/modules/misc/production-video.nix new file mode 100755 index 0000000..5fe70b1 --- /dev/null +++ b/home-manager/modules/misc/production-video.nix @@ -0,0 +1,14 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + droidcam + deskreen + shotcut + # syncplay # group streaming thingie + + # yt-dlp # dependency for syncplay + + ; + }; +} diff --git a/home-manager/modules/misc/production-writing.nix b/home-manager/modules/misc/production-writing.nix new file mode 100755 index 0000000..1088362 --- /dev/null +++ b/home-manager/modules/misc/production-writing.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + libreoffice + obsidian + ; + }; +} diff --git a/home-manager/modules/misc/virtualization.nix b/home-manager/modules/misc/virtualization.nix new file mode 100755 index 0000000..2ba9ef5 --- /dev/null +++ b/home-manager/modules/misc/virtualization.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + virt-manager + ; + }; +} diff --git a/home-manager/modules/misc/wpsoffice.nix b/home-manager/modules/misc/wpsoffice.nix new file mode 100755 index 0000000..7978a11 --- /dev/null +++ b/home-manager/modules/misc/wpsoffice.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + wpsoffice + ; + }; +} diff --git a/home-manager/modules/misc/yazi.nix b/home-manager/modules/misc/yazi.nix new file mode 100755 index 0000000..530974d --- /dev/null +++ b/home-manager/modules/misc/yazi.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + desktop-file-utils + exiftool + mediainfo + ; + }; +} diff --git a/home-manager/modules/mpv.nix b/home-manager/modules/mpv.nix new file mode 100755 index 0000000..43a207a --- /dev/null +++ b/home-manager/modules/mpv.nix @@ -0,0 +1,11 @@ +{ + programs.mpv = { + enable = true; + config = { + profile = "gpu-hq"; + ytdl-format = "bestvideo+bestaudio"; + cache-default = 4000000; + loop-file = "inf"; + }; + }; +} diff --git a/home-manager/modules/nextcloud.nix b/home-manager/modules/nextcloud.nix new file mode 100755 index 0000000..6d6bc7c --- /dev/null +++ b/home-manager/modules/nextcloud.nix @@ -0,0 +1,6 @@ +{ + services.nextcloud-client = { + enable = true; + startInBackground = true; + }; +} diff --git a/home-manager/modules/nushell.nix b/home-manager/modules/nushell.nix new file mode 100755 index 0000000..9811854 --- /dev/null +++ b/home-manager/modules/nushell.nix @@ -0,0 +1,8 @@ +{ + programs.nushell = { + enable = true; + configFile.text = '' + $env.config = {show_banner: false} + ''; + }; +} diff --git a/home-manager/modules/obs-studio/default.nix b/home-manager/modules/obs-studio/default.nix new file mode 100755 index 0000000..1f69ab9 --- /dev/null +++ b/home-manager/modules/obs-studio/default.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + programs = { + obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + obs-tuna + obs-vkcapture + ]; + }; + }; + xdg.configFile."obs-studio/themes".source = ./themes; +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Frappe (compact).qss b/home-manager/modules/obs-studio/themes/Catppuccin Frappe (compact).qss new file mode 100755 index 0000000..e293687 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Frappe (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(242, 213, 207); /* Rosewater */ +/* rgb(238, 190, 190); /* Flamingo */ +/* rgb(231, 130, 132); /* Red */ +/* rgb(234, 153, 156); /* Maroon */ +/* rgb(239, 159, 118); /* Peach */ +/* rgb(166, 209, 137); /* Green */ +/* rgb(140, 170, 238); /* Blue */ +/* rgb(198, 208, 245); /* Text */ +/* rgb(165, 173, 206); /* Subtext0 */ +/* rgb(131, 139, 167); /* Overlay1 */ +/* rgb(115, 121, 148); /* Overlay0 */ +/* rgb(81, 87, 109); /* Surface1 */ +/* rgb(65, 69, 89); /* Surface0 */ +/* rgb(48, 52, 70); /* Base */ +/* rgb(41, 44, 60); /* Mantle */ +/* rgb(35, 38, 52); /* Crust */ + +OBSThemeMeta { + dark: 'true'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(48, 52, 70); + windowText: rgb(165, 173, 206); + base: rgb(41, 44, 60); + alternateBase: rgb(35, 38, 52); + text: rgb(198, 208, 245); + button: rgb(65, 69, 89); + buttonText: rgb(165, 173, 206); + brightText: rgb(165, 173, 206); + + light: rgb(65, 69, 89); + mid: rgb(48, 52, 70); + dark: rgb(41, 44, 60); + shadow: rgb(35, 38, 52); + + highlight: rgb(140, 170, 238); + highlightedText: rgb(165, 173, 206); + + link: rgb(242, 213, 207); + linkVisited: rgb(238, 190, 190); +} + +OBSTheme::disabled { + text: rgb(131, 139, 167); + buttonText: rgb(131, 139, 167); + brightText: rgb(41, 44, 60); +} + +OBSTheme::inactive { + highlight: rgb(35, 38, 52); + highlightedText: rgb(198, 208, 245); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(81, 87, 109); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(81, 87, 109); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(41, 44, 60); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(35, 38, 52); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 209, 137); + qproperty-backgroundWarningColor: rgb(239, 159, 118); + qproperty-backgroundErrorColor: rgb(231, 130, 132); + qproperty-foregroundNominalColor: rgb(119, 185, 75); + qproperty-foregroundWarningColor: rgb(230, 103, 38); + qproperty-foregroundErrorColor: rgb(216, 54, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(198, 208, 245); + qproperty-minorTickColor: rgb(115, 121, 148); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(140, 170, 238); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(239, 159, 118); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(239, 159, 118); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 209, 137); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(165, 173, 206); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(81, 87, 109); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Dark/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(81, 87, 109); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(165, 173, 206); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(65, 69, 89); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(81, 87, 109); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(81, 87, 109); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(35, 38, 52); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(35, 38, 52); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(35, 38, 52); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(81, 87, 109); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Frappe.qss b/home-manager/modules/obs-studio/themes/Catppuccin Frappe.qss new file mode 100755 index 0000000..d8cc9b9 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Frappe.qss @@ -0,0 +1,1520 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'true'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(48, 52, 70); + windowText: rgb(165, 173, 206); + + base: rgb(41, 44, 60); + alternateBase: rgb(35, 38, 52); + + text: rgb(198, 208, 245); + + button: rgb(65, 69, 89); + buttonText: rgb(165, 173, 206); + + brightText: rgb(165, 173, 206); + + light: rgb(65, 69, 89); + mid: rgb(48, 52, 70); + dark: rgb(41, 44, 60); + shadow: rgb(35, 38, 52); + + primary: rgb(81, 87, 109); + primaryLight: rgb(140, 170, 238); + primaryDark: rgb(35, 38, 52); + + highlight: rgb(140, 170, 238); + highlightText: rgb(165, 173, 206); + + link: rgb(242, 213, 207); + linkVisited: rgb(238, 190, 190); +} + +OBSTheme::disabled { + windowText: rgb(131, 139, 167); + text: rgb(131, 139, 167); + button: rgb(48, 52, 70); + + buttonText: rgb(41, 44, 60); + brightText: rgb(41, 44, 60); +} + +OBSTheme::inactive { + text: rgb(165, 173, 206); + + highlight: rgb(35, 38, 52); + highlightText: rgb(198, 208, 245); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(35, 38, 52); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(131, 139, 167); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(115, 121, 148); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(131, 139, 167); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(81, 87, 109); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(81, 87, 109); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(65, 69, 89); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(131, 139, 167); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(81, 87, 109); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(65, 69, 89); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(65, 69, 89); +} + +QScrollBar::handle:hover { + background-color: rgb(81, 87, 109); + border-color: rgb(81, 87, 109); +} + +QScrollBar::handle:pressed { + background-color: rgb(65, 69, 89); + border-color: rgb(65, 69, 89); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(81, 87, 109); +} + +QToolButton:pressed { + background-color: rgb(35, 38, 52); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(65, 69, 89); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(35, 38, 52); +} + +QTabBar::tab:hover { + background: rgb(81, 87, 109); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(65, 69, 89); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(198, 208, 245); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(198, 208, 245); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(65, 69, 89); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(65, 69, 89); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(81, 87, 109); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(115, 121, 148); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(81, 87, 109); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(65, 69, 89); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(81, 87, 109); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(65, 69, 89); + border: 2px solid rgb(65, 69, 89); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(98, 104, 128); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(81, 87, 109); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(81, 87, 109); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(35, 38, 52); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(35, 38, 52); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(35, 38, 52); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(140, 170, 238); + color: rgb(35, 38, 52); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(186, 187, 241); + color: rgb(35, 38, 52); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(65, 69, 89); +} + +QPushButton:checked { + background-color: rgb(81, 87, 109); +} + +QPushButton:hover { + background-color: rgb(81, 87, 109); +} + +QPushButton:pressed { + background-color: rgb(35, 38, 52); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(35, 38, 52); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(65, 69, 89); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(65, 69, 89); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(131, 139, 167); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(81, 87, 109); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(35, 38, 52); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 209, 137); + qproperty-backgroundWarningColor: rgb(239, 159, 118); + qproperty-backgroundErrorColor: rgb(231, 130, 132); + qproperty-foregroundNominalColor: rgb(119, 185, 75); + qproperty-foregroundWarningColor: rgb(230, 103, 38); + qproperty-foregroundErrorColor: rgb(216, 54, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(198, 208, 245); + qproperty-minorTickColor: rgb(115, 121, 148); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(65, 69, 89); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(140, 170, 238); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(239, 159, 118); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(239, 159, 118); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(234, 153, 156); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 209, 137); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(35, 38, 52); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(165, 173, 206); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Dark/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(81, 87, 109); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(140, 170, 238); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(81, 87, 109); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(81, 87, 109); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(81, 87, 109); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(65, 69, 89); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(81, 87, 109); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(81, 87, 109); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(140, 170, 238); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(81, 87, 109); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(35, 38, 52); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(35, 38, 52); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Latte (compact).qss b/home-manager/modules/obs-studio/themes/Catppuccin Latte (compact).qss new file mode 100755 index 0000000..2885304 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Latte (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(220, 138, 120); /* Rosewater */ +/* rgb(221, 120, 120); /* Flamingo */ +/* rgb(210, 15, 57); /* Red */ +/* rgb(230, 69, 83); /* Maroon */ +/* rgb(254, 100, 11); /* Peach */ +/* rgb(64, 160, 43); /* Green */ +/* rgb(30, 102, 245); /* Blue */ +/* rgb(76, 79, 105); /* Text */ +/* rgb(108, 111, 133); /* Subtext0 */ +/* rgb(140, 143, 161); /* Overlay1 */ +/* rgb(156, 160, 176); /* Overlay0 */ +/* rgb(188, 192, 204); /* Surface1 */ +/* rgb(204, 208, 218); /* Surface0 */ +/* rgb(239, 241, 245); /* Base */ +/* rgb(230, 233, 239); /* Mantle */ +/* rgb(220, 224, 232); /* Crust */ + +OBSThemeMeta { + dark: 'false'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(239, 241, 245); + windowText: rgb(108, 111, 133); + base: rgb(230, 233, 239); + alternateBase: rgb(220, 224, 232); + text: rgb(76, 79, 105); + button: rgb(204, 208, 218); + buttonText: rgb(108, 111, 133); + brightText: rgb(108, 111, 133); + + light: rgb(204, 208, 218); + mid: rgb(239, 241, 245); + dark: rgb(230, 233, 239); + shadow: rgb(220, 224, 232); + + highlight: rgb(30, 102, 245); + highlightedText: rgb(108, 111, 133); + + link: rgb(220, 138, 120); + linkVisited: rgb(221, 120, 120); +} + +OBSTheme::disabled { + text: rgb(140, 143, 161); + buttonText: rgb(140, 143, 161); + brightText: rgb(230, 233, 239); +} + +OBSTheme::inactive { + highlight: rgb(220, 224, 232); + highlightedText: rgb(76, 79, 105); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(188, 192, 204); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(188, 192, 204); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Light/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Light/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Light/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Light/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Light/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(230, 233, 239); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Light/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Light/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(220, 224, 232); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(48, 120, 32); + qproperty-backgroundWarningColor: rgb(198, 73, 1); + qproperty-backgroundErrorColor: rgb(157, 11, 43); + qproperty-foregroundNominalColor: rgb(64, 160, 43); + qproperty-foregroundWarningColor: rgb(254, 100, 11); + qproperty-foregroundErrorColor: rgb(210, 15, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(76, 79, 105); + qproperty-minorTickColor: rgb(156, 160, 176); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(30, 102, 245); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Light/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(254, 100, 11); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(254, 100, 11); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(64, 160, 43); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(108, 111, 133); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Light/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Light/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Light/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Light/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Light/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Light/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Light/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Light/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Light/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(188, 192, 204); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Light/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Light/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Light/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Light/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Light/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Light/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Light/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Light/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Light/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Light/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Light/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Light/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Light/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Light/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Light/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(188, 192, 204); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Light/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(108, 111, 133); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(204, 208, 218); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(188, 192, 204); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(188, 192, 204); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(220, 224, 232); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(220, 224, 232); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(220, 224, 232); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(188, 192, 204); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Latte.qss b/home-manager/modules/obs-studio/themes/Catppuccin Latte.qss new file mode 100755 index 0000000..cb05ac7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Latte.qss @@ -0,0 +1,1520 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'false'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(239, 241, 245); + windowText: rgb(108, 111, 133); + + base: rgb(230, 233, 239); + alternateBase: rgb(220, 224, 232); + + text: rgb(76, 79, 105); + + button: rgb(204, 208, 218); + buttonText: rgb(108, 111, 133); + + brightText: rgb(108, 111, 133); + + light: rgb(204, 208, 218); + mid: rgb(239, 241, 245); + dark: rgb(230, 233, 239); + shadow: rgb(220, 224, 232); + + primary: rgb(188, 192, 204); + primaryLight: rgb(30, 102, 245); + primaryDark: rgb(220, 224, 232); + + highlight: rgb(30, 102, 245); + highlightText: rgb(108, 111, 133); + + link: rgb(220, 138, 120); + linkVisited: rgb(221, 120, 120); +} + +OBSTheme::disabled { + windowText: rgb(140, 143, 161); + text: rgb(140, 143, 161); + button: rgb(239, 241, 245); + + buttonText: rgb(230, 233, 239); + brightText: rgb(230, 233, 239); +} + +OBSTheme::inactive { + text: rgb(108, 111, 133); + + highlight: rgb(220, 224, 232); + highlightText: rgb(76, 79, 105); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(220, 224, 232); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(140, 143, 161); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(156, 160, 176); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(140, 143, 161); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Light/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(188, 192, 204); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(188, 192, 204); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(204, 208, 218); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(140, 143, 161); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Light/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Light/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(188, 192, 204); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(204, 208, 218); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(204, 208, 218); +} + +QScrollBar::handle:hover { + background-color: rgb(188, 192, 204); + border-color: rgb(188, 192, 204); +} + +QScrollBar::handle:pressed { + background-color: rgb(204, 208, 218); + border-color: rgb(204, 208, 218); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Light/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(188, 192, 204); +} + +QToolButton:pressed { + background-color: rgb(220, 224, 232); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Light/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Light/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Light/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Light/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(204, 208, 218); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(220, 224, 232); +} + +QTabBar::tab:hover { + background: rgb(188, 192, 204); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(204, 208, 218); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(76, 79, 105); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(76, 79, 105); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(204, 208, 218); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(204, 208, 218); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(188, 192, 204); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(156, 160, 176); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(188, 192, 204); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(204, 208, 218); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(188, 192, 204); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(204, 208, 218); + border: 2px solid rgb(204, 208, 218); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(172, 176, 190); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(188, 192, 204); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(188, 192, 204); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(220, 224, 232); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(220, 224, 232); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(220, 224, 232); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Light/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Light/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(30, 102, 245); + color: rgb(220, 224, 232); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(114, 135, 253); + color: rgb(220, 224, 232); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(204, 208, 218); +} + +QPushButton:checked { + background-color: rgb(188, 192, 204); +} + +QPushButton:hover { + background-color: rgb(188, 192, 204); +} + +QPushButton:pressed { + background-color: rgb(220, 224, 232); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(220, 224, 232); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(204, 208, 218); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(204, 208, 218); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(140, 143, 161); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(188, 192, 204); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(220, 224, 232); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(48, 120, 32); + qproperty-backgroundWarningColor: rgb(198, 73, 1); + qproperty-backgroundErrorColor: rgb(157, 11, 43); + qproperty-foregroundNominalColor: rgb(64, 160, 43); + qproperty-foregroundWarningColor: rgb(254, 100, 11); + qproperty-foregroundErrorColor: rgb(210, 15, 57); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(76, 79, 105); + qproperty-minorTickColor: rgb(156, 160, 176); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(204, 208, 218); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(30, 102, 245); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(254, 100, 11); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(254, 100, 11); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(230, 69, 83); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(64, 160, 43); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(220, 224, 232); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(108, 111, 133); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Light/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Light/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Light/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Light/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Light/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Light/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Light/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Light/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Light/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Light/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Light/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Light/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Light/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(188, 192, 204); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Light/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Light/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(30, 102, 245); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Light/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Light/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Light/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Light/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Light/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Light/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Light/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Light/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Light/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Light/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Light/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Light/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Light/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Light/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Light/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Light/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Light/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Light/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(188, 192, 204); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(188, 192, 204); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(188, 192, 204); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Light/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Light/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Light/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(204, 208, 218); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(188, 192, 204); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(188, 192, 204); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(30, 102, 245); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Light/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Light/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Light/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(188, 192, 204); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(220, 224, 232); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(220, 224, 232); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Macchiato (compact).qss b/home-manager/modules/obs-studio/themes/Catppuccin Macchiato (compact).qss new file mode 100755 index 0000000..447e2b9 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Macchiato (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(244, 219, 214); /* Rosewater */ +/* rgb(240, 198, 198); /* Flamingo */ +/* rgb(237, 135, 150); /* Red */ +/* rgb(238, 153, 160); /* Maroon */ +/* rgb(245, 169, 127); /* Peach */ +/* rgb(166, 218, 149); /* Green */ +/* rgb(138, 173, 244); /* Blue */ +/* rgb(202, 211, 245); /* Text */ +/* rgb(165, 173, 203); /* Subtext0 */ +/* rgb(128, 135, 162); /* Overlay1 */ +/* rgb(110, 115, 141); /* Overlay0 */ +/* rgb(73, 77, 100); /* Surface1 */ +/* rgb(54, 58, 79); /* Surface0 */ +/* rgb(36, 39, 58); /* Base */ +/* rgb(30, 32, 48); /* Mantle */ +/* rgb(24, 25, 38); /* Crust */ + +OBSThemeMeta { + dark: 'true'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(36, 39, 58); + windowText: rgb(165, 173, 203); + base: rgb(30, 32, 48); + alternateBase: rgb(24, 25, 38); + text: rgb(202, 211, 245); + button: rgb(54, 58, 79); + buttonText: rgb(165, 173, 203); + brightText: rgb(165, 173, 203); + + light: rgb(54, 58, 79); + mid: rgb(36, 39, 58); + dark: rgb(30, 32, 48); + shadow: rgb(24, 25, 38); + + highlight: rgb(138, 173, 244); + highlightedText: rgb(165, 173, 203); + + link: rgb(244, 219, 214); + linkVisited: rgb(240, 198, 198); +} + +OBSTheme::disabled { + text: rgb(128, 135, 162); + buttonText: rgb(128, 135, 162); + brightText: rgb(30, 32, 48); +} + +OBSTheme::inactive { + highlight: rgb(24, 25, 38); + highlightedText: rgb(202, 211, 245); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(73, 77, 100); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(73, 77, 100); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(30, 32, 48); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(24, 25, 38); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 218, 149); + qproperty-backgroundWarningColor: rgb(245, 169, 127); + qproperty-backgroundErrorColor: rgb(237, 135, 150); + qproperty-foregroundNominalColor: rgb(109, 194, 81); + qproperty-foregroundWarningColor: rgb(238, 111, 41); + qproperty-foregroundErrorColor: rgb(225, 54, 79); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(202, 211, 245); + qproperty-minorTickColor: rgb(110, 115, 141); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(138, 173, 244); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(245, 169, 127); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(245, 169, 127); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 218, 149); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(165, 173, 203); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(73, 77, 100); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Dark/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(73, 77, 100); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(165, 173, 203); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(54, 58, 79); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(73, 77, 100); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(73, 77, 100); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(24, 25, 38); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(24, 25, 38); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(24, 25, 38); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(73, 77, 100); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Macchiato.qss b/home-manager/modules/obs-studio/themes/Catppuccin Macchiato.qss new file mode 100755 index 0000000..e039136 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Macchiato.qss @@ -0,0 +1,1520 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'true'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(36, 39, 58); + windowText: rgb(165, 173, 203); + + base: rgb(30, 32, 48); + alternateBase: rgb(24, 25, 38); + + text: rgb(202, 211, 245); + + button: rgb(54, 58, 79); + buttonText: rgb(165, 173, 203); + + brightText: rgb(165, 173, 203); + + light: rgb(54, 58, 79); + mid: rgb(36, 39, 58); + dark: rgb(30, 32, 48); + shadow: rgb(24, 25, 38); + + primary: rgb(73, 77, 100); + primaryLight: rgb(138, 173, 244); + primaryDark: rgb(24, 25, 38); + + highlight: rgb(138, 173, 244); + highlightText: rgb(165, 173, 203); + + link: rgb(244, 219, 214); + linkVisited: rgb(240, 198, 198); +} + +OBSTheme::disabled { + windowText: rgb(128, 135, 162); + text: rgb(128, 135, 162); + button: rgb(36, 39, 58); + + buttonText: rgb(30, 32, 48); + brightText: rgb(30, 32, 48); +} + +OBSTheme::inactive { + text: rgb(165, 173, 203); + + highlight: rgb(24, 25, 38); + highlightText: rgb(202, 211, 245); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(24, 25, 38); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(128, 135, 162); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(110, 115, 141); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(128, 135, 162); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(73, 77, 100); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(73, 77, 100); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(54, 58, 79); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(128, 135, 162); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(73, 77, 100); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(54, 58, 79); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(54, 58, 79); +} + +QScrollBar::handle:hover { + background-color: rgb(73, 77, 100); + border-color: rgb(73, 77, 100); +} + +QScrollBar::handle:pressed { + background-color: rgb(54, 58, 79); + border-color: rgb(54, 58, 79); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(73, 77, 100); +} + +QToolButton:pressed { + background-color: rgb(24, 25, 38); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(54, 58, 79); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(24, 25, 38); +} + +QTabBar::tab:hover { + background: rgb(73, 77, 100); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(54, 58, 79); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(202, 211, 245); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(202, 211, 245); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(54, 58, 79); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(54, 58, 79); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(73, 77, 100); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(110, 115, 141); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(73, 77, 100); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(54, 58, 79); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(73, 77, 100); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(54, 58, 79); + border: 2px solid rgb(54, 58, 79); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(91, 96, 120); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(73, 77, 100); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(73, 77, 100); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(24, 25, 38); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(24, 25, 38); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(24, 25, 38); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(138, 173, 244); + color: rgb(24, 25, 38); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(183, 189, 248); + color: rgb(24, 25, 38); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(54, 58, 79); +} + +QPushButton:checked { + background-color: rgb(73, 77, 100); +} + +QPushButton:hover { + background-color: rgb(73, 77, 100); +} + +QPushButton:pressed { + background-color: rgb(24, 25, 38); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(24, 25, 38); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(54, 58, 79); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(54, 58, 79); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(128, 135, 162); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(73, 77, 100); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(24, 25, 38); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 218, 149); + qproperty-backgroundWarningColor: rgb(245, 169, 127); + qproperty-backgroundErrorColor: rgb(237, 135, 150); + qproperty-foregroundNominalColor: rgb(109, 194, 81); + qproperty-foregroundWarningColor: rgb(238, 111, 41); + qproperty-foregroundErrorColor: rgb(225, 54, 79); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(202, 211, 245); + qproperty-minorTickColor: rgb(110, 115, 141); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(54, 58, 79); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(138, 173, 244); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(245, 169, 127); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(245, 169, 127); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(238, 153, 160); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 218, 149); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(24, 25, 38); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(165, 173, 203); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Dark/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(73, 77, 100); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(138, 173, 244); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(73, 77, 100); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(73, 77, 100); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(73, 77, 100); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(54, 58, 79); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(73, 77, 100); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(73, 77, 100); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(138, 173, 244); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(73, 77, 100); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(24, 25, 38); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(24, 25, 38); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Mocha (compact).qss b/home-manager/modules/obs-studio/themes/Catppuccin Mocha (compact).qss new file mode 100755 index 0000000..86492f8 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Mocha (compact).qss @@ -0,0 +1,1054 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ +/* rgb(245, 224, 220); /* Rosewater */ +/* rgb(242, 205, 205); /* Flamingo */ +/* rgb(243, 139, 168); /* Red */ +/* rgb(235, 160, 172); /* Maroon */ +/* rgb(250, 179, 135); /* Peach */ +/* rgb(166, 227, 161); /* Green */ +/* rgb(137, 180, 250); /* Blue */ +/* rgb(205, 214, 244); /* Text */ +/* rgb(166, 173, 200); /* Subtext0 */ +/* rgb(127, 132, 156); /* Overlay1 */ +/* rgb(108, 112, 134); /* Overlay0 */ +/* rgb(69, 71, 90); /* Surface1 */ +/* rgb(49, 50, 68); /* Surface0 */ +/* rgb(30, 30, 46); /* Base */ +/* rgb(24, 24, 37); /* Mantle */ +/* rgb(17, 17, 27); /* Crust */ + +OBSThemeMeta { + dark: 'true'; + author: 'Catppuccin'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(30, 30, 46); + windowText: rgb(166, 173, 200); + base: rgb(24, 24, 37); + alternateBase: rgb(17, 17, 27); + text: rgb(205, 214, 244); + button: rgb(49, 50, 68); + buttonText: rgb(166, 173, 200); + brightText: rgb(166, 173, 200); + + light: rgb(49, 50, 68); + mid: rgb(30, 30, 46); + dark: rgb(24, 24, 37); + shadow: rgb(17, 17, 27); + + highlight: rgb(137, 180, 250); + highlightedText: rgb(166, 173, 200); + + link: rgb(245, 224, 220); + linkVisited: rgb(242, 205, 205); +} + +OBSTheme::disabled { + text: rgb(127, 132, 156); + buttonText: rgb(127, 132, 156); + brightText: rgb(24, 24, 37); +} + +OBSTheme::inactive { + highlight: rgb(17, 17, 27); + highlightedText: rgb(205, 214, 244); +} + + +/* General style, we override only what is needed. */ +QWidget { + background-color: palette(window); + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(69, 71, 90); + selection-color: palette(text); +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(base); +} + + +/* Misc */ + +QWidget::disabled { + color: 2px solid palette(bright-text); +} + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +QMenuBar::item { + background-color: palette(window); +} + +QListView::item:selected:!active, +SourceTree::item:selected:!active { + color: palette(text); + background-color: rgb(69, 71, 90); +} + +QListView QLineEdit, +SourceTree QLineEdit { + padding-top: 0px; + padding-bottom: 0px; + padding-right: 0; + padding-left: 2px; + border: none; + border-radius: none; +} + +/* macOS Separator Fix */ +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* Dock Widget */ + +QDockWidget { + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: center; + background-color: palette(base); +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 1px solid transparent; + background: transparent; + padding: 0px; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: transparent; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +/* Group Box */ + +QGroupBox { + border: 1px solid palette(base); + border-radius: 5px; + padding-top: 24px; + font-weight: bold; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 4px; + top: 4px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: palette(window); + width: 14px; + margin: 0px; +} + +QScrollBar::handle:vertical { + background-color: palette(light); + min-height: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: palette(window); + height: 14px; + margin: 0px; +} + +QScrollBar::handle:horizontal { + background-color: palette(light); + min-width: 20px; + margin: 2px; + border-radius: 5px; + border-width: 1px; + border: 1px solid palette(light); +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +/* Source Context */ +#contextContainer QPushButton { + padding: 4px 10px; +} + +#contextContainer QPushButton[themeID2=contextBarButton] { + padding: 4px 6px; +} + +#contextContainer QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +#contextContainer QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +#contextContainer QPushButton#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(window); + border: none; +} + +QPushButton[toolButton="true"], +QToolButton { + background: transparent; + border: none; + padding: 1px; + margin: 1px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QPushButton[toolButton="true"]:hover, +QToolButton:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ + border-radius: none; +} + +QPushButton[toolButton="true"]:pressed, +QToolButton:pressed { + background-color: palette(shadow); + border-radius: none; +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/minus.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 1px solid palette(base); /* Mantle */ +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar::tab { + background-color: palette(light); + border: none; + padding: 5px; + min-width: 50px; + margin: 1px; +} + +QTabBar::tab:top { + border-bottom: 1px transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + +} + +QTabBar::tab:bottom { + padding-top: 1px; + margin-bottom: 4px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + height: 14px; +} + +QTabBar::tab:selected { + background-color: palette(base); +} + +QTabBar::tab:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +QTabBar::tab:pressed { + background-color: palette(base); +} + + +/* ComboBox */ + +QDateTimeEdit, +QComboBox { + background-color: palette(light); + border-style: solid; + border: 1px; + border-radius: 3px; + border-color: rgb(24, 24, 37); /* Mantle */ + padding: 2px; + padding-left: 10px; +} + +QDateTimeEdit:hover, +QComboBox:hover { + background-color: palette(button); +} + +QDateTimeEdit::drop-down, +QComboBox::drop-down { + border:none; + border-left: 1px solid rgba(24, 24, 37,155); /* Mantle */ + width: 20px; +} + +QDateTimeEdit::down-arrow, +QComboBox::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QDateTimeEdit:on, +QComboBox:on { + background-color: palette(base); +} + +QDateTimeEdit:editable, +QComboBox:editable { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +QDateTimeEdit::drop-down:editable, +QComboBox::drop-down:editable { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +QDateTimeEdit::down-arrow:editable, +QComboBox::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: palette(base); + border: none; + border-radius: 3px; + padding: 2px 2px 3px 7px; +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, QDoubleSpinBox { + background-color: palette(base); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 2px 2px 3px 7px; +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: margin; + subcontrol-position: top right; /* position at the top right corner */ + + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: margin; + subcontrol-position: bottom right; /* position at the top right corner */ + background-color: palette(light); + border: 1px solid palette(base); + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: palette(window); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: palette(window); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: palette(window); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton::flat { + background-color: palette(window); +} + +QPushButton:checked { + background-color: palette(base); +} + +QPushButton:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +QPushButton:pressed { + background-color: palette(base); +} + +QPushButton:disabled { + background-color: rgb(17, 17, 27); + +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: palette(light); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: palette(light); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(window); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); /* Base */ + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: palette(bright-text); +} + +QSlider::handle:disabled { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +/* Volume Control */ + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 227, 161); + qproperty-backgroundWarningColor: rgb(250, 179, 135); + qproperty-backgroundErrorColor: rgb(243, 139, 168); + qproperty-foregroundNominalColor: rgb(95, 205, 86); + qproperty-foregroundWarningColor: rgb(246, 120, 43); + qproperty-foregroundErrorColor: rgb(234, 52, 103); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(205, 214, 244); + qproperty-minorTickColor: rgb(108, 112, 134); + qproperty-meterThickness: 3; + + /* The meter scale numbers normally use your QWidget font, with size */ + /* multiplied by meterFontScaling to get a proportionally smaller font. */ + /* To use a unique font for the numbers, specify font-family and/or */ + /* font-size here, and set meterFontScaling to 1.0. */ + qproperty-meterFontScaling: 0.7; +} + + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + gridline-color: palette(light); +} + +QHeaderView::section { + background-color: palette(window); + color: palette(text); + border: 1px solid palette(base); + border-radius: 5px; +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(137, 180, 250); +} + +/* Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; +} + +SourceTreeSubItemCheckBox::indicator { + width: 10px; + height: 10px; +} + +SourceTreeSubItemCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/collapse.svg); +} + + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(250, 179, 135); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(250, 179, 135); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 227, 161); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 36px; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 16px; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: palette(shadow); +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(166, 173, 200); +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +OBSBasicSettings QListView::item { + padding-top: 5px; + padding-bottom: 5px; +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(base); +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(69, 71, 90); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(base); +} + +OBSMissingFiles { + qproperty-warningIcon: url(./Catppuccin/Dark/alert.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree */ + +SceneTree { + qproperty-gridItemWidth: 150; + qproperty-gridItemHeight: 27; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px; + padding-left: 10px; + padding-right: 10px; + margin: 1px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +*[gridMode="true"] SceneTree::item:pressed { + background-color: palette(base); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(69, 71, 90); /* Surface1 */ +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid palette(light); + height: 5px; + background: palette(base); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(base);; + border: 1px solid palette(light); +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: palette(text); + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: rgb(166, 173, 200); /* Subtext0 */ + background-color: palette(light); + border: none; + border-radius: 3px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background: rgb(49, 50, 68); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background: rgb(69, 71, 90); + border: none; +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(base); /* Mantle */ +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(light); + padding: 2px 16px; + border-radius: 3px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(69, 71, 90); + border-radius: 3px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(17, 17, 27); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(17, 17, 27); + border: none; + border-radius: 3px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(base); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); + selection-background-color: rgb(17, 17, 27); + selection-color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(69, 71, 90); +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin Mocha.qss b/home-manager/modules/obs-studio/themes/Catppuccin Mocha.qss new file mode 100755 index 0000000..e90a43d --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin Mocha.qss @@ -0,0 +1,1522 @@ +/******************************************************************************/ +/* Copyright (C) 2014-2015 by Philippe Groarke */ +/* */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 2 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see . */ +/******************************************************************************/ + +/* Colors */ + +OBSThemeMeta { + dark: 'true'; + author: 'Xurdejl'; +} + +/* Custom theme information. This will set the application's QPalette, as + * well as pass to QML via the OBSTheme object. + * Can also use OBSTheme::disabled, OBSTheme::active, and OBSTheme::inactive. + * Using it without will set all three (making 'active' a bit redundant) */ +OBSTheme { + window: rgb(30, 30, 46); + windowText: rgb(166, 173, 200); + + base: rgb(24, 24, 37); + alternateBase: rgb(17, 17, 27); + + text: rgb(205, 214, 244); + + button: rgb(49, 50, 68); + buttonText: rgb(166, 173, 200); + + brightText: rgb(166, 173, 200); + + light: rgb(49, 50, 68); + mid: rgb(30, 30, 46); + dark: rgb(24, 24, 37); + shadow: rgb(17, 17, 27); + + primary: rgb(69, 71, 90); + primaryLight: rgb(137, 180, 250); + primaryDark: rgb(17, 17, 27); + + highlight: rgb(137, 180, 250); + highlightText: rgb(166, 173, 200); + + link: rgb(245, 224, 220); + linkVisited: rgb(242, 205, 205); +} + +OBSTheme::disabled { + windowText: rgb(127, 132, 156); + text: rgb(127, 132, 156); + button: rgb(30, 30, 46); + + buttonText: rgb(24, 24, 37); + brightText: rgb(24, 24, 37); +} + +OBSTheme::inactive { + text: rgb(166, 173, 200); + + highlight: rgb(17, 17, 27); + highlightText: rgb(205, 214, 244); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: palette(base); + color: palette(text); + selection-background-color: rgb(17, 17, 27); + selection-color: palette(text); + font-size: 10pt; + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: rgb(127, 132, 156); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: palette(window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: 4px; + height: 4px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: 3px; + margin-bottom: 3px; +} + +QListWidget QWidget, +SceneTree QWidget, +SourceTree QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] { + border: 1px solid palette(dark); +} + + +/* Misc */ + +QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { + background-color: palette(base); +} + +QToolTip { + background-color: palette(base); + color: palette(text); + border: none; +} + +/* Context Menu */ + +QMenu::icon { + left: 4px; +} + +QMenu::separator { + background: rgb(108, 112, 134); + height: 1px; + margin: 3px 6px; +} + +QMenu::item:disabled { + color: rgb(127, 132, 156); + background: transparent; +} + +QMenu::right-arrow { + image: url(./Catppuccin/Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; +} + +QMenuBar::item:selected { + background: rgb(69, 71, 90); +} + +/* Item Lists */ +QListWidget { + border-radius: 4px; +} + +QListWidget::item { + color: palette(text); +} + +QListWidget, +QMenu, +SceneTree, +SourceTree { + padding: 3px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item { + padding: 6px; +} + +QListWidget::item, +SourceTreeItem, +QMenu::item, +SceneTree::item, +SourceTree::item { + border-radius: 4px; + color: palette(text); + border: 0px solid transparent; +} + +QMenu::item:selected, +QListWidget::item:selected, +SceneTree::item:selected, +SourceTree::item:selected { + background-color: rgb(69, 71, 90); +} + +QMenu::item:hover, +QListWidget::item:hover, +SceneTree::item:hover, +SourceTree::item:hover, +QMenu::item:selected:hover, +QListWidget::item:selected:hover, +SceneTree::item:selected:hover, +SourceTree::item:selected:hover { + background-color: rgb(49, 50, 68); + color: palette(text); +} + +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: rgb(127, 132, 156); +} + +QListWidget QLineEdit, +SceneTree QLineEdit, +SourceTree QLineEdit { + padding: 0px; + padding-bottom: 2px; + margin: 0px; + border: 1px solid #cdd6f4; + border-radius: 4px; +} + +QListWidget QLineEdit:focus, +SceneTree QLineEdit:focus, +SourceTree QLineEdit:focus { + border: 1px solid #cdd6f4; +} + +/* Settings QList */ + +OBSBasicSettings QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicSettings QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: palette(dark); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +OBSDock QFrame { + background: palette(dark); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +#transitionsContainer QPushButton { + margin: 0px 0px; + padding: 4px 6px; +} + +OBSDock QLabel { + background: transparent; +} + +OBSDock QComboBox, +OBSDock QPushButton { + margin: 1px 2px; +} + +QDockWidget { + font-size: 10.5pt; + font-weight: bold; + + titlebar-close-icon: url('./Catppuccin/Dark/close.svg'); + titlebar-normal-icon: url('./Catppuccin/Dark/popout.svg'); +} + +QDockWidget::title { + text-align: left; + background-color: palette(base); + padding: 6px 8px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QDockWidget::close-button, QDockWidget::float-button { + border: 0px solid transparent; + border-radius: 4px; + background: transparent; + margin-right: 1px; + opacity: .5; +} + +QDockWidget::close-button:hover, QDockWidget::float-button:hover { + background: rgb(69, 71, 90); + opacity: 1; +} + +QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + padding: 1px -1px -1px 1px; +} + +QScrollArea { + border-radius: 4px; +} + +OBSBasicStatusBar { + margin-top: 8px; +} + +/* Group Box */ + +QGroupBox { + background: palette(dark); + border-radius: 4px; + padding-top: 32px; + padding-bottom: 8px; + font-weight: bold; + margin-bottom: 6px; +} + +QGroupBox::title { + subcontrol-origin: margin; + left: 8px; + top: 8px; +} + + +/* ScrollBars */ + +::corner { + background-color: palette(window); + border: none; +} + +QScrollBar:vertical { + background-color: transparent; + width: 14px; + margin: 0px; +} + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + background-color: transparent; + height: 14px; + margin: 0px; +} + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: rgb(49, 50, 68); + margin: 2px; + border-radius: 2px; + border: 1px solid rgb(49, 50, 68); +} + +QScrollBar::handle:hover { + background-color: rgb(69, 71, 90); + border-color: rgb(69, 71, 90); +} + +QScrollBar::handle:pressed { + background-color: rgb(49, 50, 68); + border-color: rgb(49, 50, 68); +} + +QScrollBar::handle:vertical { + min-height: 20px; +} + +QScrollBar::handle:horizontal { + min-width: 20px; +} + +/* Source Context Bar */ + +#contextContainer { + background-color: palette(dark); + margin-top: 4px; + border-radius: 4px; +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: palette(dark); + border: none; + padding: 0px; + margin: 4px 0px; +} + +QPushButton[toolButton="true"], +QToolButton, +QPushButton[toolButton="true"]:disabled, +QToolButton:disabled { + background-color: palette(base); + padding: 4px 6px; + margin: 0px 2px; + border-radius: 4px; +} + +QPushButton[toolButton="true"]:last-child, +QToolButton:last-child { + margin-right: 0px; +} + +QToolButton:hover { + background-color: rgb(69, 71, 90); +} + +QToolButton:pressed { + background-color: rgb(17, 17, 27); +} + +* [themeID="addIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/plus.svg); +} + +* [themeID="removeIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/trash.svg); +} + +* [themeID="clearIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/entry-clear.svg); +} + +* [themeID="propertiesIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="configIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/settings/general.svg); +} + +* [themeID="menuIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + +* [themeID="refreshIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/refresh.svg); +} + +* [themeID="cogsIcon"] { + qproperty-icon: url(./Catppuccin/Dark/cogs.svg); +} + +#sourceInteractButton { + qproperty-icon: url(./Catppuccin/Dark/interact.svg); +} + +* [themeID="upArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/up.svg); +} + +* [themeID="downArrowIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/down.svg); +} + +* [themeID="pauseIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/media-pause.svg); +} + +* [themeID="filtersIcon"] { + qproperty-icon: url(./Catppuccin/Dark/filter.svg); +} + +QToolBarExtension { + background: palette(button); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(./Catppuccin/Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +QTabWidget::pane { /* The tab widget frame */ + border-top: 4px solid palette(base); +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: rgb(49, 50, 68); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: palette(dark); + color: palette(text); + border: none; + padding: 8px 12px; + min-width: 50px; + margin: 1px 2px; +} + +QTabBar::tab:pressed { + background: rgb(17, 17, 27); +} + +QTabBar::tab:hover { + background: rgb(69, 71, 90); + color: palette(text); +} + +QTabBar::tab:selected { + background: rgb(49, 50, 68); + color: palette(text); +} + +QTabBar::tab:top:selected { + border-bottom: 2px solid rgb(205, 214, 244); +} + +QTabBar::tab:bottom:selected { + border-top: 2px solid rgb(205, 214, 244); +} + +QTabBar QToolButton { + background: palette(base); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: rgb(49, 50, 68); + border-style: solid; + border: 1px; + border-radius: 4px; + border-color: rgb(49, 50, 68); + padding: 4px; + padding-left: 10px; +} + +QComboBox:hover, +QComboBox:selected, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + background-color: rgb(69, 71, 90); +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border:none; + border-left: 1px solid rgb(25,28,34); + width: 20px; +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/updown.svg); + width: 100%; +} + +QComboBox:on, +QDateTimeEdit:on { + background-color: rgb(69, 71, 90); +} + +QComboBox:editable:hover { + +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 8%; +} + +/* Textedits etc */ + +QLineEdit, QTextEdit, QPlainTextEdit { + background-color: rgb(49, 50, 68); + border: none; + border-radius: 4px; + padding: 5px 2px 5px 7px; + border: 2px solid transparent; +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + border: 2px solid rgb(99,102,111); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: palette(mid); + border: 2px solid rgb(69, 71, 90); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: rgb(49, 50, 68); + border: 2px solid rgb(49, 50, 68); + border-radius: 4px; + margin-right: 3px; + padding: 3px 0px 4px 5px; +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + border: 2px solid rgb(88, 91, 112); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: palette(mid); + border: 2px solid rgb(69, 71, 90); +} + +QSpinBox::up-button, QDoubleSpinBox::up-button { + subcontrol-origin: padding; + subcontrol-position: top right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom-width: 0; +} + +QSpinBox::down-button, QDoubleSpinBox::down-button { + subcontrol-origin: padding; + subcontrol-position: bottom right; /* position at the top right corner */ + right: 2px; + border-radius: 3px; + border-width: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top-width: 0; +} + +QSpinBox::up-button:hover, QSpinBox::down-button:hover, QDoubleSpinBox::up-button:hover, QDoubleSpinBox::down-button:hover { + background-color: rgb(69, 71, 90); +} + +QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed { + background-color: rgb(17, 17, 27); +} + +QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off { + background-color: rgb(17, 17, 27); +} + +QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off { + background-color: rgb(17, 17, 27); +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: url(./Catppuccin/Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: url(./Catppuccin/Dark/down.svg); + width: 100%; + padding: 2px; +} + + +/* Controls Dock */ +#controlsDock QPushButton { + margin: 1px; +} + +#streamButton, +#recordButton, +QPushButton[themeID="replayBufferButton"], +#broadcastButton { + padding: 10px; +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed:checked, +#recordButton:!hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!hover:!pressed:checked, +QPushButton[themeID="vcamButton"]:!hover:!pressed:checked, +#modeSwitch:!hover:!pressed:checked, +#broadcastButton:!hover:!pressed:checked { + background: rgb(137, 180, 250); + color: rgb(17, 17, 27); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed:checked, +#recordButton:hover:!pressed:checked, +QPushButton[themeID="replayBufferButton"]:!pressed:checked, +QPushButton[themeID="vcamButton"]:!pressed:checked, +#modeSwitch:hover:!pressed:checked, +#broadcastButton:hover:!pressed:checked { + background: rgb(180, 190, 254); + color: rgb(17, 17, 27); +} + + +/* Buttons */ + +QPushButton { + color: palette(text); + background-color: palette(button); + min-height: 18px; + border: none; + border-radius: 4px; + padding: 6px 16px; +} + +QPushButton::flat { + background-color: rgb(49, 50, 68); +} + +QPushButton:checked { + background-color: rgb(69, 71, 90); +} + +QPushButton:hover { + background-color: rgb(69, 71, 90); +} + +QPushButton:pressed { + background-color: rgb(17, 17, 27); +} + +QPushButton:disabled, QToolButton:disabled { + background-color: rgb(17, 17, 27); +} + +QPushButton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +/* Sliders */ + +QSlider::groove:horizontal { + background-color: rgb(49, 50, 68); + height: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + height: 10px; + width: 18px; + margin: -3px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:horizontal:pressed { + background-color: palette(text); +} + +QSlider::sub-page:horizontal { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::groove:vertical { + background-color: rgb(49, 50, 68); + width: 4px; + border: none; + border-radius: 2px; +} + +QSlider::handle:vertical { + background-color: palette(text); + border: 1px solid palette(mid); + border-radius: 3px; + width: 10px; + height: 18px; + margin: 0 -3px; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ +} + +QSlider::handle:vertical:pressed { + background-color: palette(text); +} + +QSlider::add-page:vertical { + background-color: palette(highlight); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: palette(window); + border-radius: 2px; +} + +QSlider::handle:hover { + background-color: rgb(186,194,222); +} + +QSlider::handle:disabled { + background-color: rgb(127, 132, 156); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + min-width: 16px; + padding: 4px 8px; +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: palette(base); +} + +#stackedMixerArea QPushButton:hover { + background-color: rgb(69, 71, 90); +} + +#stackedMixerArea QPushButton:pressed { + background-color: rgb(17, 17, 27); +} + +VolumeMeter { + qproperty-backgroundNominalColor: rgb(166, 227, 161); + qproperty-backgroundWarningColor: rgb(250, 179, 135); + qproperty-backgroundErrorColor: rgb(243, 139, 168); + qproperty-foregroundNominalColor: rgb(95, 205, 86); + qproperty-foregroundWarningColor: rgb(246, 120, 43); + qproperty-foregroundErrorColor: rgb(234, 52, 103); + qproperty-magnitudeColor: rgb(49, 50, 8); + qproperty-majorTickColor: rgb(205, 214, 244); + qproperty-minorTickColor: rgb(108, 112, 134); + qproperty-peakDecayRate: 23.4; +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: palette(base); + gridline-color: palette(light); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: palette(mid); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + margin: 1px 1px 2px; +} + +QHeaderView::section { + background-color: rgb(49, 50, 68); + color: palette(text); + border: none; + border-left: 1px solid palette(window); + border-right: 1px solid palette(window); + padding: 2px 4px; + margin-bottom: 2px; +} + +/* Mute CheckBox */ + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(137, 180, 250); +} + +/* Label warning/error */ + +QLabel#warningLabel { + color: rgb(250, 179, 135); + font-weight: bold; +} + +QLabel#errorLabel { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="warning"] { + color: rgb(250, 179, 135); + font-weight: bold; +} + +* [themeID="error"] { + color: rgb(235, 160, 172); + font-weight: bold; +} + +* [themeID="good"] { + color: rgb(166, 227, 161); + font-weight: bold; +} + +/* About dialog */ + +* [themeID="aboutName"] { + font-size: 26pt; + font-weight: bold; +} + +* [themeID="aboutVersion"] { + font-size: 12pt; + margin-bottom: 20px; +} + +* [themeID="aboutInfo"] { + margin-bottom: 20px; +} + +* [themeID="aboutHLayout"] { + background-color: palette(base); +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(17, 17, 27); + border-radius: 10px; +} + +/* Filters Window */ + +OBSBasicFilters QListWidget { + border-radius: 4px; + padding: 3px; +} + +OBSBasicFilters QListWidget::item { + border-radius: 4px; + padding: 6px; +} + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: 4px; +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: 4px 8px; + margin-top: 0px; +} + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 14pt; + font-weight: bold; + color: rgb(166, 173, 200); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(./Catppuccin/Dark/settings/general.svg); + qproperty-streamIcon: url(./Catppuccin/Dark/settings/stream.svg); + qproperty-outputIcon: url(./Catppuccin/Dark/settings/output.svg); + qproperty-audioIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-videoIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-hotkeysIcon: url(./Catppuccin/Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(./Catppuccin/Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(./Catppuccin/Dark/settings/advanced.svg); +} + +/* Checkboxes */ +QCheckBox { + +} + +QCheckBox::indicator, +QGroupBox::indicator { + width: 18px; + height: 18px; +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked { + image: url(./Catppuccin/Dark/checkbox_unchecked.svg); +} + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_unchecked_focus.svg); +} + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked { + image: url(./Catppuccin/Dark/checkbox_checked.svg); +} + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover { + border: none; + image: url(./Catppuccin/Dark/checkbox_checked_focus.svg); +} + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/checkbox_checked_disabled.svg); +} + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/checkbox_unchecked_disabled.svg); +} + +/* Locked CheckBox */ + +LockedCheckBox { + outline: none; + background: transparent; +} + +LockedCheckBox::indicator { + width: 16px; + height: 16px; +} + +LockedCheckBox::indicator:checked, +LockedCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/locked.svg); +} + +LockedCheckBox::indicator:unchecked, +LockedCheckBox::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +VisibilityCheckBox { + outline: none; + background: transparent; +} + +VisibilityCheckBox::indicator { + width: 16px; + height: 16px; +} + +VisibilityCheckBox::indicator:checked, +VisibilityCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/visible.svg); +} + +VisibilityCheckBox::indicator:unchecked, +VisibilityCheckBox::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +* [themeID="revertIcon"] { + qproperty-icon: url(./Catppuccin/Dark/revert.svg); +} + +QPushButton#extraPanelDelete { + background-color: palette(mid); + margin: 0; + padding: 0; +} + +QPushButton#extraPanelDelete:hover { + background-color: rgb(69, 71, 90); +} + +QPushButton#extraPanelDelete:pressed { + background-color: palette(dark); +} + +/* Mute CheckBox */ + +MuteCheckBox { + outline: none; +} + +MuteCheckBox::indicator { + width: 16px; + height: 16px; +} + +MuteCheckBox::indicator:checked { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:unchecked:focus { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +MuteCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:focus { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:checked:disabled { + image: url(./Catppuccin/Dark/mute.svg); +} + +MuteCheckBox::indicator:unchecked:disabled { + image: url(./Catppuccin/Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyLabel[hotkeyPairHover=true] { + color: rgb(137, 180, 250); +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: 4px 4px; + margin-top: 0px; + margin-left: 4px; +} + + +/* Sources List Group Collapse Checkbox */ + +SourceTreeSubItemCheckBox { + background: transparent; + outline: none; + padding: 0px; +} + +SourceTreeSubItemCheckBox::indicator { + width: 12px; + height: 12px; +} + +SourceTreeSubItemCheckBox::indicator:checked, +SourceTreeSubItemCheckBox::indicator:checked:hover { + image: url(./Catppuccin/Dark/expand.svg); +} + +SourceTreeSubItemCheckBox::indicator:unchecked, +SourceTreeSubItemCheckBox::indicator:unchecked:hover { + image: url(./Catppuccin/Dark/collapse.svg); +} + +/* Source Icons */ + +OBSBasic { + qproperty-imageIcon: url(./Catppuccin/Dark/sources/image.svg); + qproperty-colorIcon: url(./Catppuccin/Dark/sources/brush.svg); + qproperty-slideshowIcon: url(./Catppuccin/Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(./Catppuccin/Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(./Catppuccin/Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(./Catppuccin/Dark/settings/video.svg); + qproperty-windowCapIcon: url(./Catppuccin/Dark/sources/window.svg); + qproperty-gameCapIcon: url(./Catppuccin/Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(./Catppuccin/Dark/sources/camera.svg); + qproperty-textIcon: url(./Catppuccin/Dark/sources/text.svg); + qproperty-mediaIcon: url(./Catppuccin/Dark/sources/media.svg); + qproperty-browserIcon: url(./Catppuccin/Dark/sources/globe.svg); + qproperty-groupIcon: url(./Catppuccin/Dark/sources/group.svg); + qproperty-sceneIcon: url(./Catppuccin/Dark/sources/scene.svg); + qproperty-defaultIcon: url(./Catppuccin/Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(./Catppuccin/Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: 31; +} + +*[gridMode="true"] SceneTree::item { + color: palette(text); + background-color: palette(button); + border-radius: 4px; + margin: 2px; +} + +*[gridMode="true"] SceneTree::item:selected { + background-color: rgb(69, 71, 90); +} + +*[gridMode="true"] SceneTree::item:checked { + background-color: rgb(69, 71, 90); +} + +*[gridMode="true"] SceneTree::item:hover { + background-color: rgb(69, 71, 90); +} + +/* Save icon */ + +* [themeID="replayIconSmall"] { + qproperty-icon: url(./Catppuccin/Dark/save.svg); +} + +/* Studio Mode T-Bar */ + +QSlider[themeID="tBarSlider"] { + height: 24px; +} + +QSlider::groove:horizontal[themeID="tBarSlider"] { + border: 1px solid #45475a; + height: 5px; + background: palette(dark); +} + +QSlider::sub-page:horizontal[themeID="tBarSlider"] { + background: palette(dark); + border: 1px solid #45475a; +} + +QSlider::handle:horizontal[themeID="tBarSlider"] { + background-color: #bac2de; + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* Media icons */ + +* [themeID="playIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_play.svg); +} + +* [themeID="pauseIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_pause.svg); +} + +* [themeID="restartIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_restart.svg); +} + +* [themeID="stopIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_stop.svg); +} + +* [themeID="nextIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_next.svg); +} + +* [themeID="previousIcon"] { + qproperty-icon: url(./Catppuccin/Dark/media/media_previous.svg); +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(./Catppuccin/Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: palette(text); + background-color: rgb(49, 50, 68); + border: none; + border-radius: 4px; + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: rgb(69, 71, 90); +} + +#ytEventList QLabel[isSelectedEvent=true] { + background-color: rgb(69, 71, 90); + border: none; +} + +#ytEventList QLabel[isSelectedEvent=true]:hover { + background-color: rgb(137, 180, 250); + color: palette(text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(./Catppuccin/Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: palette(mid); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: palette(base); + padding: 4px 8px; +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: palette(base); + padding: 2px 16px; + border-radius: 4px; + margin: 2px; +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(./Catppuccin/Dark/down.svg); + subcontrol-position: right; + padding-top: 2px; + padding-right: 6px; + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/left.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: 2px; + qproperty-icon: url(./Catppuccin/Dark/right.svg); + icon-size: 16px, 16px; +} + +QCalendarWidget QToolButton:hover { + background-color: rgb(69, 71, 90); + border-radius: 4px; +} + +QCalendarWidget QToolButton:pressed { + background-color: rgb(17, 17, 27); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu { + +} +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: rgb(17, 17, 27); + border: none; + border-radius: 4px; + margin: 0px 3px 0px 0px; + padding: 4px 16px; +} + +QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; } +QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;} +QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; } +QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; } + +/* Days of the Week Bar */ +QCalendarWidget QWidget { alternate-background-color: palette(mid); } + +QCalendarWidget QAbstractItemView:enabled { + background-color: palette(base); + color: palette(text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: rgb(122,121,122); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: palette(dark); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: palette(dark); +} diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/alert.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/alert.svg new file mode 100755 index 0000000..30d6ea8 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/alert.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked.svg new file mode 100755 index 0000000..6448ba9 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked_disabled.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked_disabled.svg new file mode 100755 index 0000000..ece5841 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked_disabled.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked_focus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked_focus.svg new file mode 100755 index 0000000..ff1f0c7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_checked_focus.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked.svg new file mode 100755 index 0000000..7b3f10b --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked_disabled.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked_disabled.svg new file mode 100755 index 0000000..104f8b5 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked_disabled.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked_focus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked_focus.svg new file mode 100755 index 0000000..66f3f15 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/checkbox_unchecked_focus.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/close.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/close.svg new file mode 100755 index 0000000..2a10db8 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/cogs.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/cogs.svg new file mode 100755 index 0000000..3a013db --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/cogs.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/collapse.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/collapse.svg new file mode 100755 index 0000000..edd2ae0 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/collapse.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/dots-vert.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/dots-vert.svg new file mode 100755 index 0000000..ae702ad --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/dots-vert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/dots.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/dots.svg new file mode 100755 index 0000000..41dd93e --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/dots.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/down.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/down.svg new file mode 100755 index 0000000..b475714 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/entry-clear.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/entry-clear.svg new file mode 100755 index 0000000..d302984 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/entry-clear.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/expand.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/expand.svg new file mode 100755 index 0000000..a1afddf --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/expand.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/filter.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/filter.svg new file mode 100755 index 0000000..0038a76 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/filter.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/interact.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/interact.svg new file mode 100755 index 0000000..b1dc53f --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/interact.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/left.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/left.svg new file mode 100755 index 0000000..469481f --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/locked.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/locked.svg new file mode 100755 index 0000000..1678500 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/locked.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media-pause.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media-pause.svg new file mode 100755 index 0000000..2743bc4 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media-pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_next.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_next.svg new file mode 100755 index 0000000..db82996 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_next.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_pause.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_pause.svg new file mode 100755 index 0000000..2743bc4 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_play.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_play.svg new file mode 100755 index 0000000..cb08f84 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_play.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_previous.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_previous.svg new file mode 100755 index 0000000..15c3342 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_previous.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_restart.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_restart.svg new file mode 100755 index 0000000..be65361 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_restart.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_stop.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_stop.svg new file mode 100755 index 0000000..caa1f2d --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/media/media_stop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/minus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/minus.svg new file mode 100755 index 0000000..73df860 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/minus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/mute.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/mute.svg new file mode 100755 index 0000000..9a63c7e --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/mute.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/no_sources.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/no_sources.svg new file mode 100755 index 0000000..3c7bd7c --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/no_sources.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/plus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/plus.svg new file mode 100755 index 0000000..4bf3192 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/popout.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/popout.svg new file mode 100755 index 0000000..afba03a --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/popout.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/refresh.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/refresh.svg new file mode 100755 index 0000000..5549e68 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/refresh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/revert.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/revert.svg new file mode 100755 index 0000000..3f7b985 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/revert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/right.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/right.svg new file mode 100755 index 0000000..cb03edf --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/save.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/save.svg new file mode 100755 index 0000000..52d0464 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/save.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/accessibility.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/accessibility.svg new file mode 100755 index 0000000..f81e046 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/accessibility.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/advanced.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/advanced.svg new file mode 100755 index 0000000..4e20a9a --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/advanced.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/audio.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/audio.svg new file mode 100755 index 0000000..5470659 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/general.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/general.svg new file mode 100755 index 0000000..78511bb --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/general.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/hotkeys.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/hotkeys.svg new file mode 100755 index 0000000..f86f15e --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/hotkeys.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/output.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/output.svg new file mode 100755 index 0000000..6f064d7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/output.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/stream.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/stream.svg new file mode 100755 index 0000000..f764787 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/stream.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/video.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/video.svg new file mode 100755 index 0000000..ae0076b --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/settings/video.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/brush.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/brush.svg new file mode 100755 index 0000000..a975657 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/brush.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/camera.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/camera.svg new file mode 100755 index 0000000..1903979 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/camera.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/default.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/default.svg new file mode 100755 index 0000000..cc505c8 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/gamepad.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/gamepad.svg new file mode 100755 index 0000000..a78be69 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/gamepad.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/globe.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/globe.svg new file mode 100755 index 0000000..809552c --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/globe.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/group.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/group.svg new file mode 100755 index 0000000..43c48b7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/group.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/image.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/image.svg new file mode 100755 index 0000000..0e35684 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/image.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/media.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/media.svg new file mode 100755 index 0000000..cb08f84 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/media.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/microphone.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/microphone.svg new file mode 100755 index 0000000..4c6259e --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/microphone.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/scene.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/scene.svg new file mode 100755 index 0000000..faab772 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/scene.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/slideshow.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/slideshow.svg new file mode 100755 index 0000000..d5b9245 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/slideshow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/text.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/text.svg new file mode 100755 index 0000000..e4c86f9 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/text.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/window.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/window.svg new file mode 100755 index 0000000..1798d1f --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/window.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/windowaudio.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/windowaudio.svg new file mode 100755 index 0000000..a5d9712 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/sources/windowaudio.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/trash.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/trash.svg new file mode 100755 index 0000000..0e4c408 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/trash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/up.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/up.svg new file mode 100755 index 0000000..53d8e75 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/updown.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/updown.svg new file mode 100755 index 0000000..0e94483 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/updown.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Dark/visible.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/visible.svg new file mode 100755 index 0000000..d4ff003 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Dark/visible.svg @@ -0,0 +1,2 @@ + +image/svg+xmlGnome Symbolic Icon ThemeGnome Symbolic Icon Theme diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/alert.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/alert.svg new file mode 100755 index 0000000..1205be7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/alert.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked.svg new file mode 100755 index 0000000..456dc07 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked_disabled.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked_disabled.svg new file mode 100755 index 0000000..725b794 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked_disabled.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked_focus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked_focus.svg new file mode 100755 index 0000000..86bb686 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_checked_focus.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked.svg new file mode 100755 index 0000000..9f90d3a --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked_disabled.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked_disabled.svg new file mode 100755 index 0000000..9494782 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked_disabled.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked_focus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked_focus.svg new file mode 100755 index 0000000..8d8870c --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/checkbox_unchecked_focus.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/close.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/close.svg new file mode 100755 index 0000000..ad7aecd --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/cogs.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/cogs.svg new file mode 100755 index 0000000..b5b4102 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/cogs.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/collapse.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/collapse.svg new file mode 100755 index 0000000..325cd64 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/collapse.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/dots-vert.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/dots-vert.svg new file mode 100755 index 0000000..3ae2e00 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/dots-vert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/dots.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/dots.svg new file mode 100755 index 0000000..bf2b902 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/dots.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/down.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/down.svg new file mode 100755 index 0000000..d62efa4 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/entry-clear.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/entry-clear.svg new file mode 100755 index 0000000..43c9deb --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/entry-clear.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/expand.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/expand.svg new file mode 100755 index 0000000..8b4837a --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/expand.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/filter.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/filter.svg new file mode 100755 index 0000000..ed6de81 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/filter.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/interact.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/interact.svg new file mode 100755 index 0000000..806b0a0 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/interact.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/left.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/left.svg new file mode 100755 index 0000000..4bd2ec8 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/locked.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/locked.svg new file mode 100755 index 0000000..a30bc94 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/locked.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media-pause.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media-pause.svg new file mode 100755 index 0000000..54f9df4 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media-pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_next.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_next.svg new file mode 100755 index 0000000..5e92672 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_next.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_pause.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_pause.svg new file mode 100755 index 0000000..54f9df4 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_pause.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_play.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_play.svg new file mode 100755 index 0000000..6664825 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_play.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_previous.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_previous.svg new file mode 100755 index 0000000..8727f49 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_previous.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_restart.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_restart.svg new file mode 100755 index 0000000..b876112 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_restart.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_stop.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_stop.svg new file mode 100755 index 0000000..f79552d --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/media/media_stop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/minus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/minus.svg new file mode 100755 index 0000000..d5369ac --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/minus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/mute.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/mute.svg new file mode 100755 index 0000000..9a63c7e --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/mute.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/no_sources.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/no_sources.svg new file mode 100755 index 0000000..154fcbd --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/no_sources.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/plus.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/plus.svg new file mode 100755 index 0000000..149e6d0 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/popout.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/popout.svg new file mode 100755 index 0000000..afba03a --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/popout.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/refresh.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/refresh.svg new file mode 100755 index 0000000..4871cb4 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/refresh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/revert.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/revert.svg new file mode 100755 index 0000000..2d0aa4c --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/revert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/right.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/right.svg new file mode 100755 index 0000000..246a3ab --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/save.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/save.svg new file mode 100755 index 0000000..4a05c05 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/save.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/accessibility.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/accessibility.svg new file mode 100755 index 0000000..1d884bc --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/accessibility.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/advanced.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/advanced.svg new file mode 100755 index 0000000..8e2d843 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/advanced.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/audio.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/audio.svg new file mode 100755 index 0000000..13f201d --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/general.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/general.svg new file mode 100755 index 0000000..52a5d7f --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/general.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/hotkeys.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/hotkeys.svg new file mode 100755 index 0000000..d04531f --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/hotkeys.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/output.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/output.svg new file mode 100755 index 0000000..3ab573c --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/output.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/stream.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/stream.svg new file mode 100755 index 0000000..85f0145 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/stream.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/video.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/video.svg new file mode 100755 index 0000000..1bad561 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/settings/video.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/brush.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/brush.svg new file mode 100755 index 0000000..077e070 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/brush.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/camera.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/camera.svg new file mode 100755 index 0000000..be12c1b --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/camera.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/default.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/default.svg new file mode 100755 index 0000000..c3d9db0 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/gamepad.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/gamepad.svg new file mode 100755 index 0000000..d668a16 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/gamepad.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/globe.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/globe.svg new file mode 100755 index 0000000..5a753c2 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/globe.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/group.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/group.svg new file mode 100755 index 0000000..99af8d3 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/group.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/image.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/image.svg new file mode 100755 index 0000000..4f99a8c --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/image.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/media.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/media.svg new file mode 100755 index 0000000..6664825 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/media.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/microphone.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/microphone.svg new file mode 100755 index 0000000..b3caeb0 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/microphone.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/scene.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/scene.svg new file mode 100755 index 0000000..c2fc500 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/scene.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/slideshow.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/slideshow.svg new file mode 100755 index 0000000..cf30442 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/slideshow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/text.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/text.svg new file mode 100755 index 0000000..6bacd74 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/text.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/window.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/window.svg new file mode 100755 index 0000000..2f4659a --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/window.svg @@ -0,0 +1,2 @@ + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/windowaudio.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/windowaudio.svg new file mode 100755 index 0000000..2bbf780 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/sources/windowaudio.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/trash.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/trash.svg new file mode 100755 index 0000000..86eeda7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/trash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/up.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/up.svg new file mode 100755 index 0000000..67ccd46 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/updown.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/updown.svg new file mode 100755 index 0000000..3c33fd7 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/updown.svg @@ -0,0 +1 @@ + diff --git a/home-manager/modules/obs-studio/themes/Catppuccin/Light/visible.svg b/home-manager/modules/obs-studio/themes/Catppuccin/Light/visible.svg new file mode 100755 index 0000000..fafc408 --- /dev/null +++ b/home-manager/modules/obs-studio/themes/Catppuccin/Light/visible.svg @@ -0,0 +1,2 @@ + +image/svg+xmlGnome Symbolic Icon ThemeGnome Symbolic Icon Theme diff --git a/home-manager/modules/qbittorrent/default.nix b/home-manager/modules/qbittorrent/default.nix new file mode 100755 index 0000000..e995cfb --- /dev/null +++ b/home-manager/modules/qbittorrent/default.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + qbittorrent + ; + }; +} diff --git a/home-manager/modules/qbittorrent/macchiato.qbtheme b/home-manager/modules/qbittorrent/macchiato.qbtheme new file mode 100755 index 0000000..025da94 Binary files /dev/null and b/home-manager/modules/qbittorrent/macchiato.qbtheme differ diff --git a/home-manager/modules/starship.nix b/home-manager/modules/starship.nix new file mode 100755 index 0000000..15dae43 --- /dev/null +++ b/home-manager/modules/starship.nix @@ -0,0 +1,12 @@ +{ + programs.starship = { + enable = true; + settings = { + add_newline = false; + character = { + success_symbol = "[ ➜](bold #8bd5ca)"; + error_symbol = "[ ¬◇](bold #ee99a0)"; + }; + }; + }; +} diff --git a/home-manager/modules/vesktop/default.nix b/home-manager/modules/vesktop/default.nix new file mode 100755 index 0000000..d3899c7 --- /dev/null +++ b/home-manager/modules/vesktop/default.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + home.packages = builtins.attrValues { + inherit + (pkgs) + vesktop + ; + }; + xdg.configFile."vesktop/themes/macchiato.theme.css".source = ./macchiato.theme.css; +} diff --git a/home-manager/modules/vesktop/macchiato.theme.css b/home-manager/modules/vesktop/macchiato.theme.css new file mode 100755 index 0000000..aefbc03 --- /dev/null +++ b/home-manager/modules/vesktop/macchiato.theme.css @@ -0,0 +1,11 @@ +/** + * @name Catppuccin Macchiato + * @author winston#0001 + * @authorId 505490445468696576 + * @version 0.2.0 + * @description 🎮 Soothing pastel theme for Discord + * @website https://github.com/catppuccin/discord + * @invite r6Mdz5dpFc + * **/ + + @import url("https://catppuccin.github.io/discord/dist/catppuccin-macchiato.theme.css"); \ No newline at end of file diff --git a/home-manager/modules/vscode.nix b/home-manager/modules/vscode.nix new file mode 100755 index 0000000..3e95033 --- /dev/null +++ b/home-manager/modules/vscode.nix @@ -0,0 +1,48 @@ +{ + pkgs, + lib, + ... +}: { + programs = { + vscode = { + enable = true; + package = pkgs.vscode; + # keybindings = [ + # { + # key = "ctrl+c"; + # command = "editor.action.clipboardCopyAction"; + # when = "textInputFocus"; + # } + # ]; + extensions = with pkgs.vscode-extensions; [ + eamodio.gitlens + catppuccin.catppuccin-vsc + james-yu.latex-workshop + jnoortheen.nix-ide + kamadorueda.alejandra + mkhl.direnv + pkief.material-icon-theme + streetsidesoftware.code-spell-checker + tamasfe.even-better-toml + esbenp.prettier-vscode + mattn.lisp + haskell.haskell + ]; + userSettings = { + "git.confirmSync" = false; + "editor.insertSpaces" = false; + "files.autoSave" = "afterDelay"; + "git.enableSmartCommit" = true; + "nix.enableLanguageServer" = true; + "nix.serverPath" = lib.getExe pkgs.nil; + "nix.formatterPath" = lib.getExe pkgs.alejandra; + "window.menuBarVisibility" = "toggle"; + "workbench.iconTheme" = "material-icon-theme"; + "workbench.startupEditor" = "none"; + "workbench.colorTheme" = "Catppuccin Mocha"; + "workbench.statusBar.visible" = false; + "editor.multiCursorLimit" = 700000; + }; + }; + }; +} diff --git a/home-manager/modules/wezterm.nix b/home-manager/modules/wezterm.nix new file mode 100755 index 0000000..e3aaf58 --- /dev/null +++ b/home-manager/modules/wezterm.nix @@ -0,0 +1,16 @@ +{ + programs.wezterm = { + enable = true; + extraConfig = '' + return { + color_scheme = "Catppuccin Macchiato", + font_size = 10, + enable_tab_bar = false, + window_close_confirmation = 'NeverPrompt', + term = 'wezterm', + enable_wayland = false, + front_end = "WebGpu" + } + ''; + }; +} diff --git a/home-manager/modules/yazi.nix b/home-manager/modules/yazi.nix new file mode 100755 index 0000000..0f17dad --- /dev/null +++ b/home-manager/modules/yazi.nix @@ -0,0 +1,112 @@ +{ + programs.yazi = { + enable = true; + enableNushellIntegration = true; + keymap.manager.prepend_keymap = [ + { + exec = "quit"; + on = ["Q"]; + } + { + exec = "quit --no-cwd-file"; + on = ["q"]; + } + ]; + + settings = { + log = { + enabled = false; + }; + manager = { + show_hidden = true; + sort_by = "alphabetical"; + sort_dir_first = true; + sort_reverse = false; + }; + preview = { + tab_size = 2; + max_width = 1500; + max_height = 1000; + }; + opener = { + reveal = [ + { + exec = "exiftool \"$1\" | $PAGER"; + block = true; + desc = "Show EXIF"; + for = "unix"; + } + ]; + open = [ + { + exec = "nomacs \"$@\""; + desc = "Nomacs"; + orphan = true; + for = "unix"; + } + { + exec = "code \"$@\""; + desc = "VSCode"; + orphan = true; + for = "unix"; + } + { + exec = "firefox \"$@\""; + desc = "Firefox"; + orphan = true; + for = "unix"; + } + { + exec = "krita \"$@\""; + desc = "Krita"; + orphan = true; + for = "unix"; + } + ]; + edit = [ + { + exec = "wezterm -e hx \"$@\""; + desc = "Helix"; + orphan = true; + for = "unix"; + } + { + exec = "code \"$@\""; + desc = "VSCode"; + orphan = true; + for = "unix"; + } + { + exec = "tokei \"$1\" | $PAGER"; + block = true; + desc = "Count Lines"; + for = "unix"; + } + ]; + play = [ + { + exec = "celluloid \"$@\""; + desc = "MPV"; + orphan = true; + for = "unix"; + } + { + exec = "vlc \"$@\""; + desc = "VLC"; + orphan = true; + for = "unix"; + } + { + exec = "mediainfo \"$1\" | $PAGER"; + block = true; + desc = "Media Info"; + for = "unix"; + } + ]; + }; + }; + }; +} +# Keymap +# https://github.com/sxyazi/yazi/blob/main/yazi-config/preset/keymap.toml + diff --git a/home-manager/modules/zellij.nix b/home-manager/modules/zellij.nix new file mode 100755 index 0000000..18001b7 --- /dev/null +++ b/home-manager/modules/zellij.nix @@ -0,0 +1,6 @@ +{ + programs.zellij = { + enable = true; + settings.theme = "catppuccin-macchiato"; + }; +} diff --git a/home-manager/modules/zoxide.nix b/home-manager/modules/zoxide.nix new file mode 100755 index 0000000..a9acb0d --- /dev/null +++ b/home-manager/modules/zoxide.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + programs.zoxide = { + enable = true; + enableNushellIntegration = true; + package = pkgs.zoxide; + options = [ + ]; + }; +} diff --git a/lib/default.nix b/lib/default.nix new file mode 100755 index 0000000..5e3fe5e --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,29 @@ +{ + config, + inputs, + self, + ... +}: { + flake.lib = { + mkHome = modules: system: + inputs.home-manager.lib.homeManagerConfiguration { + pkgs = import inputs.nixpkgs { + inherit system; + config.allowUnfree = true; + }; + extraSpecialArgs = { + inherit inputs; + }; + inherit modules; + }; + mkLinuxSystem = modules: + inputs.nixpkgs.lib.nixosSystem { + specialArgs = { + flake = { + inherit config inputs self; + }; + }; + inherit modules; + }; + }; +} diff --git a/nixos/default.nix b/nixos/default.nix new file mode 100755 index 0000000..b1d76a3 --- /dev/null +++ b/nixos/default.nix @@ -0,0 +1,110 @@ +let + # Folders + steam = import ./modules/steam; + services = import ./modules/services; + # Files + accounts = import ./modules/accounts.nix; + android = import ./modules/android.nix; + audio = import ./modules/audio.nix; + bluetooth = import ./modules/bluetooth.nix; + corectrl = import ./modules/corectrl.nix; + dconf = import ./modules/dconf.nix; + disks = import ./modules/disks.nix; + doas = import ./modules/doas.nix; + environment = import ./modules/environment.nix; + firejail = import ./modules/firejail.nix; + fonts = import ./modules/fonts.nix; + gnome = import ./modules/gnome.nix; + greetd = import ./modules/greetd.nix; + gvfs = import ./modules/gvfs.nix; + home-manager = import ./modules/home-manager.nix; + locale = import ./modules/locale.nix; + network = import ./modules/network.nix; + nix = import ./modules/nix.nix; + ollama-main = import ./modules/ollama-main.nix; + plasma = import ./modules/plasma.nix; + printing = import ./modules/printing.nix; + regreet = import ./modules/regreet.nix; + syncthing = import ./modules/syncthing.nix; + sysstat = import ./modules/sysstat.nix; + system = import ./modules/system.nix; + virtualization = import ./modules/virtualization.nix; + xserver = import ./modules/xserver.nix; +in { + flake = { + nixosModules = { + inherit + accounts + android + audio + bluetooth + corectrl + dconf + disks + doas + environment + firejail + fonts + gnome + greetd + gvfs + home-manager + locale + network + nix + ollama-main + plasma + printing + regreet + services + steam + syncthing + sysstat + system + virtualization + xserver + ; + personal = { + imports = [ + android + audio + bluetooth + corectrl + dconf + disks + firejail + fonts + plasma + printing + steam + sysstat + virtualization + ]; + }; + desktop = { + imports = [ + syncthing + ollama-main + ]; + }; + server = { + imports = [ + services + ]; + }; + shared = { + imports = [ + accounts + doas + environment + gvfs + home-manager + locale + nix + system + xserver + ]; + }; + }; + }; +} diff --git a/nixos/modules/accounts.nix b/nixos/modules/accounts.nix new file mode 100755 index 0000000..289b946 --- /dev/null +++ b/nixos/modules/accounts.nix @@ -0,0 +1,3 @@ +{ + services.accounts-daemon.enable = true; +} diff --git a/nixos/modules/android.nix b/nixos/modules/android.nix new file mode 100755 index 0000000..4c6ee67 --- /dev/null +++ b/nixos/modules/android.nix @@ -0,0 +1,6 @@ +{pkgs, ...}: { + programs.adb.enable = true; + services.udev.packages = [ + pkgs.android-udev-rules + ]; +} diff --git a/nixos/modules/audio.nix b/nixos/modules/audio.nix new file mode 100755 index 0000000..ed61b00 --- /dev/null +++ b/nixos/modules/audio.nix @@ -0,0 +1,13 @@ +{ + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services = { + pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + }; +} diff --git a/nixos/modules/bluetooth.nix b/nixos/modules/bluetooth.nix new file mode 100755 index 0000000..8370a9d --- /dev/null +++ b/nixos/modules/bluetooth.nix @@ -0,0 +1,11 @@ +{pkgs, ...}: { + hardware = { + bluetooth = { + enable = true; + package = pkgs.bluez; + powerOnBoot = true; + settings = {General = {Experimental = true;};}; + disabledPlugins = ["sap"]; + }; + }; +} diff --git a/nixos/modules/corectrl.nix b/nixos/modules/corectrl.nix new file mode 100755 index 0000000..6150119 --- /dev/null +++ b/nixos/modules/corectrl.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + programs.corectrl = { + enable = true; + package = pkgs.corectrl; + gpuOverclock = { + enable = true; + ppfeaturemask = "0xffffffff"; + }; + }; +} diff --git a/nixos/modules/dconf.nix b/nixos/modules/dconf.nix new file mode 100755 index 0000000..5424db3 --- /dev/null +++ b/nixos/modules/dconf.nix @@ -0,0 +1,3 @@ +{ + programs.dconf.enable = true; +} diff --git a/nixos/modules/disks.nix b/nixos/modules/disks.nix new file mode 100755 index 0000000..4f0eb47 --- /dev/null +++ b/nixos/modules/disks.nix @@ -0,0 +1,4 @@ +{ + programs.gnome-disks.enable = true; + services.udisks2.enable = true; +} diff --git a/nixos/modules/doas.nix b/nixos/modules/doas.nix new file mode 100755 index 0000000..2699b02 --- /dev/null +++ b/nixos/modules/doas.nix @@ -0,0 +1,15 @@ +{flake, ...}: { + security = { + doas = { + enable = true; + extraRules = [ + { + keepEnv = true; + noPass = true; + users = [flake.config.people.user0]; + } + ]; + }; + # sudo.enable = false; + }; +} diff --git a/nixos/modules/environment.nix b/nixos/modules/environment.nix new file mode 100755 index 0000000..2d9d0a5 --- /dev/null +++ b/nixos/modules/environment.nix @@ -0,0 +1,23 @@ +{pkgs, ...}: { + environment = { + # enableAllTerminfo = true; + systemPackages = builtins.attrValues { + inherit + (pkgs) + git + pijul + sshfs + tomb + virt-manager + ; + }; + variables = { + VIDEO_PLAYER = "vlc"; + EDITOR = "nano"; + WLR_NO_HARDWARE_CURSORS = "1"; + WLR_DRM_NO_ATOMIC = "1"; + NIXPKGS_ALLOW_INSECURE = "1"; + NIXPKGS_ALLOW_UNFREE = "1"; + }; + }; +} diff --git a/nixos/modules/firejail.nix b/nixos/modules/firejail.nix new file mode 100755 index 0000000..fd95580 --- /dev/null +++ b/nixos/modules/firejail.nix @@ -0,0 +1,3 @@ +{ + programs.firejail.enable = true; +} diff --git a/nixos/modules/fonts.nix b/nixos/modules/fonts.nix new file mode 100755 index 0000000..2f27aee --- /dev/null +++ b/nixos/modules/fonts.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + fonts = { + fontconfig.defaultFonts.emoji = ["Noto Fonts Color Emoji"]; + packages = with pkgs; [ + noto-fonts-color-emoji + open-dyslexic + ]; + }; +} diff --git a/nixos/modules/gnome.nix b/nixos/modules/gnome.nix new file mode 100755 index 0000000..134248c --- /dev/null +++ b/nixos/modules/gnome.nix @@ -0,0 +1,51 @@ +{pkgs, ...}: { + services = { + xserver = { + enable = true; + displayManager = { + gdm.enable = true; + gdm.wayland = true; + }; + desktopManager.gnome = { + enable = true; + }; + }; + gnome = { + games.enable = false; + gnome-online-accounts.enable = true; + }; + udev.packages = with pkgs; [ + gnome.gnome-settings-daemon + ]; + }; + environment = { + variables = { + # WEBKIT_FORCE_SANDBOX = "0"; + # WEBKIT_DISABLE_COMPOSITING_MODE = "1"; + }; + gnome.excludePackages = + (with pkgs; [ + gnome-photos + gnome-tour + epiphany # web browser + cheese # webcam tool + geary # email reader + evince # document viewer + totem # video player + yelp # help viewer + gnome-calendar + ]) + ++ (with pkgs.gnome; [ + gnome-music + tali # poker game + iagno # go game + hitori # sudoku game + atomix # puzzle game + gnome-clocks + gnome-weather + gnome-maps + gnome-contacts + gnome-characters + ]); + }; +} diff --git a/nixos/modules/gvfs.nix b/nixos/modules/gvfs.nix new file mode 100755 index 0000000..b045ed2 --- /dev/null +++ b/nixos/modules/gvfs.nix @@ -0,0 +1,3 @@ +{ + services.gvfs.enable = true; +} diff --git a/nixos/modules/home-manager.nix b/nixos/modules/home-manager.nix new file mode 100755 index 0000000..ddb8d9e --- /dev/null +++ b/nixos/modules/home-manager.nix @@ -0,0 +1,15 @@ +{ + flake, + config, + ... +}: { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + extraSpecialArgs = { + inherit flake; + inherit (config) nur; + }; + }; +} diff --git a/nixos/modules/locale.nix b/nixos/modules/locale.nix new file mode 100755 index 0000000..349eb2e --- /dev/null +++ b/nixos/modules/locale.nix @@ -0,0 +1,30 @@ +{ + time.timeZone = "America/Winnipeg"; + + i18n = let + locale = "en_US.UTF-8"; + extraSettings = [ + "LC_ADDRESS" + "LC_IDENTIFICATION" + "LC_MEASUREMENT" + "LC_MONETARY" + "LC_NAME" + "LC_NUMERIC" + "LC_PAPER" + "LC_TELEPHONE" + "LC_TIME" + ]; + in { + defaultLocale = locale; + + extraLocaleSettings = builtins.listToAttrs ( + map ( + option: { + name = option; + value = locale; + } + ) + extraSettings + ); + }; +} diff --git a/nixos/modules/network.nix b/nixos/modules/network.nix new file mode 100755 index 0000000..e3960dd --- /dev/null +++ b/nixos/modules/network.nix @@ -0,0 +1,3 @@ +{ + programs.nm-applet.enable = true; +} diff --git a/nixos/modules/nix.nix b/nixos/modules/nix.nix new file mode 100755 index 0000000..78493aa --- /dev/null +++ b/nixos/modules/nix.nix @@ -0,0 +1,23 @@ +{ + nixpkgs = { + config = { + allowUnfree = true; + permittedInsecurePackages = [ + "electron" + ]; + }; + }; + + nix = { + extraOptions = '' + experimental-features = nix-command flakes + keep-outputs = true + keep-derivations = true + ''; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 10d"; + }; + }; +} diff --git a/nixos/modules/ollama-main.nix b/nixos/modules/ollama-main.nix new file mode 100755 index 0000000..ce86be6 --- /dev/null +++ b/nixos/modules/ollama-main.nix @@ -0,0 +1,40 @@ +{flake, ...}: let + inherit (flake.config.system.device) wildcard; + inherit (flake.config.service.instance.ollama) paths ports name; + localhost = wildcard.ip.address0; +in { + services = { + ollama = { + acceleration = false; + enable = true; + group = name; + host = "http://${localhost}"; + models = paths.path1; + user = name; + }; + open-webui = { + enable = true; + host = localhost; + port = ports.port0; + environment = { + ENABLE_OLLAMA_API = "True"; + ANONYMIZED_TELEMETRY = "False"; + DO_NOT_TRACK = "True"; + SCARF_NO_ANALYTICS = "True"; + OLLAMA_BASE_URL = "http://${localhost}:${toString ports.port1}"; + WEBUI_AUTH = "True"; + }; + }; + }; + + systemd.tmpfiles.rules = ["Z ${paths.path1} 0755 ${name} ${name} -"]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ports.port1 + ]; + }; + }; +} diff --git a/nixos/modules/plasma.nix b/nixos/modules/plasma.nix new file mode 100755 index 0000000..2fe307b --- /dev/null +++ b/nixos/modules/plasma.nix @@ -0,0 +1,19 @@ +{pkgs, ...}: { + services = { + desktopManager.plasma6.enable = true; + displayManager = { + sddm = { + enable = true; + wayland.enable = true; + }; + }; + }; + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + plasma-browser-integration + konsole + kate + spectacle + kdeconnect-kde + khelpcenter + ]; +} diff --git a/nixos/modules/printing.nix b/nixos/modules/printing.nix new file mode 100755 index 0000000..61a5f3c --- /dev/null +++ b/nixos/modules/printing.nix @@ -0,0 +1,25 @@ +{ + hardware.printers = { + ensurePrinters = [ + { + name = "Canon-TR7620a"; + location = "Downstairs"; + deviceUri = "https://10.0.0.234"; + model = "drv:///sample.drv/generic.ppd"; + ppdOptions = { + PageSize = "Letter"; + }; + } + { + name = "Brother-HL-2170W"; + location = "Upstairs"; + deviceUri = "https://10.0.0.97"; + model = "drv:///sample.drv/generic.ppd"; + ppdOptions = { + PageSize = "Letter"; + }; + } + ]; + ensureDefaultPrinter = "Canon-TR7620a"; + }; +} diff --git a/nixos/modules/regreet.nix b/nixos/modules/regreet.nix new file mode 100755 index 0000000..8a84ab3 --- /dev/null +++ b/nixos/modules/regreet.nix @@ -0,0 +1,6 @@ +{pkgs, ...}: { + programs.regreet = { + enable = true; + package = pkgs.greetd.regreet; + }; +} diff --git a/nixos/modules/services/acme.nix b/nixos/modules/services/acme.nix new file mode 100755 index 0000000..ade27b3 --- /dev/null +++ b/nixos/modules/services/acme.nix @@ -0,0 +1,86 @@ +{ + config, + flake, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain email dns; + inherit (flake.config.service.instance.acme) paths; + inherit (flake.config.service) instance; + dnsConfig = { + dnsProvider = dns.provider0; + directory = paths.path0; + environmentFile = config.sops.secrets."dns/namecheap".path; + }; + + instanceName = service: (instance.${service}.subdomain); + + domain0Services = [ + "nextcloud" + "jellyfin" + "minecraft" + "ollama" + "syncthing" + "vaultwarden" + ]; + + domain1Services = [ + "nextcloud" + "castopod" + "forgejo" + "matrix" + "peertube" + "writefreely" + ]; + + domain0Sub = map instanceName domain0Services; + domain1Sub = map instanceName domain1Services; + + domainRoot = [ + domain.url0 + domain.url1 + ]; +in { + security.acme = { + acceptTerms = true; + defaults = { + email = email.address0; + server = "https://acme-v02.api.letsencrypt.org/directory"; + }; + certs = builtins.listToAttrs ( + (map (prefix: { + name = "${prefix}.${domain.url0}"; + value = dnsConfig; + }) + domain0Sub) + ++ (map (prefix: { + name = "${prefix}.${domain.url1}"; + value = dnsConfig; + }) + domain1Sub) + ++ (map (name: { + name = name; + value = dnsConfig; + }) + domainRoot) + ); + }; + + sops = let + sopsSecrets = ["pass"]; + sopsPath = secret: { + path = "/var/lib/secrets/${instance.acme.name}/${dns.provider0}-${secret}"; + owner = "root"; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "dns/${dns.provider0}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; +} diff --git a/nixos/modules/services/caddy.nix b/nixos/modules/services/caddy.nix new file mode 100755 index 0000000..ebf8809 --- /dev/null +++ b/nixos/modules/services/caddy.nix @@ -0,0 +1,28 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain; + inherit (flake.config.service.instance.caddy) ports; +in { + services.caddy = { + enable = true; + virtualHosts = { + "${domain.url0}" = { + extraConfig = '' + tls /var/lib/acme/${domain.url0}/fullchain.pem /var/lib/acme/${domain.url0}/key.pem + encode zstd gzip + ''; + }; + }; + }; + + users.users.caddy.extraGroups = ["acme" "nextcloud" "mastodon"]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ports.port1 + ]; + }; + }; +} diff --git a/nixos/modules/services/castopod.nix b/nixos/modules/services/castopod.nix new file mode 100755 index 0000000..ba119b8 --- /dev/null +++ b/nixos/modules/services/castopod.nix @@ -0,0 +1,102 @@ +{ + flake, + config, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain email; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance.castopod) paths ports subdomain name sops ssl; + inherit (flake.config.service.instance) nginx; + localhost = wildcard.ip.address0; + host = "${subdomain}.${domain.url1}"; +in { + services = { + castopod = { + enable = true; + localDomain = host; + configureNginx = false; + environmentFile = config.sops.secrets."${name}-smtp".path; + maxUploadSize = "1024M"; + database = { + createLocally = true; + # passwordFile = config.sops.secrets."${name}-database".path; + }; + poolSettings = { + pm = "dynamic"; + "pm.max_children" = "32"; + "pm.max_requests" = "500"; + "pm.max_spare_servers" = "4"; + "pm.min_spare_servers" = "2"; + "pm.start_servers" = "2"; + }; + settings = { + "email.fromEmail" = email.address6; + "email.protocol" = "smtp"; + "email.SMTPHost" = localhost; + "email.SMTPPort" = 587; + "email.SMTPUser" = "smtp.protonmail.ch"; + }; + }; + + nginx = { + enable = true; + virtualHosts = { + "${host}" = { + }; + }; + }; + + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString ports.port0} + + tls ${ssl.cert} ${ssl.key} + ''; + }; + }; + }; + }; + + sops = let + sopsSecrets = ["smtp" "database"]; + sopsPath = secret: { + path = "${sops.path0}/${name}-${secret}"; + owner = name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${name}-${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + fileSystems."/var/lib/${name}" = { + device = paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = [ + "Z ${paths.path0} 755 ${name} ${name} -" + "Z ${sops.path0} 755 ${name} ${name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + nginx.ports.port0 + ]; + }; + }; + users.groups.nginx = {}; +} diff --git a/nixos/modules/services/default.nix b/nixos/modules/services/default.nix new file mode 100755 index 0000000..d9f1fbe --- /dev/null +++ b/nixos/modules/services/default.nix @@ -0,0 +1,31 @@ +{ + imports = [ + # Folders + ./mastodon + # Files + ./acme.nix + ./caddy.nix + ./jellyfin.nix + ./logrotate.nix + ./minecraft.nix + ./ollama.nix + ./peertube.nix + ./postgresql.nix + ./samba.nix + ./vaultwarden.nix + + # These are all broken. + + # ./forgejo.nix + + # Partial Nginx configs make it nearly impossible to use alongside Caddy. 👇 + + # ./castopod.nix + + # The reverse proxy works, but something is cucked. + # Maybe the port, or some configuration thing. It's unclear. + # Might actually have to wait for the package to get uncucked. 👇 + + # ./nextcloud.nix + ]; +} diff --git a/nixos/modules/services/forgejo.nix b/nixos/modules/services/forgejo.nix new file mode 100755 index 0000000..e474afe --- /dev/null +++ b/nixos/modules/services/forgejo.nix @@ -0,0 +1,106 @@ +{ + flake, + config, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain email; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance.forgejo) paths ports name subdomain sops ssl; + localhost = wildcard.ip.address0; + host = "${subdomain}.${domain.url1}"; +in { + services = { + forgejo = { + enable = true; + database.type = "postgres"; + lfs.enable = true; + secrets = { + mailer.PASSWD = config.sops.secrets."${name}-smtp".path; + database.PASSWD = config.sops.secrets."${name}-database".path; + }; + dump = { + interval = "5:00"; + type = "zip"; + file = "forgejo-backup"; + enable = true; + }; + settings = { + server = { + DOMAIN = host; + ROOT_URL = "https://${host}/"; + HTTP_PORT = ports.port0; + }; + # If you need to start from scratch, don't forget to turn this off again + service.DISABLE_REGISTRATION = false; + actions = { + ENABLED = true; + DEFAULT_ACTIONS_URL = "github"; + }; + mirror = { + ENABLED = true; + }; + mailer = { + ENABLED = true; + SMTP_ADDR = "smtp.protonmail.ch"; + FROM = email.address5; + USER = email.address5; + PROTOCOL = "smtp+starttls"; + SMTP_PORT = 587; + SEND_AS_PLAIN_TEXT = true; + USE_CLIENT_CERT = false; + }; + }; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString ports.port0} + + tls ${ssl.cert} ${ssl.key} + ''; + }; + }; + }; + }; + sops = let + sopsSecrets = ["smtp" "database"]; + sopsPath = secret: { + path = "${sops.path0}/${name}-${secret}"; + owner = name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${name}-${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + fileSystems."/var/lib/${name}" = { + device = paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = [ + "Z ${paths.path0} 755 ${name} ${name} -" + "Z ${sops.path0} 755 ${name} ${name} -" + ]; + + users.users.${name}.extraGroups = ["caddy" "postgres"]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ]; + }; + }; +} diff --git a/nixos/modules/services/jellyfin.nix b/nixos/modules/services/jellyfin.nix new file mode 100755 index 0000000..cde3d12 --- /dev/null +++ b/nixos/modules/services/jellyfin.nix @@ -0,0 +1,68 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance.jellyfin) paths ports name subdomain ssl; + localhost = wildcard.ip.address0; + host = "${subdomain}.${domain.url0}"; +in { + services = { + jellyfin = { + enable = true; + openFirewall = true; + user = user0; + }; + jellyseerr = { + openFirewall = true; + enable = true; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + redir /.well-known/carddav /remote.php/dav/ 301 + redir /.well-known/caldav /remote.php/dav/ 301 + + reverse_proxy ${localhost}:${toString ports.port1} + + tls ${ssl.cert} ${ssl.key} + ''; + }; + }; + }; + }; + + fileSystems = let + settings = { + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + in { + "/var/lib/${name}" = + { + device = paths.path0; + } + // settings; + "/var/cache/${name}" = + { + device = "${paths.path0}/cache"; + } + // settings; + }; + + systemd.tmpfiles.rules = [ + "Z ${paths.path0} 0755 ${user0} ${name} -" + "Z ${paths.path0}/cache 0755 ${user0} ${name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ports.port1 + ports.port2 + ]; + }; + }; +} diff --git a/nixos/modules/services/logrotate.nix b/nixos/modules/services/logrotate.nix new file mode 100755 index 0000000..6cb4dce --- /dev/null +++ b/nixos/modules/services/logrotate.nix @@ -0,0 +1,3 @@ +{ + services.logrotate.enable = true; +} diff --git a/nixos/modules/services/mastodon/chars.patch b/nixos/modules/services/mastodon/chars.patch new file mode 100755 index 0000000..e48a993 --- /dev/null +++ b/nixos/modules/services/mastodon/chars.patch @@ -0,0 +1,34 @@ +diff --git a/app/javascript/mastodon/features/compose/components/compose_form.jsx b/app/javascript/mastodon/features/compose/components/compose_form.jsx +index 9222b2dc8..962310a28 100644 +--- a/app/javascript/mastodon/features/compose/components/compose_form.jsx ++++ b/app/javascript/mastodon/features/compose/components/compose_form.jsx +@@ -100,7 +100,7 @@ class ComposeForm extends ImmutablePureComponent { + const fulltext = this.getFulltextForCharacterCounting(); + const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0; + +- return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (isOnlyWhitespace && !anyMedia)); ++ return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 5000 || (isOnlyWhitespace && !anyMedia)); + }; + + handleSubmit = (e) => { +@@ -297,7 +297,7 @@ class ComposeForm extends ImmutablePureComponent { + + +
+- ++ +
+ + +diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb +index dc841ded3..9cb1ec94b 100644 +--- a/app/validators/status_length_validator.rb ++++ b/app/validators/status_length_validator.rb +@@ -1,7 +1,7 @@ + # frozen_string_literal: true + + class StatusLengthValidator < ActiveModel::Validator +- MAX_CHARS = 500 ++ MAX_CHARS = 5000 + URL_PLACEHOLDER_CHARS = 23 + URL_PLACEHOLDER = 'x' * 23 \ No newline at end of file diff --git a/nixos/modules/services/mastodon/default.nix b/nixos/modules/services/mastodon/default.nix new file mode 100755 index 0000000..8f57ea2 --- /dev/null +++ b/nixos/modules/services/mastodon/default.nix @@ -0,0 +1,186 @@ +{ + flake, + config, + pkgs, + lib, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain email; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance.mastodon) paths name sops ssl; + host = domain.url1; + localhost = wildcard.ip.address0; +in { + # If you need to start fresh for some reason, run these to create the new Admin account: + # sudo -u mastodon mastodon-tootctl accounts create nick --email=nick@localhost --confirmed --role=Owner + # sudo -u mastodon mastodon-tootctl accounts approve nick + + # If you fuck up and lose the password, use this: + # sudo mastodon-tootctl accounts modify --reset-password nick + + # If you really fuck up and name yourself wrong, use this shit + # sudo mastodon-tootctl accounts modify username --remove-role + + nixpkgs.overlays = [ + ( + final: prev: { + mastodon = prev.mastodon.overrideAttrs (oldAttrs: { + postPatch = + (oldAttrs.postPatch or "") + + '' + patch -p1 < ${./chars.patch} + ''; + }); + } + ) + ]; + + services = { + mastodon = { + enable = true; + localDomain = host; + secretKeyBaseFile = "/var/lib/mastodon/secrets/secret-key-base"; + streamingProcesses = 7; + trustedProxy = localhost; + automaticMigrations = true; + database = { + createLocally = true; + name = name; + host = "/run/postgresql"; + user = name; + passwordFile = config.sops.secrets.mastodon-database.path; + }; + extraConfig = { + SINGLE_USER_MODE = "true"; + SMTP_AUTH_METHOD = "plain"; + SMTP_DELIVERY_METHOD = "smtp"; + SMTP_ENABLE_STARTTLS_AUTO = "true"; + SMTP_SSL = "false"; + }; + mediaAutoRemove = { + enable = true; + olderThanDays = 14; + }; + redis = { + createLocally = true; + enableUnixSocket = true; + }; + sidekiqThreads = 25; + sidekiqProcesses = { + all = { + jobClasses = []; + threads = null; + }; + default = { + jobClasses = ["default"]; + threads = 5; + }; + ingress = { + jobClasses = ["ingress"]; + threads = 5; + }; + push-pull = { + jobClasses = ["push" "pull"]; + threads = 5; + }; + mailers = { + jobClasses = ["mailers"]; + threads = 5; + }; + }; + smtp = { + authenticate = true; + createLocally = false; + fromAddress = "The Nutrivore <${email.address2}>"; + host = "smtp.protonmail.ch"; + passwordFile = config.sops.secrets.mastodon-smtp.path; + port = 587; + user = email.address2; + }; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + handle_path /system/* { + file_server * { + root /var/lib/mastodon/public-system + } + } + + handle /api/v1/streaming/* { + reverse_proxy unix//run/mastodon-streaming/streaming.socket + } + + route * { + file_server * { + root ${pkgs.mastodon}/public + pass_thru + } + reverse_proxy * unix//run/mastodon-web/web.socket + } + + tls ${ssl.cert} ${ssl.key} + + handle_errors { + root * ${pkgs.mastodon}/public + rewrite 500.html + file_server + } + + encode gzip + + header /* { + Strict-Transport-Security "max-age=31536000;" + } + header /emoji/* Cache-Control "public, max-age=31536000, immutable" + header /packs/* Cache-Control "public, max-age=31536000, immutable" + header /system/accounts/avatars/* Cache-Control "public, max-age=31536000, immutable" + header /system/media_attachments/files/* Cache-Control "public, max-age=31536000, immutable" + ''; + }; + }; + }; + }; + + systemd.services.caddy.serviceConfig.ReadWriteDirectories = lib.mkForce ["/var/lib/caddy" "/run/mastodon-web"]; + + sops = let + sopsSecrets = ["smtp" "database" "redis"]; + sopsPath = secret: { + path = "${sops.path0}/${name}-${secret}"; + owner = name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${name}-${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + fileSystems."/var/lib/${name}" = { + device = paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = [ + "Z ${paths.path0} 0755 ${name} ${name} -" + "Z ${sops.path0} 0755 ${name} ${name} -" + ]; + + users.users.${name}.extraGroups = ["postgres"]; + + networking = { + firewall = { + allowedTCPPorts = []; + }; + }; +} diff --git a/nixos/modules/services/mastodon/twitter.txt b/nixos/modules/services/mastodon/twitter.txt new file mode 100755 index 0000000..18e805c --- /dev/null +++ b/nixos/modules/services/mastodon/twitter.txt @@ -0,0 +1,5422 @@ +/* Mastodon Bird UI by @rolle@mementomori.social + 2.0.0rc47 */ + +/* CSS variables */ +:root { + /* Brand colors */ + --color-brand-twitter: #cc6600; + --color-brand-twitter-bg: #15202b; + --color-brand-twitter-dim: #8b98a5; + --color-brand-twitter-mud: #273340; + --color-brand-twitter-dark: #232543; + --color-brand-twitter-threaded-line: #425364; + --color-brand-mastodon: #cc6600; + --color-brand-mastodon-links: #cc6600; + --color-brand-mastodon-bg: #1e2028; + --color-brand-mastodon-dim: #717c9b; + --color-brand-mastodon-mud: rgb(39 44 64 / .5); + --color-brand-mastodon-dark: #232543; + --color-brand-mastodon-threaded-line: #434264; + --color-brand-mastodon-text-light: #8493a7; + + /* Colors */ + /* Note: Remember to search for the DIM hex + and replace it inside the SVG icons if you decide to change it */ + --color-bg: var(--color-brand-mastodon-bg); + --color-bg-75: #1e2028bf; + --color-fg: #fff; + --color-border: #38384d; + --color-dim: var(--color-brand-mastodon-dim); + --color-accent: var(--color-brand-mastodon-links); + --color-accent-dark: var(--color-brand-mastodon); + --color-accent-dark-50: #595aff80; + --color-green: #00ba7c; + --color-red: #f91880; + --color-red-75: #f91880bf; + --color-yellow: #ffac33; + --color-light-shade: #ffffff05; + --color-focusable-toot: #ffffff09; + --color-light-text: #f7f9f9; + --color-mud: var(--color-brand-mastodon-mud); + --color-arsenic: #393f4f; + --color-black-coral: #5a5371; + --color-profile-button-hover: #f1eff41a; + --color-column-link-hover: #f7f7f91a; + --color-modal-overlay: #5b708366; + --color-dark: var(--color-brand-mastodon-dark); + --color-thread-line: var(--color-brand-mastodon-threaded-line); + --color-topaz: #dadaf3; + --color-light-purple: #9baec8; + --color-lighter-purple: #a5b8d3; + --color-dark-electric-blue: #576078; + --color-button-text: #f7f9f9; + --color-ghost-button-text: var(--color-button-text); + --color-verified: #79bd9a; + --color-destructive: #df405a; + --color-light-fuchsia-pink: #ff8cfd; + --color-hashtag: var(--color-accent); + --color-mention: var(--color-accent); + --color-link: var(--color-accent); + --color-bg-compose-form: rgb(39 44 64 / .4); + --color-bg-compose-form-focus: rgb(39 44 64 / .8); + + /* In the original UI this color is lighten($ui-base-color, 12%) */ + --color-outer-space: #42485a; + + /* Font related */ + --font-size: 15px; + --font-size-smaller: 13px; + --font-size-12: 12px; + --font-size-mid: 14px; + --font-size-bigger: 17px; + --font-size-title: 19px; + --font-size-heading: 20px; + --font-weight-regular: 400; + --font-weight-semibold: 500; + --font-weight-bold: 700; + --line-height: 22px; + --line-height-mid: 20px; + + /* Grids and gaps */ + --gap-default: 12px; + --gap-column-link: 12px; + + /* Element sizes */ + --size-avatar: 48px; + --size-avatar-small: 32px; + --width-main-panel: 600px; + --width-side-panel: 260px; + --width-compose-panel: 350px; + --border-radius: 16px; + --border-radius-badges: 4px; + --badges-distance-from-edge: 12px; + + /* Misc */ + --active-header-box-shadow: 0 1px 0 rgba(140, 141, 255, .3); + --active-header-radial-gradient: radial-gradient(ellipse, rgba(99, 100, 255, .23) 0, rgba(99, 100, 255, 0) 60%); + --compose-form-linear-gradient: linear-gradient(180deg, rgba(30, 32, 40, 1) 0%, rgba(30, 32, 40, 1) 53%, rgba(30, 32, 40, 0.8141631652661064) 76%, rgba(30, 32, 40, 0.7077205882352942) 87%, rgba(30, 32, 40, 0.458420868347339) 97%, rgba(30, 32, 40, 0) 100%); + + /* Logo */ + --logo: url('https://static.wixstatic.com/media/bf048a_167e82df89464a09a43b7fb363d9a8dd~mv2.png/v1/fill/w_185,h_145,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/bf048a_167e82df89464a09a43b7fb363d9a8dd~mv2.png'); + + /* Icons */ + --icon-follow-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18px" height="auto" viewBox="0 0 462 439"%3E%3Cpath fill="%23717c9b" d="M139 11.7c-3.5 2.5-6.2 5.4-7.7 8.3-2.5 4.8-2.5 5.2-7.8 52.5-1.4 12.6-3.5 31.4-4.7 41.7l-2.1 18.7-48.6.3-48.6.3-5 3.1C7.2 141.1 3 148.4 3 156.7c0 4.4.6 7.6 2 10.2 2.7 5.4 10.1 11.6 15.5 13 2.9.7 19.2 1.1 47.8 1.1 40.9 0 43.5.1 43.1 1.7-.4 1.9-8.4 73.2-8.4 75.2 0 .8-11.4 1.1-41 1.1H20.9l-4.8 2.5C7.5 265.8 3 273 3 282.5s4.5 16.7 13.1 21l4.8 2.5H97.6l-5.3 46.7c-2.9 25.8-5.4 50.3-5.5 54.5-.1 7 .2 8.2 2.8 12.5 1.7 2.7 5.1 6.2 7.8 8 4.5 3.1 5.4 3.3 13 3.3 8.9 0 10.2-.5 16.8-6.8 4.8-4.6 6.3-9.3 8.2-26.7.9-7.7 2.7-23.9 4-36 1.4-12.1 3.3-29.5 4.3-38.8l1.7-16.7H214.7l.5-8.3c.7-9.8 1.4-11.5 8.2-18.5 8.6-9 7-8.7 41.4-9l30.2-.3V259h-9.5c-9.4 0-9.5 0-9.1-2.3.3-1.2 1.5-10.8 2.6-21.2 1.2-10.5 3-26.5 4.1-35.7 1-9.2 1.9-17.2 1.9-17.8 0-.7 12.3-1 38.5-1 23.5 0 40.3-.4 43.4-1.1 6.1-1.3 13.5-7.4 16.2-13.4 5.2-11.4.2-24.9-11.5-30.9l-4.9-2.6H290.4l5.3-46.8c5.3-47.1 6.1-59 4.3-63.6-1.4-3.7-7.9-10.5-12.1-12.7C285.2 8.6 282 8 277.2 8c-6.2 0-7.5.4-11.8 3.2-9.2 6.2-10.1 8.6-12.9 31.8-3.4 28.9-7.2 63.4-8.7 77.7l-1.2 12.3h-77.8l.6-4.3c.3-2.3.8-7.1 1.1-10.7.6-6.1 2.5-23.4 7.6-68 1.2-10.8 1.9-21.1 1.6-23.1-1.1-5.5-6.2-12.6-11.4-15.9-4.2-2.7-5.6-3-12.3-3-7.2 0-8 .2-13 3.7zm97.5 174.5c-.4 2.9-1.5 12.9-2.5 22.3-1.1 9.3-2.7 24.5-3.7 33.7l-1.7 16.8H150.9l.6-6.3c.3-3.4 1.7-15.7 3-27.2 1.3-11.6 2.9-26.3 3.6-32.8l1.2-11.7H237l-.5 5.2z"/%3E%3Cpath fill="%23717c9b" d="M317.2 207c-1.8 1.1-4.1 3.4-5.2 5.2-1.9 3.1-2 5.1-2 38V285h-34.7c-33 0-35 .1-38.1 2-6.7 4.1-7.2 6-7.2 30s.5 25.9 7.2 30c3.1 1.9 5.1 2 38.1 2H310v34.7c0 33 .1 35 2 38.1 4.1 6.7 6 7.2 30 7.2s25.9-.5 30-7.2c1.9-3.1 2-5.1 2-38.1V349h34.8c32.9 0 34.9-.1 38-2 6.7-4.1 7.2-6 7.2-30s-.5-25.9-7.2-30c-3.1-1.9-5.1-2-38-2H374v-34.8c0-32.9-.1-34.9-2-38-4.1-6.7-6-7.2-30-7.2-19.7 0-21.8.2-24.8 2z"/%3E%3Cpath fill="%23717c9b" d="M217.2 359.7c-5 43.2-5.5 50-4.2 54.7 1.5 5.4 7.5 12.7 12.4 15 5.2 2.4 17.1 2.2 21.6-.5 8.9-5.3 12.3-11.7 13.4-25.4.9-10.2 3.5-33.2 4.2-36.6l.5-2.7-15.3-.4c-10.1-.2-16.1-.8-17.8-1.7-1.4-.7-5-3.8-8.1-6.8l-5.6-5.4-1.1 9.8z"/%3E%3C/svg%3E'); + --icon-unfollow-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18px" height="auto" viewBox="0 0 462 439"%3E%3Cpath fill="%2300ba7c" d="M139 11.7c-3.5 2.5-6.2 5.4-7.7 8.3-2.5 4.8-2.5 5.2-7.8 52.5-1.4 12.6-3.5 31.4-4.7 41.7l-2.1 18.7-48.6.3-48.6.3-5 3.1C7.2 141.1 3 148.4 3 156.7c0 4.4.6 7.6 2 10.2 2.7 5.4 10.1 11.6 15.5 13 2.9.7 19.2 1.1 47.8 1.1 40.9 0 43.5.1 43.1 1.7-.4 1.9-8.4 73.2-8.4 75.2 0 .8-11.4 1.1-41 1.1H20.9l-4.8 2.5C7.5 265.8 3 273 3 282.5s4.5 16.7 13.1 21l4.8 2.5H97.6l-5.3 46.7c-2.9 25.8-5.4 50.3-5.5 54.5-.1 7 .2 8.2 2.8 12.5 1.7 2.7 5.1 6.2 7.8 8 4.5 3.1 5.4 3.3 13 3.3 8.9 0 10.2-.5 16.8-6.8 4.8-4.6 6.3-9.3 8.2-26.7.9-7.7 2.7-23.9 4-36 1.4-12.1 3.3-29.5 4.3-38.8l1.7-16.7h38.8c21.3 0 38.8.4 38.8.9 0 1-2.3 21.5-5 45.1-5.9 52.1-6.4 57.6-5 62.4 1.5 5.4 7.5 12.7 12.4 15 5.2 2.4 17.1 2.2 21.6-.5 5-3 8.7-6.7 10.1-10.1 1.2-2.9 1.1-3.1-10.8-15.1-6.7-6.7-12.6-13.2-13.2-14.4-1.5-2.9-1.4-25.8 0-28.6.6-1.2 9.2-10.3 19-20.3 24-24.2 24-20.9.3-44.4-9.6-9.6-18.2-18.7-19-20.2-2-3.8-2-25.8 0-29.6 1.7-3.2 34.2-35.5 37.3-37.1 1.2-.6 4.2-1.1 6.6-1.1 5.2 0 4.6 1.5 6.8-17.3l1.1-9.7h38.4c23.4 0 40.2-.4 43.3-1.1 6.1-1.3 13.5-7.4 16.2-13.4 5.2-11.4.2-24.9-11.5-30.9l-4.9-2.6H290.4l5.3-46.8c5.3-47.1 6.1-59 4.3-63.6-1.4-3.7-7.9-10.5-12.1-12.7C285.2 8.6 282 8 277.2 8c-6.2 0-7.5.4-11.8 3.2-9.2 6.2-10.1 8.6-12.9 31.8-3.4 28.9-7.2 63.4-8.7 77.7l-1.2 12.3h-77.8l.6-4.3c.3-2.3.8-7.1 1.1-10.7.6-6.1 2.5-23.4 7.6-68 1.2-10.8 1.9-21.1 1.6-23.1-1.1-5.5-6.2-12.6-11.4-15.9-4.2-2.7-5.6-3-12.3-3-7.2 0-8 .2-13 3.7zm97.5 174.5c-.4 2.9-1.5 12.9-2.5 22.3-1.1 9.3-2.7 24.5-3.7 33.7l-1.7 16.8H150.9l.6-6.3c.3-3.4 1.7-15.7 3-27.2 1.3-11.6 2.9-26.3 3.6-32.8l1.2-11.7H237l-.5 5.2z"/%3E%3Cpath fill="%2300ba7c" d="M277.5 223.2c-3.1 1.7-28.5 27-30.1 30-1.7 3.2-1.9 12-.3 15.1.6 1.2 11.7 12.9 24.7 25.9l23.7 23.8-23.7 23.7c-13 13.1-24.1 24.8-24.7 26-1.6 3.1-1.4 11.9.3 15.1 1.7 3.2 27.2 28.5 30.3 30.1 2.8 1.4 11.8 1.4 14.6 0 1.2-.6 12.9-11.7 26-24.7l23.7-23.7 23.8 23.7c13 13 24.7 24.1 25.9 24.7 2.8 1.4 11.8 1.4 14.6 0 3.1-1.6 28.6-26.9 30.3-30.1 1.7-3.2 1.9-12 .3-15.1-.6-1.2-11.7-12.9-24.7-26L388.5 318l23.7-23.8c13-13 24.1-24.7 24.7-25.9 1.6-3.1 1.4-11.9-.3-15.1-1.7-3.2-27.2-28.5-30.3-30.1-2.8-1.4-11.8-1.4-14.6 0-1.2.6-12.9 11.7-25.9 24.7L342 271.5l-23.7-23.7c-13.1-13-24.8-24.1-26-24.7-2.8-1.4-12.2-1.4-14.8.1z"/%3E%3C/svg%3E'); + --icon-boost: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%2300ba7c' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status-prepend: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true"%3E%3Cg%3E%3Cpath fill="%2300ba7c" d="M4.75 3.79l4.603 4.3-1.706 1.82L6 8.38v7.37c0 .97.784 1.75 1.75 1.75H13V20H7.75c-2.347 0-4.25-1.9-4.25-4.25V8.38L1.853 9.91.147 8.09l4.603-4.3zm11.5 2.71H11V4h5.25c2.347 0 4.25 1.9 4.25 4.25v7.37l1.647-1.53 1.706 1.82-4.603 4.3-4.603-4.3 1.706-1.82L18 15.62V8.25c0-.97-.784-1.75-1.75-1.75z"%3E%3C/path%3E%3C/g%3E%3C/svg%3E'); + --icon-boost-notification-filter-bar: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23f7f9f9' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-wrapper: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 136 136'%3E%3Cpath fill='%2300ba7c' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-reply-nofitication-filter-bar-active: url('data:image/svg+xml, %3Csvg viewBox="0 0 24 24" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath fill="%23f7f9f9" d="M1.751 10c0-4.42 3.584-8 8.005-8h4.366a8.13 8.13 0 0 1 8.129 8.13c0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067A8.005 8.005 0 0 1 1.751 10zm8.005-6a6.005 6.005 0 1 0 .133 12.01l.351-.01h1.761v2.3l5.087-2.81A6.127 6.127 0 0 0 14.122 4H9.756z"/%3E%3Cellipse fill="%23f7f9f9" fill-rule="evenodd" stroke-width="1.28569" cx="11.835" cy="10.2" rx="9.117" ry="8.123"/%3E%3C/svg%3E%0A'); + --icon-reply: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23717c9b' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23717c9b' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-conversation: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23717c9b' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-column-link: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-column-link-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%23f7f9f9" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-reply-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-list: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EList%3C/title%3E%3Cpath fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M160 144h288M160 256h288M160 368h288"/%3E%3Ccircle cx="80" cy="144" r="16" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="256" r="16" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="368" r="16" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3C/svg%3E'); + --icon-heart: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23717c9b' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-hover: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23F91880' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true' fill='%23f7f9f9'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-active-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true' fill='%23F91880'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-notification: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%23F91880'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-star-column-link: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-star-column-link-active: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="%23f7f9f9" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-star-notification: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="0" viewBox="0 0 24 24" fill="%23ffac33" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%23ffac33" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-heart-column-link: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23f7f9f9' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-column-link-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%23f7f9f9'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-direct-messages: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-direct-messages-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="%23f7f9f9" stroke="%23232543" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-users-column-link: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%23f7f9f9" stroke-width="1.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-users-column-link-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%23f7f9f9" stroke-width="2.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%23f7f9f9" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-status-hover-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bell: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="%23f7f9f9" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs-active: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="%23f7f9f9" xmlns="http://www.w3.org/2000/svg" color="%23f7f9f9"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%23f7f9f9" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-home-notification: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-home-notification-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%23f7f9f9" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-home: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23f7f9f9" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-more: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23f7f9f9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-more-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23f7f9f9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-close-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-checked-green: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2317bf63' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-check'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-plus: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-plus-green: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2317bf63' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-plus-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23e0245e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-cross-green: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2317bf63' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-cross-red: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23e0245e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-cog: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' width='26' height='26' viewBox='0 0 512 512' fill='%23f7f9f9'%3E%3Cpath d='M456.7 242.27l-26.08-4.2a8 8 0 01-6.6-6.82c-.5-3.2-1-6.41-1.7-9.51a8.08 8.08 0 013.9-8.62l23.09-12.82a8.05 8.05 0 003.9-9.92l-4-11a7.94 7.94 0 00-9.4-5l-25.89 5a8 8 0 01-8.59-4.11q-2.25-4.2-4.8-8.41a8.16 8.16 0 01.7-9.52l17.29-19.94a8 8 0 00.3-10.62l-7.49-9a7.88 7.88 0 00-10.5-1.51l-22.69 13.63a8 8 0 01-9.39-.9c-2.4-2.11-4.9-4.21-7.4-6.22a8 8 0 01-2.5-9.11l9.4-24.75A8 8 0 00365 78.77l-10.2-5.91a8 8 0 00-10.39 2.21l-16.64 20.84a7.15 7.15 0 01-8.5 2.5s-5.6-2.3-9.8-3.71A8 8 0 01304 87l.4-26.45a8.07 8.07 0 00-6.6-8.42l-11.59-2a8.07 8.07 0 00-9.1 5.61l-8.6 25.05a8 8 0 01-7.79 5.41h-9.8a8.07 8.07 0 01-7.79-5.41l-8.6-25.05a8.07 8.07 0 00-9.1-5.61l-11.59 2a8.07 8.07 0 00-6.6 8.42l.4 26.45a8 8 0 01-5.49 7.71c-2.3.9-7.3 2.81-9.7 3.71-2.8 1-6.1.2-8.8-2.91l-16.51-20.34A8 8 0 00156.75 73l-10.2 5.91a7.94 7.94 0 00-3.3 10.09l9.4 24.75a8.06 8.06 0 01-2.5 9.11c-2.5 2-5 4.11-7.4 6.22a8 8 0 01-9.39.9L111 116.14a8 8 0 00-10.5 1.51l-7.49 9a8 8 0 00.3 10.62l17.29 19.94a8 8 0 01.7 9.52q-2.55 4-4.8 8.41a8.11 8.11 0 01-8.59 4.11l-25.89-5a8 8 0 00-9.4 5l-4 11a8.05 8.05 0 003.9 9.92L85.58 213a7.94 7.94 0 013.9 8.62c-.6 3.2-1.2 6.31-1.7 9.51a8.08 8.08 0 01-6.6 6.82l-26.08 4.2a8.09 8.09 0 00-7.1 7.92v11.72a7.86 7.86 0 007.1 7.92l26.08 4.2a8 8 0 016.6 6.82c.5 3.2 1 6.41 1.7 9.51a8.08 8.08 0 01-3.9 8.62L62.49 311.7a8.05 8.05 0 00-3.9 9.92l4 11a7.94 7.94 0 009.4 5l25.89-5a8 8 0 018.59 4.11q2.25 4.2 4.8 8.41a8.16 8.16 0 01-.7 9.52l-17.29 19.96a8 8 0 00-.3 10.62l7.49 9a7.88 7.88 0 0010.5 1.51l22.69-13.63a8 8 0 019.39.9c2.4 2.11 4.9 4.21 7.4 6.22a8 8 0 012.5 9.11l-9.4 24.75a8 8 0 003.3 10.12l10.2 5.91a8 8 0 0010.39-2.21l16.79-20.64c2.1-2.6 5.5-3.7 8.2-2.6 3.4 1.4 5.7 2.2 9.9 3.61a8 8 0 015.49 7.71l-.4 26.45a8.07 8.07 0 006.6 8.42l11.59 2a8.07 8.07 0 009.1-5.61l8.6-25a8 8 0 017.79-5.41h9.8a8.07 8.07 0 017.79 5.41l8.6 25a8.07 8.07 0 009.1 5.61l11.59-2a8.07 8.07 0 006.6-8.42l-.4-26.45a8 8 0 015.49-7.71c4.2-1.41 7-2.51 9.6-3.51s5.8-1 8.3 2.1l17 20.94A8 8 0 00355 439l10.2-5.91a7.93 7.93 0 003.3-10.12l-9.4-24.75a8.08 8.08 0 012.5-9.12c2.5-2 5-4.1 7.4-6.21a8 8 0 019.39-.9L401 395.66a8 8 0 0010.5-1.51l7.49-9a8 8 0 00-.3-10.62l-17.29-19.94a8 8 0 01-.7-9.52q2.55-4.05 4.8-8.41a8.11 8.11 0 018.59-4.11l25.89 5a8 8 0 009.4-5l4-11a8.05 8.05 0 00-3.9-9.92l-23.09-12.82a7.94 7.94 0 01-3.9-8.62c.6-3.2 1.2-6.31 1.7-9.51a8.08 8.08 0 016.6-6.82l26.08-4.2a8.09 8.09 0 007.1-7.92V250a8.25 8.25 0 00-7.27-7.73zM256 112a143.82 143.82 0 01139.38 108.12A16 16 0 01379.85 240H274.61a16 16 0 01-13.91-8.09l-52.1-91.71a16 16 0 019.85-23.39A146.94 146.94 0 01256 112zM112 256a144 144 0 0143.65-103.41 16 16 0 0125.17 3.47L233.06 248a16 16 0 010 15.87l-52.67 91.7a16 16 0 01-25.18 3.36A143.94 143.94 0 01112 256zm144 144a146.9 146.9 0 01-38.19-4.95 16 16 0 01-9.76-23.44l52.58-91.55a16 16 0 0113.88-8H379.9a16 16 0 0115.52 19.88A143.84 143.84 0 01256 400z'/%3E%3C/svg%3E"); + --icon-sliders-contrast: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23f7f9f9' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-sliders: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-globe: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.00 0.00 512.00 512.00'%3E%3Cpath fill='%23f7f9f9' d=' M 512.00 383.82 L 512.00 385.55 C 509.71 419.39 473.05 422.09 447.81 418.87 Q 423.66 415.79 400.31 408.70 Q 358.58 396.03 318.76 378.21 Q 218.90 333.52 129.46 270.53 C 92.32 244.38 56.82 216.22 27.43 182.58 C 14.63 167.94 1.88 149.41 0.00 128.96 L 0.00 125.94 C 3.19 91.33 40.56 90.05 66.57 93.40 Q 81.64 95.34 88.25 97.23 C 99.02 100.32 103.61 112.14 97.29 121.55 C 92.20 129.11 85.23 129.19 76.43 127.41 C 64.10 124.92 44.84 121.70 32.89 126.36 A 1.55 1.54 74.3 0 0 31.93 128.08 C 34.07 139.90 43.53 152.31 51.28 161.22 Q 68.49 181.02 88.94 198.55 Q 89.49 199.02 89.73 198.34 Q 110.62 140.43 161.78 107.51 C 234.44 60.76 331.69 75.26 388.09 139.91 C 446.04 206.35 446.71 303.97 388.97 370.93 Q 388.58 371.38 389.14 371.58 Q 413.92 380.31 439.48 385.26 C 451.88 387.65 467.05 389.92 479.11 385.65 A 1.51 1.50 -14.2 0 0 480.10 384.00 C 477.90 369.69 463.57 354.46 454.60 343.62 C 440.99 327.16 463.05 306.29 479.15 323.40 C 495.03 340.29 510.01 360.98 512.00 383.82 Z M 115.39 210.46 Q 136.86 228.57 159.38 244.15 C 223.66 288.63 294.05 327.49 367.32 354.98 A 1.46 1.44 30.8 0 0 368.93 354.58 Q 400.10 318.66 405.76 270.75 Q 407.08 259.64 406.38 249.56 C 401.05 172.60 342.31 113.52 265.72 106.81 Q 255.74 105.94 245.77 106.92 C 185.42 112.87 134.96 151.32 114.89 208.65 Q 114.52 209.72 115.39 210.46 Z M 295.33 328.94 A 0.34 0.34 0.0 0 0 295.16 329.58 L 299.51 331.72 A 0.34 0.34 0.0 0 0 300.00 331.41 L 300.00 329.51 A 0.34 0.34 0.0 0 0 299.68 329.17 L 295.33 328.94 Z'%0A/%3E%3Cpath fill='%23f7f9f9' d=' M 307.69 408.30 C 316.86 412.38 316.05 421.82 306.19 424.66 C 209.45 452.48 109.79 396.22 85.13 298.09 Q 83.95 293.40 84.37 291.18 C 85.73 284.03 93.55 284.22 98.50 287.80 Q 197.11 359.12 307.69 408.30 Z M 263.31 410.94 Q 262.74 410.51 262.12 410.23 Q 199.27 381.56 142.55 342.19 Q 129.49 333.13 117.25 323.09 A 0.18 0.18 0.0 0 0 116.97 323.31 C 142.74 377.01 195.57 410.10 255.44 411.80 Q 261.32 411.97 263.93 411.40 Q 264.37 411.30 264.00 411.06 Q 263.69 410.85 263.31 410.94 Z'%0A/%3E%3C/svg%3E"); + --icon-globe-purple: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.00 0.00 512.00 512.00'%3E%3Cpath fill='%238c8dff' d=' M 512.00 383.82 L 512.00 385.55 C 509.71 419.39 473.05 422.09 447.81 418.87 Q 423.66 415.79 400.31 408.70 Q 358.58 396.03 318.76 378.21 Q 218.90 333.52 129.46 270.53 C 92.32 244.38 56.82 216.22 27.43 182.58 C 14.63 167.94 1.88 149.41 0.00 128.96 L 0.00 125.94 C 3.19 91.33 40.56 90.05 66.57 93.40 Q 81.64 95.34 88.25 97.23 C 99.02 100.32 103.61 112.14 97.29 121.55 C 92.20 129.11 85.23 129.19 76.43 127.41 C 64.10 124.92 44.84 121.70 32.89 126.36 A 1.55 1.54 74.3 0 0 31.93 128.08 C 34.07 139.90 43.53 152.31 51.28 161.22 Q 68.49 181.02 88.94 198.55 Q 89.49 199.02 89.73 198.34 Q 110.62 140.43 161.78 107.51 C 234.44 60.76 331.69 75.26 388.09 139.91 C 446.04 206.35 446.71 303.97 388.97 370.93 Q 388.58 371.38 389.14 371.58 Q 413.92 380.31 439.48 385.26 C 451.88 387.65 467.05 389.92 479.11 385.65 A 1.51 1.50 -14.2 0 0 480.10 384.00 C 477.90 369.69 463.57 354.46 454.60 343.62 C 440.99 327.16 463.05 306.29 479.15 323.40 C 495.03 340.29 510.01 360.98 512.00 383.82 Z M 115.39 210.46 Q 136.86 228.57 159.38 244.15 C 223.66 288.63 294.05 327.49 367.32 354.98 A 1.46 1.44 30.8 0 0 368.93 354.58 Q 400.10 318.66 405.76 270.75 Q 407.08 259.64 406.38 249.56 C 401.05 172.60 342.31 113.52 265.72 106.81 Q 255.74 105.94 245.77 106.92 C 185.42 112.87 134.96 151.32 114.89 208.65 Q 114.52 209.72 115.39 210.46 Z M 295.33 328.94 A 0.34 0.34 0.0 0 0 295.16 329.58 L 299.51 331.72 A 0.34 0.34 0.0 0 0 300.00 331.41 L 300.00 329.51 A 0.34 0.34 0.0 0 0 299.68 329.17 L 295.33 328.94 Z'%0A/%3E%3Cpath fill='%238c8dff' d=' M 307.69 408.30 C 316.86 412.38 316.05 421.82 306.19 424.66 C 209.45 452.48 109.79 396.22 85.13 298.09 Q 83.95 293.40 84.37 291.18 C 85.73 284.03 93.55 284.22 98.50 287.80 Q 197.11 359.12 307.69 408.30 Z M 263.31 410.94 Q 262.74 410.51 262.12 410.23 Q 199.27 381.56 142.55 342.19 Q 129.49 333.13 117.25 323.09 A 0.18 0.18 0.0 0 0 116.97 323.31 C 142.74 377.01 195.57 410.10 255.44 411.80 Q 261.32 411.97 263.93 411.40 Q 264.37 411.30 264.00 411.06 Q 263.69 410.85 263.31 410.94 Z'%0A/%3E%3C/svg%3E"); + --icon-globe-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%23f7f9f9" viewBox="0 0 512 512"%3E%3Cpath d="M96.85 286.62a8 8 0 00-12.53 8.25C102.07 373.28 172.3 432 256 432a175.31 175.31 0 0052.41-8 8 8 0 00.79-15 1120 1120 0 01-109.48-55.61 1126.24 1126.24 0 01-102.87-66.77zM492.72 339.51c-4.19-5.58-9.11-11.44-14.7-17.53a15.83 15.83 0 00-26.56 5.13c0 .16-.11.31-.17.47a15.75 15.75 0 003.15 16.06c22.74 25 26.42 38.51 25.48 41.36-2 2.23-17.05 6.89-58.15-3.53q-8.83-2.24-19.32-5.46-6.76-2.08-13.79-4.49a176.76 176.76 0 0019.54-27.25c.17-.29.35-.58.52-.88A175.39 175.39 0 00432 256a178.87 178.87 0 00-1-19c-9.57-88.17-84.4-157-175-157a175.37 175.37 0 00-106.4 35.89 177.4 177.4 0 00-45.83 51.84c-.16.29-.34.58-.51.87a175.48 175.48 0 00-13.83 30.52q-5.59-4.87-10.79-9.67c-5.39-5-10.17-9.63-14.42-14-29.57-30.26-33.09-45.61-32.16-48.45 2-2.23 15.54-5.87 48.62 1.31A15.82 15.82 0 0096.22 123l.36-.44a15.74 15.74 0 00-8.67-25.43A237.38 237.38 0 0064.13 93c-30.72-3.53-50.83 2.52-59.78 18-3.24 5.58-6.35 15.09-2.72 28.6C7 159.66 26.14 184 53.23 209.5c8.63 8.13 18.06 16.37 28.12 24.64 7.32 6 15 12.06 22.9 18.08q7.91 6 16.15 12T137.1 276c25.41 17.61 52.26 34.52 78.59 49.69q14.34 8.26 28.64 16t28.37 14.81c21.9 11 43.35 20.92 63.86 29.43q13.19 5.48 25.81 10.16c11.89 4.42 23.37 8.31 34.31 11.59l1.1.33c25.73 7.66 47.42 11.69 64.48 12H464c21.64 0 36.3-6.38 43.58-19 9.09-15.62 4.08-36.32-14.86-61.5z"/%3E%3C/svg%3E'); + --icon-home-column-link-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%23f7f9f9" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-hashtag-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%23f7f9f9" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-star: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="%23717c9b" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-star-active: url("data:image/svg+xml, %3Csvg fill='%23717c9b' xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m212.086-50.607 70.652-305.306L45.52-561.305l312.871-26.696L480-876.176l121.609 288.175 312.871 26.696-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23717c9b' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m330.955-216.328 149.066-89 149.066 90.023-40.305-168.391 131.217-114.347-172.956-14.87L480-671.869l-67.043 158.521-172.956 14.305 131.427 113.796-40.473 168.919ZM212.086-50.608l70.652-305.305L45.52-561.305l312.645-26.579L480-876.176l121.835 288.292 312.645 26.579-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607ZM480-433.87Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffac33' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m330.955-216.328 149.066-89 149.066 90.023-40.305-168.391 131.217-114.347-172.956-14.87L480-671.869l-67.043 158.521-172.956 14.305 131.427 113.796-40.473 168.919ZM212.086-50.608l70.652-305.305L45.52-561.305l312.645-26.579L480-876.176l121.835 288.292 312.645 26.579-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607ZM480-433.87Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar-active: url("data:image/svg+xml, %3Csvg fill='%23ffac33' xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m212.086-50.607 70.652-305.306L45.52-561.305l312.871-26.696L480-876.176l121.609 288.175 312.871 26.696-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="%23717c9b" stroke="%23717c9b" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-star-hover: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="%23ffac33" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-search: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23535C76' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + --icon-search-opaque: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + --icon-compose: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-edit'%3E%3Cpath d='M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'%3E%3C/path%3E%3Cpath d='M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z'%3E%3C/path%3E%3C/svg%3E"); + + /* Profile icons */ + --icon-github: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"%3E%3Cpath d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"%3E%3C/path%3E%3C/svg%3E'); + --icon-youtube: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"%3E%3Cpath d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"%3E%3C/path%3E%3Cpolygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"%3E%3C/polygon%3E%3C/svg%3E'); + --icon-link: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"%3E%3Cpath d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"%3E%3C/path%3E%3Cline x1="8" y1="12" x2="16" y2="12"%3E%3C/line%3E%3C/svg%3E'); + --icon-twitter: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"%3E%3Cpath fill="%23717c9b" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/%3E%3C/svg%3E'); + --icon-twitch: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"%3E%3Cpath d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"%3E%3C/path%3E%3C/svg%3E'); + --icon-patreon: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EPatreon icon%3C/title%3E%3Cpath d='M15.386.524c-4.764 0-8.64 3.876-8.64 8.64 0 4.75 3.876 8.613 8.64 8.613 4.75 0 8.614-3.864 8.614-8.613C24 4.4 20.136.524 15.386.524M.003 23.537h4.22V.524H.003'/%3E%3C/svg%3E"); + --icon-threads: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='18' fill='%23717c9b' width='18' viewBox='0 0 448 512'%3E%3Cpath d='M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z'/%3E%3C/svg%3E"); + --icon-bluesky: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.467 8.467' width='18' height='18'%3E%3Cpath fill='%23717c9b' d='M67.256 111.972c-.545-.648-.629-.916-.411-1.323.15-.28.477-.52.727-.531.289-.013.204-.113-.236-.274-.862-.316-1.295-1.239-1.295-2.76 0-1.071.058-1.179.643-1.179.65 0 2.043 1.149 2.88 2.374l.446.655.446-.655c.837-1.225 2.23-2.373 2.88-2.373.584 0 .642.107.642 1.178 0 1.528-.435 2.45-1.295 2.74-.686.23-.686.233-.094.424.787.253.78 1.214-.017 1.961-.893.84-1.748.751-2.114-.218-.165-.437-.364-.794-.442-.794-.078 0-.3.357-.493.794-.47 1.06-1.365 1.053-2.267-.02z' transform='translate(-65.776 -105.112)'/%3E%3C/svg%3E"); + --icon-nostr: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 860 847'%3E%3Cpath d='M454.5 1.1c-67.6 10.3-115.8 27.2-160.4 56.4-16.5 10.9-19.3 12-29.1 12-9.5 0-14.6-2-20.8-7.9-5.5-5.1-7.5-9.9-9.2-22-1.9-13.1-6.8-20.4-17.3-25.7l-5.8-3-92.2.3c-68.2.3-93.1.7-95.6 1.6-4.5 1.5-11.4 8.3-15.2 14.8L6 32.8l.2 391.8.3 391.9 2.7 5c1.4 2.8 4.6 6.9 7.1 9.2 8.7 8 .9 7.3 96 8 88.7.6 108.3 0 116.7-3.3 5.9-2.4 13.5-11.7 14.9-18.4 1.4-6.4 1.4-67.7.1-103.3-3-78.6-15.8-158-48.1-297.2-21.2-91.3-27.3-126.1-28.6-162.6-1.5-43.2 7-69.1 28.8-87.6 6.9-5.8 19.7-12.8 29.7-16.2 14.8-5 57.5-12 96.2-15.7 21-2.1 84.2-2.4 104.4-.6 25.3 2.3 54.4 8.4 76 15.9 36.2 12.5 62.9 33.9 75.5 60.4 5.2 10.8 7.6 20.5 9.6 38.2 1.9 16.7 3.6 24 7.4 32.2 7.1 15.3 26.3 28.9 50.7 36 20.1 5.9 42 8.1 86.4 9 33.3.7 41.1 1.5 47.9 5 7.7 3.9 15.4 11.6 18.7 18.7 2.8 6 2.9 6.9 2.9 20.8 0 13.3-.2 14.9-2.4 19.5-1.4 2.8-5.6 8.1-9.5 12-10.8 10.7-28 18.8-48.8 23-13.6 2.7-38.7 3.5-110.3 3.5-73.4 0-79.9.3-96.7 4.5-33.7 8.5-56.9 25.7-70.1 52.1-15.4 30.7-26.8 91.8-31.7 170.4-2.9 46.1-3 159.5-.1 166.5 1.9 4.7 11.1 13.4 15.3 14.5 8.4 2.3 51.4 3 196.8 3 155 0 184.6-.6 191.7-3.5 5.5-2.3 12.1-9.2 13.4-13.9.6-2.1 1.5-10.5 2-18.5 1.9-32.6.2-482.7-2-504.1-4.6-44.3-20-97.2-39.7-136.1-14.5-28.7-30.3-50.8-51.9-72.5-27-27.1-54.5-45.9-89.8-61.4-31.8-13.9-71.3-24.3-104.5-27.5-16.8-1.7-98.5-1.9-108.7-.4z' fill='%23717c9b'/%3E%3Cpath d='M448 211.5c-21.4 5.9-38.1 21.3-45.8 42.7-2.4 6.5-2.7 8.7-2.6 19.8 0 11.3.3 13.3 3 21 3.9 11 8.7 18.2 18.1 27 11.2 10.4 22.4 15.1 39.8 16.5 27.9 2.3 56.6-18.3 64.9-46.5 8.1-27.5-5.4-60.4-30.1-73.3-12.3-6.4-17.5-7.8-30.3-8.3-8.2-.3-13.1 0-17 1.1z' fill='%23717c9b'/%3E%3C/svg%3E"); + --icon-paypal: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EPayPal icon%3C/title%3E%3Cpath d='M6.908 24H3.804c-.664 0-1.086-.529-.936-1.18l.149-.674h2.071c.666 0 1.336-.533 1.482-1.182l1.064-4.592c.15-.648.816-1.18 1.48-1.18h.883c3.789 0 6.734-.779 8.84-2.34s3.16-3.6 3.16-6.135c0-1.125-.195-2.055-.588-2.789 0-.016-.016-.031-.016-.046l.135.075c.75.465 1.32 1.064 1.711 1.814.404.75.598 1.68.598 2.791 0 2.535-1.049 4.574-3.164 6.135-2.1 1.545-5.055 2.324-8.834 2.324h-.9c-.66 0-1.334.525-1.484 1.186L8.39 22.812c-.149.645-.81 1.17-1.47 1.17L6.908 24zm-2.677-2.695H1.126c-.663 0-1.084-.529-.936-1.18L4.563 1.182C4.714.529 5.378 0 6.044 0h6.465c1.395 0 2.609.098 3.648.289 1.035.189 1.92.519 2.684.99.736.465 1.322 1.072 1.697 1.818.389.748.584 1.68.584 2.797 0 2.535-1.051 4.574-3.164 6.119-2.1 1.561-5.056 2.326-8.836 2.326h-.883c-.66 0-1.328.524-1.478 1.169L5.7 20.097c-.149.646-.817 1.172-1.485 1.172l.016.036zm7.446-17.369h-1.014c-.666 0-1.332.529-1.48 1.178l-.93 4.02c-.15.648.27 1.179.93 1.179h.766c1.664 0 2.97-.343 3.9-1.021.929-.686 1.395-1.654 1.395-2.912 0-.83-.301-1.445-.9-1.84-.6-.404-1.5-.605-2.686-.605l.019.001z'/%3E%3C/svg%3E"); + --icon-kofi: url("data:image/svg+xml, %3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EKo-fi icon%3C/title%3E%3Cpath d='M23.881 8.948c-.773-4.085-4.859-4.593-4.859-4.593H.723c-.604 0-.679.798-.679.798s-.082 7.324-.022 11.822c.164 2.424 2.586 2.672 2.586 2.672s8.267-.023 11.966-.049c2.438-.426 2.683-2.566 2.658-3.734 4.352.24 7.422-2.831 6.649-6.916zm-11.062 3.511c-1.246 1.453-4.011 3.976-4.011 3.976s-.121.119-.31.023c-.076-.057-.108-.09-.108-.09-.443-.441-3.368-3.049-4.034-3.954-.709-.965-1.041-2.7-.091-3.71.951-1.01 3.005-1.086 4.363.407 0 0 1.565-1.782 3.468-.963 1.904.82 1.832 3.011.723 4.311zm6.173.478c-.928.116-1.682.028-1.682.028V7.284h1.77s1.971.551 1.971 2.638c0 1.913-.985 2.667-2.059 3.015z'/%3E%3C/svg%3E"); + --icon-bandcamp: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%23717c9b' viewBox='0 0 512 512'%3E%3Cpath d='M105.6 191.2C98.1 204.8 33 325.2 33 325.6c0 .2 36.8.3 81.7.2l81.7-.3 37.5-69.4 37.6-69.4.3 70.2.2 70.2 10.3-.3 10.2-.3.3-6.8.3-6.7 3.2 4.2c2.2 2.9 5.6 5.5 10.1 7.8 6.8 3.5 7.1 3.5 19.5 3.5 12.3 0 12.8-.1 19.3-3.3 16.4-8 25.9-28.9 24.5-53.7-1.3-22.4-10.5-38.2-26.5-45.8-6.3-3-7.4-3.2-17.7-3.2-9.8 0-11.6.3-16.7 2.7-3.2 1.5-7.8 4.8-10.3 7.3l-4.5 4.7V185H109.1l-3.5 6.2zm226.1 51c5.3 2.4 8.7 6.5 12.7 14.8 2.9 6.1 3.1 7.2 3.1 18 0 12.9-1 17.1-5.7 24.9-4.7 7.6-11.5 11.4-20.6 11.4-15.3 0-24.4-9.6-27.4-28.6-2.1-13.4 1.5-28.2 8.5-35.5 7.6-7.9 19-9.9 29.4-5zM413.1 223.6c-21.1 5.7-34.1 26-34.1 53.1.1 22.8 9.6 39.9 26.8 48.1 6.5 3.1 8.6 3.6 17.4 4 15 .7 24.1-1.8 33.4-9.4 6.9-5.6 12.9-16.6 14.9-27.7l.7-3.7h-22l-.7 3.7c-1 5.5-3.9 10.6-8.1 14.2-4.8 4.3-7.7 5.3-14.9 5.3-16 .1-25.5-13.2-25.5-35.7 0-23.3 9.4-35.7 27-35.7 10.8 0 17.4 4.4 20.9 13.8l1.9 4.9 10.7.3 10.7.3-.7-4.7c-1.6-10.9-9.8-22.5-19.3-27.3-9.9-5-27.6-6.6-39.1-3.5z'/%3E%3C/svg%3E%0A"); + --icon-facebook: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23717c9b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-facebook'%3E%3Cpath d='M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z'%3E%3C/path%3E%3C/svg%3E"); + --icon-friendica: url("data:image/svg+xml, %3Csvg fill='%23717c9b' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1523.8 1536'%3E%3Cpath d='M0 276.4v983.2C0 1412 122.8 1536 274.4 1536h975.1c151.6 0 274.4-124 274.4-276.4V276.4C1523.8 124 1401.1 0 1249.4 0h-975C122.8 0 0 124 0 276.4zM1249.4 61.2c118.5 0 213.2 95.3 213.2 215.2v983.2c0 119.9-94.7 215.2-213.2 215.2H518.1V1106h487.5l-1.3-367.7-486.3 2.6V430.1h487.5V61.2h243.9z'/%3E%3C/svg%3E%0A"); + --icon-genderless-pronouns: url("data:image/svg+xml, %3Csvg fill='%23717c9b' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.334 12v-.02a9.354 9.354 0 1 0-2.74 6.614 8.963 8.963 0 0 0 2.74-6.462l-.001-.139V12zM24 12v.036c0 1.67-.349 3.258-.977 4.695l.029-.075c-1.226 2.905-3.491 5.17-6.318 6.367l-.078.029C15.282 23.651 13.682 24 12 24s-3.283-.349-4.733-.978l.077.03c-2.905-1.226-5.17-3.491-6.367-6.318l-.029-.078C.349 15.282 0 13.682 0 12s.349-3.283.978-4.733l-.03.077C2.174 4.439 4.439 2.174 7.266.977l.078-.029C8.718.349 10.318 0 12 0s3.283.349 4.733.978l-.077-.03c2.905 1.226 5.17 3.491 6.367 6.318l.029.078c.599 1.362.948 2.95.948 4.62v.039-.002z'/%3E%3C/svg%3E%0A"); + --icon-wordpress: url("data:image/svg+xml, %3Csvg width='18' height='18' fill='%23717c9b' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z'/%3E%3C/svg%3E"); + --icon-mastodon: url("data:image/svg+xml, %0A%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23717c9b'%3E%3Ctitle%3EMastodon icon%3C/title%3E%3Cpath d='M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z'/%3E%3C/svg%3E"); + --icon-verified: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-verified-smaller: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="15" height="15" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-label: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"%3E%3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"%3E%3C/path%3E%3Cline x1="7" y1="7" x2="7.01" y2="7"%3E%3C/line%3E%3C/svg%3E'); + --icon-discord: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="18" height="18" %3E%3Cpath fill="%23717c9b" d="M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z"/%3E%3C/svg%3E'); + --icon-linkedin: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"%3E%3Cpath d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"%3E%3C/path%3E%3Crect x="2" y="9" width="4" height="12"%3E%3C/rect%3E%3Ccircle cx="4" cy="4" r="2"%3E%3C/circle%3E%3C/svg%3E'); + --icon-instagram: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23717c9b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"%3E%3Crect x="2" y="2" width="20" height="20" rx="5" ry="5"%3E%3C/rect%3E%3Cpath d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"%3E%3C/path%3E%3Cline x1="17.5" y1="6.5" x2="17.51" y2="6.5"%3E%3C/line%3E%3C/svg%3E'); +} + +/* High Contrast theme */ +body.theme-contrast.layout-single-column { + --color-dim: #b8b3c0; + + /* Icons */ + --icon-boost: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23b8b3c0' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23b8b3c0' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23b8b3c0' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23f7f9f9' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-follow-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18px" height="auto" viewBox="0 0 462 439"%3E%3Cpath fill="%23b8b3c0" d="M139 11.7c-3.5 2.5-6.2 5.4-7.7 8.3-2.5 4.8-2.5 5.2-7.8 52.5-1.4 12.6-3.5 31.4-4.7 41.7l-2.1 18.7-48.6.3-48.6.3-5 3.1C7.2 141.1 3 148.4 3 156.7c0 4.4.6 7.6 2 10.2 2.7 5.4 10.1 11.6 15.5 13 2.9.7 19.2 1.1 47.8 1.1 40.9 0 43.5.1 43.1 1.7-.4 1.9-8.4 73.2-8.4 75.2 0 .8-11.4 1.1-41 1.1H20.9l-4.8 2.5C7.5 265.8 3 273 3 282.5s4.5 16.7 13.1 21l4.8 2.5H97.6l-5.3 46.7c-2.9 25.8-5.4 50.3-5.5 54.5-.1 7 .2 8.2 2.8 12.5 1.7 2.7 5.1 6.2 7.8 8 4.5 3.1 5.4 3.3 13 3.3 8.9 0 10.2-.5 16.8-6.8 4.8-4.6 6.3-9.3 8.2-26.7.9-7.7 2.7-23.9 4-36 1.4-12.1 3.3-29.5 4.3-38.8l1.7-16.7H214.7l.5-8.3c.7-9.8 1.4-11.5 8.2-18.5 8.6-9 7-8.7 41.4-9l30.2-.3V259h-9.5c-9.4 0-9.5 0-9.1-2.3.3-1.2 1.5-10.8 2.6-21.2 1.2-10.5 3-26.5 4.1-35.7 1-9.2 1.9-17.2 1.9-17.8 0-.7 12.3-1 38.5-1 23.5 0 40.3-.4 43.4-1.1 6.1-1.3 13.5-7.4 16.2-13.4 5.2-11.4.2-24.9-11.5-30.9l-4.9-2.6H290.4l5.3-46.8c5.3-47.1 6.1-59 4.3-63.6-1.4-3.7-7.9-10.5-12.1-12.7C285.2 8.6 282 8 277.2 8c-6.2 0-7.5.4-11.8 3.2-9.2 6.2-10.1 8.6-12.9 31.8-3.4 28.9-7.2 63.4-8.7 77.7l-1.2 12.3h-77.8l.6-4.3c.3-2.3.8-7.1 1.1-10.7.6-6.1 2.5-23.4 7.6-68 1.2-10.8 1.9-21.1 1.6-23.1-1.1-5.5-6.2-12.6-11.4-15.9-4.2-2.7-5.6-3-12.3-3-7.2 0-8 .2-13 3.7zm97.5 174.5c-.4 2.9-1.5 12.9-2.5 22.3-1.1 9.3-2.7 24.5-3.7 33.7l-1.7 16.8H150.9l.6-6.3c.3-3.4 1.7-15.7 3-27.2 1.3-11.6 2.9-26.3 3.6-32.8l1.2-11.7H237l-.5 5.2z"/%3E%3Cpath fill="%23b8b3c0" d="M317.2 207c-1.8 1.1-4.1 3.4-5.2 5.2-1.9 3.1-2 5.1-2 38V285h-34.7c-33 0-35 .1-38.1 2-6.7 4.1-7.2 6-7.2 30s.5 25.9 7.2 30c3.1 1.9 5.1 2 38.1 2H310v34.7c0 33 .1 35 2 38.1 4.1 6.7 6 7.2 30 7.2s25.9-.5 30-7.2c1.9-3.1 2-5.1 2-38.1V349h34.8c32.9 0 34.9-.1 38-2 6.7-4.1 7.2-6 7.2-30s-.5-25.9-7.2-30c-3.1-1.9-5.1-2-38-2H374v-34.8c0-32.9-.1-34.9-2-38-4.1-6.7-6-7.2-30-7.2-19.7 0-21.8.2-24.8 2z"/%3E%3Cpath fill="%23b8b3c0" d="M217.2 359.7c-5 43.2-5.5 50-4.2 54.7 1.5 5.4 7.5 12.7 12.4 15 5.2 2.4 17.1 2.2 21.6-.5 8.9-5.3 12.3-11.7 13.4-25.4.9-10.2 3.5-33.2 4.2-36.6l.5-2.7-15.3-.4c-10.1-.2-16.1-.8-17.8-1.7-1.4-.7-5-3.8-8.1-6.8l-5.6-5.4-1.1 9.8z"/%3E%3C/svg%3E'); + --icon-reply: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23b8b3c0' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23b8b3c0' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23b8b3c0' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23b8b3c0' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-home-notification: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23b8b3c0" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23b8b3c0" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-star: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" stroke="%23b8b3c0" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-star-active: url("data:image/svg+xml, %3Csvg fill='%23b8b3c0' xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m212.086-50.607 70.652-305.306L45.52-561.305l312.871-26.696L480-876.176l121.609 288.175 312.871 26.696-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-star-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23b8b3c0' width='18' height='18' viewBox='0 -960 960 960' class='icon icon-star' aria-hidden='true'%3E%3Cpath d='m330.955-216.328 149.066-89 149.066 90.023-40.305-168.391 131.217-114.347-172.956-14.87L480-671.869l-67.043 158.521-172.956 14.305 131.427 113.796-40.473 168.919ZM212.086-50.608l70.652-305.305L45.52-561.305l312.645-26.579L480-876.176l121.835 288.292 312.645 26.579-237.218 205.392 71.217 305.306L480-213.173 212.086-50.607ZM480-433.87Z'%3E%3C/path%3E%3C/svg%3E"); + --icon-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="%23b8b3c0" stroke="%23b8b3c0" stroke-width="5.5" viewBox="0 0 68 68"%3E%3Cpath d="M31.4 3.8c-.7.4-2.5 5-4.1 10.2l-2.9 9.5-9.9.5c-5.5.3-10.6.9-11.3 1.3-.6.5-1.2 1.9-1.2 3.3 0 2 1.5 3.4 8 7.5 4.4 2.8 8 5.5 8 6s-1.3 4.5-3 9.1c-3.6 9.7-3.7 11.4-.9 12.8 2.7 1.5 3.5 1.1 12.4-5.6l7.5-5.6 8.2 6.1c8.4 6.3 11.2 7.1 13.2 3.9.8-1.4.3-3.9-2.2-11-1.8-5.1-3.2-9.6-3.2-9.9 0-.4 3.6-3 8-5.8 6.5-4.1 8-5.5 8-7.5 0-1.4-.6-2.8-1.2-3.3-.7-.4-5.8-1-11.3-1.3l-9.9-.5-2.9-9.5C37.8 4.6 36.9 3 34 3c-.8 0-2 .4-2.6.8z"/%3E%3C/svg%3E%0A'); + --icon-bookmark: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + + /* Profile icons */ + --icon-github: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"%3E%3Cpath d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"%3E%3C/path%3E%3C/svg%3E'); + --icon-youtube: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"%3E%3Cpath d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"%3E%3C/path%3E%3Cpolygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"%3E%3C/polygon%3E%3C/svg%3E'); + --icon-link: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"%3E%3Cpath d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"%3E%3C/path%3E%3Cline x1="8" y1="12" x2="16" y2="12"%3E%3C/line%3E%3C/svg%3E'); + --icon-twitter: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"%3E%3Cpath fill="%23b8b3c0" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/%3E%3C/svg%3E'); + --icon-twitch: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"%3E%3Cpath d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"%3E%3C/path%3E%3C/svg%3E'); + --icon-patreon: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EPatreon icon%3C/title%3E%3Cpath d='M15.386.524c-4.764 0-8.64 3.876-8.64 8.64 0 4.75 3.876 8.613 8.64 8.613 4.75 0 8.614-3.864 8.614-8.613C24 4.4 20.136.524 15.386.524M.003 23.537h4.22V.524H.003'/%3E%3C/svg%3E"); + --icon-threads: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='18' fill='%23b8b3c0' width='18' viewBox='0 0 448 512'%3E%3Cpath d='M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z'/%3E%3C/svg%3E"); + --icon-bluesky: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.467 8.467' width='18' height='18'%3E%3Cpath fill='%23b8b3c0' d='M67.256 111.972c-.545-.648-.629-.916-.411-1.323.15-.28.477-.52.727-.531.289-.013.204-.113-.236-.274-.862-.316-1.295-1.239-1.295-2.76 0-1.071.058-1.179.643-1.179.65 0 2.043 1.149 2.88 2.374l.446.655.446-.655c.837-1.225 2.23-2.373 2.88-2.373.584 0 .642.107.642 1.178 0 1.528-.435 2.45-1.295 2.74-.686.23-.686.233-.094.424.787.253.78 1.214-.017 1.961-.893.84-1.748.751-2.114-.218-.165-.437-.364-.794-.442-.794-.078 0-.3.357-.493.794-.47 1.06-1.365 1.053-2.267-.02z' transform='translate(-65.776 -105.112)'/%3E%3C/svg%3E"); + --icon-nostr: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 860 847'%3E%3Cpath d='M454.5 1.1c-67.6 10.3-115.8 27.2-160.4 56.4-16.5 10.9-19.3 12-29.1 12-9.5 0-14.6-2-20.8-7.9-5.5-5.1-7.5-9.9-9.2-22-1.9-13.1-6.8-20.4-17.3-25.7l-5.8-3-92.2.3c-68.2.3-93.1.7-95.6 1.6-4.5 1.5-11.4 8.3-15.2 14.8L6 32.8l.2 391.8.3 391.9 2.7 5c1.4 2.8 4.6 6.9 7.1 9.2 8.7 8 .9 7.3 96 8 88.7.6 108.3 0 116.7-3.3 5.9-2.4 13.5-11.7 14.9-18.4 1.4-6.4 1.4-67.7.1-103.3-3-78.6-15.8-158-48.1-297.2-21.2-91.3-27.3-126.1-28.6-162.6-1.5-43.2 7-69.1 28.8-87.6 6.9-5.8 19.7-12.8 29.7-16.2 14.8-5 57.5-12 96.2-15.7 21-2.1 84.2-2.4 104.4-.6 25.3 2.3 54.4 8.4 76 15.9 36.2 12.5 62.9 33.9 75.5 60.4 5.2 10.8 7.6 20.5 9.6 38.2 1.9 16.7 3.6 24 7.4 32.2 7.1 15.3 26.3 28.9 50.7 36 20.1 5.9 42 8.1 86.4 9 33.3.7 41.1 1.5 47.9 5 7.7 3.9 15.4 11.6 18.7 18.7 2.8 6 2.9 6.9 2.9 20.8 0 13.3-.2 14.9-2.4 19.5-1.4 2.8-5.6 8.1-9.5 12-10.8 10.7-28 18.8-48.8 23-13.6 2.7-38.7 3.5-110.3 3.5-73.4 0-79.9.3-96.7 4.5-33.7 8.5-56.9 25.7-70.1 52.1-15.4 30.7-26.8 91.8-31.7 170.4-2.9 46.1-3 159.5-.1 166.5 1.9 4.7 11.1 13.4 15.3 14.5 8.4 2.3 51.4 3 196.8 3 155 0 184.6-.6 191.7-3.5 5.5-2.3 12.1-9.2 13.4-13.9.6-2.1 1.5-10.5 2-18.5 1.9-32.6.2-482.7-2-504.1-4.6-44.3-20-97.2-39.7-136.1-14.5-28.7-30.3-50.8-51.9-72.5-27-27.1-54.5-45.9-89.8-61.4-31.8-13.9-71.3-24.3-104.5-27.5-16.8-1.7-98.5-1.9-108.7-.4z' fill='%23b8b3c0'/%3E%3Cpath d='M448 211.5c-21.4 5.9-38.1 21.3-45.8 42.7-2.4 6.5-2.7 8.7-2.6 19.8 0 11.3.3 13.3 3 21 3.9 11 8.7 18.2 18.1 27 11.2 10.4 22.4 15.1 39.8 16.5 27.9 2.3 56.6-18.3 64.9-46.5 8.1-27.5-5.4-60.4-30.1-73.3-12.3-6.4-17.5-7.8-30.3-8.3-8.2-.3-13.1 0-17 1.1z' fill='%23b8b3c0'/%3E%3C/svg%3E"); + --icon-paypal: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EPayPal icon%3C/title%3E%3Cpath d='M6.908 24H3.804c-.664 0-1.086-.529-.936-1.18l.149-.674h2.071c.666 0 1.336-.533 1.482-1.182l1.064-4.592c.15-.648.816-1.18 1.48-1.18h.883c3.789 0 6.734-.779 8.84-2.34s3.16-3.6 3.16-6.135c0-1.125-.195-2.055-.588-2.789 0-.016-.016-.031-.016-.046l.135.075c.75.465 1.32 1.064 1.711 1.814.404.75.598 1.68.598 2.791 0 2.535-1.049 4.574-3.164 6.135-2.1 1.545-5.055 2.324-8.834 2.324h-.9c-.66 0-1.334.525-1.484 1.186L8.39 22.812c-.149.645-.81 1.17-1.47 1.17L6.908 24zm-2.677-2.695H1.126c-.663 0-1.084-.529-.936-1.18L4.563 1.182C4.714.529 5.378 0 6.044 0h6.465c1.395 0 2.609.098 3.648.289 1.035.189 1.92.519 2.684.99.736.465 1.322 1.072 1.697 1.818.389.748.584 1.68.584 2.797 0 2.535-1.051 4.574-3.164 6.119-2.1 1.561-5.056 2.326-8.836 2.326h-.883c-.66 0-1.328.524-1.478 1.169L5.7 20.097c-.149.646-.817 1.172-1.485 1.172l.016.036zm7.446-17.369h-1.014c-.666 0-1.332.529-1.48 1.178l-.93 4.02c-.15.648.27 1.179.93 1.179h.766c1.664 0 2.97-.343 3.9-1.021.929-.686 1.395-1.654 1.395-2.912 0-.83-.301-1.445-.9-1.84-.6-.404-1.5-.605-2.686-.605l.019.001z'/%3E%3C/svg%3E"); + --icon-kofi: url("data:image/svg+xml, %3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EKo-fi icon%3C/title%3E%3Cpath d='M23.881 8.948c-.773-4.085-4.859-4.593-4.859-4.593H.723c-.604 0-.679.798-.679.798s-.082 7.324-.022 11.822c.164 2.424 2.586 2.672 2.586 2.672s8.267-.023 11.966-.049c2.438-.426 2.683-2.566 2.658-3.734 4.352.24 7.422-2.831 6.649-6.916zm-11.062 3.511c-1.246 1.453-4.011 3.976-4.011 3.976s-.121.119-.31.023c-.076-.057-.108-.09-.108-.09-.443-.441-3.368-3.049-4.034-3.954-.709-.965-1.041-2.7-.091-3.71.951-1.01 3.005-1.086 4.363.407 0 0 1.565-1.782 3.468-.963 1.904.82 1.832 3.011.723 4.311zm6.173.478c-.928.116-1.682.028-1.682.028V7.284h1.77s1.971.551 1.971 2.638c0 1.913-.985 2.667-2.059 3.015z'/%3E%3C/svg%3E"); + --icon-bandcamp: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%23b8b3c0' viewBox='0 0 512 512'%3E%3Cpath d='M105.6 191.2C98.1 204.8 33 325.2 33 325.6c0 .2 36.8.3 81.7.2l81.7-.3 37.5-69.4 37.6-69.4.3 70.2.2 70.2 10.3-.3 10.2-.3.3-6.8.3-6.7 3.2 4.2c2.2 2.9 5.6 5.5 10.1 7.8 6.8 3.5 7.1 3.5 19.5 3.5 12.3 0 12.8-.1 19.3-3.3 16.4-8 25.9-28.9 24.5-53.7-1.3-22.4-10.5-38.2-26.5-45.8-6.3-3-7.4-3.2-17.7-3.2-9.8 0-11.6.3-16.7 2.7-3.2 1.5-7.8 4.8-10.3 7.3l-4.5 4.7V185H109.1l-3.5 6.2zm226.1 51c5.3 2.4 8.7 6.5 12.7 14.8 2.9 6.1 3.1 7.2 3.1 18 0 12.9-1 17.1-5.7 24.9-4.7 7.6-11.5 11.4-20.6 11.4-15.3 0-24.4-9.6-27.4-28.6-2.1-13.4 1.5-28.2 8.5-35.5 7.6-7.9 19-9.9 29.4-5zM413.1 223.6c-21.1 5.7-34.1 26-34.1 53.1.1 22.8 9.6 39.9 26.8 48.1 6.5 3.1 8.6 3.6 17.4 4 15 .7 24.1-1.8 33.4-9.4 6.9-5.6 12.9-16.6 14.9-27.7l.7-3.7h-22l-.7 3.7c-1 5.5-3.9 10.6-8.1 14.2-4.8 4.3-7.7 5.3-14.9 5.3-16 .1-25.5-13.2-25.5-35.7 0-23.3 9.4-35.7 27-35.7 10.8 0 17.4 4.4 20.9 13.8l1.9 4.9 10.7.3 10.7.3-.7-4.7c-1.6-10.9-9.8-22.5-19.3-27.3-9.9-5-27.6-6.6-39.1-3.5z'/%3E%3C/svg%3E%0A"); + --icon-facebook: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23b8b3c0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-facebook'%3E%3Cpath d='M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z'%3E%3C/path%3E%3C/svg%3E"); + --icon-friendica: url("data:image/svg+xml, %3Csvg fill='%23b8b3c0' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1523.8 1536'%3E%3Cpath d='M0 276.4v983.2C0 1412 122.8 1536 274.4 1536h975.1c151.6 0 274.4-124 274.4-276.4V276.4C1523.8 124 1401.1 0 1249.4 0h-975C122.8 0 0 124 0 276.4zM1249.4 61.2c118.5 0 213.2 95.3 213.2 215.2v983.2c0 119.9-94.7 215.2-213.2 215.2H518.1V1106h487.5l-1.3-367.7-486.3 2.6V430.1h487.5V61.2h243.9z'/%3E%3C/svg%3E%0A"); + --icon-genderless-pronouns: url("data:image/svg+xml, %3Csvg fill='%23b8b3c0' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.334 12v-.02a9.354 9.354 0 1 0-2.74 6.614 8.963 8.963 0 0 0 2.74-6.462l-.001-.139V12zM24 12v.036c0 1.67-.349 3.258-.977 4.695l.029-.075c-1.226 2.905-3.491 5.17-6.318 6.367l-.078.029C15.282 23.651 13.682 24 12 24s-3.283-.349-4.733-.978l.077.03c-2.905-1.226-5.17-3.491-6.367-6.318l-.029-.078C.349 15.282 0 13.682 0 12s.349-3.283.978-4.733l-.03.077C2.174 4.439 4.439 2.174 7.266.977l.078-.029C8.718.349 10.318 0 12 0s3.283.349 4.733.978l-.077-.03c2.905 1.226 5.17 3.491 6.367 6.318l.029.078c.599 1.362.948 2.95.948 4.62v.039-.002z'/%3E%3C/svg%3E%0A"); + --icon-wordpress: url("data:image/svg+xml, %3Csvg width='18' height='18' fill='%23b8b3c0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z'/%3E%3C/svg%3E"); + --icon-mastodon: url("data:image/svg+xml, %0A%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23b8b3c0'%3E%3Ctitle%3EMastodon icon%3C/title%3E%3Cpath d='M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z'/%3E%3C/svg%3E"); + --icon-verified: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-verified-smaller: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="15" height="15" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-label: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"%3E%3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"%3E%3C/path%3E%3Cline x1="7" y1="7" x2="7.01" y2="7"%3E%3C/line%3E%3C/svg%3E'); + --icon-discord: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="18" height="18" %3E%3Cpath fill="%23b8b3c0" d="M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z"/%3E%3C/svg%3E'); + --icon-linkedin: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"%3E%3Cpath d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"%3E%3C/path%3E%3Crect x="2" y="9" width="4" height="12"%3E%3C/rect%3E%3Ccircle cx="4" cy="4" r="2"%3E%3C/circle%3E%3C/svg%3E'); + --icon-instagram: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%23b8b3c0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"%3E%3Crect x="2" y="2" width="20" height="20" rx="5" ry="5"%3E%3C/rect%3E%3Cpath d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"%3E%3C/path%3E%3Cline x1="17.5" y1="6.5" x2="17.51" y2="6.5"%3E%3C/line%3E%3C/svg%3E'); +} + +/* Light theme */ +body.theme-mastodon-light.layout-single-column { + --color-bg: #fff; + --color-fg: #000; + --color-border: #e6e1ed; + --color-dim: #9388a6; + --color-green: #17bf63; + --color-red: #e0245e; + --color-red-75: #e0245ebf; + --color-light-shade: #00000005; + --color-focusable-toot: rgba(0, 0, 0, 0.035); + --color-light-text: #1f1b23; + --color-mud: #e5e1ed; + --color-black-coral: #9188a6; + --color-profile-button-hover: #1e1b231a; + --color-column-link-hover: #1e1b231a; + --color-modal-overlay: #6a5b8366; + --color-dark: #f7f9f9; + --color-thread-line: #e1e8ed; + --color-topaz: #8899a6; + --color-light-purple: #9588a6; + --color-dark-electric-blue: #9088a6; + --color-bg-75: #ffffffbf; + --color-accent: var(--color-accent-dark); + --color-ghost-button-text: var(--color-accent-dark); + --color-bg-compose-form: rgb(147 136 166 / .2); + --color-bg-compose-form-focus: rgb(147 136 166 / .3); + --color-hashtag: var(--color-accent-dark); + --color-mention: var(--color-accent-dark); + + /* Misc */ + --compose-form-linear-gradient: linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 1) 53%, rgba(255, 255, 255, 0.8141631652661064) 76%, rgba(255, 255, 255, 0.7077205882352942) 87%, rgba(255, 255, 255, 0.458420868347339) 97%, rgba(255, 255, 255, 0) 100%); + + /* Icons for light theme */ + --icon-boost: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%239388a6' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%239388a6' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-status-prepend: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true"%3E%3Cg%3E%3Cpath fill="%2300ba7c" d="M4.75 3.79l4.603 4.3-1.706 1.82L6 8.38v7.37c0 .97.784 1.75 1.75 1.75H13V20H7.75c-2.347 0-4.25-1.9-4.25-4.25V8.38L1.853 9.91.147 8.09l4.603-4.3zm11.5 2.71H11V4h5.25c2.347 0 4.25 1.9 4.25 4.25v7.37l1.647-1.53 1.706 1.82-4.603 4.3-4.603-4.3 1.706-1.82L18 15.62V8.25c0-.97-.784-1.75-1.75-1.75z"%3E%3C/path%3E%3C/g%3E%3C/svg%3E'); + --icon-boost-notification-filter-bar: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%23717c9b' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-filter-bar-active: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='21' height='21' viewBox='0 0 136 136'%3E%3Cpath fill='%231f1b23' d='M51 23.8c0 .4 2.4 3.1 5.3 6l5.3 5.2h34.6l3.4 3.4 3.4 3.4v47.4l-6.7-6.1-6.8-6.1-4 4-4 4 13.8 13.7 13.7 13.8L122.5 99c7.4-7.4 13.5-13.7 13.5-14-.1-.3-1.7-2.3-3.6-4.4l-3.5-4-6.8 6.8-6.9 6.9-.4-25.4c-.3-23.8-.4-25.7-2.5-29.4-2.7-5.1-5.7-7.9-11.3-10.4-4.1-1.9-6.5-2.1-27.2-2.1-12.6 0-22.8.4-22.8.8zM13 37.5-.4 51l3.8 3.9 3.9 4 6.6-6.1 6.6-6 .5 24.4c.5 26.3.7 27.2 6.6 33.2 6 5.9 6.8 6.1 33.2 6.4 13.3.2 24.2-.1 24.2-.5 0-.5-2.2-3-4.8-5.6l-4.8-4.7-15.9-.1c-17.7 0-21.7-.9-24.9-5.2-2-2.7-2.1-4.2-2.3-26.5l-.2-23.6 6.7 6.7C42.5 55 46 58 46.6 58c.5 0 2.5-1.6 4.4-3.5l3.4-3.5L41 37.5C33.6 30.1 27.3 24 27 24c-.3 0-6.6 6.1-14 13.5z'/%3E%3C/svg%3E%0A"); + --icon-boost-notification-wrapper: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='24' height='24' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%2300ba7c' d='M6 4h15a1 1 0 0 1 1 1v7h-2V6H6v3L1 5l5-4v3zm12 16H3a1 1 0 0 1-1-1v-7h2v6h14v-3l5 4l-5 4v-3z'/%3E%3C/svg%3E"); + --icon-reply-nofitication-filter-bar-active: url('data:image/svg+xml, %3Csvg viewBox="0 0 24 24" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath fill="%231f1b23" d="M1.751 10c0-4.42 3.584-8 8.005-8h4.366a8.13 8.13 0 0 1 8.129 8.13c0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067A8.005 8.005 0 0 1 1.751 10zm8.005-6a6.005 6.005 0 1 0 .133 12.01l.351-.01h1.761v2.3l5.087-2.81A6.127 6.127 0 0 0 14.122 4H9.756z"/%3E%3Cellipse fill="%231f1b23" fill-rule="evenodd" stroke-width="1.28569" cx="11.835" cy="10.2" rx="9.117" ry="8.123"/%3E%3C/svg%3E%0A'); + --icon-reply: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%239388a6' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%239388a6' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-reply-conversation: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%239388a6' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' fill='%23F91880' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-detailed-status-action-bar-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark-column-link: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-column-link-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="%231f1b23" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-reply-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M1.751 10c0-4.42 3.584-8 8.005-8h4.366c4.49 0 8.129 3.64 8.129 8.13 0 2.96-1.607 5.68-4.196 7.11l-8.054 4.46v-3.69h-.067c-4.49.1-8.183-3.51-8.183-8.01zm8.005-6c-3.317 0-6.005 2.69-6.005 6 0 3.37 2.77 6.08 6.138 6.01l.351-.01h1.761v2.3l5.087-2.81c1.951-1.08 3.163-3.13 3.163-5.36 0-3.39-2.744-6.13-6.129-6.13H9.756z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-list: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EList%3C/title%3E%3Cpath fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M160 144h288M160 256h288M160 368h288"/%3E%3Ccircle cx="80" cy="144" r="16" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="256" r="16" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3Ccircle cx="80" cy="368" r="16" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/%3E%3C/svg%3E'); + --icon-heart: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%239388a6' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-hover: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' width='20' height='20' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23F91880' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='20' height='20' aria-hidden='true' fill='%231f1b23'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-notification: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%23F91880'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-heart-column-link: url("data:image/svg+xml, %0A%3Csvg viewBox='0 0 24 24' color='inherit' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%231f1b23' d='M16.5 3C19.538 3 22 5.5 22 9c0 7-7.5 11-10 12.5C9.5 20 2 16 2 9c0-3.5 2.5-6 5.5-6C9.36 3 11 4 12 5c1-1 2.64-2 4.5-2zm-3.566 15.604a26.953 26.953 0 0 0 2.42-1.701C18.335 14.533 20 11.943 20 9c0-2.36-1.537-4-3.5-4c-1.076 0-2.24.57-3.086 1.414L12 7.828l-1.414-1.414C9.74 5.57 8.576 5 7.5 5C5.56 5 4 6.656 4 9c0 2.944 1.666 5.533 4.645 7.903c.745.592 1.54 1.145 2.421 1.7c.299.189.595.37.934.572c.339-.202.635-.383.934-.571z'/%3E%3C/svg%3E"); + --icon-heart-column-link-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' aria-hidden='true' fill='%231f1b23'%3E%3Cg%3E%3Cpath d='M20.884 13.19c-1.351 2.48-4.001 5.12-8.379 7.67l-.503.3-.504-.3c-4.379-2.55-7.029-5.19-8.382-7.67-1.36-2.5-1.41-4.86-.514-6.67.887-1.79 2.647-2.91 4.601-3.01 1.651-.09 3.368.56 4.798 2.01 1.429-1.45 3.146-2.1 4.796-2.01 1.954.1 3.714 1.22 4.601 3.01.896 1.81.846 4.17-.514 6.67z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-star-column-link: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-star-column-link-active: url('data:image/svg+xml, %3Csvg width="24" height="24" stroke-width="2" viewBox="0 0 24 24" fill="%231f1b23" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M8.587 8.236l2.598-5.232a.911.911 0 011.63 0l2.598 5.232 5.808.844a.902.902 0 01.503 1.542l-4.202 4.07.992 5.75c.127.738-.653 1.3-1.32.952L12 18.678l-5.195 2.716c-.666.349-1.446-.214-1.319-.953l.992-5.75-4.202-4.07a.902.902 0 01.503-1.54l5.808-.845z" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-direct-messages: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-direct-messages-active: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="%231f1b23" stroke="%23ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-mail"%3E%3Cpath d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"%3E%3C/path%3E%3Cpolyline points="22, 6 12, 13 2, 6"%3E%3C/polyline%3E%3C/svg%3E'); + --icon-users-column-link: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%231f1b23" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%231f1b23" stroke-width="1.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-users-column-link-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%23000000"%3E%3Cpath d="M1 20v-1a7 7 0 017-7v0a7 7 0 017 7v1" stroke="%231f1b23" stroke-width="2" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M13 14v0a5 5 0 015-5v0a5 5 0 015 5v.5" stroke="%231f1b23" stroke-width="2.5" stroke-linecap="round"%3E%3C/path%3E%3Cpath d="M8 12a4 4 0 100-8 4 4 0 000 8zM18 9a3 3 0 100-6 3 3 0 000 6z" stroke="%231f1b23" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-status-hover: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23595aff' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5zM6.5 4c-.276 0-.5.22-.5.5v14.56l6-4.29 6 4.29V4.5c0-.28-.224-.5-.5-.5h-11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bookmark: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%239388a6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bookmark"%3E%3Cpath d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"%3E%3C/path%3E%3C/svg%3E'); + --icon-bookmark-active: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23F91880' viewBox='0 0 24 24' aria-hidden='true'%3E%3Cg%3E%3Cpath d='M4 4.5C4 3.12 5.119 2 6.5 2h11C18.881 2 20 3.12 20 4.5v18.44l-8-5.71-8 5.71V4.5z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E"); + --icon-bell: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-active: url('data:image/svg+xml, %3Csvg width="24px" height="24px" stroke-width="2" viewBox="0 0 24 24" fill="%231f1b23" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-bell-header-tabs-active: url('data:image/svg+xml, %3Csvg width="18px" height="18px" stroke-width="1.5" viewBox="0 0 24 24" fill="%231f1b23" xmlns="http://www.w3.org/2000/svg" color="%231f1b23"%3E%3Cpath d="M18 8.4c0-1.697-.632-3.325-1.757-4.525C15.117 2.675 13.59 2 12 2c-1.591 0-3.117.674-4.243 1.875C6.632 5.075 6 6.703 6 8.4 6 15.867 3 18 3 18h18s-3-2.133-3-9.6zM13.73 21a1.999 1.999 0 01-3.46 0" stroke="%231f1b23" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"%3E%3C/path%3E%3C/svg%3E'); + --icon-home-notification: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%23717c9b" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-home-notification-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%231f1b23" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-home: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M80 212v236a16 16 0 0016 16h96V328a24 24 0 0124-24h80a24 24 0 0124 24v136h96a16 16 0 0016-16V212" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3Cpath d="M480 256L266.89 52c-5-5.28-16.69-5.34-21.78 0L32 256M400 179V64h-48v69" fill="none" stroke="%231f1b23" stroke-linecap="round" stroke-linejoin="round" stroke-width="38"/%3E%3C/svg%3E'); + --icon-more: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%231f1b23' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-more-status-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%239388a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-more-horizontal'%3E%3Ccircle cx='12' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='19' cy='12' r='1'%3E%3C/circle%3E%3Ccircle cx='5' cy='12' r='1'%3E%3C/circle%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%231f1b23' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-close-action-bar: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%239388a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-x'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-plus: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%239388a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-plus'%3E%3Cline x1='12' y1='5' x2='12' y2='19'%3E%3C/line%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-cog: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' width='26' height='26' viewBox='0 0 512 512' fill='%231f1b23'%3E%3Cpath d='M456.7 242.27l-26.08-4.2a8 8 0 01-6.6-6.82c-.5-3.2-1-6.41-1.7-9.51a8.08 8.08 0 013.9-8.62l23.09-12.82a8.05 8.05 0 003.9-9.92l-4-11a7.94 7.94 0 00-9.4-5l-25.89 5a8 8 0 01-8.59-4.11q-2.25-4.2-4.8-8.41a8.16 8.16 0 01.7-9.52l17.29-19.94a8 8 0 00.3-10.62l-7.49-9a7.88 7.88 0 00-10.5-1.51l-22.69 13.63a8 8 0 01-9.39-.9c-2.4-2.11-4.9-4.21-7.4-6.22a8 8 0 01-2.5-9.11l9.4-24.75A8 8 0 00365 78.77l-10.2-5.91a8 8 0 00-10.39 2.21l-16.64 20.84a7.15 7.15 0 01-8.5 2.5s-5.6-2.3-9.8-3.71A8 8 0 01304 87l.4-26.45a8.07 8.07 0 00-6.6-8.42l-11.59-2a8.07 8.07 0 00-9.1 5.61l-8.6 25.05a8 8 0 01-7.79 5.41h-9.8a8.07 8.07 0 01-7.79-5.41l-8.6-25.05a8.07 8.07 0 00-9.1-5.61l-11.59 2a8.07 8.07 0 00-6.6 8.42l.4 26.45a8 8 0 01-5.49 7.71c-2.3.9-7.3 2.81-9.7 3.71-2.8 1-6.1.2-8.8-2.91l-16.51-20.34A8 8 0 00156.75 73l-10.2 5.91a7.94 7.94 0 00-3.3 10.09l9.4 24.75a8.06 8.06 0 01-2.5 9.11c-2.5 2-5 4.11-7.4 6.22a8 8 0 01-9.39.9L111 116.14a8 8 0 00-10.5 1.51l-7.49 9a8 8 0 00.3 10.62l17.29 19.94a8 8 0 01.7 9.52q-2.55 4-4.8 8.41a8.11 8.11 0 01-8.59 4.11l-25.89-5a8 8 0 00-9.4 5l-4 11a8.05 8.05 0 003.9 9.92L85.58 213a7.94 7.94 0 013.9 8.62c-.6 3.2-1.2 6.31-1.7 9.51a8.08 8.08 0 01-6.6 6.82l-26.08 4.2a8.09 8.09 0 00-7.1 7.92v11.72a7.86 7.86 0 007.1 7.92l26.08 4.2a8 8 0 016.6 6.82c.5 3.2 1 6.41 1.7 9.51a8.08 8.08 0 01-3.9 8.62L62.49 311.7a8.05 8.05 0 00-3.9 9.92l4 11a7.94 7.94 0 009.4 5l25.89-5a8 8 0 018.59 4.11q2.25 4.2 4.8 8.41a8.16 8.16 0 01-.7 9.52l-17.29 19.96a8 8 0 00-.3 10.62l7.49 9a7.88 7.88 0 0010.5 1.51l22.69-13.63a8 8 0 019.39.9c2.4 2.11 4.9 4.21 7.4 6.22a8 8 0 012.5 9.11l-9.4 24.75a8 8 0 003.3 10.12l10.2 5.91a8 8 0 0010.39-2.21l16.79-20.64c2.1-2.6 5.5-3.7 8.2-2.6 3.4 1.4 5.7 2.2 9.9 3.61a8 8 0 015.49 7.71l-.4 26.45a8.07 8.07 0 006.6 8.42l11.59 2a8.07 8.07 0 009.1-5.61l8.6-25a8 8 0 017.79-5.41h9.8a8.07 8.07 0 017.79 5.41l8.6 25a8.07 8.07 0 009.1 5.61l11.59-2a8.07 8.07 0 006.6-8.42l-.4-26.45a8 8 0 015.49-7.71c4.2-1.41 7-2.51 9.6-3.51s5.8-1 8.3 2.1l17 20.94A8 8 0 00355 439l10.2-5.91a7.93 7.93 0 003.3-10.12l-9.4-24.75a8.08 8.08 0 012.5-9.12c2.5-2 5-4.1 7.4-6.21a8 8 0 019.39-.9L401 395.66a8 8 0 0010.5-1.51l7.49-9a8 8 0 00-.3-10.62l-17.29-19.94a8 8 0 01-.7-9.52q2.55-4.05 4.8-8.41a8.11 8.11 0 018.59-4.11l25.89 5a8 8 0 009.4-5l4-11a8.05 8.05 0 00-3.9-9.92l-23.09-12.82a7.94 7.94 0 01-3.9-8.62c.6-3.2 1.2-6.31 1.7-9.51a8.08 8.08 0 016.6-6.82l26.08-4.2a8.09 8.09 0 007.1-7.92V250a8.25 8.25 0 00-7.27-7.73zM256 112a143.82 143.82 0 01139.38 108.12A16 16 0 01379.85 240H274.61a16 16 0 01-13.91-8.09l-52.1-91.71a16 16 0 019.85-23.39A146.94 146.94 0 01256 112zM112 256a144 144 0 0143.65-103.41 16 16 0 0125.17 3.47L233.06 248a16 16 0 010 15.87l-52.67 91.7a16 16 0 01-25.18 3.36A143.94 143.94 0 01112 256zm144 144a146.9 146.9 0 01-38.19-4.95 16 16 0 01-9.76-23.44l52.58-91.55a16 16 0 0113.88-8H379.9a16 16 0 0115.52 19.88A143.84 143.84 0 01256 400z'/%3E%3C/svg%3E"); + --icon-sliders-contrast: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%231f1b23' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-sliders: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%23b8b3c0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-sliders'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-globe: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.00 0.00 512.00 512.00'%3E%3Cpath fill='%231f1b23' d=' M 512.00 383.82 L 512.00 385.55 C 509.71 419.39 473.05 422.09 447.81 418.87 Q 423.66 415.79 400.31 408.70 Q 358.58 396.03 318.76 378.21 Q 218.90 333.52 129.46 270.53 C 92.32 244.38 56.82 216.22 27.43 182.58 C 14.63 167.94 1.88 149.41 0.00 128.96 L 0.00 125.94 C 3.19 91.33 40.56 90.05 66.57 93.40 Q 81.64 95.34 88.25 97.23 C 99.02 100.32 103.61 112.14 97.29 121.55 C 92.20 129.11 85.23 129.19 76.43 127.41 C 64.10 124.92 44.84 121.70 32.89 126.36 A 1.55 1.54 74.3 0 0 31.93 128.08 C 34.07 139.90 43.53 152.31 51.28 161.22 Q 68.49 181.02 88.94 198.55 Q 89.49 199.02 89.73 198.34 Q 110.62 140.43 161.78 107.51 C 234.44 60.76 331.69 75.26 388.09 139.91 C 446.04 206.35 446.71 303.97 388.97 370.93 Q 388.58 371.38 389.14 371.58 Q 413.92 380.31 439.48 385.26 C 451.88 387.65 467.05 389.92 479.11 385.65 A 1.51 1.50 -14.2 0 0 480.10 384.00 C 477.90 369.69 463.57 354.46 454.60 343.62 C 440.99 327.16 463.05 306.29 479.15 323.40 C 495.03 340.29 510.01 360.98 512.00 383.82 Z M 115.39 210.46 Q 136.86 228.57 159.38 244.15 C 223.66 288.63 294.05 327.49 367.32 354.98 A 1.46 1.44 30.8 0 0 368.93 354.58 Q 400.10 318.66 405.76 270.75 Q 407.08 259.64 406.38 249.56 C 401.05 172.60 342.31 113.52 265.72 106.81 Q 255.74 105.94 245.77 106.92 C 185.42 112.87 134.96 151.32 114.89 208.65 Q 114.52 209.72 115.39 210.46 Z M 295.33 328.94 A 0.34 0.34 0.0 0 0 295.16 329.58 L 299.51 331.72 A 0.34 0.34 0.0 0 0 300.00 331.41 L 300.00 329.51 A 0.34 0.34 0.0 0 0 299.68 329.17 L 295.33 328.94 Z'%0A/%3E%3Cpath fill='%231f1b23' d=' M 307.69 408.30 C 316.86 412.38 316.05 421.82 306.19 424.66 C 209.45 452.48 109.79 396.22 85.13 298.09 Q 83.95 293.40 84.37 291.18 C 85.73 284.03 93.55 284.22 98.50 287.80 Q 197.11 359.12 307.69 408.30 Z M 263.31 410.94 Q 262.74 410.51 262.12 410.23 Q 199.27 381.56 142.55 342.19 Q 129.49 333.13 117.25 323.09 A 0.18 0.18 0.0 0 0 116.97 323.31 C 142.74 377.01 195.57 410.10 255.44 411.80 Q 261.32 411.97 263.93 411.40 Q 264.37 411.30 264.00 411.06 Q 263.69 410.85 263.31 410.94 Z'%0A/%3E%3C/svg%3E"); + --icon-globe-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%231f1b23" viewBox="0 0 512 512"%3E%3Cpath d="M96.85 286.62a8 8 0 00-12.53 8.25C102.07 373.28 172.3 432 256 432a175.31 175.31 0 0052.41-8 8 8 0 00.79-15 1120 1120 0 01-109.48-55.61 1126.24 1126.24 0 01-102.87-66.77zM492.72 339.51c-4.19-5.58-9.11-11.44-14.7-17.53a15.83 15.83 0 00-26.56 5.13c0 .16-.11.31-.17.47a15.75 15.75 0 003.15 16.06c22.74 25 26.42 38.51 25.48 41.36-2 2.23-17.05 6.89-58.15-3.53q-8.83-2.24-19.32-5.46-6.76-2.08-13.79-4.49a176.76 176.76 0 0019.54-27.25c.17-.29.35-.58.52-.88A175.39 175.39 0 00432 256a178.87 178.87 0 00-1-19c-9.57-88.17-84.4-157-175-157a175.37 175.37 0 00-106.4 35.89 177.4 177.4 0 00-45.83 51.84c-.16.29-.34.58-.51.87a175.48 175.48 0 00-13.83 30.52q-5.59-4.87-10.79-9.67c-5.39-5-10.17-9.63-14.42-14-29.57-30.26-33.09-45.61-32.16-48.45 2-2.23 15.54-5.87 48.62 1.31A15.82 15.82 0 0096.22 123l.36-.44a15.74 15.74 0 00-8.67-25.43A237.38 237.38 0 0064.13 93c-30.72-3.53-50.83 2.52-59.78 18-3.24 5.58-6.35 15.09-2.72 28.6C7 159.66 26.14 184 53.23 209.5c8.63 8.13 18.06 16.37 28.12 24.64 7.32 6 15 12.06 22.9 18.08q7.91 6 16.15 12T137.1 276c25.41 17.61 52.26 34.52 78.59 49.69q14.34 8.26 28.64 16t28.37 14.81c21.9 11 43.35 20.92 63.86 29.43q13.19 5.48 25.81 10.16c11.89 4.42 23.37 8.31 34.31 11.59l1.1.33c25.73 7.66 47.42 11.69 64.48 12H464c21.64 0 36.3-6.38 43.58-19 9.09-15.62 4.08-36.32-14.86-61.5z"/%3E%3C/svg%3E'); + --icon-home-column-link-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" class="ionicon" fill="%231f1b23" width="24" height="24" viewBox="0 0 512 512"%3E%3Ctitle%3EHome%3C/title%3E%3Cpath d="M261.56 101.28a8 8 0 00-11.06 0L66.4 277.15a8 8 0 00-2.47 5.79L63.9 448a32 32 0 0032 32H192a16 16 0 0016-16V328a8 8 0 018-8h80a8 8 0 018 8v136a16 16 0 0016 16h96.06a32 32 0 0032-32V282.94a8 8 0 00-2.47-5.79z"/%3E%3Cpath d="M490.91 244.15l-74.8-71.56V64a16 16 0 00-16-16h-48a16 16 0 00-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0043 267.56L250.5 69.28a8 8 0 0111.06 0l207.52 198.28a16 16 0 0022.59-.44c6.14-6.36 5.63-16.86-.76-22.97z"/%3E%3C/svg%3E'); + --icon-hashtag: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-hashtag-active: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="%231f1b23" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="feather feather-hash"%3E%3Cline x1="4" y1="9" x2="20" y2="9"%3E%3C/line%3E%3Cline x1="4" y1="15" x2="20" y2="15"%3E%3C/line%3E%3Cline x1="10" y1="3" x2="8" y2="21"%3E%3C/line%3E%3Cline x1="16" y1="3" x2="14" y2="21"%3E%3C/line%3E%3C/svg%3E'); + --icon-search: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%239FA4BB' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + --icon-search-opaque: url("data:image/svg+xml;charset=utf-8, %3Csvg xmlns='http://www.w3.org/2000/svg' fill='%231f1b23' aria-hidden='true' viewBox='0 0 24 24'%3E%3Cpath d='M10.25 3.75a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13zm-8.5 6.5a8.5 8.5 0 1 1 15.176 5.262l4.781 4.781-1.414 1.414-4.781-4.781A8.5 8.5 0 0 1 1.75 10.25z'/%3E%3C/svg%3E"); + + /* Profile icons */ + --icon-github: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"%3E%3Cpath d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"%3E%3C/path%3E%3C/svg%3E'); + --icon-youtube: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-youtube"%3E%3Cpath d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"%3E%3C/path%3E%3Cpolygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"%3E%3C/polygon%3E%3C/svg%3E'); + --icon-link: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link-2"%3E%3Cpath d="M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3"%3E%3C/path%3E%3Cline x1="8" y1="12" x2="16" y2="12"%3E%3C/line%3E%3C/svg%3E'); + --icon-twitter: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"%3E%3Cpath fill="%239FA4BB" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/%3E%3C/svg%3E'); + --icon-twitch: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-twitch"%3E%3Cpath d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"%3E%3C/path%3E%3C/svg%3E'); + --icon-patreon: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EPatreon icon%3C/title%3E%3Cpath d='M15.386.524c-4.764 0-8.64 3.876-8.64 8.64 0 4.75 3.876 8.613 8.64 8.613 4.75 0 8.614-3.864 8.614-8.613C24 4.4 20.136.524 15.386.524M.003 23.537h4.22V.524H.003'/%3E%3C/svg%3E"); + --icon-threads: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='18' fill='%239FA4BB' width='18' viewBox='0 0 448 512'%3E%3Cpath d='M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z'/%3E%3C/svg%3E"); + --icon-bluesky: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.467 8.467' width='18' height='18'%3E%3Cpath fill='%239FA4BB' d='M67.256 111.972c-.545-.648-.629-.916-.411-1.323.15-.28.477-.52.727-.531.289-.013.204-.113-.236-.274-.862-.316-1.295-1.239-1.295-2.76 0-1.071.058-1.179.643-1.179.65 0 2.043 1.149 2.88 2.374l.446.655.446-.655c.837-1.225 2.23-2.373 2.88-2.373.584 0 .642.107.642 1.178 0 1.528-.435 2.45-1.295 2.74-.686.23-.686.233-.094.424.787.253.78 1.214-.017 1.961-.893.84-1.748.751-2.114-.218-.165-.437-.364-.794-.442-.794-.078 0-.3.357-.493.794-.47 1.06-1.365 1.053-2.267-.02z' transform='translate(-65.776 -105.112)'/%3E%3C/svg%3E"); + --icon-nostr: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 860 847'%3E%3Cpath d='M454.5 1.1c-67.6 10.3-115.8 27.2-160.4 56.4-16.5 10.9-19.3 12-29.1 12-9.5 0-14.6-2-20.8-7.9-5.5-5.1-7.5-9.9-9.2-22-1.9-13.1-6.8-20.4-17.3-25.7l-5.8-3-92.2.3c-68.2.3-93.1.7-95.6 1.6-4.5 1.5-11.4 8.3-15.2 14.8L6 32.8l.2 391.8.3 391.9 2.7 5c1.4 2.8 4.6 6.9 7.1 9.2 8.7 8 .9 7.3 96 8 88.7.6 108.3 0 116.7-3.3 5.9-2.4 13.5-11.7 14.9-18.4 1.4-6.4 1.4-67.7.1-103.3-3-78.6-15.8-158-48.1-297.2-21.2-91.3-27.3-126.1-28.6-162.6-1.5-43.2 7-69.1 28.8-87.6 6.9-5.8 19.7-12.8 29.7-16.2 14.8-5 57.5-12 96.2-15.7 21-2.1 84.2-2.4 104.4-.6 25.3 2.3 54.4 8.4 76 15.9 36.2 12.5 62.9 33.9 75.5 60.4 5.2 10.8 7.6 20.5 9.6 38.2 1.9 16.7 3.6 24 7.4 32.2 7.1 15.3 26.3 28.9 50.7 36 20.1 5.9 42 8.1 86.4 9 33.3.7 41.1 1.5 47.9 5 7.7 3.9 15.4 11.6 18.7 18.7 2.8 6 2.9 6.9 2.9 20.8 0 13.3-.2 14.9-2.4 19.5-1.4 2.8-5.6 8.1-9.5 12-10.8 10.7-28 18.8-48.8 23-13.6 2.7-38.7 3.5-110.3 3.5-73.4 0-79.9.3-96.7 4.5-33.7 8.5-56.9 25.7-70.1 52.1-15.4 30.7-26.8 91.8-31.7 170.4-2.9 46.1-3 159.5-.1 166.5 1.9 4.7 11.1 13.4 15.3 14.5 8.4 2.3 51.4 3 196.8 3 155 0 184.6-.6 191.7-3.5 5.5-2.3 12.1-9.2 13.4-13.9.6-2.1 1.5-10.5 2-18.5 1.9-32.6.2-482.7-2-504.1-4.6-44.3-20-97.2-39.7-136.1-14.5-28.7-30.3-50.8-51.9-72.5-27-27.1-54.5-45.9-89.8-61.4-31.8-13.9-71.3-24.3-104.5-27.5-16.8-1.7-98.5-1.9-108.7-.4z' fill='%239FA4BB'/%3E%3Cpath d='M448 211.5c-21.4 5.9-38.1 21.3-45.8 42.7-2.4 6.5-2.7 8.7-2.6 19.8 0 11.3.3 13.3 3 21 3.9 11 8.7 18.2 18.1 27 11.2 10.4 22.4 15.1 39.8 16.5 27.9 2.3 56.6-18.3 64.9-46.5 8.1-27.5-5.4-60.4-30.1-73.3-12.3-6.4-17.5-7.8-30.3-8.3-8.2-.3-13.1 0-17 1.1z' fill='%239FA4BB'/%3E%3C/svg%3E"); + --icon-paypal: url("data:image/svg+xml, %0A%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EPayPal icon%3C/title%3E%3Cpath d='M6.908 24H3.804c-.664 0-1.086-.529-.936-1.18l.149-.674h2.071c.666 0 1.336-.533 1.482-1.182l1.064-4.592c.15-.648.816-1.18 1.48-1.18h.883c3.789 0 6.734-.779 8.84-2.34s3.16-3.6 3.16-6.135c0-1.125-.195-2.055-.588-2.789 0-.016-.016-.031-.016-.046l.135.075c.75.465 1.32 1.064 1.711 1.814.404.75.598 1.68.598 2.791 0 2.535-1.049 4.574-3.164 6.135-2.1 1.545-5.055 2.324-8.834 2.324h-.9c-.66 0-1.334.525-1.484 1.186L8.39 22.812c-.149.645-.81 1.17-1.47 1.17L6.908 24zm-2.677-2.695H1.126c-.663 0-1.084-.529-.936-1.18L4.563 1.182C4.714.529 5.378 0 6.044 0h6.465c1.395 0 2.609.098 3.648.289 1.035.189 1.92.519 2.684.99.736.465 1.322 1.072 1.697 1.818.389.748.584 1.68.584 2.797 0 2.535-1.051 4.574-3.164 6.119-2.1 1.561-5.056 2.326-8.836 2.326h-.883c-.66 0-1.328.524-1.478 1.169L5.7 20.097c-.149.646-.817 1.172-1.485 1.172l.016.036zm7.446-17.369h-1.014c-.666 0-1.332.529-1.48 1.178l-.93 4.02c-.15.648.27 1.179.93 1.179h.766c1.664 0 2.97-.343 3.9-1.021.929-.686 1.395-1.654 1.395-2.912 0-.83-.301-1.445-.9-1.84-.6-.404-1.5-.605-2.686-.605l.019.001z'/%3E%3C/svg%3E"); + --icon-kofi: url("data:image/svg+xml, %3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EKo-fi icon%3C/title%3E%3Cpath d='M23.881 8.948c-.773-4.085-4.859-4.593-4.859-4.593H.723c-.604 0-.679.798-.679.798s-.082 7.324-.022 11.822c.164 2.424 2.586 2.672 2.586 2.672s8.267-.023 11.966-.049c2.438-.426 2.683-2.566 2.658-3.734 4.352.24 7.422-2.831 6.649-6.916zm-11.062 3.511c-1.246 1.453-4.011 3.976-4.011 3.976s-.121.119-.31.023c-.076-.057-.108-.09-.108-.09-.443-.441-3.368-3.049-4.034-3.954-.709-.965-1.041-2.7-.091-3.71.951-1.01 3.005-1.086 4.363.407 0 0 1.565-1.782 3.468-.963 1.904.82 1.832 3.011.723 4.311zm6.173.478c-.928.116-1.682.028-1.682.028V7.284h1.77s1.971.551 1.971 2.638c0 1.913-.985 2.667-2.059 3.015z'/%3E%3C/svg%3E"); + --icon-bandcamp: url("data:image/svg+xml, %3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='%239FA4BB' viewBox='0 0 512 512'%3E%3Cpath d='M105.6 191.2C98.1 204.8 33 325.2 33 325.6c0 .2 36.8.3 81.7.2l81.7-.3 37.5-69.4 37.6-69.4.3 70.2.2 70.2 10.3-.3 10.2-.3.3-6.8.3-6.7 3.2 4.2c2.2 2.9 5.6 5.5 10.1 7.8 6.8 3.5 7.1 3.5 19.5 3.5 12.3 0 12.8-.1 19.3-3.3 16.4-8 25.9-28.9 24.5-53.7-1.3-22.4-10.5-38.2-26.5-45.8-6.3-3-7.4-3.2-17.7-3.2-9.8 0-11.6.3-16.7 2.7-3.2 1.5-7.8 4.8-10.3 7.3l-4.5 4.7V185H109.1l-3.5 6.2zm226.1 51c5.3 2.4 8.7 6.5 12.7 14.8 2.9 6.1 3.1 7.2 3.1 18 0 12.9-1 17.1-5.7 24.9-4.7 7.6-11.5 11.4-20.6 11.4-15.3 0-24.4-9.6-27.4-28.6-2.1-13.4 1.5-28.2 8.5-35.5 7.6-7.9 19-9.9 29.4-5zM413.1 223.6c-21.1 5.7-34.1 26-34.1 53.1.1 22.8 9.6 39.9 26.8 48.1 6.5 3.1 8.6 3.6 17.4 4 15 .7 24.1-1.8 33.4-9.4 6.9-5.6 12.9-16.6 14.9-27.7l.7-3.7h-22l-.7 3.7c-1 5.5-3.9 10.6-8.1 14.2-4.8 4.3-7.7 5.3-14.9 5.3-16 .1-25.5-13.2-25.5-35.7 0-23.3 9.4-35.7 27-35.7 10.8 0 17.4 4.4 20.9 13.8l1.9 4.9 10.7.3 10.7.3-.7-4.7c-1.6-10.9-9.8-22.5-19.3-27.3-9.9-5-27.6-6.6-39.1-3.5z'/%3E%3C/svg%3E%0A"); + --icon-facebook: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239FA4BB' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-facebook'%3E%3Cpath d='M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z'%3E%3C/path%3E%3C/svg%3E"); + --icon-friendica: url("data:image/svg+xml, %3Csvg fill='%239FA4BB' width='18' height='18' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1523.8 1536'%3E%3Cpath d='M0 276.4v983.2C0 1412 122.8 1536 274.4 1536h975.1c151.6 0 274.4-124 274.4-276.4V276.4C1523.8 124 1401.1 0 1249.4 0h-975C122.8 0 0 124 0 276.4zM1249.4 61.2c118.5 0 213.2 95.3 213.2 215.2v983.2c0 119.9-94.7 215.2-213.2 215.2H518.1V1106h487.5l-1.3-367.7-486.3 2.6V430.1h487.5V61.2h243.9z'/%3E%3C/svg%3E%0A"); + --icon-genderless-pronouns: url("data:image/svg+xml, %3Csvg fill='%239FA4BB' width='18' height='18' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.334 12v-.02a9.354 9.354 0 1 0-2.74 6.614 8.963 8.963 0 0 0 2.74-6.462l-.001-.139V12zM24 12v.036c0 1.67-.349 3.258-.977 4.695l.029-.075c-1.226 2.905-3.491 5.17-6.318 6.367l-.078.029C15.282 23.651 13.682 24 12 24s-3.283-.349-4.733-.978l.077.03c-2.905-1.226-5.17-3.491-6.367-6.318l-.029-.078C.349 15.282 0 13.682 0 12s.349-3.283.978-4.733l-.03.077C2.174 4.439 4.439 2.174 7.266.977l.078-.029C8.718.349 10.318 0 12 0s3.283.349 4.733.978l-.077-.03c2.905 1.226 5.17 3.491 6.367 6.318l.029.078c.599 1.362.948 2.95.948 4.62v.039-.002z'/%3E%3C/svg%3E%0A"); + --icon-wordpress: url("data:image/svg+xml, %3Csvg width='18' height='18' fill='%239FA4BB' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8 .9 0 1.8 .1 2.8 .2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7 .3 13.7 .3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z'/%3E%3C/svg%3E"); + --icon-mastodon: url("data:image/svg+xml, %0A%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='18' height='18' fill='%239FA4BB'%3E%3Ctitle%3EMastodon icon%3C/title%3E%3Cpath d='M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z'/%3E%3C/svg%3E"); + --icon-verified: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-verified-smaller: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="15" height="15" %3E%3Cpath fill="%236364ff" d="M20.396 11c-.018-.646-.215-1.275-.57-1.816-.354-.54-.852-.972-1.438-1.246.223-.607.27-1.264.14-1.897-.131-.634-.437-1.218-.882-1.687-.47-.445-1.053-.75-1.687-.882-.633-.13-1.29-.083-1.897.14-.273-.587-.704-1.086-1.245-1.44S11.647 1.62 11 1.604c-.646.017-1.273.213-1.813.568s-.969.854-1.24 1.44c-.608-.223-1.267-.272-1.902-.14-.635.13-1.22.436-1.69.882-.445.47-.749 1.055-.878 1.688-.13.633-.08 1.29.144 1.896-.587.274-1.087.705-1.443 1.245-.356.54-.555 1.17-.574 1.817.02.647.218 1.276.574 1.817.356.54.856.972 1.443 1.245-.224.606-.274 1.263-.144 1.896.13.634.433 1.218.877 1.688.47.443 1.054.747 1.687.878.633.132 1.29.084 1.897-.136.274.586.705 1.084 1.246 1.439.54.354 1.17.551 1.816.569.647-.016 1.276-.213 1.817-.567s.972-.854 1.245-1.44c.604.239 1.266.296 1.903.164.636-.132 1.22-.447 1.68-.907.46-.46.776-1.044.908-1.681s.075-1.299-.165-1.903c.586-.274 1.084-.705 1.439-1.246.354-.54.551-1.17.569-1.816zM9.662 14.85l-3.429-3.428 1.293-1.302 2.072 2.072 4.4-4.794 1.347 1.246z"%3E%3C/path%3E%3C/svg%3E'); + --icon-label: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tag"%3E%3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"%3E%3C/path%3E%3Cline x1="7" y1="7" x2="7.01" y2="7"%3E%3C/line%3E%3C/svg%3E'); + --icon-discord: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="18" height="18" %3E%3Cpath fill="%239FA4BB" d="M 12.65625 4.90625 L 11.875 5 C 11.875 5 8.371094 5.382813 5.8125 7.4375 L 5.78125 7.4375 L 5.75 7.46875 C 5.175781 7.996094 4.925781 8.644531 4.53125 9.59375 C 4.136719 10.542969 3.714844 11.753906 3.34375 13.09375 C 2.601563 15.777344 2 19.027344 2 22 L 2 22.25 L 2.125 22.5 C 3.050781 24.125 4.695313 25.160156 6.21875 25.875 C 7.742188 26.589844 9.058594 26.96875 9.96875 27 L 10.5625 27.03125 L 10.875 26.5 L 11.96875 24.5625 C 13.128906 24.824219 14.464844 25 16 25 C 17.535156 25 18.871094 24.824219 20.03125 24.5625 L 21.125 26.5 L 21.4375 27.03125 L 22.03125 27 C 22.941406 26.96875 24.257813 26.589844 25.78125 25.875 C 27.304688 25.160156 28.949219 24.125 29.875 22.5 L 30 22.25 L 30 22 C 30 19.027344 29.398438 15.777344 28.65625 13.09375 C 28.285156 11.753906 27.863281 10.542969 27.46875 9.59375 C 27.074219 8.644531 26.824219 7.996094 26.25 7.46875 L 26.21875 7.4375 L 26.1875 7.4375 C 23.628906 5.382813 20.125 5 20.125 5 L 19.34375 4.90625 L 19.0625 5.625 C 19.0625 5.625 18.773438 6.355469 18.59375 7.1875 C 17.460938 7.035156 16.535156 7 16 7 C 15.464844 7 14.539063 7.035156 13.40625 7.1875 C 13.226563 6.355469 12.9375 5.625 12.9375 5.625 Z M 11.28125 7.1875 C 11.324219 7.328125 11.367188 7.449219 11.40625 7.5625 C 10.113281 7.882813 8.734375 8.371094 7.46875 9.15625 L 8.53125 10.84375 C 11.125 9.234375 14.851563 9 16 9 C 17.148438 9 20.875 9.234375 23.46875 10.84375 L 24.53125 9.15625 C 23.265625 8.371094 21.886719 7.882813 20.59375 7.5625 C 20.632813 7.449219 20.675781 7.328125 20.71875 7.1875 C 21.652344 7.375 23.433594 7.804688 24.90625 8.96875 C 24.898438 8.972656 25.28125 9.550781 25.625 10.375 C 25.976563 11.222656 26.367188 12.351563 26.71875 13.625 C 27.394531 16.066406 27.925781 19.039063 27.96875 21.65625 C 27.339844 22.617188 26.171875 23.484375 24.9375 24.0625 C 23.859375 24.566406 23.007813 24.75 22.5 24.84375 L 22 24 C 22.296875 23.890625 22.589844 23.769531 22.84375 23.65625 C 24.382813 22.980469 25.21875 22.25 25.21875 22.25 L 23.90625 20.75 C 23.90625 20.75 23.34375 21.265625 22.03125 21.84375 C 20.71875 22.421875 18.714844 23 16 23 C 13.285156 23 11.28125 22.421875 9.96875 21.84375 C 8.65625 21.265625 8.09375 20.75 8.09375 20.75 L 6.78125 22.25 C 6.78125 22.25 7.617188 22.980469 9.15625 23.65625 C 9.410156 23.769531 9.703125 23.890625 10 24 L 9.5 24.84375 C 8.992188 24.75 8.140625 24.566406 7.0625 24.0625 C 5.828125 23.484375 4.660156 22.617188 4.03125 21.65625 C 4.074219 19.039063 4.605469 16.066406 5.28125 13.625 C 5.632813 12.351563 6.023438 11.222656 6.375 10.375 C 6.71875 9.550781 7.101563 8.972656 7.09375 8.96875 C 8.566406 7.804688 10.347656 7.375 11.28125 7.1875 Z M 12.5 14 C 11.726563 14 11.042969 14.441406 10.625 15 C 10.207031 15.558594 10 16.246094 10 17 C 10 17.753906 10.207031 18.441406 10.625 19 C 11.042969 19.558594 11.726563 20 12.5 20 C 13.273438 20 13.957031 19.558594 14.375 19 C 14.792969 18.441406 15 17.753906 15 17 C 15 16.246094 14.792969 15.558594 14.375 15 C 13.957031 14.441406 13.273438 14 12.5 14 Z M 19.5 14 C 18.726563 14 18.042969 14.441406 17.625 15 C 17.207031 15.558594 17 16.246094 17 17 C 17 17.753906 17.207031 18.441406 17.625 19 C 18.042969 19.558594 18.726563 20 19.5 20 C 20.273438 20 20.957031 19.558594 21.375 19 C 21.792969 18.441406 22 17.753906 22 17 C 22 16.246094 21.792969 15.558594 21.375 15 C 20.957031 14.441406 20.273438 14 19.5 14 Z M 12.5 16 C 12.554688 16 12.625 16.019531 12.75 16.1875 C 12.875 16.355469 13 16.648438 13 17 C 13 17.351563 12.875 17.644531 12.75 17.8125 C 12.625 17.980469 12.554688 18 12.5 18 C 12.445313 18 12.375 17.980469 12.25 17.8125 C 12.125 17.644531 12 17.351563 12 17 C 12 16.648438 12.125 16.355469 12.25 16.1875 C 12.375 16.019531 12.445313 16 12.5 16 Z M 19.5 16 C 19.554688 16 19.625 16.019531 19.75 16.1875 C 19.875 16.355469 20 16.648438 20 17 C 20 17.351563 19.875 17.644531 19.75 17.8125 C 19.625 17.980469 19.554688 18 19.5 18 C 19.445313 18 19.375 17.980469 19.25 17.8125 C 19.125 17.644531 19 17.351563 19 17 C 19 16.648438 19.125 16.355469 19.25 16.1875 C 19.375 16.019531 19.445313 16 19.5 16 Z"/%3E%3C/svg%3E'); + --icon-linkedin: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-linkedin"%3E%3Cpath d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"%3E%3C/path%3E%3Crect x="2" y="9" width="4" height="12"%3E%3C/rect%3E%3Ccircle cx="4" cy="4" r="2"%3E%3C/circle%3E%3C/svg%3E'); + --icon-instagram: url('data:image/svg+xml, %0A%3Csvg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="%239FA4BB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-instagram"%3E%3Crect x="2" y="2" width="20" height="20" rx="5" ry="5"%3E%3C/rect%3E%3Cpath d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"%3E%3C/path%3E%3Cline x1="17.5" y1="6.5" x2="17.51" y2="6.5"%3E%3C/line%3E%3C/svg%3E'); +} + +/* Vars on iPad, landscape */ +@media (min-width: 1175px) and (max-width: 1260px) { + :root { + --width-main-panel: 500px; + --width-side-panel: 265px; + --width-compose-panel: 265px; + } +} + +/* Vars in mobile */ +@media (max-width: 500px) { + :root { + --font-size: 16px; + --line-height: 1.4; + --font-size-heading: 17px; + --badges-distance-from-edge: 10px; + } + + /* Hide scrollbar on mobile, since we can't pick the handle anyway */ + .layout-single-column::-webkit-scrollbar { + display: none; + } +} + +/* Search popout offset */ +.layout-single-column .search__popout, +.layout-single-column .search-popout { + left: calc(30px / 2); + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + max-width: calc(100% - 30px) !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: calc(100% - 30px) !important; +} + +body.layout-single-column { + background-color: var(--color-bg); + color: var(--color-fg); +} + +.layout-single-column .ui { + display: flex; + width: 100%; +} + +/* Fix weird horizontal overflow */ +@media (min-width: 1175px) and (max-width: 1330px) { + .layout-single-column .ui { + width: unset; + } +} + +/* Text color */ +.layout-single-column .account__header__tabs__name h1, +.layout-single-column .account__header__bio .account__header__content, +.layout-single-column .reply-indicator__content, +.layout-single-column .status__content { + color: var(--color-fg); +} + +/* Link color variants */ +.layout-single-column .status-link.hashtag { + color: var(--color-hashtag); +} + +.layout-single-column .status-link.mention:not(.hashtag) { + color: var(--color-mention); +} + +/* stylelint-disable-next-line */ +.layout-single-column .status-link.mention:not(.hashtag):not(.mention) { + color: var(--color-link); +} + +/* Logo */ +.layout-single-column .ui__header__logo, +.layout-single-column .column-link.column-link--logo { + background-image: var(--logo); + background-position: center; + background-repeat: no-repeat; + background-size: 32px auto; + height: 50px; + padding: 0; + width: 50px; +} + +.layout-single-column .ui__header__logo img, +.layout-single-column .ui__header__logo svg { + display: none; +} + +/* Fixes a regression for 4.3.0-alpha.3-2024-04-06 caused by https://github.com/mastodon/mastodon/commit/4f068d4fcc4d134fcbd56faa8f39c608dd343417 */ +.layout-single-column .ui__header__logo { + flex-grow: unset; +} + +/* Things that should have the default font-size */ +.layout-single-column .notification__message, +.layout-single-column .status__content, +.layout-single-column .account__header__tabs__name h1 small, +.layout-single-column .button, +.layout-single-column .status__content__read-more-button, +.layout-single-column .status__prepend, +.layout-single-column .status__info, +.layout-single-column .status__relative-time, +.layout-single-column .status__info .status__display-name, +.layout-single-column .account__section-headline a, +.layout-single-column .account__section-headline button, +.layout-single-column .notification__filter-bar a, +.layout-single-column .notification__filter-bar button { + font-size: var(--font-size); + line-height: var(--line-height); +} + +/* Things that should have the mid font-size */ +.layout-single-column .account__header__extra__links, +.layout-single-column .columns-area__panels__pane--compositional .account__header__account-note textarea, +.layout-single-column .account__header__content, +.layout-single-column .columns-area__panels__pane--compositional .compose-form .autosuggest-textarea__textarea, +.layout-single-column .columns-area__panels__pane--compositional .compose-form .spoiler-input__input { + font-size: var(--font-size-mid); + line-height: var(--line-height-mid); +} + +/* Exceptions */ +.layout-single-column .account__header__content { + line-height: 18px; +} + +/* Things that will have even smaller font size */ +.layout-single-column .account__header__account-note label { + font-size: var(--font-size-12); +} + +/* Line heights */ +.layout-single-column .status__content { + line-height: var(--line-height); +} + +/* Modal overlay */ +.layout-single-column .modal-root__overlay { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + background-color: var(--color-modal-overlay) !important; + /* stylelint-disable-next-line */ + color: var(--color-light-text) !important; +} + +.layout-single-column .modal-root__modal .display-name strong, +.layout-single-column .modal-root__modal .status__content { + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + color: var(--color-light-text) !important; +} + +/* Hide footer buttons in modals */ +.layout-single-column .picture-in-picture .picture-in-picture__footer { + display: none; +} + +/* Picture in picture fixes */ +.layout-single-column .picture-in-picture .audio-player, +.layout-single-column .picture-in-picture .video-player { + /* stylelint-disable-next-line */ + border-radius: 0 !important; + /* stylelint-disable-next-line */ + margin-left: 0 !important; +} + +/* Report modal */ +.layout-single-column .report-dialog-modal .poll__option.dialog-option > .poll__option__text { + display: grid; + gap: 6px; +} + +/* Improve modal icon size and accessibility */ +.layout-single-column .image-loader .icon, +.layout-single-column .media-modal__navigation .icon { + color: var(--color-light-text); + height: 32px; + width: 32px; +} + +/* List adder input */ +.layout-single-column .list-editor input.setting-text, +.layout-single-column .list-adder input.setting-text { + background-color: transparent; + border-color: var(--color-black-coral); + height: 38px; +} + +.layout-single-column .list-editor .column-inline-form button, +.layout-single-column .list-adder .column-inline-form button, +.layout-single-column .list-editor .column-inline-form button::before { + min-height: 38px; + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 100% !important; +} + +.layout-single-column .list-editor__search { + padding: 15px; +} + +.layout-single-column .embed-modal .embed-modal__container .embed-modal__html { + color: var(--color-light-text); +} + +.layout-single-column .embed-modal .embed-modal__container .embed-modal__html, +.layout-single-column .list-editor__search .search__input { + background-color: transparent; + border-color: var(--color-black-coral); + height: 38px; +} + +.layout-single-column .list-editor .drawer__inner.backdrop { + box-shadow: 2px 4px 15px rgba(0, 0, 0, .2); +} + +.layout-single-column .list-editor__search .search__icon .icon { + margin: 15px; +} + +.layout-single-column .list-editor .list__display-name, +.layout-single-column .list-adder .list__display-name { + align-items: center; + display: flex; + gap: var(--gap-default); +} + +.layout-single-column .list__display-name .icon-list-ul { + top: -2px; +} + +/* URL preview cards */ +.layout-single-column .status-card, +.layout-single-column .status-card:hover, +.layout-single-column .status-card:focus { + background-color: transparent; + border-color: var(--color-border); +} + +/* URL preview card summary text */ +.layout-single-column .status-card .status-card__host, +.layout-single-column .status-card .status-card__description { + color: var(--color-dim); +} + +/* URL preview card box */ +/* stylelint-disable-next-line */ +.layout-single-column .status-card .status-card__content { + padding: var(--gap-default); +} + +.layout-single-column .status-card.expanded .status-card__content { + display: grid; + gap: 8px; +} + +/* Preview cards */ +.layout-single-column .status-card { + background-color: var(--color-bg); + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + transition: all 200ms; +} + +.layout-single-column .status-card.status-card.bottomless { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.layout-single-column .status-card.expanded { + display: block; +} + +.layout-single-column a.status-card .status-card__host { + font-size: var(--font-size); +} + +.layout-single-column .status-card a:active .status-card__author, +.layout-single-column .status-card a:active .status-card__title, +.layout-single-column .status-card a:focus .status-card__author, +.layout-single-column .status-card a:focus .status-card__title, +.layout-single-column .status-card a:hover .status-card__author, +.layout-single-column .status-card a:hover .status-card__title, +.layout-single-column a.status-card:active .status-card__author, +.layout-single-column a.status-card:active .status-card__title, +.layout-single-column a.status-card:focus .status-card__author, +.layout-single-column a.status-card:focus .status-card__title, +.layout-single-column a.status-card:hover .status-card__author, +.layout-single-column a.status-card:hover .status-card__title { + color: var(--color-fg); +} + +.layout-single-column .status-card a:active .status-card__host, +.layout-single-column .status-card a:hover .status-card__host, +.layout-single-column .status-card a:focus .status-card__host, +.layout-single-column a.status-card:active .status-card__host, +.layout-single-column a.status-card:focus .status-card__host, +.layout-single-column a.status-card:hover .status-card__host, +.layout-single-column a.status-card:focus .status-card__description, +.layout-single-column a.status-card:hover .status-card__description { + color: var(--color-dim); +} + +/* Show minimal status card if there's no image */ +.layout-single-column .status-card .status-card__image:not(:has(img)) { + display: none; +} + +/* Show iframe in status card if status contains embedded media */ +.layout-single-column .status-card .status-card-video:has(iframe) { + display: inherit; +} + +/* Hide empty status cards alltogether (Mastodon 4.1.5-2023-07-29) */ +.layout-single-column .status-card:has(.icon-file-text) { + display: none; +} + +/* Hide empty YouTube description */ +.layout-single-column .status-card__description:empty { + display: none; +} + +.layout-single-column .status-card:focus, +.layout-single-column .status-card:hover { + background-color: rgba(255 255 255 / .03); +} + +.layout-single-column .status-card__image-image, +.layout-single-column .status-card__image-preview, +.layout-single-column .status-card .status-card__image { + background-color: var(--color-arsenic); + border-radius: 0; +} + +.layout-single-column a.status-card .status-card__content { + padding: 16px; +} + +.layout-single-column a.status-card .status-card__title { + color: var(--color-fg); + font-size: var(--font-size-title); + font-weight: var(--font-weight-semibold); + line-height: 1.3; + margin: 0; +} + +.layout-single-column a.status-card.expanded .status-card__title { + white-space: inherit; +} + +.layout-single-column .status-card.expanded .status-card__host { + color: var(--color-dim); + font-size: var(--font-size); + margin-bottom: 0; + margin-top: 0; +} + +.layout-single-column .status-card.expanded .status-card__description { + margin-top: 0; +} + +/* Announcements */ +.layout-single-column .announcements__pagination .icon, +.layout-single-column .announcements__pagination { + color: var(--color-dim); +} + +/* Dark panels like modals and boxes */ +.layout-single-column .account-memorial-banner, +.layout-single-column .follow-request-banner, +.layout-single-column .moved-account-banner, +.layout-single-column .about__meta, +.layout-single-column .about__section__title, +.layout-single-column .announcements, +.layout-single-column .report-dialog-modal, +.layout-single-column .report-modal__target, +.layout-single-column .compose-form .autosuggest-textarea__suggestions, +.layout-single-column .privacy-dropdown__dropdown, +.layout-single-column .drawer__backdrop, +.layout-single-column .list-editor__account, +.layout-single-column .list-editor, +.layout-single-column .list-editor__lists, +.layout-single-column .list-adder__account, +.layout-single-column .list-adder, +.layout-single-column .list-adder__lists, +.layout-single-column .dropdown-menu__arrow::before, +.layout-single-column .dropdown-menu, +.layout-single-column .dropdown-menu__item a, +.layout-single-column .dropdown-menu__item button, +.layout-single-column .emoji-mart-category-label span, +.layout-single-column .emoji-mart-bar:first-child, +.layout-single-column .emoji-picker-dropdown__menu, +.layout-single-column .privacy-dropdown.active .privacy-dropdown__value, +.layout-single-column .emoji-mart-search input, +.layout-single-column .emoji-mart-scroll, +.layout-single-column .emoji-mart-search, +.layout-single-column .follow_requests-unlocked_explanation, +.layout-single-column .dismissable-banner, +.layout-single-column .block-modal__action-bar, +.layout-single-column .boost-modal__action-bar, +.layout-single-column .confirmation-modal__action-bar, +.layout-single-column .mute-modal__action-bar, +.layout-single-column .setting-text__wrapper, +.layout-single-column .setting-text, +.layout-single-column .report-modal__comment, +.layout-single-column .report-modal__container, +.layout-single-column .actions-modal, +.layout-single-column .block-modal, +.layout-single-column .boost-modal, +.layout-single-column .compare-history-modal, +.layout-single-column .confirmation-modal, +.layout-single-column .mute-modal, +.layout-single-column .report-modal, +.layout-single-column .column-header__collapsible-inner { + background-color: var(--color-dark); + border-color: var(--color-dark); + color: var(--color-light-text); +} + +/* Column-header border */ +.layout-single-column .column-header__collapsible { + border-bottom: 1px solid var(--color-border); +} + +.layout-single-column .column-header__collapsible, +.layout-single-column .column-header__collapsible.collapsed { + opacity: 1; +} + +/* Has dark 1px border */ +.layout-single-column .dismissable-banner { + border: 1px solid var(--color-dark); +} + +/* More subtle box-shadow for dropdown-menu */ +.layout-single-column .search-popout, +.layout-single-column .search__popout, +.layout-single-column .dropdown-menu { + box-shadow: 2px 4px 16px rgb(0 0 0 / .01); +} + +/* Autosuggest box shadow reset */ +.layout-single-column .search-popout, +.layout-single-column .search__popout, +.layout-single-column .dropdown-menu, +.layout-single-column .emoji-picker-dropdown__menu, +.layout-single-column .compose-form .compose-form__warning, +.layout-single-column .privacy-dropdown.active .privacy-dropdown__value, +.layout-single-column .privacy-dropdown__dropdown, +.layout-single-column .language-dropdown__dropdown, +.layout-single-column .compose-form .autosuggest-textarea__suggestions { + box-shadow: none; +} + +/* Composer form warnings */ +.layout-single-column .compose-form .compose-form__warning { + background-color: var(--color-light-purple); + color: var(--color-bg); +} + +/* Content warning placeholder */ +.layout-single-column .compose-form .autosuggest-textarea__textarea::placeholder, +.layout-single-column .compose-form .spoiler-input__input::placeholder { + color: var(--color-dim); +} + +/* Border colors */ +.layout-single-column .search-results__section__header, +.layout-single-column .account__header__bar, +.layout-single-column .about__meta__divider, +.layout-single-column .poll__footer, +.layout-single-column .report-dialog-modal .poll__option.dialog-option, +.layout-single-column .account, +.layout-single-column .report-dialog-modal__container, +.layout-single-column .dropdown-menu__item.edited-timestamp__history__item, +.layout-single-column .dropdown-menu__container__header, +.layout-single-column .compare-history-modal .report-modal__target, +.layout-single-column .account__section-headline, +.layout-single-column .detailed-status__action-bar, +.layout-single-column .column-back-button, +.layout-single-column .column-header, +.layout-single-column .audio-player, +.layout-single-column .video-player, +.layout-single-column .media-gallery, +.layout-single-column .compose-form .spoiler-input__input, +.layout-single-column .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form__poll-wrapper, +.layout-single-column .compose-form__poll-wrapper select, +.layout-single-column .poll__option input[type="text"], +.layout-single-column .report-dialog-modal__textarea, +.layout-single-column .search__input, +.layout-single-column .setting-text, +.layout-single-column .dropdown-menu__separator, +.layout-single-column .status, +.layout-single-column .emoji-mart-search input, +.layout-single-column .conversation, +.layout-single-column .setting-text__wrapper { + border-color: var(--color-border); +} + +/* Change panel order */ +.layout-single-column .columns-area__panels__pane { + order: 3; +} + +.layout-single-column .columns-area__panels__main { + order: 2; +} + +.layout-single-column .columns-area__panels__pane.columns-area__panels__pane--start.columns-area__panels__pane--navigational { + order: 1; +} + +.layout-single-column .columns-area__panels__pane, +.layout-single-column .columns-area__panels__pane__inner { + min-width: var(--width-side-panel); + width: var(--width-side-panel); +} + +.layout-single-column .compose-panel { + width: var(--width-compose-panel); +} + +.layout-single-column .columns-area__panels__pane--compositional { + flex-grow: 1; + height: 100vh; + max-width: 350px; + min-height: 880px; + position: sticky; + top: 0; +} + +.layout-single-column .columns-area__panels__pane--compositional .columns-area__panels__pane__inner { + position: static; +} + +.layout-single-column .columns-area__panels__pane--compositional .columns-area__panels__pane__inner, +.compose-panel { + /* stylelint-disable-next-line */ + width: 100% !important; +} + +/* stylelint-disable-next-line */ +@media (min-width: 1175px) { + .layout-single-column .columns-area__panels__main { + max-width: calc(var(--width-main-panel) + calc(var(--gap-default) * 4)); + padding-left: calc(var(--gap-default) * 2); + padding-right: calc(var(--gap-default) * 2); + } + + .layout-single-column .navigation-panel { + margin-right: -20px; + /* stylelint-disable-next-line */ + padding-left: 0 !important; + padding-right: 20px; + } +} + +.layout-single-column .emoji-mart-anchor-bar, +.layout-single-column .column-link.column-link--logo svg { + display: none; +} + +/* Accented items like links */ +.layout-single-column .about__section__title, +.layout-single-column .account__header__bio .account__header__fields a, +.layout-single-column .column-back-button, +.layout-single-column .emoji-mart-anchor.emoji-mart-anchor-selected, +.layout-single-column .text-icon-button.active, +.layout-single-column .empty-column-indicator a, +.layout-single-column .follow_requests-unlocked_explanation a, +.layout-single-column .column-header__back-button, +.layout-single-column .link-button, +.layout-single-column .reply-indicator__content a.unhandled-link, +.layout-single-column .status__content a.unhandled-link, +.layout-single-column .column-header > .column-header__back-button, +.layout-single-column .reply-indicator__content a, +body.embed .status__content a, +.layout-single-column .status__content a, +.layout-single-column .column-link--transparent.active, +.layout-single-column .status__content__read-more-button { + color: var(--color-accent); +} + +/* Toggles */ +.layout-single-column .react-toggle .react-toggle-track { + background-color: var(--color-bg); +} + +/* Accented background colors */ +.layout-single-column .react-toggle--checked .react-toggle-track, +.layout-single-column .language-dropdown__dropdown__results__item.active, +.layout-single-column .icon-with-badge__badge, +.layout-single-column .button { + background-color: var(--color-accent-dark); +} + +.layout-single-column .block-modal__cancel-button, +.layout-single-column .confirmation-modal__cancel-button, +.layout-single-column .confirmation-modal__secondary-button, +.layout-single-column .mute-modal__cancel-button { + background-color: transparent; + color: var(--color-dim); + font-size: var(--font-size-mid); +} + +.layout-single-column .block-modal__cancel-button:focus, +.layout-single-column .confirmation-modal__cancel-button:focus, +.layout-single-column .confirmation-modal__secondary-button:focus, +.layout-single-column .mute-modal__cancel-button:focus, +.layout-single-column .block-modal__cancel-button:hover, +.layout-single-column .confirmation-modal__cancel-button:hover, +.layout-single-column .confirmation-modal__secondary-button:hover, +.layout-single-column .mute-modal__cancel-button:hover { + background-color: transparent; + color: var(--color-dark-electric-blue); +} + +.column-link--transparent .icon-with-badge__badge, +.layout-single-column .icon-with-badge__badge { + background-color: var(--color-accent-dark); + border-color: var(--color-bg); +} + +/* Accented strokes */ +.layout-single-column .trends__item__sparkline path:last-child { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + stroke: var(--color-accent) !important; +} + +/* Dropdown hovers */ +.layout-single-column .language-dropdown__dropdown__results__item:hover, +.layout-single-column .language-dropdown__dropdown__results__item:focus { + background-color: var(--color-accent-dark-50); + color: var(--color-light-text); +} + +/* Accented border colors */ +.layout-single-column .notification.unread::before, +.layout-single-column .status__wrapper.unread::before { + border-color: var(--color-accent); + display: none; +} + +/* Filtered post / Content warnings */ +body .status__wrapper.status__wrapper--filtered { + align-items: center; + background-color: var(--color-focusable-toot); + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + color: var(--color-light-purple); + display: flex; + flex-wrap: nowrap; + font-size: var(--font-size-mid); + justify-content: space-between; + margin: var(--gap-default); + overflow: hidden; + padding: 4px 16px; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + width: calc(100% - calc(var(--gap-default) * 2)); +} + +body .columns-area__panels__pane--compositional .compose-form .spoiler-input__input, +body .content-warning { + background-color: var(--color-focusable-toot); + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + color: var(--color-light-purple); + display: grid; + font-size: var(--font-size-mid); + grid-template-columns: minmax(0, 3fr) minmax(0, 1fr); + padding: 10px 16px; + white-space: unset; +} + +body .compose-form__highlightable:has(.spoiler-input__input) { + border-top-left-radius: var(--border-radius); + border-top-right-radius: var(--border-radius); +} + +body .compose-form:has(.spoiler-input__input) .spoiler-input .autosuggest-input { + border-bottom: 0; + border-radius: var(--border-radius); +} + +body .content-warning .link-button { + align-self: flex-start; + color: var(--color-fg); + font-size: var(--font-size-mid); + font-weight: var(--font-weight-semibold); + justify-self: flex-end; +} + +/* New content warnings in 4.3.0.beta.1-mementomods-2024-08-23 */ +body .status:not(.status--in-thread) .content-warning { + margin-bottom: var(--gap-default); + margin-left: calc(var(--size-avatar) + var(--gap-default)); + margin-top: var(--gap-default); +} + +body .content-warning p { + margin-bottom: 0; +} + +body .spoiler-input__border, +body .content-warning::after, +body .content-warning::before { + display: none; +} + +.layout-single-column .notification:has(.status__wrapper--filtered) .notification__message { + display: none; +} + +/* Fix hover/focus on article that has filtered banner */ +.layout-single-column article:has(.status__wrapper--filtered):hover { + background-color: transparent; +} + +.layout-single-column .status__wrapper.status__wrapper--filtered button { + background-color: rgb(255 255 255 / 0); + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + color: var(--color-fg); + font-weight: var(--font-weight-semibold); + margin-left: auto; + padding-bottom: 8px; + padding-left: 12px; + padding-right: 12px; + padding-top: 8px; + transition: 200ms background; + white-space: nowrap; +} + +.layout-single-column .status__wrapper.status__wrapper--filtered button:focus, +.layout-single-column .status__wrapper.status__wrapper--filtered button:hover { + background-color: rgb(255 255 255 / .1); + text-decoration: none; +} + +/* Fix load more icon dimensions */ +.load-more .icon { + height: 16px; + width: 20px; +} + +/* Unread message */ +.layout-single-column .conversation--unread, +.layout-single-column .notification.unread:hover, +.layout-single-column .notification.unread, +.layout-single-column .status__wrapper.unread, +body .notification-group.notification-group--unread { + background-color: var(--color-dark); +} + +body .notification-group--unread::before, +body .notification-ungrouped--unread::before { + /* stylelint-disable-next-line */ + display: none; +} + +.layout-single-column .notification:hover .notification__message { + background-color: transparent; +} + +/* Things like notification status update text that should be dim */ +/* stylelint-disable-next-line selector-not-notation */ +.layout-single-column .notification .status-link.mention:not(.hashtag):not(.mention), +.layout-single-column .notification .status-link.hashtag, +.layout-single-column .notification .status-link.mention:not(.hashtag), +.layout-single-column .compose-form .autosuggest-textarea__textarea::placeholder, +.layout-single-column .compose-form .icon-button, +.layout-single-column .compose-form .spoiler-input__input::placeholder, +.layout-single-column .compose-form__poll-wrapper .button.button-secondary, +.layout-single-column .language-dropdown__dropdown__results__item__common-name, +.layout-single-column .report-dialog-modal__textarea::placeholder, +.layout-single-column .poll__link, +.layout-single-column .muted .poll, +.layout-single-column .status .status__relative-time, +.layout-single-column .status .status__visibility-icon, +.layout-single-column .block-modal__action-bar > div, +.layout-single-column .boost-modal__action-bar > div, +.layout-single-column .confirmation-modal__action-bar > div, +.layout-single-column .mute-modal__action-bar > div, +.layout-single-column .search-popout > h4, +.layout-single-column .search__popout > h4, +.layout-single-column .status-check-box__status .detailed-status__display-name, +.layout-single-column .report-dialog-modal .poll__option.dialog-option > .poll__option__text, +.layout-single-column .status-card .status-card__description, +.layout-single-column .report-dialog-modal .dialog-option .poll__input, +.layout-single-column .dropdown-menu__container__header, +.layout-single-column .sign-in-banner p, +.layout-single-column .navigation-bar > a, +.layout-single-column .character-counter, +.layout-single-column .text-icon-button, +.layout-single-column .empty-column-indicator, +.layout-single-column .follow_requests-unlocked_explanation, +.layout-single-column .poll__footer, +.layout-single-column .server-banner h4, +.layout-single-column .column-header__button, +.layout-single-column .search__icon .icon-times-circle, +.layout-single-column .timeline-hint, +.layout-single-column .status__display-name.muted, +.layout-single-column .setting-text-label, +.layout-single-column .account__header__bio .account__header__fields dt, +.layout-single-column .account__header__bio .account__header__fields dd, +.layout-single-column .link-footer p, +.layout-single-column .account__header__extra__links a, +.layout-single-column .trends__item__current, +.layout-single-column .emoji-mart-anchor, +.layout-single-column .emoji-mart, +.layout-single-column .emoji-mart-anchors, +.layout-single-column .reply-indicator .display-name *, +.layout-single-column .status__display-name, +.layout-single-column .status__prepend .status__display-name strong, +.layout-single-column .status__prepend, +.layout-single-column .compose-form .compose-form__modifiers, +.layout-single-column .compose-form .autosuggest-textarea__textarea, +.layout-single-column .compose-form .spoiler-input__input, +.layout-single-column .autosuggest-textarea__suggestions, +.layout-single-column .compose-form .autosuggest-account .display-name__account, +.layout-single-column .compose-panel .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper, +.layout-single-column .account__section-headline a, +.layout-single-column .account__section-headline button, +.layout-single-column .notification__filter-bar a, +.layout-single-column .notification__filter-bar button, +.layout-single-column .attachment-list.compact .icon, +.layout-single-column .attachment-list__list a, +.layout-single-column .notification__message .icon-user-plus, +.layout-single-column .notification__message .icon-home, +.layout-single-column .notification__message .icon-retweet, +.layout-single-column .link-footer p a, +.layout-single-column .trends__item__name, +.layout-single-column .muted .status__content, +.layout-single-column .muted .status__content a, +.layout-single-column .muted .status__content p, +.layout-single-column .muted .status__display-name strong, +.layout-single-column .privacy-dropdown__option:not(.active) .privacy-dropdown__option__content { + color: var(--color-dim); +} + +/* Dim backgrounds */ +.layout-single-column .poll__chart { + background-color: var(--color-dim); +} + +/* Lighter border colors */ +.layout-single-column .report-dialog-modal .dialog-option .poll__input, +.layout-single-column .poll__input { + border-color: var(--color-brand-mastodon-text-light); +} + +/* Light grey things */ +.layout-single-column .navigation-bar, +.layout-single-column .navigation-bar strong { + color: var(--color-topaz); +} + +/* CW button */ +.layout-single-column .reply-indicator__content .status__content__spoiler-link, +.layout-single-column .status__content__spoiler-link { + background-color: var(--color-dark); + color: var(--color-light-purple); + font-weight: var(--font-weight-semibold); + + /* Need to override forced styles */ + /* stylelint-disable-next-line */ + margin-left: calc(var(--gap-default) / 2) !important; + vertical-align: baseline; +} + +.layout-single-column .reply-indicator__content .status__content__spoiler-link:focus, +.layout-single-column .reply-indicator__content .status__content__spoiler-link:hover, +.layout-single-column .status__content .status__content__spoiler-link:focus, +.layout-single-column .status__content .status__content__spoiler-link:hover { + background-color: var(--color-dark); + color: var(--color-lighter-purple); +} + +/* CW button in notifications */ +.layout-single-column .notification .reply-indicator__content .status__content__spoiler-link, +.layout-single-column .notification .status__content__spoiler-link { + background-color: var(--color-dark); + color: var(--color-dim); +} + +.layout-single-column .notification .reply-indicator__content .status__content__spoiler-link:focus, +.layout-single-column .notification .reply-indicator__content .status__content__spoiler-link:hover, +.layout-single-column .notification .status__content .status__content__spoiler-link:focus, +.layout-single-column .notification .status__content .status__content__spoiler-link:hover { + background-color: var(--color-dark); + color: var(--color-dim); +} + +/* Light purple things */ +.layout-single-column .announcements__pagination .icon-button:hover i, +.layout-single-column .server-banner__introduction, +.layout-single-column .account__header__tabs__name h1 small, +.layout-single-column .account .account__display-name, +.layout-single-column .column-settings__section, +.layout-single-column .setting-toggle__label, +.layout-single-column .server-banner__number-label { + color: var(--color-light-purple); +} + +/* White things */ +.layout-single-column .compose-form__poll-wrapper select, +.layout-single-column .actions-modal ul li:not(:empty) a, +.layout-single-column .report-dialog-modal .status__content, +.layout-single-column .report-dialog-modal .status__content p, +.layout-single-column .report-dialog-modal .poll__option.dialog-option > .poll__option__text strong, +.layout-single-column .report-dialog-modal__lead, +.layout-single-column .detailed-status__display-name strong, +.layout-single-column .dismissable-banner__message, +.layout-single-column .privacy-dropdown__option, +.layout-single-column .privacy-dropdown__option__content strong, +.layout-single-column .privacy-dropdown__option.active, +.layout-single-column .privacy-dropdown__option:hover .privacy-dropdown__option__content, +.layout-single-column .privacy-dropdown__option:focus .privacy-dropdown__option__content, +.layout-single-column .status__info .display-name strong.display-name__html, +.layout-single-column .reply-indicator .display-name strong.display-name__html, +.layout-single-column .notification__message, +.layout-single-column .getting-started__trends h4 a, +.layout-single-column .trends__item__name a, +.layout-single-column .emoji-mart-search input, +.layout-single-column .language-dropdown__dropdown__results__item, +.layout-single-column .reply-indicator__content, +.layout-single-column .compose-form .compose-form__modifiers:focus, +.layout-single-column .compose-form .autosuggest-textarea__textarea, +.layout-single-column .compose-form .spoiler-input__input:focus, +.layout-single-column .compose-panel .compose-form__autosuggest-wrapper:focus, +.layout-single-column .compose-form .compose-form__buttons-wrapper:focus, +.layout-single-column .autosuggest-textarea .autosuggest-textarea__textarea:focus, +.layout-single-column .account__section-headline a.active, +.layout-single-column .account__section-headline button.active, +.layout-single-column .notification__filter-bar a.active, +.layout-single-column .notification__filter-bar button.active { + color: var(--color-light-text); +} + +.layout-single-column .muted .status__info *, +.layout-single-column .muted .status__info .display-name * { + color: var(--color-light-text); +} + +/* Account names */ +.layout-single-column .status__info .display-name .display-name__account, +.layout-single-column .display-name__account { + color: var(--color-dim); +} + +/* Main panel column */ +.layout-single-column .columns-area__panels__main > div { + border-left: 1px solid var(--color-border); + border-right: 1px solid var(--color-border); +} + +/* Status header */ +.layout-single-column .status .status__info { + align-items: flex-start; + gap: var(--gap-default); + height: calc(var(--gap-default) * 2); + justify-content: flex-start; + margin-bottom: 0; + padding-bottom: 0; +} + +/* Status action bar */ +.layout-single-column .status__action-bar { + margin-top: 12px; + max-height: 27px; +} + +/* Display name */ +.layout-single-column .status__info .status__display-name { + align-items: flex-start; + display: inline-flex; + gap: var(--gap-default); + order: 1; +} + +.layout-single-column .status__info .display-name { + display: flex; + gap: calc(var(--gap-default) / 2); +} + +/* The separator dot */ +.layout-single-column .status__info::before { + color: var(--color-dim); + content: "·"; + display: inline-block; + font-size: var(--font-size); + font-weight: var(--font-weight-regular); + height: 20px; + margin-left: -6px; + margin-right: -10px; + order: 2; + position: relative; +} + +.layout-single-column .status__info .status__relative-time { + height: unset; + order: 3; +} + +/* Visibility icon */ +.layout-single-column .status .status__visibility-icon { + font-size: var(--font-size-mid); +} + +/* Panels and things that should be transparent */ +.layout-single-column .explore__search-results, +.layout-single-column .search-results__section__header, +.layout-single-column .status__wrapper-direct, +.layout-single-column .focusable:focus .detailed-status, +.layout-single-column .focusable:focus .detailed-status__action-bar, +.layout-single-column .compose-form__poll-wrapper select, +.layout-single-column .poll__option input[type="text"], +.layout-single-column .language-dropdown__dropdown, +body.embed .activity-stream .entry, +.layout-single-column .report-dialog-modal__textarea, +.layout-single-column .drawer__inner, +.layout-single-column .column-inline-form, +.layout-single-column .scrollable .account-card, +.layout-single-column .scrollable .account-card__title__avatar .account__avatar, +.layout-single-column .scrollable .account-card__title__avatar img, +.layout-single-column .explore__search-header, +.layout-single-column .empty-column-indicator, +.layout-single-column .follow_requests-unlocked_explanation, +.layout-single-column .column-link, +.layout-single-column .columns-area__panels__pane--navigational .navigation-panel, +.layout-single-column .tabs-bar__wrapper .column-back-button, +.layout-single-column .account__header, +.layout-single-column .column-header__back-button, +.layout-single-column .compose-form .compose-form__modifiers, +.layout-single-column .compose-form .autosuggest-textarea__textarea, +.layout-single-column .compose-form .spoiler-input__input, +.layout-single-column .compose-panel .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper, +.layout-single-column .column-header__button, +.layout-single-column .account__section-headline button, +.layout-single-column .notification__filter-bar button, +.layout-single-column .account__section-headline, +.layout-single-column .notification__filter-bar, +.layout-single-column .tabs-bar__wrapper, +.layout-single-column .column-header, +body.embed .detailed-status, +.layout-single-column .detailed-status, +.layout-single-column .detailed-status__action-bar, +.layout-single-column .column > .scrollable { + background-color: transparent; +} + +/* Avatar */ +.account__avatar[style="width: 46px; height: 46px;"], +.layout-single-column .status__avatar { + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + height: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + max-height: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + max-width: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + min-height: var(--size-avatar) !important; + /* stylelint-disable-next-line */ + min-width: var(--size-avatar) !important; + + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + width: var(--size-avatar) !important; +} + +/* Avatars */ +body.embed .detailed-status__display-avatar > img, +.layout-single-column .account-card__title__avatar .account__avatar, +.layout-single-column .account-card__title__avatar img, +.layout-single-column .account__avatar > img, +.layout-single-column .column > .scrollable .status__avatar img { + background-color: var(--color-bg); + border: 0; + border-radius: 50%; + box-shadow: rgb(255 255 255 / 0.03) 0 0 2px inset; +} + +/* Things that should not have border */ +.layout-single-column .column-inline-form, +.layout-single-column .column > .scrollable, +.layout-single-column .error-column, +.layout-single-column .getting-started, +.layout-single-column .regeneration-indicator, +.layout-single-column .column-header { + border: 0; +} + +/* Nice active effect in the column header */ +.layout-single-column .column-header__wrapper.active { + box-shadow: var(--active-header-box-shadow); +} + +.layout-single-column .column-header__wrapper.active::before { + /* stylelint-disable-next-line */ + background: var(--active-header-radial-gradient); +} + +.layout-single-column .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form__buttons-wrapper { + border: 0; +} + +.layout-single-column article, +.layout-single-column .status__prepend, +.layout-single-column .notification__message, +.layout-single-column .status { + transition: all 200ms; +} + +/* Toot hover effect */ +.layout-single-column article:focus, +.layout-single-column article:hover { + background-color: var(--color-light-shade); +} + +/* Focusable toot and other hilighted items */ +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item.selected, +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item:active, +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item:focus, +.layout-single-column .compose-form .autosuggest-textarea__suggestions__item:hover, +.layout-single-column .focusable:focus { + /* stylelint-disable-next-line */ + background: var(--color-focusable-toot); +} + +/* Search panel that opens when focusing Search or paste URL field */ +.layout-single-column .explore__search-header .search__popout, +.layout-single-column .compose-form__poll-wrapper option, +.layout-single-column .search__popout, +.layout-single-column .search-popout { + background-color: var(--color-dark); + border-color: var(--color-dark); + color: var(--color-dim); +} + +.layout-single-column .search__popout em, +.layout-single-column .search-popout em { + color: var(--color-light-text); +} + +/* Pill style tags */ +.layout-single-column .hashtag-bar a { + background-color: var(--color-dark); + border-radius: 9999px; + color: var(--color-light-purple); + display: inline-block; + font-size: var(--font-size-smaller); + font-weight: var(--font-weight-semibold); + line-height: 1.5; + margin: 0 4px 4px 0; + padding: 4px 8px; + text-decoration: none; +} + +.layout-single-column .hashtag-bar .link-button { + font-size: var(--font-size-smaller); +} + +.layout-single-column .hashtag-bar a:focus, +.layout-single-column .hashtag-bar a:hover { + background-color: var(--color-accent-dark); + /* It should be always light also on light mode, so not using variable here */ + color: #f7f9f9; +} + +.layout-single-column .hashtag-bar a:focus span, +.layout-single-column .hashtag-bar a:hover span { + text-decoration: none; +} + +/* Status update tinted to right */ +.layout-single-column .status:not(.status--in-thread) .hashtag-bar, +.layout-single-column .status__content--collapsed + .status__content__read-more-button, +.layout-single-column .status:not(.status--in-thread) .status__action-bar, +.layout-single-column .status:not(.status--in-thread) .attachment-list, +.layout-single-column .status:not(.status--in-thread) .status__content { + font-size: var(--font-size); + padding-left: calc(var(--size-avatar) + var(--gap-default)); + padding-top: 0; +} + +/* Translate link and other padding resets */ +.layout-single-column .conversation .attachment-list, +.layout-single-column .translate ~ .status__content__read-more-button { + padding-left: 0; +} + +/* Make sure read more/translate button is always aligned to center vertically and to left horizontally */ +.layout-single-column .status__content__read-more-button { + align-items: center; + display: flex; + justify-content: flex-start; + margin-inline-start: 0; +} + +/* Rtl version */ +[dir="rtl"] .layout-single-column .status__action-bar, +[dir="rtl"] .layout-single-column .attachment-list, +[dir="rtl"] .layout-single-column .status__content__read-more-button, +[dir="rtl"] .layout-single-column .status .status__content { + padding-left: 0; + padding-right: calc(var(--size-avatar) + var(--gap-default)); +} + +/* Reset padding from attachment-list on reply indicator */ +.layout-single-column .reply-indicator .attachment-list { + padding-left: 0; +} + +.layout-single-column .status__action-bar button, +.layout-single-column .detailed-status__action-bar button { + border-radius: 50%; +} + +.layout-single-column .detailed-status__action-bar .icon-button[disabled], +.layout-single-column .status__action-bar .icon-button[disabled] { + opacity: .5; + pointer-events: none; +} + +/* Grouped notification exceptions, pr30440 2024-07-11 */ +.layout-single-column .notification-ungrouped .status .hashtag-bar, +.layout-single-column .notification-ungrouped .status .status__content, +.layout-single-column .notification-ungrouped .status .status__action-bar { + padding-left: var(--gap-default); +} + +/* Fix spacing under quoted post in grouped notification */ +.notification-group .notification-group__embedded-status__content { + max-height: 100%; +} + +/* We don't need to show our own account when we know our own account is being mentioned */ +.notification-ungrouped.notification-ungrouped--mention .notification-ungrouped__header, +.notification-group .notification-group__embedded-status__account { + display: none; +} + +.layout-single-column .notification-ungrouped .notification-ungrouped__header { + padding-left: calc(24px + var(--gap-default)); +} + +/* Media inside status update tinted to right */ +.layout-single-column .status .audio-player, +.layout-single-column .status .video-player, +.layout-single-column .status .media-gallery { + margin-left: auto; + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + width: calc(100% - calc(var(--size-avatar) + var(--gap-default))) !important; +} + +/* Fix aspect-ratio for some videos in mastodon v4.1.5-nightly-2023-07-26 */ +.layout-single-column div[style*='aspect-ratio']:not([class]) { + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + aspect-ratio: unset !important; +} + +/* Start: Experimental Threads-like media proportions, if the height is tall, show smaller media: https://mementomori.social/@rolle/111715197571142727 */ +body.embed .media-gallery__item.standalone img, +body.embed .video-player .media-gallery__preview, +.layout-single-column .media-gallery__item.standalone img, +.layout-single-column .video-player .media-gallery__preview { + object-fit: contain; +} + +body.embed .status .audio-player, +body.embed .status .media-gallery, +body.embed .status .video-player, +body.embed .audio-player, +body.embed .media-gallery, +body.embed .media-gallery__gifv, +body.embed .media-gallery__preview, +body.embed .video-player, +.layout-single-column .status .audio-player, +.layout-single-column .status .media-gallery, +.layout-single-column .status .video-player, +.layout-single-column .audio-player, +.layout-single-column .media-gallery, +.layout-single-column .media-gallery__gifv, +.layout-single-column .media-gallery__preview, +.layout-single-column .video-player { + margin-left: calc(var(--size-avatar) + var(--gap-default)); + max-height: 430px; + /* stylelint-disable-next-line */ + width: unset !important; +} + +body.embed [data-component="Video"] > div { + /* stylelint-disable-next-line */ + aspect-ratio: unset !important; +} + +body.embed .spoiler-button + .media-gallery__item > .media-gallery__preview, +.layout-single-column .spoiler-button + .media-gallery__item > .media-gallery__preview { + /* stylelint-disable-next-line */ + margin-left: unset !important; + /* stylelint-disable-next-line */ + max-height: unset !important; + /* stylelint-disable-next-line */ + width: 100% !important; +} + +body.embed .media-gallery__gifv, +body.embed .detailed-status .audio-player, +body.embed .detailed-status .media-gallery, +body.embed .detailed-status .media-gallery__gifv, +body.embed .detailed-status .media-gallery__preview, +body.embed .detailed-status .video-player, +.layout-single-column .media-gallery__gifv, +.layout-single-column .media-gallery__preview, +.layout-single-column .detailed-status .audio-player, +.layout-single-column .detailed-status .media-gallery, +.layout-single-column .detailed-status .media-gallery__gifv, +.layout-single-column .detailed-status .media-gallery__preview, +.layout-single-column .detailed-status .video-player { + margin-left: 0; +} + +.layout-single-column .media-gallery__preview { + /* stylelint-disable-next-line */ + margin-left: 0 !important; + /* stylelint-disable-next-line */ + width: 100% !important; +} + +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(odd), +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(odd) > a, +.layout-single-column .media-gallery__preview:nth-of-type(odd) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(even), +.layout-single-column .media-gallery > .media-gallery__item:nth-of-type(even) > a, +.layout-single-column .media-gallery__preview:nth-of-type(even) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +/* End: Experimental Threads-like media proportions, if the height is tall, show smaller media */ +.layout-single-column .status .status-card + .more-from-author, +.layout-single-column .status .status-card { + margin-left: calc(var(--size-avatar) + var(--gap-default)); +} + +/* Detailed status update */ +.layout-single-column .detailed-status .status__content { + font-size: var(--font-size-bigger); + line-height: 1.4; +} + +/* Embeds */ +body.embed .detailed-status__link { + gap: 0; + margin-left: 4px; + top: 0; +} + +body.embed .detailed-status__meta, +.layout-single-column .detailed-status__meta { + color: var(--color-dim); + font-size: var(--font-size); +} + +body.embed .detailed-status__meta { + line-height: 1.5; +} + +body.embed .detailed-status__reblogs, +body.embed .detailed-status__favorites, +.layout-single-column .detailed-status__favorites, +.layout-single-column .detailed-status__reblogs { + display: inline-flex; + font-size: var(--font-size); + gap: 4px; +} + +body.embed .detailed-status__meta .animated-number, +.layout-single-column .detailed-status__meta .animated-number { + color: var(--color-light-text); + font-weight: var(--font-weight-bold); +} + +body.embed .detailed-status__reblogs, +.layout-single-column .detailed-status__reblogs { + font-size: var(--font-size); +} + +body.embed .detailed-status__reblogs, +body.embed .detailed-status__favorites { + color: var(--color-light-text); + font-weight: var(--font-weight-bold); +} + +body.embed .activity-stream .entry { + background-color: var(--color-bg); +} + +body.embed > .activity-stream { + backface-visibility: hidden; + /* stylelint-disable-next-line */ + background: #313543 !important; + border: 1px solid var(--color-border); + border-radius: 10px; + overflow: hidden; +} + +/* Fix alignment */ +.layout-single-column .detailed-status__link { + top: 0; +} + +/* Profile lock icon alignment fix */ +.layout-single-column .account__header__tabs__name h1 small { + display: flex; + gap: 4px; + margin-top: 4px; +} + +/* Textual labels for detailed metrics */ +body.embed .detailed-status__link > .fa-reply + span::after, +.layout-single-column .detailed-status__link > .icon-reply + span::after { + color: var(--color-dim); + content: 'Replies'; + font-weight: var(--font-weight-semibold); +} + +body.embed .detailed-status__link > .fa-retweet + span::after, +.layout-single-column .detailed-status__link > .icon-retweet + span::after { + color: var(--color-dim); + content: 'Boosts'; + font-weight: var(--font-weight-semibold); +} + +body.embed .detailed-status__link > .fa-star + span::after, +.layout-single-column .detailed-status__link > .icon-star + span::after { + color: var(--color-dim); + content: 'Favourites'; + font-weight: var(--font-weight-semibold); +} + +body.embed .detailed-status__meta .detailed-status__link .fa-reply, +body.embed .detailed-status__meta .detailed-status__link .fa-star, +body.embed .detailed-status__meta .detailed-status__link .fa-retweet, +.layout-single-column .detailed-status__meta .detailed-status__link .icon-star, +.layout-single-column .detailed-status__meta .detailed-status__link .icon-retweet { + display: none; +} + +/* Icon buttons */ +.layout-single-column .icon-button { + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + color: var(--color-dim); +} + +/* Hide/Show media button */ +.layout-single-column .spoiler-button.spoiler-button--minified > button { + background-color: var(--color-bg); + border-radius: var(--border-radius-badges); + color: var(--color-ghost-button-text); + opacity: .5; +} + +/* Alt badge */ +.layout-single-column .media-gallery__item__badges > span { + border-radius: var(--border-radius-badges); +} + +/* Distance from the edge */ +.layout-single-column .spoiler-button--minified { + inset-inline-start: var(--badges-distance-from-edge); + top: var(--badges-distance-from-edge); +} + +.layout-single-column .media-gallery__item__badges { + bottom: var(--badges-distance-from-edge); + inset-inline-start: var(--badges-distance-from-edge); +} + +.layout-single-column .spoiler-button.spoiler-button--minified > button:hover, +.layout-single-column .spoiler-button.spoiler-button--minified > button:focus { + opacity: 1; +} + +.layout-single-column .icon-button:hover { + color: var(--color-accent); +} + +/* Other general buttons */ +.layout-single-column .column-header__button.active:active, +.column-header__button.active:focus, +.layout-single-column .column-header__button.active:hover { + background-color: var(--color-focusable-toot); + color: var(--color-fg); +} + +/* Bars on panels */ +.layout-single-column .ui__header, +.layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, +.layout-single-column .tabs-bar__wrapper { + backdrop-filter: blur(12px); + background-color: var(--color-bg-75); + border-color: var(--color-border); + padding: 0; +} + +/* Fix Create account button not clickable on mobile */ +.ui__header:has(.button[href="/auth/sign_up"]) { + z-index: 4; +} + +@media (min-width: 1175px) { + .layout-single-column .ui__header, + .layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, + .layout-single-column .tabs-bar__wrapper { + margin-right: -2px; + } +} + +/* Hidden things */ +/* stylelint-disable-next-line */ +.layout-single-column .column-header .column-header__icon:not(.icon-user-plus):not(.icon-user-times) { + display: none; +} + +/* Column headers */ +.layout-single-column .column-header { + font-size: var(--font-size-heading); + font-weight: var(--font-weight-bold); +} + +/* Column sub-headers */ +.layout-single-column .column-subheading { + background-color: transparent; + color: var(--color-fg); + font-size: var(--font-size-bigger); + font-weight: var(--font-weight-bold); + text-transform: unset; +} + +/* "Your lists" view */ +.layout-single-column .column-subheading ~ article { + padding-left: var(--gap-default); + padding-right: var(--gap-default); +} + +/* Notifications */ +.layout-single-column .notification-group, +.layout-single-column .notification__message { + display: grid; + gap: var(--gap-default); + grid-template-columns: minmax(0, var(--size-avatar)) minmax(0, 1fr); +} + +.layout-single-column .notification__message { + height: calc(var(--gap-default) * 2); +} + +/* Make sure notification user is clickable */ +.layout-single-column .notification__display-name { + position: relative; + z-index: 99; +} + +/* Hack to display notification message title on one line */ +.layout-single-column .notification__message > span { + display: block; + margin-top: calc(var(--size-avatar-small) + 6px); + overflow: visible; +} + +.layout-single-column .notification__message > span > span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Truncate too long unfollow buttons and texts beside it so they don't overlap in notifications */ +@media (max-width: 600px) { + .layout-single-column .notification .account__relationship > .button, + .layout-single-column .notification__report__actions .button { + max-width: 24vw; + } + + .layout-single-column .notification__message > span > span { + max-width: 50vw; + } +} + +.layout-single-column .notification__message > div { + display: flex; + justify-content: flex-end; +} + +.layout-single-column .muted .status__avatar { + opacity: 1; +} + +.layout-single-column .notification .account__avatar-overlay-base { + display: none; +} + +.layout-single-column .notification .account__avatar, +.layout-single-column .notification .account__avatar-overlay-overlay .account__avatar, +.layout-single-column .notification .account__avatar-overlay-overlay { + /* Need to override inline styles */ + /* stylelint-disable-next-line */ + height: var(--size-avatar-small) !important; + /* stylelint-disable-next-line */ + min-height: var(--size-avatar-small) !important; + /* stylelint-disable-next-line */ + min-width: var(--size-avatar-small) !important; + position: absolute; + /* stylelint-disable-next-line */ + width: var(--size-avatar-small) !important; +} + +.layout-single-column .notification .status__info .status__display-name { + overflow: visible; +} + +/* Fixes: User avatars in notifications are sometimes links to my profile instead of theirs #25 */ +.layout-single-column .notification.notification-reblog .status__info .status__display-name, +.layout-single-column .notification.notification-follow .status__info .status__display-name, +.layout-single-column .notification-group--favourite .status__info .status__display-name, +.layout-single-column .notification.notification-favourite .status__info .status__display-name { + pointer-events: none; +} + +/* Hack to show follow notification more minimal way */ +.layout-single-column .notification.notification-admin-report .notification__report, +.layout-single-column .notification.notification-admin-sign-up .account__wrapper, +.layout-single-column .notification.notification-update .account__wrapper, +.layout-single-column .notification.notification-follow .account__wrapper { + position: relative; +} + +.layout-single-column .notification.notification-admin-report .account__avatar-overlay-overlay { + top: calc(-1 * calc(var(--size-avatar-small) + var(--gap-default) + 4px)); +} + +/* Hack to show follow notification more minimal way */ +.layout-single-column .notification.notification-poll .display-name, +.layout-single-column .notification.notification-update .display-name__html, +.layout-single-column .notification.notification-update .display-name__account, +.layout-single-column .notification.notification-admin-sign-up .display-name__html, +.layout-single-column .notification.notification-admin-sign-up .display-name, +.layout-single-column .notification.notification-follow .display-name__html { + visibility: hidden; +} + +.layout-single-column .notification.notification-update .account__avatar-wrapper, +.layout-single-column .notification.notification-admin-sign-up .account__avatar-wrapper, +.layout-single-column .notification.notification-follow .account__avatar-wrapper, +.layout-single-column .notification .account__avatar-overlay { + left: calc(var(--size-avatar-small) + var(--gap-default) + 18px); + margin-top: calc(-1 * calc(var(--size-avatar-small) + var(--gap-default))); + position: absolute; + top: 4px; +} + +.layout-single-column .notification.notification-admin-report .account__avatar-overlay { + margin-top: 0; + top: 0; +} + +.layout-single-column .notification.notification-status .notification__message > span { + display: none; +} + +.layout-single-column .notification.notification-follow .verified-badge, +.layout-single-column .notification.notification-admin-sign-up .account__contents, +.layout-single-column .notification.notification-follow .account__contents, +.layout-single-column .notification.notification-follow .display-name, +.layout-single-column .notification.notification-admin-sign-up .display-name + span, +.layout-single-column .notification.notification-follow .display-name + span, +.layout-single-column .notification-group--favourite .status__wrapper-direct .status__prepend, +.layout-single-column .notification.notification-favourite .status__wrapper-direct .status__prepend, +.layout-single-column .notification.notification-reblog .display-name, +.layout-single-column .notification-group--favourite .display-name, +.layout-single-column .notification.notification-favourite .display-name { + display: none; +} + +/* Minimal boost notification fix */ +.layout-single-column .notification.notification-reblog .notification__message > span { + margin-top: calc(var(--size-avatar-small) + calc(var(--gap-default) / 2)); +} + +/* Minimal follow notification fix */ +.layout-single-column .notification.notification-follow .notification__message > span { + margin-top: calc(calc(var(--size-avatar-small) + calc(var(--gap-default) / 2)) + 6px); +} + +.layout-single-column .notification.notification.notification-admin-sign-up .account__relationship, +.layout-single-column .notification.notification-follow .account__relationship { + transform: translateY(-8px); +} + +/* stylelint-disable-next-line */ +.layout-single-column .notification.notification-follow .account__avatar-wrapper { + top: 6px; +} + +/* Minimal fav notification fix */ +.layout-single-column .notification.notification-favourite .notification__message > span { + margin-top: calc(var(--size-avatar-small) + calc(var(--gap-default) / 2)); +} + +/* If a status content is empty and there's only attachment, remove gap */ +.layout-single-column .notification .status__content:has(.status__content__text:empty) + .attachment-list { + margin-top: 0; +} + +/* Less space before attachments if no status content */ +.layout-single-column .status .status__content:has(.status__content__text:empty) + .audio-player, +.layout-single-column .status .status__content:has(.status__content__text:empty) + .video-player, +.layout-single-column .status .status__content:has(.status__content__text:empty) + .media-gallery, +.layout-single-column .detailed-status .status__content:has(.status__content__text:empty) + .audio-player, +.layout-single-column .detailed-status .status__content:has(.status__content__text:empty) + .video-player, +.layout-single-column .detailed-status .status__content:has(.status__content__text:empty) + .media-gallery { + margin-top: calc(var(--gap-default) / 2); +} + +.layout-single-column .status__prepend { + padding-left: calc(var(--size-avatar) - 4px); +} + +.layout-single-column .notification.notification-update .account__display-name, +.layout-single-column .notification.notification-follow .account__display-name { + display: inline-flex; + gap: var(--gap-default); + padding-left: calc(var(--size-avatar) + var(--gap-default)); +} + +/* Admin reports and other admin notifications */ +.layout-single-column .notification-admin-report .notification__report { + border-color: var(--color-border); + display: flex; + font-size: var(--font-size); + gap: 16px; + margin-top: 22px; + padding: 16px; + padding-left: calc(var(--size-avatar) + var(--gap-default)); +} + +.layout-single-column .notification-admin-report .notification__report__details { + color: var(--color-dim); + font-size: var(--font-size); +} + +.layout-single-column .notification-admin-report .notification__report__details strong { + font-weight: var(--font-weight-regular); +} + +/* Revert hack for notification admin message that has no avatar visible */ +.layout-single-column .notification-admin-report .notification__message > span { + display: block; + margin-top: calc(var(--size-avatar-small) + 4px); + overflow: visible; +} + +/* Hide things in notifications */ +.layout-single-column .notification .status__relative-time, +.layout-single-column .notification .status__info::before { + display: none; +} + +/* Right side panel */ +.layout-single-column .navigation-panel { + box-sizing: border-box; + margin-top: 0; + overflow-y: auto; + padding: 10px; +} + +.layout-single-column .navigation-panel hr { + /* Hide but reserve space */ + visibility: hidden; +} + +.columns-area__panels__pane--navigational .navigation-panel { + border: 0; + height: 100%; +} + +.layout-single-column .navigation-panel__logo hr { + margin: 0; +} + +/* Attempt to hide scrollbars for .navigation-panel for Firefox */ +.dropdown-menu__container__list--scrollable, +.layout-single-column .navigation-panel { + scrollbar-width: none; +} + +/* Hide scrollbars for .navigation-panel for Chrome and Safari */ +.dropdown-menu__container__list--scrollable::-webkit-scrollbar, +.layout-single-column .navigation-panel::-webkit-scrollbar { + display: none; + width: 4px; +} + +.layout-single-column .column-link { + align-items: center; + color: var(--color-light-text); + display: inline-flex; + font-size: var(--font-size-heading); + gap: var(--gap-column-link); + overflow: visible; + padding-bottom: calc(var(--gap-column-link) + 4px); + padding-left: var(--gap-column-link); + padding-right: calc(var(--gap-column-link) * 1.5); + padding-top: calc(var(--gap-column-link) + 4px); + transition: all 100ms; +} + +[dir="rtl"] .layout-single-column .column-link { + margin-left: auto; + margin-right: 0; +} + +.layout-single-column .column-link > i { + min-width: 1.3em; +} + +.layout-single-column .column-link > span { + position: relative; +} + +.layout-single-column .column-link > span::before { + background-color: var(--color-column-link-hover); + border-radius: 32px; + bottom: calc(2px - var(--gap-column-link) * 1.5); + content: ""; + inset-inline-end: calc(0px - (var(--gap-column-link) * 2)); + inset-inline-start: calc(-1.28571429em - (var(--gap-column-link) * 2)); + opacity: 0; + position: absolute; + top: calc(-4px - var(--gap-column-link)); + transition: opacity 200ms; +} + +/* Accessibility outlines for keyboard navigation */ +.layout-single-column .column-link:focus-visible { + border-color: transparent; + outline: 0; +} + +.layout-single-column .column-link:focus-visible > span::before { + outline: 3px solid var(--color-accent); +} + +.layout-single-column .column-link:focus-visible > span::before, +.layout-single-column .column-link:hover > span::before { + opacity: 1; +} + +.layout-single-column .account__section-headline a { + transition: all 200ms; +} + +.layout-single-column .dropdown-menu__item a:hover, +.layout-single-column .notification__filter-bar button:hover, +.layout-single-column .account__section-headline a:hover { + background-color: var(--color-column-link-hover); +} + +/* Mobile devices */ +@media (hover: none) { + .layout-single-column .notification__filter-bar button.active:hover, + .layout-single-column .account__section-headline a.active:hover { + background-color: transparent; + } +} + +/* Notification filter bar */ +.layout-single-column .notification__filter-bar { + border-bottom: 1px solid var(--color-border); + border-left: 0; + border-right: 0; +} + +.layout-single-column .column-link__icon { + margin: 0; +} + +/* Notification badge on side panel */ +.layout-single-column .icon-with-badge__badge { + align-items: center; + border-radius: 1em; + box-sizing: border-box; + display: flex; + font-size: 11px; + height: 1.7em; + justify-content: center; + left: 12px; + line-height: 1; + min-width: max-content; + padding: 0 0.4em; + top: -7px; + width: 1.7em; +} + +.layout-single-column .column-link--transparent.active { + color: var(--color-light-text); + font-weight: var(--font-weight-bold); +} + +/* Top panel */ +.layout-single-column .account__section-headline a.active::after, +.layout-single-column .account__section-headline button.active::after, +.layout-single-column .notification__filter-bar a.active::after, +.layout-single-column .notification__filter-bar button.active::after { + background-color: var(--color-accent); + border: 0; + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + bottom: -1px; + content: ""; + display: block; + height: 4px; + left: 50%; + min-width: 56px; + position: absolute; + transform: translateX(-50%); +} + +/* Notification icons */ +.layout-single-column .account__section-headline a.active::before, +.layout-single-column .account__section-headline button.active::before, +.layout-single-column .notification__filter-bar a.active::before, +.layout-single-column .notification__filter-bar button.active::before { + display: none; +} + +.layout-single-column .notification.notification-reblog .status__action-bar, +.layout-single-column .notification-group--favourite .status__action-bar, +.layout-single-column .notification.notification-favourite .status__action-bar { + display: none; +} + +.layout-single-column .status__prepend .icon-retweet { + background-image: var(--icon-boost-status-prepend); +} + +.layout-single-column .notification-group .notification-group__icon .icon, +.layout-single-column .notification .notification__message .icon { + align-self: start; + height: 27px; + justify-self: end; + margin-right: 4px; + max-width: 30px; + width: 27px; +} + +.layout-single-column .notification-group .notification-group__icon .icon { + margin-right: 0; +} + +.layout-single-column .notification-group .notification-group__icon { + justify-self: end; + margin-right: 4px; +} + +.layout-single-column .notification-group .notification-group__icon .icon-repeat, +.layout-single-column .notification .notification__message .icon.icon-retweet { + color: var(--color-green); + height: 24px; + width: 24px; +} + +.layout-single-column .notification-group .icon-person-add, +.layout-single-column .notification .icon.icon-user-plus:not(.icon-link) { + color: var(--color-accent-dark); +} + +.layout-single-column .account__relationship .icon.icon-user-plus:not(.icon-link), +.layout-single-column .notification .account__relationship .icon.icon-user-plus:not(.icon-link) { + color: var(--color-dim); +} + +.layout-single-column .notification .icon.icon-flag, +.layout-single-column .notification .icon.icon-tasks:not(.icon-link) { + color: var(--color-accent-dark); +} + +.layout-single-column .notification .icon.icon-home:not(.icon-link) { + color: var(--color-accent-dark); + height: 24px; + width: 24px; +} + +/* Follow/unfollow button */ +.layout-single-column .account__relationship .icon-button, +.layout-single-column .notification .account__relationship .icon-button { + background-color: transparent; +} + +.layout-single-column .notification .account__relationship .icon { + /* stylelint-disable-next-line */ + color: var(--color-dim); + font-size: 20px; +} + +.layout-single-column .list-adder__lists .icon-times::before, +.layout-single-column .account__wrapper .account__relationship .icon-button.active .icon, +.layout-single-column .explore__search-results .account__relationship .icon-button.active .icon, +.layout-single-column .notification .account__relationship .icon-button.active .icon { + /* stylelint-disable-next-line */ + color: var(--color-green); + opacity: .75; +} + +.layout-single-column .list-adder__lists .icon-times:hover::before, +.layout-single-column .explore__search-results .icon-button.active:hover .icon, +.layout-single-column .notification .account__relationship .icon-button.active:hover .icon { + /* stylelint-disable-next-line */ + color: var(--color-red); + opacity: 1; +} + +.layout-single-column .explore__search-results .icon-button:focus .icon, +.layout-single-column .notification .account__relationship .icon-button:focus .icon, +.layout-single-column .explore__search-results .icon-button.active:focus .icon, +.layout-single-column .notification .account__relationship .icon-button.active:focus .icon, +.layout-single-column .explore__search-results .icon-button:hover .icon, +.layout-single-column .notification .account__relationship .icon-button:hover .icon { + /* stylelint-disable-next-line */ + color: var(--color-green); + opacity: 1; +} + +.layout-single-column .notification .account__relationship { + border-radius: 50%; + height: 24px; + transform: translateY(-4px); +} + +/* Emoji-mart search input */ +.layout-single-column .emoji-mart-search-icon svg { + fill: var(--color-border); + opacity: 1; +} + +.layout-single-column .emoji-mart-search > input:focus-visible ~ .emoji-mart-search-icon svg { + fill: var(--color-accent); +} + +.layout-single-column .emoji-mart-search > input { + font-size: var(--font-size-smaller); +} + +.layout-single-column .compose-form__autosuggest-wrapper textarea::placeholder, +.layout-single-column .report-dialog-modal__textarea::placeholder, +.layout-single-column .emoji-mart-search > input::placeholder { + color: var(--color-dim); + opacity: 1; +} + +.layout-single-column .report-dialog-modal__textarea, +.layout-single-column .report-dialog-modal__textarea:focus, +.layout-single-column .emoji-mart-search > input:focus { + color: var(--color-light-text); +} + +.layout-single-column .emoji-mart-search-icon:disabled { + opacity: 1; +} + +/* Search */ +.layout-single-column .search .search__icon .icon-search { + background-image: var(--icon-search); + background-position: center; + background-repeat: no-repeat; + background-size: 20px; + display: inline-block; + height: 24px; + width: 24px; +} + +.layout-single-column .search .search__icon .icon { + inset-inline-start: unset; + position: absolute; + right: 14px; + top: 9px; +} + +.layout-single-column .search .search__icon .icon-search path { + display: none; +} + +.layout-single-column .search.active .search__input, +.layout-single-column input.setting-text, +.layout-single-column .search__input { + background-color: var(--color-mud); + border-color: var(--color-mud); + border-radius: 32px; + color: var(--color-dim); + font-size: var(--font-size); + height: 42px; + padding: 0 20px; +} + +/* Input texts */ +.layout-single-column .search.active .search__input, +.layout-single-column .poll__option input[type="text"], +.layout-single-column input.setting-text:focus, +.layout-single-column .search__input:focus { + color: var(--color-light-text); +} + +/* Poll input */ +.layout-single-column .poll__option input[type="text"] { + background-color: transparent; + border-color: var(--color-border); +} + +.layout-single-column .poll__option input[type="text"]:focus { + border-color: var(--color-accent); +} + +/* Placeholders */ +.layout-single-column .poll__option input[type="text"]::placeholder, +.layout-single-column .search__input::placeholder, +.layout-single-column input::placeholder, +.layout-single-column input.setting-text::placeholder { + color: var(--color-dim); + opacity: 1; +} + +/* Profile */ +.layout-single-column .getting-started__trends h4, +.layout-single-column .account__header__bar { + border-color: var(--color-border); +} + +.layout-single-column .account__header__bio .account__header__fields { + background-color: transparent; + border: 0; + color: var(--color-dim); + display: flex; + flex-wrap: wrap; + gap: var(--gap-default); + padding: 0; +} + +/* New popout styles */ +.layout-single-column .account__domain-pill__popout { + border: 1px solid var(--color-mud); + color: var(--color-light-purple); +} + +.layout-single-column .account__domain-pill__popout__parts > div:nth-child(2) svg { + background-image: var(--icon-globe-purple); + background-size: 24px; +} + +.layout-single-column .account__domain-pill__popout__handle { + background-color: var(--color-dark); + border: 0; + color: var(--color-accent); + padding: 12px 10px; +} + +/* Hide unnecessary header icon for minimalism */ +.layout-single-column .account__domain-pill__popout__header__icon { + display: none; +} + +.account__domain-pill__popout > p { + font-size: var(--font-size-smaller); + line-height: 1.3; +} + +/* Truncate too long links in the profile, like Nostr */ +.layout-single-column .account__header__bio .account__header__fields span > a:only-of-type { + display: block; + max-width: 220px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.layout-single-column .account__header__bio .account__header__fields dl::after { + content: '|'; + order: 2; +} + +/* Recognize empty field and remove pipe */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dd > span:empty)::after { + display: none; +} + +.layout-single-column .account__header__bio .account__header__fields dt { + order: 1; +} + +.layout-single-column .account__header__bio .account__header__fields dd { + order: 3; +} + +/* Hide the character in between Joined label */ +.layout-single-column .account__header__bio .account__header__fields dl:first-of-type::before, +.layout-single-column .account__header__bio .account__header__fields dl:first-of-type::after { + display: none; +} + +/* Make full width... */ +/* stylelint-disable no-duplicate-selectors */ +.layout-single-column .account__header__bio .account__header__fields dl { + width: 100%; +} +/* stylelint-enable no-duplicate-selectors */ + +/* ...except on those that have label with GitHub, github, YouTube or similar */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="website" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title~="Mastodon account" i], dt[title~="Mastodon account" i], dt[title~="account" i], dt[title="Alt account" i], dt[title*="mastodon" i], dt[title*="masto" i], dt[title*="ko-fi" i], dt[title*="kofi" i], dt[title*="paypal" i], dt[title*="patreon" i], dt[title*="threads" i], dt[title*="bluesky" i], dt[title*="nostr" i], dt[title*="facebook" i], dt[title*="friendica" i], dt[title*="pronouns" i], dt[title*="wordpress" i], dt[title*="fb" i], dt[title*="bandcamp" i]) { + max-width: 50%; + order: 9999; + width: auto; +} + +/* Hide labels that show "Website", "YouTube", etc. */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="website" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title~="Mastodon account" i], dt[title~="Mastodon account" i], dt[title~="account" i], dt[title="Alt account" i], dt[title*="mastodon" i], dt[title*="masto" i], dt[title*="ko-fi" i], dt[title*="kofi" i], dt[title*="paypal" i], dt[title*="patreon" i], dt[title*="threads" i], dt[title*="bluesky" i], dt[title*="nostr" i], dt[title*="bandcamp" i], dt[title*="facebook" i], dt[title*="friendica" i], dt[title*="pronouns" i], dt[title*="wordpress" i], dt[title*="fb" i]) dt { + display: none; +} + +/* Hide pipe after link icon and the link icon from the ones that already have an icon */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="website" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title~="Mastodon account" i], dt[title~="Mastodon account" i], dt[title~="account" i], dt[title="Alt account" i], dt[title*="mastodon" i], dt[title*="masto" i], dt[title*="ko-fi" i], dt[title*="kofi" i], dt[title*="paypal" i], dt[title*="patreon" i], dt[title*="threads" i], dt[title*="bluesky" i], dt[title*="nostr" i], dt[title*="bandcamp" i], dt[title*="facebook" i], dt[title*="friendica" i], dt[title*="pronouns" i], dt[title*="wordpress" i], dt[title*="fb" i])::before { + display: none; +} + +/* If GitHub etc. move even further from links */ +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i], dt[title*="youtube" i], dt[title*="twitch" i], dt[title*="twitter" i], dt[title="x" i], dt[title*="discord" i], dt[title*="linkedin" i], dt[title*="instagram" i], dt[title="IG"], dt[title="bandcamp"], dt[title="facebook"], dt[title="friendica"], dt[title="pronouns"], dt[title="wordpress"], dt[title="fb"]) { + order: 99999; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="github" i])::after { + content: var(--icon-github); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="discord" i])::after { + content: var(--icon-discord); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="linkedin" i])::after { + content: var(--icon-linkedin); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title="IG"], dt[title*="instagram" i])::after { + content: var(--icon-instagram); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="youtube" i])::after { + content: var(--icon-youtube); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="twitch" i])::after { + content: var(--icon-twitch); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title="x" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="twitter" i])::after { + content: var(--icon-twitter); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="patreon" i])::after { + content: var(--icon-patreon); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="paypal" i])::after { + content: var(--icon-paypal); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="kofi" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="ko-fi" i])::after { + content: var(--icon-kofi); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="bandcamp" i])::after { + content: var(--icon-bandcamp); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="facebook" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="fb" i])::after { + content: var(--icon-facebook); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="friendica" i])::after { + content: var(--icon-friendica); + height: 18.5px; + transform: scale(.9); + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="pronouns" i])::after { + content: var(--icon-genderless-pronouns); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="wordpress" i])::after { + content: var(--icon-wordpress); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="masto" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="mastodon" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title="Alt account" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title~="account" i])::after, +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title~="Mastodon account" i])::after { + content: var(--icon-mastodon); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="threads" i])::after { + content: var(--icon-threads); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="bluesky" i])::after { + content: var(--icon-bluesky); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dl:has(dt[title*="nostr" i])::after { + content: var(--icon-nostr); + height: 18.5px; + width: 18.5px; +} + +/* Default link icon */ +.layout-single-column .account__header__bio .account__header__fields dl::before { + content: var(--icon-link); + height: 18.5px; + width: 18.5px; +} + +/* If the profile item has no link element, show just label icon */ +.layout-single-column .account__header__bio .account__header__fields dl:not(:has(a))::before { + content: var(--icon-label); + height: 18.5px; + width: 18.5px; +} + +/* Verified colors for Firefox before :has */ +.layout-single-column .account__details .verified-badge a, +.layout-single-column .account__header__bar .account__header__fields .verified__mark, +.layout-single-column .account__header__bar .account__header__fields .verified a, +.layout-single-column .account__header__bar .account__header__bio .account__header__fields .verified a, +.layout-single-column .account__header__bar .account__header__bio .account__header__fields .verified dd { + color: var(--color-verified); + font-weight: var(--font-weight-regular); +} + +/* Reset verified colors */ +.layout-single-column .account__details .verified-badge a, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified__mark, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified a, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__bio .account__header__fields .verified a, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__bio .account__header__fields .verified dd { + color: var(--color-accent); + font-weight: var(--font-weight-regular); +} + +/* Replace verified__mark */ +.layout-single-column .account__details .verified-badge .verified-badge__mark, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified__mark { + background-image: var(--icon-verified-smaller); + background-repeat: no-repeat; + height: 15px; + width: 15px; +} + +.layout-single-column .account__details .verified-badge .verified-badge__mark path, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified__mark path { + display: none; +} + +.layout-single-column .account__details .verified-badge, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified dd { + align-items: center; + display: inline-flex; + gap: 4px; +} + +.layout-single-column .account__details .verified-badge .verified-badge__mark, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified dd span:nth-child(1) { + align-items: center; + display: flex; + order: 2; +} + +.layout-single-column .account__details .verified-badge > span, +.layout-single-column .account__header__bar:has(.account__header__fields .verified) .account__header__fields .verified dd span:nth-child(2) { + order: 1; +} + +/* Joined label */ +.layout-single-column .account__header__bio .account__header__fields dt:not([title]) { + display: inline-flex; + font-weight: var(--font-weight-regular); + gap: calc(var(--gap-default) / 2); + text-transform: unset; +} + +.layout-single-column h4, +.layout-single-column .search__popout h4, +.layout-single-column .search-popout h4, +.layout-single-column .server-banner h4 { + text-transform: unset; +} + +.layout-single-column .account__header__bio .account__header__fields dt:not([title])::before { + content: url('data:image/svg+xml, %3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true" fill="%23717c9b" class="r-115tad6 r-4qtqp9 r-yyyyoo r-1xvli5t r-1d4mawv r-dnmrzs r-bnwqim r-1plcrui r-lrvibr"%3E%3Cg%3E%3Cpath d="M7 4V3h2v1h6V3h2v1h1.5C19.89 4 21 5.12 21 6.5v12c0 1.38-1.11 2.5-2.5 2.5h-13C4.12 21 3 19.88 3 18.5v-12C3 5.12 4.12 4 5.5 4H7zm0 2H5.5c-.27 0-.5.22-.5.5v12c0 .28.23.5.5.5h13c.28 0 .5-.22.5-.5v-12c0-.28-.22-.5-.5-.5H17v1h-2V6H9v1H7V6zm0 6h2v-2H7v2zm0 4h2v-2H7v2zm4-4h2v-2h-2v2zm0 4h2v-2h-2v2zm4-4h2v-2h-2v2z"%3E%3C/path%3E%3C/g%3E%3C/svg%3E'); + height: 18.5px; + width: 18.5px; +} + +.layout-single-column .account__header__bio .account__header__fields dd, +.layout-single-column .account__header__bio .account__header__fields dt { + color: var(--color-dim); + font-size: var(--font-size); + font-weight: var(--font-weight-regular); + text-transform: unset; +} + +/* stylelint-disable no-duplicate-selectors */ +.layout-single-column .account__header__bio .account__header__fields dl { + background-color: transparent; + border: 0; + color: var(--color-dim); + display: inline-flex; + font-size: var(--font-size); + font-weight: var(--font-weight-regular); + gap: calc(var(--gap-default) / 2); + padding: 0; +} + +/* stylelint-enable no-duplicate-selectors */ +.layout-single-column .getting-started__trends h4 { + border: 0; + font-size: var(--font-size-heading); + font-weight: var(--font-weight-bold); + line-height: 24px; + margin-bottom: var(--gap-default); + text-transform: unset; +} + +.layout-single-column .getting-started__trends { + margin-top: calc(var(--gap-default) * 2); +} + +.layout-single-column .trends__item__name a { + font-size: var(--font-size); +} + +.layout-single-column .trends__item__name { + display: grid; + gap: 4px; +} + +.layout-single-column .account__header__image { + height: 200px; +} + +.layout-single-column .account__header__bar .avatar .account__avatar { + background-color: transparent; + border: 0; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + height: 133.5px !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 133.5px !important; +} + +.layout-single-column .account__header__tabs { + overflow: visible; +} + +.layout-single-column .account__header__tabs .account-role { + display: none; + width: 133.5px; +} + +/* Follow/unfollow button */ +body.embed .button.logo-button, +.layout-single-column .notification__report__actions .button, +.layout-single-column .column-inline-form button, +.layout-single-column .explore__suggestions .account-card__actions__button button, +.layout-single-column .account__header__tabs__buttons .button, +.layout-single-column .account .account__relationship > .button, +.layout-single-column .notification .account__relationship > .button { + background-color: transparent; + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + color: var(--color-light-text); + font-size: var(--font-size); + max-width: 36vw; + overflow: hidden; + padding-left: 16px; + padding-right: 16px; + text-overflow: ellipsis; + transition: all 200ms; + white-space: nowrap; +} + +/* Dark button borders and other things that have borders all around */ +body.embed .button.logo-button, +.layout-single-column .notification__report__actions .button, +.layout-single-column .column-inline-form button, +.layout-single-column .explore__suggestions .account-card__actions__button button, +.layout-single-column .account__header__tabs__buttons .button, +.layout-single-column .account__header__tabs__buttons .icon-button, +.layout-single-column .notification .account__relationship > .button, +.layout-single-column .account .account__relationship > .button { + border: 1px solid var(--color-outer-space); +} + +.layout-single-column .account__header__tabs__buttons .icon-button { + color: var(--color-light-text); +} + +/* Fix focus overflow for 4.1.4-nightly */ +.layout-single-column .account__header__tabs__buttons { + overflow: visible; +} + +/* stylelint-disable-next-line */ +.layout-single-column .account__header__tabs__buttons .icon-button { + align-items: center; + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; + display: inline-flex; + height: 36px; + justify-content: center; + padding: 0; + width: 36px; +} + +/* Copy-icon size in profile */ +.layout-single-column .account__header__tabs__buttons .icon-button svg { + height: 18px; + width: 18px; +} + +body.embed .button.logo-button:hover, +.layout-single-column .column-inline-form button:hover, +.layout-single-column .explore__suggestions .account-card__actions__button button:hover, +.layout-single-column .account__header__tabs__buttons .icon-button.active { + color: var(--color-light-text); +} + +.layout-single-column .account__header__tabs__buttons .icon-button .icon-bell-o, +.layout-single-column .account__header__tabs__buttons .icon-button .icon-bell { + background-image: var(--icon-bell-header-tabs); +} + +.layout-single-column .account__header__tabs__buttons .icon-button.active .icon-bell-o, +.layout-single-column .account__header__tabs__buttons .icon-button.active .icon-bell { + background-image: var(--icon-bell-header-tabs-active); +} + +.layout-single-column .explore__suggestions .account-card__actions__button button:hover, +.layout-single-column .account__header__tabs__buttons .button:focus, +.layout-single-column .account__header__tabs__buttons .button:hover, +.layout-single-column .notification .account__relationship > .button:hover, +.layout-single-column .notification .account__relationship > .button:focus, +.layout-single-column .account .account__relationship > .button:hover, +.layout-single-column .account .account__relationship > .button:focus { + background-color: var(--color-profile-button-hover); +} + +.layout-single-column .detailed-status__action-bar .icon-button:focus, +.layout-single-column .status__action-bar .icon-button:focus, +.layout-single-column .detailed-status__action-bar .icon-button:hover, +.layout-single-column .status__action-bar .icon-button:hover { + background-color: transparent; +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover::after, +.layout-single-column .status__action-bar .icon-button:hover::after { + opacity: 1; +} + +.layout-single-column .detailed-status__action-bar .icon-button::after, +.layout-single-column .status__action-bar .icon-button::after { + background-color: rgba(96, 105, 132, .15); + border-radius: 50%; + content: ''; + height: 36px; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: -8px; + transform: translateX(8px) translateY(1px); + width: 36px; + z-index: -1; +} + +.layout-single-column .conversation .icon-button::after { + transform: translateX(-8px) translateY(1px); +} + +.layout-single-column .conversation__content { + overflow: visible; +} + +.layout-single-column .detailed-status__button { + max-height: 24px; + max-width: 120px; + position: relative; +} + +.layout-single-column .detailed-status__button .icon-button.star-icon::after { + transform: translateX(3px); +} + +.layout-single-column .status__action-bar .icon-button.icon-button--with-counter::after { + transform: translateX(0) translateY(0); +} + +/* Misc UI fixes */ +.layout-single-column .search__icon .icon.active { + opacity: 1; +} + +/* Follow recommendations, "Who to follow" since Mastodon v4.3.0-alpha.1 (2024-02-01) */ +.layout-single-column .inline-follow-suggestions__body__scrollable__card .account__avatar { + background-color: transparent; + border: 0; +} + +/* Explore -> For you shade in bio */ +.layout-single-column .scrollable .account-card__bio::after { + /* stylelint-disable-next-line */ + background: linear-gradient(270deg, var(--color-bg), transparent); +} + +/* Empty column */ +.layout-single-column .empty-column-indicator { + min-height: 120px; +} + +.layout-single-column .status__prepend + .status { + padding-top: 10px; +} + +.layout-single-column .search__icon .icon-times-circle { + top: 9px; +} + +.layout-single-column .setting-text__toolbar { + align-items: center; +} + +.layout-single-column .timeline-hint strong { + display: block; + margin-bottom: var(--gap-default); +} + +.layout-single-column .timeline-hint br { + display: none; +} + +/* General fixes */ +.layout-single-column .account__header__bar .avatar { + /* stylelint-disable-next-line */ + margin-left: 0 !important; +} + +/* Fix for button line-height */ +.layout-single-column .button.logo-button { + line-height: 22px; +} + +/* Visual indicator about direct messages + @source https://github.com/mastodon/mastodon/issues/22158#issuecomment-1353661031 */ + +.layout-single-column .detailed-status-direct { + position: relative; +} + +.layout-single-column .status__wrapper-direct::after, +.layout-single-column .detailed-status-direct::after { + border-left: 20px solid transparent; + border-top: 20px solid var(--color-accent); + /* Add a ribbon to the corner */ + content: ''; + height: 0; + position: absolute; + right: 0; + top: 0; + width: 0; +} + +.layout-single-column .notification .status__wrapper-direct::after { + top: -40px; +} + +/* Private message conversations */ +.layout-single-column .conversation .status__action-bar { + padding-left: 0; +} + +/* Default buttons */ +.layout-single-column .compose-form__buttons button, +.layout-single-column .button { + border-bottom-left-radius: 9999px; + border-bottom-right-radius: 9999px; + border-top-left-radius: 9999px; + border-top-right-radius: 9999px; +} + +/* Compose hover and focus fix */ +.layout-single-column .report-dialog-modal__actions .button:hover, +.layout-single-column .server-banner .button, +.layout-single-column .sign-in-banner .button, +.layout-single-column .ui__header__links .button, +.layout-single-column .compose-form__publish-button-wrapper button { + background-color: var(--color-accent-dark); + border-color: var(--color-accent-dark); + color: var(--color-button-text); + transition: all 200ms; +} + +/* Compose form */ +.layout-single-column .compose-panel .compose-form__highlightable, +.layout-single-column .compose-panel .compose-form { + background-color: transparent; + border: 0; + margin-bottom: 0; + position: relative; + z-index: 4; +} + +/* New compose form buttons from 4.3.0-alpha 2024-01-27 */ +.layout-single-column .compose-form__dropdowns { + gap: 10px; +} + +.layout-single-column .compose-form__dropdowns .dropdown-button.active, +.layout-single-column .compose-form__dropdowns .dropdown-button { + background-color: transparent; + border: 0; + color: var(--color-dim); + padding: 0; +} + +.layout-single-column .compose-form__dropdowns .dropdown-button.active, +.layout-single-column .compose-form__dropdowns .dropdown-button:hover, +.layout-single-column .compose-form__dropdowns .dropdown-button:focus { + color: var(--color-accent); +} + +.layout-single-column .compose-form__submit { + flex: unset; +} + +.layout-single-column .compose-form__actions { + justify-content: space-between; +} + +.layout-single-column .compose-form__actions .icon-button.active { + background-color: transparent; + color: var(--color-accent); +} + +/* Footer items */ +.link-footer { + position: relative; + z-index: 5; +} + +.layout-single-column .compose-form__footer { + gap: 4px; + padding-bottom: 6px; +} + +/* Add slight background color for the compose form */ +/* stylelint-disable-next-line no-duplicate-selectors */ +.layout-single-column .compose-form .compose-form__highlightable, +.layout-single-column .compose-form__highlightable .compose-form__buttons-wrapper, +.layout-single-column .compose-form .compose-form__autosuggest-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper { + background-color: var(--color-bg-compose-form); + border-color: var(--color-bg-compose-form); + padding-top: 0; + transition: all 200ms; +} + +/* Smooth color transition on focus */ +.layout-single-column .compose-form .compose-form__highlightable:focus-within, +.layout-single-column .compose-form .compose-form__autosuggest-wrapper:focus-within, +.layout-single-column .compose-form .compose-form__autosuggest-wrapper:focus-within ~ .compose-form__buttons-wrapper, +.layout-single-column .compose-form__highlightable .compose-form__autosuggest-wrapper:focus-within ~ .compose-form__buttons-wrapper { + background-color: var(--color-bg-compose-form-focus); + border-color: var(--color-bg-compose-form-focus); +} + +/* Fixes bottom row padding when there's a background */ +.layout-single-column .compose-form__highlightable .compose-form__buttons-wrapper, +.layout-single-column .compose-form .compose-form__buttons-wrapper { + padding: calc(var(--gap-default) / 2); +} + +.layout-single-column .navigation-bar + .compose-form { + padding-top: 10px; +} + +.layout-single-column .server-banner .button:hover, +.layout-single-column .server-banner .button:focus, +.layout-single-column .sign-in-banner .button:hover, +.layout-single-column .sign-in-banner .button:hover:focus, +.layout-single-column .ui__header__links .button:hover, +.layout-single-column .ui__header__links .button:focus, +.layout-single-column .compose-form__publish-button-wrapper button:hover, +.layout-single-column .compose-form__publish-button-wrapper button:focus { + background-color: var(--color-brand-mastodon-links); + border-color: var(--color-brand-mastodon-links); + color: var(--color-button-text); +} + +/* Tertiary button */ +.layout-single-column .button.button-tertiary { + /* stylelint-disable-next-line */ + background-color: transparent !important; + /* stylelint-disable-next-line */ + border: 1px solid var(--color-accent-dark) !important; + color: var(--color-ghost-button-text); + padding: 6px 17px; +} + +.layout-single-column .button.button-tertiary:active, +.layout-single-column .button.button-tertiary:focus, +.layout-single-column .button.button-tertiary:hover { + border: 1px solid var(--color-accent-dark); +} + +/* Secondary button */ +.layout-single-column .button.button-secondary { + /* stylelint-disable-next-line */ + background-color: transparent; + border: 1px solid var(--color-dim); + color: var(--color-dim); +} + +.layout-single-column .button.button-secondary:hover { + /* stylelint-disable-next-line */ + background-color: var(--color-light-text); + border-color: var(--color-light-text); + color: var(--color-bg); +} + +.layout-single-column .button.button-tertiary:focus, +.layout-single-column .button.button-tertiary:hover { + /* stylelint-disable-next-line */ + background-color: var(--color-brand-mastodon-links) !important; + /* stylelint-disable-next-line */ + border-color: var(--color-brand-mastodon-links) !important; + /* stylelint-disable-next-line */ + color: var(--color-bg) !important; + + /* This is actually wrong in Mastodon default UI as well, hover should not have padding but yet it has */ + padding: 6px 17px; +} + +/* Smaller icon for back button */ +.layout-single-column .column-back-button i, +.layout-single-column .column-header__back-button i { + font-size: 12px; +} + +.layout-single-column .icon-button__counter { + font-size: var(--font-size-smaller); +} + +/* Smaller icons for status action bar */ +.layout-single-column .status__action-bar .icon { + font-size: 14.6px; + min-width: 18px; +} + +.layout-single-column .status__action-bar .icon.icon-retweet { + min-width: 21px; +} + +.layout-single-column .status__action-bar .icon-button--with-counter { + align-items: center; + display: inline-flex; + gap: 6px; +} + +.layout-single-column .status__action-bar .icon-button { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + height: 24px !important; + /* stylelint-disable-next-line */ + min-width: 45.78px !important; + position: relative; + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: unset !important; +} + +/* Fix reply button not starting from the beginning */ +.layout-single-column .status__action-bar .icon-button:nth-of-type(1) { + /* stylelint-disable-next-line */ + min-width: auto !important; + /* stylelint-disable-next-line */ + width: auto !important; +} + +.layout-single-column .status__action-bar .icon-button:nth-of-type(1)::after { + transform: translateX(-4px) translateY(0); +} + +@media screen and (min-width: 890px) { + /* Hide the space between Lists and the actual lists */ + .layout-single-column .list-panel > hr, + .layout-single-column .list-panel + hr { + display: none; + } + + /* Hide lists if there's not enough space on desktop vertically */ + .layout-single-column .list-panel { + display: none; + opacity: 0; + transition: all 200ms; + } + + .layout-single-column .list-panel:focus, + .layout-single-column .list-panel:hover, + .layout-single-column .column-link[href="/lists"]:focus ~ .list-panel, + .layout-single-column .column-link[href="/lists"]:hover ~ .list-panel { + display: block; + opacity: 1; + } + + /* Order of the side nav items */ + .layout-single-column .navigation-panel__logo { + order: 1; + } + + .layout-single-column .column-link[href="/home"] { + order: 2; + } + + .layout-single-column .column-link[href="/notifications"] { + order: 3; + } + + .layout-single-column .column-link[href="/explore"] { + order: 4; + } + + .layout-single-column .column-link[href="/public/local"] { + order: 5; + } + + .layout-single-column .column-link[href="/public"] { + order: 6; + } + + .layout-single-column .column-link[href="/conversations"] { + order: 7; + } + + .layout-single-column .column-link[href='/follow_requests'] { + order: 8; + } + + .layout-single-column .column-link[href="/bookmarks"] { + order: 9; + } + + .layout-single-column .column-link[href="/favourites"] { + order: 10; + } + + .layout-single-column .column-link[href="/search"] { + order: 12; + } + + .layout-single-column .column-link[href="/lists"] { + order: 13; + } + + /* stylelint-disable-next-line no-duplicate-selectors */ + .layout-single-column .list-panel { + order: 13; + } + + .layout-single-column .column-link[href="/settings/preferences"] { + order: 11; + } + + .layout-single-column .navigation-panel__sign-in-banner, + .layout-single-column .navigation-panel__legal { + order: 14; + } + + .layout-single-column .flex-spacer { + order: 15; + } + + .layout-single-column .getting-started__trends { + order: 16; + } + + .layout-single-column .status__action-bar .icon-button { + /* stylelint-disable-next-line */ + height: 24px !important; + position: relative; + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 50px !important; + } + + .layout-single-column .conversation .status__action-bar .icon-button { + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: auto !important; + } + + /* Fix list links if they are too short */ + .layout-single-column .list-panel .column-link { + display: flex; + } +} + +/* Replace bookmark icon */ +.layout-single-column .status .icon-button:hover:focus .icon-bookmark, +.layout-single-column .status .icon-button:focus .icon-bookmark, +.layout-single-column .status .icon-button.active .icon-bookmark { + background-image: var(--icon-bookmark-active); +} + +.layout-single-column .status button.icon-button:hover .icon-bookmark { + background-image: var(--icon-bookmark-status-hover); +} + +/* Replace the original icons (after 4.3.0) +------------------------------------------- + +/* Set size for the filter bar and profile icons */ +/* stylelint-disable-next-line */ +.layout-single-column .account__header__tabs__buttons .icon, +.layout-single-column .notification__filter-bar .icon { + --size-icon: 20px; +} + +/* Set size for the column link icons */ +.layout-single-column .column-link .icon { + --size-icon: 24px; + height: 26px; + width: 26px; +} + +/* Set size for the status icons */ +.layout-single-column .detailed-status__action-bar .icon, +.layout-single-column .status__action-bar .icon { + --size-icon: 19px; +} + +/* General for all column icons */ +/* stylelint-disable-next-line */ +.layout-single-column .notification-group--favourite .notification__message > .icon, +.layout-single-column .notification-favourite .notification__message > .icon, +.layout-single-column .notification-reblog .notification__message > .icon, +.layout-single-column .account__header__tabs__buttons .icon, +.layout-single-column .detailed-status__action-bar .icon, +.layout-single-column .status__action-bar .icon, +.layout-single-column .notification__filter-bar .icon, +.layout-single-column .column-link .icon { + background-position: center; + background-repeat: no-repeat; + position: relative; +} + +/* stylelint-disable-next-line */ +.layout-single-column .list-adder__lists .icon-plus, +.layout-single-column .list-adder__lists .icon-times, +.layout-single-column .detailed-status__action-bar .icon, +.layout-single-column .status__action-bar .icon, +.layout-single-column .notification__filter-bar .icon, +.layout-single-column .column-header__button .icon-sliders, +.layout-single-column .column-link .icon { + background-size: var(--size-icon) var(--size-icon); + height: var(--size-icon); + width: var(--size-icon); +} + +.layout-single-column .account__header__tabs__buttons .icon { + background-position: center; + background-size: var(--size-icon) var(--size-icon); +} + +.layout-single-column .status__prepend .icon.icon-at { + height: 18px; + position: relative; + top: 2px; + width: 18px; +} + +/* Hide the original icon from behind */ +.layout-single-column .list-adder__lists .icon-plus > path, +.layout-single-column .list-adder__lists .icon-times > path, +.layout-single-column .list-adder__lists .list__display-name svg > path, +.layout-single-column .status__prepend .icon.icon-retweet path, +.layout-single-column .notification-group--reblog > .notification-group__icon > .icon path, +.layout-single-column .notification-reblog .notification__message > .icon path, +.layout-single-column .notification-group--favourite > .notification-group__icon > .icon path, +.layout-single-column .notification-group--favourite .notification__message > .icon path, +.layout-single-column .notification-favourite .notification__message > .icon path, +.layout-single-column .account__header__tabs__buttons .icon path, +.layout-single-column .detailed-status__action-bar .icon path, +.layout-single-column .notification__filter-bar .icon path, +.layout-single-column .status__action-bar path, +.layout-single-column .column-link .icon path, +.layout-single-column .load-more path, +.layout-single-column .account__domain-pill__popout__parts > div:nth-child(2) path, +.layout-single-column .column-header__button .icon-sliders > path, +.compose-form .icon-close > path { + display: none; +} + +/* ...except for these icons, we kinda like them as they are */ +.layout-single-column .icon-user-plus.column-link__icon path, +.layout-single-column .icon.icon-undefined path, +.layout-single-column .icon.icon-users path, +.layout-single-column .account__header__tabs__buttons .icon.icon-user-plus path, +.layout-single-column .notification__filter-bar .icon.icon-user-plus path, +.layout-single-column .account__header__tabs__buttons .icon.icon-tasks path, +.layout-single-column .notification__filter-bar .icon.icon-tasks path { + display: block; +} + +/* Home icon */ +.layout-single-column .column-link .icon-home { + background-image: var(--icon-home); +} + +.layout-single-column .column-link.active .icon-home { + background-image: var(--icon-home-column-link-active); +} + +.layout-single-column .notification__filter-bar .icon-home { + background-image: var(--icon-home-notification); +} + +.layout-single-column .notification__filter-bar .active .icon-home { + background-image: var(--icon-home-notification-active); +} + +.layout-single-column .list-adder__lists .icon-plus { + --size-icon: 20px; + background-image: var(--icon-plus); +} + +.layout-single-column .list-adder__lists .icon-times { + --size-icon: 20px; + background-image: var(--icon-checked-green); +} + +.layout-single-column .list-adder__lists .icon-button:hover .icon-plus { + background-image: var(--icon-plus-green); +} + +.layout-single-column .list-adder__lists .icon-button:hover .icon-times { + background-image: var(--icon-cross-red); +} + +/* Notifications icon */ +.layout-single-column .icon.icon-bell-o, +.layout-single-column .column-link .icon-bell { + background-image: var(--icon-bell); +} + +.layout-single-column .active .icon.icon-bell, +.layout-single-column .column-link.active .icon-bell { + background-image: var(--icon-bell-active); +} + +/* Explore icon */ +.layout-single-column .column-link .icon-explore, +.layout-single-column .column-link .icon-hashtag { + background-image: var(--icon-hashtag); +} + +.layout-single-column .column-link.active .icon-explore, +.layout-single-column .column-link.active .icon-hashtag { + background-image: var(--icon-hashtag-active); +} + +/* Live feeds icon */ +.layout-single-column .column-link .icon-globe { + background-image: var(--icon-globe); +} + +.layout-single-column .column-link.active .icon-globe { + background-image: var(--icon-globe-active); +} + +/* Private mentions icon */ +.layout-single-column .column-link .icon-at { + background-image: var(--icon-direct-messages); +} + +.layout-single-column .column-link.active .icon-at { + background-image: var(--icon-direct-messages-active); + transform: scale(1.15); +} + +/* Bookmarks icon */ +.layout-single-column .column-link .icon-bookmarks { + background-image: var(--icon-bookmark-column-link); +} + +.layout-single-column .column-link.active .icon-bookmarks { + background-image: var(--icon-bookmark-column-link-active); +} + +/* Preferences icon */ +.layout-single-column .column-link .icon-cog { + --size-icon: 24px; + background-image: var(--icon-sliders-contrast); +} + +/* Settings icon */ +.layout-single-column .column-header__button .icon-sliders { + --size-icon: 20px; + background-image: var(--icon-sliders); +} + +/* Replace retweet icon */ +.layout-single-column .notification__filter-bar .icon-retweet { + background-image: var(--icon-boost-notification-filter-bar); +} + +.layout-single-column .notification__filter-bar .active .icon-retweet { + background-image: var(--icon-boost-notification-filter-bar-active); +} + +.layout-single-column .notification__filter-bar .active .icon-mailreply, +.layout-single-column .notification__filter-bar .active .icon-reply-all, +.layout-single-column .notification__filter-bar .active .icon-reply { + background-image: var(--icon-reply-nofitication-filter-bar-active); +} + +.layout-single-column .detailed-status button.icon-button .icon-retweet, +.layout-single-column .status button.icon-button .icon-retweet { + background-image: var(--icon-boost-status); + background-position: center; + background-repeat: no-repeat; +} + +/* Replace notification retweet icon */ +.layout-single-column .notification-group--reblog .icon-repeat, +.layout-single-column .notification-reblog .icon-retweet { + background-image: var(--icon-boost-notification-wrapper); +} + +/* stylelint-disable-next-line */ +.layout-single-column button.icon-button .icon-retweet { + --size-icon: 20px; + background-image: var(--icon-boost); + background-position: center; + background-repeat: no-repeat; +} + +.layout-single-column button.icon-button:hover .icon-retweet, +.layout-single-column button.icon-button.active .icon-retweet { + background-image: var(--icon-boost-active); + background-position: center; + background-repeat: no-repeat; +} + +/* Un-boost and un-bookmark styles */ +/* Mobile devices */ +.layout-single-column button.icon-button:not(.active):focus .icon-retweet, +.layout-single-column button.icon-button:not(.active):hover .icon-retweet { + animation: none; + background-image: var(--icon-boost); +} + +.layout-single-column .status button.icon-button:not(.active):focus .icon-bookmark, +.layout-single-column .status button.icon-button:not(.active):hover .icon-bookmark { + background-image: var(--icon-bookmark); +} + +/* Un-boost and un-bookmark numbers on explore page */ +.layout-single-column button.icon-button:not(.active):focus .icon-retweet ~ span, +.layout-single-column button.icon-button:not(.active):hover .icon-retweet ~ span { + color: var(--color-dim); +} + +/* Replace bookmark icon */ +.layout-single-column .detailed-status .icon-bookmark, +.layout-single-column .status .icon-bookmark { + background-image: var(--icon-bookmark); +} + +/* If a hover device */ +@media (hover: hover) { + .layout-single-column button.icon-button:not(.active):hover .icon-retweet, + .layout-single-column button.icon-button:not(.active):hover .icon-retweet ~ span { + color: var(--color-green); + } + + .layout-single-column .status button.icon-button:not(.active):hover .icon-bookmark { + /* stylelint-disable-next-line */ + background-image: var(--icon-bookmark-status-hover-red); + } + + .layout-single-column button.icon-button:not(.active):hover .icon-retweet { + /* stylelint-disable-next-line */ + background-image: var(--icon-boost-active) !important; + } +} + +.layout-single-column button.icon-button:hover .icon-retweet ~ span, +.layout-single-column button.icon-button.active .icon-retweet ~ span { + color: var(--color-green); +} + +.layout-single-column button.icon-button:hover .icon-star ~ span, +.layout-single-column button.icon-button.active .icon-star ~ span { + color: var(--color-red); +} + +/* Replace reply icon */ +.layout-single-column .notification__filter-bar .icon-mail-reply, +.layout-single-column .notification__filter-bar .icon-reply, +.layout-single-column .notification__filter-bar .icon-reply-all { + --size-icon: 19px; + position: relative; + top: 1px; +} + +.layout-single-column .conversation .icon-reply, +.layout-single-column .notification__filter-bar .icon-mail-reply, +.layout-single-column .notification__filter-bar .icon-reply, +.layout-single-column .notification__filter-bar .icon-reply-all, +.layout-single-column .detailed-status .icon-mail-reply, +.layout-single-column .detailed-status .icon-reply, +.layout-single-column .detailed-status .icon-reply-all, +.layout-single-column .status .icon-mail-reply, +.layout-single-column .status .icon-reply, +.layout-single-column .status .icon-reply-all { + background-image: var(--icon-reply); +} + +.layout-single-column .detailed-status__action-bar .icon-mail-reply, +.layout-single-column .detailed-status__action-bar .icon-reply, +.layout-single-column .detailed-status__action-bar .icon-reply-all { + background-image: var(--icon-reply-detailed-status-action-bar); +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-mail-reply, +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-reply, +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-reply-all { + background-image: var(--icon-reply-detailed-status-action-bar-hover); +} + +.layout-single-column .conversation .icon-button:hover .icon-reply { + background-image: var(--icon-reply-conversation); +} + +.layout-single-column .detailed-status__action-bar .icon-bookmark { + background-image: var(--icon-bookmark-detailed-status-action-bar); +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-bookmark { + background-image: var(--icon-bookmark-detailed-status-action-bar-hover); +} + +.layout-single-column .detailed-status__action-bar .icon-button.active .icon-bookmark { + background-image: var(--icon-bookmark-detailed-status-action-bar-active); +} + +.layout-single-column .status button.icon-button:hover .icon-mail-reply, +.layout-single-column .status button.icon-button:hover .icon-reply, +.layout-single-column .status button.icon-button:hover .icon-reply-all { + background-image: var(--icon-reply-status-hover); +} + +/* More icons */ +.layout-single-column .icon-list-ul { + background-image: var(--icon-list); + top: 1px; +} + +/* "More" icon */ +.layout-single-column .icon-ellipsis-h { + background-image: var(--icon-more-status-action-bar); +} + +.layout-single-column .icon-ellipsis-v { + background-image: var(--icon-more); +} + +.layout-single-column .icon-search { + background-image: var(--icon-search-opaque); +} + +/* Close icon */ +.layout-single-column .icon-close { + background-image: var(--icon-close); +} + +.layout-single-column .status .icon-close { + background-image: var(--icon-close-action-bar); +} + +.layout-single-column .relationship-tag { + background-color: var(--color-mud); + color: var(--color-light-text); + font-size: 11px; + font-weight: var(--font-weight-semibold); + line-height: 12px; + opacity: 1; +} + +/* iPad etc. */ +@media (max-width: 1174px) { + .layout-single-column .detailed-status__action-bar .icon-button::after, + .layout-single-column .status__action-bar .icon-button::after, + .layout-single-column .detailed-status__action-bar-dropdown .icon-button::after { + display: none; + } + + .layout-single-column .ui__header, + .layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, + .layout-single-column .tabs-bar__wrapper { + backdrop-filter: unset; + background-color: transparent; + border: 0; + padding: 0; + } + + .layout-single-column .columns-area__panels__main { + width: calc(100% - var(--width-side-panel)); + } +} + +/* In-between breakpoint */ +@media (min-width: 889px) and (max-width: 1174px) { + .layout-single-column .columns-area__panels__main > div { + border-right: 0; + } + + .layout-single-column .ui__header, + .layout-single-column .columns-area__panels__main > div.tabs-bar__wrapper, + .layout-single-column .tabs-bar__wrapper { + backdrop-filter: blur(12px); + background-color: var(--color-bg-75); + border-color: var(--color-border); + } + + .layout-single-column .columns-area__panels { + width: calc(100% - 1px); + } + + .layout-single-column .columns-area__panels__main > .tabs-bar__wrapper { + border-right: 0; + } +} + +/* Mobile */ +@media screen and (max-width: 889px) { + /* Better blur overlay for ui-header */ + .layout-single-column .ui::after { + backdrop-filter: blur(12px); + /* stylelint-disable-next-line */ + -webkit-backface-visibility: hidden; + background-color: var(--color-bg-75); + content: ''; + /* Height is .ui__header + .tabs-bar__wrapper */ + height: calc(48px + 56px); + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 1; + } + + /* Fix navigation-bar getting underneath layer */ + .layout-single-column .navigation-bar { + z-index: 2; + } + + .layout-single-column .tabs-bar__wrapper { + margin-right: 0; + position: sticky; + top: 55px; + z-index: 2; + } + + .layout-single-column .columns-area__panels__main { + order: 1; + position: unset; + width: 100%; + } + + .layout-single-column .columns-area__panels { + flex-direction: column; + justify-content: flex-start; + } + + .layout-single-column .columns-area__panels__main::-webkit-scrollbar { + display: none; + } + + .layout-single-column .columns-area__panels__pane--navigational .columns-area__panels__pane__inner { + background-color: var(--color-bg); + border-top: 1px solid var(--color-border); + bottom: 0; + height: 3.5rem; + left: 0; + max-height: 16vh; + width: 100vw; + } + + .layout-single-column .columns-area__panels__pane--navigational .navigation-panel { + flex-direction: row; + gap: 0; + height: 100%; + overflow-x: auto; + padding: 0; + } + + .layout-single-column .columns-area__panels__pane--navigational .navigation-panel .flex-spacer { + display: none; + } + + .layout-single-column .column-link { + justify-content: center; + margin-right: unset; + padding-bottom: 0; + padding-left: var(--gap-column-link); + padding-right: var(--gap-column-link); + padding-top: 0; + width: 38px; + } + + .layout-single-column .item-list .column-link { + padding-bottom: 4px; + padding-top: 4px; + width: unset; + } + + .layout-single-column .column-link:hover, + .layout-single-column .column-link:focus { + /* stylelint-disable-next-line */ + background-color: transparent !important; + } + + .columns-area__panels__pane--navigational .column-link__icon.icon-home { + font-size: 27px; + } + + .columns-area__panels__pane--navigational .column-link__icon.icon-ellipsis-h { + position: relative; + top: -4px; + } + + .layout-single-column .columns-area__panels__main > div, + .layout-single-column .columns-area__panels__main > div.columns-area.columns-area--mobile { + border: 0; + } + + .layout-single-column .ui__header { + align-items: center; + border-bottom: 0; + box-sizing: border-box; + display: flex; + height: 56px; + justify-content: space-between; + position: sticky; + top: 0; + width: 100%; + z-index: 2; + } + + .layout-single-column .account__header__bar .avatar .account__avatar { + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + height: 106px !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + width: 106px !important; + } + + .layout-single-column .account__header__image { + height: 157px; + } + + .layout-single-column .column > .scrollable { + padding-bottom: 55px; + } + + .layout-single-column .actions-modal ul li:not(:empty) a { + color: var(--color-light-text); + } + + /* "Your lists" view */ + .layout-single-column .column-subheading ~ article { + padding-bottom: calc(var(--gap-default) / 2); + padding-top: calc(var(--gap-default) / 2); + } + + .layout-single-column .compose-form { + padding-bottom: calc(3.5rem + calc(var(--gap-default) * 2)); + } + + /* Column items order */ + .layout-single-column .navigation-panel .column-link, + .layout-single-column .navigation-panel .list-panel, + .layout-single-column .navigation-panel hr, + .layout-single-column .navigation-panel .navigation-panel__logo { + order: 99; + } + + /* Make the column link 1/4 of width of the screen */ + .layout-single-column .navigation-panel .navigation-panel__legal, + .layout-single-column .navigation-panel .column-link { + border: 0; + flex: 0 0 calc(100vw / 4); + margin-inline: 0; + padding: 0; + padding-inline: 0; + } + + .layout-single-column .navigation-panel .navigation-panel__legal { + order: 999; + text-align: center; + } + + /* Home */ + .layout-single-column .column-link[href="/home"] { + order: 1; + } + + /* Explore */ + .layout-single-column .column-link[href="/explore"] { + order: 2; + } + + /* Notifications */ + .layout-single-column .column-link[href="/notifications"] { + order: 3; + } + + /* Lists */ + .layout-single-column .column-link[href="/lists"] { + order: 4; + } + + /* Fix "About" page's server thumbnail margins */ + .about__header__hero { + margin-top: 30px; + } +} + +/* Add bottom padding to the navigation panel for the + Safari PWA on iPhones with the portrait mode home bar */ +@media screen and (device-width: 375px) and (device-height: 812px) and (min-resolution: 2dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 12, iPhone 12 Pro, iPhone 13, iPhone 13 Pro, and iPhone 14 */ screen and (device-width: 390px) and (device-height: 844px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 14 Pro */ screen and (device-width: 393px) and (device-height: 852px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone XR and iPhone 11 */ screen and (device-width: 414px) and (device-height: 896px) and (min-resolution: 2dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone Xs Max and iPhone 11 Pro Max */ screen and (device-width: 414px) and (device-height: 896px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 12 Pro Max, iPhone 13 Pro Max, and iPhone 14 Plus */ screen and (device-width: 428px) and (device-height: 926px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone), /* iPhone 14 Pro Max */ screen and (device-width: 430px) and (device-height: 932px) and (min-resolution: 3dppx) and (orientation: portrait) and (display-mode: standalone) { + .layout-single-column .columns-area__panels__pane--navigational .columns-area__panels__pane__inner { + padding-bottom: 26px; + } +} + +/* stylelint-disable media-feature-name-no-vendor-prefix */ +/* Fixes for iPhone Safari + iPhone Safari PWA */ +@media screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait), /* iPhone 12, iPhone 12 Pro, iPhone 13, iPhone 13 Pro, and iPhone 14 */ screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone 14 Pro */ screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone XR and iPhone 11 */ screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait), /* iPhone Xs Max and iPhone 11 Pro Max */ screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone 12 Pro Max, iPhone 13 Pro Max, and iPhone 14 Plus */ screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait), /* iPhone 14 Pro Max */ screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait) { + /* Fix top header overlapping in /publish on iPhone */ + .layout-single-column .columns-area--mobile:has(.compose-form) { + top: 34px; + } +} + +.layout-single-column .detailed-status__action-bar .icon-button { + min-width: 24px; + position: relative; +} + +.layout-single-column .detailed-status__action-bar-dropdown .icon-button::after, +.layout-single-column .detailed-status__button .icon-button::after { + transform: translateX(-6px); +} + +/* Add border radius to media */ +.layout-single-column .media-gallery, +.layout-single-column .audio-player, +.layout-single-column .video-player, +.layout-single-column .media-gallery__gifv, +.layout-single-column .media-gallery__preview { + border: 1px solid var(--color-border); + border-radius: var(--border-radius); + overflow: hidden; +} + +/* Exception for your own profile media gallery */ +.layout-single-column .account-gallery__container .media-gallery__gifv { + border-radius: 0; +} + +/* Hide autoplaying gifs in notifications (they get annoying if you have favs/boosts on) */ +.layout-single-column .notification.notification-reblog .media-gallery:has(.media-gallery__gifv.autoplay), +.layout-single-column .notification-group--favourite .media-gallery:has(.media-gallery__gifv.autoplay), +.layout-single-column .notification.notification-favourite .media-gallery:has(.media-gallery__gifv.autoplay) { + display: none; +} + +/* More distinct focus color for accessibility, instead of just white */ +.layout-single-column input:focus-visible { + outline-color: var(--color-accent); + outline-style: solid; +} + +/* Embeds outside Mastodon */ +body.embed { + /* Make sure with !important */ + /* stylelint-disable-next-line */ + background: transparent !important; + border: 0; +} + +body.embed .entry .detailed-status { + backface-visibility: hidden; + background-color: #00000059; + /* stylelint-disable-next-line */ + border: 0 !important; + + /* It's inlined so we have to use !important */ + /* stylelint-disable-next-line */ + border-radius: 0 !important; + overflow: hidden; +} + +/* Destructive colors (For you -suggestions, users when focused to the follow button */ +.layout-single-column .button.logo-button.button--destructive:active, +.layout-single-column .button.logo-button.button--destructive:focus { + background-color: var(--color-destructive); + border-color: var(--color-destructive); +} + +/* Fix character counter color when it's over the limit */ +.layout-single-column .character-counter.character-counter--over { + color: var(--color-destructive); +} + +/* Show more in server banner */ +.layout-single-column .server-banner__meta__column { + max-width: 60%; + width: unset; +} + +/* Increase gap for server-banner__meta */ +.layout-single-column .server-banner__meta { + gap: 25px; +} + +/* Native Mastodon 4.1.2-nightly threaded lines */ +.layout-single-column .status__line--first { + height: calc(100% + var(--size-avatar)); +} + +.layout-single-column .status__line--full { + height: calc(100% + 32px); +} + +/* Default lines when replying in real time */ +.layout-single-column div[tabindex="-1"]:has(.status--in-thread) .status--in-thread:not(.status--first-in-thread) > .status__line:not(.status__line--full) { + height: 0; +} + +/* Hide line before first in thread */ +.layout-single-column div[tabindex="-1"]:has(.status--in-thread) + div[tabindex="-1"] > .status--in-thread.status--first-in-thread > .status__line:not(.status__line--full), +.layout-single-column div[tabindex="-1"]:has(.detailed-status__wrapper) + div[tabindex="-1"] > .status__wrapper .status__line:not(.status__line--full) { + height: 0; +} + +.layout-single-column div[tabindex="-1"] + div[tabindex="-1"] > .status__wrapper > .status-reply.status--in-thread > .status__line.status__line--full, +.layout-single-column .status__line--full.status__line--first { + height: 100%; + z-index: -1; +} + +.layout-single-column .detailed-status { + background-color: transparent; + border-top: 0; +} + +/* Threaded line, actually */ +.layout-single-column .status__line { + border-inline-start: 2px solid var(--color-thread-line); + -webkit-border-start: 2px solid var(--color-thread-line); +} + +.layout-single-column .status__line--full::before { + background-color: var(--color-thread-line); +} + +/* Hide the "stub" from the first status line */ +div[tabindex="-1"] + div[tabindex="-1"] > .status__wrapper > .status-reply.status--in-thread > .status__line.status__line--full, +.layout-single-column .status-reply.status--in-thread.status--first-in-thread > .status__line, +.layout-single-column .status-reply.status--in-thread.status--first-in-thread > .status__line--full::before { + top: 32px; +} + +.layout-single-column .status--in-thread .status__action-bar, +.layout-single-column .status--in-thread .status__content { + padding-left: 4px; +} + +/* Scrollbars */ +*::-webkit-scrollbar, +.layout-single-column .drawer__inner::-webkit-scrollbar, +.layout-single-column textarea::-webkit-scrollbar, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar, +.layout-single-column .reply-indicator::-webkit-scrollbar, +.layout-single-column::-webkit-scrollbar { + height: 6px; + width: 6px; +} + +*::-webkit-scrollbar-thumb, +.layout-single-column textarea::-webkit-scrollbar-thumb, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-thumb, +.layout-single-column .reply-indicator::-webkit-scrollbar-thumb, +.layout-single-column::-webkit-scrollbar-thumb { + background-color: var(--color-border); + border: 0px solid var(--color-border); + border-radius: 50px; +} + +*::-webkit-scrollbar-thumb:hover, +.layout-single-column textarea::-webkit-scrollbar-thumb:hover, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-thumb:hover, +.layout-single-column .reply-indicator::-webkit-scrollbar-thumb:hover, +.layout-single-column::-webkit-scrollbar-thumb:hover { + background-color: var(--color-light-purple); +} + +*::-webkit-scrollbar-thumb:active, +.layout-single-column textarea::-webkit-scrollbar-thumb:active, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-thumb:active, +.layout-single-column .reply-indicator::-webkit-scrollbar-thumb:active, +.layout-single-column::-webkit-scrollbar-thumb:active { + background-color: var(--color-black-coral); +} + +*::-webkit-scrollbar-track, +.layout-single-column textarea::-webkit-scrollbar-track, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-track, +.layout-single-column .reply-indicator::-webkit-scrollbar-track, +.layout-single-column::-webkit-scrollbar-track { + background-color: var(--color-bg); + border: 0px solid var(--color-border); + border-radius: 0; +} + +.layout-single-column textarea::-webkit-scrollbar-track:hover, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-track:hover, +.layout-single-column .reply-indicator::-webkit-scrollbar-track:hover, +.layout-single-column::-webkit-scrollbar-track:hover { + background-color: var(--color-bg); +} + +.layout-single-column textarea::-webkit-scrollbar-track:active, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-track:active, +.layout-single-column .reply-indicator::-webkit-scrollbar-track:active, +.layout-single-column::-webkit-scrollbar-track:active { + background-color: var(--color-bg); +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-corner, +.layout-single-column textarea::-webkit-scrollbar-corner, +.layout-single-column .autosuggest-textarea__textarea::-webkit-scrollbar-corner, +.layout-single-column .reply-indicator::-webkit-scrollbar-corner, +.layout-single-column::-webkit-scrollbar-corner { + background-color: transparent; +} + +/* Drawer scollbars */ +.layout-single-column .drawer__inner::-webkit-scrollbar-thumb { + background-color: var(--color-dim); + border: 0; + border-radius: 50px; +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-thumb:hover { + background-color: var(--color-light-purple); +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-thumb:active { + background-color: var(--color-light-text); +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-track { + background-color: var(--color-dark); + border: 0; + border-radius: 0; +} + +.layout-single-column .drawer__inner::-webkit-scrollbar-track:hover, +.layout-single-column .drawer__inner::-webkit-scrollbar-track:active { + background-color: var(--color-dark); +} + +/* New onboarding in /start in v4.3.0-alpha.0+mementomods-2023-12-16 */ +.layout-single-column .onboarding__steps__item, +.layout-single-column .onboarding__link { + background-color: var(--color-dark); + margin-bottom: 10px; +} + +.layout-single-column .onboarding__steps__item__progress > svg > path { + fill: var(--color-dark); +} + +.layout-single-column .onboarding__links > * { + margin-bottom: 10px; +} + +/* Fixes for the design for v4.3.0-alpha.3-2024-03-22 with new popout layout */ +.layout-single-column .explore__search-results { + border: 0; +} + +.layout-single-column .column-back-button, +.layout-single-column .account__section-headline { + border-left: 0; + border-right: 0; +} + +.layout-single-column .column-back-button { + border-top: 0; +} + +/* Hide search (can be found under Explore in the mobile */ +.layout-single-column .ui__header__links .button.button-secondary[href="/search"] { + display: none; +} + +/* More compact compose button on mobile */ +.layout-single-column .ui__header__links .button.button-secondary[href="/publish"] { + background-color: var(--color-accent-dark); + background-image: var(--icon-compose); + background-position: center; + background-repeat: no-repeat; + background-size: 22px; + border: 0; + box-sizing: border-box; + color: var(--color-light-purple); + height: 35px; + width: 45px; +} + +.layout-single-column .ui__header__links .button.button-secondary[href="/publish"]:is(:hover, :focus, :active) { + background-color: var(--color-accent-dark-50); + color: var(--color-light-purple); +} + +.layout-single-column .ui__header__links .button.button-secondary[href="/publish"] span { + color: transparent; +} + +/* More compact header on mobile, thanks for the idea @nileane@nileane.fr! https://github.com/nileane/TangerineUI-for-Mastodon */ +@media screen and (max-width: 1174px) { + .app-body:not(.layout-multiple-columns) .ui__header { + background-color: transparent; + border-bottom: 0; + } + + .app-body:not(.layout-multiple-columns) .ui__header .ui__header__logo { + margin-left: 3px; + } + + .app-body:not(.layout-multiple-columns) .tabs-bar__wrapper { + border-bottom: 0; + border-radius: 0; + box-shadow: none; + display: block; + height: 55px; + inset-inline-end: 105px; + inset-inline-start: 45px; + margin-bottom: -2px; + position: fixed; + top: 0; + } + + /* stylelint-disable-next-line */ + .app-body:not(.layout-multiple-columns):not(:has(.ui .ui__header__links > .button[href="/auth/sign_in"])) .tabs-bar__wrapper { + z-index: 3; + } + + .app-body:not(.layout-multiple-columns):has(.ui .ui__header__links > .button[href="/auth/sign_in"]) .tabs-bar__wrapper :is(.column-back-button, .column-header > *) { + display: none; + } + + .app-body:not(.layout-multiple-columns) + :is( + .column-header, + .column-back-button, + .column-header__button, + .column-header__back-button + ) { + background-color: transparent; + border: 0; + height: 55px; + margin: 0; + } + + .app-body .column-header__icon { + display: none; + } + + /* Set a backdrop blur background to both top bars */ + .app-body:not(.layout-multiple-columns) .ui::after { + /* stylelint-disable-next-line */ + -webkit-backdrop-filter: blur(20px); + backdrop-filter: blur(20px); + border-bottom: 1px solid var(--color-border); + content: ""; + height: 55px; + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 1; + } + + /* Remove margin between column settings and column header */ + .app-body:not(.layout-multiple-columns) .column-header__collapsible { + left: 0; + position: fixed; + right: 0; + } + + .app-body:not(.layout-multiple-columns) .column-header__collapsible:not(.collapsed) { + border-bottom: 1px solid var(--color-border); + } +} + +/* List panel */ +.layout-single-column .list-panel { + display: none; + margin: 0 0 5px; + padding: 5px 9px 50px 36px; +} + +.layout-single-column .list-panel .icon { + display: none; +} + +.app-body .list-panel .column-link span::before { + bottom: -10px; + left: -15px; + right: -15px; + top: -10px; +} + +@media screen and (min-width: 1175px) { + /* Fade in list panel, thanks for the idea @nileane@nileane.fr! https://github.com/nileane/TangerineUI-for-Mastodon */ + .layout-single-column .column-link[href="/lists"]:is(.active, :hover) + .list-panel, + .layout-single-column .list-panel:hover { + animation: fadein .4s 1; + display: block; + } +} + +/* Spare animations */ +@keyframes fadein { + from { + opacity: 0; + transform: translateY(-10%); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* + * Boost animation micro-interaction start + * --------------------------------------- + */ + +.layout-single-column .icon-button:has(.icon-retweet) { + height: 24px; + width: 24px; +} + +@keyframes boost-animate { + 100% { + background-position: -7770px; + } +} + +@media (prefers-reduced-motion: no-preference) { + .layout-single-column.no-reduce-motion .icon-button.active:focus .icon-retweet { + /* 37 frames */ + animation: boost-animate 1.45s steps(37) forwards; + + /* stylelint-disable-next-line */ + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAHyIAAABkCAYAAADeSNK+AAAAAXNSR0IArs4c6QAAIABJREFUeF7s3QuclXW1//HvevaeCzfxhmaamYoKeioPFy9ZMinOgHd0UNHMOqVdrJOC187Jbf9KDRDLjiZ1ypMCOqOiqQwDFlgeTWHSSkFFTTumKSoXh8vM3vtZ/9cDYoAoM8zeM8/ez2e/Xud1iv0867fWez2rjZuRZeKFAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAKxE7DYZURCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAgFpHzECCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQQwEWkcewKaSEAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAIvIeQYQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQiKEAi8hj2BRSQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIBF5DwDCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCMRQgEXkMWwKKSGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCDAInKeAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRiKMAi8hg2hZQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQYBE5zwACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACMRRgEXkMm0JKCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCLCInGcAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgRgKsIg8hk0hJQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRYRM4zgAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAMBVhEHsOmkBICCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACLCLnGUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAghgIsIo9hU0gJAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAARaR8wwggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggEEMBFpHHsCmkhAACCCCAAAIIIIAAAggggAACCGyLgMtt/oj5qT16rUlV920NohhrW/uGL6/plR8xf0TeZL4tcbkHgSQJRHOk+sbgKSnVp8+qdXO0alWf8EApr8b6kDlK0tNArQgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEDPC7CIvOd7QAYIIIAAAggggAACCCCAAAIIIIBApwWiZclPnHN3/15t+T1dqYGSDzSzPd19gMy2k3vVuqBmbXJfaWZL3f1vki0x5ZesqUr97ZM3n7SCpcqdpueGMhKI5uiZL/66b7Aqv0doPjAMbB/JPmrSAMm3k+udOVKbZCtdWir5S0HozwduS8I+qZf3/8UJrcxRGT0UlIIAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA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uuulh17+YjFzNRc33Tt7642WlMtOHLPNJ3LkN9SWLnv7r47dtj7U9QWvO464+l1Fzt/IERs/Z1GOvxVFefDOl75jtQHMa1ObtQQaSWDv6Z9+eYpUzTlNiIhhz5tbrg+prM+qrP9vipRTRJH/N+fyQ7eMuWDWqvfseW11cKV1/mdyihMip/r3Zp8tN533dUPIG+nU5bI+BPa84ZNbFNHyoUhxWES8PEduS5Hq4/Ce+2/hy4fkFZHjiUjl8TcfdP5q72f1wbEd84qTI+LDKeK0bec99J1Vh5Wvj/zFJNAwAjnS6248fvOludytKIqtoozW5YOSi9V6qYyyc4hy/WopWn77uwPOmbNqDZ19NL+yf3Skm29+67mPNkx9EiGwrgI5p+oZkarVVK5rCPcR6LcCOadR332gbdSD2y1rmB7KkapnVFO1WtXT/fbB7EOFG0Tehw5LqgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYP0LGES+/o3tQIAAAQIECBAgQIAAAQKrCDz4hjNH1FqLUyLnYyNiyDriLIyUvlZpL8/c9lenvOgwy3WM7zYCPS5wz3uufEl7R7ohUry6x4M3QsAct7a25DGv+MFhf2+EdOTQnAJz3nvlpqkjXZcj9mnGClPErNySx438/mFPNGN9auo7AnnC1MpdLa3n5RSffIGsH0o5f2SXyw674YWqmvHem/cvI301cl546xZDPz/1lZvcu23bS26bNjHVXuieOw+/ckxO6eKI2Ob51qQcF+7c0X58mjbxBWP0HWWZElguUB/Wumxe2rdIab+I2D5yGhg5irIo6wPIc84pt+S2IZWlL399WXnsf8uWeY8WkSpl5FnLUvqPPx103sJVLV81/fghAyKOj5wez5vNnWwIuSet3whUq8Wee87fpNKat8ophpRlKirpH8OTO6IjUi6eGZ5cf61M+ant5z4459mDxnedcezQQUuH7BSbzf1fPdRvniCFEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGho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j2wyt7Ezlx0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINKKAQeSNeCpyIkCAAAECBAgQIECAAAECBJpa4O4JUzevtbZeliPe0pcLTRE/q7S3H77jtImP9eU65N43BeqDkVNr6yUpYmzfrGB51jni+tzefqRBy335FPtH7ncfcd3w9nLJiSmlj0fEsPVc9fyc85dbi4Hn7HjpuHnreS/hCRAgQIAAAQIECBAg0OMC09/zxyEDojbysSX33FofRD5h6m0DHls4pJj5/u2X9PhmAhJoUoFffeBXwwa2DFyy1+S92usljqrmlpmnRy1Syk1asrII9KhAjtz5+8Ep9EyPwgpGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ2kIBB5BsI3rYECBAgQIAAAQIECBAgQIBA/xa46/Ar31BG/DBS2qpPSuT81yLi3Ttfdtiv+mT+km4KgdvfffVriqK8PCJt2zcLyg+WZfGu3X546O/7Zv6y7m8Ct02YOqBobTksRfq3iNh1PdV/R47872V7x5W7T5u4bD3tISwBAgQIECBAgAABAgQIECDQ4ALXfezutgWP3toxcdrEWj3VCVNzZdqEKA0ib/CDk17DCDxnEHlePpi880qGkzfMQUmEAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0UcAg8i5CWUaAAAECBAgQIECAAAECBAgQ6EmB+gCIOw+/8uhIxfkRMbgnY/dCrEWRy0/vctlhk1MYVtEL3rZ4EYE5k646KnK+KFIa2qegcl4QKX1s5JTx3+1TeUuWQETcfuQ1r0hl+a8p8uER6SU9g5L/niNdloviK7tdcsg9PRNTFAIECBAgQIAAAQIECBAgQIAAAQL9U8Ag8v557qomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgeYVMIi8ec9WZQQIECBAgAABAgQIECBAgECDC9w99rq2jo2XVCPS8ZGipcHTXZ5ejo6IfF7L0wOrO14/bmmfyFmSTS1w24SpAyqtradG5FMjUmvfKDa3R6QvLhz69y/sNfkj7X0jZ1kSWF1gxqgZLVu8bN4/l0V5ZIp4a+TYbq3fy+rvKSkeyBE/LcrikkceHf6H0TNHd7AmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOAfAgaRexoIECBAgAABAgQIECBAgAABAhtQ4O4jrhvenpecnSKOjkjFBkylC1vnMkdMbk0DT9rx0nHzunCDJQR6ReC2CVOHFq2tny9y/tecUqVXNl3HTVLOtTKlr5Tt7Z/dfdrEBesYxm0EGkYgT5hamdNa2TqlyuujLEdFin+OiK0j0kaRY0CkvPy9LacyUiyLyHMj4i+R4w9RFDNzrv16ZHvtL2naxFrDFCURAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0kYBB5Ax2GVAgQIECAAAECBAgQIECAAIH+KfCnST8Z0RLLvphy+lCkaGlIhRwdOeVvdsSAU1815W1PNWSOkurXAncfcd3w9rz0cynysRGptTExcnuO9LXW1HbajpeOm9eYOcqKwLoL5Gq1+MMDewwf1FG8tCw7XhplbJoqlUH1iLlWWxxFPFEULX9b3FL+7Z+3++O8VK2W676bOwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0DwGDyPvHOauSAAECBAgQIECAAAECBAgQaHCB+hDljnLJKZHSxyNicIOluyhy/nJLMfBMw5Mb7GSks5rAbROmDq20th4fOR8XKQ1tKJ6cF0RKX6q1t5+3+7SJCxoqN8kQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQMMKGETesEcjMQIECBAgQIAAAQIECBAgQKC/Cdw99rq2jo0XHxVRnBYptmyI+nM8HFF+ruXpQd/d8fpxSxsiJ0kQeBGB2yZMHVBpbZ0UEWdExDYNgvVQRJxea2+fsvu0icsaJCdpECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAfEDCIvA8ckhQJECBAgAABAgQIECBAgACB/iOQq9Xiz3e96nVlxBkp4s05pcqGqD7lXMsRvygiTt9p5z/9JlWr5YbIw54E1kUgR05/nnT13mXOZ0Sk/SNFy7qasIVnAAAQ10lEQVTE6fY9OToi8k1FSqfvNOXQm1Ok3O2YAhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAvxIwiLxfHbdiCRAgQIAAAQIECBAgQIAAgb4icPeEqZu3t7Z8IEUcE5G27d2884M54uut7R3f3nHaxMd6d2+7Eeg5gdsnTN0ktba8r8jpX3KKHXou8pojpRz3lil/Nbd3fG+3aROfXPMdVhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgecKGETuqSBAgAABAgQIECBAgAABAgQINKhArlaLO+7afWRKlQ+nnN8ZKW21XlPN+a85pR/lXPvPXXe+bU6qVsv1up/gBHpBIEdOdx35452iVn4gp/yuyGmbSLF+PhfNkSPlh1JOl0el+PbOl7z9zylS7oUybUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECTSqwfgbuNCmWsggQIECAAAECBAgQIECAAAECG0IgT5hamVO0jEyV9M4UcUjOMTJStPVILjmWphRzcsQ1uZZ/NLLsmJOmTaz1SGxBCDSQQL2P/txS7FimdFhEOjRy7B4pDeqRFHNeHClui8hXFzlfuVNHebc+6hFZQQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDvBQwi7/ePAAACBAgQIECAAAECBAgQIECgrwjkyOne91y1eXsZ++Sc9k859o0UO0SOjSNFS5fqyNERKZ6OHPfmFL9LKd/UWsSsHX4w/rEUKXcphkUE+rBAvY/ufO9Vm0Qt7ZnKeEtEvDZH3jFSbBqRWrtWWm6PHE+kSHdHxG9zET+LSp69y/fHP6mPuiZoFQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0TcAg8q45WUWAAAECBAgQIECAAAECBAgQaCiB+jDlPxx19UaDlta2yVHZMSLvmFLaJue8eaQ0PHJu60w4paWR87yU0mM554ci0t0pancvbqs89M/fPXSuockNdayS6WWBeh/d9YEfDy0W1rYuU96xLNIOEWnbFLF5RB4eOVb0USyNSPNyxGMR+cGizPcWOd1dDqn8Zedvv32BPurlg7MdAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE+pGAQeT96LCVSoAAAQIECBAgQIAAAQIECDS3QH2o8sxRMytbD1pcGTh0QVGvdsmCoeVfFg+qjZo5qmZYcnOfv+p6RqDeRzFhWnF7RGXIkIWdfbRw4ZByt4haTJtQ6qOecRaFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBLomYBB515ysIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCrAgaR9yq3zQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0TcAg8q45WUWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVwUMIu9VbpsRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6JqAQeRdc7KKAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQK8KGETeq9w2I0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINA1AYPIu+ZkFQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFeFTCIvFe5bUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgawIGkXfNySoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECvSpgEHmvctuMAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQNcEDCLvmpNVBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBHpVwCDyXuW2GQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGuCRhE3jUnqwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAj0qoBB5L3KbTMCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECXRMwiLxrTlYRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6FUBg8h7ldtmBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBLomYBB515ysIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCrAgaR9yq3zQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0TcAg8q45WUWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVwX+P2OG9X+i8Q4sAAAAAElFTkSuQmCC) !important; + background-position: left; + background-repeat: no-repeat; + background-size: inherit; + /* stylelint-disable-next-line */ + content: '' !important; + /* stylelint-disable-next-line */ + display: block !important; + height: 101px; + left: -76px; + min-height: 23px; + min-width: 42.22px; + pointer-events: none; + position: absolute; + top: -38.4px; + transform: scale(0.82) translateX(1px); + width: 200px; + } + + /* Detailed status offset for boost animation */ + .layout-single-column.no-reduce-motion .detailed-status__button .icon-button.active:focus .icon-retweet { + left: -89px; + top: -38px; + } + + /* Offset in numbered item */ + .layout-single-column.no-reduce-motion .status__action-bar .icon-button.icon-button--with-counter.active:focus .icon-retweet { + left: -82px; + } + + .layout-single-column.no-reduce-motion .status__action-bar .icon-button.icon-button--with-counter.activate .icon-button__counter, + .layout-single-column.no-reduce-motion .status__action-bar .icon-button.icon-button--with-counter.active:focus .icon-button__counter { + transform: translateX(13.5px); + } + + /* stylelint-disable-next-line */ + .layout-single-column.no-reduce-motion .status__action-bar .icon-button.star-icon.icon-button--with-counter.activate .icon-button__counter { + transform: translateX(12px); + } + + @media (max-width: 890px) { + /* stylelint-disable-next-line */ + .layout-single-column.no-reduce-motion .status__action-bar .icon-button.icon-button--with-counter.active:focus .icon-retweet { + left: -84px; + } + } +} + +@media (prefers-reduced-motion: reduce) { + .layout-single-column.no-reduce-motion .icon-button.active:focus .icon-retweet { + + /* stylelint-disable-next-line */ + background-image: var(--icon-boost-active) !important; + } +} + +/* Detailed status offset for boost animation on mobile */ +@media (max-width: 890px) { + /* stylelint-disable-next-line */ + .layout-single-column.no-reduce-motion .icon-button.active:focus .icon-retweet { + /* stylelint-disable-next-line */ + transform: scale(.82) translateY(1px) translateX(-2px) !important; + } +} + +/* + * Boost animation micro-interaction ends + * -------------------------------------- + */ + +/* + * Heart animation micro-interaction start + * --------------------------------------- + */ + +@keyframes heart-animate { + 100% { + background-position: -2800px; + } +} + +/* Left sidebar column links */ +.layout-single-column .column-link .icon-star { + background-image: var(--icon-heart-column-link); +} + +.layout-single-column .column-link.active .icon-star { + background-image: var(--icon-heart-column-link-active); +} + +.layout-single-column .notification-group--favourite .icon-star, +.layout-single-column .notification-favourite .icon-star { + background-image: var(--icon-heart-notification); +} + +.layout-single-column .notification__filter-bar .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button .icon-star, +.layout-single-column .status__action-bar .icon-button .icon-star { + background-image: var(--icon-heart); +} + +.layout-single-column .notification__filter-bar .active .icon-star { + background-image: var(--icon-heart-active); +} + +.layout-single-column .detailed-status__action-bar .active:not(.activated) .icon-star, +.layout-single-column .status__action-bar .active:not(.activated) .icon-star { + background-image: var(--icon-heart-active-red); +} + +.icon-button.star-icon.active, +.notification-group--favourite .star-icon, +.notification-favourite .star-icon { + color: var(--color-red); +} + +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-star, +.layout-single-column .detailed-status button.icon-button:hover .icon-star, +.layout-single-column .status button.icon-button:hover .icon-star { + background-image: var(--icon-heart-hover); +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon { + max-height: 23px; + max-width: 42.22px; + min-height: 23px; + min-width: 42.22px; + position: relative; +} + +.layout-single-column .status__action-bar .icon-button.star-icon::after { + left: -3px; +} + +/* Disable default Mastodon animation: spring-rotate-in 1s linear; */ +.layout-single-column.no-reduce-motion .icon-button.star-icon .icon-star { + /* stylelint-disable-next-line */ + animation: none !important; +} + +/* While active, hide the original icon */ +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate:hover .icon-star { + /* stylelint-disable-next-line */ + content: '' !important; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + /* stylelint-disable-next-line */ + background-image: url(data:image/png;base64,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) !important; + background-position: 0px; + background-repeat: no-repeat; + background-size: unset; + /* stylelint-disable-next-line */ + content: '' !important; + height: 100px; + left: -38px; + pointer-events: none; + position: absolute; + top: -40px; + transform: scale(.6); + width: 100px; +} + +@media (max-width: 890px) { + .layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + top: -40px; + } +} + +@media (prefers-reduced-motion: no-preference) { + .layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + /* 28 frames */ + /* stylelint-disable-next-line */ + animation: heart-animate 0.8s steps(28) forwards !important; + } +} + +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .status .icon-button.star-icon.activate .icon-star { + left: -27px; +} + +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .status .icon-button.icon-button--with-counter.star-icon.activate .icon-star { + left: -34px; +} + +/* stylelint-disable-next-line */ +.layout-single-column.no-reduce-motion .detailed-status__action-bar .icon-button.star-icon.activate .icon-star { + left: -29px; +} + +@media screen and (max-width: 889px) { + /* stylelint-disable-next-line */ + .layout-single-column.no-reduce-motion .status .icon-button.star-icon.activate .icon-star { + left: -28px; + } +} + +/* + * -------------------------------------- + * Heart animation micro-interaction ends + */ + +/* + * Star animation micro-interaction start (depends on the hearts above) + * ------------------------------------------------------------------------- + */ + +/* 1/2: If you prefer stars remove this line and the last line of this file +@media (hover: hover) { + .layout-single-column button.icon-button:not(.active):hover .icon-star ~ span, + .layout-single-column button.icon-button:not(.active):hover .icon-star { + color: var(--color-yellow); + } + + .layout-single-column button.icon-button.active:hover .icon-star ~ span { + color: var(--color-dim); + } +} + +.layout-single-column .column-link .icon-star { + background-image: var(--icon-star-column-link); +} + +.layout-single-column .column-link.active .icon-star { + background-image: var(--icon-star-column-link-active); +} + +.layout-single-column .notification-group--favourite .icon-star, +.layout-single-column .notification-favourite .icon-star { + background-image: var(--icon-star-notification); +} + +.layout-single-column .notification__filter-bar .active .icon-star { + background-image: var(--icon-star-active); +} + +.layout-single-column button.icon-button:hover .icon-star ~ span { + color: var(--color-dim); +} + +.layout-single-column button.icon-button.activate .icon-star ~ span, +.layout-single-column button.icon-button.active .icon-star ~ span { + color: var(--color-yellow); +} + +.layout-single-column .notification__filter-bar .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button .icon-star, +.layout-single-column .status__action-bar .icon-button .icon-star { + --size-icon: 20px; + background-image: var(--icon-star-detailed-status-action-bar); +} + +.layout-single-column .notification__filter-bar button.icon-button.active .icon-star, +.layout-single-column .detailed-status__action-bar button.icon-button.active .icon-star, +.layout-single-column .status__action-bar button.icon-button.active .icon-star { + background-image: var(--icon-star-detailed-status-action-bar) !important; + display: block; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + background-color: unset !important; + background-image: var(--icon-star-detailed-status-action-bar-active) !important; + background-position: center; + color: var(--color-yellow); + left: unset !important; + position: relative; + top: 0; + transform: none; + width: unset; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.active .icon-star { + animation: none !important; + background-image: var(--icon-star-detailed-status-action-bar-active) !important; +} + +@media (prefers-reduced-motion: no-preference) { + .layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star { + animation: sparkles-width .65s 1, sparkles-size .65s 1, popping .5s 1 !important; + } + + .layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate::after, + .layout-single-column .status__action-bar button.icon-button.activate.star-icon::after { + animation: sparkles-width .65s 1, sparkles-size .65s 1; + } + + .layout-single-column .detailed-status__action-bar button.icon-button.activate.star-icon::before, + .layout-single-column .status__action-bar button.icon-button.activate.star-icon::before { + animation: ring-border-width .35s 1, ring-size .35s 1; + } +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate::after, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon::after { + background-color: unset !important; + content: ''; + height: 50px !important; + left: 50% !important; + margin-left: -24px; + margin-top: -20px; + opacity: unset; + position: absolute; + top: calc(50% + 1px); + transform: none; + width: 50px !important; + z-index: unset; +} + +.layout-single-column.no-reduce-motion .icon-button.star-icon.activate .icon-star, +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate::after, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon::after { + display: block !important; +} + +.layout-single-column .detailed-status__action-bar button.icon-button.activate.star-icon::before, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon::before { + border: 0px solid var(--color-yellow); + border-radius: 10em; + content: ''; + height: 0em; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + transform-origin: 50px 50px; + width: 0em; +} + +.layout-single-column .icon-button.star-icon.active, +.layout-single-column .notification-group--favourite .star-icon, +.layout-single-column .notification-favourite .star-icon { + color: var(--color-yellow); +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.deactivate:hover .icon-star, +.layout-single-column .status__action-bar button.icon-button.deactivate.star-icon:hover .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button.deactivate .icon-star, +.layout-single-column .detailed-status button.icon-button.deactivate .icon-star, +.layout-single-column .status button.icon-button.deactivate .icon-star { + background-image: var(--icon-star-detailed-status-action-bar-hover) !important; + color: var(--color-dim); +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate:hover .icon-star, +.layout-single-column .status__action-bar button.icon-button.activate.star-icon:hover .icon-star, +.layout-single-column .detailed-status__action-bar .icon-button:hover .icon-star, +.layout-single-column .detailed-status button.icon-button:hover .icon-star, +.layout-single-column .status button.icon-button:hover .icon-star { + background-image: var(--icon-star-detailed-status-action-bar-active) !important; + color: var(--color-yellow); + position: relative; + top: 0; +} + +.layout-single-column .detailed-status__action-bar .icon-button:focus .icon-star, +.layout-single-column .detailed-status button.icon-button:focus .icon-star, +.layout-single-column .status button.icon-button:hover .icon-star { + color: var(--color-dim); +} + +.layout-single-column button:focus, +.layout-single-column .icon-button:focus { + outline: 0; +} + +.layout-single-column button:focus-visible, +.layout-single-column .icon-button:focus-visible { + outline: 2px solid var(--color-accent); +} + +.layout-single-column .search__popout__menu__item { + align-items: initial; +} + +.layout-single-column .detailed-status__action-bar button.icon-button.star-icon.icon-button--with-counter.star-icon.activate::after, +.layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.star-icon.activate.star-icon::after { + left: calc(50% - 8px) !important; + top: calc(50% + -1px) !important; +} + +.layout-single-column .detailed-status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before, +.layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before { + left: calc(50% - 8px) !important; +} + +.layout-single-column button.icon-button.icon-button--with-counter.activate.star-icon > .icon-star { + left: -34px !important; + position: absolute !important; + top: unset !important; +} + +@media (hover: none) { + .layout-single-column .detailed-status__action-bar button.icon-button.star-icon.activate:hover .icon-star, + .layout-single-column .status__action-bar button.icon-button.activate.star-icon:hover .icon-star, + .layout-single-column .detailed-status__action-bar .icon-button:hover .icon-star, + .layout-single-column .detailed-status button.icon-button:hover .icon-star, + .layout-single-column .status button.icon-button:hover .icon-star { + background-image: var(--icon-star-detailed-status-action-bar-active) !important; + } +} + +@media (max-width: 888px) { + .layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.star-icon.activate.star-icon::after { + left: calc(50% - 11px) !important; + } + + .layout-single-column .detailed-status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before, + .layout-single-column .status__action-bar button.icon-button.icon-button--with-counter.activate.star-icon::before { + left: calc(50% - 11px) !important; + } +} + +@keyframes popping { + 0% { + transform: scale(0, 0); + } + + 40% { + transform: scale(0, 0); + } + + 75% { + transform: scale(1.3, 1.3); + } + + 100% { + transform: scale(1, 1); + } +} + +@keyframes ring-border-width { + 0% { + border-width: 0; + } + + 50% { + border-width: 0.22em; + } + + 100% { + border-width: 0; + } +} + +@keyframes ring-size { + 0% { + height: 0; + width: 0; + } + + 100% { + height: 2em; + width: 2em; + } +} + +@keyframes sparkles-width { + 0% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 1% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 2% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.9' fill='transparent' /%3E%3C/svg%3E"); + } + + 3% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 4% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.5' fill='transparent' /%3E%3C/svg%3E"); + } + + 5% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 6% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.1' fill='transparent' /%3E%3C/svg%3E"); + } + + 7% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 8% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.7' fill='transparent' /%3E%3C/svg%3E"); + } + + 9% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13' fill='transparent' /%3E%3C/svg%3E"); + } + + 10% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 11% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='15.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 12% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='16.9' fill='transparent' /%3E%3C/svg%3E"); + } + + 13% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='17.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 14% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='17.3' fill='transparent' /%3E%3C/svg%3E"); + } + + 15% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='18' fill='transparent' /%3E%3C/svg%3E"); + } + + 16% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 17% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 18% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 19% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 20% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='14' fill='transparent' /%3E%3C/svg%3E"); + } + + 21% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 22% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 23% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 24% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 25% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='13' fill='transparent' /%3E%3C/svg%3E"); + } + + 26% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 27% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 28% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 29% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 30% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='12' fill='transparent' /%3E%3C/svg%3E"); + } + + 31% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 32% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 33% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 34% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 35% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='11' fill='transparent' /%3E%3C/svg%3E"); + } + + 36% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 37% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 38% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 39% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 40% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='10' fill='transparent' /%3E%3C/svg%3E"); + } + + 41% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 42% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 43% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 44% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 45% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='9' fill='transparent' /%3E%3C/svg%3E"); + } + + 46% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 47% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 48% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 49% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 50% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='8' fill='transparent' /%3E%3C/svg%3E"); + } + + 51% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 52% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 53% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 54% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 55% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='7' fill='transparent' /%3E%3C/svg%3E"); + } + + 56% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 57% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 58% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 59% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 60% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='6' fill='transparent' /%3E%3C/svg%3E"); + } + + 61% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 62% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 63% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 64% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='5.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 65% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 66% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 67% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 68% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 69% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='4' fill='transparent' /%3E%3C/svg%3E"); + } + + 70% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 71% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 72% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 73% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 74% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='3' fill='transparent' /%3E%3C/svg%3E"); + } + + 75% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 76% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 77% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 78% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 79% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='2' fill='transparent' /%3E%3C/svg%3E"); + } + + 80% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 81% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 82% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 83% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 84% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='1' fill='transparent' /%3E%3C/svg%3E"); + } + + 86% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.8' fill='transparent' /%3E%3C/svg%3E"); + } + + 87% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.6' fill='transparent' /%3E%3C/svg%3E"); + } + + 88% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.4' fill='transparent' /%3E%3C/svg%3E"); + } + + 89% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0.2' fill='transparent' /%3E%3C/svg%3E"); + } + + 90% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 91% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 92% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 93% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 94% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 95% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 96% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 97% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 98% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 99% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } + + 100% { + content: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' class='stardust'%3E%3Ccircle cx='20' cy='20' r='14' stroke='%23fa733e' stroke-dasharray='1 15' stroke-dashoffset='23' stroke-width='0' fill='transparent' /%3E%3C/svg%3E"); + } +} + +@keyframes sparkles-size { + 0% { + transform: scale(0.1, 0.1); + } + + 5% { + transform: scale(0.1, 0.1); + } + + 85% { + transform: scale(1, 1); + } +} + +2/2: If you prefer stars remove this line too */ \ No newline at end of file diff --git a/nixos/modules/services/minecraft.nix b/nixos/modules/services/minecraft.nix new file mode 100755 index 0000000..bbcccbd --- /dev/null +++ b/nixos/modules/services/minecraft.nix @@ -0,0 +1,88 @@ +{ + config, + flake, + ... +}: let + inherit (flake.config.system.device) server; + inherit (flake.config.service.instance.minecraft) paths ports name sops; +in { + services = { + minecraft-server = { + enable = true; + eula = true; + openFirewall = true; + declarative = true; + serverProperties = { + "rcon.password" = config.sops.secrets."${name}-pass".path; + allow-flight = false; + allow-nether = true; + difficulty = 2; + enable-command-block = false; + enable-rcon = true; + enable-status = true; + force-gamemode = true; + gamemode = 0; + generate-structures = true; + hardcore = false; + hide-online-players = false; + level-name = "Brix on Nix"; + level-seed = "9064150133272194"; + max-players = 10; + max-world-size = 64000000; + motd = "A cool Minecraft server powered by NixOS"; + online-mode = true; + pvp = true; + server-port = ports.port0; + spawn-animals = true; + spawn-monsters = true; + spawn-npcs = true; + spawn-protection = 16; + view-dtstance = 32; + white-list = true; + }; + whitelist = { + Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3"; + Hefty_Chungus_Jr = "c3bf8cac-e953-4ea4-ae5f-7acb92a51a85"; + EclipseMoon01 = "adef4af7-d8c6-4627-b492-e990ea1bb993"; + Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49"; + }; + }; + }; + sops = let + sopsSecrets = ["pass"]; + sopsPath = secret: { + path = "${sops.path0}/${name}-${secret}"; + owner = name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${name}-${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + fileSystems."/var/lib/${name}" = { + device = paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = [ + "Z ${paths.path0} 0755 ${name} ${name} -" + "Z ${sops.path0} 0755 ${name} ${name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ]; + }; + }; +} diff --git a/nixos/modules/services/nextcloud.nix b/nixos/modules/services/nextcloud.nix new file mode 100755 index 0000000..a3bb1bd --- /dev/null +++ b/nixos/modules/services/nextcloud.nix @@ -0,0 +1,125 @@ +{ + flake, + config, + pkgs, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance) nextcloud nginx; + localhost = wildcard.ip.address0; + host = "${nextcloud.name}.${domain.url0}"; +in { + imports = [ + "${fetchTarball { + url = "https://github.com/onny/nixos-nextcloud-testumgebung/archive/fa6f062830b4bc3cedb9694c1dbf01d5fdf775ac.tar.gz"; + sha256 = "0gzd0276b8da3ykapgqks2zhsqdv4jjvbv97dsxg0hgrhb74z0fs"; + }}/nextcloud-extras.nix" + ]; + + services = { + nextcloud = { + appstoreEnable = true; + autoUpdateApps.enable = true; + configureRedis = true; + enable = true; + hostName = host; + https = true; + webserver = "caddy"; + package = pkgs.nextcloud29; + phpOptions."opcache.interned_strings_buffer" = "24"; + extraAppsEnable = true; + extraApps = { + inherit + (config.services.nextcloud.package.packages.apps) + calendar + ; + }; + config = { + adminpassFile = config.sops.secrets."${nextcloud.name}-pass".path; + dbtype = "pgsql"; + }; + database = { + createLocally = true; + }; + settings = { + default_phone_region = "CA"; + log_type = "file"; + mail_sendmailmode = "pipe"; + mail_smtpmode = "sendmail"; + maintenance_window_start = 4; + overwriteprotocol = "https"; + enabledPreviewProviders = [ + "OC\\Preview\\BMP" + "OC\\Preview\\GIF" + "OC\\Preview\\JPEG" + "OC\\Preview\\Krita" + "OC\\Preview\\MarkDown" + "OC\\Preview\\MP3" + "OC\\Preview\\OpenDocument" + "OC\\Preview\\PNG" + "OC\\Preview\\TXT" + "OC\\Preview\\XBitmap" + "OC\\Preview\\HEIC" + ]; + trusted_proxies = [ + localhost + ]; + }; + }; + + caddy = { + virtualHosts = { + "https://${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString nextcloud.ports.port0} + + tls ${nextcloud.ssl.cert} ${nextcloud.ssl.key} + ''; + }; + }; + }; + }; + + sops = let + sopsSecrets = ["pass"]; + sopsPath = secret: { + path = "${nextcloud.sops.path0}/${nextcloud.name}-${secret}"; + owner = nextcloud.name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${nextcloud.name}-${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + fileSystems."/var/lib/${nextcloud.name}" = { + device = nextcloud.paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = [ + "Z ${nextcloud.paths.path0} 750 ${nextcloud.name} ${nextcloud.name} -" + "Z ${nextcloud.sops.path0} 750 ${nextcloud.name} ${nextcloud.name} -" + ]; + + users.users.${nextcloud.name}.extraGroups = ["caddy" "nginx" "postgres"]; + + networking = { + firewall = { + allowedTCPPorts = [ + nginx.ports.port0 + nextcloud.ports.port0 + ]; + }; + }; +} diff --git a/nixos/modules/services/ollama.nix b/nixos/modules/services/ollama.nix new file mode 100755 index 0000000..52e3d7a --- /dev/null +++ b/nixos/modules/services/ollama.nix @@ -0,0 +1,63 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance.ollama) paths ports subdomain name ssl; + localhost = wildcard.ip.address0; + host = "${subdomain}.${domain.url0}"; +in { + services = { + ollama = { + acceleration = false; + enable = true; + group = name; + host = "http://${localhost}"; + port = ports.port1; + user = name; + }; + + open-webui = { + enable = true; + host = localhost; + port = ports.port0; + environment = { + ENABLE_OLLAMA_API = "True"; + ANONYMIZED_TELEMETRY = "False"; + DO_NOT_TRACK = "True"; + SCARF_NO_ANALYTICS = "True"; + OLLAMA_BASE_URL = "http://${localhost}:${toString ports.port1}"; + WEBUI_AUTH = "True"; + }; + }; + + caddy = { + virtualHosts = { + ${host} = { + extraConfig = '' + reverse_proxy ${localhost}:${toString ports.port0} + + tls ${ssl.cert} ${ssl.key} + ''; + }; + }; + }; + }; + + fileSystems."/var/lib/${name}" = { + device = paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = ["Z ${paths.path0} 0755 ${name} ${name} -"]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ports.port1 + ]; + }; + }; +} diff --git a/nixos/modules/services/peertube.nix b/nixos/modules/services/peertube.nix new file mode 100755 index 0000000..4e837c0 --- /dev/null +++ b/nixos/modules/services/peertube.nix @@ -0,0 +1,127 @@ +{ + flake, + config, + pkgs, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain email; + inherit (flake.config.system.device) server wildcard; + inherit (flake.config.service.instance) caddy peertube; + localhost = wildcard.ip.address0; + host = "${peertube.subdomain}.${domain.url1}"; +in { + services = { + peertube = { + configureNginx = false; + enable = true; + enableWebHttps = true; + group = peertube.name; + listenWeb = caddy.ports.port1; + listenHttp = peertube.ports.port0; + localDomain = host; + serviceEnvironmentFile = config.sops.secrets."${peertube.name}-root".path; + user = peertube.name; + plugins = { + enable = true; + plugins = with pkgs; [ + peertube-plugin-livechat + peertube-plugin-matomo + peertube-plugin-transcoding-custom-quality + peertube-theme-dark + ]; + }; + + secrets = { + secretsFile = config.sops.secrets."${peertube.name}-secret".path; + }; + settings = { + instance = { + name = "The Nutrivore"; + }; + log = { + level = "debug"; + }; + smtp = { + transport = "smtp"; + disable_starttls = false; + from_address = email.address4; + hostname = "smtp.protonmail.ch"; + port = 587; + username = email.address4; + tls = false; + }; + }; + database = { + createLocally = true; + passwordFile = config.sops.secrets."${peertube.name}-database".path; + }; + redis = { + enableUnixSocket = true; + createLocally = true; + passwordFile = config.sops.secrets."${peertube.name}-redis".path; + }; + smtp = { + createLocally = true; + passwordFile = config.sops.secrets."${peertube.name}-smtp".path; + }; + }; + + caddy = { + virtualHosts = { + ${host} = { + extraConfig = '' + reverse_proxy ${localhost}:${toString peertube.ports.port0} + + tls ${peertube.ssl.cert} ${peertube.ssl.key} + + ''; + }; + }; + }; + }; + + sops = let + sopsSecrets = ["smtp" "database" "redis" "root" "secret"]; + sopsPath = secret: { + path = "${peertube.sops.path0}/${peertube.name}-${secret}-pass"; + owner = peertube.name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${peertube.name}-${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + fileSystems."/var/lib/${peertube.name}" = { + device = peertube.paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = [ + "Z ${peertube.paths.path0} 755 ${peertube.name} ${peertube.name} -" + "Z ${peertube.sops.path0} 755 ${peertube.name} ${peertube.name} -" + ]; + + users.users.${peertube.name}.extraGroups = ["nginx" "caddy"]; + + networking = { + firewall = { + allowedTCPPorts = [ + peertube.ports.port0 + peertube.ports.port1 + peertube.ports.port2 + peertube.ports.port3 + peertube.ports.port4 + ]; + }; + }; +} diff --git a/nixos/modules/services/postgresql.nix b/nixos/modules/services/postgresql.nix new file mode 100755 index 0000000..afb20e0 --- /dev/null +++ b/nixos/modules/services/postgresql.nix @@ -0,0 +1,37 @@ +{flake, ...}: let + inherit (flake.config.service.instance.postgresql) name paths ports; + inherit (flake.config.system.device) server; +in { + services = { + postgresqlBackup = { + enable = true; + location = paths.path0; + databases = ["mastodon" "nextcloud" "peertube" "forgejo"]; + }; + postgresql = { + enable = true; + }; + }; + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ]; + }; + }; + + fileSystems."/var/lib/postgresql" = { + device = paths.path0; + fsType = "none"; + options = ["bind"]; + depends = [server.storage0.mount]; + }; + + systemd.tmpfiles.rules = ["Z ${paths.path0} 700 ${name} ${name} -"]; + + users.users.${name}.extraGroups = ["nextcloud" "mastodon" "forgejo"]; + + system.activationScripts.postgresCommands = '' + chown -R ${name}:${name} ${paths.path0} + ''; +} diff --git a/nixos/modules/services/samba.nix b/nixos/modules/services/samba.nix new file mode 100755 index 0000000..1b3db56 --- /dev/null +++ b/nixos/modules/services/samba.nix @@ -0,0 +1,31 @@ +{ + pkgs, + flake, + ... +}: let + inherit (flake.config.service.instance) samba jellyfin; +in { + # If you ever need to start fresh, you need to add yourself to the Samba users database: + # sudo smbpasswd -a username + services = { + samba = { + package = pkgs.samba4Full; + enable = true; + openFirewall = true; + settings = { + media = { + path = jellyfin.paths.path0; + writable = "true"; + }; + }; + }; + }; + + networking = { + firewall = { + allowedTCPPorts = [ + samba.ports.port0 + ]; + }; + }; +} diff --git a/nixos/modules/services/vaultwarden.nix b/nixos/modules/services/vaultwarden.nix new file mode 100755 index 0000000..73b0265 --- /dev/null +++ b/nixos/modules/services/vaultwarden.nix @@ -0,0 +1,95 @@ +{ + flake, + config, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) domain email; + inherit (flake.config.system.device) wildcard; + inherit (flake.config.service.instance.vaultwarden) paths ports subdomain name sops ssl; + localhost = wildcard.ip.address0; + host = "${subdomain}.${domain.url0}"; +in { + services = { + vaultwarden = { + backupDir = paths.path0; + enable = true; + environmentFile = config.sops.secrets."${name}/env".path; + config = { + # Domain Configuration + DOMAIN = "https://${host}"; + + # Email Configuration + SMTP_AUTH_MECHANISM = "Plain"; + SMTP_EMBED_IMAGES = true; + SMTP_FROM = email.address3; + SMTP_FROM_NAME = "Vaultwarden"; + SMTP_HOST = "smtp.protonmail.ch"; + SMTP_PORT = 587; + SMTP_SECURITY = "starttls"; + SMTP_USERNAME = email.address3; + + # Security Configuration + DISABLE_ADMIN_TOKEN = false; + + # Event and Backup Management + EVENTS_DAYS_RETAIN = 90; + + # User Features + SENDS_ALLOWED = true; + SIGNUPS_VERIFY = true; + WEB_VAULT_ENABLED = true; + + # Rocket (Web Server) Settings + ROCKET_ADDRESS = localhost; + ROCKET_PORT = ports.port0; + }; + }; + caddy = { + virtualHosts = { + "${host}" = { + extraConfig = '' + reverse_proxy ${localhost}:${toString ports.port0} { + header_up X-Real-IP {remote_host} + } + + tls ${ssl.cert} ${ssl.key} + + encode zstd gzip + ''; + }; + }; + }; + }; + + sops = let + sopsSecrets = ["env"]; + sopsPath = secret: { + path = "${sops.path0}/${name}-${secret}"; + owner = name; + mode = "600"; + }; + in { + secrets = builtins.listToAttrs ( + map + (secret: { + name = "${name}/${secret}"; + value = sopsPath secret; + }) + sopsSecrets + ); + }; + + systemd.tmpfiles.rules = [ + "Z ${paths.path0} 0755 ${name} ${name} -" + "Z ${sops.path0} 755 ${name} ${name} -" + ]; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ]; + }; + }; +} diff --git a/nixos/modules/steam/default.nix b/nixos/modules/steam/default.nix new file mode 100755 index 0000000..75048cf --- /dev/null +++ b/nixos/modules/steam/default.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + programs = { + steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + extraPackages = [pkgs.curl]; + }; + java.enable = true; + }; + hardware.steam-hardware.enable = true; +} diff --git a/nixos/modules/steam/steam_dev.cfg b/nixos/modules/steam/steam_dev.cfg new file mode 100755 index 0000000..02e4c65 --- /dev/null +++ b/nixos/modules/steam/steam_dev.cfg @@ -0,0 +1,2 @@ +@nClientDownloadEnableHTTP2PlatformLinux 0 +@fDownloadRateImprovementToAddAnotherConnection 1.0 \ No newline at end of file diff --git a/nixos/modules/syncthing.nix b/nixos/modules/syncthing.nix new file mode 100755 index 0000000..f99db9c --- /dev/null +++ b/nixos/modules/syncthing.nix @@ -0,0 +1,54 @@ +{flake, ...}: let + inherit (flake.config.system.device) nas phone tablet wildcard; + inherit (flake.config.service.instance.syncthing) ports; + localhost = wildcard.ip.address0; +in { + services = { + syncthing = { + enable = true; + overrideDevices = false; + overrideFolders = false; + openDefaultPorts = true; + systemService = true; + guiAddress = "${localhost}:${toString ports.port0}"; + settings = { + devices = { + ${nas.name} = { + autoAcceptFolders = true; + name = nas.name; + addresses = [ + "tcp://${nas.ip.address0}:${toString ports.port2}" + ]; + id = nas.sync; + }; + ${phone.name} = { + autoAcceptFolders = true; + name = phone.name; + addresses = [ + "tcp://${phone.ip.address0}:${toString ports.port2}" + ]; + id = phone.sync; + }; + ${tablet.name} = { + autoAcceptFolders = true; + name = tablet.name; + addresses = [ + "tcp://${tablet.ip.address0}:${toString ports.port2}" + ]; + id = tablet.sync; + }; + }; + }; + }; + }; + + networking = { + firewall = { + allowedTCPPorts = [ + ports.port0 + ports.port1 + ports.port2 + ]; + }; + }; +} diff --git a/nixos/modules/sysstat.nix b/nixos/modules/sysstat.nix new file mode 100755 index 0000000..b67756e --- /dev/null +++ b/nixos/modules/sysstat.nix @@ -0,0 +1,5 @@ +{ + services.sysstat = { + enable = true; + }; +} diff --git a/nixos/modules/system.nix b/nixos/modules/system.nix new file mode 100755 index 0000000..eed7124 --- /dev/null +++ b/nixos/modules/system.nix @@ -0,0 +1 @@ +_: {} diff --git a/nixos/modules/tablet.nix b/nixos/modules/tablet.nix new file mode 100755 index 0000000..d4cae11 --- /dev/null +++ b/nixos/modules/tablet.nix @@ -0,0 +1,6 @@ +{ + hardware.opentabletdriver = { + enable = true; + daemon.enable = true; + }; +} diff --git a/nixos/modules/virtualization.nix b/nixos/modules/virtualization.nix new file mode 100755 index 0000000..34f2c30 --- /dev/null +++ b/nixos/modules/virtualization.nix @@ -0,0 +1,3 @@ +{ + virtualisation.libvirtd.enable = true; +} diff --git a/nixos/modules/xserver.nix b/nixos/modules/xserver.nix new file mode 100755 index 0000000..3e06178 --- /dev/null +++ b/nixos/modules/xserver.nix @@ -0,0 +1,18 @@ +{ + services = { + xserver = { + enable = true; + xkb.layout = "us"; + }; + libinput = { + enable = true; + touchpad = { + tapping = true; + naturalScrolling = false; + }; + mouse.accelProfile = "flat"; + touchpad.accelProfile = "flat"; + }; + }; + console.useXkbConfig = true; +} diff --git a/parts/default.nix b/parts/default.nix new file mode 100755 index 0000000..2dd1544 --- /dev/null +++ b/parts/default.nix @@ -0,0 +1,14 @@ +{ + perSystem = { + pkgs, + lib, + config, + self', + ... + }: { + imports = [ + ./devshells.nix + ./pre-commit.nix + ]; + }; +} diff --git a/parts/devshells.nix b/parts/devshells.nix new file mode 100755 index 0000000..b34f4ae --- /dev/null +++ b/parts/devshells.nix @@ -0,0 +1,22 @@ +{ + pkgs, + config, + ... +}: { + devShells = { + default = pkgs.mkShell { + packages = builtins.attrValues { + inherit + (pkgs) + age + alejandra + just + nil + sops + ssh-to-age + ; + }; + shellHook = "${config.pre-commit.installationScript}"; + }; + }; +} diff --git a/parts/pre-commit.nix b/parts/pre-commit.nix new file mode 100755 index 0000000..ce0586b --- /dev/null +++ b/parts/pre-commit.nix @@ -0,0 +1,7 @@ +{ + pre-commit.settings.hooks = { + alejandra.enable = true; + commitizen.enable = true; + # statix.enable = true; + }; +} diff --git a/profiles/user0/configs/desktop.nix b/profiles/user0/configs/desktop.nix new file mode 100755 index 0000000..483bbbd --- /dev/null +++ b/profiles/user0/configs/desktop.nix @@ -0,0 +1,23 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "braveHM" + "commandLine" + "entertainment" + "extras" + "fileManagement" + "firefoxHM" + "internet" + "jellyfin" + "privacy" + "productionArt" + "productionAudio" + "productionCode" + "productionVideo" + "productionWriting" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user0/configs/laptop.nix b/profiles/user0/configs/laptop.nix new file mode 100755 index 0000000..31610f4 --- /dev/null +++ b/profiles/user0/configs/laptop.nix @@ -0,0 +1,19 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "braveHM" + "commandLine" + "entertainment" + "extras" + "fileManagement" + "firefoxHM" + "internet" + "privacy" + "productionCode" + "productionWriting" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user0/configs/server.nix b/profiles/user0/configs/server.nix new file mode 100755 index 0000000..c376403 --- /dev/null +++ b/profiles/user0/configs/server.nix @@ -0,0 +1,13 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "commandLine" + "firefoxHM" + "productionCode" + "productionVideo" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user0/default.nix b/profiles/user0/default.nix new file mode 100755 index 0000000..9271678 --- /dev/null +++ b/profiles/user0/default.nix @@ -0,0 +1,100 @@ +{ + config, + flake, + pkgs, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) name git; + + hostname = config.networking.hostName; +in { + users = { + users.${user0} = { + description = name; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "adbusers" + "caddy" + "disk" + "jellyfin" + "libvirtd" + "minecraft" + "navidrome" + "netdev" + "networkmanager" + "nextcloud" + "ollama" + "postgres" + "redis-mastodon" + "samba" + "syncthing" + "vaultwarden" + "vboxusers" + "wheel" + ]; + }; + }; + home-manager.users = { + ${user0} = { + home = { + username = user0; + homeDirectory = "/home/${user0}"; + file = { + "./.steam/steam/steam_dev.cfg" = { + source = ../../nixos/modules/steam/steam_dev.cfg; + }; + "./justfile" = { + source = ./justfile; + }; + "./Files/Scripts/list.sh" = { + source = ./files/list.sh; + executable = true; + }; + "./Files/Scripts/loop.sh" = { + source = ./files/loop.sh; + executable = true; + }; + }; + sessionVariables = {}; + }; + imports = [ + {home.stateVersion = config.system.stateVersion;} + ( + import ./configs/${hostname}.nix {flake = flake;} + ) + ]; + }; + }; + systemd.tmpfiles = let + createDir = [ + "Downloads/Nicotine" + "Downloads/Nicotine/Downloads" + "Downloads/Nicotine/Incomplete" + "Downloads/Nicotine/Received" + "Downloads/Qbittorent" + "Downloads/Qbittorent/Movies" + "Downloads/Qbittorent/Music" + "Downloads/Qbittorent/Shows" + "Files" + "Files/Scripts" + "Files/Games" + ]; + + removeDir = [ + "Desktop" + "Documents" + "Music" + "Pictures" + "Public" + "Templates" + "Videos" + ]; + in { + rules = + ["d ${git.path0} 0755 ${user0} users -"] + ++ (map (path: "d /home/${user0}/${path} 0755 ${user0} users -") createDir) + ++ (map (path: "R /home/${user0}/${path} 0755 ${user0} users - -") removeDir); + }; +} diff --git a/profiles/user0/files/list.sh b/profiles/user0/files/list.sh new file mode 100755 index 0000000..b467c45 --- /dev/null +++ b/profiles/user0/files/list.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# Function to list directories recursively and sort them alphabetically +list_directories() { + local parent_dir=$1 + local output_file=$2 + + # Clear the output file if it exists + > "$output_file" + + # Recursively find and list directories, then sort them and write to the output file + while IFS= read -r dir; do + echo "$dir" >> "$output_file" + done < <(find "$parent_dir" -type d | sort) +} + +# Main script execution +if [ $# -eq 0 ]; then + echo "Usage: $0 parent_directory" + exit 1 +fi + +parent_directory=$1 +output_file="nested_directories.txt" + +list_directories "$parent_directory" "$output_file" +echo "Directory paths have been written to $output_file" diff --git a/profiles/user0/files/loop.sh b/profiles/user0/files/loop.sh new file mode 100755 index 0000000..c904110 --- /dev/null +++ b/profiles/user0/files/loop.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +while true ; do date ; natpmpc -a 1 0 udp 60 -g 10.2.0.1 && natpmpc -a 1 0 tcp 60 -g 10.2.0.1 || { echo -e "ERROR with natpmpc command \a" ; break ; } ; sleep 45 ; done diff --git a/profiles/user0/justfile b/profiles/user0/justfile new file mode 100755 index 0000000..bb2295b --- /dev/null +++ b/profiles/user0/justfile @@ -0,0 +1,14 @@ +ewwEdit: + eww --config /home/nick/dotfiles/home-manager/modules/eww/config/ open centerPanel + +ewwLaunch: + ./home/nick/dotfiles/home-manager/modules/eww/config/scripts/master.sh + +gobrrr: + home-manager switch --flake ~/dotfiles#desktop + +gobrrrl: + nixos-rebuild switch --use-remote-sudo --flake /home/nick/dotfiles#desktop + +fuckoff: + shutdown now diff --git a/profiles/user1/configs/desktop.nix b/profiles/user1/configs/desktop.nix new file mode 100755 index 0000000..c5cd792 --- /dev/null +++ b/profiles/user1/configs/desktop.nix @@ -0,0 +1,16 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "commandLine" + "entertainment" + "extras" + "firefoxHM" + "internet" + "privacy" + "productionWriting" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user1/configs/laptop.nix b/profiles/user1/configs/laptop.nix new file mode 100755 index 0000000..c5cd792 --- /dev/null +++ b/profiles/user1/configs/laptop.nix @@ -0,0 +1,16 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "commandLine" + "entertainment" + "extras" + "firefoxHM" + "internet" + "privacy" + "productionWriting" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user1/default.nix b/profiles/user1/default.nix new file mode 100755 index 0000000..668a4f3 --- /dev/null +++ b/profiles/user1/default.nix @@ -0,0 +1,44 @@ +{ + config, + flake, + pkgs, + ... +}: let + hostname = config.networking.hostName; + inherit (flake.config.people) user1; + inherit (flake.config.people.user.${user1}) name; +in { + users = { + users.${user1} = { + description = name; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "libvirtd" + "disk" + "networkmanager" + "vboxusers" + "wheel" + "adbusers" + "netdev" + ]; + }; + }; + home-manager.users = { + ${user1} = { + home = { + username = user1; + homeDirectory = "/home/${user1}"; + file = { + "./justfile".source = ./justfile; + "./.steam/steam/steam_dev.cfg".source = ../../nixos/modules/steam/steam_dev.cfg; + }; + sessionVariables = {}; + }; + imports = [ + {home.stateVersion = config.system.stateVersion;} + (import ./configs/${hostname}.nix {flake = flake;}) + ]; + }; + }; +} diff --git a/profiles/user1/justfile b/profiles/user1/justfile new file mode 100755 index 0000000..e69de29 diff --git a/profiles/user2/configs/fallaryn.nix b/profiles/user2/configs/fallaryn.nix new file mode 100755 index 0000000..760e1f4 --- /dev/null +++ b/profiles/user2/configs/fallaryn.nix @@ -0,0 +1,22 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "commandLine" + "entertainment" + "extras" + "fileManagement" + "internet" + "internetExtras" + "productionArt" + "productionArtExtras" + "productionAudio" + "productionCode" + "productionVideo" + "productionWriting" + "wpsOffice" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user2/configs/laptop.nix b/profiles/user2/configs/laptop.nix new file mode 100755 index 0000000..81d09fc --- /dev/null +++ b/profiles/user2/configs/laptop.nix @@ -0,0 +1,16 @@ +{flake, ...}: let + inherit (flake) self; + moduleNames = [ + "commandLine" + "entertainment" + "extras" + "fileManagement" + "internet" + "internetExtras" + "wpsOffice" + ]; + + moduleImports = map (module: self.homeModules.${module}) moduleNames; +in { + imports = moduleImports; +} diff --git a/profiles/user2/default.nix b/profiles/user2/default.nix new file mode 100755 index 0000000..abaa409 --- /dev/null +++ b/profiles/user2/default.nix @@ -0,0 +1,44 @@ +{ + config, + flake, + pkgs, + ... +}: let + hostname = config.networking.hostName; + inherit (flake.config.people) user2; + inherit (flake.config.people.user.${user2}) name; +in { + users = { + users.${user2} = { + description = name; + isNormalUser = true; + shell = pkgs.nushell; + extraGroups = [ + "libvirtd" + "disk" + "networkmanager" + "vboxusers" + "wheel" + "adbusers" + "netdev" + ]; + }; + }; + home-manager.users = { + ${user2} = { + home = { + username = user2; + homeDirectory = "/home/${user2}"; + file = { + "./justfile".source = ./justfile; + "./.steam/steam/steam_dev.cfg".source = ../../nixos/modules/steam/steam_dev.cfg; + }; + sessionVariables = {}; + }; + imports = [ + {home.stateVersion = config.system.stateVersion;} + (import ./configs/${hostname}.nix {flake = flake;}) + ]; + }; + }; +} diff --git a/profiles/user2/justfile b/profiles/user2/justfile new file mode 100755 index 0000000..e69de29 diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml new file mode 100755 index 0000000..07829e6 --- /dev/null +++ b/secrets/secrets.yaml @@ -0,0 +1,52 @@ +ssh: + private: ENC[AES256_GCM,data:XJk/gjPkFeSZtPkKYS2vRHqMY/X5zRaDlS4UwzUvjm9MvTgdhoXUlqvFC0Dl5SZhRlY+XXAuG7gIIUESzCFWQKdOoUcto3r0WSuIm9EwLKXnnaHemeFVHYgZU9Rz45PK6yFWUC06+n56b2A1dFXftjeXcCqaQrT/jk3RDSHmhW9u7QgDmhhaybxXOrzkup2U8kjhrMmRBcf4xP//nihuzHcyYX75ONr56bgkjl6gpZTfZrn2ad8b+4iGn+rElzf7RHAG0mwTeEX2kYRyafaanGuc2xTnZubBAYDnc1eM6T99PXC0iWh/lUKc1zG1l18UchWzgvl3sPK0Cb2/5aaFMUk2ET6kVOlpKyGc94MRpyv3iUi8soFjh34sWH3mFtec2OWfIxDhoVfZoc2hmP2Hflfjp7acwaMskFBHaCSO2DGtNmN3hSUhAAeLx8OZupSIJmDVpq00qKUbN+5z4K78AdGuUOP07cE889evNniCHLP6yPav7tIulnBS9lD2U+CbqF7vMtdZx/eYFwJjmMtE,iv:JxSytvXKWLHDedlE0Wq5YpPUnfb0HoQgKJ2bt1Z8yqk=,tag:MjOoUSWsHWHgxp0yu9YQFA==,type:str] + public: ENC[AES256_GCM,data:Cn4hutHHeptbefHOKK7zv5TmveGOqfHAwGHogDq9sRmeb+b1lzHwj7qvg8lcnlJtIo4qS+TrKtSj5ZCsPNXOhWG1rkk97gTfPMbcxj5f1O3WJigL2wsrB2cQgc5UsA==,iv:ID4zRdr/efClOAHbXzxG1bNuJR0A2qbydzGlMhvEcRE=,tag:qbIoaGb+RXxRRkkQtuX7/A==,type:str] + hosts: ENC[AES256_GCM,data:p7rHBv9Q5WJhffSEz7tNCT5DSjfeYJK3PZ3zyDNhxubyjX2bBa5NoA39UZHFEA57qLGNl+u3Jrkfl5wdb1ueYRFasN4INbZfeP5U1ms6qmdr56DmQmE6twkZFqMbAy8BHVG6WaUG97Iv3Zsq8XAQxkyfj20Vs2/HEuEn9Q2NnHKwbX882xok9AaTqOO+lJII9veDMMpLHxikK0wsi6k05K/uI7OAB6twRnUvC0/yQv03hhKq8jaeOfVOzWTzOJ2/UOs27GvFkzAC86Vu43r4OWoSPh5fZFWB8q4Oex8x62nQwMhqzdg/5dvJsMKO7Kqe7f+qzH5AGBQ4FYh6WcAc47zNz6TRDrER2tPL6CDfZBdCuwFXwTq5ThqY5EdamhNxm7/ClHx28mTzuJwsGV0FZQfaTmhRsYHXmB4U6s+mDaJpZc6cGPuSZ3552JGITKP66KwiDcUd6yyPrC0rSQMXX+bZt71OWu+edYtoHBE6yeOTojDD7VMOiHopZoM/2V1nE7GKI00XtC8Kk6Otemy5FL9KpY8NUtge/VkV6RQpTI0BWGfz/GShukCxwyw7krj1v77LiDp0plEXOwkHjilSId1/ERNYnDgK8DaORvBa/Em0ZIo/hb9YelCczjiErXBhFxirAUZjNosCau2x3KgP7xzFHQxqVMSH4SvxiciiilkE6fM0qfx7hSerpa5A9LcDb/sJZZ0NYPTVKucz4FVBqwSB3twW1+tk0gS/2Ia5dwX5RHh4AJtZca+czwe5nX6O9NM43D1NfHIDqyDrJoR6UPsTp030JEvjLc5w8uaFXV+A3gSYC6PF+6zTPvLyh7B6tmKtk0wjMDAuZpmU647aRDo1BEek9f97blNywR2PCJXe/A/oH85P8hVCtJj43QDt5PQJv8TT4SE+bwFKpePi436mdFJwyG8jsjlA0AUjjLonAwvOtYnqIZ9z09bWmxG+Wx8Bk++fqqThNZ/8w3MhdR9Fv+b1L4HQLfzHp1tYcJ9BziLxNG6z7AZZUw/K0f+D+BoFsESDUH+SD5CQ0Q41BSrafiZCnJqtzpmoFv5qw1kjtU/1U6oydx9qKyCiluM5LWJRUKzLUYekpC7huNSp7LW7nvE18/0qqauGAE9eO+DmWPpbN2mgrSg12hW4Uslk/mMlyBob4WvPJimhQJRElqDus36FpCRBBPQCtSuEiL2ZGK08cLavKEZszFORLBeF7ia1p5mjt1N/pvwo+kCy2Q==,iv:vXAHFieMvrkGH4u/6DffmT/Fki2yAdior/RaYQmDUHM=,tag:PdLLYblraMWEjM8GngwQXQ==,type:str] +network: + synology: ENC[AES256_GCM,data:r0Aor25K6IuywAq5Px9JasWpnYzAA87ffA1k/97GEqMRkb6V6VYW1Q1EoEGNnBoa5o6KBtHk0WY=,iv:IeZMBwKGOevgB3bgnSsF6JJ6ntcJa5fe5irVUuMOGwY=,tag:9JWqeKa0g7YzqpKy1VLFEA==,type:str] + server: ENC[AES256_GCM,data:EFsmXNkuf5OAMh8hjfZTixmmdjqBNIME9JjQC8azeCwcMVInm8bWdxE4OqFmxOk9MAU=,iv:pI6WeM2aQC+7vx1Xmp5O2rikqNLgzuEOg+Lo7TqFQxU=,tag:ElcA8mn9dx+IjIf38nKT5A==,type:str] + fallaryn: ENC[AES256_GCM,data:O77hH3STB6zpl0b9iXsVu9OOrlLKUwfs2qI9hdqX4kMuBs3XgT/xsQ==,iv:RDKsuJoy+LIyADMc3bgOEmLKdXtu6kad2aeVetuZdJI=,tag:MrpCZ+iJUnGIjeHMgcYG6Q==,type:str] + garnet: ENC[AES256_GCM,data:N8sAdjTAiubQihKrtdCkaJQBKkz6/kNdeATiaZXRhlP/HLg7zg==,iv:8QP1HnGSUGHpkwBwQY2Z0gZ6tYaK7XzMuxXexY6QQaU=,tag:fHzPh9lvqB2BmuSkVH5Ojg==,type:str] +mastodon-smtp: ENC[AES256_GCM,data:kGCckgG9vSZYJv/8Z9e58g==,iv:Jw9hDAtVe7LmPpdy/nN0JD9T6j8/OHcFcYiuOjQmJuc=,tag:VlGkBZE5kkzXPgZPw9o49A==,type:str] +mastodon-database: ENC[AES256_GCM,data:qPOU8yGqEQWuMJ4E/fCc+vfKp+YZONb17ZIDHXYZ9RY=,iv:HzVd2ptZBtpRA/XA593WTNL3xJx97hvNx49zIZPBlhQ=,tag:KGZ7Mw2M5O9DBhB+fv+w1Q==,type:str] +mastodon-redis: ENC[AES256_GCM,data:aEEOGmyLin80X1uNiLLIuCSGlGjYX9vOl45GuxwlJqE=,iv:3qaZAqwm6tLnB1vCtZ2ZotaZO4/XmQKLe/I+pzqbJj0=,tag:K1y1QoLgGRvi8oJrzcakhQ==,type:str] +peertube-smtp: ENC[AES256_GCM,data:SebXsDtI3B7IE2D/+cVBlA==,iv:dvUP/KRHtFcslOojuF+PhH/5sviIUFCQOU+lA62MooE=,tag:hqOVUL2XQb0P3FOBddLK6A==,type:str] +peertube-database: ENC[AES256_GCM,data:nm0bHwTcT+ROZc2BC9jx+tXWjZ3689rdn4fdYW+7JTU=,iv:EeQVBAIXPut9gs+I9WpRf7L3f7ACTeTWycUFIKAneKk=,tag:QjGQmZ3zMAgB/WDbxTZVIQ==,type:str] +peertube-redis: ENC[AES256_GCM,data:SQoPzPjgf4YN9dhvO0wo2DEra7cTgfZBx4vCBpNVSXI=,iv:mcCwYtE9E/Mb4V0j9NnU9WhaUMeBpX7BOcc8HGDiEvI=,tag:CsSiS4peZhnZ22uNtUC44w==,type:str] +peertube-root: ENC[AES256_GCM,data:BR0pmqEYYJuDqK7fstyW/hvh8V1GQXVHP24iz2eDeho500IbWaMuDxkNQyfInmIfjC3YvfsHME3S,iv:EgaLKBHYrklF+q5jBPvGKFYJosZxFFMXElTcyKU0ypQ=,tag:PztyBdK5OzeEDvQi/yqRIg==,type:str] +peertube-secret: ENC[AES256_GCM,data:Of4UsWGTXd+uzHE4XkxQOLKBbDd0sQHWQrLgxmn8C9bHgEB85ZnSqOe04IZ4chYKheuzBQ4Vg7pYfGFVBDjx8Q==,iv:cXuVrmQOEHtq7Q6+vzPXKdiuYjLx9hjsd3bCHpBQBqw=,tag:xL8us1XLJsdON/O+BG+xpQ==,type:str] +forgejo-database: ENC[AES256_GCM,data:Stnd+vsoBDK0eLmfgaNaSdO6qY0vF1d0WgrAw1U451I=,iv:7CHPXUPXkTXP0GVqHPK3KavysbSOKuUhJ5EoeAh5Mp4=,tag:iqASITas49wrqCRN8TjLIQ==,type:str] +forgejo-smtp: ENC[AES256_GCM,data:ofHzPrwS8lN74jSr/T9hXQ==,iv:Eu75NqRV+FLQtFL0A1Rj/5ywyPC8PTSwNdelPYaTqAo=,tag:DFrSYC6k7YP52rkDCxfFiQ==,type:str] +castopod-smtp: ENC[AES256_GCM,data:E6vOqbWACLQUwDIHVsJ3ZPmfVC5jWvesXQ==,iv:IQUXjIdnmG2EtrIdOMLsAPO9VFJNjHbcHtocp3EmGbE=,tag:Tu4H+4k7DG5rkgvjl4nVZw==,type:str] +castopod-database: ENC[AES256_GCM,data:Yn2pHEzoEC1ZH0LVaFooHX2TzkM0V6PUboXrziIIYA0=,iv:U+oXBBmn5Yohq5Gx6N5jo2x/eRMXK8pjnxBDCMxD2Oo=,tag:i+xZW7S+tLdive+cyZpTew==,type:str] +discord-token: ENC[AES256_GCM,data:PQ4VEKZUCFdSau9hHj52GkdKTnc1sdNIOrJjWbW0Wu9gNAluOutbEYd21UjP9nW/8ayPrId5dSGs6pqXQEIxT8KmnYVQXQYQ6i5xx9Ciq77pU1MipXE=,iv:lpOWnuySeLDiZMSjbsnQJCgsC3PG3v9hmaPVenlmF5g=,tag:Wdpwagj6iiiif5MZiW+yzQ==,type:str] +minecraft-pass: ENC[AES256_GCM,data:0natV6dEpItFp5zsUKqgVMZLLmqRLBEf,iv:Bc7RTXnpdec0wn25Rb7SkVTf5BjXzq3YCXcjwrC7V9k=,tag:Og5qN94G6pHdpIk6YDg1ZA==,type:str] +vaultwarden: + env: ENC[AES256_GCM,data:UW1Waz9lhzUDfqv+n5ikiWda3z0stVca4JCb8T+4XdVGuv8peNLfZKKhcDNXvGLl2ljEJKaxzSQbRaDl5Fo+5r/dOox3kfcRhcZ2dbWpiy6O/ALN2dvs9Q==,iv:J/YjboI13JiBxNA4UHewYxc20jDDcbbNfxs+dhf56cQ=,tag:tj9cpJRxcSbSSOkpcpadTg==,type:str] +dns: + namecheap: ENC[AES256_GCM,data:Afxyf4cHvdnPIXYoPN3viBOzzqUOeRs3YjQ5ugerlnL9H4iSf/iAsxyzHYysOgZ/9xc0OWt6G6A7cEZHW4i82MX1+mLbvWN5ir1iHL73RtesC14=,iv:3XMTQ4TNL7iXPYFLSa+BapSgqILYuM6ZaQLMQZSJ2pc=,tag:PO69wRhCoey+CwPgnOOR6A==,type:str] +nextcloud-pass: ENC[AES256_GCM,data:BJWpsEtnezl67vQWwV9WSdpPAYLg3eOXAZ301A382GE=,iv:+1LrBtbjCBcVC7m/fSbXzPnBxbVmpv+2opPoxEfcgjY=,tag:ArMw4yv+Zt6Lhm7CaS5hMg==,type:str] +nextcloud-user0: ENC[AES256_GCM,data:yUZruPJ4s2Svvh6Q0f4C4lgcKCcWJDMw8CpT8cXv3m4=,iv:wo9Cl1OsJY6UOvrJw/UHxtcBKykaYQ69Mue7QYyBXRY=,tag:83XvKKJ9V2aBhznzBkzNEQ==,type:str] +nextcloud-user1: ENC[AES256_GCM,data:6EsbSeWWftPjZQM=,iv:LTcx6fx55d3+SepFIoy/6cBdbgaauDeo0gvq9ACCtHA=,tag:uzoATR3ZL2Uk5z6aMiD/yw==,type:str] +nextcloud-user2: ENC[AES256_GCM,data:axrWMmouq5gwqdGL,iv:BPHEn47z2g7gocKO4g5vV4ZSGb+AMA3vGYheAy1zR5Q=,tag:QOWg4fdKxMhGk2qRehH2EQ==,type:str] +nextcloud-user3: ENC[AES256_GCM,data:g6ldEdtBuEmPAQYAQfaO,iv:6fElE2vZh9l/KgJuNevklpIlZZdqGHgwhnOzq1n3ojE=,tag:T0Q1IkdVTeW2T1FmGnjz8A==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiWlRVVlFVWXQ1M0hqNzBT + QVppYmNWaGFXRWlkYTNXUG1hbktUQVY2ekJnClY0ZE9rOW1TNW9MdG5RNENMSHRD + OUtqR0JtaXgyOUREZE5tZjMwOHR2L00KLS0tIE9WTm9FVXVJb1JsWndhRndGdmZI + bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD + aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-10-06T19:27:03Z" + mac: ENC[AES256_GCM,data:alv7AQtp/8dBH+bMZ4oONvl/wgTxnft5GBunByXnjN8eJSOyJgjUTcQomHMEGY5n50/j9Oza7YjYnUJUXnZopgxrcGb1BTKlpuI4n9P07UikNuYCknZ1FUPqsiYxAOtnp4SK7X6lQjchWwWuM8wpC1Xf2gjHGdylq0Fk8xZ33hM=,iv:nPK99qlDX9jRWEmCmLoHNCccURt+/TD5lLtt01cT2f0=,tag:mW8UIHxG79OTmF51BWQEVg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.0 diff --git a/systems/desktop/boot.nix b/systems/desktop/boot.nix new file mode 100755 index 0000000..783e5e2 --- /dev/null +++ b/systems/desktop/boot.nix @@ -0,0 +1,29 @@ +{ + pkgs, + config, + ... +}: { + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = ["ntfs"]; + initrd = { + network.openvpn.enable = true; + availableKernelModules = ["nvme" "ahci" "xhci_pci" "usb_storage" "usbhid" "sd_mod"]; + kernelModules = []; + }; + + kernelModules = ["kvm-amd" "vfio-pci" "v4l2loopback"]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/desktop/default.nix b/systems/desktop/default.nix new file mode 100755 index 0000000..1a2e251 --- /dev/null +++ b/systems/desktop/default.nix @@ -0,0 +1,13 @@ +{lib, ...}: { + imports = [ + ./boot.nix + ./filesystem.nix + ./graphics.nix + ./hardware.nix + ./networking.nix + ./sops.nix + ./ssh.nix + ]; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/desktop/filesystem.nix b/systems/desktop/filesystem.nix new file mode 100755 index 0000000..3fda671 --- /dev/null +++ b/systems/desktop/filesystem.nix @@ -0,0 +1,82 @@ +{ + flake, + config, + ... +}: let + inherit (flake.config.people) user0 user1; + inherit (flake.config.system.device) desktop server nas; + secrets0 = config.sops.secrets."network/synology".path; + secrets1 = config.sops.secrets."network/server".path; +in { + fileSystems = let + synologyDrives = [ + "folder0" + "folder1" + "folder2" + "folder3" + ]; + + storageDrives = [ + "storage0" + "storage1" + ]; + + sambaDrives = [ + "samba0" + ]; + + synologyMounts = folder: { + name = "${nas.${folder}.mount}"; + value = { + device = nas.${folder}.device; + fsType = "cifs"; + options = nas.${folder}.options ++ ["credentials=${secrets0}"]; + }; + }; + + storageMounts = storage: { + name = "${desktop.${storage}.mount}"; + value = { + device = desktop.${storage}.device; + fsType = "ext4"; + options = desktop.${storage}.options; + }; + }; + + sambaMounts = samba: { + name = "${server.${samba}.mount}"; + value = { + device = server.${samba}.device; + fsType = "cifs"; + options = server.${samba}.options ++ ["credentials=${secrets1}"]; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/9ea15b16-068a-4c1b-8152-096b901f1ae7"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/8A33-9662"; + fsType = "vfat"; + options = desktop.boot.options; + }; + } + // (builtins.listToAttrs (map synologyMounts synologyDrives)) + // (builtins.listToAttrs (map storageMounts storageDrives)) + // (builtins.listToAttrs (map sambaMounts sambaDrives)); + + swapDevices = [ + {device = "/dev/disk/by-uuid/b21d20df-f272-4c0c-8e7a-5effac3373f8";} + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user0}.home.homeDirectory} 0755 ${user0} users -" + "Z ${config.home-manager.users.${user1}.home.homeDirectory} 0755 ${user1} users -" + "Z ${desktop.storage0.mount} 0755 ${user0} users -" + "Z ${desktop.storage1.mount} 0755 ${user0} users -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/desktop/graphics.nix b/systems/desktop/graphics.nix new file mode 100755 index 0000000..d4e01e5 --- /dev/null +++ b/systems/desktop/graphics.nix @@ -0,0 +1,18 @@ +{pkgs, ...}: { + hardware = { + graphics = { + enable = true; + + extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + rocmPackages.clr.icd + pkgs.amdvlk + ]; + extraPackages32 = [ + pkgs.driversi686Linux.amdvlk + ]; + }; + }; + boot.initrd.kernelModules = ["amdgpu"]; +} diff --git a/systems/desktop/hardware.nix b/systems/desktop/hardware.nix new file mode 100755 index 0000000..a5fbe13 --- /dev/null +++ b/systems/desktop/hardware.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + pkgs, + ... +}: { + hardware = { + firmware = [pkgs.rtl8761b-firmware]; + enableAllFirmware = true; + ledger.enable = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/desktop/networking.nix b/systems/desktop/networking.nix new file mode 100755 index 0000000..8b18d3b --- /dev/null +++ b/systems/desktop/networking.nix @@ -0,0 +1,33 @@ +{ + lib, + flake, + ... +}: let + inherit (flake.config.system.device) desktop; +in { + networking = { + hostName = desktop.name; + networkmanager.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ + 22 # SSH + 4333 # Feishin + 2234 # Soulseek + ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/desktop/sops.nix b/systems/desktop/sops.nix new file mode 100755 index 0000000..87ad35b --- /dev/null +++ b/systems/desktop/sops.nix @@ -0,0 +1,41 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) git; +in { + sops = { + defaultSopsFile = ../../secrets/secrets.yaml; + validateSopsFiles = false; + age = { + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = false; + }; + secrets = { + "ssh/private" = { + path = "/home/${user0}/.ssh/id_ed25519"; + owner = user0; + }; + "ssh/public" = { + path = "/home/${user0}/.ssh/id_ed25519.pub"; + owner = user0; + }; + "ssh/hosts" = { + path = "/home/${user0}/.ssh/known_hosts"; + owner = user0; + }; + "network/synology" = { + path = "/var/lib/secrets/synology"; + owner = "root"; + mode = "600"; + }; + "network/server" = { + path = "/var/lib/secrets/server"; + owner = "root"; + mode = "600"; + }; + "discord-token" = { + path = "${git.path0}/zookeeper/.env"; + owner = user0; + }; + }; + }; +} diff --git a/systems/desktop/ssh.nix b/systems/desktop/ssh.nix new file mode 100755 index 0000000..ebc3b48 --- /dev/null +++ b/systems/desktop/ssh.nix @@ -0,0 +1,8 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) sshKeys; +in { + users.users.${user0} = { + openssh.authorizedKeys.keys = sshKeys; + }; +} diff --git a/systems/fallaryn/boot.nix b/systems/fallaryn/boot.nix new file mode 100755 index 0000000..7c28a4e --- /dev/null +++ b/systems/fallaryn/boot.nix @@ -0,0 +1,34 @@ +{ + pkgs, + config, + ... +}: { + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = ["ntfs"]; + initrd = { + availableKernelModules = ["amdgpu" "nvme" "ahci" "xhci_pci" "usb_storage" "usbhid" "sd_mod"]; + kernelModules = []; + }; + + kernelModules = ["kvm-amd" "vfio-pci" "v4l2loopback"]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = false; + grub = { + enable = true; + device = "nodev"; + useOSProber = true; + efiSupport = true; + }; + }; + }; +} diff --git a/systems/fallaryn/default.nix b/systems/fallaryn/default.nix new file mode 100755 index 0000000..1a2e251 --- /dev/null +++ b/systems/fallaryn/default.nix @@ -0,0 +1,13 @@ +{lib, ...}: { + imports = [ + ./boot.nix + ./filesystem.nix + ./graphics.nix + ./hardware.nix + ./networking.nix + ./sops.nix + ./ssh.nix + ]; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/fallaryn/filesystem.nix b/systems/fallaryn/filesystem.nix new file mode 100755 index 0000000..3a8484a --- /dev/null +++ b/systems/fallaryn/filesystem.nix @@ -0,0 +1,65 @@ +{ + config, + flake, + ... +}: let + inherit (flake.config.people) user2; + inherit (flake.config.system.device) fallaryn nas; + secrets0 = config.sops.secrets."network/fallaryn".path; +in { + imports = []; + + fileSystems = let + synologyDrives = [ + "folder2" + ]; + + storageDrives = [ + "storage0" + "storage1" + ]; + + synologyMounts = folder: { + name = "${nas.${folder}.mount}"; + value = { + device = nas.${folder}.device; + fsType = "cifs"; + options = nas.${folder}.options ++ ["credentials=${secrets0}"]; + }; + }; + + storageMounts = storage: { + name = "${fallaryn.${storage}.mount}"; + value = { + device = fallaryn.${storage}.device; + fsType = "ext4"; + options = fallaryn.${storage}.options; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/d02cb367-26e0-4708-8840-75dcc4362ff4"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/22BD-5A25"; + fsType = "vfat"; + options = fallaryn.boot.options; + }; + } + // (builtins.listToAttrs (map synologyMounts synologyDrives)) + // (builtins.listToAttrs (map storageMounts storageDrives)); + + swapDevices = [ + {device = "/dev/disk/by-uuid/cc7ab213-26c9-4567-91ca-9dba6e98c9d1";} + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user2}.home.homeDirectory} 0755 ${user2} users -" + "Z ${fallaryn.storage0.mount} 0755 ${user2} users -" + "Z ${fallaryn.storage1.mount} 0755 ${user2} users -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/fallaryn/graphics.nix b/systems/fallaryn/graphics.nix new file mode 100755 index 0000000..2ef537d --- /dev/null +++ b/systems/fallaryn/graphics.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + hardware = { + graphics = { + enable = true; + extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + rocmPackages.clr.icd + pkgs.amdvlk + ]; + extraPackages32 = [ + pkgs.driversi686Linux.amdvlk + ]; + }; + }; + boot.initrd.kernelModules = ["amdgpu"]; +} diff --git a/systems/fallaryn/hardware.nix b/systems/fallaryn/hardware.nix new file mode 100755 index 0000000..e82691c --- /dev/null +++ b/systems/fallaryn/hardware.nix @@ -0,0 +1,12 @@ +{ + config, + lib, + pkgs, + ... +}: { + hardware = { + firmware = [pkgs.rtl8761b-firmware]; + enableAllFirmware = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/fallaryn/networking.nix b/systems/fallaryn/networking.nix new file mode 100755 index 0000000..6631daa --- /dev/null +++ b/systems/fallaryn/networking.nix @@ -0,0 +1,29 @@ +{ + lib, + flake, + ... +}: let + inherit (flake.config.system.device) fallaryn; +in { + networking = { + hostName = fallaryn.name; + networkmanager.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = []; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/fallaryn/sops.nix b/systems/fallaryn/sops.nix new file mode 100755 index 0000000..01f8137 --- /dev/null +++ b/systems/fallaryn/sops.nix @@ -0,0 +1,30 @@ +{flake, ...}: let + inherit + (flake.config.people) + user2 + ; +in { + sops = { + defaultSopsFile = ../../secrets/secrets.yaml; + validateSopsFiles = false; + age = { + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = false; + }; + secrets = { + "ssh/private" = { + path = "/home/${user2}/.ssh/id_ed25519"; + owner = user2; + }; + "ssh/public" = { + path = "/home/${user2}/.ssh/id_ed25519.pub"; + owner = user2; + }; + "network/fallaryn" = { + path = "/etc/fallaryn-synology"; + owner = "root"; + mode = "600"; + }; + }; + }; +} diff --git a/systems/fallaryn/ssh.nix b/systems/fallaryn/ssh.nix new file mode 100755 index 0000000..ebc3b48 --- /dev/null +++ b/systems/fallaryn/ssh.nix @@ -0,0 +1,8 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) sshKeys; +in { + users.users.${user0} = { + openssh.authorizedKeys.keys = sshKeys; + }; +} diff --git a/systems/laptop/boot.nix b/systems/laptop/boot.nix new file mode 100755 index 0000000..21d370c --- /dev/null +++ b/systems/laptop/boot.nix @@ -0,0 +1,28 @@ +{ + pkgs, + config, + ... +}: { + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = ["ntfs"]; + initrd = { + availableKernelModules = ["nvme" "ahci" "xhci_pci" "usb_storage" "usbhid" "sd_mod"]; + kernelModules = []; + }; + + kernelModules = ["kvm-amd" "vfio-pci" "v4l2loopback"]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/laptop/default.nix b/systems/laptop/default.nix new file mode 100755 index 0000000..1a2e251 --- /dev/null +++ b/systems/laptop/default.nix @@ -0,0 +1,13 @@ +{lib, ...}: { + imports = [ + ./boot.nix + ./filesystem.nix + ./graphics.nix + ./hardware.nix + ./networking.nix + ./sops.nix + ./ssh.nix + ]; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/laptop/filesystem.nix b/systems/laptop/filesystem.nix new file mode 100755 index 0000000..e9283b9 --- /dev/null +++ b/systems/laptop/filesystem.nix @@ -0,0 +1,66 @@ +{ + flake, + config, + ... +}: let + inherit (flake.config.people) user0 user1 user2; + inherit (flake.config.system.device) laptop nas server; + + secrets0 = config.sops.secrets."network/synology".path; + secrets1 = config.sops.secrets."network/server".path; +in { + fileSystems = let + synologyDrives = [ + "folder0" + "folder1" + "folder4" + ]; + + sambaDrives = [ + "samba0" + ]; + + synologyMounts = folder: { + name = "${nas.${folder}.mount}"; + value = { + device = nas.${folder}.device; + fsType = "cifs"; + options = nas.${folder}.options ++ ["credentials=${secrets0}"]; + }; + }; + + sambaMounts = samba: { + name = "${server.${samba}.mount}"; + value = { + device = server.${samba}.device; + fsType = "cifs"; + options = server.${samba}.options ++ ["credentials=${secrets1}"]; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/e8a3dd5a-7b71-4d86-b157-bac5e0ba7429"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/E946-BD04"; + fsType = "vfat"; + options = laptop.boot.options; + }; + } + // (builtins.listToAttrs (map synologyMounts synologyDrives)) + // (builtins.listToAttrs (map sambaMounts sambaDrives)); + + swapDevices = [ + {device = "/dev/disk/by-uuid/7730bd62-75e2-4b6c-8dcd-f18189ee2845";} + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user0}.home.homeDirectory} 0755 ${user0} users -" + "Z ${config.home-manager.users.${user1}.home.homeDirectory} 0755 ${user1} users -" + "Z ${config.home-manager.users.${user2}.home.homeDirectory} 0755 ${user2} users -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/laptop/graphics.nix b/systems/laptop/graphics.nix new file mode 100755 index 0000000..2ef537d --- /dev/null +++ b/systems/laptop/graphics.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + hardware = { + graphics = { + enable = true; + extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + rocmPackages.clr.icd + pkgs.amdvlk + ]; + extraPackages32 = [ + pkgs.driversi686Linux.amdvlk + ]; + }; + }; + boot.initrd.kernelModules = ["amdgpu"]; +} diff --git a/systems/laptop/hardware.nix b/systems/laptop/hardware.nix new file mode 100755 index 0000000..e82691c --- /dev/null +++ b/systems/laptop/hardware.nix @@ -0,0 +1,12 @@ +{ + config, + lib, + pkgs, + ... +}: { + hardware = { + firmware = [pkgs.rtl8761b-firmware]; + enableAllFirmware = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/laptop/networking.nix b/systems/laptop/networking.nix new file mode 100755 index 0000000..896c738 --- /dev/null +++ b/systems/laptop/networking.nix @@ -0,0 +1,28 @@ +{ + lib, + flake, + ... +}: let + inherit (flake.config.system.device) laptop; +in { + networking = { + hostName = laptop.name; + networkmanager.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/laptop/sops.nix b/systems/laptop/sops.nix new file mode 100755 index 0000000..a798371 --- /dev/null +++ b/systems/laptop/sops.nix @@ -0,0 +1,41 @@ +{flake, ...}: let + inherit + (flake.config.people) + user0 + user1 + ; +in { + sops = { + defaultSopsFile = ../../secrets/secrets.yaml; + validateSopsFiles = false; + age = { + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = false; + }; + secrets = { + "ssh/private" = { + path = "/home/${user0}/.ssh/id_ed25519"; + owner = user0; + }; + "ssh/public" = { + path = "/home/${user0}/.ssh/id_ed25519.pub"; + owner = user0; + }; + "network/synology" = { + path = "/var/lib/secrets/synology"; + owner = "root"; + mode = "600"; + }; + "network/server" = { + path = "/var/lib/secrets/server"; + owner = "root"; + mode = "600"; + }; + "network/${user1}" = { + path = "/var/lib/secrets/${user1}"; + owner = "root"; + mode = "600"; + }; + }; + }; +} diff --git a/systems/laptop/ssh.nix b/systems/laptop/ssh.nix new file mode 100755 index 0000000..ebc3b48 --- /dev/null +++ b/systems/laptop/ssh.nix @@ -0,0 +1,8 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) sshKeys; +in { + users.users.${user0} = { + openssh.authorizedKeys.keys = sshKeys; + }; +} diff --git a/systems/server/boot.nix b/systems/server/boot.nix new file mode 100755 index 0000000..21d370c --- /dev/null +++ b/systems/server/boot.nix @@ -0,0 +1,28 @@ +{ + pkgs, + config, + ... +}: { + boot = { + extraModulePackages = [ + config.boot.kernelPackages.v4l2loopback.out + ]; + supportedFilesystems = ["ntfs"]; + initrd = { + availableKernelModules = ["nvme" "ahci" "xhci_pci" "usb_storage" "usbhid" "sd_mod"]; + kernelModules = []; + }; + + kernelModules = ["kvm-amd" "vfio-pci" "v4l2loopback"]; + + kernelPackages = pkgs.linuxPackages_latest; + + loader = { + efi = { + canTouchEfiVariables = true; + efiSysMountPoint = "/boot"; + }; + systemd-boot.enable = true; + }; + }; +} diff --git a/systems/server/default.nix b/systems/server/default.nix new file mode 100755 index 0000000..1a2e251 --- /dev/null +++ b/systems/server/default.nix @@ -0,0 +1,13 @@ +{lib, ...}: { + imports = [ + ./boot.nix + ./filesystem.nix + ./graphics.nix + ./hardware.nix + ./networking.nix + ./sops.nix + ./ssh.nix + ]; + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + system.stateVersion = lib.mkForce "24.05"; +} diff --git a/systems/server/filesystem.nix b/systems/server/filesystem.nix new file mode 100755 index 0000000..9b0a32d --- /dev/null +++ b/systems/server/filesystem.nix @@ -0,0 +1,45 @@ +{ + flake, + config, + ... +}: let + inherit (flake.config.people) user0; + inherit (flake.config.system.device) server; +in { + fileSystems = let + storageDrives = [ + "storage0" + ]; + + storageMounts = storage: { + name = "${server.${storage}.mount}"; + value = { + device = server.${storage}.device; + fsType = "ext4"; + options = server.${storage}.options; + }; + }; + in + { + "/" = { + device = "/dev/disk/by-uuid/de4e681b-0667-4bf8-8d6e-c50894aa41cd"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/C68D-B1C0"; + fsType = "vfat"; + }; + } + // (builtins.listToAttrs (map storageMounts storageDrives)); + + swapDevices = [ + {device = "/dev/disk/by-uuid/259fcc06-912c-4bd3-b781-8f77449e935a";} + ]; + + systemd.tmpfiles.rules = [ + "Z ${config.home-manager.users.${user0}.home.homeDirectory} 0755 ${user0} users -" + "Z ${server.storage0.mount} 2775 root root -" + ]; + + services.udisks2.enable = true; +} diff --git a/systems/server/graphics.nix b/systems/server/graphics.nix new file mode 100755 index 0000000..d2a1683 --- /dev/null +++ b/systems/server/graphics.nix @@ -0,0 +1,18 @@ +{pkgs, ...}: { + hardware = { + graphics = { + enable = true; + extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + rocmPackages.clr.icd + pkgs.amdvlk + ]; + extraPackages32 = [ + pkgs.driversi686Linux.amdvlk + ]; + }; + }; + boot.initrd.kernelModules = ["amdgpu"]; + services.xserver.videoDrivers = ["amdgpu"]; +} diff --git a/systems/server/hardware.nix b/systems/server/hardware.nix new file mode 100755 index 0000000..e82691c --- /dev/null +++ b/systems/server/hardware.nix @@ -0,0 +1,12 @@ +{ + config, + lib, + pkgs, + ... +}: { + hardware = { + firmware = [pkgs.rtl8761b-firmware]; + enableAllFirmware = true; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/systems/server/networking.nix b/systems/server/networking.nix new file mode 100755 index 0000000..a78d695 --- /dev/null +++ b/systems/server/networking.nix @@ -0,0 +1,38 @@ +{ + lib, + flake, + ... +}: let + inherit (flake.config.system.device) server; +in { + networking = { + hostName = server.name; + networkmanager.enable = true; + useDHCP = lib.mkDefault true; + firewall = { + enable = true; + allowedTCPPorts = [ + 22 # SSH + 25 # SMTP + 139 # SMTP + 587 # SMTP + ]; + }; + }; + services = { + avahi = { + enable = true; + openFirewall = true; + nssmdns4 = true; + publish = { + enable = true; + userServices = true; + }; + }; + sshd.enable = true; + openssh = { + enable = true; + settings.PasswordAuthentication = false; + }; + }; +} diff --git a/systems/server/sops.nix b/systems/server/sops.nix new file mode 100755 index 0000000..aec0df8 --- /dev/null +++ b/systems/server/sops.nix @@ -0,0 +1,26 @@ +{flake, ...}: let + inherit (flake.config.people) user0; +in { + sops = { + defaultSopsFile = ../../secrets/secrets.yaml; + validateSopsFiles = false; + age = { + keyFile = "/var/lib/sops-nix/key.txt"; + generateKey = false; + }; + secrets = { + "ssh/private" = { + path = "/home/${user0}/.ssh/id_ed25519"; + owner = user0; + }; + "ssh/public" = { + path = "/home/${user0}/.ssh/id_ed25519.pub"; + owner = user0; + }; + "discord-token" = { + path = "/home/${user0}/projects/zookeeper/.env"; + owner = user0; + }; + }; + }; +} diff --git a/systems/server/ssh.nix b/systems/server/ssh.nix new file mode 100755 index 0000000..ebc3b48 --- /dev/null +++ b/systems/server/ssh.nix @@ -0,0 +1,8 @@ +{flake, ...}: let + inherit (flake.config.people) user0; + inherit (flake.config.people.user.${user0}) sshKeys; +in { + users.users.${user0} = { + openssh.authorizedKeys.keys = sshKeys; + }; +} diff --git a/templates/haskell/.envrc b/templates/haskell/.envrc new file mode 100755 index 0000000..8392d15 --- /dev/null +++ b/templates/haskell/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/templates/haskell/.gitignore b/templates/haskell/.gitignore new file mode 100755 index 0000000..a8c57c8 --- /dev/null +++ b/templates/haskell/.gitignore @@ -0,0 +1,4 @@ +.direnv +.pre-commit-config.yaml +.vscode +dist-newstyle diff --git a/templates/haskell/example.cabal b/templates/haskell/example.cabal new file mode 100755 index 0000000..2802a8c --- /dev/null +++ b/templates/haskell/example.cabal @@ -0,0 +1,10 @@ +cabal-version: 3.0 +name: example +version: 0.1.0.0 + +executable main + main-is: Main.hs + build-depends: + , base + default-language: Haskell2010 + hs-source-dirs: src diff --git a/templates/haskell/flake.nix b/templates/haskell/flake.nix new file mode 100755 index 0000000..d729ace --- /dev/null +++ b/templates/haskell/flake.nix @@ -0,0 +1,21 @@ +{ + inputs = { + haskell-flake.url = "github:srid/haskell-flake"; + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + pre-commit-hooks-nix.url = "github:cachix/pre-commit-hooks.nix"; + }; + outputs = inputs @ { + self, + nixpkgs, + flake-parts, + ... + }: + flake-parts.lib.mkFlake {inherit inputs;} { + imports = [ + inputs.haskell-flake.flakeModule + inputs.pre-commit-hooks-nix.flakeModule + ./parts + ]; + systems = nixpkgs.lib.systems.flakeExposed; + }; +} diff --git a/templates/haskell/justfile b/templates/haskell/justfile new file mode 100755 index 0000000..e69de29 diff --git a/templates/haskell/parts/default.nix b/templates/haskell/parts/default.nix new file mode 100755 index 0000000..9878921 --- /dev/null +++ b/templates/haskell/parts/default.nix @@ -0,0 +1,15 @@ +{ + perSystem = { + pkgs, + lib, + config, + self', + ... + }: { + imports = [ + ./devshells.nix + ./packages.nix + ./pre-commit.nix + ]; + }; +} diff --git a/templates/haskell/parts/devshells.nix b/templates/haskell/parts/devshells.nix new file mode 100755 index 0000000..9220ad3 --- /dev/null +++ b/templates/haskell/parts/devshells.nix @@ -0,0 +1,58 @@ +{ + pkgs, + config, + ... +}: { + haskellProjects.default = { + devShell = { + enable = true; + + tools = hp: { + inherit + (hp) + cabal-fmt + haskell-language-server + ; + + inherit + (pkgs) + alejandra + dhall + dhall-json + dhall-lsp-server + helix-gpt + just + libz + ngrep + nil + nodejs_22 + sops + ssh-to-age + stripe-cli + vscode-langservers-extracted + zlib + ; + + inherit + (pkgs.elmPackages) + elm + elm-format + elm-land + elm-language-server + elm-review + elm-test + ; + + inherit + (pkgs.nodePackages) + "@commitlint/config-conventional" + npm + typescript-language-server + ; + }; + + hlsCheck.enable = true; + mkShellArgs.shellHook = "${config.pre-commit.installationScript}"; + }; + }; +} diff --git a/templates/haskell/parts/packages.nix b/templates/haskell/parts/packages.nix new file mode 100755 index 0000000..b7c0901 --- /dev/null +++ b/templates/haskell/parts/packages.nix @@ -0,0 +1 @@ +{self, ...}: {packages.default = self.packages.example;} diff --git a/templates/haskell/parts/pre-commit.nix b/templates/haskell/parts/pre-commit.nix new file mode 100755 index 0000000..ba63cc6 --- /dev/null +++ b/templates/haskell/parts/pre-commit.nix @@ -0,0 +1,7 @@ +{ + pre-commit.settings.hooks = { + alejandra.enable = true; + commitizen.enable = true; + statix.enable = true; + }; +} diff --git a/templates/haskell/src/Main.hs b/templates/haskell/src/Main.hs new file mode 100755 index 0000000..98f25e4 --- /dev/null +++ b/templates/haskell/src/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "Hello, World!"