diff --git a/Documentation/UIKit.md b/Documentation/UIKit.md
index 58a57ab..60a34a0 100644
--- a/Documentation/UIKit.md
+++ b/Documentation/UIKit.md
@@ -229,7 +229,210 @@ stack.addArrangedSubview(row3)
## Views & Controls
-
+
+UIButton — per-state accessors, all-state setters
+
+### Per-state properties
+`imageForNormal` / `imageForHighlighted` / `imageForSelected` / `imageForDisabled`,
+`titleForNormal` / `…Highlighted` / `…Selected` / `…Disabled`,
+`titleColorForNormal` / `…Highlighted` / `…Selected` / `…Disabled` — get/set
+shortcuts for the matching `UIControl.State` (also `@IBInspectable`).
+
+```swift
+button.titleForNormal = "Save"
+button.titleColorForDisabled = .tertiaryLabel
+```
+
+### `func setTitleForAllStates(_:)` / `func setTitleColorForAllStates(_:)` / `func setImageForAllStates(_:)`
+Apply one value to `.normal`, `.selected`, `.highlighted`, `.disabled` at once.
+
+```swift
+button.setTitleColorForAllStates(.white)
+```
+
+### `func centerTextAndImage(spacing: CGFloat)`
+Balance title/image edge insets so text + icon sit centred with `spacing` between them.
+
+```swift
+button.centerTextAndImage(spacing: 8)
+```
+
+
+
+
+UILabel
+
+### `func lineNumbers() -> Int`
+Rendered line count at the current width.
+
+```swift
+if bodyLabel.lineNumbers() > 3 { showMoreButton() }
+```
+
+### `var getEstimatedHeight: CGFloat`
+Height the label would need to show its full text/attributed text unclipped.
+
+
+
+
+UITextField
+
+### `var placeholderColor: UIColor`
+Get/set the placeholder text colour (rebuilds `attributedPlaceholder`; setter is a
+no-op if no placeholder text is set).
+
+```swift
+field.placeholder = "Email"
+field.placeholderColor = .secondaryLabel
+```
+
+### `func addPaddingLeft(_ padding: CGFloat)`
+Inset the text from the left with an empty spacer view.
+
+### `func addPaddingLeftIcon(_ image: UIImage, padding: CGFloat)`
+Left view = an icon plus trailing padding.
+
+```swift
+field.addPaddingLeftIcon(UIImage(systemName: "magnifyingglass")!, padding: 8)
+```
+
+
+
+
+UIImageView (@MainActor)
+
+### `func changeColorOfImage(_ color: UIColor, image: UIImage?) -> UIImageView`
+Set a template-rendered image tinted to `color`; returns `self`.
+
+```swift
+iconView.changeColorOfImage(.systemBlue, image: UIImage(named: "star"))
+```
+
+### `var encodeToBase64: String?`
+JPEG (quality 0.6) of the current image as a Base64 string.
+
+### `func addAspectRatioConstraint()` / `func removeAspectRatioConstraint()`
+Add / remove a width-to-height constraint matching the current image's ratio.
+
+```swift
+photoView.image = photo
+photoView.addAspectRatioConstraint()
+```
+
+
+
+
+UIImage — recolour, resize, thumbnails, masks, init
+
+### `func imageWithColor(color: UIColor) -> UIImage` / `func tintImage(color: UIColor) -> UIImage`
+Return a copy filled / tinted with `color` (keeps the alpha shape).
+
+```swift
+let redIcon = icon.tintImage(color: .systemRed)
+```
+
+### `func backgroundColorTransparent(initialColor: UIColor, finalColor: UIColor) -> UIImage?`
+Make pixels in a colour range transparent.
+
+### `class func outlinedEllipse(size: CGSize, color: UIColor, lineWidth: CGFloat = 1) -> UIImage?`
+Generate a stroked-ellipse image.
+
+```swift
+UIImage.outlinedEllipse(size: CGSize(width: 24, height: 24), color: .label)
+```
+
+### `func resizeImage(newWidth: CGFloat) -> UIImage`
+Scale to `newWidth`, keeping the aspect ratio.
+
+### `func createThumbnail(_ maxPixelSize: UInt) -> UIImage`
+Fast down-sampled thumbnail via `CGImageSource`.
+
+```swift
+let thumb = fullImage.createThumbnail(200)
+```
+
+### `func maskWithAlphaImage(maskImage: UIImage) -> UIImage`
+Use another image's alpha as a mask.
+
+### `func isAnimated() -> Bool`
+Whether the image has more than one frame.
+
+### `init?(base64String: String, scale: CGFloat = 1)`
+Decode a Base64 string to an image.
+
+### `init(view: UIView)` — *`@MainActor`*
+Rasterise a view into an image.
+
+```swift
+let snapshot = UIImage(view: cardView)
+```
+
+
+
+
+UIColor — hex, components
+
+### `convenience init(hex: String)`
+Parse `#RGB`, `#RGBA`, `#RRGGBB`, or `#RRGGBBAA` (with or without `#`).
+
+```swift
+view.backgroundColor = UIColor(hex: "#1E88E5")
+UIColor(hex: "FF0000CC") // red at 80% alpha
+```
+
+### `var hexString: String?`
+`#RRGGBB` (or `#RRGGBBAA` when alpha < 1).
+
+### `var redValue` / `var greenValue` / `var blueValue` / `var alphaValue`
+Individual channel values (`CGFloat`, via `CIColor`).
+
+```swift
+UIColor.systemBlue.redValue // 0.0…1.0
+```
+
+
+
+
+UIScrollView — snapshot, visible rect, paged scrolling
+
+### `var snapshot: UIImage?`
+Image of the **entire** content size (not just the visible part) — works on
+`UITableView` / `UICollectionView` too.
+
+### `var visibleRect: CGRect`
+The currently visible content region.
+
+### `var offsetInPage: CGFloat`
+Fractional position within the current page height (`0.0`…`1.0`).
+
+### `func scrollUp(animated:)` / `scrollDown(animated:)` / `scrollLeft(animated:)` / `scrollRight(animated:)`
+Move one page (respects `isPagingEnabled`). `animated` defaults to `true`.
+
+```swift
+nextButton.onTap = { scrollView.scrollRight() }
+```
+
+### `enum orientation`
+`horizontal` / `vertical` — helper enum used by scroll utilities.
+
+
+
+
+UITapGestureRecognizer
+
+### `func didTapAttributedTextInLabel(label: UILabel, textToTouch: String) -> Bool`
+Whether the tap landed on a given substring of a label's attributed text — for
+making part of a label tappable.
+
+```swift
+@objc func handleTap(_ g: UITapGestureRecognizer) {
+ if g.didTapAttributedTextInLabel(label: termsLabel, textToTouch: "Terms of Use") {
+ openTerms()
+ }
+}
+```
+
+
## Navigation & Controllers