hdoc-tools 0.62.4 → 0.63.0

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.
Files changed (73) hide show
  1. package/editor/dist/assets/{index-BtxvGZHW.js → index-Dknn5g5A.js} +5 -4
  2. package/editor/dist/index.html +13 -13
  3. package/hdoc-build.js +5 -3
  4. package/hdoc-content-routes.js +136 -4
  5. package/hdoc-serve.js +26 -3
  6. package/hdoc-validate-interbook.js +8 -0
  7. package/hdoc-validate.js +92 -35
  8. package/package.json +1 -1
  9. package/ui/css/theme-default/styles/base.css +86 -21
  10. package/ui/css/theme-default/styles/components/api-doc.css +6 -3
  11. package/ui/css/theme-default/styles/components/content.css +140 -39
  12. package/ui/css/theme-default/styles/components/custom-block.css +1 -1
  13. package/ui/css/theme-default/styles/components/htl-doc.css +243 -64
  14. package/ui/css/theme-default/styles/components/htl-library.css +152 -0
  15. package/ui/css/theme-default/styles/components/htl-search.css +267 -0
  16. package/ui/css/theme-default/styles/components/sidebar.css +59 -16
  17. package/ui/css/theme-default/styles/fonts.css +17 -3
  18. package/ui/css/theme-default/styles/htldoc.layouts.css +756 -87
  19. package/ui/css/theme-default/styles/vars.css +40 -35
  20. package/ui/favicon.svg +64 -0
  21. package/ui/images/hornbill-logo-full-reversed.svg +92 -0
  22. package/ui/images/hornbill-logo-full.svg +92 -0
  23. package/ui/images/hug_library.jpg +0 -0
  24. package/ui/images/mcp-catalog.svg +9 -0
  25. package/ui/images/products/hornbill-square.svg +1 -0
  26. package/ui/index.html +1106 -342
  27. package/ui/js/bootstrap.js +89 -0
  28. package/ui/js/doc.hornbill.js +3156 -751
  29. package/ui/js/hb.vue.js +121 -0
  30. package/ui/js/highlightjs/highlight.pack.js +1513 -2
  31. package/ui/js/highlightjs/styles/vs2015-accessible.css +141 -0
  32. package/ui/js/highlightjs-badge.js +41 -58
  33. package/ui/js/mermaid.min.js +1447 -1295
  34. package/ui/js/webcomponents/hdocApprove.js +115 -0
  35. package/ui/js/highlightjs/styles/brown-paper.css +0 -64
  36. package/ui/js/highlightjs/styles/brown-papersq.png +0 -0
  37. package/ui/js/highlightjs/styles/codepen-embed.css +0 -60
  38. package/ui/js/highlightjs/styles/color-brewer.css +0 -71
  39. package/ui/js/highlightjs/styles/darcula.css +0 -77
  40. package/ui/js/highlightjs/styles/dark.css +0 -63
  41. package/ui/js/highlightjs/styles/darkula.css +0 -6
  42. package/ui/js/highlightjs/styles/default.css +0 -99
  43. package/ui/js/highlightjs/styles/dracula.css +0 -76
  44. package/ui/js/highlightjs/styles/far.css +0 -71
  45. package/ui/js/highlightjs/styles/foundation.css +0 -88
  46. package/ui/js/highlightjs/styles/github-gist.css +0 -71
  47. package/ui/js/highlightjs/styles/github-mm.css +0 -71
  48. package/ui/js/highlightjs/styles/github.css +0 -99
  49. package/ui/js/highlightjs/styles/googlecode.css +0 -89
  50. package/ui/js/highlightjs/styles/grayscale.css +0 -101
  51. package/ui/js/highlightjs/styles/idea.css +0 -97
  52. package/ui/js/highlightjs/styles/ir-black.css +0 -73
  53. package/ui/js/highlightjs/styles/kavadocs.css +0 -71
  54. package/ui/js/highlightjs/styles/kavadocsdark.css +0 -120
  55. package/ui/js/highlightjs/styles/kimbie.dark.css +0 -74
  56. package/ui/js/highlightjs/styles/kimbie.light.css +0 -74
  57. package/ui/js/highlightjs/styles/magula.css +0 -70
  58. package/ui/js/highlightjs/styles/mono-blue.css +0 -59
  59. package/ui/js/highlightjs/styles/monokai-sublime.css +0 -83
  60. package/ui/js/highlightjs/styles/monokai.css +0 -70
  61. package/ui/js/highlightjs/styles/obsidian.css +0 -88
  62. package/ui/js/highlightjs/styles/paraiso-dark.css +0 -72
  63. package/ui/js/highlightjs/styles/paraiso-light.css +0 -72
  64. package/ui/js/highlightjs/styles/railscasts.css +0 -106
  65. package/ui/js/highlightjs/styles/rainbow.css +0 -85
  66. package/ui/js/highlightjs/styles/solarized-dark.css +0 -84
  67. package/ui/js/highlightjs/styles/solarized-light.css +0 -84
  68. package/ui/js/highlightjs/styles/sunburst.css +0 -102
  69. package/ui/js/highlightjs/styles/twilight.css +0 -97
  70. package/ui/js/highlightjs/styles/vs.css +0 -68
  71. package/ui/js/highlightjs/styles/vs2015.css +0 -117
  72. package/ui/js/highlightjs/styles/xcode.css +0 -104
  73. package/ui/js/highlightjs/styles/zenburn.css +0 -80
@@ -2,12 +2,7 @@
2
2
  * Headings
3
3
  * -------------------------------------------------------------------------- */
4
4
 
5
- .HTL-doc h1,
6
- .HTL-doc h2,
7
- .HTL-doc h3,
8
- .HTL-doc h4,
9
- .HTL-doc h5,
10
- .HTL-doc h6 {
5
+ .HTL-doc h1, h2, h3 {
11
6
  position: relative;
12
7
  font-weight: 600;
13
8
  outline: none;
@@ -27,6 +22,17 @@
27
22
  font-size: 24px;
28
23
  }
29
24
 
25
+ .HTL-doc .faq-toc-item
26
+ {
27
+ cursor: pointer;
28
+ display:inline-block;
29
+ }
30
+ /* The four .highlight-container rules that were here are gone with the wrapper itself: the
31
+ section highlight is now an overlay (.hb-section-highlight in htldoc.layouts.css) and nothing
32
+ re-parents headings any more. These rules were what made the section creep 2px left on each
33
+ repeat click, via margin-left:-32px + padding-left:30px on each nested wrapper. */
34
+
35
+
30
36
  .HTL-doc h3 {
31
37
  margin: 32px 0 0;
32
38
  letter-spacing: -0.01em;
@@ -38,7 +44,7 @@
38
44
  position: absolute;
39
45
  font-size: 18px;
40
46
  left: -25px;
41
- top: 52%;
47
+ /*top: 52%;*/
42
48
  width: 32px;
43
49
  /*so will over lap headre slightly - stops flicker when hover out of header into anchor */
44
50
  opacity: 0;
@@ -49,7 +55,7 @@
49
55
  position: absolute;
50
56
  font-size: 18px;
51
57
  left: -25px;
52
- top: 5px;
58
+ /*top: 5px;*/
53
59
  width: 32px;
54
60
  /*so will over lap headre slightly - stops flicker when hover out of header into anchor */
55
61
  opacity: 0;
@@ -75,8 +81,8 @@
75
81
  }
76
82
 
77
83
  /**
78
- * Paragraph and inline elements
79
- * -------------------------------------------------------------------------- */
84
+ * Paragraph and inline elements
85
+ * -------------------------------------------------------------------------- */
80
86
 
81
87
  .HTL-doc p,
82
88
  .HTL-doc summary {
@@ -112,13 +118,21 @@
112
118
  color: var(--htl-c-brand-dark);
113
119
  }
114
120
 
121
+ .dark .HTL-doc a {
122
+ color: var(--htl-c-brand-light);
123
+ }
124
+
125
+ .dark .HTL-doc a:hover {
126
+ color: var(--htl-c-brand-lighter);
127
+ }
128
+
115
129
  .HTL-doc strong {
116
130
  font-weight: 600;
117
131
  }
118
132
 
119
133
  /**
120
- * Lists
121
- * -------------------------------------------------------------------------- */
134
+ * Lists
135
+ * -------------------------------------------------------------------------- */
122
136
 
123
137
  .HTL-doc ul,
124
138
  .HTL-doc ol {
@@ -144,14 +158,19 @@
144
158
  }
145
159
 
146
160
  /**
147
- * Table
148
- * -------------------------------------------------------------------------- */
161
+ * Table
162
+ * -------------------------------------------------------------------------- */
149
163
 
150
164
  .HTL-doc table {
151
- display: block;
152
- border-collapse: collapse;
165
+ display: table;
166
+ width: 100%;
167
+ border-collapse: separate;
168
+ border-spacing: 0;
153
169
  margin: 20px 0;
154
170
  font-size: var(--htl-default-font-size);
171
+ border: 1px solid var(--htl-c-divider);
172
+ border-radius: var(--htl-box-radius);
173
+ overflow: hidden;
155
174
  /* sets font-size for table and table rows/td/th etc*/
156
175
  }
157
176
 
@@ -167,10 +186,21 @@
167
186
  .HTL-doc th,
168
187
  .HTL-doc td {
169
188
  border: 1px solid var(--htl-c-divider);
189
+ border-top: none;
190
+ border-left: none;
170
191
  padding: 10px 14px;
171
192
  vertical-align: top;
172
193
  }
173
194
 
195
+ .HTL-doc th:last-child,
196
+ .HTL-doc td:last-child {
197
+ border-right: none;
198
+ }
199
+
200
+ .HTL-doc tr:last-child td {
201
+ border-bottom: none;
202
+ }
203
+
174
204
  .HTL-doc th {
175
205
  font-size: var(--htl-default-font-size);
176
206
  font-weight: 600;
@@ -182,18 +212,21 @@
182
212
  }
183
213
 
184
214
  /**
185
- * Decorational elements
186
- * -------------------------------------------------------------------------- */
215
+ * Decorational elements
216
+ * -------------------------------------------------------------------------- */
187
217
 
188
218
  .HTL-doc hr {
189
219
  margin: 16px 0;
190
220
  border: none;
191
- border-top: 1px solid var(--htl-c-divider-light);
221
+ border-top: 1px solid var(--htl-c-divider);
222
+ /* bootstrap's reboot puts opacity:.25 on hr, which multiplied the divider alpha down to
223
+ near-invisible (and fully invisible in dark mode) - reset it and rely on the var's own alpha */
224
+ opacity: 1;
192
225
  }
193
226
 
194
227
  /**
195
- * Custom Block
196
- * -------------------------------------------------------------------------- */
228
+ * Custom Block
229
+ * -------------------------------------------------------------------------- */
197
230
 
198
231
  .HTL-doc .custom-block {
199
232
  margin: 16px 0;
@@ -235,8 +268,8 @@
235
268
  }
236
269
 
237
270
  /**
238
- * Code
239
- * -------------------------------------------------------------------------- */
271
+ * Code
272
+ * -------------------------------------------------------------------------- */
240
273
 
241
274
  /* inline code */
242
275
  .HTL-doc :not(pre, h1, h2, h3, h4, h5, h6)>code {
@@ -276,14 +309,14 @@
276
309
 
277
310
  @media (min-width: 640px) {
278
311
  .HTL-doc div[class*='language-'] {
279
- border-radius: 8px;
312
+ border-radius: var(--htl-box-radius);
280
313
  margin: 16px 0;
281
314
  }
282
315
  }
283
316
 
284
317
  @media (max-width: 639px) {
285
318
  .HTL-doc li div[class*='language-'] {
286
- border-radius: 8px 0 0 8px;
319
+ border-radius: var(--htl-box-radius) 0 0 var(--htl-box-radius);
287
320
  }
288
321
  }
289
322
 
@@ -359,13 +392,10 @@
359
392
  left: 1rem;
360
393
  }
361
394
 
395
+ /* the same selector used to be declared twice back-to-back (opacity 0.4 then 0.7 - the second
396
+ won); collapsed to the surviving values */
362
397
  .HTL-doc [class*='language-'] .has-focused-lines .line:not(.has-focus) {
363
398
  filter: blur(0.095rem);
364
- opacity: 0.4;
365
- transition: filter 0.35s, opacity 0.35s;
366
- }
367
-
368
- .HTL-doc [class*='language-'] .has-focused-lines .line:not(.has-focus) {
369
399
  opacity: 0.7;
370
400
  transition: filter 0.35s, opacity 0.35s;
371
401
  }
@@ -486,40 +516,65 @@
486
516
  opacity: 0;
487
517
  }
488
518
 
489
- /**
490
- * Component: Team
491
- * -------------------------------------------------------------------------- */
492
-
493
- .HTL-doc .VPTeamMembers {
494
- margin-top: 24px;
495
- }
496
-
497
- .HTL-doc .VPTeamMembers.small.count-1 .container {
498
- margin: 0 !important;
499
- max-width: calc((100% - 24px) / 2) !important;
500
- }
501
-
502
- .HTL-doc .VPTeamMembers.small.count-2 .container,
503
- .HTL-doc .VPTeamMembers.small.count-3 .container {
504
- max-width: 100% !important;
505
- }
506
-
507
- .HTL-doc .VPTeamMembers.medium.count-1 .container {
508
- margin: 0 !important;
509
- max-width: calc((100% - 24px) / 2) !important;
510
- }
511
-
512
-
519
+ /* The VPTeamMembers rules that lived here were VitePress theme heritage - VPTeamMembers is a
520
+ literal VitePress component; nothing in the hdocbook pipeline or this front-end emits it. */
513
521
 
514
522
  /* CUSTOM HTL CLASSES FOR HTDOC */
515
- /* highlightjs code copy badge */
523
+ /* highlightjs code copy badge.
524
+ Upstream positions the badge absolutely over the code block at opacity 0.5, so it sat on top
525
+ of the first line of code - the code showed through the badge and neither the language name,
526
+ the clipboard icon nor the code underneath were readable. Taking it out of absolute
527
+ positioning turns it into a normal flow element: the badge script inserts it as the first
528
+ child of the <pre>, so it becomes a full-width header bar above the code: language name left,
529
+ copy icon right. Nothing overlaps, and because the scroll container is the
530
+ <code class="hljs"> below it, the bar also stays put when a long line is scrolled.
531
+ Kept visually identical to hdoc serve (hdoc-tools 0.62.3), which fixes the same problem in the
532
+ badge template inside its own copy of highlightjs-badge.js. Here it is done in CSS instead, so
533
+ the local accessibility fixes in js/highlightjs-badge.js are left alone: same flex row,
534
+ space-between, #555 bar, 7px top corners, full width. */
516
535
  .HTL-doc .code-badge {
536
+ position: static !important;
537
+ display: flex;
538
+ flex-direction: row;
539
+ align-items: center;
540
+ justify-content: space-between;
541
+ width: 100%;
542
+ box-sizing: border-box;
543
+ opacity: 1 !important;
517
544
  background: #555 !important;
545
+ border-radius: 7px 7px 0 0 !important;
518
546
  padding: 8px !important;
519
547
  }
520
548
 
549
+ /* Flex column, purely to drop the whitespace-only text nodes the badged <pre> can contain.
550
+ Generated api-doc pages emit an indented <pre>\n <code>...</code>\n </pre>, and under
551
+ the inherited white-space:pre that indentation renders as blank lines - measured on
552
+ docs.hornbill.com as 24px above the badge (so the bar floated away from the tab strip) and
553
+ 48px of dead space below the code: 223px of box for 110px of code. A flex container does not
554
+ generate anonymous boxes for whitespace-only text, so both gaps go without touching the
555
+ content pipeline. Measured after: 151px, badge flush at the top, code height unchanged. */
556
+ .HTL-doc .code-badge-pre {
557
+ display: flex;
558
+ flex-direction: column;
559
+ }
560
+
521
561
  .HTL-doc .code-badge-copy-icon {
522
562
  font-size: 1.3em !important;
563
+ margin-top: 0 !important;
564
+ }
565
+
566
+ /* Generated API-doc pages (appAPIDocGen and the esp platform book) ship an inline
567
+ <style>.tab-code{margin-top:-1.7em}</style> with every Code Examples section - a legacy hack
568
+ from when the badge was an absolute overlay, meant to pull the code flush under the tab strip.
569
+ With the badge now a static in-flow header bar (first child of the <pre>, above), -1.7em drags
570
+ the code up OVER the badge and clips it to a sliver. It only shows on SPA navigations: the
571
+ article is injected raw there, whereas on a full page load Vue's initial mount compiles the
572
+ container and drops the <style>, so a refresh looked "fixed". The whitespace gap that hack
573
+ papered over is already solved properly by .code-badge-pre{display:flex} above. The <style>
574
+ block is being removed from the generator templates too, but published books keep shipping it
575
+ until they are rebuilt - this override protects them all now. */
576
+ .HTL-doc .code-badge-pre > code.tab-code {
577
+ margin-top: 0 !important;
523
578
  }
524
579
 
525
580
  /* HTL inline styles */
@@ -602,6 +657,7 @@
602
657
  background-color: #666666;
603
658
  }
604
659
 
660
+ /* tolerance alias for the common misspelling - renders the correctly spelled badge */
605
661
  .HTL-doc .badge.badge-depreciated:after {
606
662
  content: "Deprecated";
607
663
  border: solid 1px #494949;
@@ -629,6 +685,7 @@
629
685
  background-color: rgb(184, 0, 0);
630
686
  }
631
687
 
688
+ /* API endpoint badge styles */
632
689
  .HTL-doc .badge.badge-endpoint-internal:after {
633
690
  content: "internal";
634
691
  white-space: nowrap;
@@ -734,7 +791,6 @@
734
791
  background-color: #4A536B;
735
792
  }
736
793
 
737
-
738
794
  .HTL-doc .error-msg {
739
795
  color: rgb(184, 0, 0);
740
796
  }
@@ -759,7 +815,7 @@
759
815
 
760
816
  .HTL-doc .hdoc-alert {
761
817
  border: 1px solid transparent;
762
- border-radius: 8px;
818
+ border-radius: var(--htl-box-radius);
763
819
  padding: 16px 16px 8px;
764
820
  line-height: 24px;
765
821
  font-size: var(--htl-default-font-size);
@@ -768,7 +824,9 @@
768
824
  }
769
825
 
770
826
  .HTL-doc .hdoc-alert p {
771
- margin: 8 0;
827
+ /* was the unitless "margin: 8 0", which the parser drops entirely - matches the equivalent
828
+ rule in custom-block.css */
829
+ margin: 8px 0;
772
830
  }
773
831
 
774
832
  .HTL-doc .hdoc-alert .hdoc-alert-title .bi {
@@ -855,20 +913,15 @@
855
913
  }
856
914
 
857
915
 
858
-
859
916
  /* lighter bg for code blocks */
860
917
  .HTL-doc .hljs {
861
918
  background: #494949;
862
919
  width: 100%;
863
- font-size: 0.9em !important;
864
- line-height: 1.4em;
865
920
  }
866
921
 
867
922
  .dark .HTL-doc .hljs {
868
923
  background: #000000;
869
924
  width: 100%;
870
- font-size: 0.9em !important;
871
-
872
925
  }
873
926
 
874
927
  /* image sizing for icon library */
@@ -887,4 +940,130 @@
887
940
  width: 110px;
888
941
  margin-top: -5px;
889
942
  padding-right: 5px;
890
- }
943
+ }
944
+
945
+ /* Consistent border-radius for images */
946
+ .HTL-doc img {
947
+ border-radius: var(--htl-box-radius);
948
+ }
949
+
950
+ /* WCAG AAA: Override inline gray color for accessibility */
951
+ .HTL-doc [style*="color: gray"],
952
+ .HTL-doc [style*="color:gray"] {
953
+ color: #595959 !important;
954
+ }
955
+
956
+ /* hdoc-approve signature style (Caveat font, loaded from Google Fonts by both entry pages).
957
+ Moved here from an inline <style> in index.html so the inline/embedded view - which can
958
+ also mount hdoc-approve - renders signatures the same way. */
959
+ .caveat-text {
960
+ font-family: 'Caveat', serif;
961
+ font-optical-sizing: auto;
962
+ font-weight: 400;
963
+ font-style: normal;
964
+ font-size: 18px;
965
+ }
966
+
967
+ /*--
968
+ MCP server catalog (/mcp) and its toolbar icon.
969
+
970
+ The page renders inside .HTL-doc - the same typography scope a book page uses - so
971
+ headings, body text, code spans and tables all come from the article styles above.
972
+ That is deliberate: this page is documentation about the MCP servers, so it should
973
+ read as a page of documentation rather than carry a look of its own. Almost nothing
974
+ is needed here as a result.
975
+
976
+ Do NOT set overflow or max-width on .McpCatalog. This site is a fixed-viewport shell:
977
+ the document never scrolls, and .hb-container-vertical > .hb-container-expand in
978
+ htldoc.layouts.css already makes each view its own scroll region, exactly as the
979
+ library, search and book views do. An earlier version added its own, which put the
980
+ scrollbar partway across the screen instead of at the window edge. --*/
981
+ .hb-icon-mcp {
982
+ display: inline-block;
983
+ /*-- the toolbar buttons are btn-sm, so 1em here is 12px and the mark read as a
984
+ speck. Root font-size on this site is 14px, not 16. The Bootstrap Icons beside
985
+ it measure 18px but carry their own font padding, whereas a mask fills its box
986
+ exactly - so matching their box left this looking smaller than them --*/
987
+ width: 1.45rem;
988
+ height: 1.45rem;
989
+ vertical-align: -0.35em;
990
+ background-color: currentColor;
991
+ -webkit-mask: url("../../../../images/mcp-catalog.svg") no-repeat center;
992
+ mask: url("../../../../images/mcp-catalog.svg") no-repeat center;
993
+ -webkit-mask-size: contain;
994
+ mask-size: contain;
995
+ }
996
+
997
+ .McpCatalog .content-wrapper {
998
+ padding: 1.5rem 2.5rem 4rem 2.5rem;
999
+ }
1000
+
1001
+ /*-- sits beside the server url, so the reader sees the size of a corpus at the point
1002
+ they are deciding whether to connect to it --*/
1003
+ .mcp-server-count {
1004
+ margin-left: 0.75rem;
1005
+ color: var(--htl-c-text-3);
1006
+ font-size: 0.9em;
1007
+ }
1008
+
1009
+ /*-- The Name / URL pair a client's "add server" form asks for. Grid rather than the
1010
+ article's <dl> defaults so the two labels line up and the values sit beside them. --*/
1011
+ .mcp-connect {
1012
+ display: grid;
1013
+ grid-template-columns: max-content 1fr;
1014
+ column-gap: 1rem;
1015
+ row-gap: 0.35rem;
1016
+ align-items: center;
1017
+ margin: 0 0 1.25rem 0;
1018
+ }
1019
+
1020
+ .mcp-connect dt {
1021
+ font-weight: 400;
1022
+ color: var(--htl-c-text-3);
1023
+ }
1024
+
1025
+ .mcp-connect dd {
1026
+ display: flex;
1027
+ align-items: center;
1028
+ gap: 0.4rem;
1029
+ margin: 0;
1030
+ min-width: 0;
1031
+ }
1032
+
1033
+ .mcp-connect dd code {
1034
+ user-select: all;
1035
+ overflow-wrap: anywhere;
1036
+ }
1037
+
1038
+ /*-- matches the code-block badge's idiom: quiet until hovered, tick on success --*/
1039
+ .mcp-copy {
1040
+ flex: 0 0 auto;
1041
+ border: 0;
1042
+ background: transparent;
1043
+ color: var(--htl-c-text-3);
1044
+ padding: 0.15rem 0.35rem;
1045
+ border-radius: 0.25rem;
1046
+ line-height: 1;
1047
+ cursor: pointer;
1048
+ }
1049
+
1050
+ .mcp-copy:hover,
1051
+ .mcp-copy:focus-visible {
1052
+ color: var(--htl-c-text-1);
1053
+ background-color: var(--htl-c-bg-mute);
1054
+ }
1055
+
1056
+ .mcp-copy .bi-check2 {
1057
+ color: var(--htl-c-green, #006737);
1058
+ }
1059
+
1060
+ @media (max-width: 640px) {
1061
+ .mcp-connect {
1062
+ grid-template-columns: minmax(0, 1fr);
1063
+ row-gap: 0.1rem;
1064
+ }
1065
+
1066
+ .mcp-connect dd {
1067
+ margin-bottom: 0.5rem;
1068
+ }
1069
+ }
@@ -0,0 +1,152 @@
1
+ .LibraryContent
2
+ {
3
+
4
+ margin: 0 0;
5
+ overflow: initial;
6
+ }
7
+
8
+
9
+ /* No .library-info-panel / .about-list rules here any more: the library page is entirely
10
+ index.html markup, which contains neither class - a whole info-panel block that was never
11
+ rendered by any version of this page. */
12
+
13
+ .LibraryContent .library-content-panel
14
+ {
15
+ width:100%;
16
+ }
17
+
18
+ .LibraryContent .lib-header > p
19
+ {
20
+ padding-left:3px;
21
+ }
22
+
23
+ /* No `.LibraryContent .library-banner h1` - same dead .library-banner class as above. Removed r723. */
24
+
25
+
26
+ .LibraryContent .document-list
27
+ {
28
+ padding-left:3px;
29
+ column-count: 3;
30
+ }
31
+ .LibraryContent .document-list > li .title
32
+ {
33
+ border-left: 6px solid var(--htl-c-gray-light-2);
34
+ align-items: center;
35
+ font-size: 1.125rem;
36
+ line-height: 28px;
37
+ margin-top: 0.25rem!important;
38
+ padding-left: 0.75rem!important;
39
+ padding-right: 0.75rem!important;
40
+ color:var(--htl-c-blue);
41
+ cursor:pointer;
42
+ }
43
+
44
+
45
+ .LibraryContent .document-list > li .title:hover
46
+ {
47
+ border-left: 6px solid var(--htl-c-blue);
48
+
49
+ }
50
+
51
+
52
+ .LibraryContent .columns-container
53
+ {
54
+ width:100%;
55
+ padding: 0 0;
56
+ }
57
+ .LibraryContent .columns
58
+ {
59
+ /* Masonry-style layout using CSS columns */
60
+ column-count: 3;
61
+ column-gap: 0;
62
+ }
63
+
64
+ .LibraryContent .columns .column
65
+ {
66
+ /* Prevent cards from breaking across columns */
67
+ break-inside: avoid;
68
+ display: block;
69
+ }
70
+
71
+ /* Product card tiles - rounded corners */
72
+ .LibraryContent .columns .column > div.border {
73
+ border-radius: var(--htl-box-radius);
74
+ }
75
+
76
+ .LibraryContent .columns .column a.title
77
+ {
78
+ font-size: 0.92rem;
79
+ line-height: 22px;
80
+ margin-top: 0.25rem!important;
81
+ color:var(--htl-c-blue);
82
+ cursor:pointer;
83
+ }
84
+
85
+ /* Dark mode: Use brighter link color for WCAG AAA (7:1) contrast */
86
+ .dark .LibraryContent .document-list > li .title,
87
+ .dark .LibraryContent .columns .column a.title {
88
+ color: var(--htl-c-blue-light);
89
+ }
90
+
91
+ /* chevron bullet on tile book links - smaller and muted so it reads as a marker rather than
92
+ competing with the link text, with clear space before the title */
93
+ .LibraryContent .columns .column .book-link-chevron {
94
+ font-size: 0.75em;
95
+ color: var(--htl-c-text-3);
96
+ margin-right: 8px;
97
+ }
98
+
99
+ /* product tile header - icon and title vertically centred on a shared line, with a divider
100
+ separating the header from the book list below. Replaces the old d-table-cell layout with
101
+ its 64px icon (title hung off the icon's top edge). */
102
+ .LibraryContent .columns .column .product-tile-header {
103
+ display: flex;
104
+ align-items: center;
105
+ gap: 10px;
106
+ /* 20px above and below the divider, matching the tile's pad-20 padding so the icon->divider,
107
+ divider->list and tile edge gaps all read as the same distance */
108
+ padding-bottom: 20px;
109
+ margin-bottom: 20px;
110
+ border-bottom: 1px solid var(--htl-c-divider-light);
111
+ }
112
+
113
+ .LibraryContent .columns .column .product-tile-icon {
114
+ width: 40px;
115
+ height: 40px;
116
+ flex: 0 0 auto;
117
+ display: inline-block;
118
+ /* background image (and its "/ contain" sizing) comes inline from group.icon - see
119
+ index.html. Sourced from _books/products.json via organiseLibrary() in doc.hornbill.js. */
120
+ }
121
+
122
+
123
+ @media (max-width: 1540px)
124
+ {
125
+ .LibraryContent .columns
126
+ {
127
+ column-count: 2;
128
+ }
129
+
130
+ }
131
+
132
+ @media (max-width: 1020px) {
133
+
134
+ .LibraryContent .document-list
135
+ {
136
+ column-count: 2;
137
+ }
138
+
139
+ .LibraryContent .columns
140
+ {
141
+ column-count: 1;
142
+ }
143
+ }
144
+
145
+ @media (max-width: 720px) {
146
+
147
+ .LibraryContent .document-list
148
+ {
149
+ column-count: 1;
150
+ }
151
+
152
+ }