rubyXL 3.4.35 → 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 (444) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/rubyXL/objects/reference.rb +29 -9
  4. data/lib/rubyXL/objects/workbook.rb +7 -0
  5. data/rdoc/README_rdoc.html +480 -462
  6. data/rdoc/RubyXL/AExtension.html +488 -79
  7. data/rdoc/RubyXL/AExtensionStorageArea.html +448 -49
  8. data/rdoc/RubyXL/ActiveX.html +486 -69
  9. data/rdoc/RubyXL/ActiveXBinary.html +449 -50
  10. data/rdoc/RubyXL/AdjustHandleList.html +442 -49
  11. data/rdoc/RubyXL/Alignment.html +442 -49
  12. data/rdoc/RubyXL/AlternateContent.html +448 -49
  13. data/rdoc/RubyXL/AlternateUrls.html +442 -49
  14. data/rdoc/RubyXL/Authors.html +442 -49
  15. data/rdoc/RubyXL/AutoFilter.html +442 -49
  16. data/rdoc/RubyXL/AutoFilterColumn.html +442 -49
  17. data/rdoc/RubyXL/BinaryImageFile.html +449 -50
  18. data/rdoc/RubyXL/BodyProperties.html +442 -49
  19. data/rdoc/RubyXL/BooleanNode.html +448 -49
  20. data/rdoc/RubyXL/BooleanValue.html +448 -49
  21. data/rdoc/RubyXL/Border.html +478 -83
  22. data/rdoc/RubyXL/BorderEdge.html +477 -72
  23. data/rdoc/RubyXL/Borders.html +464 -63
  24. data/rdoc/RubyXL/Break.html +442 -49
  25. data/rdoc/RubyXL/BreakList.html +442 -49
  26. data/rdoc/RubyXL/CT_AdjPoint2D.html +442 -49
  27. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +442 -49
  28. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +442 -49
  29. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +442 -49
  30. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +442 -49
  31. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +442 -49
  32. data/rdoc/RubyXL/CT_Backdrop.html +442 -49
  33. data/rdoc/RubyXL/CT_Bevel.html +442 -49
  34. data/rdoc/RubyXL/CT_BiLevelEffect.html +442 -49
  35. data/rdoc/RubyXL/CT_BlendEffect.html +442 -49
  36. data/rdoc/RubyXL/CT_Blip.html +442 -49
  37. data/rdoc/RubyXL/CT_BlipFillProperties.html +442 -49
  38. data/rdoc/RubyXL/CT_BlurEffect.html +442 -49
  39. data/rdoc/RubyXL/CT_Camera.html +442 -49
  40. data/rdoc/RubyXL/CT_Color.html +442 -49
  41. data/rdoc/RubyXL/CT_ColorChangeEffect.html +442 -49
  42. data/rdoc/RubyXL/CT_ColorMapping.html +442 -49
  43. data/rdoc/RubyXL/CT_ColorScheme.html +442 -49
  44. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +442 -49
  45. data/rdoc/RubyXL/CT_ConnectionSite.html +442 -49
  46. data/rdoc/RubyXL/CT_ConnectionSiteList.html +442 -49
  47. data/rdoc/RubyXL/CT_DashStop.html +442 -49
  48. data/rdoc/RubyXL/CT_DashStopList.html +442 -49
  49. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +442 -49
  50. data/rdoc/RubyXL/CT_DuotoneEffect.html +442 -49
  51. data/rdoc/RubyXL/CT_EffectContainer.html +442 -49
  52. data/rdoc/RubyXL/CT_EffectList.html +442 -49
  53. data/rdoc/RubyXL/CT_EffectReference.html +442 -49
  54. data/rdoc/RubyXL/CT_EffectStyleItem.html +442 -49
  55. data/rdoc/RubyXL/CT_EffectStyleList.html +442 -49
  56. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +442 -49
  57. data/rdoc/RubyXL/CT_FillEffect.html +442 -49
  58. data/rdoc/RubyXL/CT_FillOverlayEffect.html +442 -49
  59. data/rdoc/RubyXL/CT_FillStyleList.html +442 -49
  60. data/rdoc/RubyXL/CT_FlatText.html +442 -49
  61. data/rdoc/RubyXL/CT_FontCollection.html +442 -49
  62. data/rdoc/RubyXL/CT_FontReference.html +442 -49
  63. data/rdoc/RubyXL/CT_GeomGuideList.html +442 -49
  64. data/rdoc/RubyXL/CT_GlowEffect.html +442 -49
  65. data/rdoc/RubyXL/CT_GradientFillProperties.html +442 -49
  66. data/rdoc/RubyXL/CT_GradientStop.html +442 -49
  67. data/rdoc/RubyXL/CT_GradientStopList.html +442 -49
  68. data/rdoc/RubyXL/CT_HSLEffect.html +442 -49
  69. data/rdoc/RubyXL/CT_HslColor.html +442 -49
  70. data/rdoc/RubyXL/CT_Hyperlink.html +442 -49
  71. data/rdoc/RubyXL/CT_InnerShadowEffect.html +442 -49
  72. data/rdoc/RubyXL/CT_LightRig.html +442 -49
  73. data/rdoc/RubyXL/CT_LineEndProperties.html +442 -49
  74. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +442 -49
  75. data/rdoc/RubyXL/CT_LineProperties.html +442 -49
  76. data/rdoc/RubyXL/CT_LineStyleList.html +442 -49
  77. data/rdoc/RubyXL/CT_LinearShadeProperties.html +442 -49
  78. data/rdoc/RubyXL/CT_LuminanceEffect.html +442 -49
  79. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +442 -49
  80. data/rdoc/RubyXL/CT_OuterShadowEffect.html +442 -49
  81. data/rdoc/RubyXL/CT_Path2D.html +442 -49
  82. data/rdoc/RubyXL/CT_Path2DArcTo.html +442 -49
  83. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +442 -49
  84. data/rdoc/RubyXL/CT_Path2DList.html +442 -49
  85. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +442 -49
  86. data/rdoc/RubyXL/CT_Path2DTo.html +442 -49
  87. data/rdoc/RubyXL/CT_PathShadeProperties.html +442 -49
  88. data/rdoc/RubyXL/CT_PatternFillProperties.html +442 -49
  89. data/rdoc/RubyXL/CT_Point3D.html +442 -49
  90. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +442 -49
  91. data/rdoc/RubyXL/CT_PresetColor.html +442 -49
  92. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +442 -49
  93. data/rdoc/RubyXL/CT_PresetShadowEffect.html +442 -49
  94. data/rdoc/RubyXL/CT_PresetTextShape.html +442 -49
  95. data/rdoc/RubyXL/CT_ReflectionEffect.html +442 -49
  96. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +442 -49
  97. data/rdoc/RubyXL/CT_RelativeRect.html +442 -49
  98. data/rdoc/RubyXL/CT_SRgbColor.html +442 -49
  99. data/rdoc/RubyXL/CT_ScRgbColor.html +442 -49
  100. data/rdoc/RubyXL/CT_Scene3D.html +442 -49
  101. data/rdoc/RubyXL/CT_SchemeColor.html +442 -49
  102. data/rdoc/RubyXL/CT_Shape3D.html +442 -49
  103. data/rdoc/RubyXL/CT_ShapeStyle.html +442 -49
  104. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +442 -49
  105. data/rdoc/RubyXL/CT_SphereCoords.html +442 -49
  106. data/rdoc/RubyXL/CT_StretchInfoProperties.html +442 -49
  107. data/rdoc/RubyXL/CT_StyleMatrix.html +442 -49
  108. data/rdoc/RubyXL/CT_StyleMatrixReference.html +442 -49
  109. data/rdoc/RubyXL/CT_SupplementalFont.html +442 -49
  110. data/rdoc/RubyXL/CT_SystemColor.html +442 -49
  111. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +442 -49
  112. data/rdoc/RubyXL/CT_TextBlipBullet.html +442 -49
  113. data/rdoc/RubyXL/CT_TextCharBullet.html +442 -49
  114. data/rdoc/RubyXL/CT_TextCharacterProperties.html +442 -49
  115. data/rdoc/RubyXL/CT_TextFont.html +442 -49
  116. data/rdoc/RubyXL/CT_TextListStyle.html +442 -49
  117. data/rdoc/RubyXL/CT_TextNormalAutofit.html +442 -49
  118. data/rdoc/RubyXL/CT_TextParagraphProperties.html +442 -49
  119. data/rdoc/RubyXL/CT_TextSpacing.html +442 -49
  120. data/rdoc/RubyXL/CT_TextTabStop.html +442 -49
  121. data/rdoc/RubyXL/CT_TextTabStopList.html +442 -49
  122. data/rdoc/RubyXL/CT_TileInfoProperties.html +442 -49
  123. data/rdoc/RubyXL/CT_TintEffect.html +442 -49
  124. data/rdoc/RubyXL/CT_Transform2D.html +442 -49
  125. data/rdoc/RubyXL/CT_TransformEffect.html +442 -49
  126. data/rdoc/RubyXL/CT_Vector3D.html +442 -49
  127. data/rdoc/RubyXL/CT_XYAdjustHandle.html +442 -49
  128. data/rdoc/RubyXL/CalculationChain.html +466 -65
  129. data/rdoc/RubyXL/CalculationChainCell.html +442 -49
  130. data/rdoc/RubyXL/CalculationProperties.html +442 -49
  131. data/rdoc/RubyXL/Cell.html +544 -159
  132. data/rdoc/RubyXL/CellConvenienceMethods.html +637 -312
  133. data/rdoc/RubyXL/CellExt.html +442 -49
  134. data/rdoc/RubyXL/CellSmartTag.html +442 -49
  135. data/rdoc/RubyXL/CellSmartTagProperty.html +442 -49
  136. data/rdoc/RubyXL/CellSmartTags.html +442 -49
  137. data/rdoc/RubyXL/CellStyle.html +442 -49
  138. data/rdoc/RubyXL/CellStyleXFs.html +464 -63
  139. data/rdoc/RubyXL/CellStyles.html +464 -63
  140. data/rdoc/RubyXL/CellValue.html +465 -64
  141. data/rdoc/RubyXL/CellWatch.html +442 -49
  142. data/rdoc/RubyXL/CellWatches.html +442 -49
  143. data/rdoc/RubyXL/CellXFs.html +464 -63
  144. data/rdoc/RubyXL/ChartColorsFile.html +449 -50
  145. data/rdoc/RubyXL/ChartFile.html +486 -69
  146. data/rdoc/RubyXL/ChartStyleFile.html +449 -50
  147. data/rdoc/RubyXL/ChartUserShapesFile.html +449 -50
  148. data/rdoc/RubyXL/Chartsheet.html +481 -70
  149. data/rdoc/RubyXL/ChartsheetPageSetup.html +442 -49
  150. data/rdoc/RubyXL/ChartsheetProperties.html +442 -49
  151. data/rdoc/RubyXL/ChartsheetProtection.html +442 -49
  152. data/rdoc/RubyXL/ChartsheetView.html +442 -49
  153. data/rdoc/RubyXL/ChartsheetViews.html +442 -49
  154. data/rdoc/RubyXL/Color.html +465 -64
  155. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +478 -73
  156. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +494 -87
  157. data/rdoc/RubyXL/ColorConvenienceClasses.html +436 -47
  158. data/rdoc/RubyXL/ColorConvenienceMethods.html +459 -62
  159. data/rdoc/RubyXL/ColorFilter.html +442 -49
  160. data/rdoc/RubyXL/ColorScale.html +442 -49
  161. data/rdoc/RubyXL/ColorSet.html +442 -49
  162. data/rdoc/RubyXL/Colors.html +442 -49
  163. data/rdoc/RubyXL/ColumnRange.html +500 -95
  164. data/rdoc/RubyXL/ColumnRanges.html +484 -83
  165. data/rdoc/RubyXL/Comment.html +442 -49
  166. data/rdoc/RubyXL/CommentList.html +442 -49
  167. data/rdoc/RubyXL/CommentsFile.html +467 -66
  168. data/rdoc/RubyXL/ConditionalFormatValue.html +442 -49
  169. data/rdoc/RubyXL/ConditionalFormatting.html +442 -49
  170. data/rdoc/RubyXL/ConditionalFormattingRule.html +442 -49
  171. data/rdoc/RubyXL/Connection.html +442 -49
  172. data/rdoc/RubyXL/ConnectionTable.html +442 -49
  173. data/rdoc/RubyXL/ConnectionTables.html +442 -49
  174. data/rdoc/RubyXL/ConnectionTextField.html +442 -49
  175. data/rdoc/RubyXL/ConnectionTextFields.html +442 -49
  176. data/rdoc/RubyXL/Connections.html +466 -65
  177. data/rdoc/RubyXL/ContentTypeDefault.html +448 -49
  178. data/rdoc/RubyXL/ContentTypeOverride.html +448 -49
  179. data/rdoc/RubyXL/ContentTypes.html +478 -73
  180. data/rdoc/RubyXL/ControlPropertiesFile.html +449 -50
  181. data/rdoc/RubyXL/CorePropertiesFile.html +511 -120
  182. data/rdoc/RubyXL/CustomColor.html +442 -49
  183. data/rdoc/RubyXL/CustomColorList.html +442 -49
  184. data/rdoc/RubyXL/CustomFilter.html +442 -49
  185. data/rdoc/RubyXL/CustomFilters.html +442 -49
  186. data/rdoc/RubyXL/CustomGeometry.html +442 -49
  187. data/rdoc/RubyXL/CustomProperties.html +442 -49
  188. data/rdoc/RubyXL/CustomPropertiesFile.html +449 -50
  189. data/rdoc/RubyXL/CustomProperty.html +442 -49
  190. data/rdoc/RubyXL/CustomPropertyFile.html +449 -50
  191. data/rdoc/RubyXL/CustomSheetView.html +442 -49
  192. data/rdoc/RubyXL/CustomSheetViews.html +442 -49
  193. data/rdoc/RubyXL/CustomWorkbookView.html +442 -49
  194. data/rdoc/RubyXL/CustomWorkbookViews.html +442 -49
  195. data/rdoc/RubyXL/CustomXMLFile.html +449 -50
  196. data/rdoc/RubyXL/DXF.html +442 -49
  197. data/rdoc/RubyXL/DXFs.html +442 -49
  198. data/rdoc/RubyXL/DataBar.html +442 -49
  199. data/rdoc/RubyXL/DataConsolidate.html +442 -49
  200. data/rdoc/RubyXL/DataConsolidationReference.html +442 -49
  201. data/rdoc/RubyXL/DataConsolidationReferences.html +442 -49
  202. data/rdoc/RubyXL/DataType.html +431 -48
  203. data/rdoc/RubyXL/DataValidation.html +442 -49
  204. data/rdoc/RubyXL/DataValidations.html +442 -49
  205. data/rdoc/RubyXL/DateGroupItem.html +442 -49
  206. data/rdoc/RubyXL/DefinedName.html +442 -49
  207. data/rdoc/RubyXL/DefinedNameExt.html +442 -49
  208. data/rdoc/RubyXL/DefinedNames.html +519 -49
  209. data/rdoc/RubyXL/DefinedNamesExt.html +442 -49
  210. data/rdoc/RubyXL/DocumentPropertiesFile.html +473 -74
  211. data/rdoc/RubyXL/DrawingFile.html +486 -69
  212. data/rdoc/RubyXL/DynamicFilter.html +442 -49
  213. data/rdoc/RubyXL/EmbeddedControl.html +442 -49
  214. data/rdoc/RubyXL/EmbeddedControls.html +442 -49
  215. data/rdoc/RubyXL/Extension.html +442 -49
  216. data/rdoc/RubyXL/ExtensionStorageArea.html +442 -49
  217. data/rdoc/RubyXL/Extents.html +442 -49
  218. data/rdoc/RubyXL/ExternalBook.html +442 -49
  219. data/rdoc/RubyXL/ExternalLinksFile.html +486 -69
  220. data/rdoc/RubyXL/ExternalReference.html +442 -49
  221. data/rdoc/RubyXL/ExternalReferences.html +442 -49
  222. data/rdoc/RubyXL/ExtraColorSchemeList.html +442 -49
  223. data/rdoc/RubyXL/FieldItem.html +442 -49
  224. data/rdoc/RubyXL/FileRecoveryProperties.html +442 -49
  225. data/rdoc/RubyXL/FileSharing.html +442 -49
  226. data/rdoc/RubyXL/FileVersion.html +442 -49
  227. data/rdoc/RubyXL/Fill.html +464 -63
  228. data/rdoc/RubyXL/Fills.html +464 -63
  229. data/rdoc/RubyXL/FilterContainer.html +442 -49
  230. data/rdoc/RubyXL/FloatNode.html +448 -49
  231. data/rdoc/RubyXL/FloatValue.html +448 -49
  232. data/rdoc/RubyXL/Font.html +465 -64
  233. data/rdoc/RubyXL/FontConvenienceMethods.html +522 -151
  234. data/rdoc/RubyXL/FontScheme.html +442 -49
  235. data/rdoc/RubyXL/Fonts.html +464 -63
  236. data/rdoc/RubyXL/Formula.html +442 -49
  237. data/rdoc/RubyXL/FunctionGroup.html +442 -49
  238. data/rdoc/RubyXL/FunctionGroups.html +442 -49
  239. data/rdoc/RubyXL/GenericStorageObject.html +501 -88
  240. data/rdoc/RubyXL/GradientFill.html +442 -49
  241. data/rdoc/RubyXL/HeaderFooterSettings.html +442 -49
  242. data/rdoc/RubyXL/Hyperlink.html +442 -49
  243. data/rdoc/RubyXL/HyperlinkRelFile.html +449 -50
  244. data/rdoc/RubyXL/Hyperlinks.html +442 -49
  245. data/rdoc/RubyXL/IconFilter.html +442 -49
  246. data/rdoc/RubyXL/IconSet.html +442 -49
  247. data/rdoc/RubyXL/IgnoredError.html +442 -49
  248. data/rdoc/RubyXL/IgnoredErrors.html +442 -49
  249. data/rdoc/RubyXL/IndexedColors.html +442 -49
  250. data/rdoc/RubyXL/InputCells.html +442 -49
  251. data/rdoc/RubyXL/IntegerNode.html +448 -49
  252. data/rdoc/RubyXL/IntegerValue.html +448 -49
  253. data/rdoc/RubyXL/LegacyCell.html +459 -62
  254. data/rdoc/RubyXL/LegacyWorksheet.html +509 -100
  255. data/rdoc/RubyXL/MRUColors.html +442 -49
  256. data/rdoc/RubyXL/MacrosFile.html +449 -50
  257. data/rdoc/RubyXL/MergedCell.html +442 -49
  258. data/rdoc/RubyXL/MergedCells.html +442 -49
  259. data/rdoc/RubyXL/NumFmt.html +442 -49
  260. data/rdoc/RubyXL/NumberFormat.html +465 -64
  261. data/rdoc/RubyXL/NumberFormats.html +466 -65
  262. data/rdoc/RubyXL/OLEObject.html +442 -49
  263. data/rdoc/RubyXL/OLEObjectFile.html +449 -50
  264. data/rdoc/RubyXL/OLEObjects.html +442 -49
  265. data/rdoc/RubyXL/OLESize.html +442 -49
  266. data/rdoc/RubyXL/OOXMLContainerObject.html +524 -113
  267. data/rdoc/RubyXL/OOXMLIgnored.html +493 -78
  268. data/rdoc/RubyXL/OOXMLObject.html +456 -53
  269. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +495 -102
  270. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +531 -126
  271. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +537 -138
  272. data/rdoc/RubyXL/OOXMLTopLevelObject.html +515 -108
  273. data/rdoc/RubyXL/OdbcOleDbProperties.html +442 -49
  274. data/rdoc/RubyXL/Offset.html +442 -49
  275. data/rdoc/RubyXL/OlapProperties.html +442 -49
  276. data/rdoc/RubyXL/OleItem.html +442 -49
  277. data/rdoc/RubyXL/OleItems.html +442 -49
  278. data/rdoc/RubyXL/OleLink.html +442 -49
  279. data/rdoc/RubyXL/OutlineProperties.html +442 -49
  280. data/rdoc/RubyXL/PageMargins.html +442 -49
  281. data/rdoc/RubyXL/PageSetup.html +442 -49
  282. data/rdoc/RubyXL/PageSetupProperties.html +442 -49
  283. data/rdoc/RubyXL/Pane.html +442 -49
  284. data/rdoc/RubyXL/Parser.html +476 -71
  285. data/rdoc/RubyXL/PatternFill.html +442 -49
  286. data/rdoc/RubyXL/PersonMetadata.html +449 -50
  287. data/rdoc/RubyXL/PhoneticProperties.html +442 -49
  288. data/rdoc/RubyXL/PhoneticRun.html +442 -49
  289. data/rdoc/RubyXL/PivotArea.html +442 -49
  290. data/rdoc/RubyXL/PivotCache.html +442 -49
  291. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +463 -54
  292. data/rdoc/RubyXL/PivotCacheRecordsFile.html +449 -50
  293. data/rdoc/RubyXL/PivotCaches.html +442 -49
  294. data/rdoc/RubyXL/PivotReference.html +442 -49
  295. data/rdoc/RubyXL/PivotReferences.html +442 -49
  296. data/rdoc/RubyXL/PivotTableFile.html +463 -54
  297. data/rdoc/RubyXL/PivotTableSelection.html +442 -49
  298. data/rdoc/RubyXL/PresetGeometry.html +442 -49
  299. data/rdoc/RubyXL/PrintOptions.html +442 -49
  300. data/rdoc/RubyXL/PrinterSettingsFile.html +449 -50
  301. data/rdoc/RubyXL/ProtectedRange.html +442 -49
  302. data/rdoc/RubyXL/ProtectedRanges.html +442 -49
  303. data/rdoc/RubyXL/Protection.html +442 -49
  304. data/rdoc/RubyXL/QueryParameter.html +442 -49
  305. data/rdoc/RubyXL/QueryParameters.html +442 -49
  306. data/rdoc/RubyXL/QueryTable.html +480 -69
  307. data/rdoc/RubyXL/QueryTableDeletedField.html +442 -49
  308. data/rdoc/RubyXL/QueryTableDeletedFields.html +442 -49
  309. data/rdoc/RubyXL/QueryTableField.html +442 -49
  310. data/rdoc/RubyXL/QueryTableFields.html +442 -49
  311. data/rdoc/RubyXL/QueryTableRefresh.html +442 -49
  312. data/rdoc/RubyXL/RID.html +448 -49
  313. data/rdoc/RubyXL/RawOOXML.html +488 -79
  314. data/rdoc/RubyXL/Reference.html +594 -165
  315. data/rdoc/RubyXL/Relationship.html +448 -49
  316. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +459 -62
  317. data/rdoc/RubyXL/RelationshipSupport.html +508 -107
  318. data/rdoc/RubyXL/RevisionPointer.html +442 -49
  319. data/rdoc/RubyXL/RichText.html +465 -64
  320. data/rdoc/RubyXL/RichTextRun.html +465 -64
  321. data/rdoc/RubyXL/Row.html +505 -120
  322. data/rdoc/RubyXL/RowExt.html +442 -49
  323. data/rdoc/RubyXL/RunProperties.html +442 -49
  324. data/rdoc/RubyXL/Scenario.html +442 -49
  325. data/rdoc/RubyXL/Scenarios.html +442 -49
  326. data/rdoc/RubyXL/Selection.html +465 -64
  327. data/rdoc/RubyXL/ShapeGuide.html +442 -49
  328. data/rdoc/RubyXL/ShapeTextRectangle.html +442 -49
  329. data/rdoc/RubyXL/SharedStringsTable.html +511 -112
  330. data/rdoc/RubyXL/Sheet.html +442 -49
  331. data/rdoc/RubyXL/SheetCalculationProperties.html +442 -49
  332. data/rdoc/RubyXL/SheetData.html +471 -72
  333. data/rdoc/RubyXL/SheetDataExt.html +442 -49
  334. data/rdoc/RubyXL/SheetDataSet.html +442 -49
  335. data/rdoc/RubyXL/SheetMetadata.html +449 -50
  336. data/rdoc/RubyXL/SheetName.html +442 -49
  337. data/rdoc/RubyXL/SheetNames.html +442 -49
  338. data/rdoc/RubyXL/Sheets.html +442 -49
  339. data/rdoc/RubyXL/SlicerCacheFile.html +449 -50
  340. data/rdoc/RubyXL/SlicerFile.html +449 -50
  341. data/rdoc/RubyXL/SmartTagProperties.html +442 -49
  342. data/rdoc/RubyXL/SmartTagType.html +442 -49
  343. data/rdoc/RubyXL/SmartTagTypes.html +442 -49
  344. data/rdoc/RubyXL/SmartTags.html +442 -49
  345. data/rdoc/RubyXL/SortCondition.html +442 -49
  346. data/rdoc/RubyXL/SortState.html +442 -49
  347. data/rdoc/RubyXL/Sqref.html +493 -78
  348. data/rdoc/RubyXL/Stop.html +442 -49
  349. data/rdoc/RubyXL/StringNode.html +448 -49
  350. data/rdoc/RubyXL/StringNodeW3C.html +493 -78
  351. data/rdoc/RubyXL/StringValue.html +448 -49
  352. data/rdoc/RubyXL/Stylesheet.html +506 -103
  353. data/rdoc/RubyXL/TableFile.html +449 -50
  354. data/rdoc/RubyXL/TableParts.html +448 -49
  355. data/rdoc/RubyXL/TableStyle.html +442 -49
  356. data/rdoc/RubyXL/TableStyles.html +442 -49
  357. data/rdoc/RubyXL/Text.html +472 -73
  358. data/rdoc/RubyXL/TextImportSettings.html +442 -49
  359. data/rdoc/RubyXL/Theme.html +494 -87
  360. data/rdoc/RubyXL/ThemeElements.html +442 -49
  361. data/rdoc/RubyXL/ThumbnailFile.html +449 -50
  362. data/rdoc/RubyXL/Top10.html +442 -49
  363. data/rdoc/RubyXL/VMLDrawingFile.html +463 -54
  364. data/rdoc/RubyXL/Variant.html +442 -49
  365. data/rdoc/RubyXL/Vector.html +465 -64
  366. data/rdoc/RubyXL/VectorValue.html +448 -49
  367. data/rdoc/RubyXL/VisualProperties.html +442 -49
  368. data/rdoc/RubyXL/WebPublishObject.html +442 -49
  369. data/rdoc/RubyXL/WebPublishObjects.html +442 -49
  370. data/rdoc/RubyXL/WebPublishingItem.html +442 -49
  371. data/rdoc/RubyXL/WebPublishingItems.html +442 -49
  372. data/rdoc/RubyXL/WebPublishingProperties.html +442 -49
  373. data/rdoc/RubyXL/WebQueryProperties.html +442 -49
  374. data/rdoc/RubyXL/Workbook.html +628 -260
  375. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +542 -179
  376. data/rdoc/RubyXL/WorkbookProperties.html +442 -49
  377. data/rdoc/RubyXL/WorkbookProtection.html +442 -49
  378. data/rdoc/RubyXL/WorkbookRoot.html +526 -107
  379. data/rdoc/RubyXL/WorkbookView.html +442 -49
  380. data/rdoc/RubyXL/WorkbookViews.html +442 -49
  381. data/rdoc/RubyXL/Worksheet.html +527 -118
  382. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +799 -538
  383. data/rdoc/RubyXL/WorksheetDimensions.html +442 -49
  384. data/rdoc/RubyXL/WorksheetFormatProperties.html +448 -49
  385. data/rdoc/RubyXL/WorksheetProperties.html +442 -49
  386. data/rdoc/RubyXL/WorksheetProtection.html +442 -49
  387. data/rdoc/RubyXL/WorksheetView.html +442 -49
  388. data/rdoc/RubyXL/WorksheetViews.html +442 -49
  389. data/rdoc/RubyXL/XF.html +442 -49
  390. data/rdoc/RubyXL.html +453 -62
  391. data/rdoc/created.rid +28 -28
  392. data/rdoc/css/rdoc.css +1600 -328
  393. data/rdoc/index.html +401 -57
  394. data/rdoc/js/aliki.js +511 -0
  395. data/rdoc/js/bash_highlighter.js +167 -0
  396. data/rdoc/js/c_highlighter.js +299 -0
  397. data/rdoc/js/{search.js → search_controller.js} +16 -7
  398. data/rdoc/js/search_data.js +1 -0
  399. data/rdoc/js/{navigation.js → search_navigation.js} +2 -2
  400. data/rdoc/js/search_ranker.js +239 -0
  401. data/rdoc/js/theme-toggle.js +112 -0
  402. data/rubyXL.gemspec +11 -44
  403. data/spec/lib/cell_spec.rb +1 -1
  404. data/spec/lib/reference_spec.rb +8 -2
  405. metadata +10 -43
  406. data/rdoc/css/fonts.css +0 -167
  407. data/rdoc/fonts/Lato-Light.ttf +0 -0
  408. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  409. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  410. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  411. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  412. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  413. data/rdoc/images/add.png +0 -0
  414. data/rdoc/images/arrow_up.png +0 -0
  415. data/rdoc/images/brick.png +0 -0
  416. data/rdoc/images/brick_link.png +0 -0
  417. data/rdoc/images/bug.png +0 -0
  418. data/rdoc/images/bullet_black.png +0 -0
  419. data/rdoc/images/bullet_toggle_minus.png +0 -0
  420. data/rdoc/images/bullet_toggle_plus.png +0 -0
  421. data/rdoc/images/date.png +0 -0
  422. data/rdoc/images/delete.png +0 -0
  423. data/rdoc/images/find.png +0 -0
  424. data/rdoc/images/loadingAnimation.gif +0 -0
  425. data/rdoc/images/macFFBgHack.png +0 -0
  426. data/rdoc/images/package.png +0 -0
  427. data/rdoc/images/page_green.png +0 -0
  428. data/rdoc/images/page_white_text.png +0 -0
  429. data/rdoc/images/page_white_width.png +0 -0
  430. data/rdoc/images/plugin.png +0 -0
  431. data/rdoc/images/ruby.png +0 -0
  432. data/rdoc/images/tag_blue.png +0 -0
  433. data/rdoc/images/tag_green.png +0 -0
  434. data/rdoc/images/transparent.png +0 -0
  435. data/rdoc/images/wrench.png +0 -0
  436. data/rdoc/images/wrench_orange.png +0 -0
  437. data/rdoc/images/zoom.png +0 -0
  438. data/rdoc/js/darkfish.js +0 -140
  439. data/rdoc/js/navigation.js.gz +0 -0
  440. data/rdoc/js/search_index.js +0 -1
  441. data/rdoc/js/search_index.js.gz +0 -0
  442. data/rdoc/js/searcher.js +0 -267
  443. data/rdoc/js/searcher.js.gz +0 -0
  444. data/rdoc/table_of_contents.html +0 -4253
data/rdoc/css/rdoc.css CHANGED
@@ -1,132 +1,404 @@
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 */
14
+ /* 1. Design System - CSS Variables and Tokens */
10
15
 
11
- /* 1. Variables and Root Styles */
16
+ /* Light Theme (Default) */
12
17
  :root {
13
- --sidebar-width: 300px;
14
- --highlight-color: #cc342d; /* Reddish color for accents and headings */
15
- --secondary-highlight-color: #c83045; /* Darker reddish color for secondary highlights */
16
- --text-color: #505050; /* Dark bluish-grey for text */
17
- --background-color: #fefefe; /* Near white background */
18
- --code-block-background-color: #f6f6f3; /* Slightly darker grey for code blocks */
19
- --link-color: #42405F; /* Dark bluish-grey for links */
20
- --link-hover-color: var(--highlight-color); /* Reddish color on hover */
21
- --border-color: #e0e0e0;; /* General border color */
22
- --source-code-toggle-color: var(--secondary-highlight-color);
23
- --scrollbar-thumb-hover-background: #505050; /* Hover color for scrollbar thumb */
24
- --table-header-background-color: #eceaed;
25
- --table-td-background-color: #f5f4f6;
26
-
27
- /* Font family variables */
28
- --font-primary: 'Segoe UI', 'Verdana', 'Arial', sans-serif;
29
- --font-heading: 'Helvetica', 'Arial', sans-serif;
30
- --font-code: monospace;
31
- }
32
-
33
- /* 2. Global Styles */
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 */
34
230
  body {
35
- background: var(--background-color);
231
+ background: var(--color-background-primary);
36
232
  font-family: var(--font-primary);
37
233
  font-weight: 400;
38
- color: var(--text-color);
39
- line-height: 1.6;
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 */
40
238
 
41
- /* Layout */
42
- display: flex;
43
- flex-direction: column;
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
+ }
244
+
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));
44
248
  min-height: 100vh;
45
- margin: 0;
249
+ }
250
+
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
+ }
46
259
  }
47
260
 
48
261
  /* 3. Typography */
49
- h1 span,
50
- h2 span,
51
- h3 span,
52
- h4 span,
53
- h5 span,
54
- h6 span {
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. */
269
+ }
270
+
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;
285
+ }
286
+
287
+ /* Code block wrapper for copy button */
288
+ .code-block-wrapper {
55
289
  position: relative;
290
+ margin: var(--space-4) 0;
291
+ }
56
292
 
57
- display: none;
58
- padding-left: 1em;
59
- line-height: 0;
60
- vertical-align: baseline;
61
- 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;
62
316
  }
63
317
 
64
- h1 span { top: -1.3em; }
65
- h2 span { top: -1.2em; }
66
- h3 span { top: -1.0em; }
67
- h4 span { top: -0.8em; }
68
- h5 span { top: -0.5em; }
69
- h6 span { top: -0.5em; }
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
+ }
70
326
 
71
- h1:hover span,
72
- h2:hover span,
73
- h3:hover span,
74
- h4:hover span,
75
- h5:hover span,
76
- h6:hover span {
77
- display: inline;
327
+ .copy-code-button:focus {
328
+ outline: none;
329
+ box-shadow: 0 0 0 3px var(--color-accent-subtle);
78
330
  }
79
331
 
80
- h1:target,
81
- h2:target,
82
- h3:target,
83
- h4:target,
84
- h5:target,
85
- h6:target {
86
- margin-left: -10px;
87
- border-left: 10px solid var(--border-color);
88
- scroll-margin-top: 1rem;
332
+ .copy-code-button:active {
333
+ transform: scale(0.92);
334
+ box-shadow: none;
89
335
  }
90
336
 
91
- main .anchor-link:target {
92
- scroll-margin-top: 1rem;
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);
93
347
  }
94
348
 
95
- /* 4. Links */
96
- a {
97
- color: var(--link-color);
98
- transition: color 0.3s ease;
99
- text-decoration: underline;
100
- text-underline-offset: 0.2em; /* Make sure it doesn't overlap with underscores in a method name. */
349
+ .copy-code-button:hover svg {
350
+ color: var(--color-text-primary);
101
351
  }
102
352
 
103
- a:hover {
104
- color: var(--link-hover-color);
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;
105
358
  }
106
359
 
107
- a code:hover {
108
- color: var(--link-hover-color);
360
+ .copy-code-button.copied svg {
361
+ color: var(--color-green-600);
109
362
  }
110
363
 
111
- /* 5. Code and Pre */
112
- code,
113
- pre {
114
- font-family: var(--font-code);
115
- background-color: var(--code-block-background-color);
116
- border: 1px solid var(--border-color);
117
- border-radius: 6px;
118
- padding: 16px;
119
- overflow-x: auto;
120
- font-size: 15px;
121
- line-height: 1.5;
122
- margin: 1em 0;
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
+ }
123
381
  }
124
382
 
383
+ /* Inline code */
125
384
  code {
126
- background-color: var(--code-block-background-color);
127
- padding: 0.1em 0.3em;
128
- border-radius: 3px;
129
- font-size: 85%;
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);
130
402
  }
131
403
 
132
404
  /* Tables */
@@ -138,80 +410,250 @@ table {
138
410
 
139
411
  table tr th, table tr td {
140
412
  padding: 0.2em 0.4em;
141
- border: 1px solid var(--border-color);
413
+ border: 1px solid var(--color-border-default);
142
414
  }
143
415
 
144
416
  table tr th {
145
- background-color: var(--table-header-background-color);
417
+ background-color: var(--color-th-background);
146
418
  }
147
419
 
148
420
  table tr:nth-child(even) td {
149
- background-color: var(--table-td-background-color);
421
+ background-color: var(--color-td-background);
150
422
  }
151
423
 
152
- /* 7. Navigation and Sidebar */
153
- nav {
154
- font-family: var(--font-heading);
155
- font-size: 16px;
156
- border-right: 1px solid var(--border-color);
157
- position: fixed;
424
+ /* 6. Header (Top Navbar) */
425
+ header.top-navbar {
426
+ grid-area: header;
427
+ position: sticky;
158
428
  top: 0;
159
- bottom: 0;
160
- left: 0;
161
- width: var(--sidebar-width);
162
- background: var(--background-color); /* It needs an explicit background for toggling narrow screens */
163
- overflow-y: auto;
164
- z-index: 10;
429
+ z-index: var(--z-fixed);
430
+ background: var(--color-background-primary);
431
+ border-bottom: 1px solid var(--color-border-default);
165
432
  display: flex;
166
- flex-direction: column;
167
- color: var(--text-color);
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;
447
+ }
448
+
449
+ header.top-navbar .navbar-brand:hover {
450
+ color: var(--color-accent-primary);
168
451
  }
169
452
 
170
- nav[hidden] {
453
+ header.top-navbar .navbar-search {
454
+ position: relative;
455
+ flex: 0 1 auto;
456
+ width: var(--layout-search-width);
457
+ }
458
+
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 {
171
468
  display: none;
172
469
  }
173
470
 
174
- nav footer {
175
- padding: 1em;
176
- border-top: 1px solid var(--border-color);
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;
177
492
  }
178
493
 
179
- nav footer a {
180
- color: var(--secondary-highlight-color);
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);
181
499
  }
182
500
 
183
- nav .nav-section {
184
- margin-top: 1em;
185
- padding: 0 1em;
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);
186
505
  }
187
506
 
188
- nav h2, nav h3 {
189
- margin: 0 0 0.5em;
190
- padding: 0.5em 0;
191
- color: var(--highlight-color);
192
- border-bottom: 1px solid var(--border-color);
507
+ .theme-toggle:active {
508
+ transform: scale(0.95);
193
509
  }
194
510
 
195
- nav h2 {
196
- font-size: 1.2em;
511
+ .theme-toggle-icon {
512
+ display: inline-block;
513
+ transition: transform var(--duration-base) var(--ease-out-smooth);
197
514
  }
198
515
 
199
- nav h3,
200
- #table-of-contents-navigation {
201
- font-size: 1em;
516
+ .theme-toggle:hover .theme-toggle-icon {
517
+ transform: rotate(15deg) scale(1.1);
202
518
  }
203
519
 
204
- ol.breadcrumb {
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;
205
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
+ }
206
581
 
207
- padding: 0;
208
- margin: 0 0 1em;
582
+ /* Custom scrollbar for WebKit browsers */
583
+ nav::-webkit-scrollbar {
584
+ width: 6px;
209
585
  }
210
586
 
211
- ol.breadcrumb li {
212
- display: block;
213
- list-style: none;
214
- font-size: 125%;
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
+ }
643
+ }
644
+
645
+ nav .nav-section {
646
+ margin-top: var(--space-6);
647
+ padding: 0 var(--space-6);
648
+ }
649
+
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);
215
657
  }
216
658
 
217
659
  nav ul,
@@ -219,101 +661,277 @@ nav dl,
219
661
  nav p {
220
662
  padding: 0;
221
663
  list-style: none;
222
- margin: 0.5em 0;
664
+ margin: var(--space-3) 0;
223
665
  }
224
666
 
225
667
  nav ul li {
226
- margin-bottom: 0.3em;
668
+ margin-bottom: var(--space-2);
669
+ line-height: var(--line-height-relaxed);
670
+ }
671
+
672
+ nav ul li a {
673
+ transition:
674
+ color var(--transition-fast),
675
+ transform var(--transition-fast),
676
+ padding var(--transition-fast);
677
+ }
678
+
679
+ nav ul li a:hover {
680
+ padding-left: var(--space-1);
227
681
  }
228
682
 
229
683
  nav ul ul {
230
- padding-left: 1em;
684
+ padding-left: var(--space-5);
685
+ margin-top: var(--space-2);
231
686
  }
232
687
 
233
688
  nav ul ul ul {
234
- padding-left: 1em;
689
+ padding-left: var(--space-5);
235
690
  }
236
691
 
237
692
  nav ul ul ul ul {
238
- padding-left: 1em;
693
+ padding-left: var(--space-5);
239
694
  }
240
695
 
241
696
  nav a {
242
- color: var(--link-color);
243
697
  text-decoration: none;
244
698
  }
245
699
 
246
- nav a:hover {
247
- color: var(--link-hover-color);
248
- text-decoration: underline;
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;
709
+ }
710
+
711
+ nav footer {
712
+ padding: var(--space-4);
713
+ border-top: 1px solid var(--color-border-default);
714
+ }
715
+
716
+ nav footer a {
717
+ color: var(--color-accent-hover);
249
718
  }
250
719
 
251
720
  #navigation-toggle {
252
- z-index: 1000;
253
- font-size: 2em;
254
- display: block;
255
- position: fixed;
256
- top: 10px;
257
- left: 20px;
721
+ display: none; /* Hidden by default, shown on mobile */
722
+ }
723
+
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
+ }
749
+ }
750
+
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;
759
+ }
760
+
761
+ nav details::details-content {
762
+ overflow: hidden;
763
+ block-size: 0;
764
+ transition: block-size 200ms ease, content-visibility 200ms ease allow-discrete;
765
+ }
766
+
767
+ nav details[open]::details-content {
768
+ block-size: auto;
769
+ }
770
+
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;
258
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);
259
785
  }
260
786
 
261
- #navigation-toggle[aria-expanded="true"] {
262
- top: 10px;
263
- left: 250px;
787
+ nav .nav-section-header::-webkit-details-marker {
788
+ display: none;
264
789
  }
265
790
 
266
- nav ul li details {
267
- position: relative;
268
- padding-right: 1.5em; /* Add space for the marker on the right */
791
+ nav .nav-section-header:hover {
792
+ color: var(--color-accent-primary);
269
793
  }
270
794
 
271
- nav ul li details > summary {
272
- list-style: none; /* Remove the default marker */
273
- position: relative; /* So that the open/close triangle can position itself absolutely inside */
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);
274
803
  }
275
804
 
276
- nav ul li details > summary::-webkit-details-marker {
277
- display: none; /* Removes the default marker, in Safari 18. */
805
+ nav .nav-section-icon svg {
806
+ width: 100%;
807
+ height: 100%;
278
808
  }
279
809
 
280
- nav ul li details > summary::after {
281
- content: '▶'; /* Unicode right-pointing triangle */
282
- position: absolute;
283
- font-size: 0.8em;
284
- bottom: 0.1em;
285
- margin-left: 0.3em;
286
- transition: transform 0.2s ease;
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;
819
+ }
820
+
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);
830
+ }
831
+
832
+ nav .nav-section-chevron svg {
833
+ width: 100%;
834
+ height: 100%;
835
+ }
836
+
837
+ /* Rotate chevron when open */
838
+ nav .nav-section-collapsible[open] > .nav-section-header .nav-section-chevron {
839
+ transform: rotate(90deg);
840
+ }
841
+
842
+ nav .nav-section-collapsible > ul,
843
+ nav .nav-section-collapsible > dl,
844
+ nav .nav-section-collapsible > p {
845
+ margin-top: 0;
846
+ }
847
+
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
+ }
853
+
854
+ nav .nav-section-collapsible .nav-list .link-list {
855
+ border-left: none;
856
+ margin-left: 0;
857
+ padding-left: var(--space-5);
858
+ }
859
+
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;
869
+ }
870
+
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);
287
893
  }
288
894
 
289
- nav ul li details[open] > summary::after {
290
- transform: rotate(90deg); /* Rotate the triangle when open */
895
+ nav li details:has(.link-list)[open] > summary::after {
896
+ transform: rotate(90deg);
897
+ background-color: var(--color-accent-primary);
291
898
  }
292
899
 
293
- /* 8. Main Content */
900
+ /* 8. Main Content (Center Column) */
294
901
  main {
295
- flex: 1;
296
- display: block;
297
- margin: 3em auto;
298
- padding: 0 2em;
299
- max-width: 800px;
300
- font-size: 16px;
301
- line-height: 1.6;
302
- color: var(--text-color);
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);
303
910
  box-sizing: border-box;
304
911
  }
305
912
 
306
- @media (min-width: 1024px) {
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) {
307
922
  main {
308
- margin-left: var(--sidebar-width);
923
+ padding: var(--space-6) var(--space-4);
924
+ padding-top: var(--space-8);
925
+ width: 100%;
309
926
  }
310
927
 
311
- .table-of-contents main {
312
- margin-left: 20em;
928
+ footer.site-footer {
929
+ padding: var(--space-8) var(--space-4);
313
930
  }
314
931
 
315
- #navigation-toggle {
316
- display: none;
932
+ footer.site-footer .footer-content {
933
+ grid-template-columns: 1fr;
934
+ gap: var(--space-6);
317
935
  }
318
936
  }
319
937
 
@@ -321,7 +939,7 @@ main h1[class] {
321
939
  margin-top: 0;
322
940
  margin-bottom: 1em;
323
941
  font-size: 2.5em;
324
- color: var(--highlight-color);
942
+ color: var(--color-accent-primary);
325
943
  }
326
944
 
327
945
  main h1,
@@ -331,128 +949,146 @@ main h4,
331
949
  main h5,
332
950
  main h6 {
333
951
  font-family: var(--font-heading);
334
- color: var(--highlight-color);
952
+ color: var(--color-accent-primary);
953
+ scroll-margin-top: calc(var(--layout-header-height) + 2rem);
335
954
  }
336
955
 
337
- /* Search */
338
- #search-section {
339
- padding: 1em;
340
- background-color: var(--background-color);
341
- border-bottom: 1px solid var(--border-color);
956
+ /* Heading size hierarchy */
957
+ main h1 {
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);
342
962
  }
343
963
 
344
- #search-field-wrapper {
345
- position: relative;
346
- display: flex;
347
- align-items: center;
964
+ main h2 {
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);
348
970
  }
349
971
 
350
- #search-field {
351
- width: 100%;
352
- padding: 0.5em 1em 0.5em 2.5em;
353
- border: 1px solid var(--border-color);
354
- border-radius: 20px;
355
- font-size: 14px;
356
- outline: none;
357
- transition: border-color 0.3s ease;
358
- color: var(--text-color);
972
+ main h3 {
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);
359
978
  }
360
979
 
361
- #search-field:focus {
362
- border-color: var(--highlight-color);
980
+ main h4 {
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);
363
985
  }
364
986
 
365
- #search-field::placeholder {
366
- color: var(--text-color);
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);
367
992
  }
368
993
 
369
- #search-field-wrapper::before {
370
- content: "\1F50D";
371
- position: absolute;
372
- left: 0.75em;
373
- top: 50%;
374
- transform: translateY(-50%);
375
- font-size: 14px;
376
- color: var(--text-color);
377
- opacity: 0.6;
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;
378
1003
  }
379
1004
 
380
- /* Search Results */
381
- #search-results {
382
- font-family: var(--font-primary);
383
- font-weight: 300;
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;
384
1012
  }
385
1013
 
386
- #search-results .search-match {
387
- font-family: var(--font-heading);
388
- font-weight: normal;
389
- }
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); }
390
1021
 
391
- #search-results .search-selected {
392
- background: var(--code-block-background-color);
393
- border-bottom: 1px solid transparent;
1022
+ .ruby-comment {
1023
+ color: var(--color-neutral-500);
1024
+ font-style: italic;
394
1025
  }
1026
+ .ruby-regexp { color: var(--code-purple); }
1027
+ .ruby-value { color: var(--code-orange); }
1028
+ .ruby-string { color: var(--code-green); }
395
1029
 
396
- #search-results li {
397
- list-style: none;
398
- border-bottom: 1px solid var(--border-color);
399
- margin-bottom: 0.5em;
400
- }
401
-
402
- #search-results li:last-child {
403
- border-bottom: none;
404
- margin-bottom: 0;
405
- }
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); }
406
1037
 
407
- #search-results li p {
408
- padding: 0;
409
- margin: 0.5em;
1038
+ [data-theme="dark"] .ruby-comment {
1039
+ color: var(--color-neutral-400);
1040
+ font-style: italic;
410
1041
  }
411
-
412
- #search-results .search-namespace {
413
- font-weight: bold;
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;
414
1060
  }
415
1061
 
416
- #search-results li em {
417
- background-color: rgba(224, 108, 117, 0.1);
418
- font-style: normal;
419
- }
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); }
420
1068
 
421
- #search-results pre {
422
- margin: 0.5em;
423
- font-family: var(--font-code);
1069
+ .sh-comment {
1070
+ color: var(--code-gray);
1071
+ font-style: italic;
424
1072
  }
425
1073
 
426
- /* Syntax Highlighting - Gruvbox Light Scheme */
427
-
428
- .ruby-constant { color: #AF3A03; } /* Dark Orange */
429
- .ruby-keyword { color: #9D0006; } /* Dark Red */
430
- .ruby-ivar { color: #B57614; } /* Brown */
431
- .ruby-operator { color: #427B58; } /* Dark Teal */
432
- .ruby-identifier { color: #076678; } /* Deep Teal */
433
- .ruby-node { color: #8F3F71; } /* Plum */
434
- .ruby-comment { color: #928374; font-style: italic; } /* Gray */
435
- .ruby-regexp { color: #8F3F71; } /* Plum */
436
- .ruby-value { color: #AF3A03; } /* Dark Orange */
437
- .ruby-string { color: #79740E; } /* Olive */
438
-
439
1074
  /* Emphasis */
440
1075
  em {
441
- text-decoration-color: rgba(52, 48, 64, 0.25);
1076
+ text-decoration-color: var(--color-emphasis-decoration);
442
1077
  text-decoration-line: underline;
443
1078
  text-decoration-style: dotted;
444
1079
  }
445
1080
 
446
1081
  strong,
447
1082
  em {
448
- color: var(--highlight-color);
449
- background-color: rgba(255, 111, 97, 0.1); /* Light red background for emphasis */
1083
+ color: var(--color-accent-primary);
1084
+ background-color: var(--color-emphasis-bg);
450
1085
  }
451
1086
 
452
1087
  /* Paragraphs */
453
1088
  main p {
454
- line-height: 1.5em;
1089
+ line-height: var(--line-height-relaxed);
455
1090
  font-weight: 400;
1091
+ margin-bottom: var(--space-4);
456
1092
  }
457
1093
 
458
1094
  /* Preformatted Text */
@@ -462,17 +1098,21 @@ main pre {
462
1098
  font-size: 0.8em;
463
1099
  }
464
1100
 
1101
+ .code-block-wrapper pre {
1102
+ margin: 0;
1103
+ }
1104
+
465
1105
  /* Horizontal Rules */
466
1106
  main hr {
467
1107
  margin: 1.5em 1em;
468
- border: 2px solid var(--border-color);
1108
+ border: 2px solid var(--color-border-default);
469
1109
  }
470
1110
 
471
1111
  /* Blockquotes */
472
1112
  main blockquote {
473
1113
  margin: 0 2em 1.2em 1.2em;
474
1114
  padding-left: 0.5em;
475
- border-left: 2px solid var(--border-color);
1115
+ border-left: 2px solid var(--color-border-default);
476
1116
  }
477
1117
 
478
1118
  /* Lists */
@@ -486,7 +1126,7 @@ main dl {
486
1126
  }
487
1127
 
488
1128
  main dt {
489
- line-height: 1.5; /* matches `main p` */
1129
+ line-height: 1.5;
490
1130
  font-weight: bold;
491
1131
  }
492
1132
 
@@ -516,62 +1156,128 @@ main dd p:first-child {
516
1156
  main header h2 {
517
1157
  margin-top: 2em;
518
1158
  border-width: 0;
519
- border-top: 4px solid var(--border-color);
1159
+ border-top: 4px solid var(--color-border-default);
520
1160
  font-size: 130%;
521
1161
  }
522
1162
 
523
1163
  main header h3 {
524
1164
  margin: 2em 0 1.5em;
525
1165
  border-width: 0;
526
- border-top: 3px solid var(--border-color);
1166
+ border-top: 3px solid var(--color-border-default);
527
1167
  font-size: 120%;
528
1168
  }
529
1169
 
530
- /* Utility Classes */
531
- .hide { display: none !important; }
532
- .initially-hidden { display: none; }
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);
1179
+ }
533
1180
 
534
- /* Table of Contents */
535
- .table-of-contents ul {
536
- margin: 1em;
537
- list-style: none;
1181
+ main .anchor-link:target {
1182
+ scroll-margin-top: calc(var(--layout-header-height) + 2rem);
538
1183
  }
539
1184
 
540
- .table-of-contents ul ul {
541
- margin-top: 0.25em;
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);
542
1191
  }
543
1192
 
544
- .table-of-contents ul :link,
545
- .table-of-contents ul :visited {
546
- font-size: 16px;
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);
547
1203
  }
548
1204
 
549
- .table-of-contents li {
550
- margin-bottom: 0.25em;
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;
551
1221
  }
552
1222
 
1223
+
1224
+
553
1225
  /* Method Details */
554
1226
  main .method-source-code {
555
1227
  visibility: hidden;
556
1228
  max-height: 0;
557
- overflow: auto;
558
- transition-duration: 200ms;
559
- transition-delay: 0ms;
560
- transition-property: all;
561
- transition-timing-function: ease-in-out;
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;
562
1237
  }
563
1238
 
564
1239
  main .method-source-code pre {
565
- border-color: var(--source-code-toggle-color);
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;
1247
+ }
1248
+
1249
+ main .method-source-code pre::-webkit-scrollbar {
1250
+ width: 6px;
1251
+ height: 6px;
1252
+ }
1253
+
1254
+ main .method-source-code pre::-webkit-scrollbar-track {
1255
+ background: transparent;
1256
+ }
1257
+
1258
+ main .method-source-code pre::-webkit-scrollbar-thumb {
1259
+ background: var(--color-border-default);
1260
+ border-radius: var(--radius-sm);
1261
+ }
1262
+
1263
+ main .method-source-code pre::-webkit-scrollbar-thumb:hover {
1264
+ background: var(--color-border-emphasis);
1265
+ }
1266
+
1267
+ main .method-source-code pre::-webkit-scrollbar-corner {
1268
+ background: transparent;
566
1269
  }
567
1270
 
568
1271
  main .method-source-code.active-menu {
569
1272
  visibility: visible;
570
1273
  max-height: 100vh;
1274
+ overflow: auto;
1275
+ opacity: 1;
1276
+ transform: translateY(0);
571
1277
  }
572
1278
 
573
1279
  main .method-description .method-calls-super {
574
- color: var(--text-color);
1280
+ color: var(--color-text-primary);
575
1281
  font-weight: bold;
576
1282
  }
577
1283
 
@@ -580,44 +1286,80 @@ main .method-detail {
580
1286
  }
581
1287
 
582
1288
  main .method-detail:target {
583
- margin-left: -10px;
584
- border-left: 10px solid var(--border-color);
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);
585
1292
  }
586
1293
 
587
1294
  main .method-header {
588
1295
  display: inline-block;
1296
+ max-width: calc(100% - 6em); /* 6em is the width of the source code toggle */
589
1297
  }
590
1298
 
591
1299
  main .method-heading {
592
1300
  position: relative;
593
1301
  font-family: var(--font-code);
594
- font-size: 110%;
595
- font-weight: bold;
1302
+ font-size: var(--font-size-lg);
1303
+ font-weight: var(--font-weight-semibold);
1304
+ margin-bottom: var(--space-3);
596
1305
  }
597
1306
 
598
- main .method-heading::after {
599
- content: '¶';
600
- position: absolute;
601
- visibility: hidden;
602
- color: var(--highlight-color);
603
- font-size: 0.5em;
1307
+ main .method-heading .method-name {
1308
+ font-weight: var(--font-weight-semibold);
604
1309
  }
605
1310
 
606
- main .method-heading:hover::after {
607
- visibility: visible;
1311
+ main .method-heading .method-args {
1312
+ font-weight: var(--font-weight-normal);
608
1313
  }
609
1314
 
610
1315
  main .method-controls {
611
- line-height: 20px;
612
1316
  float: right;
613
- color: var(--source-code-toggle-color);
1317
+ }
1318
+
1319
+ main .method-controls summary {
1320
+ display: inline-block;
1321
+ line-height: 20px;
1322
+ color: var(--color-accent-primary);
614
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;
1338
+ }
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);
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);
615
1357
  }
616
1358
 
617
1359
  main .method-description,
618
1360
  main .aliases {
619
1361
  margin-top: 0.75em;
620
- color: var(--text-color);
1362
+ color: var(--color-text-primary);
621
1363
  }
622
1364
 
623
1365
  main .aliases {
@@ -627,7 +1369,7 @@ main .aliases {
627
1369
  }
628
1370
 
629
1371
  main .aliases a {
630
- color: var(--secondary-highlight-color);
1372
+ color: var(--color-accent-hover);
631
1373
  }
632
1374
 
633
1375
  main .mixin-from {
@@ -649,27 +1391,19 @@ main .attribute-access-type {
649
1391
  text-transform: uppercase;
650
1392
  }
651
1393
 
652
- /* Responsive Adjustments */
653
- @media (max-width: 480px) {
1394
+ /* Small screen adjustments */
1395
+ @media (width <= 480px) {
654
1396
  nav {
655
- width: 100%;
1397
+ width: 85%;
1398
+ max-width: 320px;
656
1399
  }
657
1400
 
658
1401
  main {
659
- margin: 1em auto;
660
- padding: 0 1em;
1402
+ margin: 0;
1403
+ padding: var(--space-4);
661
1404
  max-width: 100%;
662
1405
  }
663
1406
 
664
- #navigation-toggle {
665
- right: 10px;
666
- left: auto;
667
- }
668
-
669
- #navigation-toggle[aria-expanded="true"] {
670
- left: auto;
671
- }
672
-
673
1407
  table {
674
1408
  display: block;
675
1409
  overflow-x: auto;
@@ -681,3 +1415,541 @@ main .attribute-access-type {
681
1415
  float: none;
682
1416
  }
683
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;
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);
1827
+ font-weight: 300;
1828
+ }
1829
+
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);
1840
+ font-weight: normal;
1841
+ }
1842
+
1843
+ .search-results .search-selected {
1844
+ background: var(--color-code-bg);
1845
+ border-bottom: 1px solid transparent;
1846
+ }
1847
+
1848
+ .search-results li {
1849
+ list-style: none;
1850
+ border-bottom: 1px solid var(--color-border-default);
1851
+ margin-bottom: 0.5em;
1852
+ }
1853
+
1854
+ .search-results li:last-child {
1855
+ border-bottom: none;
1856
+ margin-bottom: 0;
1857
+ }
1858
+
1859
+ .search-results li p {
1860
+ padding: 0;
1861
+ margin: 0.5em;
1862
+ }
1863
+
1864
+ .search-results .search-namespace {
1865
+ font-weight: bold;
1866
+ }
1867
+
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);
1903
+ font-style: normal;
1904
+ }
1905
+
1906
+ .search-results pre {
1907
+ margin: 0.5em;
1908
+ font-family: var(--font-code);
1909
+ }
1910
+
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
+ }
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
+ }