mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-03 15:43:11 +08:00
923 lines
23 KiB
CSS
923 lines
23 KiB
CSS
/**
|
||
* VitePress Custom Styles
|
||
* Overrides and extensions for default VitePress theme
|
||
* Design System: ui-ux-pro-max — flat design, developer-focused, documentation-optimized
|
||
*/
|
||
|
||
/* ============================================
|
||
* Global Theme Variables
|
||
* ============================================ */
|
||
:root {
|
||
--vp-c-brand: var(--vp-c-primary);
|
||
--vp-c-brand-light: var(--vp-c-primary-300);
|
||
--vp-c-brand-lighter: var(--vp-c-primary-200);
|
||
--vp-c-brand-dark: var(--vp-c-primary-700);
|
||
--vp-c-brand-darker: var(--vp-c-primary-800);
|
||
|
||
--vp-home-hero-name-color: var(--vp-c-primary);
|
||
--vp-home-hero-name-background: linear-gradient(120deg, var(--vp-c-primary-500) 30%, var(--vp-c-secondary-500));
|
||
|
||
--vp-button-brand-bg: var(--vp-c-primary);
|
||
--vp-button-brand-hover-bg: var(--vp-c-primary-600);
|
||
--vp-button-brand-active-bg: var(--vp-c-primary-700);
|
||
|
||
--vp-custom-block-tip-bg: var(--vp-c-primary-50);
|
||
--vp-custom-block-tip-border: var(--vp-c-primary-200);
|
||
--vp-custom-block-tip-text: var(--vp-c-primary-700);
|
||
|
||
--vp-custom-block-warning-bg: var(--vp-c-accent-50);
|
||
--vp-custom-block-warning-border: var(--vp-c-accent-200);
|
||
--vp-custom-block-warning-text: var(--vp-c-accent-700);
|
||
|
||
--vp-custom-block-danger-bg: #fef2f2;
|
||
--vp-custom-block-danger-border: #fecaca;
|
||
--vp-custom-block-danger-text: #b91c1c;
|
||
|
||
/* Layout Width - Wider content area (using rem for zoom responsiveness) */
|
||
--vp-layout-max-width: 100rem; /* 1600px / 16 */
|
||
--vp-content-width: 57.5rem; /* 920px / 16 */
|
||
--vp-sidebar-width: 17.5rem; /* 280px / 16 */
|
||
--vp-toc-width: 12.5rem; /* 200px / 16 */
|
||
|
||
/* Prose width for optimal readability */
|
||
--vp-prose-width: 51.25rem; /* 820px / 16 */
|
||
}
|
||
|
||
.dark {
|
||
--vp-custom-block-tip-bg: rgba(59, 130, 246, 0.1);
|
||
--vp-custom-block-tip-border: rgba(59, 130, 246, 0.3);
|
||
--vp-custom-block-tip-text: var(--vp-c-primary-300);
|
||
|
||
--vp-custom-block-warning-bg: rgba(217, 119, 6, 0.1);
|
||
--vp-custom-block-warning-border: rgba(217, 119, 6, 0.3);
|
||
--vp-custom-block-warning-text: var(--vp-c-accent-300);
|
||
|
||
--vp-custom-block-danger-bg: rgba(185, 28, 28, 0.1);
|
||
--vp-custom-block-danger-border: rgba(185, 28, 28, 0.3);
|
||
--vp-custom-block-danger-text: #fca5a5;
|
||
}
|
||
|
||
/* ============================================
|
||
* Layout Container Adjustments
|
||
* Use CSS variables in :root to control layout widths
|
||
* Do not override VitePress layout calculations with !important
|
||
* ============================================ */
|
||
|
||
/* Adjust sidebar and content layout */
|
||
/* NOTE: Removed duplicate padding-left - VitePress already handles sidebar layout */
|
||
/* .VPDoc, .VPDoc[data-v-343c73d6] { padding-left: var(--vp-sidebar-width) !important; } */
|
||
|
||
/* Right side outline (TOC) adjustments */
|
||
.VPDocOutline {
|
||
padding-left: 24px;
|
||
}
|
||
|
||
.VPDocOutline .outline-link {
|
||
font-size: 13px;
|
||
line-height: 1.6;
|
||
padding: 4px 8px;
|
||
}
|
||
|
||
/* ============================================
|
||
* Navigation Bar Border
|
||
* ============================================ */
|
||
.VPNav {
|
||
border-bottom: 1px solid var(--vp-c-divider);
|
||
}
|
||
|
||
/* ============================================
|
||
* Desktop Layout Adjustments
|
||
* Grid-based layout is defined in mobile.css @media (min-width: 1024px)
|
||
* ============================================ */
|
||
|
||
/* ============================================
|
||
* Home Page Override
|
||
* ============================================ */
|
||
|
||
/* Use :has() to detect home page (contains .pro-home) */
|
||
.VPContent:has(.pro-home) {
|
||
padding: 0 !important;
|
||
margin: 0 !important;
|
||
max-width: 100vw !important;
|
||
}
|
||
|
||
.Layout:has(.pro-home) {
|
||
max-width: 100vw !important;
|
||
}
|
||
|
||
/* Ensure VPNav doesn't cause overflow */
|
||
.Layout:has(.pro-home) .VPNav {
|
||
max-width: 100vw;
|
||
}
|
||
|
||
/* Home page navbar - reduce title left margin since no sidebar */
|
||
.Layout:has(.pro-home) .VPNavBar .content-body,
|
||
.Layout:has(.pro-home) .VPNavBar .title {
|
||
padding-left: 0 !important;
|
||
}
|
||
|
||
/* Ensure VPFooter doesn't cause overflow */
|
||
.Layout:has(.pro-home) .VPFooter {
|
||
max-width: 100vw;
|
||
padding-left: 1rem;
|
||
padding-right: 1rem;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* ProfessionalHome component full width */
|
||
.pro-home {
|
||
max-width: 100% !important;
|
||
padding: 0 !important;
|
||
margin: 0 !important;
|
||
width: 100% !important;
|
||
box-sizing: border-box !important;
|
||
}
|
||
|
||
/* Ensure all sections extend to full width */
|
||
.pro-home .hero-section,
|
||
.pro-home .features-section,
|
||
.pro-home .pipeline-section,
|
||
.pro-home .json-section,
|
||
.pro-home .quickstart-section,
|
||
.pro-home .cta-section {
|
||
width: 100% !important;
|
||
margin: 0 !important;
|
||
padding-left: 0 !important;
|
||
padding-right: 0 !important;
|
||
box-sizing: border-box !important;
|
||
max-width: 100vw !important;
|
||
}
|
||
|
||
.VPHomeHero {
|
||
padding: 80px 0;
|
||
background: linear-gradient(180deg, var(--vp-c-bg-soft) 0%, var(--vp-c-bg) 100%);
|
||
}
|
||
|
||
/* ============================================
|
||
* Documentation Content Typography
|
||
* Optimized for readability (65-75 chars per line)
|
||
* ============================================ */
|
||
.vp-doc {
|
||
font-family: var(--vp-font-family-base);
|
||
line-height: var(--vp-line-height-relaxed);
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
/* Heading hierarchy with clear visual distinction */
|
||
.vp-doc h1 {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-size: var(--vp-font-size-4xl);
|
||
font-weight: 800;
|
||
letter-spacing: -0.025em;
|
||
line-height: var(--vp-line-height-tight);
|
||
margin-bottom: var(--vp-spacing-8);
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
.vp-doc h2 {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-size: var(--vp-font-size-2xl);
|
||
font-weight: 700;
|
||
letter-spacing: -0.01em;
|
||
line-height: var(--vp-line-height-tight);
|
||
margin-top: var(--vp-spacing-12);
|
||
padding-top: var(--vp-spacing-8);
|
||
border-top: 1px solid var(--vp-c-divider);
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
.vp-doc h2:first-of-type {
|
||
margin-top: var(--vp-spacing-6);
|
||
border-top: none;
|
||
}
|
||
|
||
.vp-doc h3 {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-size: var(--vp-font-size-xl);
|
||
font-weight: 600;
|
||
line-height: var(--vp-line-height-snug);
|
||
margin-top: var(--vp-spacing-10);
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
.vp-doc h4 {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-size: var(--vp-font-size-lg);
|
||
font-weight: 600;
|
||
line-height: var(--vp-line-height-snug);
|
||
margin-top: var(--vp-spacing-8);
|
||
color: var(--vp-c-text-2);
|
||
}
|
||
|
||
.vp-doc h5 {
|
||
font-size: var(--vp-font-size-base);
|
||
font-weight: 600;
|
||
line-height: var(--vp-line-height-snug);
|
||
margin-top: var(--vp-spacing-6);
|
||
color: var(--vp-c-text-2);
|
||
}
|
||
|
||
.vp-doc h6 {
|
||
font-size: var(--vp-font-size-sm);
|
||
font-weight: 600;
|
||
line-height: var(--vp-line-height-snug);
|
||
margin-top: var(--vp-spacing-4);
|
||
color: var(--vp-c-text-3);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.05em;
|
||
}
|
||
|
||
/* Body text with optimal line height */
|
||
.vp-doc p {
|
||
font-size: var(--vp-font-size-base);
|
||
line-height: var(--vp-line-height-relaxed);
|
||
margin: var(--vp-spacing-5) 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Lists with proper spacing */
|
||
.vp-doc ul,
|
||
.vp-doc ol {
|
||
font-size: var(--vp-font-size-base);
|
||
line-height: var(--vp-line-height-relaxed);
|
||
margin: var(--vp-spacing-5) 0;
|
||
padding-left: var(--vp-spacing-6);
|
||
max-width: 100%;
|
||
}
|
||
|
||
.vp-doc li {
|
||
line-height: var(--vp-line-height-relaxed);
|
||
margin: var(--vp-spacing-2) 0;
|
||
}
|
||
|
||
.vp-doc li + li {
|
||
margin-top: var(--vp-spacing-2);
|
||
}
|
||
|
||
/* Nested lists */
|
||
.vp-doc ul ul,
|
||
.vp-doc ol ol,
|
||
.vp-doc ul ol,
|
||
.vp-doc ol ul {
|
||
margin: var(--vp-spacing-2) 0;
|
||
}
|
||
|
||
/* Better spacing for code blocks in lists */
|
||
.vp-doc li > code {
|
||
margin: 0 2px;
|
||
}
|
||
|
||
/* Blockquotes */
|
||
.vp-doc blockquote {
|
||
margin: var(--vp-spacing-6) 0;
|
||
padding: var(--vp-spacing-4) var(--vp-spacing-6);
|
||
border-left: 4px solid var(--vp-c-primary);
|
||
background: var(--vp-c-bg-soft);
|
||
border-radius: 0 var(--vp-radius-lg) var(--vp-radius-lg) 0;
|
||
color: var(--vp-c-text-2);
|
||
font-style: italic;
|
||
}
|
||
|
||
.vp-doc blockquote p {
|
||
margin: var(--vp-spacing-2) 0;
|
||
}
|
||
|
||
/* Strong and emphasis */
|
||
.vp-doc strong {
|
||
font-weight: 600;
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
.vp-doc em {
|
||
font-style: italic;
|
||
}
|
||
|
||
/* ============================================
|
||
* Command Reference Specific Styles
|
||
* ============================================ */
|
||
.vp-doc h3[id^="ccw"],
|
||
.vp-doc h3[id^="workflow"],
|
||
.vp-doc h3[id^="issue"],
|
||
.vp-doc h3[id^="cli"],
|
||
.vp-doc h3[id^="memory"] {
|
||
scroll-margin-top: 80px;
|
||
position: relative;
|
||
}
|
||
|
||
/* Add subtle separator between command sections */
|
||
.vp-doc hr {
|
||
border: none;
|
||
border-top: 1px solid var(--vp-c-divider);
|
||
margin: 3rem 0;
|
||
}
|
||
|
||
/* ============================================
|
||
* Custom Container Blocks
|
||
* Flat design with left accent border
|
||
* ============================================ */
|
||
.custom-container {
|
||
margin: var(--vp-spacing-6) 0;
|
||
padding: var(--vp-spacing-4) var(--vp-spacing-5);
|
||
border-radius: var(--vp-radius-xl);
|
||
border-left: 4px solid;
|
||
background: var(--vp-c-bg-soft);
|
||
box-shadow: var(--vp-shadow-xs);
|
||
}
|
||
|
||
.custom-container.info {
|
||
background: var(--vp-c-bg-soft);
|
||
border-color: var(--vp-c-primary);
|
||
}
|
||
|
||
.custom-container.success {
|
||
background: var(--vp-c-secondary-50);
|
||
border-color: var(--vp-c-secondary);
|
||
}
|
||
|
||
.dark .custom-container.success {
|
||
background: rgba(16, 185, 129, 0.08);
|
||
}
|
||
|
||
.custom-container.tip {
|
||
border-radius: var(--vp-radius-xl);
|
||
background: rgba(59, 130, 246, 0.05);
|
||
}
|
||
|
||
.custom-container.warning {
|
||
border-radius: var(--vp-radius-xl);
|
||
background: rgba(245, 158, 11, 0.05);
|
||
}
|
||
|
||
.custom-container.danger {
|
||
border-radius: var(--vp-radius-xl);
|
||
background: rgba(239, 68, 68, 0.05);
|
||
}
|
||
|
||
/* Custom container titles */
|
||
.custom-container .custom-container-title {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-weight: 600;
|
||
font-size: var(--vp-font-size-sm);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.05em;
|
||
margin-bottom: var(--vp-spacing-2);
|
||
}
|
||
|
||
/* VitePress default custom blocks */
|
||
.vp-doc .tip,
|
||
.vp-doc .warning,
|
||
.vp-doc .danger,
|
||
.vp-doc .info {
|
||
border-radius: var(--vp-radius-xl);
|
||
margin: var(--vp-spacing-6) 0;
|
||
padding: var(--vp-spacing-4) var(--vp-spacing-5);
|
||
box-shadow: var(--vp-shadow-xs);
|
||
}
|
||
|
||
.vp-doc .tip {
|
||
background: rgba(59, 130, 246, 0.05);
|
||
border-color: var(--vp-c-primary);
|
||
}
|
||
|
||
.vp-doc .warning {
|
||
background: rgba(245, 158, 11, 0.05);
|
||
border-color: var(--vp-c-accent);
|
||
}
|
||
|
||
.vp-doc .danger {
|
||
background: rgba(239, 68, 68, 0.05);
|
||
border-color: #ef4444;
|
||
}
|
||
|
||
.vp-doc .info {
|
||
background: var(--vp-c-bg-soft);
|
||
border-color: var(--vp-c-primary);
|
||
}
|
||
|
||
/* ============================================
|
||
* Code Block Improvements
|
||
* Clean, flat design with subtle borders
|
||
* ============================================ */
|
||
.vp-code-group {
|
||
margin: var(--vp-spacing-6) 0;
|
||
border-radius: var(--vp-radius-xl);
|
||
overflow: hidden;
|
||
border: 1px solid var(--vp-c-divider);
|
||
box-shadow: var(--vp-shadow-sm);
|
||
}
|
||
|
||
.vp-code-group .tabs {
|
||
background: var(--vp-c-bg-soft);
|
||
border-bottom: 1px solid var(--vp-c-divider);
|
||
padding: 0 var(--vp-spacing-2);
|
||
}
|
||
|
||
.vp-code-group div[class*='language-'] {
|
||
margin: 0;
|
||
border-radius: 0;
|
||
border: none;
|
||
}
|
||
|
||
div[class*='language-'] {
|
||
border-radius: var(--vp-radius-xl);
|
||
margin: var(--vp-spacing-6) 0;
|
||
border: 1px solid var(--vp-c-divider);
|
||
background: var(--vp-c-bg-soft) !important;
|
||
box-shadow: var(--vp-shadow-sm);
|
||
}
|
||
|
||
div[class*='language-'] pre {
|
||
line-height: var(--vp-line-height-relaxed);
|
||
padding: var(--vp-spacing-5) var(--vp-spacing-6);
|
||
}
|
||
|
||
div[class*='language-'] code {
|
||
font-family: var(--vp-font-family-mono);
|
||
font-size: var(--vp-font-size-sm);
|
||
font-weight: 400;
|
||
letter-spacing: -0.01em;
|
||
}
|
||
|
||
/* Code block header with language label */
|
||
div[class*='language-'] > span.lang {
|
||
font-size: var(--vp-font-size-xs);
|
||
font-weight: 500;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.05em;
|
||
color: var(--vp-c-text-3);
|
||
padding: var(--vp-spacing-2) var(--vp-spacing-4);
|
||
background: var(--vp-c-bg-soft);
|
||
border-radius: var(--vp-radius-md);
|
||
}
|
||
|
||
/* Inline code - subtle styling */
|
||
.vp-doc :not(pre) > code {
|
||
font-family: var(--vp-font-family-mono);
|
||
border-radius: var(--vp-radius-md);
|
||
padding: 2px 6px;
|
||
font-size: 0.875em;
|
||
font-weight: 500;
|
||
background: var(--vp-c-bg-soft);
|
||
border: 1px solid var(--vp-c-divider);
|
||
color: var(--vp-c-primary);
|
||
}
|
||
|
||
/* Copy button styling */
|
||
.vp-code-group .vp-copy,
|
||
div[class*='language-'] .vp-copy {
|
||
border-radius: var(--vp-radius-md);
|
||
transition: all var(--vp-transition-color);
|
||
}
|
||
|
||
.vp-code-group .vp-copy:hover,
|
||
div[class*='language-'] .vp-copy:hover {
|
||
background: var(--vp-c-bg-mute);
|
||
}
|
||
|
||
/* ============================================
|
||
* Table Styling
|
||
* Clean, flat design with subtle borders
|
||
* ============================================ */
|
||
.vp-doc table {
|
||
border-collapse: collapse;
|
||
width: 100%;
|
||
margin: var(--vp-spacing-6) 0;
|
||
}
|
||
|
||
.vp-doc table th,
|
||
.vp-doc table td {
|
||
padding: var(--vp-spacing-3) var(--vp-spacing-4);
|
||
border: 1px solid var(--vp-c-divider);
|
||
text-align: left;
|
||
font-size: var(--vp-font-size-sm);
|
||
line-height: var(--vp-line-height-normal);
|
||
}
|
||
|
||
.vp-doc table th {
|
||
background: var(--vp-c-bg-soft);
|
||
font-family: var(--vp-font-family-heading);
|
||
font-weight: 600;
|
||
font-size: var(--vp-font-size-xs);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.05em;
|
||
color: var(--vp-c-text-2);
|
||
border-bottom-width: 2px;
|
||
}
|
||
|
||
.vp-doc table td {
|
||
color: var(--vp-c-text-1);
|
||
vertical-align: top;
|
||
}
|
||
|
||
.vp-doc table tr:hover {
|
||
background: var(--vp-c-bg-soft);
|
||
}
|
||
|
||
.vp-doc table tr:hover td {
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
/* Responsive tables */
|
||
@media (max-width: 767px) {
|
||
.vp-doc table {
|
||
display: block;
|
||
overflow-x: auto;
|
||
-webkit-overflow-scrolling: touch;
|
||
}
|
||
|
||
.vp-doc table th,
|
||
.vp-doc table td {
|
||
padding: var(--vp-spacing-2) var(--vp-spacing-3);
|
||
font-size: var(--vp-font-size-xs);
|
||
white-space: nowrap;
|
||
}
|
||
}
|
||
|
||
/* ============================================
|
||
* Sidebar Polish
|
||
* Clean, organized navigation
|
||
* ============================================ */
|
||
.VPSidebar {
|
||
background: var(--vp-c-bg);
|
||
border-right: 1px solid var(--vp-c-divider);
|
||
}
|
||
|
||
.VPSidebar .group + .group {
|
||
margin-top: var(--vp-spacing-4);
|
||
padding-top: var(--vp-spacing-4);
|
||
border-top: 1px solid var(--vp-c-divider);
|
||
}
|
||
|
||
/* Sidebar item styling */
|
||
.VPSidebar .VPSidebarItem .text {
|
||
font-size: var(--vp-font-size-sm);
|
||
line-height: var(--vp-line-height-normal);
|
||
transition: color var(--vp-transition-color);
|
||
}
|
||
|
||
.VPSidebar .VPSidebarItem .link:hover .text {
|
||
color: var(--vp-c-primary);
|
||
}
|
||
|
||
.VPSidebar .VPSidebarItem.is-active .link .text {
|
||
color: var(--vp-c-primary);
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* Sidebar group titles */
|
||
.VPSidebar .VPSidebarGroup .title {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-size: var(--vp-font-size-xs);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.05em;
|
||
color: var(--vp-c-text-3);
|
||
padding: var(--vp-spacing-2) var(--vp-spacing-4);
|
||
}
|
||
|
||
/* Sidebar numbering and indentation */
|
||
/* Initialize counter on the sidebar container */
|
||
.VPSidebar .VPSidebarGroup,
|
||
.VPSidebar nav {
|
||
counter-reset: sidebar-item;
|
||
}
|
||
|
||
/* Increment counter for level-1 items only */
|
||
.VPSidebar .VPSidebarItem.level-1 {
|
||
counter-increment: sidebar-item;
|
||
}
|
||
|
||
/* Add numbers to sidebar items */
|
||
.VPSidebar .VPSidebarItem.level-1 .link::before {
|
||
content: counter(sidebar-item) ". ";
|
||
color: var(--vp-c-text-3);
|
||
font-weight: 500;
|
||
margin-right: 8px;
|
||
}
|
||
|
||
/* Indentation for different levels */
|
||
.VPSidebar .VPSidebarItem.level-1 {
|
||
padding-left: 16px;
|
||
}
|
||
|
||
.VPSidebar .VPSidebarItem.level-2 {
|
||
padding-left: 32px;
|
||
}
|
||
|
||
.VPSidebar .VPSidebarItem.level-3 {
|
||
padding-left: 48px;
|
||
}
|
||
|
||
/* ============================================
|
||
* Navigation Polish
|
||
* ============================================ */
|
||
.VPNav {
|
||
background: var(--vp-c-bg);
|
||
border-bottom: 1px solid var(--vp-c-divider);
|
||
box-shadow: var(--vp-shadow-xs);
|
||
}
|
||
|
||
.VPNavBar .title {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-weight: 700;
|
||
font-size: var(--vp-font-size-lg);
|
||
color: var(--vp-c-text-1);
|
||
}
|
||
|
||
.VPNavBarMenu .VPNavBarMenuLink {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-weight: 500;
|
||
font-size: var(--vp-font-size-sm);
|
||
transition: color var(--vp-transition-color);
|
||
}
|
||
|
||
.VPNavBarMenu .VPNavBarMenuLink:hover {
|
||
color: var(--vp-c-primary);
|
||
}
|
||
|
||
.VPNavBarMenu .VPNavBarMenuLink.active {
|
||
color: var(--vp-c-primary);
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* ============================================
|
||
* Scrollbar Styling
|
||
* Subtle, flat design
|
||
* ============================================ */
|
||
::-webkit-scrollbar {
|
||
width: 8px;
|
||
height: 8px;
|
||
}
|
||
|
||
::-webkit-scrollbar-track {
|
||
background: transparent;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb {
|
||
background: var(--vp-c-surface-2);
|
||
border-radius: var(--vp-radius-full);
|
||
border: 2px solid transparent;
|
||
background-clip: padding-box;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb:hover {
|
||
background: var(--vp-c-surface-3);
|
||
border: 2px solid transparent;
|
||
background-clip: padding-box;
|
||
}
|
||
|
||
/* Firefox scrollbar */
|
||
* {
|
||
scrollbar-width: thin;
|
||
scrollbar-color: var(--vp-c-surface-2) transparent;
|
||
}
|
||
|
||
/* ============================================
|
||
* TOC (Table of Contents) Polish
|
||
* Sticky positioning handled by grid layout in mobile.css
|
||
* ============================================ */
|
||
.VPDocOutline {
|
||
padding-left: 24px;
|
||
}
|
||
|
||
.VPDocOutline .outline-link {
|
||
font-family: var(--vp-font-family-base);
|
||
font-size: var(--vp-font-size-sm);
|
||
line-height: var(--vp-line-height-normal);
|
||
padding: var(--vp-spacing-1) var(--vp-spacing-2);
|
||
color: var(--vp-c-text-3);
|
||
transition: color var(--vp-transition-color);
|
||
border-radius: var(--vp-radius-md);
|
||
}
|
||
|
||
.VPDocOutline .outline-link:hover {
|
||
color: var(--vp-c-primary);
|
||
background: var(--vp-c-bg-soft);
|
||
}
|
||
|
||
/* Match VitePress actual DOM structure: <li><a class="outline-link active">...</a></li> */
|
||
/* Override VitePress scoped styles with higher specificity */
|
||
.VPDocAside .VPDocAsideOutline .outline-link.active {
|
||
color: var(--vp-c-brand) !important;
|
||
font-weight: 600 !important;
|
||
background: var(--vp-c-bg-soft) !important;
|
||
padding: 4px 8px !important;
|
||
border-radius: 4px !important;
|
||
transition: all 0.25s !important;
|
||
}
|
||
|
||
.VPDocOutline .outline-marker {
|
||
width: 3px;
|
||
background: var(--vp-c-brand);
|
||
border-radius: var(--vp-radius-full);
|
||
}
|
||
|
||
/* ============================================
|
||
* Link Improvements
|
||
* Clean, accessible link styling
|
||
* ============================================ */
|
||
a {
|
||
text-decoration: none;
|
||
color: var(--vp-c-primary);
|
||
transition: color var(--vp-transition-color);
|
||
cursor: pointer;
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: underline;
|
||
color: var(--vp-c-primary-600);
|
||
}
|
||
|
||
a:visited {
|
||
color: var(--vp-c-primary-700);
|
||
}
|
||
|
||
.dark a:visited {
|
||
color: var(--vp-c-primary-300);
|
||
}
|
||
|
||
/* External link indicator */
|
||
.vp-doc a[target="_blank"]::after {
|
||
content: " ↗";
|
||
font-size: 0.75em;
|
||
opacity: 0.7;
|
||
}
|
||
|
||
/* ============================================
|
||
* Button Improvements
|
||
* ============================================ */
|
||
.VPButton {
|
||
font-family: var(--vp-font-family-heading);
|
||
font-weight: 600;
|
||
font-size: var(--vp-font-size-sm);
|
||
padding: var(--vp-spacing-2-5) var(--vp-spacing-5);
|
||
border-radius: var(--vp-radius-lg);
|
||
transition: all var(--vp-transition-color);
|
||
cursor: pointer;
|
||
}
|
||
|
||
.VPButton.brand {
|
||
background: var(--vp-c-primary);
|
||
color: white;
|
||
border: none;
|
||
}
|
||
|
||
.VPButton.brand:hover {
|
||
background: var(--vp-c-primary-600);
|
||
transform: translateY(-1px);
|
||
box-shadow: var(--vp-shadow-md);
|
||
}
|
||
|
||
.VPButton.alt {
|
||
background: var(--vp-c-bg-soft);
|
||
color: var(--vp-c-text-1);
|
||
border: 1px solid var(--vp-c-divider);
|
||
}
|
||
|
||
.VPButton.alt:hover {
|
||
background: var(--vp-c-bg-mute);
|
||
border-color: var(--vp-c-primary);
|
||
}
|
||
|
||
/* ============================================
|
||
* Focus States — Accessibility
|
||
* Clear visible focus for keyboard navigation
|
||
* ============================================ */
|
||
:focus-visible {
|
||
outline: 2px solid var(--vp-c-primary);
|
||
outline-offset: 2px;
|
||
border-radius: var(--vp-radius-md);
|
||
}
|
||
|
||
/* Skip focus outline for mouse users */
|
||
:focus:not(:focus-visible) {
|
||
outline: none;
|
||
}
|
||
|
||
/* Better focus for interactive elements */
|
||
a:focus-visible,
|
||
button:focus-visible,
|
||
input:focus-visible,
|
||
select:focus-visible,
|
||
textarea:focus-visible {
|
||
outline: 2px solid var(--vp-c-primary);
|
||
outline-offset: 2px;
|
||
box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.15);
|
||
}
|
||
|
||
/* ============================================
|
||
* Skip Link — Accessibility
|
||
* ============================================ */
|
||
.skip-link {
|
||
position: absolute;
|
||
top: -100px;
|
||
left: 0;
|
||
background: var(--vp-c-bg);
|
||
padding: 8px 16px;
|
||
z-index: 9999;
|
||
transition: top 0.3s;
|
||
}
|
||
|
||
.skip-link:focus {
|
||
top: 0;
|
||
}
|
||
|
||
/* ============================================
|
||
* Print Styles
|
||
* ============================================ */
|
||
@media print {
|
||
.VPNav,
|
||
.VPSidebar,
|
||
.skip-link {
|
||
display: none;
|
||
}
|
||
|
||
.VPContent {
|
||
margin: 0 !important;
|
||
padding: 0 !important;
|
||
}
|
||
}
|
||
|
||
/*
|
||
* ===================================================================
|
||
* 智能响应式内容宽度方案 (Intelligent Responsive Content Width)
|
||
* ===================================================================
|
||
* 目的: 根据视口宽度动态调整内容区域占比,优化空间利用。
|
||
* 原理: 使用rem单位的padding,在不同视口宽度下提供合适的留白。
|
||
* 窄屏使用较小padding,超宽屏使用较大padding。
|
||
*/
|
||
|
||
/* 步骤1: 在所有桌面视图下,让.container可以填满父级空间 */
|
||
@media (min-width: 1024px) {
|
||
.VPDoc.has-aside .container {
|
||
max-width: none !important;
|
||
width: 100% !important;
|
||
margin: 0 !important;
|
||
padding: 0 var(--vp-spacing-8) !important;
|
||
}
|
||
|
||
.VPContent.has-sidebar {
|
||
margin-left: var(--vp-sidebar-width) !important;
|
||
margin-right: var(--vp-toc-width) !important;
|
||
width: calc(100vw - var(--vp-sidebar-width) - var(--vp-toc-width)) !important;
|
||
box-sizing: border-box;
|
||
}
|
||
}
|
||
|
||
/* 窄屏 (1024px - 1439px): 使用2rem padding */
|
||
@media (min-width: 1024px) and (max-width: 1439px) {
|
||
.VPContent.has-sidebar {
|
||
padding-left: 2rem !important;
|
||
padding-right: 2rem !important;
|
||
}
|
||
}
|
||
|
||
/* 标准宽屏 (1440px - 1919px): 使用3rem padding */
|
||
@media (min-width: 1440px) and (max-width: 1919px) {
|
||
.VPContent.has-sidebar {
|
||
padding-left: 3rem !important;
|
||
padding-right: 3rem !important;
|
||
}
|
||
}
|
||
|
||
/* 超宽屏 (>= 1920px): 使用5rem padding */
|
||
@media (min-width: 1920px) {
|
||
.VPContent.has-sidebar {
|
||
padding-left: 5rem !important;
|
||
padding-right: 5rem !important;
|
||
}
|
||
}
|
||
|
||
/* ============================================
|
||
* Widen Doc Content to Fill Container
|
||
* ============================================ */
|
||
/*
|
||
* Overrides VitePress's default readability width limit for .vp-doc
|
||
* and .content-container on desktop layouts, allowing content to use
|
||
* the full available space defined by the responsive padding in the
|
||
* "Intelligent Responsive Content Width" section.
|
||
*/
|
||
@media (min-width: 1024px) {
|
||
/* Expand .content to fill available space */
|
||
.VPDoc.has-aside .container .content {
|
||
flex-grow: 1 !important;
|
||
max-width: none !important;
|
||
}
|
||
|
||
/* Use multiple selectors to increase specificity and override scoped styles */
|
||
.VPDoc.has-aside .container .content-container,
|
||
.VPDoc.has-aside .content-container[class],
|
||
.content-container {
|
||
max-width: none !important;
|
||
width: 100% !important;
|
||
min-width: 100% !important;
|
||
flex-grow: 1 !important;
|
||
flex-basis: 100% !important;
|
||
}
|
||
|
||
.vp-doc {
|
||
max-width: 100% !important;
|
||
width: 100% !important;
|
||
}
|
||
}
|