diff --git a/data/web/css/themes/servercow/dark.css b/data/web/css/themes/servercow/dark.css new file mode 100644 index 000000000..0ede978d6 --- /dev/null +++ b/data/web/css/themes/servercow/dark.css @@ -0,0 +1,203 @@ +/* servercow theme, dark mode, bundled after mailcow core dark mode */ + +:root { + --sc-brown-hover: #806b55; + --sc-brown-active: #8a745c; + --sc-brown-soft: rgba(201, 180, 154, .18); + --sc-brown-tint: rgba(201, 180, 154, .08); + --sc-link: #c9b49a; + --sc-danger-text: #ff8a8a; + --sc-ink: #ece7e1; + --sc-muted: #a89f94; + --sc-placeholder: #8a8177; + --sc-bg: #171513; + --sc-surface: #211e1b; + --sc-cap: #2a2622; + --sc-addon: #2a2622; + --sc-line: #463f38; + --sc-divider: #34302b; + --sc-cap-line: #3d3732; + --sc-stripe: rgba(255, 255, 255, .025); + --sc-hover: rgba(201, 180, 154, .08); + --sc-focus-border: #8a7864; + --sc-focus: rgba(201, 180, 154, .25); + --sc-shadow: 0 0 10px 0 rgba(0, 0, 0, .5); + --bs-body-color: #ece7e1; + --bs-body-bg: #171513; + /* core dark tokens, see css/themes/mailcow-darkmode.css */ + --mc-body-bg: var(--sc-bg); + --mc-body-color: var(--sc-ink); + --mc-surface: var(--sc-surface); + --mc-surface-alt: var(--sc-cap); + --mc-text: var(--sc-ink); + --mc-text-soft: var(--sc-ink); + --mc-muted: var(--sc-muted); + --mc-border: var(--sc-divider); + --mc-tab-border: var(--sc-divider); + --mc-link: var(--sc-link); + --mc-link-hover: #e0cfba; + --mc-btn-bg: var(--sc-cap); + --mc-btn-border: var(--sc-line); + --mc-input-bg: var(--sc-bg); + --mc-input-color: var(--sc-ink); + --mc-input-border: var(--sc-line); + --mc-dropdown-bg: var(--sc-surface); + --mc-table-bg: transparent; + --mc-table-stripe: var(--sc-stripe); + --mc-table-stripe-row: transparent; + --mc-table-hover: var(--sc-hover); + --mc-table-border: var(--sc-divider); + --mc-progress-bg: var(--sc-cap); + --mc-placeholder: var(--sc-placeholder); + --mc-hr: var(--sc-divider); + --mc-btn-outline-color: var(--sc-ink); + --mc-btn-outline-border: var(--sc-line); + --mc-btn-outline-hover-bg: var(--sc-brown-tint); + --mc-btn-outline-active-bg: var(--sc-brown); + --mc-btn-light-active-color: #fff; + --mc-btn-light-active-bg: var(--sc-brown); + --mc-btn-light-active-border: var(--sc-brown); + --mc-btn-dark-bg: var(--sc-brown); + --mc-input-disabled-bg: var(--sc-cap); + --mc-input-disabled-color: var(--sc-muted); + --mc-list-header-bg: var(--sc-cap); + --mc-list-details-bg: var(--sc-surface); + --mc-chip-bg: var(--sc-cap); + --mc-table-child-bg: var(--sc-surface); + --mc-dtr-bg: var(--sc-cap); + --mc-dtr-border: var(--sc-line); + --mc-dtr-color: var(--sc-link); + --mc-dtr-hover-bg: var(--sc-hover); + --mc-dtr-active-bg: var(--sc-brown-soft); +} + +/* navbar */ +.navbar.bg-light { + background-color: var(--sc-surface) !important; + border-bottom-color: var(--sc-green); +} +.navbar-light .navbar-nav .nav-link { + color: var(--sc-ink) !important; +} +.navbar-light .navbar-nav .nav-link:hover, +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .show > .nav-link { + color: var(--sc-link) !important; +} +.dropdown-menu { + border-color: var(--sc-cap-line); +} +.dropdown-item:hover, .dropdown-item:focus { + color: var(--sc-link) !important; +} + +/* cards and modals */ +.card-header { + color: var(--sc-ink); + background-color: var(--sc-cap); + border-color: var(--sc-cap-line); +} +.modal-content { + background-color: var(--sc-surface); +} +.modal-header { + border-color: var(--sc-cap-line); +} +.input-group-text { + background-color: var(--sc-addon); +} +.form-check-input:not(:checked) { + background-color: var(--sc-bg); + border-color: var(--sc-line); +} +kbd { + color: var(--sc-ink); + background-color: var(--sc-cap); +} + +/* buttons */ +.btn-secondary:hover, .btn-secondary:focus, .btn-light:hover, .btn-light:focus, .page-link:hover { + color: var(--sc-link) !important; + background-color: var(--sc-line) !important; +} +.btn-check:checked + .btn-secondary, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle, +.page-item.active .page-link { + color: #fff !important; + background-color: var(--sc-brown) !important; + border-color: var(--sc-brown) !important; +} + +/* tabs */ +.nav-tabs .nav-link { + color: var(--sc-ink) !important; + border-bottom-color: transparent !important; +} +.nav-tabs .nav-link:not(.disabled):hover, .nav-tabs .nav-link:not(.disabled):focus, +.card .nav-tabs .nav-link:not(.disabled):hover, .card .nav-tabs .nav-link:not(.disabled):focus { + color: var(--sc-link) !important; + border-bottom-color: transparent !important; +} +.nav-tabs .nav-link.active, .card .nav-tabs .nav-link.active { + color: var(--sc-link) !important; + border-bottom-color: var(--sc-link) !important; +} + +/* semantic text */ +.text-success { + color: var(--sc-green) !important; +} +.text-warning { + color: var(--sc-warning) !important; +} + +/* alerts, opaque dark tints (also used for floating notifications) */ +.alert-primary { + color: #e6d9c9 !important; + background-color: #3c342b !important; + border-color: #5e4f3e !important; +} +.alert-info { + color: #cfe9f6 !important; + background-color: #2f3334 !important; + border-color: #44535a !important; +} +.alert-success { + color: #cdeea0; + background-color: #2e3419; + border-color: #405515; +} +.alert-danger { + color: #f9c4c4; + background-color: #402a28; + border-color: #693a38; +} +.alert-warning { + color: #f5d496; + background-color: #3c2f19; + border-color: #654815; +} +.alert-secondary, .alert-light { + color: var(--sc-ink) !important; + background-color: var(--sc-cap) !important; + border-color: var(--sc-divider) !important; +} + +.alert .btn-close { + filter: invert(1) grayscale(100%) brightness(200%); +} + +/* slider */ +.noUi-target { + background: var(--sc-bg); + border-color: var(--sc-line); + box-shadow: none; +} +.noUi-handle { + background: var(--sc-cap); + border-color: var(--sc-line); + box-shadow: none; +} +.noUi-handle::before, .noUi-handle::after { + background: var(--sc-line); +} diff --git a/data/web/css/themes/servercow/fonts/LICENSE-RobotoSlab.txt b/data/web/css/themes/servercow/fonts/LICENSE-RobotoSlab.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/data/web/css/themes/servercow/fonts/LICENSE-RobotoSlab.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/data/web/css/themes/servercow/fonts/OFL-Poppins.txt b/data/web/css/themes/servercow/fonts/OFL-Poppins.txt new file mode 100644 index 000000000..76df3b565 --- /dev/null +++ b/data/web/css/themes/servercow/fonts/OFL-Poppins.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff new file mode 100644 index 000000000..fc6d5c763 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff2 b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff2 new file mode 100644 index 000000000..abfe99137 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff2 differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff new file mode 100644 index 000000000..08368fc22 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff2 b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff2 new file mode 100644 index 000000000..068762f85 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff2 differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff new file mode 100644 index 000000000..86fbaddf5 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff2 b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff2 new file mode 100644 index 000000000..981bdb300 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff2 differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff new file mode 100644 index 000000000..b925aa32e Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff differ diff --git a/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff2 b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff2 new file mode 100644 index 000000000..d83f92c09 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff2 differ diff --git a/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff new file mode 100644 index 000000000..8621fd61e Binary files /dev/null and b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff differ diff --git a/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff2 b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff2 new file mode 100644 index 000000000..2e4097322 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff2 differ diff --git a/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff new file mode 100644 index 000000000..8c8b94f48 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff differ diff --git a/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff2 b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff2 new file mode 100644 index 000000000..f55bf3760 Binary files /dev/null and b/data/web/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff2 differ diff --git a/data/web/css/themes/servercow/theme.css b/data/web/css/themes/servercow/theme.css new file mode 100644 index 000000000..933c44405 --- /dev/null +++ b/data/web/css/themes/servercow/theme.css @@ -0,0 +1,576 @@ +/* servercow theme for mailcow, based on the servercow customer portal */ + +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local(''), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff2') format('woff2'), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-regular.woff') format('woff'); +} +@font-face { + font-family: 'Poppins'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: local(''), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff2') format('woff2'), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-italic.woff') format('woff'); +} +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local(''), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff2') format('woff2'), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-500.woff') format('woff'); +} +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: local(''), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff2') format('woff2'), + url('/css/themes/servercow/fonts/poppins-v24-latin_latin-ext-600.woff') format('woff'); +} +@font-face { + font-family: 'Roboto Slab'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local(''), + url('/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff2') format('woff2'), + url('/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-regular.woff') format('woff'); +} +@font-face { + font-family: 'Roboto Slab'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local(''), + url('/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff2') format('woff2'), + url('/css/themes/servercow/fonts/roboto-slab-v36-cyrillic_greek_latin-500.woff') format('woff'); +} + +/* tokens */ +:root { + --sc-brown: #6F5D49; + --sc-brown-hover: #5e4f3e; + --sc-brown-active: #594a3a; + --sc-brown-soft: rgba(111, 93, 73, .2); + --sc-brown-tint: rgba(111, 93, 73, .08); + --sc-link: #6F5D49; + --sc-green: #8AD608; + --sc-blue: #96D0EC; + --sc-warning: #e3950b; + --sc-danger: #ef6f6f; + --sc-danger-hover: #e85e5e; + --sc-danger-text: #c43c3c; + --sc-ink: #212529; + --sc-muted: #6c757d; + --sc-placeholder: #6c757d; + --sc-bg: #F6F8F8; + --sc-surface: #ffffff; + --sc-cap: #f7f7f7; + --sc-addon: #e9ecef; + --sc-line: #ced4da; + --sc-divider: #dee2e6; + --sc-cap-line: rgba(0, 0, 0, .175); + --sc-stripe: rgba(111, 93, 73, .04); + --sc-hover: rgba(111, 93, 73, .08); + --sc-focus-border: #b7aea4; + --sc-focus: rgba(111, 93, 73, .25); + --sc-shadow: 0 0 10px 0 rgba(134, 134, 134, .3); + --sc-font: 'Poppins', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + --sc-font-head: 'Roboto Slab', Georgia, serif; + --bs-body-color: #212529; + --bs-body-bg: #F6F8F8; + --bs-body-font-family: var(--sc-font); + /* core tokens, see css/build/014-mailcow.css */ + --mc-font-family: var(--sc-font); + --mc-font-size: 10pt; + --mc-body-bg: var(--sc-bg); + --mc-primary: var(--sc-brown); + --mc-primary-border: var(--sc-brown); + --mc-info: var(--sc-blue); + --mc-info-border: var(--sc-blue); + --mc-border: var(--sc-divider); + --mc-surface: var(--sc-surface); + --mc-surface-alt: var(--sc-cap); + --mc-muted: var(--sc-muted); + --mc-hr: var(--sc-divider); + --mc-progress-bg: var(--sc-addon); + --mc-placeholder: var(--sc-placeholder); + --mc-btn-outline-color: var(--sc-ink); + --mc-btn-outline-border: var(--sc-line); + --mc-btn-outline-hover-bg: var(--sc-brown-tint); + --mc-btn-outline-active-bg: var(--sc-brown); + --mc-btn-light-active-color: #fff; + --mc-btn-light-active-bg: var(--sc-brown); + --mc-btn-light-active-border: var(--sc-brown); + --mc-dtr-bg: var(--sc-surface); + --mc-dtr-border: var(--sc-line); + --mc-dtr-color: var(--sc-brown); + --mc-dtr-hover-bg: var(--sc-brown-tint); + --mc-dtr-active-bg: var(--sc-brown-soft); +} + +/* base */ +body { + color: var(--sc-ink); + -webkit-font-smoothing: antialiased; +} +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, legend, .modal-title { + font-family: var(--sc-font-head); + font-weight: 500; + color: var(--sc-ink); +} +a { + color: var(--sc-link); +} +a:hover { + color: var(--sc-brown-hover); +} +.text-muted, .text-secondary { + color: var(--sc-muted) !important; +} +::selection { + background: var(--sc-brown-soft); +} +hr { + border-color: var(--sc-divider); + opacity: 1; +} +::placeholder { + color: var(--sc-placeholder) !important; +} + +/* navbar, white with green line */ +.navbar.bg-light { + background-color: var(--sc-surface) !important; + border: 0; + border-bottom: 5px solid var(--sc-green); +} +.navbar-light .navbar-nav .nav-link { + color: var(--sc-ink); +} +.navbar-light .navbar-nav .nav-link:hover, +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .show > .nav-link { + color: var(--sc-brown); +} +@media (min-width: 992px) { + .navbar-nav .nav-link { + height: 60px; + } +} +.dropdown-menu { + border: 1px solid var(--sc-cap-line); + border-radius: 0; + box-shadow: var(--sc-shadow); +} +.dropdown-item { + color: var(--sc-ink); +} +.dropdown-item:hover, .dropdown-item:focus { + color: var(--sc-brown) !important; + background-color: var(--sc-brown-soft); +} +.dropdown-item.active, .dropdown-item:active { + color: #fff; + background-color: var(--sc-brown); +} + +/* cards, white with soft shadow */ +.card { + border: 0 !important; + border-radius: 0; + background-color: var(--sc-surface); + box-shadow: var(--sc-shadow); +} +.card-header, .card-header:first-child { + font-family: var(--sc-font-head); + font-weight: 500; + font-size: 1.1rem; + color: var(--sc-ink); + background-color: var(--sc-cap); + border-bottom: 1px solid var(--sc-cap-line); + border-radius: 0; + padding: .5rem 1rem; +} +.card-header .btn, .card-header .form-control, .card-header .form-select { + font-family: var(--sc-font); + font-size: .875rem; +} +.card-footer { + background-color: var(--sc-cap); + border-top: 1px solid var(--sc-cap-line); + border-radius: 0; +} +.card .card { + box-shadow: none; + border: 1px solid var(--sc-divider) !important; +} +/* colored headers become a top line */ +.card:has(> .card-header.bg-danger) { + border-top: 4px solid var(--sc-danger) !important; +} +.card-header.bg-danger, .card-header.bg-success, .card-header.bg-primary, .card-header.bg-info { + color: var(--sc-ink) !important; + background-color: var(--sc-cap) !important; +} +.list-group-item { + border-color: var(--sc-divider); +} + +/* modals */ +.modal-content { + border: 0; + border-radius: 0; + box-shadow: 0 8px 40px rgba(0, 0, 0, .2); +} +.modal-header { + background-color: var(--sc-cap); + border-bottom: 1px solid var(--sc-cap-line); + border-radius: 0; +} +.modal-footer { + border-top: 1px solid var(--sc-divider); +} + +/* buttons, flat and square */ +.btn { + border-width: 1px; + border-radius: 0; + font-weight: 400; + transition: none; +} +.btn:not(.disabled):hover, +.btn:not(.disabled):active { + margin-top: 0; + border-bottom-width: 1px; +} +.btn:focus, .btn-check:focus + .btn { + box-shadow: 0 0 0 .2rem var(--sc-focus); +} +.btn-primary, .btn-primary:hover, .btn-primary:focus, .btn-primary:active { + color: #fff; +} +.btn-primary:hover, .btn-primary:focus, .btn-primary:active { + background-color: var(--sc-brown-hover) !important; + border-color: var(--sc-brown-active) !important; +} +/* main call to action, portal primary */ +.btn-success, .btn-success:not(.disabled):hover, .btn-success:not(.disabled):active, .btn-success:focus, +.btn-success:disabled, .btn-success.disabled { + color: #fff; + background-color: var(--sc-brown); + border-color: var(--sc-brown); +} +.btn-success:hover, .btn-success:active, .btn-success:focus { + background-color: var(--sc-brown-hover); + border-color: var(--sc-brown-active); +} +.btn-danger, .btn-danger:not(.disabled):hover, .btn-danger:not(.disabled):active, .btn-danger:focus, +.btn-danger:disabled, .btn-danger.disabled { + color: #000; + background-color: var(--sc-danger); + border-color: var(--sc-danger); +} +.btn-danger:hover, .btn-danger:active, .btn-danger:focus { + background-color: var(--sc-danger-hover); + border-color: var(--sc-danger-hover); +} +.btn-warning, .btn-warning:not(.disabled):hover, .btn-warning:not(.disabled):active, .btn-warning:focus { + color: #000; + background-color: var(--sc-warning); + border-color: var(--sc-warning); +} +.bg-info, .alert-info, .btn-info, .badge.bg-info > a { + color: #000 !important; +} +.btn-secondary, .btn-secondary:not(.disabled):hover, .btn-secondary:not(.disabled):active, .btn-secondary:focus, +.btn-light, .btn-light:not(.disabled):hover, .btn-light:not(.disabled):active, .btn-light:focus { + color: var(--sc-ink); + background-color: var(--sc-surface); + border-color: var(--sc-line); +} +.btn-secondary:hover, .btn-secondary:active, .btn-secondary:focus, +.btn-light:hover, .btn-light:focus { + color: var(--sc-brown); + background-color: var(--sc-brown-tint); + border-color: var(--sc-line); +} +.btn-check:checked + .btn-secondary, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: var(--sc-brown); + border-color: var(--sc-brown); +} +.btn-check:checked + .btn-outline-secondary, .btn-outline-secondary.active { + color: #fff !important; + border-color: var(--sc-brown) !important; +} +.btn-outline-primary { + color: var(--sc-brown); + border-color: var(--sc-brown); +} +.btn-outline-primary:hover { + color: #fff; + background-color: var(--sc-brown); + border-color: var(--sc-brown); +} +/* active toggle, e.g. tagging options */ +.btn-dark, .btn-dark:hover, .btn-dark:focus, .btn-dark:active { + color: #fff; + background-color: var(--sc-brown); + border-color: var(--sc-brown); +} +.btn-xs, .btn-group-xs > .btn { + border-radius: 0; +} + +/* forms */ +.form-control, .form-select { + border-color: var(--sc-line); + border-radius: 0; + box-shadow: none; + color: var(--sc-ink); + background-color: var(--sc-surface); +} +.form-control:focus, .form-select:focus { + border-color: var(--sc-focus-border); + box-shadow: 0 0 0 .25rem var(--sc-focus); +} +.input-group-text { + color: var(--sc-ink); + background-color: var(--sc-addon); + border-color: var(--sc-line); + border-radius: 0; +} +.input-group > :not(:first-child), .input-group > :not(:last-child) { + border-radius: 0; +} +.form-check-input { + border-color: var(--sc-line); +} +.form-check-input:checked { + background-color: var(--sc-brown); + border-color: var(--sc-brown); +} +.form-check-input:focus { + border-color: var(--sc-focus-border); + box-shadow: 0 0 0 .25rem var(--sc-focus); +} +.bootstrap-select > .dropdown-toggle { + border-radius: 0; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder, +.bootstrap-select > .dropdown-toggle.bs-placeholder:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder:active { + color: var(--mc-placeholder); +} +.bootstrap-select .dropdown-menu li a.active, .bootstrap-select .dropdown-menu li a:active { + color: #fff; + background-color: var(--sc-brown); +} +div.numberedtextarea-number { + color: var(--sc-muted); +} + +/* nav tabs */ +.nav-tabs { + border-bottom: 1px solid var(--sc-divider); +} +.nav-tabs .nav-link, +.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:hover, .nav-tabs .nav-link.disabled:focus { + margin-top: 0; + color: var(--sc-ink); + border: 0; + border-bottom: 3px solid transparent; + border-radius: 0; + background: none; +} +.nav-tabs .nav-link:not(.disabled):hover, .nav-tabs .nav-link:not(.disabled):focus { + padding-bottom: .5rem; + color: var(--sc-brown); +} +.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link, +.nav-tabs .nav-link:not(.disabled).active { + padding-bottom: .5rem; + color: var(--sc-brown); + background: none; + border-bottom: 3px solid var(--sc-brown); +} +.nav-pills .nav-link { + border-radius: 0; + color: var(--sc-ink); +} +.nav-pills .nav-link.active, .nav-pills .show > .nav-link { + background-color: var(--sc-brown); +} + +/* tables */ +.table { + --bs-table-bg: transparent; + --bs-table-striped-bg: var(--sc-stripe); + --bs-table-striped-color: var(--sc-ink); + --bs-table-hover-color: var(--sc-ink); + --bs-table-hover-bg: var(--sc-hover); + color: var(--sc-ink); + border-color: var(--sc-divider); +} +.table > thead > tr > th, table.dataTable thead th { + color: var(--sc-ink); + font-weight: 600; + border-bottom: 1px solid var(--sc-line); +} +table.dataTable.table-striped > tbody > tr.odd > * { + box-shadow: inset 0 0 0 9999px var(--sc-stripe); +} +table.dataTable.table-hover > tbody > tr:hover > * { + box-shadow: inset 0 0 0 9999px var(--sc-hover); +} +.table > :not(:first-child) { + border-top: 0; +} +.dataTables_wrapper .dataTables_filter input, +.dataTables_wrapper .dataTables_length select { + border: 1px solid var(--sc-line); + border-radius: 0; +} +.pagination > li > a, .pagination > li > span, .pagination .page-link, +.pagination > li > a:hover, .pagination > li > a:focus, .pagination > li > a:active { + top: 0; + color: var(--sc-brown); + font-weight: 400; + text-transform: none; + background-color: var(--sc-surface); + border: 1px solid var(--sc-divider); + border-radius: 0 !important; +} +.pagination > li > a:hover, .pagination > li > a:focus { + background-color: var(--sc-brown-tint); +} +.pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:active, +.page-item.disabled .page-link { + color: var(--sc-muted); + background-color: var(--sc-surface); + border-width: 1px; + border-color: var(--sc-divider); +} +.page-item.active .page-link { + color: #fff; + background-color: var(--sc-brown); + border-color: var(--sc-brown); +} +.breadcrumb { + border: 1px solid var(--sc-divider); + border-radius: 0; +} + +/* alerts like the portal */ +.alert { + border: 1px solid; + border-radius: 0; +} +.alert-primary { + color: #43382c !important; + background-color: #e2dfdb !important; + border-color: #d4cec8 !important; +} +.alert-info { + color: #3c535e !important; + background-color: #eaf6fb !important; + border-color: #e0f1f9 !important; +} +.alert-success { + color: #375603; + background-color: #e8f7ce; + border-color: #dcf3b5; +} +.alert-danger { + color: #8f4343; + background-color: #fce2e2; + border-color: #fad4d4; +} +.alert-warning { + color: #885907; + background-color: #f9eace; + border-color: #f7dfb6; +} +.alert-secondary, .alert-light { + color: var(--sc-ink); + background-color: var(--sc-cap); + border-color: var(--sc-divider); +} +.alert .alert-link { + color: inherit; +} +.alert .btn-close { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + opacity: .5; +} + +/* badges and semantic colors, readable text on top */ +.badge { + font-weight: 500; + border-radius: 0; +} +.bg-success { + color: #000 !important; + background-color: var(--sc-green) !important; +} +.bg-warning { + color: #000 !important; + background-color: var(--sc-warning) !important; +} +.bg-danger { + color: #000 !important; + background-color: var(--sc-danger) !important; +} +.badge.bg-secondary, .badge.bg-light { + color: var(--sc-ink); + background-color: var(--sc-addon) !important; +} +.text-success { + color: #4f8a0b !important; +} +.text-danger { + color: var(--sc-danger-text) !important; +} +.text-warning { + color: #9a6100 !important; +} +.progress { + border-radius: 0; +} +.progress-bar { + color: #000; + background-color: var(--sc-green); +} +.progress-bar.bg-danger, .progress-bar-danger { + color: #000; + background-color: var(--sc-danger) !important; +} +.progress-bar-warning { + color: #000; + background-color: var(--sc-warning) !important; +} + +/* login pages (no navbar), green line on top */ +body:not(:has(> .navbar)) { + border-top: 5px solid var(--sc-green); +} + +/* footer */ +.footer, .footer a { + color: var(--sc-muted); +} +.footer hr { + border-color: var(--sc-divider); +} diff --git a/data/web/css/themes/servercow/theme.json b/data/web/css/themes/servercow/theme.json new file mode 100644 index 000000000..31e1a6e80 --- /dev/null +++ b/data/web/css/themes/servercow/theme.json @@ -0,0 +1,4 @@ +{ + "name": "servercow", + "description": "Based on the servercow" +}