Files
superset2/docs/src/styles/custom.css
2026-02-26 13:29:08 -08:00

477 lines
13 KiB
CSS

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
@font-face {
font-family: 'Roboto';
src: url('../fonts/Roboto-Regular.woff2') format('woff2'),
url('../fonts/Roboto-Regular.woff') format('woff');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Roboto';
src: url('../fonts/Roboto-Bold.woff2') format('woff2'),
url('../fonts/Roboto-Bold.woff') format('woff');
font-weight: 700;
font-style: bold;
}
/* Hiding ugly linkout icons */
ul.dropdown__menu svg {
display: none;
}
/* Consistent dropdown styling for navbar */
.navbar__item.dropdown .dropdown__menu {
background-color: white;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.navbar__item.dropdown .dropdown__link {
color: #1c1e21 !important;
background-color: transparent !important;
border-radius: 0 !important;
padding: 0.5rem 1rem !important;
display: block !important;
}
.navbar__item.dropdown .dropdown__link:hover {
background-color: #f5f5f5 !important;
color: #1c1e21 !important;
text-decoration: none !important;
}
/* Style active doc links in dropdowns with primary color instead of blue box */
.navbar__item.dropdown .dropdown__link--active {
background-color: transparent !important;
color: var(--ifm-color-primary) !important;
font-weight: 600;
}
.navbar__item.dropdown .dropdown__link--active:hover {
background-color: #f5f5f5 !important;
}
/* Active section indicator — full-height underline */
.navbar {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
@media (min-width: 997px) {
.navbar__item.dropdown:has(> .navbar__link) {
display: flex;
height: 100%;
align-items: center;
padding-bottom: 0 !important;
}
}
.navbar__item.dropdown:has(> .navbar__link.active) {
box-shadow: inset 0 -2px 0 var(--ifm-color-primary);
}
/* Dark mode support */
[data-theme='dark'] .navbar__item.dropdown .dropdown__menu {
background-color: #242526;
border: 1px solid rgba(255, 255, 255, 0.1);
}
[data-theme='dark'] .navbar__item.dropdown .dropdown__link {
color: #f5f6f7 !important;
}
[data-theme='dark'] .navbar__item.dropdown .dropdown__link:hover {
background-color: #3a3b3c !important;
color: #f5f6f7 !important;
}
[data-theme='dark'] .navbar__item.dropdown .dropdown__link--active {
color: #f5f6f7 !important;
}
[data-theme='dark'] .navbar__item.dropdown .dropdown__link--active:hover {
background-color: #3a3b3c !important;
}
:root {
--ifm-color-primary: #20a7c9;
--ifm-color-primary-dark: #1985a0;
--ifm-color-primary-darker: #t;
--ifm-color-primary-darkest: #ffffff;
--ifm-color-primary-light: #79cade;
--ifm-color-primary-lighter: #a5dbe9;
--ifm-color-primary-lightest: #d2edf4;
--ifm-font-base-color: #484848;
--ifm-font-base-color-inverse: #ffffff;
--ifm-code-font-size: 95%;
--ifm-menu-link-padding-vertical: 12px;
--doc-sidebar-width: 350px !important;
--ifm-font-family-base: Roboto;
--ifm-footer-background-color: #173036;
--ifm-footer-color: #87939a;
--ifm-off-section-background: #fbfbfb;
--ifm-border-color: #ededed;
--ifm-primary-text: #484848;
--ifm-secondary-text: #5f5f5f;
--ifm-code-padding-vertical: 3px;
--ifm-code-padding-horizontal: 5px;
}
/* Database logo images in intro/README */
.database-logo {
object-fit: contain;
}
[data-theme='dark'] {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: #21af90;
--ifm-color-primary-darker: #1fa588;
--ifm-color-primary-darkest: #1a8870;
--ifm-color-primary-light: #29d5b0;
--ifm-color-primary-lighter: #32d8b4;
--ifm-color-primary-lightest: #4fddbf;
--ifm-font-base-color: #bbb5ac;
--ifm-border-color: #797063;
}
/* Custom "resources" admonition for additional resources/links */
.alert--resources {
--ifm-alert-background-color: #f8f9fa;
--ifm-alert-border-color: #6c757d;
--ifm-alert-foreground-color: #495057;
background-color: var(--ifm-alert-background-color);
border-left: 5px solid var(--ifm-alert-border-color);
}
.alert--resources .admonition-heading h5 {
color: var(--ifm-alert-foreground-color);
}
.alert--resources .admonition-icon svg {
fill: var(--ifm-alert-foreground-color);
stroke: var(--ifm-alert-foreground-color);
}
/* Resources admonition - dark mode */
[data-theme='dark'] .alert--resources {
--ifm-alert-background-color: #2d3748;
--ifm-alert-border-color: #718096;
--ifm-alert-foreground-color: #e2e8f0;
}
/* Style links within resources admonition */
.alert--resources a {
color: var(--ifm-link-color);
text-decoration: none;
}
.alert--resources a:hover {
text-decoration: underline;
}
[data-theme='dark'] .alert--resources a {
color: var(--ifm-color-primary-light);
}
/* Fix Ant Design Collapse arrow visibility in dark mode */
[data-theme='dark'] .ant-collapse-expand-icon {
color: var(--ifm-font-base-color);
}
[data-theme='dark'] .ant-collapse-header {
color: var(--ifm-font-base-color);
}
/* Hide the non-functional "Send API Request" button and Response block in API docs */
/* The interactive API testing doesn't work due to CORS restrictions */
.openapi-explorer__request-btn {
display: none !important;
}
.openapi-explorer__response-container {
display: none !important;
}
/* API Method Badge Colors - Swagger-style color coding */
/* These override Infima badge classes used by docusaurus-openapi-docs */
/* GET - Blue (badge--primary) */
.openapi__method-endpoint .badge--primary {
background-color: #61affe !important;
border-color: #61affe !important;
}
/* POST - Green (badge--success) */
.openapi__method-endpoint .badge--success {
background-color: #49cc90 !important;
border-color: #49cc90 !important;
}
/* PUT - Info/Cyan -> Orange (badge--info) */
.openapi__method-endpoint .badge--info {
background-color: #fca130 !important;
border-color: #fca130 !important;
}
/* PATCH - Warning/Yellow -> Teal (badge--warning) */
.openapi__method-endpoint .badge--warning {
background-color: #50e3c2 !important;
border-color: #50e3c2 !important;
color: #1b1b1d !important;
}
/* DELETE - Red (badge--danger) */
.openapi__method-endpoint .badge--danger {
background-color: #f93e3e !important;
border-color: #f93e3e !important;
}
/* Sidebar method badges - colored dots before endpoint names */
/* The method classes (get, post, etc.) are on the <li> (menu__list-item),
so we target the <a> (menu__link) inside using descendant selector */
.menu__list-item.api-method > .menu__link::before {
content: '';
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
margin-right: 8px;
flex-shrink: 0;
}
.menu__list-item.get.api-method > .menu__link::before {
background-color: #61affe;
}
.menu__list-item.post.api-method > .menu__link::before {
background-color: #49cc90;
}
.menu__list-item.put.api-method > .menu__link::before {
background-color: #fca130;
}
.menu__list-item.patch.api-method > .menu__link::before {
background-color: #50e3c2;
}
.menu__list-item.delete.api-method > .menu__link::before {
background-color: #f93e3e;
}
/* ============================================
Component Example Isolation
Prevents Docusaurus/Infima styles from bleeding into Superset components
============================================ */
/* Reset link styles inside component examples */
.storybook-example a {
color: inherit;
text-decoration: none;
font-weight: inherit;
line-height: inherit;
vertical-align: inherit;
}
.storybook-example a:hover {
color: inherit;
text-decoration: none;
}
/* Reset list styles */
.storybook-example ul,
.storybook-example ol {
margin: 0;
padding: 0;
list-style: none;
}
/* Override Infima's .markdown li + li margin */
.storybook-example li + li,
.markdown .storybook-example li + li {
margin-top: 0;
}
/* Reset heading styles */
.storybook-example h1,
.storybook-example h2,
.storybook-example h3,
.storybook-example h4,
.storybook-example h5,
.storybook-example h6 {
margin: 0;
font-size: inherit;
font-weight: inherit;
}
/* Reset paragraph margins */
.storybook-example p {
margin: 0;
}
/* Reset table margins - Infima applies margin-bottom via --ifm-spacing-vertical */
.storybook-example table {
margin: 0;
display: table;
}
/* Ensure Ant Design components render correctly */
.storybook-example .ant-breadcrumb {
line-height: 1.5715;
}
.storybook-example .ant-breadcrumb a {
color: rgba(0, 0, 0, 0.45);
}
.storybook-example .ant-breadcrumb a:hover {
color: rgba(0, 0, 0, 0.85);
}
/* ============================================
Ant Design Popup/Portal Isolation
These components render outside .storybook-example via portals
============================================ */
/* DatePicker, TimePicker dropdown panels - reset Infima table styles
Using doubled selectors for higher specificity than Infima's defaults */
.ant-picker-dropdown.ant-picker-dropdown table,
.ant-picker-dropdown.ant-picker-dropdown thead,
.ant-picker-dropdown.ant-picker-dropdown tbody,
.ant-picker-dropdown.ant-picker-dropdown tr,
.ant-picker-dropdown.ant-picker-dropdown th,
.ant-picker-dropdown.ant-picker-dropdown td {
border: none;
background: none;
background-color: transparent;
}
.ant-picker-dropdown.ant-picker-dropdown table {
border-collapse: separate;
border-spacing: 0;
width: 100%;
display: table;
}
/* Override Infima's zebra striping with higher specificity */
.ant-picker-dropdown.ant-picker-dropdown tr:nth-child(2n),
.ant-picker-dropdown.ant-picker-dropdown tbody tr:nth-child(2n) {
background: none;
background-color: transparent;
}
.ant-picker-dropdown.ant-picker-dropdown th,
.ant-picker-dropdown.ant-picker-dropdown td {
padding: 0;
}
/* Select, Dropdown, Popover portals */
.ant-select-dropdown.ant-select-dropdown table,
.ant-select-dropdown.ant-select-dropdown thead,
.ant-select-dropdown.ant-select-dropdown tbody,
.ant-select-dropdown.ant-select-dropdown tr,
.ant-select-dropdown.ant-select-dropdown th,
.ant-select-dropdown.ant-select-dropdown td,
.ant-dropdown.ant-dropdown table,
.ant-dropdown.ant-dropdown thead,
.ant-dropdown.ant-dropdown tbody,
.ant-dropdown.ant-dropdown tr,
.ant-dropdown.ant-dropdown th,
.ant-dropdown.ant-dropdown td,
.ant-popover.ant-popover table,
.ant-popover.ant-popover thead,
.ant-popover.ant-popover tbody,
.ant-popover.ant-popover tr,
.ant-popover.ant-popover th,
.ant-popover.ant-popover td {
border: none;
background: none;
background-color: transparent;
}
.ant-select-dropdown.ant-select-dropdown tr:nth-child(2n),
.ant-dropdown.ant-dropdown tr:nth-child(2n),
.ant-popover.ant-popover tr:nth-child(2n) {
background: none;
background-color: transparent;
}
/* Modal portals */
.ant-modal.ant-modal table,
.ant-modal.ant-modal thead,
.ant-modal.ant-modal tbody,
.ant-modal.ant-modal tr,
.ant-modal.ant-modal th,
.ant-modal.ant-modal td {
border: none;
background: none;
background-color: transparent;
}
.ant-modal.ant-modal tr:nth-child(2n) {
background: none;
background-color: transparent;
}
/* ============================================
Live Code Editor Height Limits
Prevents tall code blocks from dominating the page
============================================ */
/* Limit the code editor height and make it scrollable */
/* Target multiple possible class names used by Docusaurus/react-live */
.playgroundEditor,
[class*="playgroundEditor"],
.live-editor,
[class*="liveEditor"] {
max-height: 350px !important;
overflow: auto !important;
}
/* The actual textarea/code area inside the editor */
.playgroundEditor textarea,
.playgroundEditor pre,
[class*="playgroundEditor"] textarea,
[class*="playgroundEditor"] pre {
max-height: 350px !important;
overflow: auto !important;
}
/* Also limit the preview area for consistency */
.playgroundPreview,
[class*="playgroundPreview"] {
max-height: 400px;
overflow: auto;
}
/* Hide sidebar items with sidebar_class_name: hidden in frontmatter */
.menu__list-item.hidden {
display: none;
}