Et par komponenter, håndbyggede af en Jyde.
Intet framework, intet komponentbibliotek — håndskrevet CSS og vanilla JS, samme regel som resten af sitet. Hver af dem herunder genbruger sitets egne design-tokens (den koniske gradient-ring bruger samme teknik som timerne på Live Sessions/Analytics). Hold musen over, træk og klik dig igennem dem.
Fremgangsring
conic-gradient + animérbar @propertySamme donut-ring-mønster som driver nedtællingstimerne på Live Sessions og auto-opdateringsringen på Analytics — en CSS custom property registreret med @property, så browseren kan animere gradient-vinklen direkte uden en JS-animationsløkke.
Segmenteret kontrol
glidende markør, bredde læst fra DOM'enMarkørens bredde og position måles fra selve den knap, den følger — ikke gættet som en procentdel — så den forbliver pixel-præcis, uanset hvordan label-teksten ombrydes.
Notifikationsstak
stablede notifikationer, selv-afvisendeHvert klik stabler en ny notifikation ovenpå den forrige og rydder sig selv efter et par sekunder — klik hurtigt et par gange for at se dem stille sig i kø.
Rigt tooltip
forsinket visning, back-out-easing@media (hover: hover), så det aldrig bliver et dødt tryk-mål på en telefon.
Samme tooltip-sprog som dokumenteret for sitets navigation — fade + skalering med et let overshoot ved indtræden, vises aldrig som et touch-mål.
Kommandopalet
native <dialog>, tastatur-førstBygget på det native <dialog>-element — gratis fokus-indfangning, Escape-for-at-lukke og top-layer-stakning uden at røre en z-index-skala. Prøv tastaturgenvejen, piletaster for at flytte, Enter for at hoppe.
Træk for at omarrangere
pointer events, intet bibliotek- 1 Hærd session-cookies
- 2 Tilføj IP-nøglet drosling
- 3 Udrul analyse-dashboardet
- 4 Skriv ændringsloggen
Rå pointerdown/pointermove-sporing med touch-action: none — virker identisk med mus, touchpad og berøring, intet drag-and-drop-bibliotek. Fuldt tastaturbetjenbar: Tab til et emne, mellemrum for at samle op, piletaster for at flytte, mellemrum eller Escape for at slippe.
Kopiér til udklipsholder
Clipboard API + aria-live bekræftelsecurl -sI https://henrikbr.dk
Bruger navigator.clipboard.writeText() direkte, intet fallback-trick med en skjult tekstboks. Knappens tekst og ikon skifter kortvarigt for at bekræfte kopieringen, og en skærmlæser får samme bekræftelse gennem en skjult aria-live-region, ikke kun det visuelle skift.
Swipe for at fjerne
pointer-events, tærskel + tilbagefjederTræk forbi en tærskel, og kortet flyver væk og nulstilles et øjeblik efter, så du kan prøve igen — slip for tidligt, og det fjedrer tilbage i stedet. Virker identisk med mus, touchpad eller en finger, og Enter fjerner det uden at røre pointeren overhovedet.
Live relativ tid
Intl.RelativeTimeFormat, 600× hastighedFormaterer et tidsstempel på samme måde som browserens indbyggede sprogdata ville gøre — „for 2 minutter siden“, „for en time siden“ — med Intl.RelativeTimeFormat i stedet for en håndskrevet opslagstabel. Sat 600× op i fart her, så du kan se den rulle fra sekunder til minutter til timer, i stedet for at vente i realtid.
Før/efter-slider
clip-path-maskering, træk + tastaturTræk i håndtaget, eller fokusér det og brug piletasterne — Home/End springer direkte til hver ende. Afsløringen er blot en clip-path: inset() på det øverste lag, ingen billedudskiftning eller canvas involveret.
Konfetti-eksplosion
canvas + håndbygget partikelfysik60 firkanter affyres fra knappen med tilfældig hastighed og rotation, hvorefter tyngdekraft, luftmodstand og udtoning overtager hver frame, indtil de er væk. Intet bibliotek — bare et <canvas>, et array af partikler og en requestAnimationFrame-løkke.
Optællende statistik
IntersectionObserver-udløstDet var laboratoriet.
Alt ovenfor er bygget på samme måde som resten af siden — håndskrevet, ingen genveje. Vil du se, hvor de her teknikker faktisk bliver brugt, eller læse mere om personen bag dem, er her, du skal videre hen.