The tokens, type stack, color palettes, and components behind this site — documented so I can re-use them, and so future-me doesn't have to guess.
| Font | Role | Web Sub | License |
|---|---|---|---|
| DM Mono | Display / H1 | DM Mono (same) | Google Fonts — OFL |
| Diatype | Structural | DM Sans | Dinamo — Commercial |
| Monument Grotesk Mono | Metadata | Space Mono | Dinamo — Commercial |
Animated mouse icon with scrolling dot. Fades in after hero animations, fades out on scroll via animation-timeline: scroll(). Used on project heroes and about page.
Hover reveals a gradient overlay with description text and optional meta label. Image scales up slightly and darkens. Used on project page images.

Starts in grayscale, transitions to full color on hover with subtle scale. Optional photo credit appears on hover. Used for about page hero and feature sections.

Experience items lift with accent border scaleY. Skill labels shift right, list opacity increases. Cert pills slide right with arrow reveal.
| Property | Value | Token |
|---|---|---|
| Background | #1A1A1A | --dark-bg |
| Axis | #333 / 0.5px | --dark-border |
| Grid | rgba(255,255,255,0.04) dashed | — |
| Labels | Space Mono 10px / 0.4 opacity | --font-meta |
| Annotations | #E8A87C dashed | --color-annotation |
| Element | Style |
|---|---|
| Basemap | Carto Dark Matter / Mapbox Dark |
| Choropleth | Sequential teal 5-step / quantile |
| Polygon stroke | rgba(255,255,255,0.08) / 0.5px |
| Point markers | #6FCDCD / 4-8px / 0.7 opacity |
| Primary labels | DM Sans 600 12px / #FFF 0.8 |
| Secondary labels | Space Mono 10px / #FFF 0.4 |
// KB Brand Scales — D3.js const seq = d3.scaleLinear() .domain([0,.25,.5,.75,1]) .range(["#E0F5F5","#9CDFDF","#6FCDCD","#4BAFAF","#236363"]); const cat = d3.scaleOrdinal() .range(["#6FCDCD","#8B7FB8","#E8A87C","#E85D75","#95C77E","#F2CC60"]);
# KB Brand — Python from matplotlib.colors import LinearSegmentedColormap KB_SEQ = ["#E0F5F5","#9CDFDF","#6FCDCD","#4BAFAF","#236363"] KB_CAT = ["#6FCDCD","#8B7FB8","#E8A87C","#E85D75","#95C77E","#F2CC60"] kb_cmap = LinearSegmentedColormap.from_list("kb", KB_SEQ)
// ArcGIS Pro RGB // Sequential: 224,245,245 → 156,223,223 → 111,205,205 → 75,175,175 → 35,99,99 // Cat: 111,205,205 | 139,127,184 | 232,168,124 | 232,93,117 | 149,199,126 | 242,204,96
{"sequentialTeal":{"colors":["#E0F5F5","#9CDFDF","#6FCDCD","#4BAFAF","#236363"]},
"mapStyle":{"styleType":"dark"},
"layerDefaults":{"opacity":0.7,"strokeWidth":0.5}}This content was behind the curtain panels.
Hover to see 3D tilt effect with glare overlay. Cards respond to cursor position.