← demo// demo/moderne-web

Ting nettleseren kan i 2026 — uten et eneste JS-bibliotek

Alt under er ren HTML og CSS, i tillegg til stedene som eksplisitt sier "JS" — ingen React-komponent, ingen animasjonsbibliotek, ingen polyfill. Naviger mellom demosidene og se View Transitions i praksis.

View Transitions

Erstatter: React/Vue route-transition-biblioteker.

Navigasjonen mellom /demo/*-sidene på denne underdelen av siden er allerede en visningsovergang (<ClientRouter />fra astro:transitions) — gå tilbake til demo-oversikten og legg merke til at siden ikke blinker. Under er samme API brukt uten navigasjon, via document.startViewTransition():

A

Scroll-drevne animasjoner

Erstatter: ScrollTrigger/GSAP, Intersection Observer-rigger.

animation-timeline: scroll() binder en animasjon direkte til rullefeltet — ingen scroll-lytter i JS.

Denne kortet toner inn når du ruller forbi (animation-timeline: view()).

light-dark()

Erstatter: to separate fargepaletter + en JS-klasse-bytter.

Én fargeverdi, to modus. Bryteren under endrer kun denne boksens color-scheme.

light-dark(#fafaf8, #1b1c1e) som bakgrunn, samme regel begge veier.

Container queries

Erstatter: JS-basert ResizeObserver-layout.

Kortet under legger om layout basert på sin egen bredde, ikke vindusbredden. Dra i håndtaket.

TjenestekortLayout følger kortets egen breddekontekst (@container).
↔

:has()

Erstatter: JS som setter en klasse på en forelder.

Raden under farges av CSS alene når avkrysningsboksen i den er merket.

text-wrap: balance

Erstatter: manuelle <br>-plasseringer i overskrifter.

normal

Programvare som snakker med maskiner og infrastruktur

balance

Programvare som snakker med maskiner og infrastruktur

Popover API

Erstatter: en tooltip-/dropdown-biblioteklast.

Native popover — lukkes med Escape, klikk utenfor, eller egen knapp. Ingen z-index-krig.

<dialog>

Erstatter: en modal-komponent fra et UI-bibliotek.

Native modal med fokusfelle og ::backdrop gratis.

@starting-style

Erstatter: en enter/exit-animasjon fra et JS-animasjonsbibliotek.

Denne glir og toner inn fra display: none — ingen JS styrer animasjonen.

color-mix()

Erstatter: en Sass-funksjon eller en forhåndsberegnet fargepalett.

0%
25%
50%
75%
100%
// og i selve CMS-et

Dette får du i EmDash som WordPress ikke har

  • Sandboxede plugins som må be om tilgang til hooks, lagring og API-ruter — ikke fri tilgang til hele databasen
  • Passkey-innlogging uten passord, ingen brute-force-overflate på /wp-login.php
  • Innhold lagret som Portable Text — strukturerte blokker, ikke en HTML-suppe med inline stiler
  • Agent-/MCP-redigering: en KI-assistent kan lese og endre innhold gjennom samme API-et admin-UI-et bruker
  • Ingen PHP, ingen opcache å varme, ingen plugin-oppdateringer å følge med på
  • Samme kodebase kjører på Cloudflare Workers eller en vanlig Node-server — ingen separat hosting-vurdering