4 |
5 | # Cohesion
6 |
7 | A cohesive, transparent, and integrated style for [Zen Browser](https://zen-browser.app/)
8 |
9 | https://github.com/user-attachments/assets/e19e1a3d-c3ea-42a1-a655-4b9353463ca5
10 |
11 | ### Install and Config
12 | - Drop the Cohesion folder into your **chrome** folder
13 | - Add `@import "Cohesion/Cohesion.css";` to the top of your **userChrome.css** file
14 |
15 | Enable the following in `about:config`
16 | - `browser.tabs.allow_transparent_browser` = `true`*
17 | - `zen.view.use-deprecated-urlbar` = `true`
18 | #### Known Issues:
19 |
20 | *- Currently not compatible with [Zen Sidebar At Right Side](https://zen-browser.app/mods/dd4f5461-1564-4e56-9f9d-f81e3c18f93c).*
21 |
22 | *- Currently not compatible with Collapsed Toolbar Mode.*
23 |
24 | *- Some HDR displays render an incorrect Alpha value for certian elements, even though they are consistant within the userChrome.css file. This is believed to be a Windows HDR bug.*
25 |
26 | *- Websites without a background will display the browser UI underneath the content.*
27 |
28 | *(Extensions like [Dark Reader](https://addons.mozilla.org/en-US/firefox/addon/darkreader/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search) fix this by setting their own background.)*
29 |
30 |
31 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/postload.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Hide Natsumi not loaded banner (load was successful) ==== */
31 | * {
32 | --natsumi-fail-display: none !important;
33 | }
34 |
--------------------------------------------------------------------------------
/themes/b814d97b-2bef-4448-847f-bec13ae326dd/ToucanTweaks/modules/Icons/KeepassXC-Browser.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/themes/542f2a0e-4216-4037-9eef-e8143c21ab44/Nebula/modules/Toolbar.css:
--------------------------------------------------------------------------------
1 | /* Credit: Lacuna by Tanay-Kar */
2 |
3 | /* === BETTER CUSTOMIZE TOOLBAR ============================================================================================ */
4 |
5 | #customization-container {
6 | position: absolute;
7 | z-index: 1;
8 | bottom: 10px;
9 | right: 10px;
10 | height: 80%;
11 | width: 70%;
12 | border-radius: 12px;
13 |
14 | padding: 10px;
15 | background: light-dark(rgba(255,255,255,0.32),rgba(0,0,0,0.3)) !important;
16 | }
17 |
18 | @media (-moz-pref("zen.tabs.vertical.right-side")) {
19 | #customization-container {
20 | left: 10px;
21 | }
22 |
23 | #customization-container #customization-content-container {
24 | flex-direction: row-reverse;
25 | }
26 | }
27 |
28 | #customization-container #customization-panel-container {
29 | padding: 10px !important;
30 | }
31 |
32 | #customization-container #customization-panelWrapper {
33 | --panel-arrow-offset: 0px;
34 | }
35 |
36 | #customization-container .panel-arrowbox {
37 | display: none !important;
38 | }
39 |
40 | #customization-container .panel-arrowcontent {
41 | height: 100% !important;
42 | background: light-dark(rgba(255,255,255,0.8),rgba(0,0,0,0.4)) !important;
43 | border: none !important;
44 | margin: 0px !important;
45 | border-radius: 8px;
46 | }
47 |
48 | /* Check when the width is low */
49 | @media (max-width: 700px) { /* Adjust the threshold as needed */
50 | #customization-container {
51 | border: 2px solid red; /* Temporary visual indicator */
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi-pages/modules/preferences.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Settings tweaks ==== */
31 |
32 | @-moz-document url-prefix(about:preferences) {
33 | /* Patch layout list width on small screens */
34 | #zenLayoutList {
35 | flex-wrap: wrap !important;
36 | }
37 | }
--------------------------------------------------------------------------------
/themes/1f1e7bbb-213b-473e-aebb-e9bffa3c9747/pineapple-fried/cohesion/modules/intergrated-urlbar.css:
--------------------------------------------------------------------------------
1 | /* --- Integrated URL Bar --- */
2 |
3 | /* Webview Styles */
4 | @media not (-moz-bool-pref: "zen.view.compact") {
5 | #browser {
6 | --urlbar-min-width: 28px !important;
7 | }
8 |
9 | /* Nav bar style and transparency level */
10 | #nav-bar {
11 | --zen-toolbar-height: 45px;
12 | background-color: rgba(0, 0, 0, 0.2) !important;
13 | border-radius: 10px 10px 0 0 !important;
14 | padding-left: 6px !important;
15 | margin: 6px 6px 0 1px !important;
16 | box-shadow: none !important;
17 | }
18 |
19 | .browserSidebarContainer {
20 | background-color: rgba(0, 0, 0, 0.2) !important;
21 | margin-top: 0px !important;
22 | margin-right: 0px !important;
23 | box-shadow: none !important;
24 | border-radius: 10px 10px 10px 10px !important;
25 | }
26 |
27 | /* Toolbar spacing */
28 | #navigator-toolbox {
29 | padding-top: 8px !important;
30 | }
31 | }
32 |
33 | @media (-moz-bool-pref: "zen.view.use-single-toolbar") {
34 | #browser {
35 | --urlbar-min-width: initial !important;
36 | }
37 |
38 | #nav-bar {
39 | background-color: initial !important;
40 | border-radius: initial !important;
41 | padding-left: 4px!important;
42 | margin: initial !important;
43 | box-shadow: initial !important;
44 | }
45 |
46 | .browserSidebarContainer {
47 | background-color: initial !important;
48 | margin-top: initial !important;
49 | margin-right: initial !important;
50 | box-shadow: initial !important;
51 | border-radius: initial !important;
52 | }
53 |
54 | #navigator-toolbox {
55 | padding-top: initial !important;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi-pages/modules/global.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Global tweaks ==== */
31 |
32 | * {
33 | /*noinspection CssInvalidFunction*/
34 | @media -moz-pref("natsumi.global.highlight-accent-color") {
35 | &::-moz-selection, &::selection {
36 | background: color-mix(in srgb, var(--natsumi-colors-primary) 40%, transparent) !important;
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi-config.css:
--------------------------------------------------------------------------------
1 | /* ==== Config ==== */
2 |
3 | /*
4 | Feel free to change these values to whatever you want, as long
5 | as they use the correct format.
6 | */
7 |
8 | * {
9 | /* Accent color */
10 | --natsumi-accent-color: var(--zen-primary-color);
11 | --natsumi-pages-accent-color: #a0d490;
12 |
13 | /* Natsumi Glass Effect */
14 | --glass-blur-radius: 20px;
15 | --glass-shadow-size: 10px;
16 | --glass-shadow-opacity: 75%;
17 |
18 | /* Natsumi URLbar appear animations */
19 | --urlbar-appear-animation-duration: 0.25s;
20 | --urlbar-results-animation-duration: 0.5s;
21 | --urlbar-individual-result-animation-duration: 0.75s;
22 | --urlbar-individual-result-animation-delay: 0.05s;
23 | --urlbar-individual-result-animation-delay-offset: 0.05s;
24 | --urlbar-individual-result-expand-size: 1.05;
25 |
26 | /* Natsumi border reload animations */
27 | --reload-border-animation-duration: 0.2s;
28 | --reload-border-animation-rotation-duration: 2s;
29 | --reload-border-animation-exit-duration: 1s;
30 | --reload-border-margin: 4px;
31 |
32 | /* Natsumi URLbar reload animations */
33 | --reload-urlbar-animation-duration: 0.2s;
34 | --reload-urlbar-animation-fadein-duration: 2s;
35 |
36 | /* Container tabs gradient */
37 | --container-tabs-normal-gradient-width: 25%;
38 | --container-tabs-expanded-gradient-width: 50%;
39 |
40 | /* Floating Firefox sidebar panels */
41 | --ff-sidebar-x-offset: 20px;
42 | --ff-sidebar-y-offset: 20px;
43 |
44 | /* Custom fonts experiment (must be an installed font) */
45 | --custom-font: 'Nunito';
46 |
47 | /* pdf.js */
48 | --pdfjs-topbar-max-width: 750px; /* use calc(100% - 10px) for max width */
49 |
50 | /* FF home */
51 | --home-background-url: url('');
52 | }
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi-pages/natsumi-pages.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Load config and Natsumi Browser Pages ==== */
31 |
32 | @import "../natsumi-config.css";
33 | @import "modules/preload.css";
34 | @import "modules/pdfjs.css";
35 | @import "modules/ff-home.css";
36 | @import "modules/preferences.css";
37 | @import "modules/global.css";
38 |
39 | /* Do NOT enter any additional CSS below. */
40 |
--------------------------------------------------------------------------------
/themes/23225fc3-ecac-4fbb-9c03-096ab55a9ee8/README.md:
--------------------------------------------------------------------------------
1 | # Advanced Tab Groups
2 |
3 | CSS for Zen Browser's experimental Tab Groups using `userChrome.css`.
4 |
5 | 
6 |
7 | ## Setup
8 |
9 | _To use this CSS, you must configure Zen Browser's `userChrome.css` and enable the listed preferences in `about:config`._
10 |
11 | If you're unfamiliar with `userChrome.css`, please refer to [this guide](https://docs.zen-browser.app/guides/live-editing). If you encounter any issues, feel free to create an issue on this repository.
12 |
13 | ---
14 |
15 | ## How to Use
16 |
17 | 1. Enable `browser.tabs.groups.enabled` in `about:config` to activate Firefox's experimental Tab Groups feature (works in all versions of Zen Browser).
18 | 2. Follow [this guide](https://docs.zen-browser.app/guides/live-editing) to set up `userChrome.css`.
19 | 3. Copy the CSS from this repository into your `userChrome.css` file.
20 | 4. Add the configuration booleans listed below in `about:config` and adjust them to your liking.
21 | 5. Right click on the tab tou want to group, select add tab to new group then follow the settup. (If this is not an option please check step 1)
22 | 6. Enjoy your customized tab groups!
23 |
24 | ---
25 |
26 | ## Configuration Options
27 |
28 | **Add** these preferences to `about:config` to enable additional features **(They have to be added and are not there by default.)**:
29 |
30 | - **`tab.groups.add-arrow`**
31 | - **`tab.groups.background`**
32 | - **`tab.groups.borders`**
33 | - **`tab.groups.theme-folders`**
34 | - **`tab.groups.fill-folders`**
35 | - **`tab.groups.display-tab-range`**
36 | - **`tab.groups.hide-save-info`** (Recommend for the moment, until Firefox 136 is launched for Zen Browser, end of the month or early March.)
37 | - **`tab.groups.better-unload`**
38 | ---
39 |
40 | ## What Does This Do?
41 |
42 | This CSS improves the functionality and appearance of Zen Browser's experimental Tab Groups.
43 |
44 | ---
45 |
46 | ## Features
--------------------------------------------------------------------------------
/themes/b814d97b-2bef-4448-847f-bec13ae326dd/README.md:
--------------------------------------------------------------------------------
1 | # Toucan Tweaks
2 |
3 | This repository contains a very small CSS theme for Zen Browser. It is expected to be used on top of other themes, such as [Natsumi Browser by Greeen-Dev](https://github.com/greeeen-dev/natsumi-browser) and [Pineapple Fried by TheBigWazz](https://github.com/TheBigWazz/Pineapple-Fried). As such, all ToucanTweaks does by itself is change some icons. The menu button is changed to the Zen logo, and the unified extensions button is changed to a version with a subtle Z shape in it. In addition, the logos of [uBlock Origin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search), [Dark Reader](https://addons.mozilla.org/en-US/firefox/addon/darkreader/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search), [Zotero Connector](https://www.zotero.org/download/connectors), [Cast Kodi](https://addons.mozilla.org/en-US/firefox/addon/castkodi/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search), [KeepassXC-Browser](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search), [Bitwarden](https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search), and [ProtonPass](https://addons.mozilla.org/en-US/firefox/addon/proton-pass/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search) are changed to appear like they are a native part of the browser. Further extensions will be added on request.
4 |
5 | ## Showcase
6 |
7 | From left to right: uBlock Origin, Dark Reader, Workspace Swapper, Zotero Connector, Cast Kodi.
8 | 
9 |
10 | Menu button and unified extension button:
11 |
12 | 
13 |
14 | Natsumi + Pineapple Fried + ToucanTweaks:
15 | 
--------------------------------------------------------------------------------
/themes/542f2a0e-4216-4037-9eef-e8143c21ab44/Nebula/modules/Topbar-buttons.css:
--------------------------------------------------------------------------------
1 | /* Credit: Lacuna by Tanay-Kar */
2 |
3 | /* === BUTTONS ABOVE URL BAR =============================================================================================== */
4 |
5 | #zen-sidebar-top-buttons,
6 | #zen-sidebar-top-buttons-customization-target {
7 | & toolbarbutton:not(.titlebar-button) {
8 | padding: 0px !important;
9 | margin-top: -4px !important;
10 | scale: 1;
11 | }
12 | }
13 |
14 | #PanelUI-menu-button {
15 | list-style-image: url('data:image/svg+xml,<%3Fxml version="1.0" encoding="utf-8"%3F>') !important;
16 | margin: 0px !important;
17 |
18 | @media (prefers-color-scheme: light) {
19 | filter: invert(1);
20 | }
21 | }
22 |
23 |
24 | /* ---------- Windows close buttons ----------- */
25 | .titlebar-close {
26 | transition: background-color 0.3s ease-out, transform 0.2s ease-in-out;
27 | }
28 |
29 | .titlebar-close:hover {
30 | background-color: rgba(255, 0, 0, 0.8);
31 | transform: scale(1);
32 | }
33 | .titlebar-min,
34 | .titlebar-max {
35 | transition: background-color 0.3s ease-out, transform 0.2s ease-out;
36 | }
37 |
38 | .titlebar-min:hover,
39 | .titlebar-max:hover {
40 | background-color: rgba(200, 200, 200, 0.2);
41 | transform: scale(1);
42 | }
43 |
--------------------------------------------------------------------------------
/themes/1f1e7bbb-213b-473e-aebb-e9bffa3c9747/pineapple-fried/cohesion/modules/transparent-styles.css:
--------------------------------------------------------------------------------
1 | /* Base Browser view styling */
2 | :root:not([inDOMFullscreen="true"]):not([chromehidden~="location"]):not([chromehidden~="toolbar"]) {
3 | & #tabbrowser-tabbox #tabbrowser-tabpanels .browserSidebarContainer {
4 | & browser[transparent="true"] {
5 | background: rgba(255, 255, 255, 0) !important;
6 | }
7 | }
8 | }
9 |
10 | /* Base sidebar styling */
11 | #sidebar-box {
12 | background-color: rgba(0, 0, 0, 0) !important;
13 | border: none !important;
14 | box-shadow: none !important;
15 | }
16 |
17 | #sidebar-header {
18 | background-color: rgba(0, 0, 0, 0) !important;
19 | }
20 |
21 | /* Sidebar panels */
22 | .sidebar-panel {
23 | background: transparent !important;
24 | background-color: rgba(0, 0, 0, 0) !important;
25 | }
26 |
27 | /* Special case for checked sidebar */
28 | #browser #sidebar-box[checked="true"]:not([style*="order: 1"]) .sidebar-panel {
29 | background: transparent !important;
30 | background-color: rgba(0, 0, 0, 0) !important;
31 | }
32 |
33 | /* Search box styling */
34 | #sidebar-search-container > #search-box,
35 | #viewButton {
36 | padding: 4px 8px !important;
37 | appearance: none !important;
38 | background-color: transparent !important;
39 | border-radius: 10px !important;
40 | border: none !important;
41 | }
42 |
43 | #sidebar-search-container > #search-box:hover,
44 | #viewButton:hover {
45 | background-color: rgba(255, 255, 255, 0.1) !important;
46 | }
47 |
48 | #sidebar-search-container > #search-box:active,
49 | #viewButton:active {
50 | background-color: rgba(255, 255, 255, 0.1) !important;
51 | }
52 |
53 | /* Header styling */
54 | #sidebar-header {
55 | font-size: 1.333em;
56 | padding: 5px !important;
57 | border-bottom: 0 solid var(--sidebar-border-color) !important;
58 | }
59 |
60 | #sidebar-header #sidebar-close {
61 | display: none !important;
62 | }
63 |
64 | /* Bookmark toolbar */
65 | #PersonalToolbar:not([collapsed="true"]) {
66 | background: rgba(0, 0, 0, 0) !important;
67 | }
68 |
69 | /* Findbar */
70 | findbar {
71 | background: none !important;
72 | border-top: none !important;
73 | }
74 |
75 | @media (-moz-bool-pref: "zen.view.use-single-toolbar") {
76 | /* Bookmark toolbar */
77 | #PersonalToolbar:not([collapsed="true"]) {
78 | background: rgba(0, 0, 0, 0) !important;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/context-menu.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Context menu (right click) patches ==== */
31 |
32 | @media (-moz-platform: macos) {
33 | menuitem, menu {
34 | &::before {
35 | display: none !important;
36 | }
37 |
38 | &:is([type="checkbox"], [type="radio"]) {
39 | padding-left: 10px !important;
40 |
41 | .menu-iconic-left {
42 | display: none !important;
43 | }
44 |
45 | .menu-iconic-text {
46 | padding-left: 12px !important;
47 | }
48 |
49 | &::before {
50 | display: block !important;
51 | content: "" !important;
52 | padding: 0 !important;
53 | min-width: 16px !important;
54 | }
55 |
56 | &:is([checked="true"]) {
57 | &::before {
58 | content: url('chrome://browser/skin/zen-icons/checkmark.svg') !important;
59 |
60 | @media (prefers-color-scheme: dark) {
61 | filter: invert();
62 | }
63 | }
64 | }
65 | }
66 | }
67 |
68 | menupopup menupopup menuitem[checked="true"]::before {
69 | filter: none !important;
70 | }
71 | }
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/horizontal-tabs.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Horizontal tabs patches ==== */
31 |
32 | /*noinspection CssUnknownProperty*/
33 | @media not -moz-pref("zen.tabs.vertical") {
34 | #zen-essentials-container, #vertical-pinned-tabs-container, #tabbrowser-arrowscrollbox {
35 | min-height: 36px;
36 | }
37 |
38 | .tabbrowser-tab[selected] {
39 | flex: 2 1 150px !important;
40 | }
41 | #tabbrowser-arrowscrollbox .tabbrowser-tab[selected] {
42 | flex: 2 0 150px !important;
43 | transition: scale 0.1s ease-in-out, flex 0.2s ease !important;
44 | }
45 | #urlbar-container {
46 | margin-top: 5px;
47 | }
48 | #zen-essentials-container .tabbrowser-tab {
49 | --tab-min-height: 10px !important;
50 | }
51 |
52 | #vertical-pinned-tabs-container .tab-icon-image {
53 | margin-inline-end: calc(var(--toolbarbutton-inner-padding) / 4) !important;
54 | }
55 |
56 | #nav-bar {
57 | min-width: 300px !important;
58 | }
59 |
60 | #tabbrowser-tabs {
61 | display: flex !important;
62 | }
63 |
64 | #TabsToolbar-customization-target {
65 | toolbarbutton {
66 | width: auto !important;
67 | }
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/update-theme.yml:
--------------------------------------------------------------------------------
1 | name: Update theme
2 | description: Update a theme in the custom theme store!
3 | title: "Update theme: "
4 | body:
5 | - type: input
6 | id: id
7 | attributes:
8 | label: What is the theme's ID?
9 | validations:
10 | required: true
11 | - type: input
12 | id: description
13 | attributes:
14 | label: What is the theme's new description?
15 | description: >
16 | If left empty, we'll use the current description.
17 | - type: input
18 | id: version
19 | attributes:
20 | label: What is the theme's new version?
21 | validations:
22 | required: true
23 | - type: input
24 | id: supported
25 | attributes:
26 | label: What is the latest version of Zen Browser the theme supports?
27 | description: >
28 | e.g. 1.10.2b
29 | validations:
30 | required: true
31 | - type: textarea
32 | id: copy_file
33 | attributes:
34 | label: What files should be copied?
35 | description: >
36 | Separate each file using new lines. If left empty, we'll use the current files. Enter !erase to remove all files.
37 | validations:
38 | required: false
39 | - type: textarea
40 | id: copy_folder
41 | attributes:
42 | label: What folders should be copied?
43 | description: >
44 | Separate each file using new lines. If left empty, we'll use the current folders. Enter !erase to remove all folders.
45 | validations:
46 | required: false
47 | - type: textarea
48 | id: load_chrome
49 | attributes:
50 | label: What files should be loaded for the userChrome?
51 | description: >
52 | Separate each file using new lines. If left empty, we'll use the current files. Enter !erase to remove all files.
53 | validations:
54 | required: false
55 | - type: textarea
56 | id: load_content
57 | attributes:
58 | label: What files should be loaded for the userContent?
59 | description: >
60 | Separate each file using new lines. If left empty, we'll use the current files. Enter !erase to remove all files.
61 | validations:
62 | required: false
63 | - type: textarea
64 | id: domains
65 | attributes:
66 | label: What domains do your userContent file target?
67 | description: >
68 | e.g. google.com, youtube.com. Separate each domain using new lines. If left empty, we'll use the current domains. Enter !erase to remove all domains.
69 | validations:
70 | required: false
71 | - type: textarea
72 | id: thumbnail
73 | attributes:
74 | label: What image URL should we use for the thumbnail?
75 | placeholder: e.g. https://github.com/greeeen-dev/natsumi-browser/blob/main/images/main.png?raw=true
76 | description: >
77 | If left empty, we'll use the current thumbnail.
78 |
--------------------------------------------------------------------------------
/themes/1f1e7bbb-213b-473e-aebb-e9bffa3c9747/pineapple-fried/cohesion/modules/url-animations.css:
--------------------------------------------------------------------------------
1 | /* URL Bar Expand/Collapse Animation */
2 | #urlbar[focused] .urlbar-background {
3 | animation: urlbarExpand 0.3s ease-out;
4 | }
5 |
6 | #urlbar:not([focused]) .urlbar-background {
7 | animation: urlbarCollapse 0.2s ease-in;
8 | }
9 |
10 | @keyframes urlbarExpand {
11 | from {
12 | transform: scaleX(0.8) scaleY(0.7);
13 | opacity: 0.5;
14 | }
15 | to {
16 | transform: scaleX(1) scaleY(1);
17 | opacity: 1;
18 | }
19 | }
20 |
21 | @keyframes urlbarCollapse {
22 | from {
23 | transform: scaleX(1) scaleY(1);
24 | }
25 | to {
26 | transform: scaleX(0.95) scaleY(0.9);
27 | }
28 | }
29 |
30 | /* Results Panel Animation */
31 | #urlbar-results {
32 | animation: resultsFadeIn 0.25s ease-out;
33 | }
34 |
35 | @keyframes resultsFadeIn {
36 | from {
37 | opacity: 0;
38 | transform: translateY(-50px);
39 | }
40 | to {
41 | opacity: 1;
42 | transform: translateY(0);
43 | }
44 | }
45 |
46 | /* Optional: Smooth width transition */
47 | #urlbar {
48 | transition: width 0.2s ease-in-out;
49 | }/* Animate each result row individually */
50 | #urlbar-results {
51 | opacity: 1 !important; /* Ensure parent container stays visible */
52 | }
53 |
54 | .urlbarView-row {
55 | opacity: 0;
56 | animation: resultEntry 0.3s ease-out forwards;
57 | }
58 |
59 | /* Cascade animation with staggered delays */
60 | .urlbarView-row:nth-child(1) { animation-delay: 0.05s; }
61 | .urlbarView-row:nth-child(2) { animation-delay: 0.10s; }
62 | .urlbarView-row:nth-child(3) { animation-delay: 0.15s; }
63 | .urlbarView-row:nth-child(4) { animation-delay: 0.20s; }
64 | .urlbarView-row:nth-child(5) { animation-delay: 0.25s; }
65 | .urlbarView-row:nth-child(6) { animation-delay: 0.30s; }
66 | .urlbarView-row:nth-child(7) { animation-delay: 0.35s; }
67 | .urlbarView-row:nth-child(8) { animation-delay: 0.40s; }
68 | .urlbarView-row:nth-child(9) { animation-delay: 0.45s; }
69 | .urlbarView-row:nth-child(10) { animation-delay: 0.50s; }
70 |
71 | @keyframes resultEntry {
72 | from {
73 | opacity: 0;
74 | transform: translateY(-8px);
75 | }
76 | to {
77 | opacity: 1;
78 | transform: translateY(0);
79 | }
80 | }
81 |
82 | /* Adjust original results panel animation */
83 | #urlbar-results {
84 | animation: resultsFadeIn 0.2s ease-out;
85 | }
86 |
87 | @keyframes resultsFadeIn {
88 | from {
89 | opacity: 0;
90 | }
91 | to {
92 | opacity: 1;
93 | }
94 | }
95 |
96 | /* Optional: Animate favicons in results */
97 | .urlbarView-row[type] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon {
98 | transition: transform 0.2s ease-out;
99 | }
100 |
101 | .urlbarView-row[type]:hover > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon {
102 | transform: scale(1.1);
103 | }
--------------------------------------------------------------------------------
/themes/1f1e7bbb-213b-473e-aebb-e9bffa3c9747/pineapple-fried/cohesion/modules/window-controls.css:
--------------------------------------------------------------------------------
1 | @media (-moz-bool-pref: "pf.use.window-buttons") {
2 | @media not (-moz-bool-pref: "zen.view.use-single-toolbar") {
3 | /* Window controls container */
4 | .titlebar-buttonbox-container {
5 | display: flex !important;
6 | transition: all 0.2s ease;
7 | }
8 |
9 | /* Base styles for window control buttons */
10 | .titlebar-button {
11 | padding: 0 !important;
12 | margin: 0 !important;
13 | margin-bottom: 1px !important;
14 | transition: all 0.2s ease;
15 | min-width: 0 !important;
16 | width: 3px !important; /* Collapsed to 3px */
17 | overflow: hidden;
18 | opacity: 0; /* Completely transparent when collapsed */
19 | }
20 |
21 | /* Expanded state when hovering container */
22 | .titlebar-buttonbox-container:hover .titlebar-button {
23 | width: 40px !important; /* Expanded width */
24 | opacity: 1; /* Fully visible when expanded */
25 | }
26 |
27 | /* Hover states */
28 | .titlebar-button:hover {
29 | background-color: rgba(255, 255, 255, 0.1) !important;
30 | }
31 |
32 | .titlebar-close:hover {
33 | background-color: rgba(255, 0, 0, 0.2) !important;
34 | border-radius: 0 6px 0 0 !important;
35 | }
36 | }
37 |
38 | /* Single TOolbar Mode */
39 | @media (-moz-bool-pref: "zen.view.use-single-toolbar") {
40 | .titlebar-buttonbox-container {
41 | margin-right: 0px !important;
42 | }
43 |
44 | .titlebar-close:hover {
45 | background-color: rgba(255, 0, 0, 0.2) !important;
46 | border-radius: 0 6px 6px 0 !important;
47 | }
48 | }
49 |
50 | /* Tabs on Right mode */
51 |
52 | @media (-moz-bool-pref: "zen.tabs.vertical.right-side") {
53 | /* Window controls container */
54 | .titlebar-buttonbox-container {
55 | display: flex !important;
56 | transition: all 0.2s ease;
57 | margin-bottom: 1px !important;
58 | }
59 |
60 | /* Base styles for window control buttons */
61 | .titlebar-button {
62 | padding-bottom: 11px !important;
63 | margin-top: 0px !important;
64 | margin-bottom: 0px !important;
65 | transition: all 0.2s ease;
66 | min-width: 0 !important;
67 | width: 3px !important; /* Collapsed to 3px */
68 | overflow: hidden;
69 | opacity: 0; /* Completely transparent when collapsed */
70 | }
71 |
72 | /* Expanded state when hovering container */
73 | .titlebar-buttonbox-container:hover .titlebar-button {
74 | width: 40px !important; /* Expanded width */
75 | opacity: 1; /* Fully visible when expanded */
76 | }
77 |
78 | /* Hover states */
79 | .titlebar-button:hover {
80 | background-color: rgba(255, 255, 255, 0.1) !important;
81 | }
82 |
83 | .titlebar-close:hover {
84 | background-color: rgba(255, 0, 0, 0.2) !important;
85 | border-radius: 0 6px 0 0 !important;
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/experiments.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Experiments ==== */
31 |
32 | /*
33 | WARNING: The following features are NOT meant for production use.
34 | By using experimental features, you acknowledge that they may break Natsumi or Zen Browser.
35 | */
36 |
37 | /* Global font */
38 | @media -moz-pref("natsumi.experiments.custom-font") {
39 | #zen-main-app-wrapper, .tab-label, menuitem, panelmultiview, .PanelUI-zen-profiles-item-name {
40 | font-family: var(--natsumi-custom-font), system-ui !important;
41 | }
42 | }
43 |
44 | /* WIP thing for tab switching */
45 |
46 | /*.ctrlTab-preview:hover {
47 | border: none !important;
48 | }
49 |
50 | .ctrlTab-preview-inner {
51 | display: flex !important;
52 | flex-direction: row !important;
53 | flex-wrap: wrap !important;
54 |
55 | .ctrlTab-canvas {
56 | box-shadow: none !important;
57 | border-radius: 8px !important;
58 | overflow: hidden !important;
59 | }
60 |
61 | .ctrlTab-favicon-container {
62 | width: fit-content !important;
63 | height: fit-content !important;
64 | }
65 |
66 | .ctrlTab-favicon {
67 | background: transparent !important;
68 | box-shadow: none !important;
69 | margin: 0 !important;
70 | padding: 0 !important;
71 | width: 20px !important;
72 | height: 20px !important;
73 | }
74 |
75 | .ctrlTab-label {
76 | flex: 1 !important;
77 | flex-shrink: 0 !important;
78 | justify-content: left !important;
79 |
80 | &::before {
81 | text-shadow: none !important;
82 | font-size: 14px !important;
83 | margin: auto 0 !important;
84 | }
85 | }
86 | }*/
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Silkthemes
2 | Thank you for contributing to the project!
3 |
4 | ## Theme submissions
5 | Your submission must meet the following requirements to be accepted.
6 |
7 | ### Functionality
8 | Your theme should include some form of functionality, such as adding new features or a color scheme. This
9 | does not include satirical functionality, such as hiding every element or adding an intentionally low
10 | contrast color scheme.
11 |
12 | Your theme may include satirical functionality (such as setting the font to Comic Sans as a joke) as long as
13 | it does not adversely affect the accessibility of the browser.
14 |
15 | ### Licensing & Copyright
16 | Your submission should not have any license violations or copyright issues whatsoever (if any exist, please
17 | resolve them before submitting). For example, if your submission does not follow the license terms of the
18 | works used in your theme, or if your theme's license terms are not compatible with ours (AGPLv3), we cannot
19 | accept your theme.
20 |
21 | Your theme may include works from other projects, as long as the project follows the licenses' terms and is
22 | not solely a compilation of others' works (meaning you must add your own original code as well).
23 |
24 | Your submission must also be public-source (source code is publicly available **WITHOUT** an open source
25 | license) or open-source (source code is publicly available **WITH** an open source license)
26 |
27 | ### Compatibility
28 | Your theme should be fully compatible with the latest version of Zen Browser as of submitting. If your theme
29 | only works on older versions, we cannot accept your theme.
30 |
31 | ## Reporting broken themes
32 | If a theme is broken, you can report it using the "Report borked theme" issue template to let us know. We
33 | will review your report then ask the theme creator to submit a patch as soon as possible. If this cannot be
34 | done within a reasonable timeframe, we may remove the theme from the store.
35 |
36 | If possible, please consider reporting the issue directly to the theme developer first.
37 |
38 | > [!CAUTION]
39 | > **Please ensure any theme breakages are not caused by theme conflicts.** If you are unsure, try testing
40 | > the theme on a clean profile without any other custom themes/CSS applied.
41 |
42 | ## Disclaimers
43 | ### AGPLv3 license
44 | By contributing to the Silkthemes theme store repository, you agree to license your contributions under the
45 | terms of the AGPLv3 license. Please read LICENSE for more info.
46 |
47 | ### Contribution removals
48 | We at Silkbrush reserve all rights to remove any contribution from the repository for any reason with or
49 | without notice. Regardless, theme store maintainers are encouraged to provide clear reason for their removal
50 | decisions where possible.
51 |
52 | If you believe your contribution was removed in mistake, please let us know so we can reverse the change.
53 |
54 | > [!IMPORTANT]
55 | > Although theme store maintainers are not necessarily required to disclose reasons for removing themes,
56 | > they may not remove any themes for subjective or invalid reasons (such as the theme apparently looking
57 | > "ugly" to the maintainers) unless there is community consensus on removing it.
58 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/new-theme.yml:
--------------------------------------------------------------------------------
1 | name: Submit theme
2 | description: Submit a theme to the custom theme store!
3 | title: "Add theme: "
4 | body:
5 | - type: input
6 | id: name
7 | attributes:
8 | label: What is the theme's name?
9 | validations:
10 | required: true
11 | - type: input
12 | id: description
13 | attributes:
14 | label: What is the theme's description?
15 | validations:
16 | required: true
17 | - type: input
18 | id: version
19 | attributes:
20 | label: What is the theme's current version?
21 | description: >
22 | If left empty, we'll use 1.0.0 as the default.
23 | - type: input
24 | id: supported
25 | attributes:
26 | label: What is the latest version of Zen Browser the theme supports?
27 | description: >
28 | e.g. 1.10.2b
29 | validations:
30 | required: true
31 | - type: input
32 | id: repo
33 | attributes:
34 | label: What is the repository's URL?
35 | description: >
36 | We'll use this to copy your files to the theme store.
37 | validations:
38 | required: true
39 | - type: textarea
40 | id: copy_file
41 | attributes:
42 | label: What files should be copied?
43 | description: >
44 | Separate each file using new lines. Leave empty if not applicable.
45 | validations:
46 | required: false
47 | - type: textarea
48 | id: copy_folder
49 | attributes:
50 | label: What folders should be copied?
51 | description: >
52 | Separate each folder using new lines. Leave empty if not applicable.
53 | validations:
54 | required: false
55 | - type: textarea
56 | id: load_chrome
57 | attributes:
58 | label: What files should be loaded for the userChrome?
59 | description: >
60 | Separate each file using new lines. Leave empty if not applicable.
61 | validations:
62 | required: false
63 | - type: textarea
64 | id: load_content
65 | attributes:
66 | label: What files should be loaded for the userContent?
67 | description: >
68 | Separate each file using new lines. Leave empty if not applicable.
69 | validations:
70 | required: false
71 | - type: textarea
72 | id: readme
73 | attributes:
74 | label: What should we put in the README?
75 | description: >
76 | Supports markdown. If left empty, we won't set a README file for your theme.
77 | - type: textarea
78 | id: domains
79 | attributes:
80 | label: What domains do your userContent file target?
81 | description: >
82 | e.g. google.com, youtube.com. Separate each domain using new lines. Leave empty if not applicable.
83 | validations:
84 | required: false
85 | - type: input
86 | id: author
87 | attributes:
88 | label: What should we call you on the theme store?
89 | description: >
90 | If left empty, we'll use your GitHub username.
91 | - type: textarea
92 | id: thumbnail
93 | attributes:
94 | label: What image URL should we use for the thumbnail?
95 | placeholder: e.g. https://github.com/greeeen-dev/natsumi-browser/blob/main/images/main.png?raw=true
96 | description: >
97 | This isn't required but it is recommended.
98 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/natsumi.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Load config and Natsumi Browser ==== */
31 |
32 | @import "../natsumi-config.css";
33 | @import "modules/preload.css";
34 | @import "modules/patches.css";
35 | @import "modules/natsumi-base.css";
36 | @import "modules/natsumi-tabs.css";
37 | @import "modules/horizontal-tabs.css";
38 | @import "modules/natsumi-urlbar.css";
39 | @import "modules/natsumi-loading.css";
40 | @import "modules/natsumi-findbar.css";
41 | @import "modules/natsumi-library.css";
42 | @import "modules/natsumi-miniplayer.css";
43 | @import "modules/natsumi-pip.css";
44 | @import "modules/natsumi-gamemode.css";
45 | @import "modules/sidebars.css";
46 | @import "modules/navbar.css";
47 | @import "modules/context-menu.css";
48 | @import "modules/experiments.css";
49 | @import "modules/ui-tweaks.css";
50 | @import "modules/postload.css";
51 |
52 | /* ==== Natsumi Browser not installed warning ==== */
53 |
54 | * {
55 | --natsumi-fail-display: flex;
56 | }
57 |
58 | @keyframes natsumi-not-installed-fadeout {
59 | 0% {opacity: 1;}
60 | 90% {opacity: 1;}
61 | 99% {opacity: 0; height: 20%;}
62 | 100% {opacity: 0; height: 0; display: none;}
63 | }
64 |
65 | #tabbrowser-arrowscrollbox::after {
66 | display: var(--natsumi-fail-display);
67 | box-sizing: border-box;
68 | contain: size;
69 | padding: 10px;
70 | font-size: 12px;
71 | color: black;
72 | content: "WARNING: Natsumi Browser loader is installed but it could not load Natsumi Browser.\
73 | Please add the natsumi-config.css file and natsumi folder to your profile's chrome folder, then restart Zen Browser!\
74 | ";
75 | width: 100%;
76 | height: 20%;
77 | border-radius: var(--border-radius-medium);
78 | border: 1px solid;
79 | background-color: #ffdd00;
80 | text-align: center;
81 | animation: natsumi-not-installed-fadeout ease 10s;
82 | animation-fill-mode: forwards;
83 | }
84 |
85 | /* Do NOT enter any additional CSS below. */
86 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Silkthemes theme store
5 |
6 |
7 | A custom theme store for Zen Browser with userContent support
8 |
9 |
10 | ## Why use Silkthemes?
11 | Zen Mods has various issues, such as:
12 | - No support for userContent styles
13 | - More manual theme update process
14 | - Poor vetting process ([many submission PRs are left open for months on
15 | end](https://github.com/zen-browser/theme-store/pulls?q=is%3Apr+is%3Aopen+sort%3Acreated-asc))
16 | - Harder to submit larger projects (like [Natsumi](https://github.com/greeeen-dev/natsumi-browser) and
17 | [Nebula](https://github.com/JustAdumbPrsn/Nebula-A-Minimal-Theme-for-Zen-Browser))
18 | - [Theme removals for completely subjective
19 | reasons](https://www.reddit.com/r/zen_browser/comments/1k3omn0/comment/mo5jjp9)
20 | - etc.
21 |
22 | Silkthemes is an alternative to Zen Mods which aims to solve many of these issues. It's not perfect, but we
23 | still aim to make it the best place possible to install and share themes for Zen Browser.
24 |
25 | ## Submitting a theme
26 | All theme submissions must follow our [submission
27 | guidelines](https://github.com/Silkbrush/theme-store/blob/main/CONTRIBUTING.md).
28 |
29 | ### Copying files and folders
30 | When you submit a theme, you will need to specify which files and folders to copy from the repository. All
31 | file and folder paths should be relative to the root of your repository.
32 |
33 | You can submit multiple files and folders, but you must submit at least one file or folder.
34 |
35 | ### Specifying load points
36 | Silkthemes uses the [uCL standards](https://github.com/greeeen-dev/userchrome-loader/) for loading and
37 | managing installed themes. To load a theme through uCL, you need to specify a "load point" file which the
38 | loader should import to load your theme.
39 |
40 | > [!IMPORTANT]
41 | > If you've copied a file or a folder that's inside another folder, you cannot specify the same relative
42 | > file/folder path as the load point.
43 | >
44 | > For example, if you've added the `themes/natsumi` folder to your repository, which contains a
45 | > `natsumi.css` for loading the theme, then the load point should be `natsumi/natsumi.css` instead of
46 | > `themes/natsumi/natsumi.css`. This is because the theme store workflow doesn't copy any parent folders
47 | > when copying files and folers that you've specified.
48 |
49 | ### Target domains
50 | Target domains are used for search purposes only, so users can more easily find a theme that works on a
51 | website of their choice.
52 |
53 | > [!WARNING]
54 | > Any internal pages, such as `about:config`, are NOT domains.
55 | >
56 | > You may only use domains and subdomains in this field, such as `github.com` and `next.unifierhq.org`.
57 | > Please do not use full URLs like `https://github.com` or `zen-browser.app/mods`.
58 |
59 | ## Updating themes
60 | Silkthemes has a more automated theme update workflow. To request an update, open the "Update theme" issue,
61 | and the repository will automatically pull files from your repository and update the themes.json file.
62 |
63 | ### What happens if I update copied files/folders, load points, etc.?
64 | If you decide to update these fields, the current ones will be overwritten by the ones you've specified in
65 | your issue body. The theme store will not attempt to merge current and new values.
66 |
--------------------------------------------------------------------------------
/themes/542f2a0e-4216-4037-9eef-e8143c21ab44/Nebula/Nebula-config.css:
--------------------------------------------------------------------------------
1 | /* This is the config guide for Nebula theme
2 | Here you can tweak the various settings like animations, features, etc. to your own preference
3 | by changing the variables or adding preferences in about:config
4 | without searching through the code directly */
5 |
6 |
7 | /* Tab Animations
8 | 1. Tab switch animations
9 | Go to about:config and add a "number" "nebula-tab-switch-animation"
10 | Set number to 0 (for no animation)
11 | Set number to 2 (for style 2 which is more bouncy)
12 | Set number to 3 (for style 3 which is more bounce than default but very light)
13 | Set number to 4 (for style 4 which has no blur but instead smooth crossfade)
14 | By default the style is set to 1 but no need to add its config
15 |
16 | 2. Tab loading animations
17 | Go to about:config and add a "number" "nebula-tab-loading-animation"
18 | Set number to 0 (for no animation)
19 | Set number to 2 (for style 2 which is more prominant)
20 | Set number to 3 (for style 3 which is lighter)
21 | Set number to 4 (for style 4 which has no blur but grayscale when loading)
22 | Set number to 5 (for style 5 which has blur + grayscale)
23 | By default the style is set to 1 but no need to add its config
24 | */
25 |
26 | /* Glow Animations
27 | 1. Nebula hover glow animations
28 | Go to about:config and add a "number" "nebula-glow-gradient"
29 | Set number to 0 (for no animation)
30 | Set number to 2 (for monochrome gradient)
31 | Set number to 3 (for RGB gradient)
32 | By default the style is set to 1 but no need to add its config
33 | Note: these gradient presets apply to: tabs, Essentials, urlbar, miniplayer, extensions, and links when hovering over
34 | */
35 |
36 | /* URLbar Animations
37 | 1. URLbar opening animations
38 | Go to about:config and add a "number" "nebula-urlbar-animation"
39 | Set number to 0 (for no animation)
40 | Set number to 2 (for style 2 which is more heavy)
41 | Set number to 3 (for style 3 which has no blur but instead grayscale for background)
42 | By default the style is set to 1 but no need to add its config
43 |
44 |
45 | /* Customize the look! */
46 | :root {
47 | /* Nebula border radius (Affects tabs, Essentials, urlbar, miniplayer, extensions, workspace button)*/
48 | --nebula-border-radius: 13px; /* This will change roundness of everything in Nebula (DEFAULT: 12px) */
49 | --nebula-website-tint: light-dark(rgba(255,255,255,0),rgba(0,0,0,0)); /* Edit the color values to change the tint on transparent websites */
50 | --nebula-ui-tint: light-dark(rgba(255,255,255,0.12),rgba(0,0,0,0.12)); /* Edit the color values to change the tint of sidebar and etc. */
51 | }
52 |
53 | /* DO NOT ADD OTHER CSS BELOW */
54 | /* More styles and options will come soon here! */
--------------------------------------------------------------------------------
/themes/542f2a0e-4216-4037-9eef-e8143c21ab44/Nebula/modules/General-UI.css:
--------------------------------------------------------------------------------
1 | /* === GENERAL BROWSER UI ================================================================================================== */
2 | #browser {
3 | background: var(--nebula-ui-tint) !important; /* Increased opacity */
4 | }
5 | browser[transparent='true'] {
6 | background: var(--nebula-website-tint) !important;
7 | }
8 |
9 | :root {
10 | --attention-dot-color: transparent !important;
11 | }
12 |
13 | #identity-icon-label[value="Extension (Bonjourr · Minimalist Startpage)"] {
14 | display: none !important;
15 | }
16 |
17 | /* ---- Fix for linux transparency (Credit: Zylvo) ---- */
18 | :root {
19 | --zen-themed-toolbar-bg-transparent: transparent !important;
20 | }
21 |
22 | /* Removes the background of the icon extension box in the url bar */
23 | #identity-icon-box {
24 | background: none !important;
25 | }
26 | /*---- Removes the background of the icon extension box in the url bar---- */
27 |
28 | #identity-icon-box {
29 | background: none !important;
30 | }
31 | /* ---- Fix for linux transparency (Credit: Zylvo) ---- */
32 | :root {
33 | --zen-themed-toolbar-bg-transparent: transparent !important;
34 | }
35 |
36 | /* -------- floating statusbar (credit to the mod) --------- */
37 | #statuspanel {
38 | margin: 10px !important;
39 | }
40 |
41 | #statuspanel-label {
42 | border-radius: 11px !important;
43 | padding: 3px 10px !important;
44 | border: 1px solid var(--zen-colors-border) !important;
45 | background: light-dark(rgba(255, 255, 255, 1),rgba(0, 0, 0, 0.9)) !important;
46 | }
47 |
48 | /* -------------------- Split view outline -------------------------- */
49 | #tabbrowser-tabpanels[zen-split-view="true"] .browserSidebarContainer {
50 | outline: none !important; /* Remove default outline */
51 | box-shadow: 0 0 0 2px light-dark(rgba(0, 0, 0, 0), rgba(255, 255, 255, 0)),
52 | 0 4px 10px light-dark(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)) !important;
53 | transition: box-shadow 0.35s ease !important;
54 | }
55 |
56 | #tabbrowser-tabpanels[zen-split-view="true"] .browserSidebarContainer.deck-selected {
57 | box-shadow: 0 0 0 2px light-dark(rgba(0, 0, 0, 0.5), rgba(255, 255, 255, 0.5)),
58 | 0 4px 10px light-dark(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)) !important;
59 | }
60 |
61 | /* ------------------ Split view tabs container --------------------- */
62 | tab-group[split-view-group="true"] {
63 | background-color: transparent !important;
64 | box-shadow: 0 0px 8px rgba(0, 0, 0, 0) !important;
65 | border-radius: 12px !important;
66 | position: relative !important;
67 | transition: background-color 0.3s ease,
68 | box-shadow 0.3s ease,
69 | transform 0.2s cubic-bezier(0.2, 0.8, 0.4, 1) !important; /* Resistive transition */
70 | }
71 |
72 | tab-group[split-view-group="true"]:hover {
73 | background-color: light-dark(rgba(255,255,255,0.45), rgba(0,0,0,0.45)) !important;
74 | box-shadow: 0 0px 3px rgba(0, 0, 0, 0.55) !important;
75 | }
76 |
77 | /* If any tab inside the group is selected, apply dark background */
78 | tab-group[split-view-group="true"]:has(.tabbrowser-tab[selected="true"], .tabbrowser-tab[visuallyselected="true"]) {
79 | background-color: light-dark(rgba(255, 255, 255, 0.55), rgba(0, 0, 0, 0.35)) !important;
80 | box-shadow: 0 0px 3px rgba(0, 0, 0, 0.55) !important;
81 | }
82 |
83 | /* Right mouse button press effect with resistive animation */
84 | tab-group[split-view-group="true"]:active {
85 | transform: scale(0.95) !important;
86 | transition: transform 0.1s ease-out !important;
87 | }
88 |
89 | /* Smooth return effect */
90 | tab-group[split-view-group="true"]:not(:active) {
91 | transition: transform 0.2s cubic-bezier(0.2, 0.8, 0.4, 1) !important;
92 | }
93 |
94 |
--------------------------------------------------------------------------------
/themes/63556ee3-b89a-40d9-8f72-04f7b6c1aacc/rose-pine/userContent.css:
--------------------------------------------------------------------------------
1 | /* Original code by napuzu. Modifications by undefinedcode0 */
2 |
3 | :root {
4 | --in-content-table-background: #1f1d2e !important;
5 | }
6 |
7 | @-moz-document url("about:privatebrowsing") {
8 | @media (prefers-color-scheme: dark) {
9 | :root {
10 | --na-color-text: #e0def4 !important;
11 | --na-color-bg: #191724 !important;
12 | }
13 | }
14 | }
15 |
16 | @-moz-document url("about:newtab"), url("about:home") {
17 | @media (prefers-color-scheme: dark) {
18 | :root {
19 | --na-color-text: #e0def4 !important;
20 | --na-color-bg: #191724 !important;
21 | }
22 | }
23 | }
24 |
25 | @-moz-document url("about:newtab"), url("about:home"), url("about:privatebrowsing") {
26 | #root,
27 | .container {
28 | display: none;
29 | }
30 |
31 | body:after {
32 | font-weight: 500;
33 | position: absolute;
34 | margin: auto;
35 | color: var(--na-color-text);
36 | font-size: 200%;
37 | background-color: var(--na-color-bg);
38 | /* eee9d899 d1cfc099 */
39 | width: 100%;
40 | height: 100%;
41 | align-content: center;
42 | text-align: center;
43 | content: "░░▒▒▓▓";
44 | /* '░░▒▒▓▓' */
45 | visibility: visible;
46 | background-image: "";
47 | /* url(loading.gif) */
48 | background-size: 3em;
49 | background-repeat: no-repeat;
50 | background-position: center;
51 | }
52 | }
53 |
54 | /* Common variables affecting all pages */
55 | @-moz-document url-prefix("about:") {
56 | :root {
57 | --in-content-page-color: #e0def4 !important;
58 | --color-accent-primary: #c4a7e7 !important;
59 | --color-accent-primary-hover: #e0def4 !important;
60 | --color-accent-primary-active: rgb(189, 180, 254) !important;
61 | background-color: #191724 !important;
62 | --in-content-page-background: #191724 !important;
63 | }
64 | }
65 |
66 | /* Variables and styles specific to about:preferences */
67 | @-moz-document url-prefix("about:preferences") {
68 | :root {
69 | --zen-colors-tertiary: #1f1d2e !important;
70 | --in-content-text-color: #e0def4 !important;
71 | --link-color: #c4a7e7 !important;
72 | --link-color-hover: rgb(206, 212, 254) !important;
73 | --zen-colors-primary: #1f1d2e !important;
74 | --in-content-box-background: #1f1d2e !important;
75 | --zen-primary-color: #c4a7e7 !important;
76 | }
77 |
78 | groupbox,
79 | moz-card {
80 | background: #191724 !important;
81 | }
82 |
83 | button,
84 | groupbox menulist {
85 | background: #1f1d2e !important;
86 | color: #e0def4 !important;
87 | }
88 |
89 | .main-content {
90 | background-color: #191724 !important;
91 | }
92 |
93 | /* Variables and styles specific to about:addons */
94 | @-moz-document url-prefix("about:addons") {
95 | :root {
96 | --zen-dark-color-mix-base: #1f1d2e !important;
97 | --background-color-box: #191724 !important;
98 | }
99 | }
100 |
101 | /* Variables and styles specific to about:protections */
102 | @-moz-document url-prefix("about:protections") {
103 | :root {
104 | --zen-primary-color: #191724 !important;
105 | --social-color: #c4a7e7 !important;
106 | --coockie-color: #9ccfd8 !important;
107 | --fingerprinter-color: #f6c177 !important;
108 | --cryptominer-color: #b4befe !important;
109 | --tracker-color: #a6e3a1 !important;
110 | --in-content-primary-button-background-hover: #908caa !important;
111 | --in-content-primary-button-text-color-hover: #e0def4 !important;
112 | --in-content-primary-button-background: #6e6a86 !important;
113 | --in-content-primary-button-text-color: #e0def4 !important;
114 | }
115 |
116 | .card {
117 | background-color: #313244 !important;
118 | }
119 | }
120 | }
121 |
122 | * {
123 | /* font-family: 'JetBrainsMono Nerd Font' !important;*/
124 | }
125 |
--------------------------------------------------------------------------------
/themes/660c3485-4292-4021-a204-33dccbc89b89/zero/userContent.css:
--------------------------------------------------------------------------------
1 | /* Original code by napuzu. Modifications by undefinedcode0 */
2 |
3 | :root {
4 | --in-content-table-background: #0a0a0a !important;
5 | }
6 |
7 | @-moz-document url("about:privatebrowsing") {
8 | @media (prefers-color-scheme: dark) {
9 | :root {
10 | --na-color-text: #ffffff !important;
11 | --na-color-bg: #000000 !important;
12 | }
13 | }
14 | }
15 |
16 | @-moz-document url("about:newtab"), url("about:home") {
17 | @media (prefers-color-scheme: dark) {
18 | :root {
19 | --na-color-text: #ffffff !important;
20 | --na-color-bg: #000000 !important;
21 | }
22 | }
23 | }
24 |
25 | @-moz-document url("about:newtab"), url("about:home"), url("about:privatebrowsing") {
26 | #root,
27 | .container {
28 | display: none;
29 | }
30 |
31 | body:after {
32 | font-weight: 500;
33 | position: absolute;
34 | margin: auto;
35 | color: var(--na-color-text);
36 | font-size: 200%;
37 | background-color: var(--na-color-bg);
38 | /* eee9d899 d1cfc099 */
39 | width: 100%;
40 | height: 100%;
41 | align-content: center;
42 | text-align: center;
43 | content: "░░▒▒▓▓";
44 | /* '░░▒▒▓▓' */
45 | visibility: visible;
46 | background-image: "";
47 | /* url(loading.gif) */
48 | background-size: 3em;
49 | background-repeat: no-repeat;
50 | background-position: center;
51 | }
52 | }
53 |
54 | /* Common variables affecting all pages */
55 | @-moz-document url-prefix("about:") {
56 | :root {
57 | --in-content-page-color: #ffffff !important;
58 | --color-accent-primary: #000000 !important;
59 | --color-accent-primary-hover: rgb(206, 212, 254) !important;
60 | --color-accent-primary-active: rgb(189, 180, 254) !important;
61 | background-color: #000000 !important;
62 | --in-content-page-background: #000000 !important;
63 | }
64 | }
65 |
66 | /* Variables and styles specific to about:preferences */
67 | @-moz-document url-prefix("about:preferences") {
68 | :root {
69 | --zen-colors-tertiary: #0a0a0a !important;
70 | --in-content-text-color: #ffffff !important;
71 | --link-color: #ffffff !important;
72 | --link-color-hover: rgb(206, 212, 254) !important;
73 | --zen-colors-primary: #ffffff !important;
74 | --in-content-box-background: #ffffff !important;
75 | --zen-primary-color: #b4befe !important;
76 | }
77 |
78 | groupbox,
79 | moz-card {
80 | background: #141415 !important;
81 | }
82 |
83 | button,
84 | groupbox menulist {
85 | background: #e1e1e1 !important;
86 | color: #18181b !important;
87 | border-radius: 0.5rem !important;
88 | }
89 |
90 | .main-content {
91 | background-color: #0a0a0a !important;
92 | }
93 |
94 | /* Variables and styles specific to about:addons */
95 | @-moz-document url-prefix("about:addons") {
96 | :root {
97 | --zen-dark-color-mix-base: #1a1a1a !important;
98 | --background-color-box: #000000 !important;
99 | }
100 | }
101 |
102 | /* Variables and styles specific to about:protections */
103 | @-moz-document url-prefix("about:protections") {
104 | :root {
105 | --zen-primary-color: #000000 !important;
106 | --social-color: #cba6f7 !important;
107 | --coockie-color: #89dceb !important;
108 | --fingerprinter-color: #f9e2af !important;
109 | --cryptominer-color: #b4befe !important;
110 | --tracker-color: #a6e3a1 !important;
111 | --in-content-primary-button-background-hover: rgb(
112 | 81,
113 | 83,
114 | 105
115 | ) !important;
116 | --in-content-primary-button-text-color-hover: #ffffff !important;
117 | --in-content-primary-button-background: #45475a !important;
118 | --in-content-primary-button-text-color: #ffffff !important;
119 | }
120 |
121 | .card {
122 | background-color: #ffffff !important;
123 | }
124 | }
125 | }
126 |
127 | * {
128 | /* font-family: 'JetBrainsMono Nerd Font' !important;*/
129 | }
130 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/natsumi-miniplayer.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== "Miniplayer" ==== */
31 |
32 | @keyframes fadein-animation {
33 | 0% {
34 | opacity: 0;
35 | }
36 |
37 | 100% {
38 | opacity: 0.2;
39 | }
40 | }
41 |
42 | #zen-media-current-time, #zen-media-duration {
43 | font-variant-numeric: tabular-nums;
44 | }
45 |
46 | #zen-media-controls-toolbar {
47 | /*noinspection CssInvalidFunction*/
48 | & > toolbaritem {
49 | background-color: var(--natsumi-mat-hz-background) !important;
50 | backdrop-filter: saturate(var(--natsumi-mat-hz-saturation)) contrast(var(--natsumi-mat-hz-contrast)) !important;
51 |
52 | @media -moz-pref("natsumi.miniplayer.blur-fix") {
53 | &::before {
54 | content: "";
55 | position: absolute;
56 | width: 100%;
57 | height: 100%;
58 | top: 0;
59 | left: 0;
60 | backdrop-filter: blur(15px);
61 | pointer-events: none;
62 | }
63 | }
64 |
65 | /*noinspection CssInvalidFunction*/
66 | &::after {
67 | content: "";
68 | position: absolute;
69 | width: 150%;
70 | height: 150%;
71 | background-color: light-dark(var(--zen-colors-primary), var(--zen-primary-color));
72 | mask-image: radial-gradient(closest-side, black, transparent);
73 | top: -75%;
74 | left: -75%;
75 | opacity: 0;
76 | transition: background-color 0.2s ease;
77 | pointer-events: none;
78 | }
79 |
80 | @media -moz-pref("natsumi.miniplayer.disable-accent") {
81 | &::after {
82 | display: none !important;
83 | }
84 | }
85 |
86 | toolbarbutton {
87 | z-index: 0 !important;
88 | }
89 | }
90 |
91 | &:hover {
92 | & > toolbaritem {
93 | overflow: hidden;
94 |
95 | &::after {
96 | animation: fadein-animation 0.5s ease;
97 | animation-fill-mode: forwards;
98 | }
99 | }
100 | }
101 |
102 | &:not(:hover) {
103 | #zen-media-service-hbox {
104 | padding-top: 0 !important;
105 | }
106 |
107 | & > toolbaritem {
108 | &::before, &::after {
109 | display: none;
110 | }
111 | }
112 | }
113 |
114 | #zen-media-service-hbox {
115 | padding-top: 5px !important;
116 | transition: padding 0.15s ease-in-out !important;
117 | }
118 |
119 | #zen-media-title {
120 | font-size: 16px !important;
121 | }
122 |
123 | #zen-media-artist {
124 | font-size: 10px !important;
125 | }
126 |
127 | #zen-media-info-vbox {
128 | &::before {
129 | display: none !important;
130 | }
131 | }
132 |
133 | #zen-media-progress-bar {
134 | &::-moz-range-thumb {
135 | scale: 1;
136 | transition: scale 0.2s ease;
137 | }
138 |
139 | &::-moz-range-track, &::-moz-range-progress {
140 | transition: height 0.2s ease;
141 | }
142 |
143 | &:hover {
144 | &::-moz-range-thumb {
145 | scale: 1.4;
146 | }
147 |
148 | &::-moz-range-track, &::-moz-range-progress {
149 | height: calc(var(--progress-height) + 2px) !important;
150 | }
151 | }
152 | }
153 | }
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/web-panel.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Zen Sidebar (web panels) tweaks ==== */
31 |
32 | @media (-moz-bool-pref: "natsumi.sidebar.zen-sidebar-blur") {
33 | /*noinspection CssInvalidFunction*/
34 | #zen-sidebar-web-panel[pinned] {
35 | /* Zen Sidebar transparency. May cause lag when URLbar is also opened. */
36 |
37 | background: color-mix(in srgb, var(--natsumi-colors-tertiary) 80%, transparent) !important;
38 | backdrop-filter: blur(var(--natsumi-mat-ga-blur-radius));
39 | transition: backdrop-filter 0.2s linear;
40 |
41 | &:is([hidden]) {
42 | backdrop-filter: none !important;
43 | }
44 |
45 | @media (-moz-bool-pref: "natsumi.sidebar.zen-sidebar-glass") {
46 | background: var(--natsumi-mat-ga-background) !important;
47 | border: 1px solid light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
48 | box-shadow: 0 0 var(--natsumi-mat-ga-shadow-size) var(--natsumi-mat-ga-shadow-color) !important;
49 |
50 | /*noinspection CssInvalidFunction*/
51 | #zen-sidebar-web-header, #zen-sidebar-panels-wrapper {
52 | border-color: light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
53 | }
54 | }
55 |
56 | @media (-moz-bool-pref: "natsumi.sidebar.zen-sidebar-haze") {
57 | background: var(--natsumi-mat-hz-background) !important;
58 | border: 1px solid light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
59 | backdrop-filter: saturate(var(--natsumi-mat-hz-saturation)) contrast(var(--natsumi-mat-hz-contrast)) blur(var(--natsumi-mat-hz-blur-radius));
60 | box-shadow: 0 0 var(--natsumi-mat-mc-shadow-size) var(--natsumi-mat-mc-shadow-color) !important;
61 |
62 | @media (-moz-bool-pref: "natsumi.sidebar.zen-sidebar-tinted-haze") {
63 | background: var(--natsumi-mat-hz-background-tinted) !important;
64 | }
65 |
66 | /*noinspection CssInvalidFunction*/
67 | #zen-sidebar-web-header, #zen-sidebar-panels-wrapper {
68 | border-color: light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
69 | }
70 | }
71 |
72 | @media (-moz-bool-pref: "natsumi.sidebar.zen-sidebar-mistcrylic") {
73 | background: var(--natsumi-mat-mc-background) !important;
74 | border: 1px solid light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
75 | box-shadow: 0 0 var(--natsumi-mat-mc-shadow-size) var(--natsumi-mat-mc-shadow-color) !important;
76 |
77 | /*noinspection CssInvalidFunction*/
78 | #zen-sidebar-web-header, #zen-sidebar-panels-wrapper {
79 | border-color: light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
80 | }
81 |
82 | &::before {
83 | content: "";
84 | position: absolute;
85 | background-image: url(chrome://browser/content/zen-images/grain-bg.png);
86 | opacity: 0.2;
87 | width: 100%;
88 | height: 100%;
89 | top: 0;
90 | left: 0;
91 | pointer-events: none;
92 | }
93 | }
94 | }
95 |
96 | @media not (-moz-bool-pref: "natsumi.theme.disable-blur") {
97 | #browser:has(#zen-sidebar-web-panel[pinned]) {
98 | .deck-selected browser, .browserSidebarContainer[zen-split] browser {
99 | clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
100 | }
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/themes/6a853219-2e0d-4c2c-943d-b88a3a0e1e49/natsumi/modules/navbar.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Natsumi Browser - A userchrome for Zen Browser that makes things flow.
4 |
5 | Copyright (c) 2024-present Green (@greeeen-dev)
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
25 | Natsumi Browser uses code from others. The link to the original projects or
26 | their author(s) have been provided above the used code.
27 |
28 | */
29 |
30 | /* ==== Navbar tweaks ==== */
31 |
32 | @keyframes glass-disappear {
33 | 0% {
34 | backdrop-filter: blur(var(--natsumi-mat-ga-blur-radius));
35 | }
36 |
37 | 99% {
38 | backdrop-filter: blur(var(--natsumi-mat-ga-blur-radius));
39 | }
40 |
41 | 100% {
42 | backdrop-filter: none;
43 | }
44 | }
45 |
46 | :root[zen-compact-mode="true"]:not([customizing]) {
47 | @media -moz-pref("zen.view.compact.hide-toolbar") {
48 | /*noinspection CssInvalidFunction*/
49 | @media -moz-pref("natsumi.navbar.glass-effect") {
50 | #zen-appcontent-navbar-container {
51 | padding: 0 !important;
52 | width: calc(100vw - 2px) !important;
53 | background: var(--natsumi-mat-ga-background) !important;
54 | border: 1px solid light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
55 | backdrop-filter: blur(var(--natsumi-mat-ga-blur-radius)) !important;
56 |
57 | &:not([zen-has-hover], [zen-user-show], :focus-within, :has(:is([panelopen="true"], [open="true"]):not(.zen-compact-mode-ignore)), [has-popup-menu]) {
58 | backdrop-filter: none !important;
59 | }
60 |
61 | /*noinspection CssInvalidFunction*/
62 | @media not -moz-pref("natsumi.theme.disable-glass-shadow") {
63 | box-shadow: 0 0 var(--natsumi-mat-ga-shadow-size) var(--natsumi-mat-ga-shadow-color) !important;
64 | }
65 | }
66 |
67 | @media -moz-pref("natsumi.navbar.float") {
68 | #zen-appcontent-navbar-container {
69 | background: transparent !important;
70 | border: none !important;
71 | box-shadow: none !important;
72 | backdrop-filter: none !important;
73 | padding: 5px !important;
74 | padding-top: 6px !important;
75 | padding-bottom: 0 !important;
76 | width: calc(100% - 10px) !important;
77 |
78 | /*noinspection CssInvalidFunction*/
79 | &::after {
80 | content: "";
81 | background: var(--natsumi-mat-ga-background) !important;
82 | border: 1px solid light-dark(rgba(20, 20, 20, 0.2), rgba(235, 235, 235, 0.3)) !important;
83 | backdrop-filter: blur(var(--natsumi-mat-ga-blur-radius)) !important;
84 | position: absolute;
85 | width: calc(100% - 12px);
86 | height: calc(100% - 7px);
87 | top: 6px;
88 | left: 5px;
89 | z-index: -999;
90 | border-radius: 6px !important;
91 | }
92 |
93 | &:not([zen-has-hover], [zen-user-show], :focus-within, :has(:is([panelopen="true"], [open="true"]):not(.zen-compact-mode-ignore)), [has-popup-menu]) {
94 | top: calc((-1 * var(--zen-toolbar-height)) + var(--zen-element-separation) - 4px) !important;
95 |
96 | &::after {
97 | backdrop-filter: none !important;
98 | }
99 | }
100 | }
101 | }
102 |
103 | @media not -moz-pref("natsumi.theme.disable-blur") {
104 | #browser:has(#zen-appcontent-navbar-container:is([zen-has-hover], [zen-user-show], :focus-within)) {
105 | .deck-selected browser, .browserSidebarContainer[zen-split] browser {
106 | clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
107 | }
108 | }
109 | }
110 | }
111 | }
112 | }
--------------------------------------------------------------------------------
/themes/542f2a0e-4216-4037-9eef-e8143c21ab44/Nebula/modules/Essentials.css:
--------------------------------------------------------------------------------
1 | /* Credit: Lacuna by Tanay-Kar */
2 |
3 | /* === ESSENTIALS ========================================================================================================== */
4 | /* ESSENTIAL COLOR WITH SHADOW, SPACING & ROUNDED EDGES */
5 | .zen-essentials-container .tabbrowser-tab {
6 | .tab-background {
7 | background-color: light-dark(rgba(255, 255, 255, 0.35), rgba(0, 0, 0, 0.35)) !important;
8 | box-shadow: 0 0px 3px light-dark(rgba(255, 255, 255, 0.12),rgba(0, 0, 0, 0.12)) !important;
9 | border-radius: calc(var(--nebula-border-radius) + 1px) !important;
10 | }
11 |
12 | &:hover .tab-background {
13 | background-color: light-dark(rgba(255, 255, 255, 0.45), rgba(0, 0, 0, 0.45)) !important;
14 | box-shadow: 0 0px 3px light-dark(rgba(255, 255, 255, 0.95),rgba(0, 0, 0, 0.95)) !important;
15 | }
16 |
17 | @media (-moz-pref("zen.theme.essentials-favicon-bg")) {
18 | .tab-background::after {
19 | content: "" !important;
20 | position: absolute !important;
21 | left:0 !important;
22 | top: 0 !important;
23 | width: 100% !important;
24 | height: 100% !important;
25 |
26 | display: block !important;
27 | z-index: -1 !important;
28 | }
29 | }
30 | }
31 | /* makes essentials have fixed width of 60px (from superpins) */
32 | :root {
33 | --essentials-width: 60px !important;
34 | }
35 |
36 | .zen-essentials-container {
37 | grid-template-columns: repeat(auto-fit, minmax(var(--essentials-width), auto)) !important;
38 | }
39 | .collapsed-toolbar .essential-item {
40 | justify-content: center; /* Ensures items are centered */
41 | align-items: center;
42 | margin: auto; /* Adjust if needed */
43 | }
44 |
45 |
46 | /* Animations for essentials and stuff */
47 | #zen-main-app-wrapper:not(:has(#zen-welcome)) {
48 | .tabbrowser-tab {
49 | scale: unset !important;
50 |
51 | &[zen-glance-tab] {
52 | box-shadow: none !important;
53 |
54 | .tab-label-container {
55 | display: none !important;
56 | }
57 | }
58 |
59 | .tab-stack {
60 | transition: transform 0.2s ease !important;
61 | }
62 |
63 | .tab-background, .tab-icon-stack, .tab-label-container {
64 | transition: opacity 0.2s ease !important;
65 | }
66 |
67 | .tab-background {
68 | transition: background 0.3s ease, box-shadow 0.3s ease, border 0.3s ease !important;
69 | overflow: hidden !important;
70 | position: relative !important;
71 |
72 | &::before {
73 | transition: opacity 0.3s ease, width 0.3s ease, background 0.3s ease;
74 | opacity: 0;
75 | }
76 |
77 | &::after {
78 | content: "";
79 | position: absolute;
80 | width: 100%;
81 | height: var(--tab-min-height);
82 | opacity: 0;
83 | transition: opacity 0.3s ease-out;
84 | }
85 | }
86 |
87 | &[selected]:not([zen-glance-tab="true"]), &[visuallyselected]:not([zen-glance-tab="true"]) {
88 | & > .tab-stack > .tab-background {
89 |
90 | &::after {
91 | width: 100%;
92 | opacity: 1;
93 | }
94 | }
95 | }
96 |
97 | &:active {
98 | .tab-stack {
99 | transform: scale(0.95, 0.95) !important;
100 | }
101 | }
102 | }
103 | }
104 |
105 | /* ================= ESSENTIALS & STUFF ====================== */
106 |
107 | #zen-main-app-wrapper:not(:has(#zen-welcome)) {
108 | /* Tab click animations */
109 | #tabbrowser-tabs:not([movingtab]) {
110 | .tabbrowser-tab {
111 | transition: scale 0.2s ease !important;
112 | }
113 |
114 | .tabbrowser-tab:active {
115 | scale: 0.96 !important;
116 | }
117 |
118 | .tabbrowser-tab:has(.tab-close-button:hover) {
119 | scale: 1 !important;
120 | }
121 | }
122 |
123 |
124 | /* Split view tabs */
125 | tab-group[split-view-group] {
126 | .tabbrowser-tab {
127 | & > .tab-stack > .tab-background {
128 | &::after {
129 | mask-image: linear-gradient(to right, black, transparent 60%);
130 | }
131 | }
132 | }
133 | }
134 | }
135 |
136 | .zen-essentials-container {
137 |
138 | /*noinspection CssInvalidFunction*/
139 | .tabbrowser-tab {
140 | overflow: visible !important;
141 |
142 | &[selected], &[visuallyselected] {
143 | .tab-icon-image {
144 | filter: drop-shadow(0px 0px 4px rgba(0, 0, 0, 0.5));
145 | }
146 |
147 | & > .tab-stack > .tab-background {
148 | border: none !important;
149 |
150 | &::before {
151 | opacity: 0 !important;
152 | }
153 |
154 | &::after {
155 | filter: saturate(180%) blur(13.5px) !important;
156 | }
157 | }
158 | }
159 | }
160 | }
161 |
--------------------------------------------------------------------------------
/scripts/write.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import json
4 | import uuid
5 | import time
6 |
7 | with open('/home/runner/issue-parser-result.json', 'r') as file:
8 | data = json.load(file)
9 |
10 | if not data['repo'].startswith('https://github.com/'):
11 | sys.exit(1)
12 |
13 | if not data['name']:
14 | data['name'] = 'Untited Theme'
15 |
16 | if not data['description']:
17 | data['description'] = 'No description provided.'
18 |
19 | if not data['version']:
20 | data['version'] = '1.0.0'
21 |
22 | if not data['author']:
23 | data['author'] = sys.argv[1]
24 |
25 | if data['copy_file']:
26 | data['copy_file'] = data['copy_file'].split('\n')
27 |
28 | if data['copy_folder']:
29 | data['copy_folder'] = data['copy_folder'].split('\n')
30 |
31 | if data['load_chrome']:
32 | data['load_chrome'] = data['load_chrome'].split('\n')
33 |
34 | if data['load_content']:
35 | data['load_content'] = data['load_content'].split('\n')
36 |
37 | if data['domains']:
38 | data['domains'] = data['domains'].split('\n')
39 |
40 | theme_type = 0
41 | data['submission_type'] = 'Bundle'
42 |
43 | if data['load_chrome'] and not data['load_content']:
44 | theme_type = 1
45 | data['submission_type'] = 'Theme'
46 |
47 | if data['load_content'] and not data['load_chrome']:
48 | theme_type = 2
49 | data['submission_type'] = 'Page'
50 |
51 | if not data['copy_file'] and not data['copy_folder']:
52 | print('ERROR: No files to copy.')
53 | print('Please provide a file or folder to copy.')
54 | sys.exit(1)
55 |
56 | if not data['load_chrome'] and not data['load_content']:
57 | print('ERROR: No load points.')
58 | print('Please provide a load point for either userChrome or userContent.')
59 | sys.exit(1)
60 |
61 | gh_username = data['repo'].replace('https://github.com/', '', 1).split('/')[0]
62 | if not gh_username.lower() == sys.argv[1].lower():
63 | print('ERROR: Repository owner mismatch.')
64 | print('You don\'t own this repository.')
65 | sys.exit(1)
66 |
67 | os.system(f'git clone {data["repo"]} theme-repo')
68 | theme_id = str(uuid.uuid4())
69 | theme_dir = f'themes/{theme_id}'
70 | os.makedirs(theme_dir)
71 |
72 | if data['readme']:
73 | with open(f'{theme_dir}/README.md', 'w+') as file:
74 | file.write(data['readme'])
75 |
76 | for file in data['copy_file']:
77 | os.system(f'cp "theme-repo/{file}" "{theme_dir}"')
78 |
79 | for folder in data['copy_folder']:
80 | os.system(f'cp -r "theme-repo/{folder}" "{theme_dir}"')
81 |
82 | os.system(f'cp theme-repo/.custom-store/README.md "{theme_dir}"')
83 | os.system(f'cp theme-repo/.custom-store/image.png "{theme_dir}"')
84 |
85 | os.system(f'rm -rf theme-repo')
86 |
87 | if data['load_chrome']:
88 | for load_point in data['load_chrome']:
89 | if not os.path.isfile(theme_dir + '/' + load_point):
90 | print(f'ERROR: Invalid userChrome load point {load_point}.')
91 | print('Please provide a valid file path.')
92 | sys.exit(1)
93 |
94 | if data['load_content']:
95 | for load_point in data['load_content']:
96 | if not os.path.isfile(theme_dir + '/' + load_point):
97 | print(f'ERROR: Invalid userContent load point {load_point}.')
98 | print('Please provide a valid file path.')
99 | sys.exit(1)
100 |
101 | theme_data = {
102 | "type": theme_type,
103 | "name": data['name'],
104 | "description": data['description'],
105 | "author": data['author'],
106 | "authorUrl": f"https://github.com/{sys.argv[1]}",
107 | "image": data['thumbnail'],
108 | "homepage": data['repo'],
109 | "version": data['version'],
110 | "createdAt": round(time.time()),
111 | "updatedAt": round(time.time()),
112 | "tags": [],
113 | "domains": data['domains']
114 | }
115 |
116 | theme_install_data = {
117 | "files": data['copy_file'],
118 | "folders": data['copy_folder'],
119 | "uclChromeTarget": data['load_chrome'],
120 | "uclContentTarget": data['load_content']
121 | }
122 |
123 | with open('themes.json', 'r') as file:
124 | themes = json.load(file)
125 |
126 | with open(f'{theme_dir}/theme.json', 'w+') as file:
127 | # noinspection PyTypeChecker
128 | json.dump(theme_install_data, file, indent=4)
129 |
130 | for theme in themes:
131 | env_file = os.getenv('GITHUB_ENV')
132 | if themes[theme]['homepage'] == theme_data['homepage']:
133 | print('WARNING: Theme already exists.')
134 | print('A theme with the same repository already exists.')
135 |
136 | with open(env_file, "a") as myfile:
137 | myfile.write(f"DUPLICATE_WARNING=* **A theme with this repository already exists.**\n")
138 |
139 | themes.update({theme_id: theme_data})
140 |
141 | with open('themes.json', 'w+') as file:
142 | # noinspection PyTypeChecker
143 | json.dump(themes, file, indent=4)
144 |
145 | with open('/home/runner/theme_id', 'w+') as file:
146 | file.write(theme_id)
147 |
148 | print('SUCCESS: Files have been written to folder.')
149 |
--------------------------------------------------------------------------------
/scripts/update.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import json
4 | import time
5 |
6 | to_update = ['version', 'submission_type']
7 | to_update_install = []
8 |
9 | mappings = {
10 | 'submission_type': 'type',
11 | 'copy_file': 'files',
12 | 'copy_folder': 'folders',
13 | 'load_chrome': 'uclChromeTarget',
14 | 'load_content': 'uclContentTarget',
15 | 'thumbnail': 'image'
16 | }
17 |
18 | with open('/home/runner/issue-parser-result.json', 'r') as file:
19 | data = json.load(file)
20 |
21 | if data['description']:
22 | to_update.append('description')
23 |
24 | if data['copy_file']:
25 | if data['copy_file'] == '!erase':
26 | data['copy_file'] = []
27 | else:
28 | data['copy_file'] = data['copy_file'].split('\n')
29 | to_update_install.append('copy_file')
30 |
31 | if data['copy_folder']:
32 | if data['copy_folder'] == '!erase':
33 | data['copy_folder'] = []
34 | else:
35 | data['copy_folder'] = data['copy_folder'].split('\n')
36 | to_update_install.append('copy_folder')
37 |
38 | if data['load_chrome']:
39 | if data['load_chrome'] == '!erase':
40 | data['load_chrome'] = []
41 | else:
42 | data['load_chrome'] = data['load_chrome'].split('\n')
43 | to_update_install.append('load_chrome')
44 |
45 | if data['load_content']:
46 | if data['load_content'] == '!erase':
47 | data['load_content'] = []
48 | else:
49 | data['load_content'] = data['load_content'].split('\n')
50 | to_update_install.append('load_content')
51 |
52 | if data['domains']:
53 | if data['domains'] == '!erase':
54 | data['domains'] = []
55 | else:
56 | data['domains'] = data['domains'].split('\n')
57 | to_update.append('domains')
58 |
59 | theme_type = 0
60 | data['submission_type'] = 0
61 |
62 | if data['load_chrome'] and not data['load_content']:
63 | theme_type = 1
64 | data['submission_type'] = 1
65 |
66 | if data['load_content'] and not data['load_chrome']:
67 | theme_type = 2
68 | data['submission_type'] = 2
69 |
70 | # Update themes.json entry
71 | with open('themes.json', 'r') as file:
72 | themes = json.load(file)
73 |
74 | if not data['id'] in themes:
75 | print('ERROR: Theme not found.')
76 | print('Please provide a valid theme ID.')
77 | sys.exit(1)
78 |
79 | for key in to_update:
80 | mapped = mappings.get(key, key)
81 | themes[data['id']][mapped] = data[key]
82 |
83 | themes[data['id']]['updatedAt'] = round(time.time())
84 |
85 | with open('themes.json', 'w+') as file:
86 | # noinspection PyTypeChecker
87 | json.dump(themes, file, indent=4)
88 |
89 | gh_username = themes[data["id"]]["homepage"].replace('https://github.com/', '', 1).split('/')[0]
90 | if not gh_username.lower() == sys.argv[1].lower():
91 | print('ERROR: Repository owner mismatch.')
92 | print('You don\'t own this repository.')
93 | sys.exit(1)
94 |
95 | os.system(f'git clone {themes[data["id"]]["homepage"]} theme-repo')
96 | theme_dir = f'themes/{data["id"]}'
97 |
98 | with open(f'{theme_dir}/theme.json', 'r') as file:
99 | install_data = json.load(file)
100 |
101 | for key in to_update_install:
102 | mapped = mappings.get(key, key)
103 | install_data[mapped] = data[key]
104 |
105 | with open(f'{theme_dir}/theme.json', 'w+') as file:
106 | # noinspection PyTypeChecker
107 | json.dump(install_data, file, indent=4)
108 |
109 | for file in install_data['files']:
110 | os.system(f'cp theme-repo/{file} {theme_dir}')
111 |
112 | for folder in install_data['folders']:
113 | os.system(f'cp -r theme-repo/{folder} {theme_dir}')
114 |
115 | os.system(f'cp theme-repo/.custom-store/README.md {theme_dir}')
116 | os.system(f'cp theme-repo/.custom-store/image.png {theme_dir}')
117 |
118 | os.system(f'rm -rf theme-repo')
119 |
120 | if not install_data['files'] and not install_data['folders']:
121 | print('ERROR: No files to copy.')
122 | print('Please provide a file or folder to copy.')
123 | sys.exit(1)
124 |
125 | if not install_data['uclChromeTarget'] and not install_data['uclContentTarget']:
126 | print('ERROR: No load points.')
127 | print('Please provide a load point for either userChrome or userContent.')
128 | sys.exit(1)
129 |
130 | if install_data['uclChromeTarget']:
131 | for load_point in install_data['uclChromeTarget']:
132 | if not os.path.isfile(theme_dir + '/' + load_point):
133 | print(f'ERROR: Invalid userChrome load point {load_point}.')
134 | print('Please provide a valid file path.')
135 | sys.exit(1)
136 |
137 | if install_data['uclContentTarget']:
138 | for load_point in install_data['uclContentTarget']:
139 | if not os.path.isfile(theme_dir + '/' + load_point):
140 | print(f'ERROR: Invalid userContent load point {load_point}.')
141 | print('Please provide a valid file path.')
142 | sys.exit(1)
143 |
144 | with open('/home/runner/theme_name', 'w+') as file:
145 | file.write(themes[data["id"]]["name"])
146 |
147 | print('SUCCESS: Files have been written to folder.')
148 |
--------------------------------------------------------------------------------
/themes/1f1e7bbb-213b-473e-aebb-e9bffa3c9747/README.md:
--------------------------------------------------------------------------------
1 |
18 |
19 | https://github.com/user-attachments/assets/ce6c3103-6adb-4190-86f6-8be656070632
20 |
21 | ## What is Pineapple Fried?
22 | Pineapple Fried is a pack of customizations (a 'rice') made for [Zen Browser](https://zen-browser.app).
23 |
24 | It integrates new UI styles and personal tweaks.
25 |
26 | > [!Note]
27 | > As of Pineapple Fried **v2.1.0**:
28 | >
29 | > Natsumi-Tweaks (the compatibility layer that added support for some tweaked Natsumi styles and animations) has been removed.
30 | >
31 | > You're welcome to iterate on the last version of natsumi-tweaks from PF v2.0.0 to add compatibility for Natsumi, but I will not be continuing to update it.
32 |
33 |
34 |
35 |
36 |
37 | ## Features Included
38 |
39 |
40 |
41 |
42 | Cohesion
43 |
44 |
45 | Cohesion adds an integrated URL style, transparent newtab pages, and a *cohesive* transparent look to the various bars and panels
46 |
47 | https://github.com/user-attachments/assets/2bf31d3a-18e0-4405-9389-8d0f036127a4
48 |
49 |
50 |
51 |