• Articles
  • Lab
  • Talks

Lab

Demos and experiments pushing the topics I love most.

No experiments in that topic yet.

  • Jul 2026
    The Tooltip That Won't Fall Off

    Pinning a menu or tooltip to a button used to mean JavaScript. CSS anchor positioning does it instead: tether with anchor(), place with position-area, size with anchor-size(), and let position-try flip it at an edge.

    CSSNo JavaScript
  • Jul 2026
    Two flat colors make a portrait

    A grayscale photo plus two flat colors, blended in CSS, make a two-ink duotone. multiply takes the highlights, screen takes the shadows, and the pickers let you re-ink it live.

    CSSColor
  • Jul 2026
    Stagger Without the Index Dance

    Staggering a list used to mean stamping --i:0, --i:1, --i:2 onto every child. sibling-index() gives you that number for free, so the animation-delay computes itself. No inline styles, no JavaScript.

    CSSAnimationNo JavaScript
  • Jul 2026
    Relative Color Syntax Playground

    Derive a whole component's states from one color token by pulling its channels out and doing math on them. Drag one hue, watch hover, active, border, and ring re-theme live.

    CSSColorrelative color syntaxDesign Tokens
  • May 2026
    Mano Loca

    A 90s sticky hand toy built with Verlet integration. Drag the handle or the hand: it sticks to walls, stretches slime threads when pulled off, and vibrates on impact.

    CanvasPhysicsVerletCreative CodingInteraction
  • Apr 2026
    HTML in Canvas

    The first native API that draws real HTML into a canvas context. Not a screenshot, not a workaround. Documenting what I've tried, what surprised me, and why this one matters.

    CanvasBrowser APIsCreative CodingWebGL
  • Apr 2026
    @property Animator

    Register a custom property with a type and the browser can interpolate it. Without it, custom properties are untyped strings: transitions and keyframes have no effect on them.

    CSSAnimationCustom PropertiesNo JavaScript
  • Apr 2026
    Easing Explorer

    A quick reference for the four easing curves in the motion token system, visualised side by side so the differences are immediately readable.

    MotionCSSDesign Tokens
  • Apr 2026
    oklch Explorer

    Interactive L, C, H sliders and a hue uniformity comparison: the parts of oklch that don't click until you can touch them.

    CSSColoroklchDesign Tokens
  • Apr 2026
    Variable Font Scroll

    Variable font axes are animatable CSS properties, which means animation-timeline can drive font weight, letter-spacing, and more directly from scroll position.

    CSSAnimationScrollVariable FontsNo JavaScript
  • Apr 2026
    Spring Physics in Pure CSS

    How far can you push linear() easing before you actually need Framer Motion? Generating spring curves from a physics equation, no JS at runtime.

    CSSAnimationMotion
  • Apr 2026
    Liquid Glass Refraction

    Trying to reproduce Apple's liquid glass effect using only SVG filters. Documenting what works, what breaks, and why it's harder than it looks.

    SVGCSSFilters