/ docs-website / src / css / custom.css
custom.css
  1  /* SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
  2   *
  3   * SPDX-License-Identifier: Apache-2.0
  4   */
  5  
  6  /* Import Inter font from Google Fonts */
  7  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap');
  8  
  9  :root {
 10    /* Primary Color Scale (Blue) - Light Mode */
 11    --ifm-color-primary: #2558FF;
 12    --ifm-color-primary-dark: #1F49D4;
 13    --ifm-color-primary-darker: #193BAA;
 14    --ifm-color-primary-darkest: #132C80;
 15    --ifm-color-primary-light: #4974FF;
 16    --ifm-color-primary-lighter: #6E90FF;
 17    --ifm-color-primary-lightest: #92ABFF;
 18  
 19    /* Secondary Color Scale (Blue Tints) - Light Mode */
 20    --ifm-color-secondary: #B6C7FF;
 21    --ifm-color-secondary-dark: #92ABFF;
 22    --ifm-color-secondary-darker: #6E90FF;
 23    --ifm-color-secondary-darkest: #4974FF;
 24    --ifm-color-secondary-light: #D3DEFF;
 25    --ifm-color-secondary-lighter: #E6ECFF;
 26    --ifm-color-secondary-lightest: #F0F4FF;
 27  
 28    /* Brand Colors for Reference */
 29    --haystack-blue-main: #2558FF;
 30    --haystack-blue-soft: #B6C7FF;
 31    --haystack-blue-medium: #6E90FF;
 32    --haystack-blue-strong: #193BAA;
 33    --haystack-blue-light: #E6ECFF;
 34  
 35    /* Code and Typography */
 36    --ifm-code-font-size: 95%;
 37    --docusaurus-highlighted-code-line-bg: rgba(37, 88, 255, 0.12);
 38    --ifm-font-family-base:    "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
 39    --ifm-font-family-heading: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
 40  
 41    /* Admonition Custom Colors */
 42    --docusaurus-admonition-tip-bg: rgba(37, 88, 255, 0.08);
 43    --docusaurus-admonition-tip-border: var(--ifm-color-primary);
 44    --docusaurus-admonition-note-bg: rgba(182, 199, 255, 0.15);
 45    --docusaurus-admonition-note-border: #6E90FF;
 46    --docusaurus-admonition-info-bg: rgba(110, 144, 255, 0.1);
 47    --docusaurus-admonition-info-border: #92ABFF;
 48  
 49    /* Content Width - wider for long class names */
 50    --ifm-container-width: 1024px;
 51  
 52    /* Neutral Colors for UI Components */
 53    --color-background: #ffffff;
 54    --color-background-hover: #f5f7fa;
 55    --color-border: #e0e0e0;
 56    --color-border-hover: #d0d0d0;
 57    --color-text-primary: #333333;
 58    --color-text-secondary: #666666;
 59    --color-shadow: rgba(0, 0, 0, 0.12);
 60  
 61    /* Success Colors */
 62    --color-success-bg: #e6f4ea;
 63    --color-success-border: #b7dfc7;
 64    --color-success-text: #155724;
 65  }
 66  
 67  /* For readability concerns, you should choose a lighter palette in dark mode. */
 68  [data-theme='dark'] {
 69    /* Primary Color Scale (Blue) - Dark Mode */
 70    --ifm-color-primary: #6E90FF;
 71    --ifm-color-primary-dark: #4974FF;
 72    --ifm-color-primary-darker: #2558FF;
 73    --ifm-color-primary-darkest: #1F49D4;
 74    --ifm-color-primary-light: #92ABFF;
 75    --ifm-color-primary-lighter: #B6C7FF;
 76    --ifm-color-primary-lightest: #D3DEFF;
 77  
 78    /* Secondary Color Scale (Blue Tints) - Dark Mode */
 79    --ifm-color-secondary: #92ABFF;
 80    --ifm-color-secondary-dark: #6E90FF;
 81    --ifm-color-secondary-darker: #4974FF;
 82    --ifm-color-secondary-darkest: #2558FF;
 83    --ifm-color-secondary-light: #B6C7FF;
 84    --ifm-color-secondary-lighter: #D3DEFF;
 85    --ifm-color-secondary-lightest: #E6ECFF;
 86  
 87    /* Code and Typography */
 88    --docusaurus-highlighted-code-line-bg: rgba(110, 144, 255, 0.2);
 89  
 90    /* Admonition Custom Colors - Dark Mode */
 91    --docusaurus-admonition-tip-bg: rgba(110, 144, 255, 0.15);
 92    --docusaurus-admonition-tip-border: #6E90FF;
 93    --docusaurus-admonition-note-bg: rgba(146, 171, 255, 0.15);
 94    --docusaurus-admonition-note-border: #92ABFF;
 95    --docusaurus-admonition-info-bg: rgba(182, 199, 255, 0.12);
 96    --docusaurus-admonition-info-border: #B6C7FF;
 97  
 98    /* Neutral Colors for UI Components - Dark Mode */
 99    --color-background: #2a2a2a;
100    --color-background-hover: #333333;
101    --color-border: #444444;
102    --color-border-hover: #555555;
103    --color-text-primary: #e0e0e0;
104    --color-text-secondary: #999999;
105    --color-shadow: rgba(0, 0, 0, 0.4);
106  
107    /* Success Colors - Dark Mode */
108    --color-success-bg: #1a3d1f;
109    --color-success-border: #2d5a34;
110    --color-success-text: #8fd69d;
111  }
112  
113  body {
114    font-family: var(--ifm-font-family-base);
115  }
116  
117  /* 5) Headings weight & family */
118  h1, h2, h3, h4, h5, h6 {
119    font-family: var(--ifm-font-family-heading);
120    font-weight: 700;
121  }
122  
123  /* Heading sizes */
124  h1 {
125    font-size: 2rem;
126    font-weight: 700;
127  }
128  
129  h2 {
130    font-size: 1.5rem;
131    font-weight: 700;
132  }
133  
134  h3 {
135    font-size: 1.3rem;
136    font-weight: 700;
137  }
138  
139  h4 {
140    font-size: 1.15rem;
141    font-weight: 600;
142  }
143  
144  /* 6) Buttons, spacing, etc. (optional) */
145  button, .button {
146    border-radius: 8px;
147  }
148  
149  /* Top Navbar active state styling - using dc-docs approach with haystack-docs colors */
150  .navbar__item.navbar__link--active,
151  .navbar__item.navbar__link--active:hover {
152    color: var(--ifm-color-primary) !important;
153    font-weight: 600;
154  }
155  
156  /* Style for the Docs and API Reference navbar items */
157  .navbar__item[href*="/docs/"],
158  .navbar__item[href*="/reference/"] {
159    transition: color 0.2s ease;
160  }
161  
162  .navbar__item[href*="/docs/"]:hover,
163  .navbar__item[href*="/reference/"]:hover {
164    color: var(--ifm-color-primary);
165  }
166  
167  /* Active state for API Reference section */
168  .navbar__item[href*="/reference/"].navbar__link--active,
169  .navbar__item[href*="/reference/"].navbar__link--active:hover {
170    color: var(--ifm-color-primary) !important;
171    font-weight: 600;
172  }
173  
174  /* ========================================
175     BREADCRUMBS - Neutral Grey with Blue Active
176     ======================================== */
177  
178  /* Breadcrumb links - grey for non-active items */
179  .breadcrumbs__link {
180    color: #6B7280;
181  }
182  
183  .breadcrumbs__link:hover {
184    color: var(--ifm-color-primary);
185    background: transparent;
186  }
187  
188  /* Active breadcrumb item - blue */
189  .breadcrumbs__item--active .breadcrumbs__link {
190    color: var(--ifm-color-primary);
191    font-weight: 500;
192  }
193  
194  [data-theme='dark'] .breadcrumbs__link {
195    color: #9CA3AF;
196  }
197  
198  [data-theme='dark'] .breadcrumbs__link:hover {
199    color: var(--ifm-color-primary-light);
200  }
201  
202  [data-theme='dark'] .breadcrumbs__item--active .breadcrumbs__link {
203    color: var(--ifm-color-primary);
204  }
205  
206  /* Footer section titles - make them bold and prominent */
207  .footer .footer__title,
208  .footer .footer__col .footer__title,
209  .footer__links .footer__col .footer__title,
210  .footer--dark .footer__title {
211    font-weight: 900 !important;
212    color: #ffffff !important;
213    font-size: 1.1em !important;
214    text-transform: uppercase !important;
215    letter-spacing: 0.5px !important;
216  }
217  
218  /* Footer links - white on hover for better contrast on green background */
219  .footer__link-item {
220    color: rgba(255, 255, 255, 0.7);
221  }
222  
223  .footer__link-item:hover {
224    color: #ffffff !important;
225    text-decoration: underline;
226  }
227  
228  /* Remove any secondary/lilac color from footer */
229  .footer a {
230    color: rgba(255, 255, 255, 0.7);
231  }
232  
233  .footer a:hover {
234    color: #ffffff !important;
235  }
236  
237  /* Footer copyright - same color as other footer text */
238  .footer__copyright {
239    color: rgba(255, 255, 255, 0.7) !important;
240  }
241  
242  /* Footer - Haystack Blue Background */
243  .footer.footer--dark {
244    background-color: #193BAA !important;
245  }
246  
247  [data-theme='dark'] .footer.footer--dark {
248    background-color: #132C80 !important;
249  }
250  
251  /* Footer Social Media Icons */
252  .footer-social-icons-container {
253    display: flex;
254    flex-direction: column;
255    gap: 0.75rem;
256    margin-left: -0.25rem;
257  }
258  
259  .footer-social-row {
260    display: flex;
261    gap: 1rem;
262    justify-content: flex-start;
263  }
264  
265  .footer-social-icon {
266    width: 24px;
267    height: 24px;
268    filter: brightness(0) invert(1);
269    opacity: 0.7;
270    transition: opacity 0.2s ease, transform 0.2s ease;
271    display: inline-block;
272    vertical-align: middle;
273  }
274  
275  .footer-social-icon:hover {
276    opacity: 1;
277    transform: scale(1.1);
278  }
279  
280  .footer__link-item:has(.footer-social-icon) {
281    display: inline-flex;
282    align-items: center;
283    padding: 0.25rem;
284  }
285  
286  .footer__link-item:has(.footer-social-icon):hover {
287    text-decoration: none;
288  }
289  
290  /* Sidebar navigation - top-level items bold */
291  .menu__list > .menu__list-item > .menu__link {
292    font-weight: 600;
293    font-size: 0.95rem;
294  }
295  
296  .menu__link {
297    color: #4B5563;
298    transition: color 0.2s ease, background-color 0.2s ease;
299    position: relative;
300  }
301  
302  /* Truncate only single-word items (like class names: SentenceTransformersDocumentImageEmbedder) */
303  /* Multi-word phrases (like "Migrating from LangGraph to Haystack") will wrap normally */
304  .menu__link--single-word {
305    white-space: nowrap !important;
306    overflow: hidden;
307    text-overflow: ellipsis;
308  }
309  
310  [data-theme='dark'] .menu__link {
311    color: #E5E7EB;
312  }
313  
314  /* Sidebar navigation - sub-items normal weight */
315  .menu__list .menu__list .menu__link {
316    font-weight: 400;
317    font-size: 0.925rem;
318    padding-left: 1.25rem;
319  }
320  
321  /* Highlight all items in the active path (breadcrumb trail) */
322  .menu__link--active {
323    color: var(--ifm-color-primary-dark) !important;
324    font-weight: 600;
325  }
326  
327  /* Add background highlight only to the actual page (leaf node) */
328  .theme-doc-sidebar-item-link .menu__link--active {
329    background-color: rgba(37, 88, 255, 0.1);
330    border-left: 3px solid var(--ifm-color-primary);
331    padding-left: calc(var(--ifm-menu-link-padding-horizontal) - 3px);
332  }
333  
334  /* Hover state for sidebar links */
335  .menu__link:hover {
336    background-color: rgba(37, 88, 255, 0.06);
337    color: var(--ifm-color-primary);
338    transition: background-color 0.2s ease;
339  }
340  
341  /* Active link hover - keep stronger background */
342  .theme-doc-sidebar-item-link .menu__link--active:hover {
343    background-color: rgba(37, 88, 255, 0.1);
344  }
345  
346  /* Dark mode adjustments for sidebar */
347  [data-theme='dark'] .theme-doc-sidebar-item-link .menu__link--active {
348    background-color: rgba(110, 144, 255, 0.2);
349    border-left: 3px solid var(--ifm-color-primary);
350    color: var(--ifm-color-primary-light) !important;
351  }
352  
353  [data-theme='dark'] .menu__link:hover {
354    background-color: rgba(110, 144, 255, 0.1);
355    color: var(--ifm-color-primary-light);
356  }
357  
358  [data-theme='dark'] .menu__link--active {
359    color: var(--ifm-color-primary-light) !important;
360  }
361  
362  /* ========================================
363     ADMONITION STYLING - Brand Colors
364     ======================================== */
365  
366  /* Tip Admonitions - Match sidebar navigation color */
367  .theme-admonition.alert.alert--success {
368    background-color: rgba(37, 88, 255, 0.08);
369    border-left: 4px solid var(--ifm-color-primary);
370  }
371  
372  .theme-admonition.alert.alert--success .admonition-icon svg {
373    fill: var(--ifm-color-primary);
374  }
375  
376  .theme-admonition.alert.alert--success .admonition-heading {
377    color: var(--ifm-color-primary-dark);
378  }
379  
380  /* Note Admonitions - Blue Tint */
381  .theme-admonition.alert.alert--secondary {
382    background-color: var(--docusaurus-admonition-note-bg);
383    border-left: 4px solid var(--docusaurus-admonition-note-border);
384  }
385  
386  .theme-admonition.alert.alert--secondary .admonition-icon svg {
387    fill: var(--ifm-color-secondary);
388  }
389  
390  .theme-admonition.alert.alert--secondary .admonition-heading {
391    color: var(--ifm-color-secondary-dark);
392  }
393  
394  /* Info Admonitions - Blue Soft */
395  .theme-admonition.alert.alert--info {
396    background-color: var(--docusaurus-admonition-info-bg);
397    border-left: 4px solid var(--docusaurus-admonition-info-border);
398  }
399  
400  .theme-admonition.alert.alert--info .admonition-icon svg {
401    fill: var(--ifm-color-primary-light);
402  }
403  
404  .theme-admonition.alert.alert--info .admonition-heading {
405    color: var(--ifm-color-primary);
406  }
407  
408  /* ========================================
409     INTERACTIVE ELEMENTS - Enhanced Colors
410     ======================================== */
411  
412  /* Primary Links - only underline content links, not navigation */
413  article a {
414    color: var(--ifm-color-primary);
415    transition: text-decoration 0.2s ease;
416  }
417  
418  article a:hover {
419    text-decoration: underline;
420  }
421  
422  /* Reset general link behavior - no underline by default */
423  a {
424    text-decoration: none;
425  }
426  
427  a:hover {
428    text-decoration: none;
429  }
430  
431  /* Navbar links - keep neutral color until hovered/active */
432  .navbar__link {
433    color: var(--ifm-navbar-link-color) !important;
434  }
435  
436  .navbar__link:hover,
437  .navbar__link:focus-visible {
438    color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)) !important;
439  }
440  
441  .navbar__link:active {
442    color: var(--ifm-navbar-link-active-color, var(--ifm-color-primary)) !important;
443  }
444  
445  /* Navbar logo title - default to neutral, blue on hover */
446  .navbar__title {
447    color: var(--ifm-navbar-link-color) !important;
448  }
449  
450  .navbar__title:hover {
451    color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)) !important;
452  }
453  
454  /* Hide navbar title on mobile/tablet to prevent overlap with search bar */
455  @media (max-width: 996px) {
456    .navbar__title {
457      display: none !important;
458    }
459  
460    /* Ensure navbar brand doesn't grow too large */
461    .navbar__brand {
462      flex-shrink: 0;
463      max-width: fit-content;
464    }
465  }
466  
467  /* Remove underline from navbar logo link */
468  .navbar__logo,
469  .navbar__brand {
470    text-decoration: none !important;
471  }
472  
473  .navbar__logo:hover,
474  .navbar__brand:hover {
475    text-decoration: none !important;
476  }
477  
478  /* Inline Code - Neutral Grey Background */
479  code:not([class*="language-"]) {
480    background-color: #F5F5F7;
481    border: 1px solid #E5E5E7;
482    color: #1D1D1F;
483    padding: 0.15rem 0.4rem;
484    border-radius: 0.25rem;
485  }
486  
487  [data-theme='dark'] code:not([class*="language-"]) {
488    background-color: rgba(255, 255, 255, 0.05);
489    border: 1px solid rgba(255, 255, 255, 0.1);
490    color: #E8E8E8;
491  }
492  
493  /* Links inside inline code - use blue for distinction */
494  a code:not([class*="language-"]),
495  code:not([class*="language-"]) a {
496    color: var(--ifm-color-primary-dark);
497    font-weight: 600;
498  }
499  
500  [data-theme='dark'] a code:not([class*="language-"]),
501  [data-theme='dark'] code:not([class*="language-"]) a {
502    color: var(--ifm-color-primary);
503  }
504  
505  /* Hover state for code links */
506  a:hover code:not([class*="language-"]),
507  code:not([class*="language-"]) a:hover {
508    text-decoration: underline;
509  }
510  
511  /* Primary Buttons */
512  .button--primary {
513    background-color: var(--ifm-color-primary);
514    border-color: var(--ifm-color-primary);
515    color: #ffffff;
516  }
517  
518  .button--primary:hover {
519    background-color: var(--ifm-color-primary-dark);
520    border-color: var(--ifm-color-primary-dark);
521    color: #ffffff;
522  }
523  
524  /* Secondary Buttons - Blue Outline */
525  .button--secondary {
526    background-color: transparent;
527    border: 2px solid var(--ifm-color-primary);
528    color: var(--ifm-color-primary);
529  }
530  
531  .button--secondary:hover {
532    background-color: var(--ifm-color-primary);
533    border-color: var(--ifm-color-primary);
534    color: #ffffff;
535  }
536  
537  /* ========================================
538     CODE BLOCKS - Enhanced Styling
539     ======================================== */
540  
541  /* Code Block Container */
542  .theme-code-block {
543    position: relative;
544    margin-bottom: 1.5rem;
545    border-radius: 8px;
546    overflow: hidden;
547  }
548  
549  /* Language Badge - Positioned at top-right corner */
550  .theme-code-block-with-lang {
551    position: relative;
552  }
553  
554  .code-block-language-badge {
555    position: absolute;
556    top: 0.5rem;
557    right: 0.5rem;
558    background: #E6ECFF;
559    color: #193BAA;
560    font-weight: 600;
561    font-size: 0.6em;
562    text-transform: uppercase;
563    padding: 0.15em 0.5em;
564    border-radius: 0.25rem;
565    letter-spacing: 0.3px;
566    z-index: 1;
567    pointer-events: none;
568    line-height: 1.2;
569  }
570  
571  /* Push action buttons below the language badge */
572  .theme-code-block div[class*="buttonGroup"] {
573    margin-top: 1.5rem;
574  }
575  
576  [data-theme='dark'] .code-block-language-badge {
577    background: rgba(110, 144, 255, 0.2);
578    color: #B6C7FF;
579    border: 1px solid rgba(110, 144, 255, 0.3);
580  }
581  
582  /* Copy Button Styling */
583  .clean-btn.copy-button {
584    border-radius: 0.25rem;
585    transition: background-color 0.2s ease;
586  }
587  
588  .clean-btn.copy-button:hover {
589    background-color: var(--ifm-color-primary-lightest);
590  }
591  
592  [data-theme='dark'] .clean-btn.copy-button:hover {
593    background-color: rgba(110, 144, 255, 0.2);
594  }
595  
596  /* Hide language badge for single-line code blocks */
597  .hide-language-badge .code-block-language-badge {
598    display: none;
599  }
600  
601  /* Hide action buttons for two-line code blocks */
602  .hide-action-buttons div[class*="buttonGroup"] {
603    display: none;
604  }
605  
606  /* ========================================
607     VERSION BADGE & BANNER - Brand Colors
608     ======================================== */
609  
610  /* Version Badge - Lighter grey for better blue contrast */
611  .badge--secondary,
612  .theme-doc-version-badge {
613    background-color: #9CA3AF !important;
614    border-color: #9CA3AF !important;
615    color: #ffffff !important;
616  }
617  
618  [data-theme='dark'] .badge--secondary,
619  [data-theme='dark'] .theme-doc-version-badge {
620    background-color: #6B7280 !important;
621    border-color: #6B7280 !important;
622    color: #ffffff !important;
623  }
624  
625  /* Navbar Version Dropdown - Badge Style with lighter grey */
626  .navbar-version-badge-dropdown {
627    background-color: #9CA3AF !important;
628    border-radius: 12px !important;
629    padding: 3px 10px !important;
630    font-size: 13px !important;
631    margin-right: 10px !important;
632    color: #ffffff !important;
633  }
634  
635  .navbar-version-badge-dropdown .navbar__link,
636  .navbar-version-badge-dropdown .navbar__link *,
637  .navbar-version-badge-dropdown button,
638  .navbar-version-badge-dropdown a,
639  .navbar-version-badge-dropdown span,
640  .navbar__item.navbar-version-badge-dropdown > .navbar__link {
641    color: #ffffff !important;
642    font-weight: 500 !important;
643    padding: 0 !important;
644    transition: color 0.2s ease !important;
645  }
646  
647  /* Light mode: blue TEXT color on hover */
648  .navbar-version-badge-dropdown:hover .navbar__link,
649  .navbar-version-badge-dropdown:hover .navbar__link *,
650  .navbar-version-badge-dropdown:hover button,
651  .navbar-version-badge-dropdown:hover a,
652  .navbar-version-badge-dropdown:hover span,
653  .navbar-version-badge-dropdown .navbar__link:hover,
654  .navbar-version-badge-dropdown .navbar__link:hover * {
655    color: var(--ifm-color-primary-dark) !important;
656    background-color: transparent !important;
657  }
658  
659  /* Force white color on the dropdown caret/arrow */
660  .navbar-version-badge-dropdown::after,
661  .navbar-version-badge-dropdown .navbar__link::after {
662    filter: brightness(0) invert(1) !important;
663    transition: filter 0.2s ease !important;
664  }
665  
666  /* Teal arrow on hover */
667  .navbar-version-badge-dropdown:hover::after,
668  .navbar-version-badge-dropdown:hover .navbar__link::after {
669    filter: none !important;
670  }
671  
672  [data-theme='dark'] .navbar-version-badge-dropdown {
673    background-color: #6B7280 !important;
674    color: #ffffff !important;
675  }
676  
677  [data-theme='dark'] .navbar-version-badge-dropdown .navbar__link,
678  [data-theme='dark'] .navbar-version-badge-dropdown .navbar__link *,
679  [data-theme='dark'] .navbar-version-badge-dropdown button,
680  [data-theme='dark'] .navbar-version-badge-dropdown a,
681  [data-theme='dark'] .navbar-version-badge-dropdown span,
682  [data-theme='dark'] .navbar__item.navbar-version-badge-dropdown > .navbar__link {
683    color: #ffffff !important;
684  }
685  
686  /* Dark mode: blue TEXT color on hover - higher specificity */
687  html[data-theme='dark'] .navbar-version-badge-dropdown:hover .navbar__link,
688  html[data-theme='dark'] .navbar-version-badge-dropdown:hover .navbar__link *,
689  html[data-theme='dark'] .navbar-version-badge-dropdown:hover button,
690  html[data-theme='dark'] .navbar-version-badge-dropdown:hover a,
691  html[data-theme='dark'] .navbar-version-badge-dropdown:hover span,
692  html[data-theme='dark'] .navbar-version-badge-dropdown .navbar__link:hover,
693  html[data-theme='dark'] .navbar-version-badge-dropdown .navbar__link:hover *,
694  html[data-theme='dark'] .navbar__item.navbar-version-badge-dropdown:hover > .navbar__link {
695    color: #6E90FF !important;
696  }
697  
698  /* Unreleased Version Banner */
699  .theme-doc-version-banner.alert--warning {
700    background: linear-gradient(135deg,
701      rgba(25, 59, 170, 0.1) 0%,
702      rgba(110, 144, 255, 0.1) 100%);
703    border-left: 4px solid var(--ifm-color-primary);
704  }
705  
706  [data-theme='dark'] .theme-doc-version-banner.alert--warning {
707    background: linear-gradient(135deg,
708      rgba(110, 144, 255, 0.15) 0%,
709      rgba(182, 199, 255, 0.1) 100%);
710    border-left: 4px solid var(--ifm-color-primary);
711  }
712  
713  /* ========================================
714     TABLE OF CONTENTS - Enhanced Styling
715     ======================================== */
716  
717  .table-of-contents {
718    padding-top: 2.5rem;
719  }
720  
721  .table-of-contents__link {
722    color: #4B5563;
723    position: relative;
724  }
725  
726  [data-theme='dark'] .table-of-contents__link {
727    color: #E5E7EB;
728  }
729  
730  .table-of-contents__link--active {
731    color: var(--ifm-color-primary);
732    font-weight: 600;
733  }
734  
735  /* Active indicator line */
736  .table-of-contents__link--active::before {
737    content: '';
738    position: absolute;
739    left: -1rem;
740    top: 0;
741    bottom: 0;
742    width: 3px;
743    background-color: var(--ifm-color-primary);
744    border-radius: 2px;
745  }
746  
747  [data-theme='dark'] .table-of-contents__link--active {
748    color: var(--ifm-color-primary) !important;
749    font-weight: 600;
750  }
751  
752  .table-of-contents__link--active code {
753    color: var(--ifm-color-primary);
754  }
755  
756  [data-theme='dark'] .table-of-contents__link--active code {
757    color: var(--ifm-color-primary) !important;
758  }
759  
760  .table-of-contents__link:hover {
761    color: var(--ifm-color-primary) !important;
762  }
763  
764  [data-theme='dark'] .table-of-contents__link:hover {
765    color: var(--ifm-color-primary) !important;
766  }
767  
768  /* ========================================
769     DROPDOWN MENUS - Enhanced Colors
770     ======================================== */
771  
772  .dropdown__menu {
773    border-radius: 8px;
774    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
775  }
776  
777  .dropdown__link {
778    color: #374151;
779  }
780  
781  [data-theme='dark'] .dropdown__link {
782    color: #E5E7EB;
783  }
784  
785  /* Active state - keep the color highlight */
786  .dropdown__link--active {
787    background-color: var(--ifm-color-primary-lightest);
788    color: var(--ifm-color-primary);
789  }
790  
791  /* Hover state - gray background only, no color */
792  .dropdown__link:hover {
793    background-color: #F3F4F6;
794    color: #374151;
795  }
796  
797  /* Active item on hover - keep the active color */
798  .dropdown__link--active:hover {
799    background-color: var(--ifm-color-primary-lightest);
800    color: var(--ifm-color-primary);
801  }
802  
803  [data-theme='dark'] .dropdown__link--active {
804    background-color: rgba(110, 144, 255, 0.15);
805    color: var(--ifm-color-primary);
806  }
807  
808  /* Dark mode hover - neutral gray */
809  [data-theme='dark'] .dropdown__link:hover {
810    background-color: #374151;
811    color: #E5E7EB;
812  }
813  
814  /* Dark mode active item on hover - keep the active color */
815  [data-theme='dark'] .dropdown__link--active:hover {
816    background-color: rgba(110, 144, 255, 0.15);
817    color: var(--ifm-color-primary);
818  }
819  
820  /* ========================================
821     PAGINATION - Brand Colors
822     ======================================== */
823  
824  .pagination-nav__link:hover {
825    border-color: var(--ifm-color-primary);
826  }
827  
828  .pagination-nav__link:hover .pagination-nav__label {
829    color: var(--ifm-color-primary);
830  }
831  
832  /* ========================================
833     SEARCH BAR - Enhanced Styling
834     ======================================== */
835  
836  .navbar__search-input:focus {
837    border-color: var(--ifm-color-primary);
838    box-shadow: 0 0 0 0.2rem rgba(37, 88, 255, 0.2);
839  }
840  
841  /* ========================================
842     TABS - Brand Colors
843     ======================================== */
844  
845  .tabs__item--active {
846    border-bottom-color: var(--ifm-color-primary);
847    color: var(--ifm-color-primary);
848  }
849  
850  .tabs__item:hover {
851    color: var(--ifm-color-primary-light);
852  }
853  
854  /* ========================================
855     IMAGES - Dark Mode White Background
856     ======================================== */
857  
858  /* Add white background to images with transparent PNGs in dark mode */
859  [data-theme='dark'] .img-white-bg img,
860  [data-theme='dark'] .img-white-bg picture img {
861    background-color: #ffffff;
862    padding: 1rem;
863    border-radius: 8px;
864  }
865  
866  /* Alternative: light grey background (less harsh) */
867  [data-theme='dark'] .img-light-bg img,
868  [data-theme='dark'] .img-light-bg picture img {
869    background-color: #f8f9fa;
870    padding: 1rem;
871    border-radius: 8px;
872  }
873  
874  /* ========================================
875     KEY-VALUE TABLE STYLING - Headerless Tables
876     ======================================== */
877  
878  .key-value-table {
879    width: 100%;
880    overflow-x: auto;
881  }
882  
883  .key-value-table thead {
884    display: none;
885  }
886  
887  .key-value-table table {
888    width: 100%;
889    border-collapse: collapse;
890    table-layout: auto;
891  }
892  
893  .key-value-table td {
894    padding: 0.6rem 0.75rem;
895    vertical-align: top;
896  }
897  
898  .key-value-table td:first-child {
899    font-weight: 600;
900    width: 1%;
901    min-width: 180px;
902    padding-right: 1rem;
903  }
904  
905  .key-value-table td:last-child {
906    white-space: normal;
907    overflow-wrap: break-word;
908    word-break: break-word;
909  }
910  
911  .key-value-table td a {
912    word-break: break-word;
913  }
914  
915  @media (max-width: 600px) {
916    .key-value-table {
917      overflow-x: auto;
918    }
919  
920    .key-value-table table {
921      min-width: 500px;
922    }
923  }
924  
925  /* ========================================
926     SIDE-BY-SIDE CODE COMPARISON
927     ======================================== */
928  
929  .code-comparison {
930    display: flex;
931    gap: 1.5rem;
932    align-items: stretch;
933    margin: 1rem 0 2rem;
934  }
935  
936  .code-comparison__column {
937    flex: 1 1 0;
938    min-width: 0;
939  }
940  
941  .code-comparison .theme-code-block {
942    height: 100%;
943  }
944  
945  @media (max-width: 996px) {
946    .code-comparison {
947      flex-direction: column;
948    }
949  }
950  
951  /* ========================================= */
952  /* CRITICAL: Version badge hover color fix  */
953  /* These rules MUST be at the end to ensure */
954  /* they override all other hover styles     */
955  /* ========================================= */
956  
957  /* Dark mode version badge - blue text on hover */
958  html[data-theme='dark'] .navbar-version-badge-dropdown:hover,
959  html[data-theme='dark'] .navbar-version-badge-dropdown:hover > a,
960  html[data-theme='dark'] .navbar-version-badge-dropdown:hover > a.navbar__link,
961  html[data-theme='dark'] .navbar-version-badge-dropdown:hover .navbar__link,
962  html[data-theme='dark'] .navbar-version-badge-dropdown > a:hover,
963  html[data-theme='dark'] .navbar-version-badge-dropdown > a.navbar__link:hover,
964  html[data-theme='dark'] .navbar-version-badge-dropdown a.navbar__link:hover {
965    color: #6E90FF !important;
966  }
967  
968  /* Also target the dropdown arrow/caret in dark mode on hover */
969  html[data-theme='dark'] .navbar-version-badge-dropdown:hover::after,
970  html[data-theme='dark'] .navbar-version-badge-dropdown:hover > a::after {
971    filter: none !important;
972  }
973  
974  /* ========================================
975     COPY DROPDOWN - Sticky Button
976     ======================================== */
977  
978  /* Copy dropdown sticky button - floats at the top-right of the content column */
979  .copy-dropdown-sticky {
980    float: right;
981    position: sticky;
982    top: 76px;
983    z-index: 100;
984    margin-bottom: -40px;
985    margin-left: 16px;
986  }
987  
988  @media (max-width: 768px) {
989    .copy-dropdown-sticky {
990      top: 65px;
991    }
992  }
993  
994  @media print {
995    .copy-dropdown-sticky {
996      display: none !important;
997    }
998  }