rubyXL 3.4.34 → 3.4.36

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 (446) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/VERSION +1 -1
  4. data/lib/rubyXL/objects/reference.rb +29 -9
  5. data/lib/rubyXL/objects/root.rb +1 -1
  6. data/lib/rubyXL/objects/workbook.rb +7 -0
  7. data/rdoc/README_rdoc.html +508 -191
  8. data/rdoc/RubyXL/AExtension.html +603 -87
  9. data/rdoc/RubyXL/AExtensionStorageArea.html +493 -47
  10. data/rdoc/RubyXL/ActiveX.html +573 -75
  11. data/rdoc/RubyXL/ActiveXBinary.html +503 -49
  12. data/rdoc/RubyXL/AdjustHandleList.html +487 -47
  13. data/rdoc/RubyXL/Alignment.html +487 -47
  14. data/rdoc/RubyXL/AlternateContent.html +493 -47
  15. data/rdoc/RubyXL/AlternateUrls.html +487 -47
  16. data/rdoc/RubyXL/Authors.html +487 -47
  17. data/rdoc/RubyXL/AutoFilter.html +487 -47
  18. data/rdoc/RubyXL/AutoFilterColumn.html +487 -47
  19. data/rdoc/RubyXL/BinaryImageFile.html +510 -50
  20. data/rdoc/RubyXL/BodyProperties.html +487 -47
  21. data/rdoc/RubyXL/BooleanNode.html +493 -47
  22. data/rdoc/RubyXL/BooleanValue.html +493 -47
  23. data/rdoc/RubyXL/Border.html +630 -100
  24. data/rdoc/RubyXL/BorderEdge.html +576 -80
  25. data/rdoc/RubyXL/Borders.html +539 -69
  26. data/rdoc/RubyXL/Break.html +487 -47
  27. data/rdoc/RubyXL/BreakList.html +487 -47
  28. data/rdoc/RubyXL/CT_AdjPoint2D.html +487 -47
  29. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +487 -47
  30. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +487 -47
  31. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +487 -47
  32. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +487 -47
  33. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +487 -47
  34. data/rdoc/RubyXL/CT_Backdrop.html +487 -47
  35. data/rdoc/RubyXL/CT_Bevel.html +487 -47
  36. data/rdoc/RubyXL/CT_BiLevelEffect.html +487 -47
  37. data/rdoc/RubyXL/CT_BlendEffect.html +487 -47
  38. data/rdoc/RubyXL/CT_Blip.html +487 -47
  39. data/rdoc/RubyXL/CT_BlipFillProperties.html +487 -47
  40. data/rdoc/RubyXL/CT_BlurEffect.html +487 -47
  41. data/rdoc/RubyXL/CT_Camera.html +487 -47
  42. data/rdoc/RubyXL/CT_Color.html +487 -47
  43. data/rdoc/RubyXL/CT_ColorChangeEffect.html +487 -47
  44. data/rdoc/RubyXL/CT_ColorMapping.html +487 -47
  45. data/rdoc/RubyXL/CT_ColorScheme.html +487 -47
  46. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +487 -47
  47. data/rdoc/RubyXL/CT_ConnectionSite.html +487 -47
  48. data/rdoc/RubyXL/CT_ConnectionSiteList.html +487 -47
  49. data/rdoc/RubyXL/CT_DashStop.html +487 -47
  50. data/rdoc/RubyXL/CT_DashStopList.html +487 -47
  51. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +487 -47
  52. data/rdoc/RubyXL/CT_DuotoneEffect.html +487 -47
  53. data/rdoc/RubyXL/CT_EffectContainer.html +487 -47
  54. data/rdoc/RubyXL/CT_EffectList.html +487 -47
  55. data/rdoc/RubyXL/CT_EffectReference.html +487 -47
  56. data/rdoc/RubyXL/CT_EffectStyleItem.html +487 -47
  57. data/rdoc/RubyXL/CT_EffectStyleList.html +487 -47
  58. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +487 -47
  59. data/rdoc/RubyXL/CT_FillEffect.html +487 -47
  60. data/rdoc/RubyXL/CT_FillOverlayEffect.html +487 -47
  61. data/rdoc/RubyXL/CT_FillStyleList.html +487 -47
  62. data/rdoc/RubyXL/CT_FlatText.html +487 -47
  63. data/rdoc/RubyXL/CT_FontCollection.html +487 -47
  64. data/rdoc/RubyXL/CT_FontReference.html +487 -47
  65. data/rdoc/RubyXL/CT_GeomGuideList.html +487 -47
  66. data/rdoc/RubyXL/CT_GlowEffect.html +487 -47
  67. data/rdoc/RubyXL/CT_GradientFillProperties.html +487 -47
  68. data/rdoc/RubyXL/CT_GradientStop.html +487 -47
  69. data/rdoc/RubyXL/CT_GradientStopList.html +487 -47
  70. data/rdoc/RubyXL/CT_HSLEffect.html +487 -47
  71. data/rdoc/RubyXL/CT_HslColor.html +487 -47
  72. data/rdoc/RubyXL/CT_Hyperlink.html +487 -47
  73. data/rdoc/RubyXL/CT_InnerShadowEffect.html +487 -47
  74. data/rdoc/RubyXL/CT_LightRig.html +487 -47
  75. data/rdoc/RubyXL/CT_LineEndProperties.html +487 -47
  76. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +487 -47
  77. data/rdoc/RubyXL/CT_LineProperties.html +487 -47
  78. data/rdoc/RubyXL/CT_LineStyleList.html +487 -47
  79. data/rdoc/RubyXL/CT_LinearShadeProperties.html +487 -47
  80. data/rdoc/RubyXL/CT_LuminanceEffect.html +487 -47
  81. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +487 -47
  82. data/rdoc/RubyXL/CT_OuterShadowEffect.html +487 -47
  83. data/rdoc/RubyXL/CT_Path2D.html +487 -47
  84. data/rdoc/RubyXL/CT_Path2DArcTo.html +487 -47
  85. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +487 -47
  86. data/rdoc/RubyXL/CT_Path2DList.html +487 -47
  87. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +487 -47
  88. data/rdoc/RubyXL/CT_Path2DTo.html +487 -47
  89. data/rdoc/RubyXL/CT_PathShadeProperties.html +487 -47
  90. data/rdoc/RubyXL/CT_PatternFillProperties.html +487 -47
  91. data/rdoc/RubyXL/CT_Point3D.html +487 -47
  92. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +487 -47
  93. data/rdoc/RubyXL/CT_PresetColor.html +487 -47
  94. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +487 -47
  95. data/rdoc/RubyXL/CT_PresetShadowEffect.html +487 -47
  96. data/rdoc/RubyXL/CT_PresetTextShape.html +487 -47
  97. data/rdoc/RubyXL/CT_ReflectionEffect.html +487 -47
  98. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +487 -47
  99. data/rdoc/RubyXL/CT_RelativeRect.html +487 -47
  100. data/rdoc/RubyXL/CT_SRgbColor.html +487 -47
  101. data/rdoc/RubyXL/CT_ScRgbColor.html +487 -47
  102. data/rdoc/RubyXL/CT_Scene3D.html +487 -47
  103. data/rdoc/RubyXL/CT_SchemeColor.html +487 -47
  104. data/rdoc/RubyXL/CT_Shape3D.html +487 -47
  105. data/rdoc/RubyXL/CT_ShapeStyle.html +487 -47
  106. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +487 -47
  107. data/rdoc/RubyXL/CT_SphereCoords.html +487 -47
  108. data/rdoc/RubyXL/CT_StretchInfoProperties.html +487 -47
  109. data/rdoc/RubyXL/CT_StyleMatrix.html +487 -47
  110. data/rdoc/RubyXL/CT_StyleMatrixReference.html +487 -47
  111. data/rdoc/RubyXL/CT_SupplementalFont.html +487 -47
  112. data/rdoc/RubyXL/CT_SystemColor.html +487 -47
  113. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +487 -47
  114. data/rdoc/RubyXL/CT_TextBlipBullet.html +487 -47
  115. data/rdoc/RubyXL/CT_TextCharBullet.html +487 -47
  116. data/rdoc/RubyXL/CT_TextCharacterProperties.html +487 -47
  117. data/rdoc/RubyXL/CT_TextFont.html +487 -47
  118. data/rdoc/RubyXL/CT_TextListStyle.html +487 -47
  119. data/rdoc/RubyXL/CT_TextNormalAutofit.html +487 -47
  120. data/rdoc/RubyXL/CT_TextParagraphProperties.html +487 -47
  121. data/rdoc/RubyXL/CT_TextSpacing.html +487 -47
  122. data/rdoc/RubyXL/CT_TextTabStop.html +487 -47
  123. data/rdoc/RubyXL/CT_TextTabStopList.html +487 -47
  124. data/rdoc/RubyXL/CT_TileInfoProperties.html +487 -47
  125. data/rdoc/RubyXL/CT_TintEffect.html +487 -47
  126. data/rdoc/RubyXL/CT_Transform2D.html +487 -47
  127. data/rdoc/RubyXL/CT_TransformEffect.html +487 -47
  128. data/rdoc/RubyXL/CT_Vector3D.html +487 -47
  129. data/rdoc/RubyXL/CT_XYAdjustHandle.html +487 -47
  130. data/rdoc/RubyXL/CalculationChain.html +556 -72
  131. data/rdoc/RubyXL/CalculationChainCell.html +487 -47
  132. data/rdoc/RubyXL/CalculationProperties.html +487 -47
  133. data/rdoc/RubyXL/Cell.html +971 -211
  134. data/rdoc/RubyXL/CellConvenienceMethods.html +1617 -429
  135. data/rdoc/RubyXL/CellExt.html +487 -47
  136. data/rdoc/RubyXL/CellSmartTag.html +487 -47
  137. data/rdoc/RubyXL/CellSmartTagProperty.html +487 -47
  138. data/rdoc/RubyXL/CellSmartTags.html +487 -47
  139. data/rdoc/RubyXL/CellStyle.html +487 -47
  140. data/rdoc/RubyXL/CellStyleXFs.html +539 -69
  141. data/rdoc/RubyXL/CellStyles.html +539 -69
  142. data/rdoc/RubyXL/CellValue.html +539 -69
  143. data/rdoc/RubyXL/CellWatch.html +487 -47
  144. data/rdoc/RubyXL/CellWatches.html +487 -47
  145. data/rdoc/RubyXL/CellXFs.html +539 -69
  146. data/rdoc/RubyXL/ChartColorsFile.html +510 -50
  147. data/rdoc/RubyXL/ChartFile.html +580 -76
  148. data/rdoc/RubyXL/ChartStyleFile.html +510 -50
  149. data/rdoc/RubyXL/ChartUserShapesFile.html +510 -50
  150. data/rdoc/RubyXL/Chartsheet.html +623 -93
  151. data/rdoc/RubyXL/ChartsheetPageSetup.html +487 -47
  152. data/rdoc/RubyXL/ChartsheetProperties.html +487 -47
  153. data/rdoc/RubyXL/ChartsheetProtection.html +487 -47
  154. data/rdoc/RubyXL/ChartsheetView.html +487 -47
  155. data/rdoc/RubyXL/ChartsheetViews.html +487 -47
  156. data/rdoc/RubyXL/Color.html +549 -71
  157. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +622 -94
  158. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +666 -106
  159. data/rdoc/RubyXL/ColorConvenienceClasses.html +482 -45
  160. data/rdoc/RubyXL/ColorConvenienceMethods.html +533 -66
  161. data/rdoc/RubyXL/ColorFilter.html +487 -47
  162. data/rdoc/RubyXL/ColorScale.html +487 -47
  163. data/rdoc/RubyXL/ColorSet.html +487 -47
  164. data/rdoc/RubyXL/Colors.html +487 -47
  165. data/rdoc/RubyXL/ColumnRange.html +660 -104
  166. data/rdoc/RubyXL/ColumnRanges.html +636 -100
  167. data/rdoc/RubyXL/Comment.html +487 -47
  168. data/rdoc/RubyXL/CommentList.html +487 -47
  169. data/rdoc/RubyXL/CommentsFile.html +569 -77
  170. data/rdoc/RubyXL/ConditionalFormatValue.html +487 -47
  171. data/rdoc/RubyXL/ConditionalFormatting.html +487 -47
  172. data/rdoc/RubyXL/ConditionalFormattingRule.html +487 -47
  173. data/rdoc/RubyXL/Connection.html +487 -47
  174. data/rdoc/RubyXL/ConnectionTable.html +487 -47
  175. data/rdoc/RubyXL/ConnectionTables.html +487 -47
  176. data/rdoc/RubyXL/ConnectionTextField.html +487 -47
  177. data/rdoc/RubyXL/ConnectionTextFields.html +487 -47
  178. data/rdoc/RubyXL/Connections.html +556 -72
  179. data/rdoc/RubyXL/ContentTypeDefault.html +493 -47
  180. data/rdoc/RubyXL/ContentTypeOverride.html +493 -47
  181. data/rdoc/RubyXL/ContentTypes.html +593 -83
  182. data/rdoc/RubyXL/ControlPropertiesFile.html +510 -50
  183. data/rdoc/RubyXL/CorePropertiesFile.html +816 -158
  184. data/rdoc/RubyXL/CustomColor.html +487 -47
  185. data/rdoc/RubyXL/CustomColorList.html +487 -47
  186. data/rdoc/RubyXL/CustomFilter.html +487 -47
  187. data/rdoc/RubyXL/CustomFilters.html +487 -47
  188. data/rdoc/RubyXL/CustomGeometry.html +487 -47
  189. data/rdoc/RubyXL/CustomProperties.html +487 -47
  190. data/rdoc/RubyXL/CustomPropertiesFile.html +510 -50
  191. data/rdoc/RubyXL/CustomProperty.html +487 -47
  192. data/rdoc/RubyXL/CustomPropertyFile.html +510 -50
  193. data/rdoc/RubyXL/CustomSheetView.html +487 -47
  194. data/rdoc/RubyXL/CustomSheetViews.html +487 -47
  195. data/rdoc/RubyXL/CustomWorkbookView.html +487 -47
  196. data/rdoc/RubyXL/CustomWorkbookViews.html +487 -47
  197. data/rdoc/RubyXL/CustomXMLFile.html +503 -49
  198. data/rdoc/RubyXL/DXF.html +487 -47
  199. data/rdoc/RubyXL/DXFs.html +487 -47
  200. data/rdoc/RubyXL/DataBar.html +487 -47
  201. data/rdoc/RubyXL/DataConsolidate.html +487 -47
  202. data/rdoc/RubyXL/DataConsolidationReference.html +487 -47
  203. data/rdoc/RubyXL/DataConsolidationReferences.html +487 -47
  204. data/rdoc/RubyXL/DataType.html +528 -53
  205. data/rdoc/RubyXL/DataValidation.html +487 -47
  206. data/rdoc/RubyXL/DataValidations.html +487 -47
  207. data/rdoc/RubyXL/DateGroupItem.html +487 -47
  208. data/rdoc/RubyXL/DefinedName.html +487 -47
  209. data/rdoc/RubyXL/DefinedNameExt.html +487 -47
  210. data/rdoc/RubyXL/DefinedNames.html +564 -47
  211. data/rdoc/RubyXL/DefinedNamesExt.html +487 -47
  212. data/rdoc/RubyXL/DocumentPropertiesFile.html +600 -88
  213. data/rdoc/RubyXL/DrawingFile.html +580 -76
  214. data/rdoc/RubyXL/DynamicFilter.html +487 -47
  215. data/rdoc/RubyXL/EmbeddedControl.html +487 -47
  216. data/rdoc/RubyXL/EmbeddedControls.html +487 -47
  217. data/rdoc/RubyXL/Extension.html +487 -47
  218. data/rdoc/RubyXL/ExtensionStorageArea.html +487 -47
  219. data/rdoc/RubyXL/Extents.html +487 -47
  220. data/rdoc/RubyXL/ExternalBook.html +487 -47
  221. data/rdoc/RubyXL/ExternalLinksFile.html +580 -76
  222. data/rdoc/RubyXL/ExternalReference.html +487 -47
  223. data/rdoc/RubyXL/ExternalReferences.html +487 -47
  224. data/rdoc/RubyXL/ExtraColorSchemeList.html +487 -47
  225. data/rdoc/RubyXL/FieldItem.html +487 -47
  226. data/rdoc/RubyXL/FileRecoveryProperties.html +487 -47
  227. data/rdoc/RubyXL/FileSharing.html +487 -47
  228. data/rdoc/RubyXL/FileVersion.html +487 -47
  229. data/rdoc/RubyXL/Fill.html +539 -69
  230. data/rdoc/RubyXL/Fills.html +539 -69
  231. data/rdoc/RubyXL/FilterContainer.html +487 -47
  232. data/rdoc/RubyXL/FloatNode.html +493 -47
  233. data/rdoc/RubyXL/FloatValue.html +493 -47
  234. data/rdoc/RubyXL/Font.html +550 -72
  235. data/rdoc/RubyXL/FontConvenienceMethods.html +924 -197
  236. data/rdoc/RubyXL/FontScheme.html +487 -47
  237. data/rdoc/RubyXL/Fonts.html +539 -69
  238. data/rdoc/RubyXL/Formula.html +487 -47
  239. data/rdoc/RubyXL/FunctionGroup.html +487 -47
  240. data/rdoc/RubyXL/FunctionGroups.html +487 -47
  241. data/rdoc/RubyXL/GenericStorageObject.html +667 -105
  242. data/rdoc/RubyXL/GradientFill.html +487 -47
  243. data/rdoc/RubyXL/HeaderFooterSettings.html +487 -47
  244. data/rdoc/RubyXL/Hyperlink.html +487 -47
  245. data/rdoc/RubyXL/HyperlinkRelFile.html +503 -49
  246. data/rdoc/RubyXL/Hyperlinks.html +487 -47
  247. data/rdoc/RubyXL/IconFilter.html +487 -47
  248. data/rdoc/RubyXL/IconSet.html +487 -47
  249. data/rdoc/RubyXL/IgnoredError.html +487 -47
  250. data/rdoc/RubyXL/IgnoredErrors.html +487 -47
  251. data/rdoc/RubyXL/IndexedColors.html +487 -47
  252. data/rdoc/RubyXL/InputCells.html +487 -47
  253. data/rdoc/RubyXL/IntegerNode.html +493 -47
  254. data/rdoc/RubyXL/IntegerValue.html +493 -47
  255. data/rdoc/RubyXL/LegacyCell.html +533 -66
  256. data/rdoc/RubyXL/LegacyWorksheet.html +707 -119
  257. data/rdoc/RubyXL/MRUColors.html +487 -47
  258. data/rdoc/RubyXL/MacrosFile.html +510 -50
  259. data/rdoc/RubyXL/MergedCell.html +487 -47
  260. data/rdoc/RubyXL/MergedCells.html +487 -47
  261. data/rdoc/RubyXL/NumFmt.html +487 -47
  262. data/rdoc/RubyXL/NumberFormat.html +539 -69
  263. data/rdoc/RubyXL/NumberFormats.html +550 -72
  264. data/rdoc/RubyXL/OLEObject.html +487 -47
  265. data/rdoc/RubyXL/OLEObjectFile.html +510 -50
  266. data/rdoc/RubyXL/OLEObjects.html +487 -47
  267. data/rdoc/RubyXL/OLESize.html +487 -47
  268. data/rdoc/RubyXL/OOXMLContainerObject.html +749 -142
  269. data/rdoc/RubyXL/OOXMLIgnored.html +596 -82
  270. data/rdoc/RubyXL/OOXMLObject.html +506 -52
  271. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +723 -150
  272. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +819 -169
  273. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +883 -179
  274. data/rdoc/RubyXL/OOXMLTopLevelObject.html +730 -136
  275. data/rdoc/RubyXL/OdbcOleDbProperties.html +487 -47
  276. data/rdoc/RubyXL/Offset.html +487 -47
  277. data/rdoc/RubyXL/OlapProperties.html +487 -47
  278. data/rdoc/RubyXL/OleItem.html +487 -47
  279. data/rdoc/RubyXL/OleItems.html +487 -47
  280. data/rdoc/RubyXL/OleLink.html +487 -47
  281. data/rdoc/RubyXL/OutlineProperties.html +487 -47
  282. data/rdoc/RubyXL/PageMargins.html +487 -47
  283. data/rdoc/RubyXL/PageSetup.html +487 -47
  284. data/rdoc/RubyXL/PageSetupProperties.html +487 -47
  285. data/rdoc/RubyXL/Pane.html +487 -47
  286. data/rdoc/RubyXL/Parser.html +576 -80
  287. data/rdoc/RubyXL/PatternFill.html +487 -47
  288. data/rdoc/RubyXL/PersonMetadata.html +510 -50
  289. data/rdoc/RubyXL/PhoneticProperties.html +487 -47
  290. data/rdoc/RubyXL/PhoneticRun.html +487 -47
  291. data/rdoc/RubyXL/PivotArea.html +487 -47
  292. data/rdoc/RubyXL/PivotCache.html +487 -47
  293. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +529 -55
  294. data/rdoc/RubyXL/PivotCacheRecordsFile.html +510 -50
  295. data/rdoc/RubyXL/PivotCaches.html +487 -47
  296. data/rdoc/RubyXL/PivotReference.html +487 -47
  297. data/rdoc/RubyXL/PivotReferences.html +487 -47
  298. data/rdoc/RubyXL/PivotTableFile.html +529 -55
  299. data/rdoc/RubyXL/PivotTableSelection.html +487 -47
  300. data/rdoc/RubyXL/PresetGeometry.html +487 -47
  301. data/rdoc/RubyXL/PrintOptions.html +487 -47
  302. data/rdoc/RubyXL/PrinterSettingsFile.html +510 -50
  303. data/rdoc/RubyXL/ProtectedRange.html +487 -47
  304. data/rdoc/RubyXL/ProtectedRanges.html +487 -47
  305. data/rdoc/RubyXL/Protection.html +487 -47
  306. data/rdoc/RubyXL/QueryParameter.html +487 -47
  307. data/rdoc/RubyXL/QueryParameters.html +487 -47
  308. data/rdoc/RubyXL/QueryTable.html +574 -76
  309. data/rdoc/RubyXL/QueryTableDeletedField.html +487 -47
  310. data/rdoc/RubyXL/QueryTableDeletedFields.html +487 -47
  311. data/rdoc/RubyXL/QueryTableField.html +487 -47
  312. data/rdoc/RubyXL/QueryTableFields.html +487 -47
  313. data/rdoc/RubyXL/QueryTableRefresh.html +487 -47
  314. data/rdoc/RubyXL/RID.html +493 -47
  315. data/rdoc/RubyXL/RawOOXML.html +603 -87
  316. data/rdoc/RubyXL/Reference.html +1009 -211
  317. data/rdoc/RubyXL/Relationship.html +493 -47
  318. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +539 -66
  319. data/rdoc/RubyXL/RelationshipSupport.html +739 -132
  320. data/rdoc/RubyXL/RevisionPointer.html +487 -47
  321. data/rdoc/RubyXL/RichText.html +539 -69
  322. data/rdoc/RubyXL/RichTextRun.html +539 -69
  323. data/rdoc/RubyXL/Row.html +803 -157
  324. data/rdoc/RubyXL/RowExt.html +487 -47
  325. data/rdoc/RubyXL/RunProperties.html +487 -47
  326. data/rdoc/RubyXL/Scenario.html +487 -47
  327. data/rdoc/RubyXL/Scenarios.html +487 -47
  328. data/rdoc/RubyXL/Selection.html +539 -69
  329. data/rdoc/RubyXL/ShapeGuide.html +487 -47
  330. data/rdoc/RubyXL/ShapeTextRectangle.html +487 -47
  331. data/rdoc/RubyXL/SharedStringsTable.html +767 -143
  332. data/rdoc/RubyXL/Sheet.html +487 -47
  333. data/rdoc/RubyXL/SheetCalculationProperties.html +487 -47
  334. data/rdoc/RubyXL/SheetData.html +570 -80
  335. data/rdoc/RubyXL/SheetDataExt.html +487 -47
  336. data/rdoc/RubyXL/SheetDataSet.html +487 -47
  337. data/rdoc/RubyXL/SheetMetadata.html +510 -50
  338. data/rdoc/RubyXL/SheetName.html +487 -47
  339. data/rdoc/RubyXL/SheetNames.html +487 -47
  340. data/rdoc/RubyXL/Sheets.html +487 -47
  341. data/rdoc/RubyXL/SlicerCacheFile.html +510 -50
  342. data/rdoc/RubyXL/SlicerFile.html +510 -50
  343. data/rdoc/RubyXL/SmartTagProperties.html +487 -47
  344. data/rdoc/RubyXL/SmartTagType.html +487 -47
  345. data/rdoc/RubyXL/SmartTagTypes.html +487 -47
  346. data/rdoc/RubyXL/SmartTags.html +487 -47
  347. data/rdoc/RubyXL/SortCondition.html +487 -47
  348. data/rdoc/RubyXL/SortState.html +487 -47
  349. data/rdoc/RubyXL/Sqref.html +596 -82
  350. data/rdoc/RubyXL/Stop.html +487 -47
  351. data/rdoc/RubyXL/StringNode.html +493 -47
  352. data/rdoc/RubyXL/StringNodeW3C.html +596 -82
  353. data/rdoc/RubyXL/StringValue.html +493 -47
  354. data/rdoc/RubyXL/Stylesheet.html +702 -119
  355. data/rdoc/RubyXL/TableFile.html +510 -50
  356. data/rdoc/RubyXL/TableParts.html +493 -47
  357. data/rdoc/RubyXL/TableStyle.html +487 -47
  358. data/rdoc/RubyXL/TableStyles.html +487 -47
  359. data/rdoc/RubyXL/Text.html +588 -84
  360. data/rdoc/RubyXL/TextImportSettings.html +487 -47
  361. data/rdoc/RubyXL/Theme.html +633 -91
  362. data/rdoc/RubyXL/ThemeElements.html +487 -47
  363. data/rdoc/RubyXL/ThumbnailFile.html +510 -50
  364. data/rdoc/RubyXL/Top10.html +487 -47
  365. data/rdoc/RubyXL/VMLDrawingFile.html +530 -56
  366. data/rdoc/RubyXL/Variant.html +487 -47
  367. data/rdoc/RubyXL/Vector.html +539 -69
  368. data/rdoc/RubyXL/VectorValue.html +493 -47
  369. data/rdoc/RubyXL/VisualProperties.html +487 -47
  370. data/rdoc/RubyXL/WebPublishObject.html +487 -47
  371. data/rdoc/RubyXL/WebPublishObjects.html +487 -47
  372. data/rdoc/RubyXL/WebPublishingItem.html +487 -47
  373. data/rdoc/RubyXL/WebPublishingItems.html +487 -47
  374. data/rdoc/RubyXL/WebPublishingProperties.html +487 -47
  375. data/rdoc/RubyXL/WebQueryProperties.html +487 -47
  376. data/rdoc/RubyXL/Workbook.html +1514 -377
  377. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +1044 -237
  378. data/rdoc/RubyXL/WorkbookProperties.html +487 -47
  379. data/rdoc/RubyXL/WorkbookProtection.html +487 -47
  380. data/rdoc/RubyXL/WorkbookRoot.html +736 -128
  381. data/rdoc/RubyXL/WorkbookView.html +487 -47
  382. data/rdoc/RubyXL/WorkbookViews.html +487 -47
  383. data/rdoc/RubyXL/Worksheet.html +833 -161
  384. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +2628 -757
  385. data/rdoc/RubyXL/WorksheetDimensions.html +487 -47
  386. data/rdoc/RubyXL/WorksheetFormatProperties.html +493 -47
  387. data/rdoc/RubyXL/WorksheetProperties.html +487 -47
  388. data/rdoc/RubyXL/WorksheetProtection.html +487 -47
  389. data/rdoc/RubyXL/WorksheetView.html +487 -47
  390. data/rdoc/RubyXL/WorksheetViews.html +487 -47
  391. data/rdoc/RubyXL/XF.html +487 -47
  392. data/rdoc/RubyXL.html +1199 -164
  393. data/rdoc/created.rid +30 -30
  394. data/rdoc/css/rdoc.css +1652 -384
  395. data/rdoc/index.html +418 -440
  396. data/rdoc/js/aliki.js +511 -0
  397. data/rdoc/js/bash_highlighter.js +167 -0
  398. data/rdoc/js/c_highlighter.js +299 -0
  399. data/rdoc/js/{search.js → search_controller.js} +27 -8
  400. data/rdoc/js/search_data.js +1 -0
  401. data/rdoc/js/{navigation.js → search_navigation.js} +2 -2
  402. data/rdoc/js/search_ranker.js +239 -0
  403. data/rdoc/js/theme-toggle.js +112 -0
  404. data/rubyXL.gemspec +12 -45
  405. data/spec/lib/cell_spec.rb +1 -1
  406. data/spec/lib/reference_spec.rb +8 -2
  407. metadata +14 -47
  408. data/rdoc/css/fonts.css +0 -167
  409. data/rdoc/fonts/Lato-Light.ttf +0 -0
  410. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  411. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  412. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  413. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  414. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  415. data/rdoc/images/add.png +0 -0
  416. data/rdoc/images/arrow_up.png +0 -0
  417. data/rdoc/images/brick.png +0 -0
  418. data/rdoc/images/brick_link.png +0 -0
  419. data/rdoc/images/bug.png +0 -0
  420. data/rdoc/images/bullet_black.png +0 -0
  421. data/rdoc/images/bullet_toggle_minus.png +0 -0
  422. data/rdoc/images/bullet_toggle_plus.png +0 -0
  423. data/rdoc/images/date.png +0 -0
  424. data/rdoc/images/delete.png +0 -0
  425. data/rdoc/images/find.png +0 -0
  426. data/rdoc/images/loadingAnimation.gif +0 -0
  427. data/rdoc/images/macFFBgHack.png +0 -0
  428. data/rdoc/images/package.png +0 -0
  429. data/rdoc/images/page_green.png +0 -0
  430. data/rdoc/images/page_white_text.png +0 -0
  431. data/rdoc/images/page_white_width.png +0 -0
  432. data/rdoc/images/plugin.png +0 -0
  433. data/rdoc/images/ruby.png +0 -0
  434. data/rdoc/images/tag_blue.png +0 -0
  435. data/rdoc/images/tag_green.png +0 -0
  436. data/rdoc/images/transparent.png +0 -0
  437. data/rdoc/images/wrench.png +0 -0
  438. data/rdoc/images/wrench_orange.png +0 -0
  439. data/rdoc/images/zoom.png +0 -0
  440. data/rdoc/js/darkfish.js +0 -97
  441. data/rdoc/js/navigation.js.gz +0 -0
  442. data/rdoc/js/search_index.js +0 -1
  443. data/rdoc/js/search_index.js.gz +0 -0
  444. data/rdoc/js/searcher.js +0 -229
  445. data/rdoc/js/searcher.js.gz +0 -0
  446. data/rdoc/table_of_contents.html +0 -3026
data/rdoc/css/rdoc.css CHANGED
@@ -1,103 +1,407 @@
1
1
  /*
2
- * "Darkfish" Rdoc CSS
3
- * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
4
- *
5
- * Author: Michael Granger <ged@FaerieMUD.org>
2
+ * Aliki Theme Stylesheet
3
+ * Modern RDoc theme by Stan Lo
6
4
  *
5
+ * Features:
6
+ * - Three-column responsive layout (navigation, content, table of contents)
7
+ * - Dark mode support with localStorage persistence
8
+ * - Auto-generated right sidebar TOC with scroll spy
9
+ * - Mobile-optimized search modal
10
+ * - Enhanced syntax highlighting for both light and dark themes
11
+ * - Code-copying functionality
7
12
  */
8
13
 
9
- /* vim: ft=css et sw=2 ts=2 sts=2 */
10
- /* Base Green is: #6C8C22 */
14
+ /* 1. Design System - CSS Variables and Tokens */
15
+
16
+ /* Light Theme (Default) */
17
+ :root {
18
+ /* Color Palette - Primary */
19
+ --color-primary-50: #fdeae9;
20
+ --color-primary-100: #fadad3;
21
+ --color-primary-200: #f8bfbd;
22
+ --color-primary-300: #f5a9a7;
23
+ --color-primary-400: #f07f7b;
24
+ --color-primary-500: #eb544f;
25
+ --color-primary-600: #e62923;
26
+ --color-primary-700: #b8211c;
27
+ --color-primary-800: #8a1915;
28
+ --color-primary-900: #5c100e;
29
+
30
+ /* Color Palette - Neutral */
31
+ --color-neutral-50: #fafaf9;
32
+ --color-neutral-100: #f5f5f4;
33
+ --color-neutral-200: #e7e5e4;
34
+ --color-neutral-300: #d6d3d1;
35
+ --color-neutral-400: #a8a29e;
36
+ --color-neutral-500: #78716c;
37
+ --color-neutral-600: #57534e;
38
+ --color-neutral-700: #44403c;
39
+ --color-neutral-800: #292524;
40
+ --color-neutral-900: #1c1917;
41
+
42
+ /* Code highlighting colors - neutral palette for all syntax highlighters */
43
+ --code-blue: #1d4ed8;
44
+ --code-green: #047857;
45
+ --code-orange: #d97706;
46
+ --code-purple: #7e22ce;
47
+ --code-red: #dc2626;
48
+ --code-cyan: #0891b2;
49
+ --code-gray: #78716c;
50
+
51
+ /* Color Palette - Green (for success states) */
52
+ --color-green-400: #4ade80;
53
+ --color-green-500: #22c55e;
54
+ --color-green-600: #16a34a;
55
+
56
+ /* Semantic Colors - Light Theme */
57
+ --color-text-primary: var(--color-neutral-900);
58
+ --color-text-secondary: var(--color-neutral-600);
59
+ --color-text-tertiary: var(--color-neutral-500);
60
+ --color-background-primary: #fff;
61
+ --color-background-secondary: var(--color-neutral-50);
62
+ --color-background-tertiary: var(--color-neutral-100);
63
+ --color-border-default: var(--color-neutral-300);
64
+ --color-border-subtle: var(--color-neutral-200);
65
+ --color-border-emphasis: var(--color-neutral-400);
66
+ --color-link-default: var(--color-text-primary);
67
+ --color-link-hover: var(--color-primary-600);
68
+ --color-accent-primary: var(--color-primary-600);
69
+ --color-accent-hover: var(--color-primary-700);
70
+ --color-accent-subtle: var(--color-primary-50);
71
+ --color-code-bg: #f6f8fa;
72
+ --color-code-border: var(--color-neutral-300);
73
+ --color-nav-bg: #fff;
74
+ --color-nav-text: var(--color-neutral-700);
75
+ --color-th-background: var(--color-neutral-100);
76
+ --color-td-background: var(--color-neutral-50);
77
+
78
+ /* Search Type Badge Colors */
79
+ --color-search-type-class-bg: #e6f0ff;
80
+ --color-search-type-class-text: #0050a0;
81
+ --color-search-type-module-bg: #e6ffe6;
82
+ --color-search-type-module-text: #060;
83
+ --color-search-type-constant-bg: #fff0e6;
84
+ --color-search-type-constant-text: #995200;
85
+ --color-search-type-method-bg: #f0e6ff;
86
+ --color-search-type-method-text: #5200a0;
87
+
88
+ /* RGBA Colors (theme-agnostic) */
89
+ --color-overlay: rgb(0 0 0 / 50%);
90
+ --color-emphasis-bg: rgb(255 111 97 / 10%);
91
+ --color-emphasis-decoration: rgb(52 48 64 / 25%);
92
+ --color-search-highlight-bg: rgb(224 108 117 / 10%);
93
+ --color-success-bg: rgb(34 197 94 / 10%);
94
+
95
+ /* Typography Scale */
96
+ --font-size-xs: 0.75rem; /* 12px */
97
+ --font-size-sm: 0.875rem; /* 14px */
98
+ --font-size-base: 1rem; /* 16px */
99
+ --font-size-lg: 1.125rem; /* 18px */
100
+ --font-size-xl: 1.25rem; /* 20px */
101
+ --font-size-2xl: 1.5rem; /* 24px */
102
+ --font-size-3xl: 1.875rem; /* 30px */
103
+ --font-size-4xl: 2.25rem; /* 36px */
104
+ --font-size-5xl: 3rem; /* 48px */
105
+
106
+ /* Font Families */
107
+ --font-family-base: -apple-system, blinkmacsystemfont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Helvetica Neue', sans-serif;
108
+ --font-family-heading: var(--font-family-base);
109
+ --font-family-mono: ui-monospace, 'SFMono-Regular', 'SF Mono', 'Menlo', 'Consolas', 'Liberation Mono', monospace;
110
+
111
+ /* Font Weights */
112
+ --font-weight-normal: 400;
113
+ --font-weight-medium: 500;
114
+ --font-weight-semibold: 600;
115
+ --font-weight-bold: 700;
116
+
117
+ /* Font Shortcuts */
118
+ --font-primary: var(--font-family-base);
119
+ --font-heading: var(--font-family-heading);
120
+ --font-code: var(--font-family-mono);
121
+
122
+ /* Line Heights */
123
+ --line-height-tight: 1.25;
124
+ --line-height-normal: 1.5;
125
+ --line-height-relaxed: 1.625;
126
+
127
+ /* Spacing Scale */
128
+ --space-1: 0.25rem; /* 4px */
129
+ --space-2: 0.5rem; /* 8px */
130
+ --space-3: 0.75rem; /* 12px */
131
+ --space-4: 1rem; /* 16px */
132
+ --space-5: 1.25rem; /* 20px */
133
+ --space-6: 1.5rem; /* 24px */
134
+ --space-8: 2rem; /* 32px */
135
+ --space-12: 3rem; /* 48px */
136
+ --space-16: 4rem; /* 64px */
137
+
138
+ /* Border Radius */
139
+ --radius-sm: 0.25rem; /* 4px */
140
+ --radius-md: 0.375rem; /* 6px */
141
+ --radius-lg: 0.5rem; /* 8px */
142
+
143
+ /* Shadows */
144
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%);
145
+ --shadow-md: 0 2px 8px rgb(0 0 0 / 10%);
146
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%);
147
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 10%), 0 8px 10px -6px rgb(0 0 0 / 10%);
148
+
149
+ /* Layout Dimensions */
150
+ --layout-sidebar-width: 300px;
151
+ --layout-sidebar-width-min: 300px;
152
+ --layout-sidebar-width-max: 15%;
153
+ --layout-toc-width-min: 240px;
154
+ --layout-toc-width-max: 18%;
155
+ --layout-content-max-width: 800px;
156
+ --layout-header-height: 64px;
157
+ --layout-search-width: 400px;
158
+
159
+ /* Transitions */
160
+ --transition-fast: 150ms ease-in-out;
161
+ --transition-base: 200ms ease-in-out;
162
+ --transition-slow: 350ms ease-in-out;
163
+ --ease-out-smooth: cubic-bezier(0.4, 0, 0.2, 1);
164
+
165
+ /* Animation Durations */
166
+ --duration-fast: 250ms;
167
+ --duration-base: 300ms;
168
+ --duration-medium: 350ms;
169
+
170
+ /* Z-Index Scale */
171
+ --z-fixed: 300;
172
+ --z-modal: 400;
173
+ --z-popover: 500;
174
+
175
+ }
176
+
177
+ /* Dark Theme */
178
+ [data-theme="dark"] {
179
+ /* Code highlighting colors - neutral palette for all syntax highlighters */
180
+ --code-blue: #93c5fd;
181
+ --code-green: #34d399;
182
+ --code-orange: #fbbf24;
183
+ --code-purple: #c084fc;
184
+ --code-red: #f87171;
185
+ --code-cyan: #22d3ee;
186
+ --code-gray: #a8a29e;
187
+
188
+ /* Semantic Colors - Dark Theme */
189
+ --color-text-primary: var(--color-neutral-50);
190
+ --color-text-secondary: var(--color-neutral-200);
191
+ --color-text-tertiary: var(--color-neutral-400);
192
+ --color-background-primary: var(--color-neutral-900);
193
+ --color-background-secondary: var(--color-neutral-800);
194
+ --color-background-tertiary: var(--color-neutral-700);
195
+ --color-border-default: var(--color-neutral-600);
196
+ --color-border-subtle: var(--color-neutral-700);
197
+ --color-border-emphasis: var(--color-neutral-300);
198
+ --color-link-default: var(--color-neutral-50);
199
+ --color-link-hover: var(--color-primary-500);
200
+ --color-accent-primary: var(--color-primary-500);
201
+ --color-accent-hover: var(--color-primary-400);
202
+ --color-accent-subtle: rgb(235 84 79 / 10%);
203
+ --color-accent-subtle-hover: rgb(235 84 79 / 20%);
204
+ --color-code-bg: var(--color-neutral-800);
205
+ --color-code-border: var(--color-neutral-700);
206
+ --color-nav-bg: var(--color-neutral-900);
207
+ --color-nav-text: var(--color-neutral-50);
208
+ --color-th-background: var(--color-background-tertiary);
209
+ --color-td-background: var(--color-background-secondary);
210
+
211
+ /* Search Type Badge Colors - Dark Theme */
212
+ --color-search-type-class-bg: #1e3a5f;
213
+ --color-search-type-class-text: #93c5fd;
214
+ --color-search-type-module-bg: #14532d;
215
+ --color-search-type-module-text: #86efac;
216
+ --color-search-type-constant-bg: #451a03;
217
+ --color-search-type-constant-text: #fcd34d;
218
+ --color-search-type-method-bg: #3b0764;
219
+ --color-search-type-method-text: #d8b4fe;
220
+
221
+ /* Dark theme shadows (slightly more subtle) */
222
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 40%), 0 1px 2px -1px rgb(0 0 0 / 40%);
223
+ --shadow-md: 0 2px 8px rgb(0 0 0 / 40%);
224
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 40%), 0 4px 6px -4px rgb(0 0 0 / 40%);
225
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 40%), 0 8px 10px -6px rgb(0 0 0 / 40%);
226
+
227
+ }
228
+
229
+ /* 2. Global Styles & Layout */
230
+ body {
231
+ background: var(--color-background-primary);
232
+ font-family: var(--font-primary);
233
+ font-weight: 400;
234
+ color: var(--color-text-primary);
235
+ line-height: var(--line-height-relaxed);
236
+ margin: 0;
237
+ overflow-wrap: break-word; /* Avoid overflow on mobile */
11
238
 
12
- .hide { display: none !important; }
239
+ /* Grid layout with header, sidebar, main, and footer */
240
+ display: grid;
241
+ grid-template: "header header" var(--layout-header-height) "nav main" 1fr "nav footer" auto / var(--layout-sidebar-width) 1fr;
242
+ min-height: 100vh;
243
+ }
13
244
 
14
- * { padding: 0; margin: 0; }
245
+ /* Three-column layout when TOC is present */
246
+ body.has-toc {
247
+ grid-template: "header header header" var(--layout-header-height) "nav main toc" 1fr "nav footer toc" auto / var(--layout-sidebar-width) 1fr minmax(var(--layout-toc-width-min), var(--layout-toc-width-max));
248
+ min-height: 100vh;
249
+ }
15
250
 
16
- body {
17
- background: #fafafa;
18
- font-family: Lato, sans-serif;
19
- font-weight: 300;
251
+ /* Mobile: stack everything vertically */
252
+ @media (width <= 1023px) {
253
+ body,
254
+ body.has-toc {
255
+ display: flex;
256
+ flex-direction: column;
257
+ grid-template: none;
258
+ }
259
+ }
20
260
 
21
- /* Layout */
22
- display: grid;
23
- grid-template-columns: auto 1fr;
261
+ /* 3. Typography */
262
+
263
+ /* 4. Links */
264
+ a {
265
+ color: var(--color-link-default);
266
+ transition: color var(--transition-base);
267
+ text-decoration: underline;
268
+ text-underline-offset: 0.2em; /* Make sure it doesn't overlap with underscores in a method name. */
24
269
  }
25
270
 
26
- body > :last-child {
27
- grid-column: 1 / 3;
271
+ /* 5. Code and Pre */
272
+
273
+ /* Code blocks */
274
+ pre {
275
+ font-family: var(--font-code);
276
+ background-color: var(--color-code-bg);
277
+ border: 1px solid var(--color-code-border);
278
+ border-radius: var(--radius-md);
279
+ padding: var(--space-4);
280
+ overflow-x: auto;
281
+ font-size: var(--font-size-sm);
282
+ line-height: var(--line-height-normal);
283
+ margin: var(--space-4) 0;
284
+ position: relative;
28
285
  }
29
286
 
30
- h1 span,
31
- h2 span,
32
- h3 span,
33
- h4 span,
34
- h5 span,
35
- h6 span {
287
+ /* Code block wrapper for copy button */
288
+ .code-block-wrapper {
36
289
  position: relative;
290
+ margin: var(--space-4) 0;
291
+ }
37
292
 
38
- display: none;
39
- padding-left: 1em;
40
- line-height: 0;
41
- vertical-align: baseline;
42
- font-size: 10px;
293
+ /* Copy button styling */
294
+ .copy-code-button {
295
+ position: absolute;
296
+ top: var(--space-2);
297
+ right: var(--space-2);
298
+ padding: var(--space-2);
299
+ background: var(--color-background-secondary);
300
+ border: 1px solid var(--color-border-default);
301
+ border-radius: var(--radius-sm);
302
+ cursor: pointer;
303
+ opacity: 0.6;
304
+ transition:
305
+ opacity var(--transition-fast),
306
+ background var(--transition-fast),
307
+ border-color var(--transition-fast),
308
+ transform var(--transition-fast),
309
+ box-shadow var(--transition-fast);
310
+ display: flex;
311
+ align-items: center;
312
+ justify-content: center;
313
+ width: 2rem;
314
+ height: 2rem;
315
+ z-index: 10;
316
+ }
317
+
318
+ .copy-code-button:hover,
319
+ .copy-code-button:focus {
320
+ opacity: 1;
321
+ background: var(--color-background-tertiary);
322
+ border-color: var(--color-border-emphasis);
323
+ transform: translateY(-1px);
324
+ box-shadow: var(--shadow-md);
43
325
  }
44
326
 
45
- h1 span { top: -1.3em; }
46
- h2 span { top: -1.2em; }
47
- h3 span { top: -1.0em; }
48
- h4 span { top: -0.8em; }
49
- h5 span { top: -0.5em; }
50
- h6 span { top: -0.5em; }
327
+ .copy-code-button:focus {
328
+ outline: none;
329
+ box-shadow: 0 0 0 3px var(--color-accent-subtle);
330
+ }
51
331
 
52
- h1:hover span,
53
- h2:hover span,
54
- h3:hover span,
55
- h4:hover span,
56
- h5:hover span,
57
- h6:hover span {
58
- display: inline;
332
+ .copy-code-button:active {
333
+ transform: scale(0.92);
334
+ box-shadow: none;
59
335
  }
60
336
 
61
- h1:target,
62
- h2:target,
63
- h3:target,
64
- h4:target,
65
- h5:target,
66
- h6:target {
67
- margin-left: -10px;
68
- border-left: 10px solid #f1edba;
337
+ .copy-code-button svg {
338
+ width: 1rem;
339
+ height: 1rem;
340
+ fill: none;
341
+ stroke: currentcolor;
342
+ stroke-width: 2;
343
+ stroke-linecap: round;
344
+ stroke-linejoin: round;
345
+ color: var(--color-text-secondary);
346
+ transition: color var(--transition-fast), transform var(--transition-base);
69
347
  }
70
348
 
71
- :link,
72
- :visited {
73
- color: #6C8C22;
74
- text-decoration: none;
349
+ .copy-code-button:hover svg {
350
+ color: var(--color-text-primary);
75
351
  }
76
352
 
77
- :link:hover,
78
- :visited:hover {
79
- border-bottom: 1px dotted #6C8C22;
353
+ /* Copied state - subtle green checkmark */
354
+ .copy-code-button.copied {
355
+ background: var(--color-success-bg);
356
+ border-color: var(--color-green-500);
357
+ opacity: 1;
80
358
  }
81
359
 
82
- code,
83
- pre {
84
- font-family: "Source Code Pro", Monaco, monospace;
85
- background-color: rgba(27,31,35,0.05);
86
- padding: 0em 0.2em;
87
- border-radius: 0.2em;
360
+ .copy-code-button.copied svg {
361
+ color: var(--color-green-600);
88
362
  }
89
363
 
90
- em {
91
- text-decoration-color: rgba(52, 48, 64, 0.25);
92
- text-decoration-line: underline;
93
- text-decoration-style: dotted;
364
+ [data-theme="dark"] .copy-code-button.copied {
365
+ border-color: var(--color-green-400);
94
366
  }
95
367
 
96
- strong,
97
- em {
98
- background-color: rgba(158, 178, 255, 0.1);
368
+ [data-theme="dark"] .copy-code-button.copied svg {
369
+ color: var(--color-green-400);
370
+ }
371
+
372
+ /* Mobile adjustments */
373
+ @media (hover: none) {
374
+ .copy-code-button {
375
+ opacity: 0.7;
376
+ }
377
+
378
+ .copy-code-button:active {
379
+ opacity: 1;
380
+ }
99
381
  }
100
382
 
383
+ /* Inline code */
384
+ code {
385
+ font-family: var(--font-code);
386
+ background-color: var(--color-code-bg);
387
+ border: 1px solid var(--color-border-subtle);
388
+ padding: 0.125rem 0.375rem;
389
+ border-radius: var(--radius-sm);
390
+ font-size: 0.9em;
391
+ }
392
+
393
+ pre code {
394
+ background: none;
395
+ border: none;
396
+ padding: 0;
397
+ font-size: inherit;
398
+ }
399
+
400
+ a code:hover {
401
+ color: var(--color-link-hover);
402
+ }
403
+
404
+ /* Tables */
101
405
  table {
102
406
  margin: 0;
103
407
  border-spacing: 0;
@@ -106,490 +410,956 @@ table {
106
410
 
107
411
  table tr th, table tr td {
108
412
  padding: 0.2em 0.4em;
109
- border: 1px solid #ccc;
413
+ border: 1px solid var(--color-border-default);
110
414
  }
111
415
 
112
416
  table tr th {
113
- background-color: #eceaed;
417
+ background-color: var(--color-th-background);
114
418
  }
115
419
 
116
420
  table tr:nth-child(even) td {
117
- background-color: #f5f4f6;
421
+ background-color: var(--color-td-background);
422
+ }
423
+
424
+ /* 6. Header (Top Navbar) */
425
+ header.top-navbar {
426
+ grid-area: header;
427
+ position: sticky;
428
+ top: 0;
429
+ z-index: var(--z-fixed);
430
+ background: var(--color-background-primary);
431
+ border-bottom: 1px solid var(--color-border-default);
432
+ display: flex;
433
+ align-items: center;
434
+ justify-content: flex-start;
435
+ padding: 0 var(--space-6);
436
+ gap: var(--space-8);
437
+ height: var(--layout-header-height);
438
+ box-shadow: var(--shadow-sm);
439
+ }
440
+
441
+ header.top-navbar .navbar-brand {
442
+ font-size: var(--font-size-xl);
443
+ font-weight: var(--font-weight-semibold);
444
+ color: var(--color-text-primary);
445
+ text-decoration: none;
446
+ white-space: nowrap;
118
447
  }
119
448
 
120
- /* @group Generic Classes */
449
+ header.top-navbar .navbar-brand:hover {
450
+ color: var(--color-accent-primary);
451
+ }
452
+
453
+ header.top-navbar .navbar-search {
454
+ position: relative;
455
+ flex: 0 1 auto;
456
+ width: var(--layout-search-width);
457
+ }
121
458
 
122
- .initially-hidden {
459
+ header.top-navbar .navbar-search form {
460
+ margin: 0;
461
+ padding: 0;
462
+ }
463
+
464
+
465
+
466
+ /* Mobile search icon button (hidden on desktop) */
467
+ .navbar-search-mobile {
123
468
  display: none;
124
469
  }
125
470
 
126
- #search-field {
127
- width: 98%;
128
- background: white;
129
- border: none;
130
- height: 1.5em;
131
- -webkit-border-radius: 4px;
132
- -moz-border-radius: 4px;
133
- border-radius: 4px;
134
- text-align: left;
471
+ /* Theme toggle button */
472
+ .theme-toggle {
473
+ display: flex;
474
+ align-items: center;
475
+ justify-content: center;
476
+ padding: var(--space-2);
477
+ margin-left: auto;
478
+ background: transparent;
479
+ border: 1px solid var(--color-border-default);
480
+ border-radius: var(--radius-md);
481
+ color: var(--color-text-primary);
482
+ cursor: pointer;
483
+ transition:
484
+ background var(--transition-fast),
485
+ border-color var(--transition-fast),
486
+ color var(--transition-fast),
487
+ transform var(--transition-fast);
488
+ font-size: var(--font-size-lg);
489
+ line-height: 1;
490
+ width: 2.5rem;
491
+ height: 2.5rem;
492
+ }
493
+
494
+ .theme-toggle:hover {
495
+ background: var(--color-background-secondary);
496
+ border-color: var(--color-accent-primary);
497
+ color: var(--color-accent-primary);
498
+ transform: scale(1.05);
499
+ }
500
+
501
+ .theme-toggle:focus {
502
+ outline: none;
503
+ border-color: var(--color-accent-primary);
504
+ box-shadow: 0 0 0 3px var(--color-accent-subtle);
505
+ }
506
+
507
+ .theme-toggle:active {
508
+ transform: scale(0.95);
509
+ }
510
+
511
+ .theme-toggle-icon {
512
+ display: inline-block;
513
+ transition: transform var(--duration-base) var(--ease-out-smooth);
514
+ }
515
+
516
+ .theme-toggle:hover .theme-toggle-icon {
517
+ transform: rotate(15deg) scale(1.1);
518
+ }
519
+
520
+ /* Mobile navbar */
521
+ @media (width <= 1023px) {
522
+ header.top-navbar {
523
+ display: flex;
524
+ align-items: center;
525
+ padding: 0 var(--space-4);
526
+ gap: var(--space-4);
527
+ }
528
+
529
+ /* Hide desktop search bar on mobile */
530
+ header.top-navbar .navbar-search-desktop {
531
+ display: none;
532
+ }
533
+
534
+ /* Show mobile search icon */
535
+ .navbar-search-mobile {
536
+ display: flex;
537
+ align-items: center;
538
+ justify-content: center;
539
+ padding: 0.5rem;
540
+ background: transparent;
541
+ border: none;
542
+ font-size: 1.25rem;
543
+ color: var(--color-text-primary);
544
+ cursor: pointer;
545
+ transition: color var(--transition-fast);
546
+ }
547
+
548
+ .navbar-search-mobile:hover {
549
+ color: var(--color-accent-primary);
550
+ }
551
+
552
+ /* Brand needs left margin for hamburger button */
553
+ header.top-navbar .navbar-brand {
554
+ margin-left: 2.5rem;
555
+ flex: 1;
556
+ font-size: var(--font-size-lg);
557
+ overflow: hidden;
558
+ text-overflow: ellipsis;
559
+ white-space: nowrap;
560
+ }
561
+ }
562
+
563
+ /* 7. Navigation (Left Sidebar) */
564
+ nav {
565
+ grid-area: nav;
566
+ font-family: var(--font-heading);
567
+ font-size: var(--font-size-base);
568
+ border-right: 1px solid var(--color-border-default);
569
+ background: var(--color-nav-bg);
570
+ color: var(--color-nav-text);
571
+ overflow: hidden auto;
572
+ overscroll-behavior: contain;
573
+ display: flex;
574
+ flex-direction: column;
575
+ position: sticky;
576
+ top: var(--layout-header-height);
577
+ height: calc(100vh - var(--layout-header-height));
578
+ scrollbar-width: thin;
579
+ scrollbar-color: var(--color-border-default) transparent;
135
580
  }
136
- #search-field:focus {
137
- background: #f1edba;
581
+
582
+ /* Custom scrollbar for WebKit browsers */
583
+ nav::-webkit-scrollbar {
584
+ width: 6px;
138
585
  }
139
- #search-field:-moz-placeholder,
140
- #search-field::-webkit-input-placeholder {
141
- font-weight: bold;
142
- color: #666;
586
+
587
+ nav::-webkit-scrollbar-track {
588
+ background: transparent;
143
589
  }
144
590
 
145
- .missing-docs {
146
- font-size: 120%;
147
- background: white url(../images/wrench_orange.png) no-repeat 4px center;
148
- color: #ccc;
149
- line-height: 2em;
150
- border: 1px solid #d00;
151
- opacity: 1;
152
- padding-left: 20px;
153
- text-indent: 24px;
154
- letter-spacing: 3px;
155
- font-weight: bold;
156
- -webkit-border-radius: 5px;
157
- -moz-border-radius: 5px;
591
+ nav::-webkit-scrollbar-thumb {
592
+ background: var(--color-border-default);
593
+ border-radius: var(--radius-sm);
594
+ transition: background var(--transition-fast);
158
595
  }
159
596
 
160
- .target-section {
161
- border: 2px solid #dcce90;
162
- border-left-width: 8px;
163
- padding: 0 1em;
164
- background: #fff3c2;
597
+ nav::-webkit-scrollbar-thumb:hover {
598
+ background: var(--color-border-emphasis);
165
599
  }
166
600
 
167
- /* @end */
601
+ /* Mobile navigation */
602
+ @media (width <= 1023px) {
603
+ nav {
604
+ position: fixed;
605
+ top: var(--layout-header-height);
606
+ bottom: 0;
607
+ left: 0;
608
+ width: var(--layout-sidebar-width);
609
+ z-index: calc(var(--z-fixed) - 10); /* Below header */
610
+ box-shadow: var(--shadow-lg);
168
611
 
169
- /* @group Index Page, Standalone file pages */
170
- .table-of-contents ul {
171
- margin: 1em;
172
- list-style: none;
612
+ /* Don't set height - let top/bottom define it */
613
+ }
614
+
615
+ nav[hidden] {
616
+ display: none;
617
+ }
618
+
619
+ /* Backdrop for mobile nav */
620
+ body::before {
621
+ content: '';
622
+ position: fixed;
623
+ inset: var(--layout-header-height) 0 0 0;
624
+ background: var(--color-overlay);
625
+ z-index: calc(var(--z-fixed) - 20);
626
+ opacity: 0;
627
+ pointer-events: none;
628
+ transition: opacity var(--transition-base);
629
+ }
630
+
631
+ /* Show backdrop when nav is open */
632
+ body.nav-open::before {
633
+ opacity: 1;
634
+ pointer-events: auto;
635
+ }
173
636
  }
174
637
 
175
- .table-of-contents ul ul {
176
- margin-top: 0.25em;
638
+ /* Desktop: hide nav when [hidden] attribute is set */
639
+ @media (width >= 1024px) {
640
+ nav[hidden] {
641
+ display: none;
642
+ }
177
643
  }
178
644
 
179
- .table-of-contents ul :link,
180
- .table-of-contents ul :visited {
181
- font-size: 16px;
645
+ nav .nav-section {
646
+ margin-top: var(--space-6);
647
+ padding: 0 var(--space-6);
182
648
  }
183
649
 
184
- .table-of-contents li {
185
- margin-bottom: 0.25em;
650
+ nav h2, nav h3 {
651
+ font-size: var(--font-size-lg);
652
+ font-weight: var(--font-weight-semibold);
653
+ margin: 0 0 var(--space-4);
654
+ padding: var(--space-2) 0;
655
+ color: var(--color-accent-primary);
656
+ border-bottom: 1px solid var(--color-border-default);
186
657
  }
187
658
 
188
- .table-of-contents li .toc-toggle {
189
- width: 16px;
190
- height: 16px;
191
- background: url(../images/add.png) no-repeat;
659
+ nav ul,
660
+ nav dl,
661
+ nav p {
662
+ padding: 0;
663
+ list-style: none;
664
+ margin: var(--space-3) 0;
192
665
  }
193
666
 
194
- .table-of-contents li .toc-toggle.open {
195
- background: url(../images/delete.png) no-repeat;
667
+ nav ul li {
668
+ margin-bottom: var(--space-2);
669
+ line-height: var(--line-height-relaxed);
196
670
  }
197
671
 
198
- /* @end */
672
+ nav ul li a {
673
+ transition:
674
+ color var(--transition-fast),
675
+ transform var(--transition-fast),
676
+ padding var(--transition-fast);
677
+ }
199
678
 
200
- /* @group Top-Level Structure */
679
+ nav ul li a:hover {
680
+ padding-left: var(--space-1);
681
+ }
201
682
 
202
- nav {
203
- font-family: Helvetica, sans-serif;
204
- font-size: 14px;
205
- border-right: 1px solid #ccc;
206
- position: sticky;
207
- top: 0;
208
- overflow: auto;
683
+ nav ul ul {
684
+ padding-left: var(--space-5);
685
+ margin-top: var(--space-2);
686
+ }
209
687
 
210
- /* Layout */
211
- width: 260px; /* fallback */
212
- width: max(50px, 20vw);
213
- min-width: 50px;
214
- max-width: 80vw;
215
- height: calc(100vh - 100px); /* reduce the footer height */
216
- resize: horizontal;
688
+ nav ul ul ul {
689
+ padding-left: var(--space-5);
217
690
  }
218
691
 
219
- main {
220
- display: block;
221
- margin: 1em;
222
- min-width: 340px;
223
- font-size: 16px;
692
+ nav ul ul ul ul {
693
+ padding-left: var(--space-5);
224
694
  }
225
695
 
226
- main h1,
227
- main h2,
228
- main h3,
229
- main h4,
230
- main h5,
231
- main h6 {
232
- font-family: Helvetica, sans-serif;
696
+ nav a {
697
+ text-decoration: none;
233
698
  }
234
699
 
235
- .table-of-contents main {
236
- margin-left: 2em;
700
+ /* Truncation for direct nav links (not links inside code tags) */
701
+ nav .nav-list > li > a,
702
+ nav .nav-section > ul > li > a,
703
+ nav .nav-section > dl > dd > a {
704
+ display: block;
705
+ max-width: 100%;
706
+ overflow: hidden;
707
+ text-overflow: ellipsis;
708
+ white-space: nowrap;
237
709
  }
238
710
 
239
- #validator-badges {
240
- margin: 1em 1em 2em;
241
- font-size: smaller;
711
+ nav footer {
712
+ padding: var(--space-4);
713
+ border-top: 1px solid var(--color-border-default);
242
714
  }
243
715
 
244
- /* @end */
716
+ nav footer a {
717
+ color: var(--color-accent-hover);
718
+ }
245
719
 
246
- /* @group navigation */
247
- nav {
248
- margin-bottom: 1em;
720
+ #navigation-toggle {
721
+ display: none; /* Hidden by default, shown on mobile */
249
722
  }
250
723
 
251
- nav .nav-section {
252
- margin-top: 2em;
253
- border-top: 2px solid #aaa;
254
- font-size: 90%;
255
- overflow: hidden;
724
+ /* Mobile toggle button */
725
+ @media (width <= 1023px) {
726
+ #navigation-toggle {
727
+ display: flex;
728
+ align-items: center;
729
+ justify-content: center;
730
+ position: fixed;
731
+ top: calc(var(--layout-header-height) / 2);
732
+ transform: translateY(-50%);
733
+ left: 1rem;
734
+ z-index: var(--z-fixed);
735
+ font-size: 1.5rem;
736
+ background: transparent;
737
+ border: none;
738
+ color: var(--color-text-primary);
739
+ cursor: pointer;
740
+ transition: color var(--transition-fast);
741
+ line-height: 1;
742
+ user-select: none;
743
+ -webkit-user-select: none;
744
+ }
745
+
746
+ #navigation-toggle:hover {
747
+ color: var(--color-accent-primary);
748
+ }
256
749
  }
257
750
 
258
- nav h2 {
259
- margin: 0;
260
- padding: 2px 8px 2px 8px;
261
- background-color: #e8e8e8;
262
- color: #555;
263
- font-size: 125%;
264
- text-align: center;
751
+ /*
752
+ * Shared Collapsible Animation using ::details-content pseudo-element.
753
+ * This is the modern CSS approach for animating <details> elements.
754
+ * Uses block-size animation with interpolate-size for smooth height transitions.
755
+ * Both nav-section-collapsible and nested link-list details share this pattern.
756
+ */
757
+ nav details {
758
+ interpolate-size: allow-keywords;
265
759
  }
266
760
 
267
- nav h3,
268
- #table-of-contents-navigation {
269
- margin: 0;
270
- padding: 2px 8px 2px 8px;
271
- text-align: right;
272
- background-color: #e8e8e8;
273
- color: #555;
761
+ nav details::details-content {
762
+ overflow: hidden;
763
+ block-size: 0;
764
+ transition: block-size 200ms ease, content-visibility 200ms ease allow-discrete;
274
765
  }
275
766
 
276
- nav ul,
277
- nav dl,
278
- nav p {
279
- padding: 4px 8px 0;
280
- list-style: none;
767
+ nav details[open]::details-content {
768
+ block-size: auto;
281
769
  }
282
770
 
283
- #project-navigation .nav-section {
284
- margin: 0;
285
- border-top: 0;
771
+ /* Collapsible Navigation Section Headers */
772
+
773
+ nav .nav-section-header {
774
+ display: flex;
775
+ align-items: center;
776
+ gap: var(--space-3);
777
+ padding: var(--space-3) 0;
778
+ cursor: pointer;
779
+ list-style: none;
780
+ user-select: none;
781
+ -webkit-user-select: none;
782
+ border-bottom: 1px solid var(--color-border-default);
783
+ margin-bottom: var(--space-3);
784
+ transition: color var(--transition-fast);
286
785
  }
287
786
 
288
- #home-section h2 {
289
- text-align: center;
787
+ nav .nav-section-header::-webkit-details-marker {
788
+ display: none;
290
789
  }
291
790
 
292
- #table-of-contents-navigation {
293
- font-size: 1.2em;
294
- font-weight: bold;
295
- text-align: center;
791
+ nav .nav-section-header:hover {
792
+ color: var(--color-accent-primary);
296
793
  }
297
794
 
298
- #search-section {
299
- margin-top: 0;
300
- border-top: 0;
795
+ nav .nav-section-icon {
796
+ display: flex;
797
+ align-items: center;
798
+ justify-content: center;
799
+ width: 1.25rem;
800
+ height: 1.25rem;
801
+ flex-shrink: 0;
802
+ color: var(--color-accent-primary);
301
803
  }
302
804
 
303
- #search-field-wrapper {
304
- border-top: 1px solid #aaa;
305
- border-bottom: 1px solid #aaa;
306
- padding: 3px 8px;
307
- background-color: #e8e8e8;
308
- color: #555;
805
+ nav .nav-section-icon svg {
806
+ width: 100%;
807
+ height: 100%;
309
808
  }
310
809
 
311
- ul.link-list li {
810
+ nav .nav-section-title {
811
+ font-size: var(--font-size-base);
812
+ font-weight: var(--font-weight-semibold);
813
+ color: inherit;
814
+ flex: 1;
815
+ min-width: 0;
816
+ overflow: hidden;
817
+ text-overflow: ellipsis;
312
818
  white-space: nowrap;
313
- line-height: 1.4em;
314
819
  }
315
820
 
316
- ul.link-list .type {
317
- font-size: 8px;
318
- text-transform: uppercase;
319
- color: white;
320
- background: #969696;
321
- padding: 2px 4px;
322
- -webkit-border-radius: 5px;
821
+ nav .nav-section-chevron {
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: center;
825
+ width: 1rem;
826
+ height: 1rem;
827
+ flex-shrink: 0;
828
+ color: var(--color-text-tertiary);
829
+ transition: transform var(--transition-base);
323
830
  }
324
831
 
325
- dl.note-list dt {
326
- float: left;
327
- margin-right: 1em;
832
+ nav .nav-section-chevron svg {
833
+ width: 100%;
834
+ height: 100%;
328
835
  }
329
836
 
330
- .calls-super {
331
- background: url(../images/arrow_up.png) no-repeat right center;
837
+ /* Rotate chevron when open */
838
+ nav .nav-section-collapsible[open] > .nav-section-header .nav-section-chevron {
839
+ transform: rotate(90deg);
332
840
  }
333
841
 
334
- .nav-section details > summary {
335
- display: block;
842
+ nav .nav-section-collapsible > ul,
843
+ nav .nav-section-collapsible > dl,
844
+ nav .nav-section-collapsible > p {
845
+ margin-top: 0;
336
846
  }
337
847
 
338
- .nav-section details > summary::-webkit-details-marker {
339
- display: none;
848
+ nav .nav-section-collapsible > .nav-list {
849
+ padding-left: var(--space-5);
850
+ border-left: 1px solid var(--color-border-subtle);
851
+ margin-left: 9px; /* Align with the section icon center */
340
852
  }
341
853
 
342
- .nav-section details > summary::before {
343
- content: "";
854
+ nav .nav-section-collapsible .nav-list .link-list {
855
+ border-left: none;
856
+ margin-left: 0;
857
+ padding-left: var(--space-5);
344
858
  }
345
859
 
346
- .nav-section details > summary::after {
347
- content: "\25B6"; /* BLACK RIGHT-POINTING TRIANGLE */
348
- font-size: 0.8em;
349
- margin-left: 0.4em;
860
+ /*
861
+ Improve chevron styling for details under link-list, using SVG chevron that matches nav-section-chevron
862
+ We need to avoid adding the element in class content generation so it doesn't break darkfish styles
863
+ */
864
+ nav li details:has(.link-list) > summary {
865
+ display: inline-flex;
866
+ align-items: center;
867
+ gap: var(--space-2);
868
+ cursor: pointer;
350
869
  }
351
870
 
352
- .nav-section details[open] > summary::after {
353
- content: "\25BD"; /* WHITE DOWN-POINTING TRIANGLE */
871
+ nav li details:has(.link-list) > summary::after {
872
+ content: '';
873
+ position: static;
874
+ display: inline-block;
875
+ width: 1rem;
876
+ height: 1rem;
877
+ flex-shrink: 0;
878
+ margin-left: 0;
879
+ background-color: var(--color-text-secondary);
880
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E");
881
+ mask-size: contain;
882
+ mask-repeat: no-repeat;
883
+ mask-position: center;
884
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E");
885
+ -webkit-mask-size: contain;
886
+ -webkit-mask-repeat: no-repeat;
887
+ -webkit-mask-position: center;
888
+ transition: transform var(--transition-base), background-color var(--transition-fast);
354
889
  }
355
890
 
356
- /* @end */
357
-
358
- /* @group Documentation Section */
359
- main {
360
- color: #333;
891
+ nav li details:has(.link-list) > summary:hover::after {
892
+ background-color: var(--color-accent-primary);
361
893
  }
362
894
 
363
- main > h1:first-child,
364
- main > h2:first-child,
365
- main > h3:first-child,
366
- main > h4:first-child,
367
- main > h5:first-child,
368
- main > h6:first-child {
369
- margin-top: 0px;
895
+ nav li details:has(.link-list)[open] > summary::after {
896
+ transform: rotate(90deg);
897
+ background-color: var(--color-accent-primary);
370
898
  }
371
899
 
372
- main sup {
373
- vertical-align: super;
374
- font-size: 0.8em;
900
+ /* 8. Main Content (Center Column) */
901
+ main {
902
+ grid-area: main;
903
+ width: 100%;
904
+ max-width: var(--layout-content-max-width);
905
+ margin: 0 auto;
906
+ padding: var(--space-12) var(--space-8);
907
+ font-size: var(--font-size-base);
908
+ line-height: var(--line-height-relaxed);
909
+ color: var(--color-text-primary);
910
+ box-sizing: border-box;
911
+ }
912
+
913
+ /* Desktop: hide hamburger */
914
+ @media (width >= 1024px) {
915
+ #navigation-toggle {
916
+ display: none;
917
+ }
918
+ }
919
+
920
+ /* Mobile: full width with padding */
921
+ @media (width <= 1023px) {
922
+ main {
923
+ padding: var(--space-6) var(--space-4);
924
+ padding-top: var(--space-8);
925
+ width: 100%;
926
+ }
927
+
928
+ footer.site-footer {
929
+ padding: var(--space-8) var(--space-4);
930
+ }
931
+
932
+ footer.site-footer .footer-content {
933
+ grid-template-columns: 1fr;
934
+ gap: var(--space-6);
935
+ }
375
936
  }
376
937
 
377
- /* The heading with the class name */
378
938
  main h1[class] {
379
939
  margin-top: 0;
380
940
  margin-bottom: 1em;
381
- font-size: 2em;
382
- color: #6C8C22;
941
+ font-size: 2.5em;
942
+ color: var(--color-accent-primary);
383
943
  }
384
944
 
945
+ main h1,
946
+ main h2,
947
+ main h3,
948
+ main h4,
949
+ main h5,
950
+ main h6 {
951
+ font-family: var(--font-heading);
952
+ color: var(--color-accent-primary);
953
+ scroll-margin-top: calc(var(--layout-header-height) + 2rem);
954
+ }
955
+
956
+ /* Heading size hierarchy */
385
957
  main h1 {
386
- margin: 2em 0 0.5em;
387
- font-size: 1.7em;
958
+ font-size: var(--font-size-3xl);
959
+ font-weight: var(--font-weight-bold);
960
+ margin-bottom: var(--space-4);
961
+ line-height: var(--line-height-tight);
388
962
  }
389
963
 
390
964
  main h2 {
391
- margin: 2em 0 0.5em;
392
- font-size: 1.5em;
965
+ font-size: var(--font-size-2xl);
966
+ font-weight: var(--font-weight-semibold);
967
+ margin-top: var(--space-8);
968
+ margin-bottom: var(--space-4);
969
+ line-height: var(--line-height-tight);
393
970
  }
394
971
 
395
972
  main h3 {
396
- margin: 2em 0 0.5em;
397
- font-size: 1.2em;
973
+ font-size: var(--font-size-xl);
974
+ font-weight: var(--font-weight-semibold);
975
+ margin-top: var(--space-6);
976
+ margin-bottom: var(--space-3);
977
+ line-height: var(--line-height-tight);
398
978
  }
399
979
 
400
980
  main h4 {
401
- margin: 2em 0 0.5em;
402
- font-size: 1.1em;
981
+ font-size: var(--font-size-lg);
982
+ font-weight: var(--font-weight-medium);
983
+ margin-top: var(--space-4);
984
+ margin-bottom: var(--space-2);
985
+ }
986
+
987
+ main h5, main h6 {
988
+ font-size: var(--font-size-base);
989
+ font-weight: var(--font-weight-medium);
990
+ margin-top: var(--space-3);
991
+ margin-bottom: var(--space-2);
992
+ }
993
+
994
+ /* Heading links */
995
+ main h1 a,
996
+ main h2 a,
997
+ main h3 a,
998
+ main h4 a,
999
+ main h5 a,
1000
+ main h6 a {
1001
+ color: inherit;
1002
+ text-decoration: none;
403
1003
  }
404
1004
 
405
- main h5 {
406
- margin: 2em 0 0.5em;
407
- font-size: 1em;
1005
+ main h1 a:hover,
1006
+ main h2 a:hover,
1007
+ main h3 a:hover,
1008
+ main h4 a:hover,
1009
+ main h5 a:hover,
1010
+ main h6 a:hover {
1011
+ text-decoration: underline;
408
1012
  }
409
1013
 
410
- main h6 {
411
- margin: 2em 0 0.5em;
412
- font-size: 1em;
1014
+ /* Syntax Highlighting - Light Theme */
1015
+ .ruby-constant { color: var(--code-orange); }
1016
+ .ruby-keyword { color: var(--code-red); }
1017
+ .ruby-ivar { color: var(--code-orange); }
1018
+ .ruby-operator { color: var(--code-green); }
1019
+ .ruby-identifier { color: var(--code-blue); }
1020
+ .ruby-node { color: var(--code-purple); }
1021
+
1022
+ .ruby-comment {
1023
+ color: var(--color-neutral-500);
1024
+ font-style: italic;
1025
+ }
1026
+ .ruby-regexp { color: var(--code-purple); }
1027
+ .ruby-value { color: var(--code-orange); }
1028
+ .ruby-string { color: var(--code-green); }
1029
+
1030
+ /* Syntax Highlighting - Dark Theme */
1031
+ [data-theme="dark"] .ruby-constant { color: var(--code-orange); }
1032
+ [data-theme="dark"] .ruby-keyword { color: var(--code-red); }
1033
+ [data-theme="dark"] .ruby-ivar { color: var(--code-orange); }
1034
+ [data-theme="dark"] .ruby-operator { color: var(--code-green); }
1035
+ [data-theme="dark"] .ruby-identifier { color: var(--code-blue); }
1036
+ [data-theme="dark"] .ruby-node { color: var(--code-purple); }
1037
+
1038
+ [data-theme="dark"] .ruby-comment {
1039
+ color: var(--color-neutral-400);
1040
+ font-style: italic;
1041
+ }
1042
+ [data-theme="dark"] .ruby-regexp { color: var(--code-purple); }
1043
+ [data-theme="dark"] .ruby-value { color: var(--code-orange); }
1044
+ [data-theme="dark"] .ruby-string { color: var(--code-green); }
1045
+
1046
+ /* C Syntax Highlighting */
1047
+ .c-keyword { color: var(--code-red); }
1048
+ .c-type { color: var(--code-cyan); }
1049
+ .c-macro { color: var(--code-orange); }
1050
+ .c-function { color: var(--code-purple); }
1051
+ .c-identifier { color: var(--color-text-secondary); }
1052
+ .c-operator { color: var(--code-green); }
1053
+ .c-preprocessor { color: var(--code-purple); }
1054
+ .c-value { color: var(--code-orange); }
1055
+ .c-string { color: var(--code-green); }
1056
+
1057
+ .c-comment {
1058
+ color: var(--code-gray);
1059
+ font-style: italic;
1060
+ }
1061
+
1062
+ /* Shell Syntax Highlighting */
1063
+ .sh-prompt { color: var(--code-gray); }
1064
+ .sh-command { color: var(--code-blue); }
1065
+ .sh-option { color: var(--code-cyan); }
1066
+ .sh-string { color: var(--code-green); }
1067
+ .sh-envvar { color: var(--code-purple); }
1068
+
1069
+ .sh-comment {
1070
+ color: var(--code-gray);
1071
+ font-style: italic;
1072
+ }
1073
+
1074
+ /* Emphasis */
1075
+ em {
1076
+ text-decoration-color: var(--color-emphasis-decoration);
1077
+ text-decoration-line: underline;
1078
+ text-decoration-style: dotted;
1079
+ }
1080
+
1081
+ strong,
1082
+ em {
1083
+ color: var(--color-accent-primary);
1084
+ background-color: var(--color-emphasis-bg);
413
1085
  }
414
1086
 
1087
+ /* Paragraphs */
415
1088
  main p {
416
- margin: 0 0 0.5em;
417
- line-height: 1.4em;
1089
+ line-height: var(--line-height-relaxed);
1090
+ font-weight: 400;
1091
+ margin-bottom: var(--space-4);
418
1092
  }
419
1093
 
1094
+ /* Preformatted Text */
420
1095
  main pre {
421
1096
  margin: 1.2em 0.5em;
422
1097
  padding: 1em;
423
1098
  font-size: 0.8em;
424
1099
  }
425
1100
 
1101
+ .code-block-wrapper pre {
1102
+ margin: 0;
1103
+ }
1104
+
1105
+ /* Horizontal Rules */
426
1106
  main hr {
427
1107
  margin: 1.5em 1em;
428
- border: 2px solid #ddd;
1108
+ border: 2px solid var(--color-border-default);
429
1109
  }
430
1110
 
1111
+ /* Blockquotes */
431
1112
  main blockquote {
432
1113
  margin: 0 2em 1.2em 1.2em;
433
1114
  padding-left: 0.5em;
434
- border-left: 2px solid #ddd;
435
- }
436
-
437
- main ol,
438
- main ul {
439
- margin: 1em 2em;
1115
+ border-left: 2px solid var(--color-border-default);
440
1116
  }
441
1117
 
1118
+ /* Lists */
442
1119
  main li > p {
443
- margin-bottom: 0.5em;
1120
+ margin: 0.5em;
444
1121
  }
445
1122
 
1123
+ /* Definition Lists */
446
1124
  main dl {
447
1125
  margin: 1em 0.5em;
448
1126
  }
449
1127
 
450
1128
  main dt {
451
- margin-bottom: 0.5em;
1129
+ line-height: 1.5;
452
1130
  font-weight: bold;
453
1131
  }
454
1132
 
1133
+ main dl.note-list dt {
1134
+ margin-right: 1em;
1135
+ float: left;
1136
+ }
1137
+
1138
+ main dl.note-list dt:has(+ dt) {
1139
+ margin-right: 0.25em;
1140
+ }
1141
+
1142
+ main dl.note-list dt:has(+ dt)::after {
1143
+ content: ', ';
1144
+ font-weight: normal;
1145
+ }
1146
+
455
1147
  main dd {
456
- margin: 0 1em 1em 0.5em;
1148
+ margin: 0 0 1em 1em;
457
1149
  }
458
1150
 
1151
+ main dd p:first-child {
1152
+ margin-top: 0;
1153
+ }
1154
+
1155
+ /* Headers within Main */
459
1156
  main header h2 {
460
1157
  margin-top: 2em;
461
1158
  border-width: 0;
462
- border-top: 4px solid #bbb;
1159
+ border-top: 4px solid var(--color-border-default);
463
1160
  font-size: 130%;
464
1161
  }
465
1162
 
466
1163
  main header h3 {
467
1164
  margin: 2em 0 1.5em;
468
1165
  border-width: 0;
469
- border-top: 3px solid #bbb;
1166
+ border-top: 3px solid var(--color-border-default);
470
1167
  font-size: 120%;
471
1168
  }
472
1169
 
473
- .documentation-section-title {
474
- position: relative;
1170
+ h1:target,
1171
+ h2:target,
1172
+ h3:target,
1173
+ h4:target,
1174
+ h5:target,
1175
+ h6:target {
1176
+ margin-left: calc(-1 * var(--space-5));
1177
+ padding-left: calc(var(--space-5) / 2);
1178
+ border-left: calc(var(--space-5) / 2) solid var(--color-border-default);
475
1179
  }
476
- .documentation-section-title .section-click-top {
477
- position: absolute;
478
- top: 6px;
479
- left: 12px;
480
- font-size: 10px;
481
- color: #9b9877;
482
- visibility: hidden;
483
- padding-left: 0.5px;
1180
+
1181
+ main .anchor-link:target {
1182
+ scroll-margin-top: calc(var(--layout-header-height) + 2rem);
484
1183
  }
485
1184
 
486
- .documentation-section-title:hover .section-click-top {
487
- visibility: visible;
1185
+ /* Legacy anchor for backward compatibility with old label- prefix links */
1186
+ .legacy-anchor {
1187
+ display: block;
1188
+ position: relative;
1189
+ visibility: hidden;
1190
+ scroll-margin-top: calc(var(--layout-header-height) + 2rem);
488
1191
  }
489
1192
 
490
- .constants-list > dl {
491
- margin: 1em 0 2em;
492
- border: 0;
1193
+ /* When a legacy anchor is targeted, highlight the next heading sibling */
1194
+ .legacy-anchor:target + h1,
1195
+ .legacy-anchor:target + h2,
1196
+ .legacy-anchor:target + h3,
1197
+ .legacy-anchor:target + h4,
1198
+ .legacy-anchor:target + h5,
1199
+ .legacy-anchor:target + h6 {
1200
+ margin-left: calc(-1 * var(--space-5));
1201
+ padding-left: calc(var(--space-5) / 2);
1202
+ border-left: calc(var(--space-5) / 2) solid var(--color-border-default);
493
1203
  }
494
1204
 
495
- .constants-list > dl dt {
496
- margin-bottom: 0.75em;
497
- padding-left: 0;
498
- font-family: "Source Code Pro", Monaco, monospace;
499
- font-size: 110%;
1205
+
1206
+ /* Utility Classes */
1207
+ .hide { display: none !important; }
1208
+ .initially-hidden { display: none; }
1209
+
1210
+ /* Screen reader only */
1211
+ .sr-only {
1212
+ position: absolute;
1213
+ width: 1px;
1214
+ height: 1px;
1215
+ padding: 0;
1216
+ margin: -1px;
1217
+ overflow: hidden;
1218
+ clip-path: inset(50%);
1219
+ white-space: nowrap;
1220
+ border-width: 0;
500
1221
  }
501
1222
 
502
- .constants-list > dl dt a {
503
- color: inherit;
1223
+
1224
+
1225
+ /* Method Details */
1226
+ main .method-source-code {
1227
+ visibility: hidden;
1228
+ max-height: 0;
1229
+ overflow: hidden;
1230
+ opacity: 0;
1231
+ transform: translateY(-8px);
1232
+ transition:
1233
+ max-height var(--duration-medium) var(--ease-out-smooth),
1234
+ visibility var(--duration-medium),
1235
+ opacity var(--duration-fast) ease-out,
1236
+ transform var(--duration-fast) ease-out;
504
1237
  }
505
1238
 
506
- .constants-list > dl dd {
507
- margin: 0 0 2em 0;
508
- padding: 0;
509
- color: #666;
1239
+ main .method-source-code pre {
1240
+ border-color: var(--color-accent-hover);
1241
+ border-left: 3px solid var(--color-accent-primary);
1242
+ width: 100%;
1243
+ box-sizing: border-box;
1244
+ transition: border-color var(--transition-fast);
1245
+ scrollbar-width: thin;
1246
+ scrollbar-color: var(--color-border-default) transparent;
510
1247
  }
511
1248
 
512
- .documentation-section h2 {
513
- position: relative;
1249
+ main .method-source-code pre::-webkit-scrollbar {
1250
+ width: 6px;
1251
+ height: 6px;
514
1252
  }
515
1253
 
516
- .documentation-section h2 a {
517
- position: absolute;
518
- top: 8px;
519
- right: 10px;
520
- font-size: 12px;
521
- color: #9b9877;
522
- visibility: hidden;
1254
+ main .method-source-code pre::-webkit-scrollbar-track {
1255
+ background: transparent;
523
1256
  }
524
1257
 
525
- .documentation-section h2:hover a {
526
- visibility: visible;
1258
+ main .method-source-code pre::-webkit-scrollbar-thumb {
1259
+ background: var(--color-border-default);
1260
+ border-radius: var(--radius-sm);
527
1261
  }
528
1262
 
529
- /* @group Method Details */
1263
+ main .method-source-code pre::-webkit-scrollbar-thumb:hover {
1264
+ background: var(--color-border-emphasis);
1265
+ }
530
1266
 
531
- main .method-source-code {
532
- max-height: 0;
533
- overflow: auto;
534
- transition-duration: 200ms;
535
- transition-delay: 0ms;
536
- transition-property: all;
537
- transition-timing-function: ease-in-out;
1267
+ main .method-source-code pre::-webkit-scrollbar-corner {
1268
+ background: transparent;
538
1269
  }
539
1270
 
540
1271
  main .method-source-code.active-menu {
1272
+ visibility: visible;
541
1273
  max-height: 100vh;
1274
+ overflow: auto;
1275
+ opacity: 1;
1276
+ transform: translateY(0);
542
1277
  }
543
1278
 
544
1279
  main .method-description .method-calls-super {
545
- color: #333;
1280
+ color: var(--color-text-primary);
546
1281
  font-weight: bold;
547
1282
  }
548
1283
 
549
1284
  main .method-detail {
550
1285
  margin-bottom: 2.5em;
551
- cursor: pointer;
552
1286
  }
553
1287
 
554
1288
  main .method-detail:target {
555
- margin-left: -10px;
556
- border-left: 10px solid #f1edba;
1289
+ margin-left: calc(-1 * var(--space-5));
1290
+ padding-left: calc(var(--space-5) / 2);
1291
+ border-left: calc(var(--space-5) / 2) solid var(--color-border-default);
1292
+ }
1293
+
1294
+ main .method-header {
1295
+ display: inline-block;
1296
+ max-width: calc(100% - 6em); /* 6em is the width of the source code toggle */
557
1297
  }
558
1298
 
559
1299
  main .method-heading {
560
1300
  position: relative;
561
- font-family: "Source Code Pro", Monaco, monospace;
562
- font-size: 110%;
563
- font-weight: bold;
564
- color: #333;
1301
+ font-family: var(--font-code);
1302
+ font-size: var(--font-size-lg);
1303
+ font-weight: var(--font-weight-semibold);
1304
+ margin-bottom: var(--space-3);
565
1305
  }
566
- main .method-heading :link,
567
- main .method-heading :visited {
568
- color: inherit;
1306
+
1307
+ main .method-heading .method-name {
1308
+ font-weight: var(--font-weight-semibold);
569
1309
  }
570
- main .method-click-advice {
571
- position: absolute;
572
- top: 2px;
573
- right: 5px;
574
- font-size: 12px;
575
- color: #9b9877;
576
- visibility: hidden;
577
- padding-right: 20px;
1310
+
1311
+ main .method-heading .method-args {
1312
+ font-weight: var(--font-weight-normal);
1313
+ }
1314
+
1315
+ main .method-controls {
1316
+ float: right;
1317
+ }
1318
+
1319
+ main .method-controls summary {
1320
+ display: inline-block;
578
1321
  line-height: 20px;
579
- background: url(../images/zoom.png) no-repeat right top;
1322
+ color: var(--color-accent-primary);
1323
+ cursor: pointer;
1324
+ padding: var(--space-1) var(--space-3);
1325
+ border-radius: var(--radius-sm);
1326
+ font-size: var(--font-size-sm);
1327
+ font-weight: var(--font-weight-medium);
1328
+ background: var(--color-accent-subtle);
1329
+ border: 1px solid transparent;
1330
+ transition:
1331
+ color var(--transition-fast),
1332
+ background var(--transition-fast),
1333
+ border-color var(--transition-fast),
1334
+ transform var(--transition-fast);
1335
+ user-select: none;
1336
+ -webkit-user-select: none;
1337
+ list-style: none;
580
1338
  }
581
- main .method-header:hover .method-click-advice {
582
- visibility: visible;
1339
+
1340
+ main .method-controls summary::-webkit-details-marker {
1341
+ display: none;
583
1342
  }
584
1343
 
585
- main .method-alias .method-heading {
586
- color: #666;
1344
+ main .method-controls summary:hover {
1345
+ background: var(--color-primary-100);
1346
+ border-color: var(--color-primary-300);
1347
+ transform: translateY(-1px);
1348
+ }
1349
+
1350
+ main .method-controls summary:active {
1351
+ transform: scale(0.96);
1352
+ }
1353
+
1354
+ [data-theme="dark"] main .method-controls summary:hover {
1355
+ background: var(--color-accent-subtle-hover);
1356
+ border-color: var(--color-primary-500);
587
1357
  }
588
1358
 
589
1359
  main .method-description,
590
1360
  main .aliases {
591
1361
  margin-top: 0.75em;
592
- color: #333;
1362
+ color: var(--color-text-primary);
593
1363
  }
594
1364
 
595
1365
  main .aliases {
@@ -597,6 +1367,17 @@ main .aliases {
597
1367
  font-style: italic;
598
1368
  cursor: default;
599
1369
  }
1370
+
1371
+ main .aliases a {
1372
+ color: var(--color-accent-hover);
1373
+ }
1374
+
1375
+ main .mixin-from {
1376
+ font-size: 80%;
1377
+ font-style: italic;
1378
+ margin-bottom: 0.75em;
1379
+ }
1380
+
600
1381
  main .method-description ul {
601
1382
  margin-left: 1.5em;
602
1383
  }
@@ -605,83 +1386,570 @@ main #attribute-method-details .method-detail:hover {
605
1386
  background-color: transparent;
606
1387
  cursor: default;
607
1388
  }
1389
+
608
1390
  main .attribute-access-type {
609
1391
  text-transform: uppercase;
610
- padding: 0 1em;
611
1392
  }
612
- /* @end */
613
1393
 
614
- /* @end */
1394
+ /* Small screen adjustments */
1395
+ @media (width <= 480px) {
1396
+ nav {
1397
+ width: 85%;
1398
+ max-width: 320px;
1399
+ }
615
1400
 
616
- /* @group Source Code */
1401
+ main {
1402
+ margin: 0;
1403
+ padding: var(--space-4);
1404
+ max-width: 100%;
1405
+ }
617
1406
 
618
- pre {
619
- margin: 0.5em 0;
620
- border: 1px dashed #999;
621
- padding: 0.5em;
622
- background: #262626;
623
- color: white;
624
- overflow: auto;
1407
+ table {
1408
+ display: block;
1409
+ overflow-x: auto;
1410
+ white-space: nowrap;
1411
+ }
1412
+
1413
+ main .method-controls {
1414
+ margin-top: 10px;
1415
+ float: none;
1416
+ }
625
1417
  }
626
1418
 
627
- .ruby-constant { color: #7fffd4; background: transparent; }
628
- .ruby-keyword { color: #00ffff; background: transparent; }
629
- .ruby-ivar { color: #eedd82; background: transparent; }
630
- .ruby-operator { color: #00ffee; background: transparent; }
631
- .ruby-identifier { color: #ffdead; background: transparent; }
632
- .ruby-node { color: #ffa07a; background: transparent; }
633
- .ruby-comment { color: #dc0000; background: transparent; }
634
- .ruby-regexp { color: #ffa07a; background: transparent; }
635
- .ruby-value { color: #7fffd4; background: transparent; }
636
1419
 
637
- /* @end */
638
1420
 
1421
+ /* 9. Search Modal (Mobile) */
1422
+ .search-modal {
1423
+ position: fixed;
1424
+ inset: 0;
1425
+ z-index: var(--z-modal);
1426
+ display: none;
1427
+ }
1428
+
1429
+ .search-modal:not([hidden]) {
1430
+ display: flex;
1431
+ align-items: flex-start;
1432
+ justify-content: center;
1433
+ padding: var(--space-16) var(--space-4);
1434
+ }
1435
+
1436
+ /* Reduce padding on very small screens */
1437
+ @media (width <= 420px) {
1438
+ .search-modal:not([hidden]) {
1439
+ padding: var(--space-4) var(--space-3);
1440
+ }
1441
+
1442
+ .search-modal-content {
1443
+ border-radius: var(--radius-md);
1444
+ }
1445
+
1446
+ .search-modal-header {
1447
+ padding: var(--space-3);
1448
+ }
1449
+
1450
+ .search-modal-body {
1451
+ padding: var(--space-3);
1452
+ }
1453
+
1454
+ .search-modal-form input {
1455
+ font-size: var(--font-size-base);
1456
+ min-width: 0; /* Allow input to shrink */
1457
+ }
1458
+
1459
+ .search-modal-form {
1460
+ gap: var(--space-2);
1461
+ }
1462
+
1463
+ .search-modal-close {
1464
+ padding: var(--space-1) var(--space-3);
1465
+ font-size: 0.75rem;
1466
+ }
1467
+ }
1468
+
1469
+ .search-modal-backdrop {
1470
+ position: absolute;
1471
+ inset: 0;
1472
+ background: var(--color-overlay);
1473
+ z-index: 1;
1474
+ }
1475
+
1476
+ .search-modal-content {
1477
+ position: relative;
1478
+ z-index: 2;
1479
+ background: var(--color-background-primary);
1480
+ border-radius: var(--radius-lg);
1481
+ box-shadow: var(--shadow-xl);
1482
+ width: 100%;
1483
+ max-width: 600px;
1484
+ max-height: 80vh;
1485
+ display: flex;
1486
+ flex-direction: column;
1487
+ }
1488
+
1489
+ .search-modal-header {
1490
+ padding: var(--space-6);
1491
+ border-bottom: 1px solid var(--color-border-default);
1492
+ }
1493
+
1494
+ .search-modal-form {
1495
+ display: flex;
1496
+ align-items: center;
1497
+ gap: var(--space-3);
1498
+ }
1499
+
1500
+ .search-modal-icon {
1501
+ font-size: 1.5rem;
1502
+ color: var(--color-text-secondary);
1503
+ flex-shrink: 0;
1504
+ }
1505
+
1506
+ .search-modal-form input {
1507
+ flex: 1;
1508
+ border: none;
1509
+ outline: none;
1510
+ background: transparent;
1511
+ font-size: var(--font-size-lg);
1512
+ color: var(--color-text-primary);
1513
+ padding: 0;
1514
+ }
1515
+
1516
+ .search-modal-form input::placeholder {
1517
+ color: var(--color-text-tertiary);
1518
+ }
1519
+
1520
+ .search-modal-close {
1521
+ padding: var(--space-2) var(--space-4);
1522
+ background: var(--color-background-secondary);
1523
+ border: 1px solid var(--color-border-default);
1524
+ border-radius: var(--radius-md);
1525
+ font-size: var(--font-size-sm);
1526
+ color: var(--color-text-secondary);
1527
+ cursor: pointer;
1528
+ transition: background var(--transition-fast), border-color var(--transition-fast);
1529
+ flex-shrink: 0;
1530
+ }
1531
+
1532
+ .search-modal-close:hover {
1533
+ background: var(--color-background-tertiary);
1534
+ border-color: var(--color-border-default);
1535
+ }
1536
+
1537
+ .search-modal-body {
1538
+ padding: var(--space-6);
1539
+ overflow-y: auto;
1540
+ flex: 1;
1541
+ }
1542
+
1543
+ .search-modal-empty {
1544
+ text-align: center;
1545
+ color: var(--color-text-tertiary);
1546
+ padding: var(--space-12) 0;
1547
+ }
1548
+
1549
+ .search-modal-results {
1550
+ list-style: none;
1551
+ margin: 0;
1552
+ padding: 0;
1553
+ }
1554
+
1555
+ .search-modal-results.initially-hidden {
1556
+ display: block !important; /* Override initially-hidden */
1557
+ }
1558
+
1559
+ .search-modal-results li {
1560
+ padding: var(--space-3) var(--space-4);
1561
+ border-radius: var(--radius-md);
1562
+ cursor: pointer;
1563
+ transition: background var(--transition-fast);
1564
+ margin-bottom: var(--space-2);
1565
+ }
1566
+
1567
+ .search-modal-results li:hover {
1568
+ background: var(--color-background-secondary);
1569
+ }
1570
+
1571
+ .search-modal-results a {
1572
+ color: var(--color-text-primary);
1573
+ }
1574
+
1575
+ .search-modal-results .search-match {
1576
+ margin: 0;
1577
+ font-size: var(--font-size-base);
1578
+ }
1579
+
1580
+ .search-modal-results .search-match a {
1581
+ text-decoration: none;
1582
+ }
1583
+
1584
+ .search-modal-results .search-namespace {
1585
+ margin: var(--space-1) 0 0 0;
1586
+ font-size: var(--font-size-sm);
1587
+ color: var(--color-text-secondary);
1588
+ }
1589
+
1590
+ .search-modal-results .search-snippet {
1591
+ margin: var(--space-1) 0 0 0;
1592
+ font-size: var(--font-size-sm);
1593
+ color: var(--color-text-tertiary);
1594
+ }
1595
+
1596
+ /* 10. Right Sidebar - Table of Contents */
1597
+ aside.table-of-contents {
1598
+ grid-area: toc;
1599
+ align-self: start;
1600
+ position: sticky;
1601
+ top: var(--layout-header-height);
1602
+ padding: var(--space-8) var(--space-6);
1603
+ border: none;
1604
+ border-left: 1px solid var(--color-border-default);
1605
+ font-size: var(--font-size-base);
1606
+ }
1607
+
1608
+ aside.table-of-contents * {
1609
+ border-right: none !important;
1610
+ outline: none !important;
1611
+ }
1612
+
1613
+ aside.table-of-contents .toc-sticky {
1614
+ display: flex;
1615
+ flex-direction: column;
1616
+
1617
+ /* Exclude header height and top/bottom padding of aside.table-of-contents */
1618
+ height: calc(100vh - var(--layout-header-height) - var(--space-8) * 2);
1619
+ }
639
1620
 
640
- /* @group search results */
641
- #search-results {
642
- font-family: Lato, sans-serif;
1621
+ aside.table-of-contents .toc-sticky nav {
1622
+ height: auto;
1623
+ }
1624
+
1625
+ aside.table-of-contents .toc-list > .toc-h2 {
1626
+ margin-left: var(--space-4);
1627
+ }
1628
+
1629
+ aside.table-of-contents .toc-list > .toc-h3 {
1630
+ margin-left: var(--space-8);
1631
+ }
1632
+
1633
+ /* Hide TOC on mobile/tablet */
1634
+ @media (width <= 1279px) {
1635
+ aside.table-of-contents {
1636
+ display: none;
1637
+ }
1638
+
1639
+ body.has-toc {
1640
+ grid-template-columns: var(--layout-sidebar-width) 1fr;
1641
+ grid-template-areas:
1642
+ "header header"
1643
+ "nav main"
1644
+ "footer footer";
1645
+ }
1646
+ }
1647
+
1648
+ /* Tablet adjustments (between mobile and desktop) */
1649
+ @media (width >= 768px) and (width <= 1023px) {
1650
+ header.top-navbar {
1651
+ padding: 0 var(--space-6);
1652
+ }
1653
+
1654
+ main {
1655
+ padding: var(--space-8) var(--space-6);
1656
+ max-width: 100%;
1657
+ }
1658
+ }
1659
+
1660
+ .table-of-contents h3 {
1661
+ font-size: var(--font-size-lg);
1662
+ font-weight: var(--font-weight-semibold);
1663
+ margin: 0 0 var(--space-5) 0;
1664
+ color: var(--color-text-primary);
1665
+ }
1666
+
1667
+ .table-of-contents ul {
1668
+ margin: 0;
1669
+ padding: 0;
1670
+ list-style: none;
1671
+ }
1672
+
1673
+ .table-of-contents ul ul {
1674
+ margin-top: var(--space-3);
1675
+ margin-left: var(--space-5);
1676
+ border-left: 1px solid var(--color-border-default);
1677
+ padding-left: var(--space-4);
1678
+ }
1679
+
1680
+ .table-of-contents li {
1681
+ margin-bottom: var(--space-3);
1682
+ }
1683
+
1684
+ .table-of-contents a {
1685
+ display: block;
1686
+ color: var(--color-text-secondary);
1687
+ text-decoration: none;
1688
+ transition: color var(--transition-fast);
1689
+ line-height: var(--line-height-relaxed);
1690
+ overflow-wrap: break-word;
1691
+ hyphens: auto;
1692
+ }
1693
+
1694
+ /* Nav hover styles sit here to keep specificity ordering with TOC links */
1695
+ nav a:hover {
1696
+ color: var(--color-link-hover);
1697
+ text-decoration: underline;
1698
+ }
1699
+
1700
+ .table-of-contents a:hover {
1701
+ color: var(--color-link-hover);
1702
+ }
1703
+
1704
+ .table-of-contents a.active {
1705
+ color: var(--color-accent-primary);
1706
+ font-weight: var(--font-weight-medium);
1707
+ }
1708
+
1709
+ ol.breadcrumb {
1710
+ display: flex;
1711
+ padding: 0;
1712
+ margin: 0 0 1em;
1713
+ }
1714
+
1715
+ ol.breadcrumb li {
1716
+ display: block;
1717
+ list-style: none;
1718
+ font-size: 125%;
1719
+ }
1720
+
1721
+ /* 11. Footer */
1722
+ footer.site-footer {
1723
+ grid-area: footer;
1724
+ background: var(--color-background-secondary);
1725
+ border-top: 1px solid var(--color-border-default);
1726
+ padding: var(--space-12) var(--space-6);
1727
+ }
1728
+
1729
+ footer.site-footer .footer-content {
1730
+ max-width: 1200px;
1731
+ margin: 0 auto;
1732
+ display: grid;
1733
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1734
+ gap: var(--space-8);
1735
+ }
1736
+
1737
+ footer.site-footer h3 {
1738
+ font-size: var(--font-size-sm);
1739
+ font-weight: var(--font-weight-semibold);
1740
+ color: var(--color-text-primary);
1741
+ margin: 0 0 var(--space-4) 0;
1742
+ letter-spacing: 0.05em;
1743
+ }
1744
+
1745
+ footer.site-footer ul {
1746
+ list-style: none;
1747
+ margin: 0;
1748
+ padding: 0;
1749
+ }
1750
+
1751
+ footer.site-footer li {
1752
+ margin-bottom: var(--space-2);
1753
+ }
1754
+
1755
+ footer.site-footer a {
1756
+ color: var(--color-text-secondary);
1757
+ text-decoration: none;
1758
+ font-size: var(--font-size-sm);
1759
+ transition: color var(--transition-fast);
1760
+ }
1761
+
1762
+ footer.site-footer a:hover {
1763
+ color: var(--color-link-hover);
1764
+ }
1765
+
1766
+ footer.site-footer .footer-bottom {
1767
+ margin-top: var(--space-8);
1768
+ padding-top: var(--space-6);
1769
+ border-top: 1px solid var(--color-border-default);
1770
+ text-align: center;
1771
+ font-size: var(--font-size-xs);
1772
+ color: var(--color-text-tertiary);
1773
+ }
1774
+
1775
+ footer.site-footer .footer-bottom:first-child {
1776
+ margin-top: 0;
1777
+ padding-top: 0;
1778
+ border-top: none;
1779
+ }
1780
+
1781
+ /* Search */
1782
+ #search-section {
1783
+ padding: var(--space-6);
1784
+ background-color: var(--color-background-primary);
1785
+ border-bottom: 1px solid var(--color-border-default);
1786
+ }
1787
+
1788
+ #search-field-wrapper {
1789
+ position: relative;
1790
+ display: flex;
1791
+ align-items: center;
1792
+ }
1793
+
1794
+ #search-field {
1795
+ width: 100%;
1796
+ padding: var(--space-2) var(--space-4) var(--space-2) 2.5rem;
1797
+ border: 1px solid var(--color-border-default);
1798
+ border-radius: 1.25rem;
1799
+ font-size: var(--font-size-sm);
1800
+ outline: none;
1801
+ transition: border-color var(--transition-base);
1802
+ color: var(--color-text-primary);
1803
+ }
1804
+
1805
+ #search-field:focus {
1806
+ border-color: var(--color-accent-primary);
1807
+ }
1808
+
1809
+ #search-field::placeholder {
1810
+ color: var(--color-text-primary);
1811
+ }
1812
+
1813
+ #search-field-wrapper::before {
1814
+ content: "\1F50D";
1815
+ position: absolute;
1816
+ left: var(--space-3);
1817
+ top: 50%;
1818
+ transform: translateY(-50%);
1819
+ font-size: var(--font-size-sm);
1820
+ color: var(--color-text-primary);
1821
+ opacity: 0.6;
1822
+ }
1823
+
1824
+ /* Search Results */
1825
+ .search-results {
1826
+ font-family: var(--font-primary);
643
1827
  font-weight: 300;
644
1828
  }
645
1829
 
646
- #search-results .search-match {
647
- font-family: Helvetica, sans-serif;
1830
+ .search-results a {
1831
+ color: var(--color-text-primary);
1832
+ }
1833
+
1834
+ .search-results a:hover {
1835
+ color: var(--color-accent-primary);
1836
+ }
1837
+
1838
+ .search-results .search-match {
1839
+ font-family: var(--font-heading);
648
1840
  font-weight: normal;
649
1841
  }
650
1842
 
651
- #search-results .search-selected {
652
- background: #e8e8e8;
1843
+ .search-results .search-selected {
1844
+ background: var(--color-code-bg);
653
1845
  border-bottom: 1px solid transparent;
654
1846
  }
655
1847
 
656
- #search-results li {
1848
+ .search-results li {
657
1849
  list-style: none;
658
- border-bottom: 1px solid #aaa;
1850
+ border-bottom: 1px solid var(--color-border-default);
659
1851
  margin-bottom: 0.5em;
660
1852
  }
661
1853
 
662
- #search-results li:last-child {
1854
+ .search-results li:last-child {
663
1855
  border-bottom: none;
664
1856
  margin-bottom: 0;
665
1857
  }
666
1858
 
667
- #search-results li p {
1859
+ .search-results li p {
668
1860
  padding: 0;
669
1861
  margin: 0.5em;
670
1862
  }
671
1863
 
672
- #search-results .search-namespace {
1864
+ .search-results .search-namespace {
673
1865
  font-weight: bold;
674
1866
  }
675
1867
 
676
- #search-results li em {
677
- background: yellow;
1868
+ .search-results .search-type {
1869
+ display: inline-block;
1870
+ margin-left: var(--space-2);
1871
+ padding: 0 var(--space-2);
1872
+ font-size: var(--font-size-xs);
1873
+ font-weight: 500;
1874
+ border-radius: var(--radius-sm);
1875
+ vertical-align: middle;
1876
+ background: var(--color-background-tertiary);
1877
+ color: var(--color-text-secondary);
1878
+ }
1879
+
1880
+ .search-results .search-type-class {
1881
+ background: var(--color-search-type-class-bg);
1882
+ color: var(--color-search-type-class-text);
1883
+ }
1884
+
1885
+ .search-results .search-type-module {
1886
+ background: var(--color-search-type-module-bg);
1887
+ color: var(--color-search-type-module-text);
1888
+ }
1889
+
1890
+ .search-results .search-type-constant {
1891
+ background: var(--color-search-type-constant-bg);
1892
+ color: var(--color-search-type-constant-text);
1893
+ }
1894
+
1895
+ .search-results .search-type-instance-method,
1896
+ .search-results .search-type-class-method {
1897
+ background: var(--color-search-type-method-bg);
1898
+ color: var(--color-search-type-method-text);
1899
+ }
1900
+
1901
+ .search-results li em {
1902
+ background-color: var(--color-search-highlight-bg);
678
1903
  font-style: normal;
679
1904
  }
680
1905
 
681
- #search-results pre {
1906
+ .search-results pre {
682
1907
  margin: 0.5em;
683
- font-family: "Source Code Pro", Monaco, monospace;
1908
+ font-family: var(--font-code);
684
1909
  }
685
1910
 
686
- /* @end */
1911
+ header.top-navbar #search-field {
1912
+ width: 100%;
1913
+ padding: var(--space-2) var(--space-4);
1914
+ border: 1px solid var(--color-border-default);
1915
+ border-radius: var(--radius-md);
1916
+ font-size: var(--font-size-base);
1917
+ background: var(--color-background-primary);
1918
+ color: var(--color-text-primary);
1919
+ transition: border-color var(--transition-fast);
1920
+ }
687
1921
 
1922
+ header.top-navbar #search-field:focus {
1923
+ outline: none;
1924
+ border-color: var(--color-accent-primary);
1925
+ box-shadow: 0 0 0 3px var(--color-accent-subtle);
1926
+ }
1927
+
1928
+ header.top-navbar #search-field::placeholder {
1929
+ color: var(--color-text-tertiary);
1930
+ }
1931
+
1932
+ /* Search results dropdown in navbar */
1933
+ header.top-navbar #search-results-desktop {
1934
+ position: absolute;
1935
+ top: calc(100% + var(--space-2));
1936
+ left: 0;
1937
+ width: var(--layout-search-width);
1938
+ max-height: 60vh;
1939
+ background: var(--color-background-primary);
1940
+ border: 1px solid var(--color-border-default);
1941
+ border-radius: var(--radius-lg);
1942
+ box-shadow: var(--shadow-lg);
1943
+ overflow-y: auto;
1944
+ z-index: var(--z-popover);
1945
+ margin: 0;
1946
+ padding: 0;
1947
+ }
1948
+
1949
+ header.top-navbar #search-results-desktop.initially-hidden {
1950
+ display: none;
1951
+ }
1952
+
1953
+ header.top-navbar #search-results-desktop[aria-expanded="false"] {
1954
+ display: none;
1955
+ }