knobs

knobs

every knob and what it does. search finds them by name or value, see the panel.

look and motion

knobwhat it does
color schemelight or dark, in your css and in matchMedia
reduced motionprefers-reduced-motion: reduce
animation speedruns animations at 0.25 or 0.1, or pauses them
contrastprefers-contrast: more
reduced transparencyprefers-reduced-transparency: reduce
text sizethe browser's default font size
text spacingthe wcag 1.4.12 text spacing values
visiona color blindness filter or a blur
replay animations⇧R runs every animation again

locale, place and time

knobwhat it does
localeany language tag and a direction, Intl included
pseudoturns the page's text into [Ŝéţţîñĝš ···]
geolocationa city, your own coordinates, or a route
geo errordenied, unavailable or timeout
time zoneany iana zone, or the geo city's zone
clockjump ahead, pick a date, freeze it, or speed it up

browser and debug

knobwhat it does
onlinethe page reads offline, requests still succeed
connection, save datanavigator.connection reads 2g to 4g, chromium only, no throttling
user agentiphone safari, googlebot, or your own string
requests, storage⇧N and ⇧S show what the page sent and stored
overflowfinds the boxes that scroll the page sideways
outlinesoutlines every element
grab colorthe color of grab's boxes

viewport and device

these put the page in a frame, a real viewport, so media queries and vw follow. see devices.

knobwhat it does
viewport width, heighta size in px
device, orientationa phone, tablet or laptop, turned
posturefolds a foldable
mock, browser, barsthe phone's body and its browser
edge to edgethe page runs under Safari's bars on an iPhone
touch pointerthe mouse acts as a finger
device pixel ratio1, 2 or 3
frame, zoom, matthe frame alone, its zoom, the mat's color

the clock and your server

turn on "send to server" and fetch and XMLHttpRequest calls to the page's own origin carry the clock's time. the first page load does not. read it on your server:

const now = (request: Request) => {
  const header =
    process.env.NODE_ENV === 'development' ? request.headers.get('x-devknobs-now') : null;
  return header ? new Date(header) : new Date();
};

never honor the header in production. any client can send it.