OVERSCANUI KIT
no button at all a worn bezel with weight channels do not converge zero depth instrumented, full of smoke a field of real characters a camera looking out additive, so no shadow hairlines, no new shader no raster, so no scanlines

A forecast as the chance of each outcome, with no line through the middle. The measured history is a line because it was measured, and it stops at NOW. Past it the projection is bands of equal probability, 10% each out to 90%, darkest at the centre, and no median, mean or mode is drawn through them: a central line is what readers look at instead of the spread. The outermost band has no outline and the space past it is labelled with what it holds, 5% above and 5% below, so the edge of the shading never reads as the edge of what can happen. Skew is kept, not mirrored. A step with no forecast, or too few runs to place a 5th percentile, is a gap, and the fan is not bridged across it.

demo/fan.html, from this page
import 'overscan'
import 'overscan/overscan.css'

<ov-fan
  src="models/fan-price.json"
  unit="%"
  label="CPI 12M"
></ov-fan>
two-piece normal, risk leaning up
from 400 runs an hour
one hour had 24 runs: a gap
a median handed in, not drawn
two pairs missing: bands of 20%
the author's axis cuts the fan
issued 26 hours ago
variation: src="models/fan-load.json" unit="MW" label="FEEDER 7"
import 'overscan'
import 'overscan/overscan.css'

<ov-fan
  src="models/fan-load.json"
  unit="MW"
  label="FEEDER 7"
></ov-fan>
terminal
variation: src="models/fan-thin.json" unit="MW" label="FEEDER 7"
import 'overscan'
import 'overscan/overscan.css'

<ov-fan
  src="models/fan-thin.json"
  unit="MW"
  label="FEEDER 7"
></ov-fan>
industrial
variation: src="models/fan-median.json"
import 'overscan'
import 'overscan/overscan.css'

<ov-fan
  src="models/fan-median.json"
  unit="%"
></ov-fan>
cyber
antiseptic
esper
neo
machina
holo
aegis
vector