rubyXL 3.4.25 → 3.4.38

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 (479) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +24 -13
  3. data/.rubocop.yml +124 -0
  4. data/CHANGELOG.md +12 -0
  5. data/Gemfile +4 -2
  6. data/README.rdoc +24 -8
  7. data/VERSION +1 -1
  8. data/lib/rubyXL/convenience_methods/cell.rb +8 -7
  9. data/lib/rubyXL/convenience_methods/color.rb +6 -6
  10. data/lib/rubyXL/convenience_methods/workbook.rb +7 -7
  11. data/lib/rubyXL/convenience_methods/worksheet.rb +26 -6
  12. data/lib/rubyXL/objects/border.rb +6 -1
  13. data/lib/rubyXL/objects/cell_style.rb +1 -0
  14. data/lib/rubyXL/objects/color.rb +1 -1
  15. data/lib/rubyXL/objects/column_range.rb +16 -12
  16. data/lib/rubyXL/objects/document_properties.rb +1 -0
  17. data/lib/rubyXL/objects/external_links.rb +8 -0
  18. data/lib/rubyXL/objects/ooxml_object.rb +21 -17
  19. data/lib/rubyXL/objects/query_table.rb +4 -2
  20. data/lib/rubyXL/objects/reference.rb +56 -20
  21. data/lib/rubyXL/objects/relationships.rb +1 -1
  22. data/lib/rubyXL/objects/root.rb +1 -1
  23. data/lib/rubyXL/objects/shared_strings.rb +1 -1
  24. data/lib/rubyXL/objects/sheet_data.rb +11 -6
  25. data/lib/rubyXL/objects/storage.rb +6 -1
  26. data/lib/rubyXL/objects/stylesheet.rb +2 -3
  27. data/lib/rubyXL/objects/text.rb +3 -3
  28. data/lib/rubyXL/objects/theme.rb +15 -17
  29. data/lib/rubyXL/objects/workbook.rb +17 -9
  30. data/lib/rubyXL/objects/worksheet.rb +2 -2
  31. data/lib/rubyXL/worksheet.rb +11 -3
  32. data/rdoc/README_rdoc.html +536 -147
  33. data/rdoc/RubyXL/AExtension.html +605 -85
  34. data/rdoc/RubyXL/AExtensionStorageArea.html +493 -47
  35. data/rdoc/RubyXL/ActiveX.html +574 -74
  36. data/rdoc/RubyXL/ActiveXBinary.html +503 -49
  37. data/rdoc/RubyXL/AdjustHandleList.html +487 -47
  38. data/rdoc/RubyXL/Alignment.html +487 -47
  39. data/rdoc/RubyXL/AlternateContent.html +493 -47
  40. data/rdoc/RubyXL/AlternateUrls.html +539 -0
  41. data/rdoc/RubyXL/Authors.html +487 -47
  42. data/rdoc/RubyXL/AutoFilter.html +487 -47
  43. data/rdoc/RubyXL/AutoFilterColumn.html +487 -47
  44. data/rdoc/RubyXL/BinaryImageFile.html +510 -50
  45. data/rdoc/RubyXL/BodyProperties.html +487 -47
  46. data/rdoc/RubyXL/BooleanNode.html +493 -47
  47. data/rdoc/RubyXL/BooleanValue.html +493 -47
  48. data/rdoc/RubyXL/Border.html +640 -97
  49. data/rdoc/RubyXL/BorderEdge.html +578 -78
  50. data/rdoc/RubyXL/Borders.html +540 -68
  51. data/rdoc/RubyXL/Break.html +487 -47
  52. data/rdoc/RubyXL/BreakList.html +487 -47
  53. data/rdoc/RubyXL/CT_AdjPoint2D.html +487 -47
  54. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +487 -47
  55. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +487 -47
  56. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +487 -47
  57. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +487 -47
  58. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +487 -47
  59. data/rdoc/RubyXL/CT_Backdrop.html +487 -47
  60. data/rdoc/RubyXL/CT_Bevel.html +487 -47
  61. data/rdoc/RubyXL/CT_BiLevelEffect.html +487 -47
  62. data/rdoc/RubyXL/CT_BlendEffect.html +487 -47
  63. data/rdoc/RubyXL/CT_Blip.html +487 -47
  64. data/rdoc/RubyXL/CT_BlipFillProperties.html +487 -47
  65. data/rdoc/RubyXL/CT_BlurEffect.html +487 -47
  66. data/rdoc/RubyXL/CT_Camera.html +487 -47
  67. data/rdoc/RubyXL/CT_Color.html +487 -47
  68. data/rdoc/RubyXL/CT_ColorChangeEffect.html +487 -47
  69. data/rdoc/RubyXL/CT_ColorMapping.html +487 -47
  70. data/rdoc/RubyXL/CT_ColorScheme.html +487 -47
  71. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +487 -47
  72. data/rdoc/RubyXL/CT_ConnectionSite.html +487 -47
  73. data/rdoc/RubyXL/CT_ConnectionSiteList.html +487 -47
  74. data/rdoc/RubyXL/CT_DashStop.html +487 -47
  75. data/rdoc/RubyXL/CT_DashStopList.html +487 -47
  76. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +487 -47
  77. data/rdoc/RubyXL/CT_DuotoneEffect.html +487 -47
  78. data/rdoc/RubyXL/CT_EffectContainer.html +487 -47
  79. data/rdoc/RubyXL/CT_EffectList.html +487 -47
  80. data/rdoc/RubyXL/CT_EffectReference.html +487 -47
  81. data/rdoc/RubyXL/CT_EffectStyleItem.html +487 -47
  82. data/rdoc/RubyXL/CT_EffectStyleList.html +487 -47
  83. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +487 -47
  84. data/rdoc/RubyXL/CT_FillEffect.html +487 -47
  85. data/rdoc/RubyXL/CT_FillOverlayEffect.html +487 -47
  86. data/rdoc/RubyXL/CT_FillStyleList.html +487 -47
  87. data/rdoc/RubyXL/CT_FlatText.html +487 -47
  88. data/rdoc/RubyXL/CT_FontCollection.html +487 -47
  89. data/rdoc/RubyXL/CT_FontReference.html +487 -47
  90. data/rdoc/RubyXL/CT_GeomGuideList.html +487 -47
  91. data/rdoc/RubyXL/CT_GlowEffect.html +487 -47
  92. data/rdoc/RubyXL/CT_GradientFillProperties.html +487 -47
  93. data/rdoc/RubyXL/CT_GradientStop.html +487 -47
  94. data/rdoc/RubyXL/CT_GradientStopList.html +487 -47
  95. data/rdoc/RubyXL/CT_HSLEffect.html +487 -47
  96. data/rdoc/RubyXL/CT_HslColor.html +487 -47
  97. data/rdoc/RubyXL/CT_Hyperlink.html +487 -47
  98. data/rdoc/RubyXL/CT_InnerShadowEffect.html +487 -47
  99. data/rdoc/RubyXL/CT_LightRig.html +487 -47
  100. data/rdoc/RubyXL/CT_LineEndProperties.html +487 -47
  101. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +487 -47
  102. data/rdoc/RubyXL/CT_LineProperties.html +487 -47
  103. data/rdoc/RubyXL/CT_LineStyleList.html +487 -47
  104. data/rdoc/RubyXL/CT_LinearShadeProperties.html +487 -47
  105. data/rdoc/RubyXL/CT_LuminanceEffect.html +487 -47
  106. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +487 -47
  107. data/rdoc/RubyXL/CT_OuterShadowEffect.html +487 -47
  108. data/rdoc/RubyXL/CT_Path2D.html +487 -47
  109. data/rdoc/RubyXL/CT_Path2DArcTo.html +487 -47
  110. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +487 -47
  111. data/rdoc/RubyXL/CT_Path2DList.html +487 -47
  112. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +487 -47
  113. data/rdoc/RubyXL/CT_Path2DTo.html +487 -47
  114. data/rdoc/RubyXL/CT_PathShadeProperties.html +487 -47
  115. data/rdoc/RubyXL/CT_PatternFillProperties.html +487 -47
  116. data/rdoc/RubyXL/CT_Point3D.html +487 -47
  117. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +487 -47
  118. data/rdoc/RubyXL/CT_PresetColor.html +487 -47
  119. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +487 -47
  120. data/rdoc/RubyXL/CT_PresetShadowEffect.html +487 -47
  121. data/rdoc/RubyXL/CT_PresetTextShape.html +487 -47
  122. data/rdoc/RubyXL/CT_ReflectionEffect.html +487 -47
  123. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +487 -47
  124. data/rdoc/RubyXL/CT_RelativeRect.html +487 -47
  125. data/rdoc/RubyXL/CT_SRgbColor.html +487 -47
  126. data/rdoc/RubyXL/CT_ScRgbColor.html +487 -47
  127. data/rdoc/RubyXL/CT_Scene3D.html +487 -47
  128. data/rdoc/RubyXL/CT_SchemeColor.html +487 -47
  129. data/rdoc/RubyXL/CT_Shape3D.html +487 -47
  130. data/rdoc/RubyXL/CT_ShapeStyle.html +487 -47
  131. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +487 -47
  132. data/rdoc/RubyXL/CT_SphereCoords.html +487 -47
  133. data/rdoc/RubyXL/CT_StretchInfoProperties.html +487 -47
  134. data/rdoc/RubyXL/CT_StyleMatrix.html +487 -47
  135. data/rdoc/RubyXL/CT_StyleMatrixReference.html +487 -47
  136. data/rdoc/RubyXL/CT_SupplementalFont.html +487 -47
  137. data/rdoc/RubyXL/CT_SystemColor.html +487 -47
  138. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +487 -47
  139. data/rdoc/RubyXL/CT_TextBlipBullet.html +487 -47
  140. data/rdoc/RubyXL/CT_TextCharBullet.html +487 -47
  141. data/rdoc/RubyXL/CT_TextCharacterProperties.html +487 -47
  142. data/rdoc/RubyXL/CT_TextFont.html +487 -47
  143. data/rdoc/RubyXL/CT_TextListStyle.html +487 -47
  144. data/rdoc/RubyXL/CT_TextNormalAutofit.html +487 -47
  145. data/rdoc/RubyXL/CT_TextParagraphProperties.html +487 -47
  146. data/rdoc/RubyXL/CT_TextSpacing.html +487 -47
  147. data/rdoc/RubyXL/CT_TextTabStop.html +487 -47
  148. data/rdoc/RubyXL/CT_TextTabStopList.html +487 -47
  149. data/rdoc/RubyXL/CT_TileInfoProperties.html +487 -47
  150. data/rdoc/RubyXL/CT_TintEffect.html +487 -47
  151. data/rdoc/RubyXL/CT_Transform2D.html +487 -47
  152. data/rdoc/RubyXL/CT_TransformEffect.html +487 -47
  153. data/rdoc/RubyXL/CT_Vector3D.html +487 -47
  154. data/rdoc/RubyXL/CT_XYAdjustHandle.html +487 -47
  155. data/rdoc/RubyXL/CalculationChain.html +557 -71
  156. data/rdoc/RubyXL/CalculationChainCell.html +487 -47
  157. data/rdoc/RubyXL/CalculationProperties.html +487 -47
  158. data/rdoc/RubyXL/Cell.html +1033 -200
  159. data/rdoc/RubyXL/CellConvenienceMethods.html +1667 -382
  160. data/rdoc/RubyXL/CellExt.html +487 -47
  161. data/rdoc/RubyXL/CellSmartTag.html +487 -47
  162. data/rdoc/RubyXL/CellSmartTagProperty.html +487 -47
  163. data/rdoc/RubyXL/CellSmartTags.html +487 -47
  164. data/rdoc/RubyXL/CellStyle.html +487 -47
  165. data/rdoc/RubyXL/CellStyleXFs.html +540 -68
  166. data/rdoc/RubyXL/CellStyles.html +540 -68
  167. data/rdoc/RubyXL/CellValue.html +540 -68
  168. data/rdoc/RubyXL/CellWatch.html +487 -47
  169. data/rdoc/RubyXL/CellWatches.html +487 -47
  170. data/rdoc/RubyXL/CellXFs.html +542 -71
  171. data/rdoc/RubyXL/ChartColorsFile.html +510 -50
  172. data/rdoc/RubyXL/ChartFile.html +581 -75
  173. data/rdoc/RubyXL/ChartStyleFile.html +510 -50
  174. data/rdoc/RubyXL/ChartUserShapesFile.html +510 -50
  175. data/rdoc/RubyXL/Chartsheet.html +624 -92
  176. data/rdoc/RubyXL/ChartsheetPageSetup.html +487 -47
  177. data/rdoc/RubyXL/ChartsheetProperties.html +487 -47
  178. data/rdoc/RubyXL/ChartsheetProtection.html +487 -47
  179. data/rdoc/RubyXL/ChartsheetView.html +487 -47
  180. data/rdoc/RubyXL/ChartsheetViews.html +487 -47
  181. data/rdoc/RubyXL/Color.html +550 -70
  182. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +626 -94
  183. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +671 -105
  184. data/rdoc/RubyXL/ColorConvenienceClasses.html +482 -45
  185. data/rdoc/RubyXL/ColorConvenienceMethods.html +534 -65
  186. data/rdoc/RubyXL/ColorFilter.html +487 -47
  187. data/rdoc/RubyXL/ColorScale.html +487 -47
  188. data/rdoc/RubyXL/ColorSet.html +487 -47
  189. data/rdoc/RubyXL/Colors.html +487 -47
  190. data/rdoc/RubyXL/ColumnRange.html +685 -92
  191. data/rdoc/RubyXL/ColumnRanges.html +646 -102
  192. data/rdoc/RubyXL/Comment.html +487 -47
  193. data/rdoc/RubyXL/CommentList.html +487 -47
  194. data/rdoc/RubyXL/CommentsFile.html +570 -76
  195. data/rdoc/RubyXL/ConditionalFormatValue.html +487 -47
  196. data/rdoc/RubyXL/ConditionalFormatting.html +487 -47
  197. data/rdoc/RubyXL/ConditionalFormattingRule.html +487 -47
  198. data/rdoc/RubyXL/Connection.html +487 -47
  199. data/rdoc/RubyXL/ConnectionTable.html +487 -47
  200. data/rdoc/RubyXL/ConnectionTables.html +487 -47
  201. data/rdoc/RubyXL/ConnectionTextField.html +487 -47
  202. data/rdoc/RubyXL/ConnectionTextFields.html +487 -47
  203. data/rdoc/RubyXL/Connections.html +557 -71
  204. data/rdoc/RubyXL/ContentTypeDefault.html +493 -47
  205. data/rdoc/RubyXL/ContentTypeOverride.html +493 -47
  206. data/rdoc/RubyXL/ContentTypes.html +595 -81
  207. data/rdoc/RubyXL/ControlPropertiesFile.html +510 -50
  208. data/rdoc/RubyXL/CorePropertiesFile.html +825 -149
  209. data/rdoc/RubyXL/CustomColor.html +487 -47
  210. data/rdoc/RubyXL/CustomColorList.html +487 -47
  211. data/rdoc/RubyXL/CustomFilter.html +487 -47
  212. data/rdoc/RubyXL/CustomFilters.html +487 -47
  213. data/rdoc/RubyXL/CustomGeometry.html +487 -47
  214. data/rdoc/RubyXL/CustomProperties.html +487 -47
  215. data/rdoc/RubyXL/CustomPropertiesFile.html +510 -50
  216. data/rdoc/RubyXL/CustomProperty.html +487 -47
  217. data/rdoc/RubyXL/CustomPropertyFile.html +510 -50
  218. data/rdoc/RubyXL/CustomSheetView.html +487 -47
  219. data/rdoc/RubyXL/CustomSheetViews.html +487 -47
  220. data/rdoc/RubyXL/CustomWorkbookView.html +487 -47
  221. data/rdoc/RubyXL/CustomWorkbookViews.html +487 -47
  222. data/rdoc/RubyXL/CustomXMLFile.html +503 -49
  223. data/rdoc/RubyXL/DXF.html +487 -47
  224. data/rdoc/RubyXL/DXFs.html +487 -47
  225. data/rdoc/RubyXL/DataBar.html +487 -47
  226. data/rdoc/RubyXL/DataConsolidate.html +487 -47
  227. data/rdoc/RubyXL/DataConsolidationReference.html +487 -47
  228. data/rdoc/RubyXL/DataConsolidationReferences.html +487 -47
  229. data/rdoc/RubyXL/DataType.html +528 -53
  230. data/rdoc/RubyXL/DataValidation.html +487 -47
  231. data/rdoc/RubyXL/DataValidations.html +487 -47
  232. data/rdoc/RubyXL/DateGroupItem.html +487 -47
  233. data/rdoc/RubyXL/DefinedName.html +487 -47
  234. data/rdoc/RubyXL/DefinedNameExt.html +487 -47
  235. data/rdoc/RubyXL/DefinedNames.html +564 -47
  236. data/rdoc/RubyXL/DefinedNamesExt.html +487 -47
  237. data/rdoc/RubyXL/DocumentPropertiesFile.html +603 -86
  238. data/rdoc/RubyXL/DrawingFile.html +581 -75
  239. data/rdoc/RubyXL/DynamicFilter.html +487 -47
  240. data/rdoc/RubyXL/EmbeddedControl.html +487 -47
  241. data/rdoc/RubyXL/EmbeddedControls.html +487 -47
  242. data/rdoc/RubyXL/Extension.html +487 -47
  243. data/rdoc/RubyXL/ExtensionStorageArea.html +487 -47
  244. data/rdoc/RubyXL/Extents.html +487 -47
  245. data/rdoc/RubyXL/ExternalBook.html +487 -47
  246. data/rdoc/RubyXL/ExternalLinksFile.html +581 -75
  247. data/rdoc/RubyXL/ExternalReference.html +487 -47
  248. data/rdoc/RubyXL/ExternalReferences.html +487 -47
  249. data/rdoc/RubyXL/ExtraColorSchemeList.html +487 -47
  250. data/rdoc/RubyXL/FieldItem.html +487 -47
  251. data/rdoc/RubyXL/FileRecoveryProperties.html +487 -47
  252. data/rdoc/RubyXL/FileSharing.html +487 -47
  253. data/rdoc/RubyXL/FileVersion.html +487 -47
  254. data/rdoc/RubyXL/Fill.html +540 -68
  255. data/rdoc/RubyXL/Fills.html +540 -68
  256. data/rdoc/RubyXL/FilterContainer.html +487 -47
  257. data/rdoc/RubyXL/FloatNode.html +493 -47
  258. data/rdoc/RubyXL/FloatValue.html +493 -47
  259. data/rdoc/RubyXL/Font.html +551 -71
  260. data/rdoc/RubyXL/FontConvenienceMethods.html +938 -183
  261. data/rdoc/RubyXL/FontScheme.html +487 -47
  262. data/rdoc/RubyXL/Fonts.html +540 -68
  263. data/rdoc/RubyXL/Formula.html +487 -47
  264. data/rdoc/RubyXL/FunctionGroup.html +487 -47
  265. data/rdoc/RubyXL/FunctionGroups.html +487 -47
  266. data/rdoc/RubyXL/GenericStorageObject.html +671 -103
  267. data/rdoc/RubyXL/GradientFill.html +487 -47
  268. data/rdoc/RubyXL/HeaderFooterSettings.html +487 -47
  269. data/rdoc/RubyXL/Hyperlink.html +487 -47
  270. data/rdoc/RubyXL/HyperlinkRelFile.html +503 -49
  271. data/rdoc/RubyXL/Hyperlinks.html +487 -47
  272. data/rdoc/RubyXL/IconFilter.html +487 -47
  273. data/rdoc/RubyXL/IconSet.html +487 -47
  274. data/rdoc/RubyXL/IgnoredError.html +487 -47
  275. data/rdoc/RubyXL/IgnoredErrors.html +487 -47
  276. data/rdoc/RubyXL/IndexedColors.html +487 -47
  277. data/rdoc/RubyXL/InputCells.html +487 -47
  278. data/rdoc/RubyXL/IntegerNode.html +493 -47
  279. data/rdoc/RubyXL/IntegerValue.html +493 -47
  280. data/rdoc/RubyXL/LegacyCell.html +534 -65
  281. data/rdoc/RubyXL/LegacyWorksheet.html +727 -114
  282. data/rdoc/RubyXL/MRUColors.html +487 -47
  283. data/rdoc/RubyXL/MacrosFile.html +510 -50
  284. data/rdoc/RubyXL/MergedCell.html +487 -47
  285. data/rdoc/RubyXL/MergedCells.html +487 -47
  286. data/rdoc/RubyXL/NumFmt.html +487 -47
  287. data/rdoc/RubyXL/NumberFormat.html +540 -68
  288. data/rdoc/RubyXL/NumberFormats.html +551 -71
  289. data/rdoc/RubyXL/OLEObject.html +487 -47
  290. data/rdoc/RubyXL/OLEObjectFile.html +510 -50
  291. data/rdoc/RubyXL/OLEObjects.html +487 -47
  292. data/rdoc/RubyXL/OLESize.html +487 -47
  293. data/rdoc/RubyXL/OOXMLContainerObject.html +756 -137
  294. data/rdoc/RubyXL/OOXMLIgnored.html +598 -80
  295. data/rdoc/RubyXL/OOXMLObject.html +506 -52
  296. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +741 -151
  297. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +834 -169
  298. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +894 -170
  299. data/rdoc/RubyXL/OOXMLTopLevelObject.html +735 -131
  300. data/rdoc/RubyXL/OdbcOleDbProperties.html +487 -47
  301. data/rdoc/RubyXL/Offset.html +487 -47
  302. data/rdoc/RubyXL/OlapProperties.html +487 -47
  303. data/rdoc/RubyXL/OleItem.html +487 -47
  304. data/rdoc/RubyXL/OleItems.html +487 -47
  305. data/rdoc/RubyXL/OleLink.html +487 -47
  306. data/rdoc/RubyXL/OutlineProperties.html +487 -47
  307. data/rdoc/RubyXL/PageMargins.html +487 -47
  308. data/rdoc/RubyXL/PageSetup.html +487 -47
  309. data/rdoc/RubyXL/PageSetupProperties.html +487 -47
  310. data/rdoc/RubyXL/Pane.html +487 -47
  311. data/rdoc/RubyXL/Parser.html +578 -78
  312. data/rdoc/RubyXL/PatternFill.html +487 -47
  313. data/rdoc/RubyXL/PersonMetadata.html +568 -0
  314. data/rdoc/RubyXL/PhoneticProperties.html +487 -47
  315. data/rdoc/RubyXL/PhoneticRun.html +487 -47
  316. data/rdoc/RubyXL/PivotArea.html +487 -47
  317. data/rdoc/RubyXL/PivotCache.html +487 -47
  318. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +529 -55
  319. data/rdoc/RubyXL/PivotCacheRecordsFile.html +510 -50
  320. data/rdoc/RubyXL/PivotCaches.html +487 -47
  321. data/rdoc/RubyXL/PivotReference.html +487 -47
  322. data/rdoc/RubyXL/PivotReferences.html +487 -47
  323. data/rdoc/RubyXL/PivotTableFile.html +529 -55
  324. data/rdoc/RubyXL/PivotTableSelection.html +487 -47
  325. data/rdoc/RubyXL/PresetGeometry.html +487 -47
  326. data/rdoc/RubyXL/PrintOptions.html +487 -47
  327. data/rdoc/RubyXL/PrinterSettingsFile.html +510 -50
  328. data/rdoc/RubyXL/ProtectedRange.html +487 -47
  329. data/rdoc/RubyXL/ProtectedRanges.html +487 -47
  330. data/rdoc/RubyXL/Protection.html +487 -47
  331. data/rdoc/RubyXL/QueryParameter.html +487 -47
  332. data/rdoc/RubyXL/QueryParameters.html +487 -47
  333. data/rdoc/RubyXL/QueryTable.html +575 -75
  334. data/rdoc/RubyXL/QueryTableDeletedField.html +487 -47
  335. data/rdoc/RubyXL/QueryTableDeletedFields.html +487 -47
  336. data/rdoc/RubyXL/QueryTableField.html +487 -47
  337. data/rdoc/RubyXL/QueryTableFields.html +487 -47
  338. data/rdoc/RubyXL/QueryTableRefresh.html +487 -47
  339. data/rdoc/RubyXL/RID.html +493 -47
  340. data/rdoc/RubyXL/RawOOXML.html +605 -85
  341. data/rdoc/RubyXL/Reference.html +1109 -207
  342. data/rdoc/RubyXL/Relationship.html +493 -47
  343. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +540 -65
  344. data/rdoc/RubyXL/RelationshipSupport.html +745 -126
  345. data/rdoc/RubyXL/RevisionPointer.html +487 -47
  346. data/rdoc/RubyXL/RichText.html +542 -70
  347. data/rdoc/RubyXL/RichTextRun.html +540 -68
  348. data/rdoc/RubyXL/Row.html +812 -148
  349. data/rdoc/RubyXL/RowExt.html +487 -47
  350. data/rdoc/RubyXL/RunProperties.html +487 -47
  351. data/rdoc/RubyXL/Scenario.html +487 -47
  352. data/rdoc/RubyXL/Scenarios.html +487 -47
  353. data/rdoc/RubyXL/Selection.html +540 -68
  354. data/rdoc/RubyXL/ShapeGuide.html +487 -47
  355. data/rdoc/RubyXL/ShapeTextRectangle.html +487 -47
  356. data/rdoc/RubyXL/SharedStringsTable.html +775 -137
  357. data/rdoc/RubyXL/Sheet.html +487 -47
  358. data/rdoc/RubyXL/SheetCalculationProperties.html +487 -47
  359. data/rdoc/RubyXL/SheetData.html +572 -78
  360. data/rdoc/RubyXL/SheetDataExt.html +487 -47
  361. data/rdoc/RubyXL/SheetDataSet.html +487 -47
  362. data/rdoc/RubyXL/SheetMetadata.html +510 -50
  363. data/rdoc/RubyXL/SheetName.html +487 -47
  364. data/rdoc/RubyXL/SheetNames.html +487 -47
  365. data/rdoc/RubyXL/Sheets.html +487 -47
  366. data/rdoc/RubyXL/SlicerCacheFile.html +510 -50
  367. data/rdoc/RubyXL/SlicerFile.html +510 -50
  368. data/rdoc/RubyXL/SmartTagProperties.html +487 -47
  369. data/rdoc/RubyXL/SmartTagType.html +487 -47
  370. data/rdoc/RubyXL/SmartTagTypes.html +487 -47
  371. data/rdoc/RubyXL/SmartTags.html +487 -47
  372. data/rdoc/RubyXL/SortCondition.html +487 -47
  373. data/rdoc/RubyXL/SortState.html +487 -47
  374. data/rdoc/RubyXL/Sqref.html +599 -81
  375. data/rdoc/RubyXL/Stop.html +487 -47
  376. data/rdoc/RubyXL/StringNode.html +493 -47
  377. data/rdoc/RubyXL/StringNodeW3C.html +598 -80
  378. data/rdoc/RubyXL/StringValue.html +493 -47
  379. data/rdoc/RubyXL/Stylesheet.html +707 -114
  380. data/rdoc/RubyXL/TableFile.html +510 -50
  381. data/rdoc/RubyXL/TableParts.html +493 -47
  382. data/rdoc/RubyXL/TableStyle.html +487 -47
  383. data/rdoc/RubyXL/TableStyles.html +487 -47
  384. data/rdoc/RubyXL/Text.html +591 -83
  385. data/rdoc/RubyXL/TextImportSettings.html +487 -47
  386. data/rdoc/RubyXL/Theme.html +651 -103
  387. data/rdoc/RubyXL/ThemeElements.html +487 -47
  388. data/rdoc/RubyXL/ThumbnailFile.html +510 -50
  389. data/rdoc/RubyXL/Top10.html +487 -47
  390. data/rdoc/RubyXL/VMLDrawingFile.html +530 -56
  391. data/rdoc/RubyXL/Variant.html +487 -47
  392. data/rdoc/RubyXL/Vector.html +540 -68
  393. data/rdoc/RubyXL/VectorValue.html +493 -47
  394. data/rdoc/RubyXL/VisualProperties.html +487 -47
  395. data/rdoc/RubyXL/WebPublishObject.html +487 -47
  396. data/rdoc/RubyXL/WebPublishObjects.html +487 -47
  397. data/rdoc/RubyXL/WebPublishingItem.html +487 -47
  398. data/rdoc/RubyXL/WebPublishingItems.html +487 -47
  399. data/rdoc/RubyXL/WebPublishingProperties.html +487 -47
  400. data/rdoc/RubyXL/WebQueryProperties.html +487 -47
  401. data/rdoc/RubyXL/Workbook.html +1560 -367
  402. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +1069 -226
  403. data/rdoc/RubyXL/WorkbookProperties.html +487 -47
  404. data/rdoc/RubyXL/WorkbookProtection.html +487 -47
  405. data/rdoc/RubyXL/WorkbookRoot.html +741 -123
  406. data/rdoc/RubyXL/WorkbookView.html +487 -47
  407. data/rdoc/RubyXL/WorkbookViews.html +487 -47
  408. data/rdoc/RubyXL/Worksheet.html +840 -154
  409. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +2725 -699
  410. data/rdoc/RubyXL/WorksheetDimensions.html +487 -47
  411. data/rdoc/RubyXL/WorksheetFormatProperties.html +493 -47
  412. data/rdoc/RubyXL/WorksheetProperties.html +487 -47
  413. data/rdoc/RubyXL/WorksheetProtection.html +487 -47
  414. data/rdoc/RubyXL/WorksheetView.html +487 -47
  415. data/rdoc/RubyXL/WorksheetViews.html +487 -47
  416. data/rdoc/RubyXL/XF.html +487 -47
  417. data/rdoc/RubyXL.html +1200 -163
  418. data/rdoc/created.rid +38 -38
  419. data/rdoc/css/rdoc.css +1670 -354
  420. data/rdoc/index.html +418 -433
  421. data/rdoc/js/aliki.js +511 -0
  422. data/rdoc/js/bash_highlighter.js +167 -0
  423. data/rdoc/js/c_highlighter.js +299 -0
  424. data/rdoc/js/{search.js → search_controller.js} +31 -12
  425. data/rdoc/js/search_data.js +1 -0
  426. data/rdoc/js/{navigation.js → search_navigation.js} +10 -10
  427. data/rdoc/js/search_ranker.js +239 -0
  428. data/rdoc/js/theme-toggle.js +112 -0
  429. data/rubyXL.gemspec +27 -70
  430. data/spec/lib/cell_spec.rb +56 -4
  431. data/spec/lib/color_spec.rb +7 -0
  432. data/spec/lib/parser_spec.rb +8 -5
  433. data/spec/lib/reference_spec.rb +69 -6
  434. data/spec/lib/rgb_color_spec.rb +2 -0
  435. data/spec/lib/stylesheet_spec.rb +2 -0
  436. data/spec/lib/text_spec.rb +3 -1
  437. data/spec/lib/workbook_spec.rb +6 -4
  438. data/spec/lib/worksheet_spec.rb +29 -17
  439. metadata +31 -47
  440. data/Gemfile.lock +0 -124
  441. data/rdoc/css/fonts.css +0 -167
  442. data/rdoc/fonts/Lato-Light.ttf +0 -0
  443. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  444. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  445. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  446. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  447. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  448. data/rdoc/images/add.png +0 -0
  449. data/rdoc/images/arrow_up.png +0 -0
  450. data/rdoc/images/brick.png +0 -0
  451. data/rdoc/images/brick_link.png +0 -0
  452. data/rdoc/images/bug.png +0 -0
  453. data/rdoc/images/bullet_black.png +0 -0
  454. data/rdoc/images/bullet_toggle_minus.png +0 -0
  455. data/rdoc/images/bullet_toggle_plus.png +0 -0
  456. data/rdoc/images/date.png +0 -0
  457. data/rdoc/images/delete.png +0 -0
  458. data/rdoc/images/find.png +0 -0
  459. data/rdoc/images/loadingAnimation.gif +0 -0
  460. data/rdoc/images/macFFBgHack.png +0 -0
  461. data/rdoc/images/package.png +0 -0
  462. data/rdoc/images/page_green.png +0 -0
  463. data/rdoc/images/page_white_text.png +0 -0
  464. data/rdoc/images/page_white_width.png +0 -0
  465. data/rdoc/images/plugin.png +0 -0
  466. data/rdoc/images/ruby.png +0 -0
  467. data/rdoc/images/tag_blue.png +0 -0
  468. data/rdoc/images/tag_green.png +0 -0
  469. data/rdoc/images/transparent.png +0 -0
  470. data/rdoc/images/wrench.png +0 -0
  471. data/rdoc/images/wrench_orange.png +0 -0
  472. data/rdoc/images/zoom.png +0 -0
  473. data/rdoc/js/darkfish.js +0 -84
  474. data/rdoc/js/navigation.js.gz +0 -0
  475. data/rdoc/js/search_index.js +0 -1
  476. data/rdoc/js/search_index.js.gz +0 -0
  477. data/rdoc/js/searcher.js +0 -229
  478. data/rdoc/js/searcher.js.gz +0 -0
  479. data/rdoc/table_of_contents.html +0 -3010
data/rdoc/css/rdoc.css CHANGED
@@ -1,84 +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
+ }
260
+
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. */
20
269
  }
21
270
 
22
- h1 span,
23
- h2 span,
24
- h3 span,
25
- h4 span,
26
- h5 span,
27
- h6 span {
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;
28
284
  position: relative;
285
+ }
29
286
 
30
- display: none;
31
- padding-left: 1em;
32
- line-height: 0;
33
- vertical-align: baseline;
34
- font-size: 10px;
287
+ /* Code block wrapper for copy button */
288
+ .code-block-wrapper {
289
+ position: relative;
290
+ margin: var(--space-4) 0;
35
291
  }
36
292
 
37
- h1 span { top: -1.3em; }
38
- h2 span { top: -1.2em; }
39
- h3 span { top: -1.0em; }
40
- h4 span { top: -0.8em; }
41
- h5 span { top: -0.5em; }
42
- h6 span { top: -0.5em; }
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);
325
+ }
43
326
 
44
- h1:hover span,
45
- h2:hover span,
46
- h3:hover span,
47
- h4:hover span,
48
- h5:hover span,
49
- h6:hover span {
50
- display: inline;
327
+ .copy-code-button:focus {
328
+ outline: none;
329
+ box-shadow: 0 0 0 3px var(--color-accent-subtle);
51
330
  }
52
331
 
53
- h1:target,
54
- h2:target,
55
- h3:target,
56
- h4:target,
57
- h5:target,
58
- h6:target {
59
- margin-left: -10px;
60
- border-left: 10px solid #f1edba;
332
+ .copy-code-button:active {
333
+ transform: scale(0.92);
334
+ box-shadow: none;
61
335
  }
62
336
 
63
- :link,
64
- :visited {
65
- color: #6C8C22;
66
- text-decoration: none;
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);
67
347
  }
68
348
 
69
- :link:hover,
70
- :visited:hover {
71
- border-bottom: 1px dotted #6C8C22;
349
+ .copy-code-button:hover svg {
350
+ color: var(--color-text-primary);
72
351
  }
73
352
 
74
- code,
75
- pre {
76
- font-family: "Source Code Pro", Monaco, monospace;
77
- background-color: rgba(27,31,35,0.05);
78
- padding: 0em 0.2em;
79
- border-radius: 0.2em;
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;
358
+ }
359
+
360
+ .copy-code-button.copied svg {
361
+ color: var(--color-green-600);
362
+ }
363
+
364
+ [data-theme="dark"] .copy-code-button.copied {
365
+ border-color: var(--color-green-400);
366
+ }
367
+
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
+ }
381
+ }
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);
80
402
  }
81
403
 
404
+ /* Tables */
82
405
  table {
83
406
  margin: 0;
84
407
  border-spacing: 0;
@@ -87,461 +410,956 @@ table {
87
410
 
88
411
  table tr th, table tr td {
89
412
  padding: 0.2em 0.4em;
90
- border: 1px solid #ccc;
413
+ border: 1px solid var(--color-border-default);
91
414
  }
92
415
 
93
416
  table tr th {
94
- background-color: #eceaed;
417
+ background-color: var(--color-th-background);
95
418
  }
96
419
 
97
420
  table tr:nth-child(even) td {
98
- 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;
99
447
  }
100
448
 
101
- /* @group Generic Classes */
102
-
103
- .initially-hidden {
104
- display: none;
449
+ header.top-navbar .navbar-brand:hover {
450
+ color: var(--color-accent-primary);
105
451
  }
106
452
 
107
- #search-field {
108
- width: 98%;
109
- background: white;
110
- border: none;
111
- height: 1.5em;
112
- -webkit-border-radius: 4px;
113
- -moz-border-radius: 4px;
114
- border-radius: 4px;
115
- text-align: left;
453
+ header.top-navbar .navbar-search {
454
+ position: relative;
455
+ flex: 0 1 auto;
456
+ width: var(--layout-search-width);
116
457
  }
117
- #search-field:focus {
118
- background: #f1edba;
458
+
459
+ header.top-navbar .navbar-search form {
460
+ margin: 0;
461
+ padding: 0;
119
462
  }
120
- #search-field:-moz-placeholder,
121
- #search-field::-webkit-input-placeholder {
122
- font-weight: bold;
123
- color: #666;
463
+
464
+
465
+
466
+ /* Mobile search icon button (hidden on desktop) */
467
+ .navbar-search-mobile {
468
+ display: none;
124
469
  }
125
470
 
126
- .missing-docs {
127
- font-size: 120%;
128
- background: white url(../images/wrench_orange.png) no-repeat 4px center;
129
- color: #ccc;
130
- line-height: 2em;
131
- border: 1px solid #d00;
132
- opacity: 1;
133
- padding-left: 20px;
134
- text-indent: 24px;
135
- letter-spacing: 3px;
136
- font-weight: bold;
137
- -webkit-border-radius: 5px;
138
- -moz-border-radius: 5px;
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;
580
+ }
581
+
582
+ /* Custom scrollbar for WebKit browsers */
583
+ nav::-webkit-scrollbar {
584
+ width: 6px;
585
+ }
586
+
587
+ nav::-webkit-scrollbar-track {
588
+ background: transparent;
589
+ }
590
+
591
+ nav::-webkit-scrollbar-thumb {
592
+ background: var(--color-border-default);
593
+ border-radius: var(--radius-sm);
594
+ transition: background var(--transition-fast);
595
+ }
596
+
597
+ nav::-webkit-scrollbar-thumb:hover {
598
+ background: var(--color-border-emphasis);
599
+ }
600
+
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);
611
+
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
+ }
636
+ }
637
+
638
+ /* Desktop: hide nav when [hidden] attribute is set */
639
+ @media (width >= 1024px) {
640
+ nav[hidden] {
641
+ display: none;
642
+ }
139
643
  }
140
644
 
141
- .target-section {
142
- border: 2px solid #dcce90;
143
- border-left-width: 8px;
144
- padding: 0 1em;
145
- background: #fff3c2;
645
+ nav .nav-section {
646
+ margin-top: var(--space-6);
647
+ padding: 0 var(--space-6);
146
648
  }
147
649
 
148
- /* @end */
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);
657
+ }
149
658
 
150
- /* @group Index Page, Standalone file pages */
151
- .table-of-contents ul {
152
- margin: 1em;
659
+ nav ul,
660
+ nav dl,
661
+ nav p {
662
+ padding: 0;
153
663
  list-style: none;
664
+ margin: var(--space-3) 0;
154
665
  }
155
666
 
156
- .table-of-contents ul ul {
157
- margin-top: 0.25em;
667
+ nav ul li {
668
+ margin-bottom: var(--space-2);
669
+ line-height: var(--line-height-relaxed);
158
670
  }
159
671
 
160
- .table-of-contents ul :link,
161
- .table-of-contents ul :visited {
162
- font-size: 16px;
672
+ nav ul li a {
673
+ transition:
674
+ color var(--transition-fast),
675
+ transform var(--transition-fast),
676
+ padding var(--transition-fast);
163
677
  }
164
678
 
165
- .table-of-contents li {
166
- margin-bottom: 0.25em;
679
+ nav ul li a:hover {
680
+ padding-left: var(--space-1);
167
681
  }
168
682
 
169
- .table-of-contents li .toc-toggle {
170
- width: 16px;
171
- height: 16px;
172
- background: url(../images/add.png) no-repeat;
683
+ nav ul ul {
684
+ padding-left: var(--space-5);
685
+ margin-top: var(--space-2);
173
686
  }
174
687
 
175
- .table-of-contents li .toc-toggle.open {
176
- background: url(../images/delete.png) no-repeat;
688
+ nav ul ul ul {
689
+ padding-left: var(--space-5);
177
690
  }
178
691
 
179
- /* @end */
180
-
181
- /* @group Top-Level Structure */
692
+ nav ul ul ul ul {
693
+ padding-left: var(--space-5);
694
+ }
182
695
 
183
- nav {
184
- float: left;
185
- width: 260px;
186
- font-family: Helvetica, sans-serif;
187
- font-size: 14px;
188
- border-right: 1px solid #ccc;
696
+ nav a {
697
+ text-decoration: none;
189
698
  }
190
699
 
191
- main {
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 {
192
704
  display: block;
193
- margin: 0 2em 5em 260px;
194
- padding-left: 20px;
195
- min-width: 340px;
196
- font-size: 16px;
705
+ max-width: 100%;
706
+ overflow: hidden;
707
+ text-overflow: ellipsis;
708
+ white-space: nowrap;
197
709
  }
198
710
 
199
- main h1,
200
- main h2,
201
- main h3,
202
- main h4,
203
- main h5,
204
- main h6 {
205
- font-family: Helvetica, sans-serif;
711
+ nav footer {
712
+ padding: var(--space-4);
713
+ border-top: 1px solid var(--color-border-default);
206
714
  }
207
715
 
208
- .table-of-contents main {
209
- margin-left: 2em;
716
+ nav footer a {
717
+ color: var(--color-accent-hover);
210
718
  }
211
719
 
212
- #validator-badges {
213
- clear: both;
214
- margin: 1em 1em 2em;
215
- font-size: smaller;
720
+ #navigation-toggle {
721
+ display: none; /* Hidden by default, shown on mobile */
216
722
  }
217
723
 
218
- /* @end */
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
+ }
219
745
 
220
- /* @group navigation */
221
- nav {
222
- margin-bottom: 1em;
746
+ #navigation-toggle:hover {
747
+ color: var(--color-accent-primary);
748
+ }
223
749
  }
224
750
 
225
- nav .nav-section {
226
- margin-top: 2em;
227
- border-top: 2px solid #aaa;
228
- font-size: 90%;
229
- overflow: hidden;
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;
230
759
  }
231
760
 
232
- nav h2 {
233
- margin: 0;
234
- padding: 2px 8px 2px 8px;
235
- background-color: #e8e8e8;
236
- color: #555;
237
- font-size: 125%;
238
- text-align: center;
761
+ nav details::details-content {
762
+ overflow: hidden;
763
+ block-size: 0;
764
+ transition: block-size 200ms ease, content-visibility 200ms ease allow-discrete;
239
765
  }
240
766
 
241
- nav h3,
242
- #table-of-contents-navigation {
243
- margin: 0;
244
- padding: 2px 8px 2px 8px;
245
- text-align: right;
246
- background-color: #e8e8e8;
247
- color: #555;
767
+ nav details[open]::details-content {
768
+ block-size: auto;
248
769
  }
249
770
 
250
- nav ul,
251
- nav dl,
252
- nav p {
253
- padding: 4px 8px 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;
254
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);
255
785
  }
256
786
 
257
- #project-navigation .nav-section {
258
- margin: 0;
259
- border-top: 0;
787
+ nav .nav-section-header::-webkit-details-marker {
788
+ display: none;
260
789
  }
261
790
 
262
- #home-section h2 {
263
- text-align: center;
791
+ nav .nav-section-header:hover {
792
+ color: var(--color-accent-primary);
264
793
  }
265
794
 
266
- #table-of-contents-navigation {
267
- font-size: 1.2em;
268
- font-weight: bold;
269
- text-align: center;
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);
270
803
  }
271
804
 
272
- #search-section {
273
- margin-top: 0;
274
- border-top: 0;
805
+ nav .nav-section-icon svg {
806
+ width: 100%;
807
+ height: 100%;
275
808
  }
276
809
 
277
- #search-field-wrapper {
278
- border-top: 1px solid #aaa;
279
- border-bottom: 1px solid #aaa;
280
- padding: 3px 8px;
281
- background-color: #e8e8e8;
282
- color: #555;
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;
818
+ white-space: nowrap;
283
819
  }
284
820
 
285
- ul.link-list li {
286
- white-space: nowrap;
287
- line-height: 1.4em;
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);
288
830
  }
289
831
 
290
- ul.link-list .type {
291
- font-size: 8px;
292
- text-transform: uppercase;
293
- color: white;
294
- background: #969696;
295
- padding: 2px 4px;
296
- -webkit-border-radius: 5px;
832
+ nav .nav-section-chevron svg {
833
+ width: 100%;
834
+ height: 100%;
297
835
  }
298
836
 
299
- dl.note-list dt {
300
- float: left;
301
- margin-right: 1em;
837
+ /* Rotate chevron when open */
838
+ nav .nav-section-collapsible[open] > .nav-section-header .nav-section-chevron {
839
+ transform: rotate(90deg);
302
840
  }
303
841
 
304
- .calls-super {
305
- background: url(../images/arrow_up.png) no-repeat right center;
842
+ nav .nav-section-collapsible > ul,
843
+ nav .nav-section-collapsible > dl,
844
+ nav .nav-section-collapsible > p {
845
+ margin-top: 0;
306
846
  }
307
847
 
308
- /* @end */
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 */
852
+ }
309
853
 
310
- /* @group Documentation Section */
311
- main {
312
- color: #333;
854
+ nav .nav-section-collapsible .nav-list .link-list {
855
+ border-left: none;
856
+ margin-left: 0;
857
+ padding-left: var(--space-5);
313
858
  }
314
859
 
315
- main > h1:first-child,
316
- main > h2:first-child,
317
- main > h3:first-child,
318
- main > h4:first-child,
319
- main > h5:first-child,
320
- main > h6:first-child {
321
- margin-top: 0px;
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;
322
869
  }
323
870
 
324
- main sup {
325
- vertical-align: super;
326
- font-size: 0.8em;
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);
889
+ }
890
+
891
+ nav li details:has(.link-list) > summary:hover::after {
892
+ background-color: var(--color-accent-primary);
893
+ }
894
+
895
+ nav li details:has(.link-list)[open] > summary::after {
896
+ transform: rotate(90deg);
897
+ background-color: var(--color-accent-primary);
898
+ }
899
+
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
+ }
327
936
  }
328
937
 
329
- /* The heading with the class name */
330
938
  main h1[class] {
331
939
  margin-top: 0;
332
940
  margin-bottom: 1em;
333
- font-size: 2em;
334
- color: #6C8C22;
941
+ font-size: 2.5em;
942
+ color: var(--color-accent-primary);
943
+ }
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);
335
954
  }
336
955
 
956
+ /* Heading size hierarchy */
337
957
  main h1 {
338
- margin: 2em 0 0.5em;
339
- 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);
340
962
  }
341
963
 
342
964
  main h2 {
343
- margin: 2em 0 0.5em;
344
- 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);
345
970
  }
346
971
 
347
972
  main h3 {
348
- margin: 2em 0 0.5em;
349
- 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);
350
978
  }
351
979
 
352
980
  main h4 {
353
- margin: 2em 0 0.5em;
354
- 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;
355
1003
  }
356
1004
 
357
- main h5 {
358
- margin: 2em 0 0.5em;
359
- 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;
360
1012
  }
361
1013
 
362
- main h6 {
363
- margin: 2em 0 0.5em;
364
- 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;
365
1079
  }
366
1080
 
1081
+ strong,
1082
+ em {
1083
+ color: var(--color-accent-primary);
1084
+ background-color: var(--color-emphasis-bg);
1085
+ }
1086
+
1087
+ /* Paragraphs */
367
1088
  main p {
368
- margin: 0 0 0.5em;
369
- line-height: 1.4em;
1089
+ line-height: var(--line-height-relaxed);
1090
+ font-weight: 400;
1091
+ margin-bottom: var(--space-4);
370
1092
  }
371
1093
 
1094
+ /* Preformatted Text */
372
1095
  main pre {
373
1096
  margin: 1.2em 0.5em;
374
1097
  padding: 1em;
375
1098
  font-size: 0.8em;
376
1099
  }
377
1100
 
1101
+ .code-block-wrapper pre {
1102
+ margin: 0;
1103
+ }
1104
+
1105
+ /* Horizontal Rules */
378
1106
  main hr {
379
1107
  margin: 1.5em 1em;
380
- border: 2px solid #ddd;
1108
+ border: 2px solid var(--color-border-default);
381
1109
  }
382
1110
 
1111
+ /* Blockquotes */
383
1112
  main blockquote {
384
1113
  margin: 0 2em 1.2em 1.2em;
385
1114
  padding-left: 0.5em;
386
- border-left: 2px solid #ddd;
387
- }
388
-
389
- main ol,
390
- main ul {
391
- margin: 1em 2em;
1115
+ border-left: 2px solid var(--color-border-default);
392
1116
  }
393
1117
 
1118
+ /* Lists */
394
1119
  main li > p {
395
- margin-bottom: 0.5em;
1120
+ margin: 0.5em;
396
1121
  }
397
1122
 
1123
+ /* Definition Lists */
398
1124
  main dl {
399
1125
  margin: 1em 0.5em;
400
1126
  }
401
1127
 
402
1128
  main dt {
403
- margin-bottom: 0.5em;
1129
+ line-height: 1.5;
404
1130
  font-weight: bold;
405
1131
  }
406
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
+
407
1147
  main dd {
408
- margin: 0 1em 1em 0.5em;
1148
+ margin: 0 0 1em 1em;
1149
+ }
1150
+
1151
+ main dd p:first-child {
1152
+ margin-top: 0;
409
1153
  }
410
1154
 
1155
+ /* Headers within Main */
411
1156
  main header h2 {
412
1157
  margin-top: 2em;
413
1158
  border-width: 0;
414
- border-top: 4px solid #bbb;
1159
+ border-top: 4px solid var(--color-border-default);
415
1160
  font-size: 130%;
416
1161
  }
417
1162
 
418
1163
  main header h3 {
419
1164
  margin: 2em 0 1.5em;
420
1165
  border-width: 0;
421
- border-top: 3px solid #bbb;
1166
+ border-top: 3px solid var(--color-border-default);
422
1167
  font-size: 120%;
423
1168
  }
424
1169
 
425
- .documentation-section-title {
426
- 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);
427
1179
  }
428
- .documentation-section-title .section-click-top {
429
- position: absolute;
430
- top: 6px;
431
- left: 12px;
432
- font-size: 10px;
433
- color: #9b9877;
434
- visibility: hidden;
435
- padding-left: 0.5px;
1180
+
1181
+ main .anchor-link:target {
1182
+ scroll-margin-top: calc(var(--layout-header-height) + 2rem);
436
1183
  }
437
1184
 
438
- .documentation-section-title:hover .section-click-top {
439
- 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);
440
1191
  }
441
1192
 
442
- .constants-list > dl {
443
- margin: 1em 0 2em;
444
- 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);
445
1203
  }
446
1204
 
447
- .constants-list > dl dt {
448
- margin-bottom: 0.75em;
449
- padding-left: 0;
450
- font-family: "Source Code Pro", Monaco, monospace;
451
- 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;
452
1221
  }
453
1222
 
454
- .constants-list > dl dt a {
455
- 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;
456
1237
  }
457
1238
 
458
- .constants-list > dl dd {
459
- margin: 0 0 2em 0;
460
- padding: 0;
461
- 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;
462
1247
  }
463
1248
 
464
- .documentation-section h2 {
465
- position: relative;
1249
+ main .method-source-code pre::-webkit-scrollbar {
1250
+ width: 6px;
1251
+ height: 6px;
466
1252
  }
467
1253
 
468
- .documentation-section h2 a {
469
- position: absolute;
470
- top: 8px;
471
- right: 10px;
472
- font-size: 12px;
473
- color: #9b9877;
474
- visibility: hidden;
1254
+ main .method-source-code pre::-webkit-scrollbar-track {
1255
+ background: transparent;
475
1256
  }
476
1257
 
477
- .documentation-section h2:hover a {
478
- visibility: visible;
1258
+ main .method-source-code pre::-webkit-scrollbar-thumb {
1259
+ background: var(--color-border-default);
1260
+ border-radius: var(--radius-sm);
479
1261
  }
480
1262
 
481
- /* @group Method Details */
1263
+ main .method-source-code pre::-webkit-scrollbar-thumb:hover {
1264
+ background: var(--color-border-emphasis);
1265
+ }
482
1266
 
483
- main .method-source-code {
484
- max-height: 0;
485
- overflow: hidden;
486
- transition-duration: 200ms;
487
- transition-delay: 0ms;
488
- transition-property: all;
489
- transition-timing-function: ease-in-out;
1267
+ main .method-source-code pre::-webkit-scrollbar-corner {
1268
+ background: transparent;
490
1269
  }
491
1270
 
492
1271
  main .method-source-code.active-menu {
1272
+ visibility: visible;
493
1273
  max-height: 100vh;
1274
+ overflow: auto;
1275
+ opacity: 1;
1276
+ transform: translateY(0);
494
1277
  }
495
1278
 
496
1279
  main .method-description .method-calls-super {
497
- color: #333;
1280
+ color: var(--color-text-primary);
498
1281
  font-weight: bold;
499
1282
  }
500
1283
 
501
1284
  main .method-detail {
502
1285
  margin-bottom: 2.5em;
503
- cursor: pointer;
504
1286
  }
505
1287
 
506
1288
  main .method-detail:target {
507
- margin-left: -10px;
508
- 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 */
509
1297
  }
510
1298
 
511
1299
  main .method-heading {
512
1300
  position: relative;
513
- font-family: "Source Code Pro", Monaco, monospace;
514
- font-size: 110%;
515
- font-weight: bold;
516
- 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);
517
1305
  }
518
- main .method-heading :link,
519
- main .method-heading :visited {
520
- color: inherit;
1306
+
1307
+ main .method-heading .method-name {
1308
+ font-weight: var(--font-weight-semibold);
521
1309
  }
522
- main .method-click-advice {
523
- position: absolute;
524
- top: 2px;
525
- right: 5px;
526
- font-size: 12px;
527
- color: #9b9877;
528
- visibility: hidden;
529
- 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;
530
1321
  line-height: 20px;
531
- 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;
532
1338
  }
533
- main .method-heading:hover .method-click-advice {
534
- visibility: visible;
1339
+
1340
+ main .method-controls summary::-webkit-details-marker {
1341
+ display: none;
1342
+ }
1343
+
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);
535
1352
  }
536
1353
 
537
- main .method-alias .method-heading {
538
- color: #666;
1354
+ [data-theme="dark"] main .method-controls summary:hover {
1355
+ background: var(--color-accent-subtle-hover);
1356
+ border-color: var(--color-primary-500);
539
1357
  }
540
1358
 
541
1359
  main .method-description,
542
1360
  main .aliases {
543
1361
  margin-top: 0.75em;
544
- color: #333;
1362
+ color: var(--color-text-primary);
545
1363
  }
546
1364
 
547
1365
  main .aliases {
@@ -549,6 +1367,17 @@ main .aliases {
549
1367
  font-style: italic;
550
1368
  cursor: default;
551
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
+
552
1381
  main .method-description ul {
553
1382
  margin-left: 1.5em;
554
1383
  }
@@ -557,83 +1386,570 @@ main #attribute-method-details .method-detail:hover {
557
1386
  background-color: transparent;
558
1387
  cursor: default;
559
1388
  }
1389
+
560
1390
  main .attribute-access-type {
561
1391
  text-transform: uppercase;
562
- padding: 0 1em;
563
1392
  }
564
- /* @end */
565
1393
 
566
- /* @end */
1394
+ /* Small screen adjustments */
1395
+ @media (width <= 480px) {
1396
+ nav {
1397
+ width: 85%;
1398
+ max-width: 320px;
1399
+ }
567
1400
 
568
- /* @group Source Code */
1401
+ main {
1402
+ margin: 0;
1403
+ padding: var(--space-4);
1404
+ max-width: 100%;
1405
+ }
569
1406
 
570
- pre {
571
- margin: 0.5em 0;
572
- border: 1px dashed #999;
573
- padding: 0.5em;
574
- background: #262626;
575
- color: white;
576
- 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
+ }
1417
+ }
1418
+
1419
+
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
+ }
1620
+
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;
577
1743
  }
578
1744
 
579
- .ruby-constant { color: #7fffd4; background: transparent; }
580
- .ruby-keyword { color: #00ffff; background: transparent; }
581
- .ruby-ivar { color: #eedd82; background: transparent; }
582
- .ruby-operator { color: #00ffee; background: transparent; }
583
- .ruby-identifier { color: #ffdead; background: transparent; }
584
- .ruby-node { color: #ffa07a; background: transparent; }
585
- .ruby-comment { color: #dc0000; background: transparent; }
586
- .ruby-regexp { color: #ffa07a; background: transparent; }
587
- .ruby-value { color: #7fffd4; background: transparent; }
1745
+ footer.site-footer ul {
1746
+ list-style: none;
1747
+ margin: 0;
1748
+ padding: 0;
1749
+ }
588
1750
 
589
- /* @end */
1751
+ footer.site-footer li {
1752
+ margin-bottom: var(--space-2);
1753
+ }
590
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
+ }
591
1761
 
592
- /* @group search results */
593
- #search-results {
594
- font-family: Lato, sans-serif;
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);
595
1827
  font-weight: 300;
596
1828
  }
597
1829
 
598
- #search-results .search-match {
599
- 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);
600
1840
  font-weight: normal;
601
1841
  }
602
1842
 
603
- #search-results .search-selected {
604
- background: #e8e8e8;
1843
+ .search-results .search-selected {
1844
+ background: var(--color-code-bg);
605
1845
  border-bottom: 1px solid transparent;
606
1846
  }
607
1847
 
608
- #search-results li {
1848
+ .search-results li {
609
1849
  list-style: none;
610
- border-bottom: 1px solid #aaa;
1850
+ border-bottom: 1px solid var(--color-border-default);
611
1851
  margin-bottom: 0.5em;
612
1852
  }
613
1853
 
614
- #search-results li:last-child {
1854
+ .search-results li:last-child {
615
1855
  border-bottom: none;
616
1856
  margin-bottom: 0;
617
1857
  }
618
1858
 
619
- #search-results li p {
1859
+ .search-results li p {
620
1860
  padding: 0;
621
1861
  margin: 0.5em;
622
1862
  }
623
1863
 
624
- #search-results .search-namespace {
1864
+ .search-results .search-namespace {
625
1865
  font-weight: bold;
626
1866
  }
627
1867
 
628
- #search-results li em {
629
- 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);
630
1903
  font-style: normal;
631
1904
  }
632
1905
 
633
- #search-results pre {
1906
+ .search-results pre {
634
1907
  margin: 0.5em;
635
- font-family: "Source Code Pro", Monaco, monospace;
1908
+ font-family: var(--font-code);
636
1909
  }
637
1910
 
638
- /* @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
+ }
639
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
+ }