Files
docs/src/css/custom.css
T
2026-04-03 19:47:58 +02:00

825 lines
16 KiB
CSS

/* stylelint-disable selector-class-pattern */
/**
* Brutal minimalism theme for Open WebUI docs.
* Inspired by benji.app — typography-first, zero chrome.
*/
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap");
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&display=swap");
/* Tailwind base styles */
@tailwind base;
@tailwind components;
@tailwind utilities;
/* ─── Infima variable overrides ─── */
:root {
--ifm-color-primary: #111;
--ifm-color-primary-dark: #000;
--ifm-color-primary-darker: #000;
--ifm-color-primary-darkest: #000;
--ifm-color-primary-light: #333;
--ifm-color-primary-lighter: #555;
--ifm-color-primary-lightest: #777;
--ifm-link-color: #111;
--ifm-heading-color: #111;
--ifm-font-color-base: #333;
--ifm-code-font-size: 90%;
--docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 6%);
--ifm-hover-overlay: #fafafa;
--ifm-global-shadow-md: none;
--ifm-footer-background-color: #fff;
--ifm-font-family-base:
"Inter", -apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto",
"Helvetica Neue", "Arial", sans-serif;
--ifm-font-size-base: 15px;
--ifm-line-height-base: 1.65;
--ifm-font-weight-base: 400;
--ifm-heading-font-weight: 600;
--ifm-navbar-shadow: none;
--ifm-toc-border-color: transparent;
--ifm-menu-link-padding-horizontal: 0.75rem;
--ifm-menu-link-padding-vertical: 0.35rem;
}
/* Mobile nav height fix */
@media screen and (width <= 996px) {
:root {
--ifm-navbar-height: 100%;
}
}
/* ─── Light theme ─── */
[data-theme="light"] {
--ifm-menu-color: #555;
--ifm-background-color: #fff;
--ifm-navbar-background-color: #fff;
--ifm-footer-color: #999;
}
/* ─── Dark theme ─── */
[data-theme="dark"] {
--ifm-color-primary: #ddd;
--ifm-color-primary-dark: #ccc;
--ifm-color-primary-darker: #bbb;
--ifm-color-primary-darkest: #999;
--ifm-color-primary-light: #eee;
--ifm-color-primary-lighter: #f5f5f5;
--ifm-color-primary-lightest: #fff;
--ifm-link-color: #ccc;
--ifm-heading-color: #eee;
--ifm-font-color-base: #bbb;
--ifm-background-color: #0a0a0a;
--ifm-navbar-background-color: #0a0a0a;
--ifm-footer-background-color: #0a0a0a;
--ifm-footer-color: #555;
--ifm-menu-color: #888;
--docusaurus-highlighted-code-line-bg: rgb(255 255 255 / 8%);
}
/* ─── Global typography ─── */
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
p {
line-height: 1.65;
}
/* ─── Sidebar ─── */
.theme-doc-sidebar-container {
border-width: 0 !important;
}
.navbar-sidebar__brand {
align-items: center;
box-shadow: var(--ifm-navbar-shadow);
display: flex;
flex: 1;
height: fit-content !important;
padding: var(--ifm-navbar-padding-vertical)
var(--ifm-navbar-padding-horizontal);
}
.navbar-sidebar__items {
display: flex;
height: fit-content !important;
transition: transform var(--ifm-transition-fast) ease-in-out;
}
.theme-doc-sidebar-menu.menu__list {
margin-top: 16px;
}
nav.menu {
margin-right: 1px;
padding: 0;
}
nav.menu::-webkit-scrollbar {
display: none;
}
.menu__link {
transition-property: none;
line-height: 1.5;
padding-left: 16px;
margin: 0 8px;
border-radius: 4px;
font-size: 13px;
}
.menu__link--active {
font-weight: 600;
}
[data-theme="light"] .menu__link--active {
color: #111;
background-color: #f5f5f5;
}
[data-theme="dark"] .menu__link--active {
color: #fff;
background-color: #1a1a1a;
}
/* ─── Hide breadcrumbs ─── */
.theme-doc-breadcrumbs {
display: none;
}
/* ─── Hide external link icons ─── */
.iconExternalLink_nPIU,
.iconExternalLink_node_modules-\@docusaurus-theme-classic-lib-theme-Icon-ExternalLink-styles-module {
display: none;
}
/* ─── Code blocks ─── */
code {
color: #444;
border-width: 0;
padding: 2px 6px;
font-size: 0.85em;
font-weight: 500;
border-radius: 4px;
}
[data-theme="dark"] code {
color: #ccc;
background-color: #222;
}
[data-theme="light"] code {
background-color: #ebebeb;
}
.theme-code-block {
font-family: "IBM Plex Mono", monospace;
font-size: 0.875em;
border-radius: 16px !important;
overflow: hidden;
}
.theme-code-block pre {
border-radius: 16px !important;
}
/* ─── Shiki light/dark mode toggle (CSS variables strategy) ─── */
[data-theme="light"] .shiki-code-block pre,
[data-theme="light"] .shiki-code-block pre span {
color: var(--shiki-light) !important;
}
[data-theme="dark"] .shiki-code-block pre,
[data-theme="dark"] .shiki-code-block pre span {
color: var(--shiki-dark) !important;
}
[data-theme="dark"] .shiki-code-block pre {
background-color: var(--shiki-dark-bg, #1a1a1a) !important;
}
/* ─── Shiki code block styling ─── */
.shiki-code-block {
margin-bottom: var(--ifm-leading);
border-radius: 16px;
overflow: hidden;
}
.shiki-code-block code,
.shiki-code-block span {
background-color: transparent !important;
padding: 0;
border-radius: 0;
font-size: inherit;
font-weight: inherit;
}
[data-theme="light"] .shiki-code-block pre {
background-color: #f3f3f3;
}
[data-theme="dark"] .shiki-code-block pre {
background-color: #1a1a1a;
}
.shiki-code-block-content {
position: relative;
direction: ltr;
}
/* ─── Shiki copy button ─── */
.shiki-copy-button {
display: flex;
align-items: center;
position: absolute;
right: calc(var(--ifm-pre-padding) / 2);
top: calc(var(--ifm-pre-padding) / 2);
padding: 0.4rem;
border: 1px solid var(--ifm-color-emphasis-300);
border-radius: var(--ifm-global-radius);
cursor: pointer;
opacity: 0;
transition:
opacity 200ms ease-in-out,
background-color 200ms ease-in-out;
}
[data-theme="light"] .shiki-copy-button {
background: #f3f3f3;
color: #333;
}
[data-theme="dark"] .shiki-copy-button {
background: #1a1a1a;
color: #ccc;
}
.shiki-code-block:hover .shiki-copy-button {
opacity: 0.4;
}
.shiki-copy-button:hover,
.shiki-copy-button:focus-visible {
opacity: 1 !important;
}
[data-theme="light"] .theme-code-block pre {
background-color: #f3f3f3;
}
/* ─── Blockquotes ─── */
blockquote {
padding: 16px 24px;
border-radius: 0;
font-style: normal;
line-height: 1.6;
margin-left: 0;
margin-right: 0;
border-left: 2px solid #e0e0e0;
background: transparent;
}
[data-theme="light"] blockquote {
color: #555;
}
[data-theme="dark"] blockquote {
border-left-color: #333;
color: #999;
}
/* ─── Navbar ─── */
[data-theme="light"] .navbar__brand:hover {
color: #000;
}
[data-theme="dark"] .navbar__brand:hover {
color: #fff;
}
/* ─── Pagination ─── */
.pagination-nav__link {
border-radius: 0;
border: 0;
}
[data-theme="light"] .pagination-nav__link {
border-top: 1px solid #e5e5e5;
}
[data-theme="dark"] .pagination-nav__link {
border-top: 1px solid #333;
}
[data-theme="light"] .pagination-nav__link:hover {
border-top: 1px solid #111;
}
[data-theme="dark"] .pagination-nav__link:hover {
border-top: 1px solid #fff;
}
/* ─── Article links ─── */
article a {
text-decoration: underline;
text-underline-offset: 3px;
}
article p a {
text-decoration: underline;
font-weight: 500;
text-underline-position: under;
margin-bottom: 4px;
}
.notbold a {
font-weight: 400 !important;
}
[data-theme="light"] article p a {
color: #333;
text-decoration-color: #ccc;
}
[data-theme="dark"] article p a {
color: #ccc;
text-decoration-color: #444;
}
[data-theme="light"] article p a:hover {
color: #111;
text-decoration-color: #111;
}
[data-theme="dark"] article p a:hover {
color: #fff;
text-decoration-color: #fff;
}
/* ─── Hero (if used) ─── */
.hero__subtitle {
font-weight: 500;
margin-bottom: 32px;
margin-top: 24px;
}
[data-theme="light"] .hero__subtitle {
color: #333;
}
[data-theme="dark"] .hero__subtitle {
color: #ccc !important;
}
/* ─── Article max width ─── */
@media screen and (width >= 997px) {
article {
max-width: 700px;
margin-left: auto;
margin-right: auto;
padding-top: 20px;
}
}
/* ─── Heading sizes ─── */
@media screen and (width <= 996px) {
h1 {
font-size: 1.5rem !important;
font-weight: 600;
}
.hero .hero__title {
font-size: 2rem;
}
.hero__subtitle {
font-size: 1.2rem;
margin-bottom: 20px;
}
}
@media screen and (width >= 997px) {
h1 {
font-size: 1.75rem !important;
}
h2 {
font-size: 1.35rem !important;
}
h3 {
font-size: 1rem !important;
}
}
/* ─── Tabs ─── */
.tabs__item {
padding: 4px 0;
font-weight: 400;
font-size: 0.85em;
border-radius: 0;
color: #999;
margin-right: 16px;
background-color: transparent;
border: none;
border-bottom: 1px solid transparent;
}
[data-theme="dark"] .tabs__item {
color: #666;
}
.tabs__item:hover {
background-color: transparent;
color: #555;
}
[data-theme="dark"] .tabs__item:hover {
background-color: transparent;
color: #aaa;
}
.tabs__item--active {
border-bottom: 1px solid #111;
background-color: transparent;
color: #111;
font-weight: 500;
}
[data-theme="dark"] .tabs__item--active {
border-bottom-color: #ccc;
background-color: transparent;
color: #ccc;
}
.tabs__item--active:hover {
background-color: transparent;
}
[data-theme="dark"] .tabs__item--active:hover {
background-color: transparent;
}
.tabs {
margin-bottom: 8px;
}
.tabs + .margin-top--md {
margin-top: 4px !important;
}
.tabs + .margin-top--md pre {
border-top-right-radius: 0;
border-top-left-radius: 0;
}
/* ─── Spacing ─── */
.margin-bottom--xl {
margin-bottom: 20px !important;
}
.margin-bottom--sm {
margin-top: 8px !important;
margin-bottom: 8px !important;
}
.hideTabSwitcher {
display: none;
}
/* ─── Horizontal rules ─── */
.markdown hr {
background-color: rgb(120 120 120 / 15%);
}
/* ─── Tables ─── */
div.special_table + table {
border: none;
}
div.special_table + table thead {
background: rgb(120 120 120 / 6%);
overflow: hidden;
}
div.special_table + table thead tr {
background: transparent;
border-top: 0;
border-bottom: 0;
}
th,
td,
div.special_table + table {
border-width: 0 !important;
}
div.special_table + table tr th {
background: transparent;
color: #333;
font-weight: 600;
padding: 6px 20px;
}
[data-theme="dark"] div.special_table + table tr th {
color: #ccc;
}
div.special_table + table tr td {
padding: 6px 20px;
text-align: left;
}
div.special_table + table tr:nth-child(even) {
background: transparent;
}
/* ─── Custom tags ─── */
.custom-tag {
display: inline;
background-color: #f0f0f0;
padding: 2px 8px;
margin-right: 4px;
border-radius: 3px;
font-size: 0.7em;
font-weight: 600;
color: #333;
}
[data-theme="dark"] .custom-tag {
background-color: #1a1a1a;
color: #ccc;
}
.custom-tag:hover {
background-color: #e5e5e5;
}
[data-theme="dark"] .custom-tag:hover {
background-color: #222;
}
.navbar__link:has(div.custom-tag) {
padding: 0;
margin: 0;
margin-left: 4px;
}
/* ─── Sidebar category headers ─── */
.category-header .menu__list-item-collapsible {
pointer-events: none;
}
.category-header .menu__link--sublist {
text-transform: uppercase;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.05em;
margin-top: 32px;
color: #999;
}
.category-header .menu__link--sublist-caret::after {
display: none;
}
.category-link a::after {
content: "\2192";
font-size: 16px;
margin-left: 8px;
position: absolute;
right: 24px;
opacity: 0.25;
}
/* ─── Footer ─── */
.footer__title {
color: #888;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.05em;
font-weight: 600;
}
[data-theme="light"] a.footer__link-item {
color: #666;
}
[data-theme="dark"] a.footer__link-item {
color: #666;
}
a.footer__link-item:hover {
color: #111;
}
[data-theme="dark"] a.footer__link-item:hover {
color: #ccc;
}
.footer--dark {
background-color: #fff;
}
[data-theme="dark"] .footer--dark {
background-color: #0a0a0a;
}
/* ─── Hiring link ─── */
.hiring-link {
background-color: #111;
color: #fff;
font-weight: 500;
padding: 4px 10px;
border-radius: 2px;
font-size: 12px;
}
.footer__item .hiring-link {
margin-top: 16px;
}
/* ─── Main wrapper ─── */
.main-wrapper {
min-height: 100vh;
}
/* ─── Header icon links ─── */
.header-github-link,
.header-discord-link {
gap: 0.25rem;
}
@media screen and (width >= 997px) {
.header-github-link,
.header-discord-link {
font-size: 0;
}
}
.header-discord-link {
margin-right: 12px;
}
.header-github-link::before {
content: "";
width: 20px;
height: 20px;
display: flex;
background-color: var(--ifm-navbar-link-color);
mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");
transition: background-color var(--ifm-transition-fast)
var(--ifm-transition-timing-default);
}
.header-github-link:hover::before {
background-color: var(--ifm-navbar-link-hover-color);
}
.header-discord-link::before {
content: "";
width: 20px;
height: 20px;
display: flex;
background-color: var(--ifm-navbar-link-color);
mask-image: url("data:image/svg+xml,%3Csvg aria-hidden='true' role='img' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' d='M19.73 4.87a18.2 18.2 0 0 0-4.6-1.44c-.21.4-.4.8-.58 1.21-1.69-.25-3.4-.25-5.1 0-.18-.41-.37-.82-.59-1.2-1.6.27-3.14.75-4.6 1.43A19.04 19.04 0 0 0 .96 17.7a18.43 18.43 0 0 0 5.63 2.87c.46-.62.86-1.28 1.2-1.98-.65-.25-1.29-.55-1.9-.92.17-.12.32-.24.47-.37 3.58 1.7 7.7 1.7 11.28 0l.46.37c-.6.36-1.25.67-1.9.92.35.7.75 1.35 1.2 1.98 2.03-.63 3.94-1.6 5.64-2.87.47-4.87-.78-9.09-3.3-12.83ZM8.3 15.12c-1.1 0-2-1.02-2-2.27 0-1.24.88-2.26 2-2.26s2.02 1.02 2 2.26c0 1.25-.89 2.27-2 2.27Zm7.4 0c-1.1 0-2-1.02-2-2.27 0-1.24.88-2.26 2-2.26s2.02 1.02 2 2.26c0 1.25-.88 2.27-2 2.27Z' %3E%3C/path%3E%3C/svg%3E");
transition: background-color var(--ifm-transition-fast)
var(--ifm-transition-timing-default);
}
.header-discord-link:hover::before {
background-color: var(--ifm-navbar-link-hover-color);
}
/* ─── Sidebar menu spacing ─── */
@media screen and (width >= 997px) {
.menu_node_modules-\@docusaurus-theme-classic-lib-theme-DocSidebar-Desktop-Content-styles-module {
padding: 0 !important;
}
.menu__list-item:not(:first-child) {
margin-top: 0;
}
/* Inline TOC hidden on desktop (sidebar TOC visible) */
div[class^="tableOfContentsInline"] {
display: none;
}
}
.docSidebarContainer_node_modules-\@docusaurus-theme-classic-lib-theme-DocPage-Layout-Sidebar-styles-module {
border-right-width: 0 !important;
}
/* ─── Misc ─── */
.small-text {
font-size: 0.8em;
}
.em {
font-style: italic;
}
.select-language {
font-size: 1em;
font-weight: 600;
margin-bottom: 8px;
}
.homepage-svg svg {
height: auto !important;
width: 100% !important;
padding: 20px;
max-width: 180px;
}
[data-theme="light"] .homepage-svg svg {
background-color: #fafafa;
color: #000;
}
[data-theme="dark"] .homepage-svg svg {
background-color: #111 !important;
color: #fff !important;
}
[data-theme="dark"] .homepage-svg path {
filter: invert(1);
}
@media screen and (width >= 997px) {
.hero--container {
padding: 60px 200px;
}
.hero--container-small {
padding: 40px 200px;
}
}
@media screen and (width < 997px) {
.hero--container {
padding: 20px 0 0;
}
.hero--container h2,
.hero--container-small h2 {
font-size: 1.2em;
}
.hero--container-small {
padding: 20px 40px;
}
.index-buttons {
display: flex;
flex-direction: column;
align-items: center;
}
.index-buttons a {
margin-bottom: 10px;
}
.homepage-svg svg {
max-width: 120px;
margin-left: 15px;
}
}
.hero--container-small img {
max-width: 100%;
}
.index-buttons {
padding: 0 !important;
}
[data-theme="light"] .hero--bg {
background-color: #fafafa;
}
[data-theme="dark"] .hero--bg {
background-color: #111 !important;
}
.btn--black {
background-color: #111;
color: #fff;
border-radius: 2px;
}
.btn--black:hover {
background-color: #000;
color: #fff;
}
.btn--landing {
border-radius: 2px;
margin-right: 8px;
margin-left: 8px;
border-color: #111;
}