Files
mims-harvard__tooluniverse/docs/_static/pydata_custom.css
2025-10-07 18:43:31 -04:00

814 lines
19 KiB
CSS
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ToolUniverse Documentation - PyData Theme Customization */
/* ============================================================================
Enhanced Color Scheme and Branding
============================================================================ */
:root {
/* Primary brand colors */
--pst-color-primary: #4c6ef5;
--pst-color-secondary: #9b5de5;
--pst-color-accent: #6c5ce7;
--pst-color-warning: #f7aef8;
--pst-color-info: #5f5ff0;
--pst-color-success: #7f5af0;
/* Custom ToolUniverse brand colors */
--tu-brand-primary: #4c6ef5; /* vivid blue */
--tu-brand-secondary: #9b5de5; /* electric purple */
--tu-accent-blue: #5f5ff0;
--tu-accent-purple: #a855f7;
--tu-accent-magenta: #c77dff;
--tu-accent-cyan: #4dd0e1;
/* Enhanced backgrounds */
--tu-bg-light: #f3f4ff;
--tu-bg-hover: rgba(92, 99, 255, 0.12);
--tu-bg-border: rgba(121, 134, 203, 0.35);
--tu-bg-gradient: linear-gradient(135deg, var(--tu-brand-primary) 0%, var(--tu-brand-secondary) 100%);
/* Typography improvements */
--tu-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--tu-font-mono: "SF Mono", Monaco, Inconsolata, "Roboto Mono", Consolas, "Courier New", monospace;
/* Shadows for modern depth */
--tu-shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);
--tu-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.12);
--tu-shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.16);
/* Border radius for modern look */
--tu-border-radius: 8px;
--tu-border-radius-lg: 12px;
}
/* ============================================================================
Enhanced Typography and Layout
============================================================================ */
body {
font-family: var(--tu-font-family);
line-height: 1.6;
letter-spacing: 0.01em;
}
/* Enhanced headings */
h1, h2, h3, h4, h5, h6 {
font-weight: 600;
line-height: 1.3;
color: var(--pst-color-text-base);
}
h1 {
font-size: 2.5rem;
border-bottom: 3px solid var(--tu-brand-primary);
padding-bottom: 0.5rem;
margin-bottom: 2rem;
background: var(--tu-bg-gradient);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
h2 {
font-size: 2rem;
border-bottom: 2px solid var(--tu-brand-secondary);
padding-bottom: 0.3rem;
margin-top: 3rem;
margin-bottom: 1.5rem;
}
h3 {
font-size: 1.5rem;
color: var(--tu-brand-primary);
margin-top: 2rem;
margin-bottom: 1rem;
}
/* ============================================================================
Enhanced Navigation and Header
============================================================================ */
/* Navbar enhancements */
.bd-header {
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(14px);
border-bottom: 1px solid rgba(148, 163, 255, 0.24);
box-shadow: 0 4px 24px rgba(76, 110, 245, 0.1);
}
.bd-header .navbar {
padding-top: 0.35rem;
padding-bottom: 0.35rem;
}
.bd-header .navbar-nav {
display: none !important; /* 隐藏顶部文档目录,专注侧边导航 */
}
.bd-header .navbar-end {
gap: 0.65rem;
}
.navbar-brand {
font-weight: 700;
font-size: 1.3rem;
color: var(--tu-brand-primary) !important;
}
.navbar-nav .nav-link {
font-weight: 500;
transition: all 0.3s ease;
border-radius: 6px;
margin: 0 0.2rem;
padding: 0.5rem 1rem !important;
}
.navbar-nav .nav-link:hover {
background-color: var(--tu-bg-hover);
color: var(--tu-brand-primary) !important;
transform: translateY(-1px);
}
.navbar-nav .nav-link.active {
background: var(--tu-bg-gradient);
color: white !important;
box-shadow: var(--tu-shadow-sm);
}
/* Search button styling */
.search-button {
background: var(--tu-bg-light);
border: 2px solid var(--tu-bg-border);
border-radius: 25px;
padding: 0.5rem 1rem;
transition: all 0.3s ease;
}
.search-button:hover {
border-color: var(--tu-brand-primary);
box-shadow: 0 0 0 3px rgba(41, 128, 185, 0.2);
}
/* ============================================================================
Enhanced Sidebar
============================================================================ */
/* Primary sidebar styling */
.bd-sidebar-primary {
background: rgba(248, 249, 255, 0.9);
border-right: 1px solid var(--tu-bg-border);
position: sticky;
top: 4.5rem;
height: calc(100vh - 4.5rem);
overflow-y: auto;
padding: 1.5rem 0 2rem;
backdrop-filter: blur(18px);
}
.bd-sidebar-primary .nav-link {
color: var(--pst-color-text-muted);
padding: 0.5rem 1rem;
margin: 0.2rem 0;
border-radius: var(--tu-border-radius);
transition: all 0.3s ease;
border-left: 3px solid transparent;
}
.bd-sidebar-primary .nav-link:hover {
background-color: var(--tu-bg-hover);
color: var(--tu-brand-primary);
transform: translateX(4px);
border-left-color: var(--tu-brand-secondary);
}
.bd-sidebar-primary .nav-link.active {
background: var(--tu-bg-gradient);
color: white;
font-weight: 600;
box-shadow: var(--tu-shadow-sm);
border-left-color: var(--tu-brand-secondary);
}
/* Sidebar/brand logo size (PyData) */
.bd-header .navbar-brand img,
.bd-sidebar-primary .navbar-brand img,
.navbar-brand img,
.navbar .navbar-brand img,
.bd-sidebar-primary .logo__image,
.bd-header .logo__image,
.navbar .logo__image {
max-height: 64px !important;
width: auto !important;
}
/* Secondary sidebar (TOC) */
.bd-sidebar-secondary .nav-link {
font-size: 0.9rem;
padding: 0.3rem 0.8rem;
border-radius: 4px;
transition: all 0.3s ease;
}
.bd-sidebar-secondary .nav-link:hover {
background-color: var(--tu-bg-hover);
color: var(--tu-brand-primary);
}
/* ============================================================================
Enhanced Code Blocks and Syntax Highlighting
============================================================================ */
/* Code block containers */
.highlight {
background: var(--pst-color-surface) !important;
border: 1px solid var(--tu-bg-border);
border-left: 4px solid var(--tu-brand-primary);
border-radius: var(--tu-border-radius);
box-shadow: var(--tu-shadow-sm);
margin: 1.5em 0;
overflow: hidden;
transition: box-shadow 0.3s ease;
}
.highlight:hover {
box-shadow: var(--tu-shadow-md);
}
.highlight pre {
padding: 1.5rem;
margin: 0;
overflow-x: auto;
font-family: var(--tu-font-mono);
font-size: 0.9rem;
line-height: 1.5;
}
/* Inline code styling */
code {
background: var(--tu-bg-light);
padding: 0.2em 0.4em;
border-radius: 4px;
border: 1px solid var(--tu-bg-border);
font-family: var(--tu-font-mono);
font-size: 0.9em;
font-weight: 500;
color: var(--pst-color-text-base);
}
/* Copy button enhancements */
.copybtn {
background: var(--tu-brand-primary) !important;
border: none !important;
border-radius: 6px !important;
padding: 0.5rem 0.8rem !important;
font-size: 0.8rem !important;
font-weight: 500 !important;
transition: all 0.3s ease !important;
opacity: 0.8 !important;
box-shadow: var(--tu-shadow-sm) !important;
}
.copybtn:hover {
opacity: 1 !important;
transform: translateY(-1px) !important;
box-shadow: var(--tu-shadow-md) !important;
}
/* ============================================================================
Enhanced Tables
============================================================================ */
.table {
border-collapse: collapse;
border: 1px solid var(--tu-bg-border);
border-radius: var(--tu-border-radius);
overflow: hidden;
box-shadow: var(--tu-shadow-sm);
margin: 2rem 0;
font-size: 0.95rem;
}
.table thead th {
background: var(--tu-bg-gradient);
color: white;
font-weight: 600;
padding: 1rem 1.2rem;
text-align: left;
border: none;
}
.table tbody td {
padding: 1rem 1.2rem;
border-bottom: 1px solid var(--tu-bg-border);
transition: background-color 0.3s ease;
border-left: none;
border-right: none;
}
.table tbody tr:hover {
background-color: var(--tu-bg-hover);
}
.table tbody tr:last-child td {
border-bottom: none;
}
/* ============================================================================
Enhanced Admonitions
============================================================================ */
.admonition {
border-radius: var(--tu-border-radius);
border-left: 4px solid;
padding: 1.2rem 1.5rem;
margin: 2rem 0;
box-shadow: var(--tu-shadow-sm);
transition: all 0.3s ease;
background: var(--pst-color-surface);
}
.admonition:hover {
transform: translateY(-2px);
box-shadow: var(--tu-shadow-md);
}
.admonition.note {
border-left-color: var(--tu-brand-primary);
background: linear-gradient(135deg, rgba(92, 99, 255, 0.16), rgba(75, 51, 189, 0.05));
}
.admonition.warning {
border-left-color: var(--tu-accent-magenta);
background: linear-gradient(135deg, rgba(197, 125, 255, 0.18), rgba(155, 93, 229, 0.08));
}
.admonition.danger,
.admonition.error {
border-left-color: #ff6b6b;
background: linear-gradient(135deg, rgba(255, 107, 107, 0.18), rgba(255, 168, 168, 0.08));
}
.admonition.tip,
.admonition.hint {
border-left-color: var(--tu-brand-secondary);
background: linear-gradient(135deg, rgba(39, 174, 96, 0.1), rgba(39, 174, 96, 0.05));
}
.admonition-title {
font-weight: 600;
font-size: 1.1rem;
margin-bottom: 0.8rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
/* Add emoji icons to admonition titles */
.admonition.note .admonition-title::before {
content: "ℹ️";
font-size: 1.2rem;
}
.admonition.warning .admonition-title::before {
content: "⚠️";
font-size: 1.2rem;
}
.admonition.danger .admonition-title::before,
.admonition.error .admonition-title::before {
content: "🚨";
font-size: 1.2rem;
}
.admonition.tip .admonition-title::before,
.admonition.hint .admonition-title::before {
content: "💡";
font-size: 1.2rem;
}
/* ============================================================================
Enhanced Buttons and Interactive Elements
============================================================================ */
/* Primary buttons */
.btn-primary {
background: var(--tu-bg-gradient);
border: none;
border-radius: var(--tu-border-radius);
padding: 0.8rem 1.5rem;
font-weight: 600;
transition: all 0.3s ease;
box-shadow: var(--tu-shadow-sm);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: var(--tu-shadow-md);
}
/* Secondary buttons */
.btn-outline-primary {
border: 2px solid var(--tu-brand-primary);
color: var(--tu-brand-primary);
border-radius: var(--tu-border-radius);
padding: 0.8rem 1.5rem;
font-weight: 500;
transition: all 0.3s ease;
}
.btn-outline-primary:hover {
background: var(--tu-brand-primary);
color: white;
transform: translateY(-1px);
box-shadow: var(--tu-shadow-sm);
}
/* ============================================================================
Enhanced Links and References
============================================================================ */
/* External links */
a.external::after {
content: " 🔗";
font-size: 0.8em;
opacity: 0.7;
}
/* Internal reference links */
a.reference.internal {
color: var(--tu-brand-primary);
text-decoration: none;
border-bottom: 1px solid transparent;
transition: all 0.3s ease;
}
a.reference.internal:hover {
color: var(--tu-accent-blue);
border-bottom-color: var(--tu-brand-primary);
}
/* ============================================================================
Enhanced Cards and Components
============================================================================ */
/* Bootstrap card enhancements */
.card {
border: 1px solid var(--tu-bg-border);
border-radius: var(--tu-border-radius-lg);
box-shadow: var(--tu-shadow-sm);
transition: all 0.3s ease;
overflow: hidden;
}
.card:hover {
transform: translateY(-4px);
box-shadow: var(--tu-shadow-md);
}
.card-header {
background: var(--tu-bg-gradient);
color: white;
font-weight: 600;
border-bottom: none;
padding: 1rem 1.5rem;
}
.card-body {
padding: 1.5rem;
}
/* Sphinx Design grid cards */
.sd-card {
border: 1px solid var(--tu-bg-border);
border-radius: var(--tu-border-radius-lg);
box-shadow: var(--tu-shadow-sm);
transition: all 0.3s ease;
overflow: hidden;
}
.sd-card:hover {
transform: translateY(-4px);
box-shadow: var(--tu-shadow-md);
}
.sd-card-header {
background: var(--tu-bg-gradient);
color: white;
font-weight: 600;
padding: 1rem 1.5rem;
}
/* ============================================================================
Enhanced Tabs
============================================================================ */
.sphinx-tabs-tab {
background: var(--tu-bg-light);
border: 1px solid var(--tu-bg-border);
border-radius: var(--tu-border-radius) var(--tu-border-radius) 0 0;
margin-right: 4px;
padding: 0.8rem 1.5rem;
transition: all 0.3s ease;
font-weight: 500;
}
.sphinx-tabs-tab[aria-selected="true"] {
background: var(--tu-bg-gradient);
color: white;
border-color: var(--tu-brand-primary);
transform: translateY(-2px);
box-shadow: var(--tu-shadow-sm);
}
.sphinx-tabs-panel {
border: 1px solid var(--tu-bg-border);
border-radius: 0 var(--tu-border-radius) var(--tu-border-radius) var(--tu-border-radius);
padding: 1.5rem;
background: var(--pst-color-surface);
box-shadow: var(--tu-shadow-sm);
}
/* ============================================================================
ToolUniverse Specific Components
============================================================================ */
/* Tool category cards */
.tool-category {
background: var(--pst-color-surface);
border: 1px solid var(--tu-bg-border);
border-radius: var(--tu-border-radius-lg);
padding: 1.5rem;
margin: 1.5rem 0;
border-left: 4px solid var(--tu-brand-primary);
box-shadow: var(--tu-shadow-sm);
transition: all 0.3s ease;
}
.tool-category:hover {
transform: translateY(-4px);
box-shadow: var(--tu-shadow-md);
}
.tool-category h3 {
color: var(--tu-brand-primary);
margin-top: 0;
margin-bottom: 1rem;
font-size: 1.3rem;
}
/* API documentation enhancements */
.py-method,
.py-function,
.py-class {
border-left: 4px solid var(--tu-brand-primary);
padding: 1rem 1rem 1rem 2rem;
margin: 1.5rem 0;
background: var(--tu-bg-light);
border-radius: 0 var(--tu-border-radius) var(--tu-border-radius) 0;
box-shadow: var(--tu-shadow-sm);
}
.py-method .sig-name,
.py-function .sig-name,
.py-class .sig-name {
font-weight: 600;
color: var(--tu-brand-primary);
}
/* Version and status badges */
.version-badge {
background: var(--tu-bg-gradient);
color: white;
padding: 0.3rem 0.8rem;
border-radius: 15px;
font-size: 0.8rem;
font-weight: 600;
display: inline-block;
margin-left: 0.5rem;
}
.status-badge {
padding: 0.2rem 0.6rem;
border-radius: 12px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
}
.status-badge.stable {
background-color: var(--tu-brand-secondary);
color: white;
}
.status-badge.beta {
background-color: var(--tu-accent-orange);
color: white;
}
.status-badge.experimental {
background-color: var(--tu-accent-red);
color: white;
}
/* ============================================================================
Enhanced Footer
============================================================================ */
.footer {
background: var(--pst-color-surface);
border-top: 2px solid var(--tu-bg-border);
padding: 2rem 0;
margin-top: 4rem;
}
.footer-content {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
}
.footer-links {
display: flex;
gap: 2rem;
flex-wrap: wrap;
}
.footer-links a {
color: var(--pst-color-text-muted);
text-decoration: none;
transition: color 0.3s ease;
}
.footer-links a:hover {
color: var(--tu-brand-primary);
}
/* ============================================================================
Responsive Design Enhancements
============================================================================ */
@media (max-width: 768px) {
/* Mobile typography adjustments */
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.5rem;
}
/* Mobile navigation */
.navbar-nav .nav-link {
padding: 0.5rem 0.8rem !important;
}
/* Mobile admonitions */
.admonition {
padding: 1rem;
margin: 1rem 0;
}
/* Mobile tables */
.table {
font-size: 0.85rem;
}
.table thead th,
.table tbody td {
padding: 0.8rem 1rem;
}
/* Mobile buttons */
.btn-primary,
.btn-outline-primary {
padding: 0.6rem 1.2rem;
font-size: 0.9rem;
}
}
/* ============================================================================
Accessibility Enhancements
============================================================================ */
/* Focus indicators */
*:focus {
outline: 2px solid var(--tu-brand-primary);
outline-offset: 2px;
border-radius: 4px;
}
/* Skip to content link */
.skip-to-content {
position: absolute;
top: -40px;
left: 6px;
background: var(--tu-brand-primary);
color: white;
padding: 8px 16px;
text-decoration: none;
border-radius: 4px;
z-index: 1000;
transition: top 0.3s;
font-weight: 600;
}
.skip-to-content:focus {
top: 6px;
}
/* High contrast mode support */
@media (prefers-contrast: high) {
.admonition,
.highlight,
.table {
border-width: 2px;
}
}
/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* ============================================================================
Print Styles
============================================================================ */
@media print {
.bd-sidebar-primary,
.bd-sidebar-secondary,
.navbar,
.footer,
.copybtn {
display: none !important;
}
.bd-main {
margin-left: 0 !important;
max-width: none !important;
}
.admonition {
border: 2px solid #000;
background: #fff !important;
box-shadow: none !important;
}
.highlight {
border: 1px solid #000;
background: #f9f9f9 !important;
box-shadow: none !important;
}
a::after {
content: " (" attr(href) ")";
font-size: 0.8em;
color: #666;
}
}
/* ============================================================================
Custom Animations
============================================================================ */
/* Smooth scroll behavior */
html {
scroll-behavior: smooth;
}
/* Fade in animation for content */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.bd-main {
animation: fadeIn 0.6s ease-out;
}
/* Loading animation */
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.7;
}
}
.loading {
animation: pulse 2s infinite;
}