Kunsthalle Nedre / field notes

How to build a room around a single look.

The concept

Kunsthalle Nedre is imagined as a below-street one-room gallery in Oslo. The site borrows its central discipline: no programme carousel, no wall of art, no urgent call to action. The present work arrives in a large, specific silence.

Every section changes the balance of the page instead of adding decoration. Information is placed at the edge of a field, as though the room had made space for it.

The signature technique

The work is a self-hosted SVG, so there is no remote image dependency. Its paper is built from a nearly invisible noise field; the graphite routes take a restrained displacement, while the ash trace stays precise. The reveal waits for both a successful load and viewport entry. On a fine pointer, its factual caption is the only element that follows the visitor—there is no parallax, scaling, or decorative cursor effect.

const revealImage = () => {
  if (imageReady && workInView) image.classList.add('is-seen');
};

image.addEventListener('load', () => {
  imageReady = true;
  revealImage();
}, { once:true });

const scheduleCaption = (event) => {
  if (!captionEnabled()) return;
  x = event.clientX;
  y = event.clientY;
  if (!frame) frame = requestAnimationFrame(placeCaption);
};

Palette + type

Three tones carry the whole system: gallery white for the room, near-black for what must be read, and a warm grey for a single quiet trace in the work. IBM Plex Sans is used at one weight in two sizes: the reading voice and the small, widely tracked label.

GALLERY WHITE
#FCFCFA
INK
#0A0A0A
WARM GREY
#8C8880
One work. One room.IBM Plex Sans, Arial, sans-serif / 400 / labels at .19em

Three passes

Pass 1 — correctness

  • The SVG reveal now waits for a successful image load as well as viewport entry; a failed load restores the image’s normal fallback visibility instead of leaving an invisible box.
  • The cursor caption is now bounded to the viewport, is cancelled and hidden when the tab is hidden or the work leaves view, and stops responding when reduced motion or a coarse pointer is active.
  • Raised the smallest reading and label text to 12px, removed warm-grey body copy that fell below normal-text contrast, and made footer links at least 44 × 44px with a stronger visible focus ring.
  • Made swatches wrap safely and retained a horizontally scrollable code block only, so the guide has room to remain within a 390px viewport.

Pass 2 — design depth

  • Repeated left-label/right-copy sections: the programme is now a field of staggered events with its label turned to the room’s far edge; the room note and visit information retain distinct anchors rather than repeating the same column rhythm.
  • Timid large type: the reading size was raised, tightened deliberately, and given text-wrap: pretty; the hero is set in two intentional lines so its final phrase cannot become a stranded word.
  • An artwork placed too safely: the work now sits in an asymmetric three-part field with a measured shift into its surrounding space. The factual caption remains the sole interaction, but its fade was removed so only the artwork itself earns motion through the two-second reveal.

Pass 3 — complexify

  • A second reason to linger: added the room measure below the programme. Three deliberate presses make a single ink marker travel along a hairline and reveal observations from the room; the fourth press reaches a clear “enough” state, with an explicit way to begin again. It works by keyboard, announces each observation, and stays still when motion is reduced.
  • A more truthful work: rebuilt the drawing’s paper and marks as SVG material rather than a sterile diagram: an extremely light rag grain sits under a broken ash trace, while the graphite paths carry only a small, controlled roughness. The texture remains almost imperceptible until the visitor is close.
  • Final readiness: added the page-specific Open Graph metadata, retained the early JavaScript loading gate for the two-second artwork reveal, and made the new register useful without JavaScript. The last copy pass tightened the room’s language and kept every small label at a readable contrast.