@vantagecompute/docusaurus-theme 0.4.8 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vantagecompute/docusaurus-theme",
3
- "version": "0.4.8",
3
+ "version": "0.4.9",
4
4
  "description": "Shared Vantage Compute Docusaurus theme: design system, brand assets, and common theme overrides for all vantagecompute documentation sites.",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.cjs",
@@ -366,20 +366,49 @@ div[class^='codeBlockTitle'] {
366
366
  }
367
367
 
368
368
  /* ── Tables ────────────────────────────────────────────────────────── */
369
+ /* Every markdown table renders inside `.table-scroll` (src/theme/MDXComponents),
370
+ which carries the rounded frame and scrolls horizontally. The table itself
371
+ keeps its natural width. The old `display: table; overflow: hidden` on the
372
+ table removed Docusaurus's own overflow scrolling, and a four-column
373
+ reference table on a 345px phone column squeezed to 61px columns with
374
+ 171px rows. Cells are capped at 60ch so one long description cannot force
375
+ a 3000px scroll. */
376
+ .markdown .table-scroll,
377
+ article .table-scroll {
378
+ margin: 14px 0;
379
+ overflow-x: auto;
380
+ -webkit-overflow-scrolling: touch;
381
+ background: var(--ifm-background-surface-color);
382
+ border: 1px solid var(--ink-100);
383
+ border-radius: 8px;
384
+ }
385
+
386
+ .markdown .table-scroll:focus-visible,
387
+ article .table-scroll:focus-visible {
388
+ outline: 2px solid var(--ifm-color-primary);
389
+ outline-offset: 2px;
390
+ }
391
+
369
392
  .markdown table,
370
393
  article table {
371
394
  display: table;
372
395
  width: 100%;
396
+ min-width: max-content;
373
397
  border-collapse: collapse;
374
398
  font-size: 13px;
375
- margin: 14px 0;
399
+ margin: 0;
376
400
  background: var(--ifm-background-surface-color);
377
- border: 1px solid var(--ink-100);
378
- border-radius: 8px;
379
- overflow: hidden;
401
+ border: 0;
380
402
  box-shadow: none;
381
403
  }
382
404
 
405
+ .markdown table td,
406
+ .markdown table th,
407
+ article table td,
408
+ article table th {
409
+ max-width: 60ch;
410
+ }
411
+
383
412
  .markdown table th,
384
413
  article table th {
385
414
  font-weight: 600;
@@ -441,7 +470,11 @@ article table td code {
441
470
  }
442
471
 
443
472
  .markdown li::marker {
444
- color: var(--ink-300);
473
+ /* ink-300 was 2.5:1 against the page in both modes. ink-400 is the ramp's
474
+ fixed point (#6b7494 in both modes) and clears the 3:1 non-text floor:
475
+ 4.6:1 light, 4.1:1 dark. It stays decoration-only; see the note on
476
+ .sidebar-section-label for why it is not used for text. */
477
+ color: var(--ink-400);
445
478
  }
446
479
 
447
480
  /* Tab lists should have no left padding (override .markdown ul) */
@@ -450,6 +483,17 @@ article table td code {
450
483
  margin-bottom: 0;
451
484
  }
452
485
 
486
+ /* Infima scrolls the strip, and a strip that ends flush with the edge hides
487
+ the tabs past it with nothing to say they exist: two of six on a phone.
488
+ Wrap instead, so every tab is on screen in at most two rows. */
489
+ @media (max-width: 996px) {
490
+ .markdown .tabs {
491
+ flex-wrap: wrap;
492
+ overflow-x: visible;
493
+ row-gap: 2px;
494
+ }
495
+ }
496
+
453
497
  /* ── Provider showcase (On-Premises clusters) ───────────────────────── */
454
498
  .provider-showcase {
455
499
  display: grid;
@@ -645,7 +689,7 @@ html[data-theme='dark'] .provider-showcase-item {
645
689
  .guide-meta-label {
646
690
  display: block;
647
691
  margin-bottom: 0.25rem;
648
- color: var(--ink-400);
692
+ color: var(--ink-500);
649
693
  font-size: 0.75rem;
650
694
  font-weight: 700;
651
695
  letter-spacing: 0.08em;
@@ -877,8 +921,66 @@ html[data-theme='dark'] .provider-showcase-item {
877
921
  color: var(--vantage-navbar-link-hover) !important;
878
922
  }
879
923
 
880
- @media (max-width: 1024px) {
881
- .navbar__logo { display: none !important; }
924
+ /* The logo used to be hidden at <=1024px, which with an empty navbar.title
925
+ left every phone and tablet with no brand at all. Keep it; shrink it a
926
+ little where the hamburger shares the row. */
927
+ @media (max-width: 996px) {
928
+ .navbar__logo {
929
+ height: 28px;
930
+ }
931
+ }
932
+
933
+ /* Touch targets below the layout break. WCAG 2.5.8 asks for 24px minimum;
934
+ 44px is the comfortable size. The drawer close button measured 21px,
935
+ sidebar rows and carets 30px, the hamburger 30px. Padding, not larger
936
+ glyphs, so the visuals do not change. Infima's drawer is also 83vw, which
937
+ on a 768px tablet is a 637px menu for a list of 14px rows. */
938
+ @media (max-width: 996px) {
939
+ :root {
940
+ --ifm-navbar-sidebar-width: min(83vw, 360px);
941
+ }
942
+
943
+ .navbar__toggle {
944
+ padding: 7px;
945
+ margin: -7px 0;
946
+ }
947
+
948
+ .navbar-sidebar__close {
949
+ padding: 12px;
950
+ margin-right: -12px;
951
+ }
952
+
953
+ .navbar-sidebar .menu__link {
954
+ padding: 10px 12px;
955
+ }
956
+
957
+ .navbar-sidebar .menu__caret {
958
+ padding: 12px 10px;
959
+ }
960
+
961
+ .breadcrumbs__link {
962
+ display: inline-flex;
963
+ align-items: center;
964
+ min-height: 32px;
965
+ }
966
+
967
+ .theme-doc-toc-mobile > button {
968
+ min-height: 44px;
969
+ }
970
+ }
971
+
972
+ /* Two 165px pagination cards side by side on a phone truncate their titles.
973
+ Infima pins the next card to `grid-column: 2 / 3`, which would open an
974
+ implicit second track even with one column declared, so it is reset too. */
975
+ @media (max-width: 600px) {
976
+ .pagination-nav {
977
+ grid-template-columns: 1fr;
978
+ }
979
+
980
+ .pagination-nav__link--next {
981
+ grid-column: auto;
982
+ text-align: left;
983
+ }
882
984
  }
883
985
 
884
986
  /* ── Sidebar (left) ────────────────────────────────────────────────── */
@@ -1029,7 +1131,7 @@ html[data-theme='dark'] .provider-showcase-item {
1029
1131
  font-weight: 700;
1030
1132
  text-transform: uppercase;
1031
1133
  letter-spacing: 0.08em;
1032
- color: var(--ink-400);
1134
+ color: var(--ink-500);
1033
1135
  margin-bottom: 10px;
1034
1136
  content: 'On this page';
1035
1137
  }
@@ -1085,7 +1187,7 @@ html[data-theme='dark'] .provider-showcase-item {
1085
1187
  }
1086
1188
 
1087
1189
  .breadcrumbs__link {
1088
- color: var(--ink-400);
1190
+ color: var(--ink-500);
1089
1191
  font-weight: 500;
1090
1192
  border-bottom: 0 !important;
1091
1193
  }
@@ -1210,7 +1312,7 @@ a.button--secondary:focus {
1210
1312
  }
1211
1313
 
1212
1314
  .pagination-nav__sublabel {
1213
- color: var(--ink-400);
1315
+ color: var(--ink-500);
1214
1316
  font-size: 11px;
1215
1317
  text-transform: uppercase;
1216
1318
  letter-spacing: 0.06em;
@@ -1378,7 +1480,7 @@ details summary[onclick]:hover {
1378
1480
  --docsearch-spacing: 12px;
1379
1481
  --docsearch-icon-stroke-width: 1.4;
1380
1482
  --docsearch-highlight-color: var(--iris-700);
1381
- --docsearch-muted-color: var(--ink-400);
1483
+ --docsearch-muted-color: var(--ink-500);
1382
1484
  /* Backdrop */
1383
1485
  --docsearch-container-background: rgba(11, 16, 32, 0.48);
1384
1486
  /* Modal */
@@ -1407,7 +1509,7 @@ details summary[onclick]:hover {
1407
1509
  --docsearch-primary-color: #818cf8;
1408
1510
  --docsearch-text-color: var(--ink-700);
1409
1511
  --docsearch-highlight-color: #818cf8;
1410
- --docsearch-muted-color: var(--ink-400);
1512
+ --docsearch-muted-color: var(--ink-500);
1411
1513
  /* Backdrop */
1412
1514
  --docsearch-container-background: rgba(0, 0, 0, 0.65);
1413
1515
  /* Modal */
@@ -1501,7 +1603,8 @@ button.DocSearch-Button {
1501
1603
  .DocSearch-Button-Key {
1502
1604
  background: transparent !important;
1503
1605
  box-shadow: none !important;
1504
- color: rgba(255, 255, 255, 0.7) !important;
1606
+ /* .7 measured 3.91:1 on the keys' doubly tinted background; .85 is 5.1:1. */
1607
+ color: rgba(255, 255, 255, 0.85) !important;
1505
1608
  font-family: var(--ifm-font-family-monospace) !important;
1506
1609
  font-size: 10px !important;
1507
1610
  font-weight: 500 !important;
@@ -1510,30 +1613,6 @@ button.DocSearch-Button {
1510
1613
  line-height: 1 !important;
1511
1614
  }
1512
1615
 
1513
- /* Medium: hide AskAI, shrink search pill */
1514
- @media (max-width: 1050px) {
1515
- .navbar__items [data-navbar-ask-ai] { display: none !important; }
1516
-
1517
- .DocSearch-Button {
1518
- min-width: 180px !important;
1519
- }
1520
- }
1521
-
1522
- /* Small: search pill drops to icon-only */
1523
- @media (max-width: 800px) {
1524
- .DocSearch-Button {
1525
- min-width: 0 !important;
1526
- width: 36px !important;
1527
- padding: 0 !important;
1528
- justify-content: center !important;
1529
- }
1530
- .DocSearch-Button-Placeholder,
1531
- .DocSearch-Button-Keys { display: none !important; }
1532
- .DocSearch-Button .DocSearch-Search-Icon {
1533
- color: rgba(255, 255, 255, 0.9) !important;
1534
- }
1535
- }
1536
-
1537
1616
  /* Dark mode: same squared style */
1538
1617
  [data-theme='dark'] .DocSearch-Button,
1539
1618
  [data-theme='dark'] button.DocSearch-Button {
@@ -1558,9 +1637,103 @@ button.DocSearch-Button {
1558
1637
  }
1559
1638
 
1560
1639
  [data-theme='dark'] .DocSearch-Button-Key {
1561
- color: rgba(255, 255, 255, 0.7) !important;
1640
+ /* Same 3.91:1 to 5.1:1 lift as the light rule above. */
1641
+ color: rgba(255, 255, 255, 0.85) !important;
1642
+ }
1643
+
1644
+
1645
+ /* ── Search below 1200: a bare magnifying glass ─────────────────────── */
1646
+ /* The 400px pill above is a desktop design. Below 1200 the navbar also holds
1647
+ the hamburger or the logo, Ask AI and the theme toggle, and below 997
1648
+ Docusaurus parks the search container in a zero-width absolute box at the
1649
+ right edge, which centred the pill on that edge and hung it 185px off
1650
+ screen. Here search is a 44px transparent box with an 18px white icon at
1651
+ 85% opacity, the same treatment the Ask AI sparkle uses, so the two read
1652
+ as one row of icon controls. Selectors are (0,3,1) so they outrank the
1653
+ dark-mode rules above, which are (0,2,1). */
1654
+ @media (max-width: 1199px) {
1655
+ .navbar .navbar__items button.DocSearch-Button {
1656
+ width: 44px !important;
1657
+ min-width: 0 !important;
1658
+ height: 44px !important;
1659
+ padding: 0 !important;
1660
+ justify-content: center !important;
1661
+ position: static !important;
1662
+ left: auto !important;
1663
+ top: auto !important;
1664
+ transform: none !important;
1665
+ background: transparent !important;
1666
+ border: 0 !important;
1667
+ border-radius: 0 !important;
1668
+ box-shadow: none !important;
1669
+ color: rgba(255, 255, 255, 0.85) !important;
1670
+ }
1671
+
1672
+ .navbar .navbar__items button.DocSearch-Button:hover,
1673
+ .navbar .navbar__items button.DocSearch-Button:focus-visible {
1674
+ background: transparent !important;
1675
+ border-color: transparent !important;
1676
+ color: #ffffff !important;
1677
+ }
1678
+
1679
+ .navbar .navbar__items button.DocSearch-Button .DocSearch-Button-Container {
1680
+ flex: 0 0 auto;
1681
+ }
1682
+
1683
+ .navbar .navbar__items button.DocSearch-Button .DocSearch-Button-Placeholder,
1684
+ .navbar .navbar__items button.DocSearch-Button .DocSearch-Button-Keys {
1685
+ display: none !important;
1686
+ }
1687
+
1688
+ .navbar .navbar__items button.DocSearch-Button .DocSearch-Search-Icon {
1689
+ width: 18px !important;
1690
+ height: 18px !important;
1691
+ color: inherit !important;
1692
+ }
1693
+
1694
+ /* Let the container flow with the other right-hand items instead of
1695
+ Docusaurus's `position: absolute; right: 15px`. */
1696
+ .navbar .navbar__items--right [class*="navbarSearchContainer"] {
1697
+ position: static !important;
1698
+ right: auto !important;
1699
+ }
1700
+
1701
+ /* A site's Ask AI navbar item (data-navbar-ask-ai) takes the same box. It
1702
+ used to be hidden at <=1050px, which below 997 left phones with no
1703
+ persistent entry point to the assistant. */
1704
+ .navbar .navbar__items [data-navbar-ask-ai] {
1705
+ display: inline-flex !important;
1706
+ }
1707
+
1708
+ .navbar .navbar__items [data-navbar-ask-ai] button {
1709
+ width: 44px;
1710
+ height: 44px;
1711
+ }
1562
1712
  }
1563
1713
 
1714
+ /* DocSearch goes full screen below 768. The modal keeps no radius there, the
1715
+ input is 16px so iOS does not zoom on focus, and the Cancel control and the
1716
+ result rows reach touch size. */
1717
+ @media (max-width: 768px) {
1718
+ .DocSearch-Container .DocSearch-Modal {
1719
+ border-radius: 0 !important;
1720
+ max-width: none !important;
1721
+ }
1722
+
1723
+ .DocSearch-Container .DocSearch-Input {
1724
+ font-size: 16px !important;
1725
+ }
1726
+
1727
+ .DocSearch-Container .DocSearch-Close {
1728
+ min-width: 44px;
1729
+ min-height: 44px;
1730
+ justify-content: center;
1731
+ }
1732
+
1733
+ .DocSearch-Container .DocSearch-Hit a {
1734
+ min-height: 48px;
1735
+ }
1736
+ }
1564
1737
  /* ── Search modal ───────────────────────────────────────────────────── */
1565
1738
  .DocSearch-Modal {
1566
1739
  border-radius: 12px !important;
@@ -1583,7 +1756,7 @@ button.DocSearch-Button {
1583
1756
  }
1584
1757
 
1585
1758
  [data-theme='dark'] .DocSearch-Hit-source {
1586
- color: #6b7494 !important;
1759
+ color: var(--ink-500) !important;
1587
1760
  }
1588
1761
 
1589
1762
  .DocSearch-Form {
@@ -1733,7 +1906,7 @@ button.DocSearch-Button {
1733
1906
  box-shadow: none !important;
1734
1907
  border: 1px solid var(--ink-300) !important;
1735
1908
  border-radius: 4px !important;
1736
- color: var(--ink-400) !important;
1909
+ color: var(--ink-500) !important;
1737
1910
  font-family: var(--ifm-font-family-monospace) !important;
1738
1911
  font-size: 10px !important;
1739
1912
  padding: 2px 5px !important;
@@ -1744,12 +1917,12 @@ button.DocSearch-Button {
1744
1917
 
1745
1918
  [data-theme='dark'] .DocSearch-Commands-Key {
1746
1919
  border-color: #2a3157 !important;
1747
- color: #6b7494 !important;
1920
+ color: var(--ink-500) !important;
1748
1921
  }
1749
1922
 
1750
1923
  .DocSearch-Label {
1751
1924
  font-size: 11px !important;
1752
- color: var(--ink-400) !important;
1925
+ color: var(--ink-500) !important;
1753
1926
  }
1754
1927
 
1755
1928
  /* Empty / no results state */
@@ -1846,12 +2019,18 @@ article {
1846
2019
  *::-webkit-scrollbar-thumb:hover { background: var(--ink-300); }
1847
2020
 
1848
2021
  /* ── Sidebar section labels (Products / Platform / Reference / About) ─ */
2022
+ /* ink-500, not ink-400, for every muted label in the theme. ink-400 is the
2023
+ ramp's fixed point, #6b7494 in both modes, and as text it measures 4.46:1
2024
+ on the light page, 4.24:1 on a light ink-50 surface and 3.68 to 4.10:1
2025
+ everywhere in dark, all under the 4.5:1 floor. ink-500 is mirrored
2026
+ (#4a5375 light, #9aa1bd dark) and clears 6.6:1 on every surface it is
2027
+ used on. ink-400 stays for decoration only: markers, separators, chevrons. */
1849
2028
  .sidebar-section-label {
1850
2029
  font-size: 14px;
1851
2030
  font-weight: 700;
1852
2031
  text-transform: uppercase;
1853
2032
  letter-spacing: 0.08em;
1854
- color: var(--ink-400);
2033
+ color: var(--ink-500);
1855
2034
  padding: 14px 0 6px;
1856
2035
  margin-top: 8px;
1857
2036
  border-top: 1px solid var(--ink-100);
@@ -1863,7 +2042,7 @@ article {
1863
2042
  padding: 10px 0 4px;
1864
2043
  text-transform: uppercase;
1865
2044
  letter-spacing: 0.06em;
1866
- color: var(--ink-400);
2045
+ color: var(--ink-500);
1867
2046
  text-align: left;
1868
2047
  }
1869
2048
  .menu > .menu__list > li:first-child .sidebar-section-label,
@@ -1937,17 +2116,55 @@ article {
1937
2116
  }
1938
2117
  }
1939
2118
 
1940
- /* Chat sidebar - push layout (navbar excluded) */
1941
- .main-wrapper {
1942
- transition: margin-right 0.3s ease-in-out;
2119
+ /* A site with no navbar.title still gets the version badge, alone in the
2120
+ centre. Between 997 and 1024 that is a bare git hash beside the logo on a
2121
+ tablet; hide it there. On wider screens the lone centred badge stays. */
2122
+ @media (max-width: 1024px) {
2123
+ .navbar__center-title:not(:has(.navbar__center-title-text)) {
2124
+ display: none;
2125
+ }
1943
2126
  }
1944
2127
 
1945
- body.chat-open .main-wrapper {
1946
- margin-right: 400px;
2128
+ /* ── Tablet landscape (997 to 1199) ────────────────────────────────── */
2129
+ /* Docusaurus treats this band as desktop: a 300px sidebar, a right-hand TOC
2130
+ column and the article between them. At 1024 the article is 505px and the
2131
+ TOC has about 60px of text, so headings break letter by letter. Treat the
2132
+ band as a wide tablet: a narrower sidebar, and the collapsible TOC in the
2133
+ article instead of the right column. The column is hidden through :has so
2134
+ the article regains the 25% it held. */
2135
+ @media (min-width: 997px) and (max-width: 1199px) {
2136
+ .theme-doc-sidebar-container,
2137
+ [class*="docsWrapper"] {
2138
+ --doc-sidebar-width: 260px;
2139
+ }
2140
+
2141
+ .row > .col.col--3:has(.theme-doc-toc-desktop) {
2142
+ display: none;
2143
+ }
2144
+
2145
+ [class*="docItemCol"] {
2146
+ max-width: 100% !important;
2147
+ }
2148
+
2149
+ /* theme-classic hides the collapsible TOC from 997 up (tocMobile module).
2150
+ It is server-rendered on every page, so showing it here costs nothing. */
2151
+ article .theme-doc-toc-mobile {
2152
+ display: block;
2153
+ }
1947
2154
  }
1948
2155
 
1949
- @media (max-width: 480px) {
1950
- body.chat-open .main-wrapper {
1951
- margin-right: 0;
2156
+ /* ── Phone rhythm ──────────────────────────────────────────────────── */
2157
+ /* The 3rem h2 and 2rem h3 top margins above are sized for a wide screen. On
2158
+ a 375px phone a 45px gap before every section reads as a page break. */
2159
+ @media (max-width: 600px) {
2160
+ .theme-doc-markdown .markdown h2,
2161
+ .theme-doc-markdown article h2 {
2162
+ margin-top: 2.25rem;
2163
+ font-size: 1.45rem;
2164
+ }
2165
+
2166
+ .theme-doc-markdown .markdown h3,
2167
+ .theme-doc-markdown article h3 {
2168
+ margin-top: 1.5rem;
1952
2169
  }
1953
2170
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A markdown table inside a horizontal scroll region.
3
+ *
4
+ * The theme frames tables with a border and a radius. Doing that on the table
5
+ * itself needed `overflow: hidden`, which removed the `display: block;
6
+ * overflow-x: auto` Docusaurus ships for wide tables, and on a 345px phone
7
+ * column a four-column reference table squeezed to 61px columns and 171px
8
+ * rows. The wrapper carries the frame now (see `.table-scroll` in
9
+ * src/css/custom.css); the table keeps its natural width and scrolls.
10
+ *
11
+ * `role="region"` plus `tabIndex` so a keyboard user can reach and scroll it.
12
+ */
13
+ export default function TableScroll(props) {
14
+ return (
15
+ <div className="table-scroll" role="region" aria-label="Table, scrolls horizontally" tabIndex={0}>
16
+ <table {...props} />
17
+ </div>
18
+ );
19
+ }
@@ -0,0 +1,17 @@
1
+ // Routes every markdown `table` through TableScroll. Docusaurus's own map has
2
+ // no `table` entry, so this adds one rather than replacing anything.
3
+ //
4
+ // @theme-init, not @theme-original: this file ships inside a theme package that
5
+ // sits in the theme stack, so @theme-original/MDXComponents would resolve back
6
+ // to this same module and recurse. See src/theme/Navbar/Logo for the same note.
7
+ //
8
+ // A site that already wraps `table` itself (vantage-docs did, before this
9
+ // shipped) must drop its own wrapper, or every table renders in two scroll
10
+ // regions. MIGRATION.md, Part 3.
11
+ import MDXComponents from '@theme-init/MDXComponents';
12
+ import TableScroll from './TableScroll';
13
+
14
+ export default {
15
+ ...MDXComponents,
16
+ table: TableScroll,
17
+ };