Files
langflow/docs/css/components.css
Antônio Alexandre Borges Lima bbe2ccdc91 docs: fix sidebar and TOC styles for Redocusaurus (#12748)
* docs: improve sidebar and TOC readability + scroll progress

- Fix left nav sidebar hugging the left edge (remove margin-left)
- Increase sidebar font sizes and lift muted colors for legibility
- TOC right-side: white inactive items, pink active, gray for passed sections
- Add clientModule (tocProgress.js) to track scroll progress in TOC
- Add Redocusaurus API page styles to match site theme

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: fix sidebar/TOC height stability and active item reflow

- Force sidebarViewport to 100vh to prevent shrinking during scroll
- Replace font-weight on active TOC item with text-shadow to avoid reflow

* docs: left-anchor sidebar and increase fonts on large screens

* docs: constrain prev/next nav to match content max-width

* docs: fix sidebar jump on scroll by moving padding-top inside menu

* docs: fix sidebar-ad spacing with transparent padding on li

* docs: fix sidebarViewport height and MutationObserver leak

* docs: constrain doc content to 75vw and remove dead CSS comments

- Cap docMainContainer at 75vw
- Set pagination-nav to 100% width to match content column
- Remove commented-out .markdown and .ch-scrollycoding blocks

* docs: set docMainContainer max-width to 75% for better reading width

* docs: center main-wrapper on large screens and center docItemWrapper

* fix: revert lodash override to stable 4.17.21

lodash 4.18.0 is a broken release — template.js uses assignWith and
arrayEach without importing them, crashing npm start. Pin to 4.17.21
across all nested overrides.

* fix: prevent horizontal scroll on mobile docs pages

docsWrapper has flex:1 0 auto (flex-shrink:0), so it never shrinks below
the natural content width (~570px on iPhone). Cap it to 100vw and add
min-width:0 down the flex chain (docRoot, docMainContainer) so the
layout stays within viewport on narrow screens.

Also remove the overflow:visible override from ch-code-wrapper, which
was defeating the code block's own horizontal containment.

* feat: responsive navbar search and hide social icons on mobile

Shrink search bar as viewport narrows (160px at 1100px, 100px at 996px),
collapse to icon-only at 960px. Hide GitHub, X, and Discord icons below
996px where the hamburger menu takes over navigation.

* fix: images always respect container width above 996px

Use min(100%, 600px) so images are capped at 600px but never overflow
their container when the content area is narrower (e.g. sidebar open).

* fix: improve TOC progress scroll tracking and bottom-of-page detection

Adds scroll handler with RAF throttle, pauses/resumes MutationObserver
to avoid loops, and forces last TOC link active when scrolled to page bottom.

* fix: translate Portuguese comments to English in custom.css

* fix: sidebar viewport fills full screen height

* feat: sidebar section icon turns pink with ease transition when active

* fix: reduce TOC font size to 0.8rem

* fix: remove docMainContainer right padding and add 48px gap to content col

* fix: card header responsive alignment and title margin reset

* fix: darken card background and active sidebar item bg on light theme

* fix: revert TOC colors and add inline code border radius tweak

* fix: minimal scrollbar for sidebar and TOC — thumb only on hover

* fix: scrollbar fade-in/out transition at 0.25s ease

* feat: add rehype plugin for table column wrapping and centering

Inserts zero-width space after underscores in inline code cells so long
env-var names wrap at underscore boundaries. Also centers Format/Default
columns via a col-center class applied at build time.

* fix: use --ifm-heading-color for sidebar group labels in both themes

* refactor: split docs custom.css into themed partials

Breaks the 1,658-line monolithic custom.css into 8 focused files
(tokens, layout, navbar, sidebar, typography, components, code,
redocusaurus). custom.css is now a thin entry point with @imports.

* fix: align sidebar and navbar with shared --docs-gutter token

Introduces --docs-gutter: 1rem in tokens.css and applies it to both
navbar__inner horizontal padding and sidebar nav.menu padding-left,
keeping the Langflow logo and sidebar items visually aligned.

* fix: match sidebar ad background to page background color

Dark mode uses #111 (same as sidebar bg); light mode uses --ifm-background-color.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 22:11:36 +00:00

370 lines
7.2 KiB
CSS

/* Tabs Styling */
.tabs-container {
border: 1px solid var(--ifm-color-emphasis-300);
border-radius: var(--ifm-global-radius);
padding: 1rem;
margin-bottom: 1rem;
}
.tabs {
margin-bottom: 1rem;
}
.tabs__item {
border: none;
border-bottom: 1px solid var(--ifm-color-emphasis-200);
margin-right: 0rem;
padding-bottom: 0.5rem;
border-radius: 0;
}
.tabs__item:hover {
background-color: var(--ifm-hover-overlay);
}
.tabs__item--active {
border-bottom-color: var(--ifm-tabs-color-active);
}
/* Dark Mode - Cards & surfaces */
[data-theme="dark"] .markdown details {
background: var(--ifm-card-background-color, #232328);
border-color: var(--ifm-card-border-color, #303038);
}
[data-theme="dark"] .tabs-container {
border-color: var(--ifm-card-border-color, #303038);
background: var(--ifm-card-background-color, #232328);
}
/* Admonitions - subtle, muted style */
.admonition {
border-radius: 8px;
border: 1px solid var(--ifm-color-emphasis-200);
border-left-width: 3px;
font-size: 0.9375rem;
}
[data-theme="dark"] .admonition {
background: rgba(255, 255, 255, 0.02);
border-color: #303038;
border-left-color: var(--ifm-color-primary);
}
[data-theme="dark"] .admonition .admonition-heading h5 {
color: #a0a0a8;
font-size: 0.8125rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
/* ========================================
Steps Component
======================================== */
.steps-container {
counter-reset: step-counter;
padding-left: 0;
}
.step-item {
counter-increment: step-counter;
position: relative;
padding-left: 3rem;
padding-bottom: 2rem;
border-left: 2px solid var(--ifm-color-emphasis-200);
margin-left: 0.875rem;
}
.step-item:last-child {
border-left-color: transparent;
padding-bottom: 0;
}
.step-header {
display: flex;
align-items: center;
gap: 0;
margin-bottom: 0.75rem;
}
.step-number {
position: absolute;
left: -0.875rem;
width: 1.75rem;
height: 1.75rem;
border-radius: 50%;
background: var(--ifm-color-primary);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.8125rem;
font-weight: 600;
flex-shrink: 0;
}
.step-number::before {
content: counter(step-counter);
}
.step-title {
font-size: 1.25rem;
font-weight: 600;
margin: 0;
line-height: 1.75rem;
}
.step-content {
color: var(--ifm-color-emphasis-800);
}
[data-theme="dark"] .step-item {
border-left-color: var(--ifm-card-border-color, #303038);
}
[data-theme="dark"] .step-item:last-child {
border-left-color: transparent;
}
/* ========================================
Cards Component
======================================== */
.lf-cards {
display: grid;
gap: 1rem;
margin: 1.5rem 0;
}
@media (max-width: 768px) {
.lf-cards {
grid-template-columns: 1fr !important;
}
}
.lf-card-link {
text-decoration: none !important;
color: inherit !important;
display: flex;
}
.lf-card {
position: relative;
padding: 1.25rem;
display: flex;
flex-direction: column;
width: 100%;
border: 1px solid var(--ifm-color-emphasis-200);
border-radius: var(--ifm-global-radius);
background: var(--ifm-background-surface-color);
transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.lf-card:hover {
border-color: var(--ifm-color-primary);
box-shadow: 0 0 0 1px var(--ifm-color-primary);
}
.lf-card-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 0.5rem;
}
.lf-card-icon {
display: flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
color: var(--ifm-color-primary);
flex-shrink: 0;
}
.lf-card-title {
font-size: 1.0625rem;
font-weight: 600;
margin: 0 !important;
line-height: 1.4;
min-width: 0;
flex: 1;
}
.lf-card-body {
font-size: 0.9375rem;
color: var(--ifm-color-emphasis-700);
line-height: 1.6;
flex: 1;
}
.lf-card-body ul {
margin: 0.5rem 0 0;
padding-left: 1.25rem;
}
.lf-card-body li {
margin-bottom: 0.25rem;
}
.lf-card-arrow {
position: absolute;
top: 1.25rem;
right: 1.25rem;
color: var(--ifm-color-emphasis-400);
transition: color 0.15s ease, transform 0.15s ease;
}
.lf-card:hover .lf-card-arrow {
color: var(--ifm-color-primary);
transform: translateX(2px);
}
[data-theme="dark"] .lf-card {
background: var(--ifm-card-background-color, #232328);
border-color: var(--ifm-card-border-color, #303038);
}
/* ========================================
Frame Component
======================================== */
.lf-frame {
margin: 1.5rem 0;
}
.lf-frame-content {
border: 1px solid var(--ifm-color-emphasis-200);
border-radius: var(--ifm-global-radius);
overflow: hidden;
background: var(--ifm-color-emphasis-100);
}
.lf-frame-content img {
display: block;
width: 100%;
height: auto;
max-height: none;
max-width: none;
margin: 0;
}
/* Light/dark image variants */
[data-theme="light"] .lf-frame-img--dark {
display: none;
}
[data-theme="dark"] .lf-frame-img--light {
display: none;
}
.lf-frame-caption {
text-align: center;
font-size: 0.8125rem;
color: var(--ifm-color-emphasis-600);
margin-top: 0.5rem;
}
[data-theme="dark"] .lf-frame-content {
border-color: var(--ifm-card-border-color, #303038);
background: #111;
}
/* ========================================
Video Component
======================================== */
.lf-video {
margin: 1.5rem 0;
}
.lf-video-wrapper {
position: relative;
padding-top: 56.25%; /* 16:9 */
border-radius: var(--ifm-global-radius);
overflow: hidden;
border: 1px solid var(--ifm-color-emphasis-200);
}
[data-theme="dark"] .lf-video-wrapper {
border-color: var(--ifm-card-border-color, #303038);
}
/* ========================================
Callout Component
======================================== */
.lf-callout {
padding: 1rem 1.25rem;
border-radius: var(--ifm-global-radius);
margin: 1.5rem 0;
border: 1px solid var(--ifm-color-emphasis-200);
}
.lf-callout-header {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.375rem;
}
.lf-callout-emoji {
font-size: 1rem;
}
.lf-callout-title {
font-weight: 600;
font-size: 0.9375rem;
}
.lf-callout-body {
font-size: 0.9375rem;
color: var(--ifm-color-emphasis-800);
line-height: 1.6;
}
.lf-callout--info {
background: rgba(59, 130, 246, 0.05);
border-color: rgba(59, 130, 246, 0.2);
}
.lf-callout--warning {
background: rgba(245, 158, 11, 0.05);
border-color: rgba(245, 158, 11, 0.2);
}
.lf-callout--tip {
background: rgba(34, 197, 94, 0.05);
border-color: rgba(34, 197, 94, 0.2);
}
.lf-callout--note {
background: rgba(168, 85, 247, 0.05);
border-color: rgba(168, 85, 247, 0.2);
}
[data-theme="dark"] .lf-callout {
border-color: var(--ifm-card-border-color, #303038);
}
[data-theme="dark"] .lf-callout--info {
background: rgba(59, 130, 246, 0.08);
border-color: rgba(59, 130, 246, 0.2);
}
[data-theme="dark"] .lf-callout--warning {
background: rgba(245, 158, 11, 0.08);
border-color: rgba(245, 158, 11, 0.2);
}
[data-theme="dark"] .lf-callout--tip {
background: rgba(34, 197, 94, 0.08);
border-color: rgba(34, 197, 94, 0.2);
}
[data-theme="dark"] .lf-callout--note {
background: rgba(168, 85, 247, 0.08);
border-color: rgba(168, 85, 247, 0.2);
}