From 3940c1be283d5e26fed18ee719f877af00f531b3 Mon Sep 17 00:00:00 2001 From: Robert James Date: Wed, 7 Oct 2026 17:37:52 +0000 Subject: [PATCH] Add StarshipOS branding and global dark theme to both XWiki instances - Global high-contrast dark theme (#000000 bg / #ffffff fg) via cssVariablesInit.min.css override for xwiki-org and xwiki-com - StarshipOS SVG logo (Santino Shiba Inu badge + logotype) - SVG, 16px and 144px PNG favicons from the same badge design - docker-compose.yml bind-mounts all assets so changes survive restarts Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 6 + docker-compose.yml | 118 +++++++++++++ favicon.svg | 63 +++++++ favicon144.png | Bin 0 -> 21255 bytes favicon16.png | Bin 0 -> 901 bytes logo.svg | 85 ++++++++++ xwiki-com/cssVariablesInit.min.css | 260 +++++++++++++++++++++++++++++ xwiki-org/cssVariablesInit.min.css | 260 +++++++++++++++++++++++++++++ 8 files changed, 792 insertions(+) create mode 100644 .gitignore create mode 100644 docker-compose.yml create mode 100644 favicon.svg create mode 100644 favicon144.png create mode 100644 favicon16.png create mode 100644 logo.svg create mode 100644 xwiki-com/cssVariablesInit.min.css create mode 100644 xwiki-org/cssVariablesInit.min.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e504284 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.env +gitea/ +nexus/ +postgres/data/ +xwiki-org/data/ +xwiki-com/data/ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3f00d03 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,118 @@ +services: + + postgres: + image: postgres:16 + container_name: strshipos-postgres + restart: unless-stopped + environment: + POSTGRES_PASSWORD: ${POSTGRES_ROOT_PASSWORD} + volumes: + - ./postgres/data:/var/lib/postgresql/data + - ./postgres/init:/docker-entrypoint-initdb.d:ro + networks: + - internal + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + gitea: + image: gitea/gitea:latest + container_name: strshipos-gitea + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=postgres:5432 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=${GITEA_DB_PASSWORD} + - GITEA__server__DOMAIN=gitea.strshipos.com + - GITEA__server__SSH_DOMAIN=gitea.strshipos.com + - GITEA__server__ROOT_URL=https://gitea.strshipos.com/ + - GITEA__server__HTTP_PORT=3000 + - GITEA__server__SSH_PORT=2222 + - GITEA__server__SSH_LISTEN_PORT=22 + - GITEA__security__SECRET_KEY=${GITEA_SECRET_KEY} + - GITEA__service__DISABLE_REGISTRATION=false + volumes: + - ./gitea/data:/data + ports: + - "127.0.0.1:3000:3000" + - "0.0.0.0:2222:22" + networks: + - internal + + nexus: + image: sonatype/nexus3:latest + container_name: strshipos-nexus + restart: unless-stopped + environment: + - INSTALL4J_ADD_VM_PARAMS=-Xms256m -Xmx768m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/jvm + volumes: + - ./nexus/data:/nexus-data + ports: + - "127.0.0.1:8081:8081" + networks: + - internal + + xwiki-org: + image: xwiki:lts-postgres-tomcat + container_name: strshipos-xwiki-org + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + environment: + - DB_HOST=postgres + - DB_PORT=5432 + - DB_DATABASE=xwiki_org + - DB_USER=xwiki_org + - DB_PASSWORD=${XWIKI_ORG_DB_PASSWORD} + - JAVA_OPTS=-Xms256m -Xmx512m + volumes: + - ./xwiki-org/data:/usr/local/xwiki + - ./xwiki-org/cssVariablesInit.min.css:/usr/local/tomcat/webapps/ROOT/skins/flamingo/cssVariablesInit.min.css + - ./logo.svg:/usr/local/tomcat/webapps/ROOT/skins/flamingo/logo.svg + - ./favicon.svg:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon.svg + - ./favicon16.png:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon16.png + - ./favicon144.png:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon144.png + ports: + - "127.0.0.1:8090:8080" + networks: + - internal + + xwiki-com: + image: xwiki:lts-postgres-tomcat + container_name: strshipos-xwiki-com + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + environment: + - DB_HOST=postgres + - DB_PORT=5432 + - DB_DATABASE=xwiki_com + - DB_USER=xwiki_com + - DB_PASSWORD=${XWIKI_COM_DB_PASSWORD} + - JAVA_OPTS=-Xms256m -Xmx512m + volumes: + - ./xwiki-com/data:/usr/local/xwiki + - ./xwiki-com/cssVariablesInit.min.css:/usr/local/tomcat/webapps/ROOT/skins/flamingo/cssVariablesInit.min.css + - ./logo.svg:/usr/local/tomcat/webapps/ROOT/skins/flamingo/logo.svg + - ./favicon.svg:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon.svg + - ./favicon16.png:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon16.png + - ./favicon144.png:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon144.png + ports: + - "127.0.0.1:8091:8080" + networks: + - internal + +networks: + internal: + driver: bridge diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 0000000..45f49fb --- /dev/null +++ b/favicon.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SANTINO + + + + starshipOS + + diff --git a/favicon144.png b/favicon144.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca2b0dbd506d54ec1445ec9760a7d0c3b777590 GIT binary patch literal 21255 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SANTINO + + + + starshipOS + + + + + starship + + OS + + + diff --git a/xwiki-com/cssVariablesInit.min.css b/xwiki-com/cssVariablesInit.min.css new file mode 100644 index 0000000..1639088 --- /dev/null +++ b/xwiki-com/cssVariablesInit.min.css @@ -0,0 +1,260 @@ +/*! +## --------------------------------------------------------------------------- +## See the NOTICE file distributed with this work for additional +## information regarding copyright ownership. +## +## This is free software; you can redistribute it and/or modify it +## under the terms of the GNU Lesser General Public License as +## published by the Free Software Foundation; either version 2.1 of +## the License, or (at your option) any later version. +## +## This software is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this software; if not, write to the Free +## Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +## 02110-1301 USA, or see the FSF site: http://www.fsf.org. +## --------------------------------------------------------------------------- +## The variables defined in this file were added in XWiki 17.3.0-RC1 +## Those variables will become stable at the end of the cycle 17. + +###################### +## Preparation +###################### +#set ($themeDocFullName = "$!xwiki.getUserPreference('colorTheme')") +#if ($themeDocFullName == '') +#set ($themeDocFullName = 'ColorThemes.DefaultColorTheme') +#end +#set ($themeDoc = $xwiki.getDocument($themeDocFullName)) +#set ($themeObj = $themeDoc.getObject('FlamingoThemesCode.ThemeClass')) + +## List of all the new variables added to the CSS property set (from oldest to latest). +## Those variables do not have a LESS variable equivalent in previous systems. They were introduced mostly to replace +## whole mixins. There should be no overlap between this category of variables and the others. +## List of versions where variables were introduced: +## * 17.3.0RC1: 100vw, int-viewport-width, font-weight-regular, font-weight-semibold, font-weight-bold +## * 17.9.0RC1: login-form-max-width +#set($newVariables = { +"100vw": "100vw", +"int-viewport-width": "calc(10000 * tan(atan2(var(--100vw), 10000px)))", +"login-form-max-width": "450px", +"font-weight-regular": 400, +"font-weight-semibold": 700, +"font-weight-bold": "900" +}) + +## Retrieve the lists of variables +#template('variablelist.vm') +## If you want to update the values set for the old colortheme, see colorThemeInit.vm, a source of truth shared +## with LESS variables defined in xwiki-platform-flamingo-skin-resources -> variablesInit.vm -> initFromOldColorTheme +## A couple variables are excluded from the set, we do not port them to CSS +#set($excludeFromOldColorThemeMapping = ['xwiki-panel-header-bg', 'xwiki-panel-header-text']) +#foreach($excludedVariable in $excludeFromOldColorThemeMapping) + #set($discard = $oldColorThemeVariables.remove($excludedVariable)) +#end + +## $flamingoColorThemeVariables is the list of all the variables available to customize directly in the Flamingo +## theme editor. These mappings will not always end up in the initialization of a CSS variable. +## If you want to update the values set for the flamingo colortheme, see the colortheme xml, +## a source of truth shared with LESS variables, defined in xwiki-platform-flamingo-theme-ui +## To make sure all of those variables are still available even when not set in the colortheme, +## we make sure that they all appear in another mapping above. +## The key is the name and the value is a type for the variable. + +## $xsVariablesValuesCSS is the list of all the variables set in XWiki standard for various purposes. +## Those should all be defined in variables.less and variablesInit.vm +## Some values are changed from the bootstrap default in order to make sure there's no accessibility contrast issue +## The key is their name and the value is the string representing the value in CSS syntax. +## The equivalent LESS variables should be available in: xwiki-platform-flamingo-skin-resources-->variables.less + + +## $bootstrapVariables is the list of Bootstrap variables we need to give default values for XWiki standard variables +## The key is their name and the value is the string representing the value in CSS syntax. +## The equivalent LESS variables are available in: xwiki-platform-bootstrap-->variables.less + +## We merge the four maps into one list. +## We allow different values from different maps for the same variable. This is an extra fallback in case the first one +## doesn't work. This could be the case for defaults that rely on other variables. +## Values follow CSS cascading order (last one wins). +#set($variableValueSets = [$oldColorThemeVariables, $bootstrapVariables, $xsVariablesValuesCSS, $newVariables]) + +###################### +## Generation +###################### + +#define($css) +## We use a tan/arctan2 hack to get a proper unitless viewport width. This hack can be avoided when the CSS Values and +## Units module Level 4 is accepted and supported in browsers. +## https://drafts.csswg.org/css-values/#calc-type-checking +@property --100vw { + syntax: ""; + initial-value: 0px; + inherits: false; +} + +:root { +## First, we make sure that the necessary variables from bootstrap and XS are given at least one value. +#foreach($variableWithValue in $variableValueSets) + #foreach($variableName in $variableWithValue.keySet()) + #set($value = $variableWithValue.get($variableName)) + #if("$!value" != '') + --$variableName: $!value; + #end + #end +#end + +## Create CSS variables for each flamingo colorTheme variable that is set. +## Right now we have the variable type info for all of those, but we don't use those yet. +## Those values will override anything already declared in the XS/bootstrap defaults. +#foreach($property in $flamingoColorThemeVariables.keySet()) +#set($value = $themeDoc.getValue($property, $themeObj)) +#if("$!value" != '') +## If the value we want to set is a LESS variables, we make sure to convert it into a CSS variable. +#if($stringtool.startsWith($!value, '@')) +#set($value = 'var(--' + $stringtool.substring($value, 1) + ')') +#end +#set($propertyType = $flamingoColorThemeVariables.get($property)) +## For now we only use `string` variables, because it's the easiest to setup and because it's 100% compatible with +## LESS variables. We could use the extra info we have on the variable types to use the @property syntax later. +#if($propertyType == 'escapedText') +--$property: "$escapetool.javascript($!value)"; +#else +--$property: $!value; +#end +#end +#end +} +#end +*/$!css + +/* ===== HIGH CONTRAST DARK THEME ===== */ +:root { + --body-bg: #000000; + --xwiki-page-content-bg: #000000; + --xwiki-background-secondary-color: #000000; + --xwiki-page-header-bg-color: #000000; + --panel-bg: #000000; + --panel-header-bg: #000000; + --panel-header-text: #ffffff; + --panel-default-text: #ffffff; + --text-color: #ffffff; + --headings-color: #ffffff; + --link-color: #ffffff; + --navbar-default-bg: #000000; + --navbar-default-color: #ffffff; + --navbar-default-link-color: #ffffff; + --navbar-default-link-hover-color: #ffffff; + --navbar-default-link-hover-bg: #000000; + --navbar-default-link-active-bg: #000000; + --navbar-default-link-active-color: #ffffff; + --navbar-default-link-disabled-color: #ffffff; + --dropdown-bg: #000000; + --dropdown-link-color: #ffffff; + --dropdown-link-hover-bg: #000000; + --dropdown-link-hover-color: #ffffff; + --dropdown-border: rgba(255,255,255,0.8); + --dropdown-divider-bg: #ffffff; + --input-bg: #000000; + --input-color: #ffffff; + --input-border: #ffffff; + --input-border-focus: #ffffff; + --input-color-placeholder: #ffffff; + --breadcrumb-bg: #000000; + --breadcrumb-link-color: #ffffff; + --breadcrumb-color: #ffffff; + --btn-default-bg: #000000; + --btn-default-color: #ffffff; + --btn-default-border: #ffffff; + --btn-primary-bg: #000000; + --btn-primary-color: #ffffff; + --table-bg: #000000; + --table-border-color: #ffffff; + --table-bg-hover: #000000; + --xwiki-border-color: #ffffff; + --nav-tabs-border-color: #ffffff; + --nav-tabs-active-link-hover-border-color: #ffffff; + --nav-tabs-active-link-hover-bg: #000000; + --nav-link-hover-bg: #000000; + --list-group-border: #ffffff; + --pagination-border: #ffffff; + --pagination-hover-border: #ffffff; + --pagination-disabled-border: #ffffff; + --thumbnail-border: #ffffff; + --legend-border-color: #ffffff; + --legend-color: #ffffff; + --navbar-default-toggle-border-color: #ffffff; +} + +*, *::before, *::after, +html, body, +.main, #mainContentArea, #xwikicontent, .xwikicontent, +.wiki-content, .content-body, .xcontent, #body, +.main-container, .container, .container-fluid, +.panel, .panel-body, .panel-default, .panel-heading, .panel-footer, +.navbar, .navbar-default, .navbar-header, .navbar-collapse, +header, .header, #header, +footer, .footer, #footer, +.sidebar, #leftPanels, #rightPanels, +.breadcrumb, +.dropdown-menu, +.modal-content, .modal-header, .modal-body, .modal-footer, +.alert, .infomessage, .warningmessage, .errormessage, .successmessage, +.drawer-nav, .drawer-overlay, +.popover, .popover-content, +.tab-content, .nav-tabs, .nav-pills, +.list-group, .list-group-item, +.well, +.page-header, +.actionmenu, #actionmenu { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +a, a:visited, a:hover, a:focus, +.navbar a, .navbar .nav > li > a, +.dropdown-menu > li > a, +.nav > li > a, +.breadcrumb > li > a, +.list-group-item, +.panel-title a { + color: #ffffff !important; +} + +table, th, td, tr, thead, tbody, tfoot { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +input, textarea, select, .form-control, +input[type=text], input[type=password], input[type=email], +input[type=search], input[type=number], input[type=url] { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +input::placeholder, textarea::placeholder { color: #ffffff !important; opacity: 1 !important; } + +.btn, button, input[type=submit], input[type=button], input[type=reset] { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +pre, code, .code, .box, .code-block, kbd, samp { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +hr { border-color: #ffffff !important; } + +img { filter: brightness(0.9) contrast(1.1); } + +svg text, svg tspan { fill: #ffffff !important; } +/* ===== END HIGH CONTRAST DARK THEME ===== */ \ No newline at end of file diff --git a/xwiki-org/cssVariablesInit.min.css b/xwiki-org/cssVariablesInit.min.css new file mode 100644 index 0000000..1639088 --- /dev/null +++ b/xwiki-org/cssVariablesInit.min.css @@ -0,0 +1,260 @@ +/*! +## --------------------------------------------------------------------------- +## See the NOTICE file distributed with this work for additional +## information regarding copyright ownership. +## +## This is free software; you can redistribute it and/or modify it +## under the terms of the GNU Lesser General Public License as +## published by the Free Software Foundation; either version 2.1 of +## the License, or (at your option) any later version. +## +## This software is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this software; if not, write to the Free +## Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +## 02110-1301 USA, or see the FSF site: http://www.fsf.org. +## --------------------------------------------------------------------------- +## The variables defined in this file were added in XWiki 17.3.0-RC1 +## Those variables will become stable at the end of the cycle 17. + +###################### +## Preparation +###################### +#set ($themeDocFullName = "$!xwiki.getUserPreference('colorTheme')") +#if ($themeDocFullName == '') +#set ($themeDocFullName = 'ColorThemes.DefaultColorTheme') +#end +#set ($themeDoc = $xwiki.getDocument($themeDocFullName)) +#set ($themeObj = $themeDoc.getObject('FlamingoThemesCode.ThemeClass')) + +## List of all the new variables added to the CSS property set (from oldest to latest). +## Those variables do not have a LESS variable equivalent in previous systems. They were introduced mostly to replace +## whole mixins. There should be no overlap between this category of variables and the others. +## List of versions where variables were introduced: +## * 17.3.0RC1: 100vw, int-viewport-width, font-weight-regular, font-weight-semibold, font-weight-bold +## * 17.9.0RC1: login-form-max-width +#set($newVariables = { +"100vw": "100vw", +"int-viewport-width": "calc(10000 * tan(atan2(var(--100vw), 10000px)))", +"login-form-max-width": "450px", +"font-weight-regular": 400, +"font-weight-semibold": 700, +"font-weight-bold": "900" +}) + +## Retrieve the lists of variables +#template('variablelist.vm') +## If you want to update the values set for the old colortheme, see colorThemeInit.vm, a source of truth shared +## with LESS variables defined in xwiki-platform-flamingo-skin-resources -> variablesInit.vm -> initFromOldColorTheme +## A couple variables are excluded from the set, we do not port them to CSS +#set($excludeFromOldColorThemeMapping = ['xwiki-panel-header-bg', 'xwiki-panel-header-text']) +#foreach($excludedVariable in $excludeFromOldColorThemeMapping) + #set($discard = $oldColorThemeVariables.remove($excludedVariable)) +#end + +## $flamingoColorThemeVariables is the list of all the variables available to customize directly in the Flamingo +## theme editor. These mappings will not always end up in the initialization of a CSS variable. +## If you want to update the values set for the flamingo colortheme, see the colortheme xml, +## a source of truth shared with LESS variables, defined in xwiki-platform-flamingo-theme-ui +## To make sure all of those variables are still available even when not set in the colortheme, +## we make sure that they all appear in another mapping above. +## The key is the name and the value is a type for the variable. + +## $xsVariablesValuesCSS is the list of all the variables set in XWiki standard for various purposes. +## Those should all be defined in variables.less and variablesInit.vm +## Some values are changed from the bootstrap default in order to make sure there's no accessibility contrast issue +## The key is their name and the value is the string representing the value in CSS syntax. +## The equivalent LESS variables should be available in: xwiki-platform-flamingo-skin-resources-->variables.less + + +## $bootstrapVariables is the list of Bootstrap variables we need to give default values for XWiki standard variables +## The key is their name and the value is the string representing the value in CSS syntax. +## The equivalent LESS variables are available in: xwiki-platform-bootstrap-->variables.less + +## We merge the four maps into one list. +## We allow different values from different maps for the same variable. This is an extra fallback in case the first one +## doesn't work. This could be the case for defaults that rely on other variables. +## Values follow CSS cascading order (last one wins). +#set($variableValueSets = [$oldColorThemeVariables, $bootstrapVariables, $xsVariablesValuesCSS, $newVariables]) + +###################### +## Generation +###################### + +#define($css) +## We use a tan/arctan2 hack to get a proper unitless viewport width. This hack can be avoided when the CSS Values and +## Units module Level 4 is accepted and supported in browsers. +## https://drafts.csswg.org/css-values/#calc-type-checking +@property --100vw { + syntax: ""; + initial-value: 0px; + inherits: false; +} + +:root { +## First, we make sure that the necessary variables from bootstrap and XS are given at least one value. +#foreach($variableWithValue in $variableValueSets) + #foreach($variableName in $variableWithValue.keySet()) + #set($value = $variableWithValue.get($variableName)) + #if("$!value" != '') + --$variableName: $!value; + #end + #end +#end + +## Create CSS variables for each flamingo colorTheme variable that is set. +## Right now we have the variable type info for all of those, but we don't use those yet. +## Those values will override anything already declared in the XS/bootstrap defaults. +#foreach($property in $flamingoColorThemeVariables.keySet()) +#set($value = $themeDoc.getValue($property, $themeObj)) +#if("$!value" != '') +## If the value we want to set is a LESS variables, we make sure to convert it into a CSS variable. +#if($stringtool.startsWith($!value, '@')) +#set($value = 'var(--' + $stringtool.substring($value, 1) + ')') +#end +#set($propertyType = $flamingoColorThemeVariables.get($property)) +## For now we only use `string` variables, because it's the easiest to setup and because it's 100% compatible with +## LESS variables. We could use the extra info we have on the variable types to use the @property syntax later. +#if($propertyType == 'escapedText') +--$property: "$escapetool.javascript($!value)"; +#else +--$property: $!value; +#end +#end +#end +} +#end +*/$!css + +/* ===== HIGH CONTRAST DARK THEME ===== */ +:root { + --body-bg: #000000; + --xwiki-page-content-bg: #000000; + --xwiki-background-secondary-color: #000000; + --xwiki-page-header-bg-color: #000000; + --panel-bg: #000000; + --panel-header-bg: #000000; + --panel-header-text: #ffffff; + --panel-default-text: #ffffff; + --text-color: #ffffff; + --headings-color: #ffffff; + --link-color: #ffffff; + --navbar-default-bg: #000000; + --navbar-default-color: #ffffff; + --navbar-default-link-color: #ffffff; + --navbar-default-link-hover-color: #ffffff; + --navbar-default-link-hover-bg: #000000; + --navbar-default-link-active-bg: #000000; + --navbar-default-link-active-color: #ffffff; + --navbar-default-link-disabled-color: #ffffff; + --dropdown-bg: #000000; + --dropdown-link-color: #ffffff; + --dropdown-link-hover-bg: #000000; + --dropdown-link-hover-color: #ffffff; + --dropdown-border: rgba(255,255,255,0.8); + --dropdown-divider-bg: #ffffff; + --input-bg: #000000; + --input-color: #ffffff; + --input-border: #ffffff; + --input-border-focus: #ffffff; + --input-color-placeholder: #ffffff; + --breadcrumb-bg: #000000; + --breadcrumb-link-color: #ffffff; + --breadcrumb-color: #ffffff; + --btn-default-bg: #000000; + --btn-default-color: #ffffff; + --btn-default-border: #ffffff; + --btn-primary-bg: #000000; + --btn-primary-color: #ffffff; + --table-bg: #000000; + --table-border-color: #ffffff; + --table-bg-hover: #000000; + --xwiki-border-color: #ffffff; + --nav-tabs-border-color: #ffffff; + --nav-tabs-active-link-hover-border-color: #ffffff; + --nav-tabs-active-link-hover-bg: #000000; + --nav-link-hover-bg: #000000; + --list-group-border: #ffffff; + --pagination-border: #ffffff; + --pagination-hover-border: #ffffff; + --pagination-disabled-border: #ffffff; + --thumbnail-border: #ffffff; + --legend-border-color: #ffffff; + --legend-color: #ffffff; + --navbar-default-toggle-border-color: #ffffff; +} + +*, *::before, *::after, +html, body, +.main, #mainContentArea, #xwikicontent, .xwikicontent, +.wiki-content, .content-body, .xcontent, #body, +.main-container, .container, .container-fluid, +.panel, .panel-body, .panel-default, .panel-heading, .panel-footer, +.navbar, .navbar-default, .navbar-header, .navbar-collapse, +header, .header, #header, +footer, .footer, #footer, +.sidebar, #leftPanels, #rightPanels, +.breadcrumb, +.dropdown-menu, +.modal-content, .modal-header, .modal-body, .modal-footer, +.alert, .infomessage, .warningmessage, .errormessage, .successmessage, +.drawer-nav, .drawer-overlay, +.popover, .popover-content, +.tab-content, .nav-tabs, .nav-pills, +.list-group, .list-group-item, +.well, +.page-header, +.actionmenu, #actionmenu { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +a, a:visited, a:hover, a:focus, +.navbar a, .navbar .nav > li > a, +.dropdown-menu > li > a, +.nav > li > a, +.breadcrumb > li > a, +.list-group-item, +.panel-title a { + color: #ffffff !important; +} + +table, th, td, tr, thead, tbody, tfoot { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +input, textarea, select, .form-control, +input[type=text], input[type=password], input[type=email], +input[type=search], input[type=number], input[type=url] { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +input::placeholder, textarea::placeholder { color: #ffffff !important; opacity: 1 !important; } + +.btn, button, input[type=submit], input[type=button], input[type=reset] { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +pre, code, .code, .box, .code-block, kbd, samp { + background-color: #000000 !important; + color: #ffffff !important; + border-color: #ffffff !important; +} + +hr { border-color: #ffffff !important; } + +img { filter: brightness(0.9) contrast(1.1); } + +svg text, svg tspan { fill: #ffffff !important; } +/* ===== END HIGH CONTRAST DARK THEME ===== */ \ No newline at end of file