Custom CSS: what you can style

NX1 Pro lets you write your own style rules onto your start page. So that this is more than an empty text box, there are stable names to aim at — all of them are listed here.

Your rules stay on your device. They are never synced, and never travel with a start page you hand to someone else.

Custom CSS is part of NX1 Pro.

Where to type it

  1. Open a new tab and click the gear in the top right.
  2. Go to “Advanced”, then “Custom CSS”.
  3. Write your rules into the field and click “Apply”.

The complete list

Every entry is a promise: these names are chosen to stay. A test in the build checks on every change that they still exist — if one disappears, the build breaks, not your start page.

Page & background

Name What it is
.nx1-page The whole start page — the outermost element everything else sits in .nx1-page { font-family: Georgia, serif; }
.nx1-wallpaper The wallpaper layer (photo, pattern, flat colour or voxel art) .nx1-wallpaper { filter: grayscale(1); }
.nx1-scrim The darkening veil drawn over busy wallpapers to keep text readable .nx1-scrim { opacity: 0.4; }
.nx1-aurora-veil The drifting accent-coloured veil (appears with the Gold unlock) .nx1-aurora-veil { display: none; }

Header

Name What it is
.nx1-header The top bar: logo on the left, area pills on the right .nx1-header { margin-bottom: 2rem; }
.nx1-logo The NX1 wordmark, or a partner space’s own logo .nx1-logo { opacity: 0.5; }
.nx1-areanav The row of area pills and the buttons at its end .nx1-areanav { justify-content: center; }
.nx1-areapill One area pill in that row .nx1-areapill { text-transform: uppercase; letter-spacing: 0.06em; }
.nx1-chrome-btn guarded The round header buttons: trophies, account, settings .nx1-chrome-btn { border-color: currentColor; }

Search

Name What it is
.nx1-search The search form — set its width here .nx1-search { max-width: 34rem; }
.nx1-searchpill The rounded bar itself: border, radius, padding .nx1-searchpill { border-radius: 8px; }
.nx1-searchinput The text field you type into .nx1-searchinput { font-size: 18px; }
.nx1-searchgo The submit button at the end of the bar .nx1-searchgo { border-radius: 6px; }

Tiles

Name What it is
.nx1-tilegrid The grid holding the tiles — override the column rule here .nx1-tilegrid { grid-template-columns: repeat(4, 1fr) !important; }
.nx1-tilebox One tile or folder button (links and folders share it) .nx1-tilebox { border-radius: 2px; }
.nx1-tilelabel The name printed under a tile .nx1-tilelabel { font-weight: 700; }
.nx1-bookmarkbar The row of browser bookmarks along the top .nx1-bookmarkbar { opacity: 0.6; }

Widgets

Name What it is
.nx1-widget One widget cell — weather, sport, notes, news and every other box .nx1-widget { border-radius: 4px; overflow: hidden; }
.nx1-boxhead The header row every widget wears .nx1-boxhead { border-bottom: 1px solid currentColor; padding-bottom: 4px; }
.nx1-boxtitle The title text inside that header .nx1-boxtitle { text-transform: uppercase; }

Dialogs

Name What it is
.nx1-modal A dialog panel (settings, folders, account — including this one) .nx1-modal { border-radius: 6px; }
.nx1-modal-veil The blurred layer behind an open dialog .nx1-modal-veil { backdrop-filter: none; }

Colours & sizes

Name What it is
--accent !important The accent colour, as a hex value — buttons, rings, highlights :root { --accent: #ff7a18 !important; }
--accent-rgb !important The same accent as space-separated RGB channels — keep it in step with --accent :root { --accent-rgb: 255 122 24 !important; }
--fg !important Foreground/text colour as RGB channels :root { --fg: 240 240 245 !important; }
--bg !important Page background colour, as a hex value (visible where no wallpaper covers it) :root { --bg: #101018 !important; }
--surface !important Base colour of every raised box, as RGB channels :root { --surface: 30 30 40 !important; }
--box The fill of tiles, folders and widget boxes — raise the alpha to kill the glass look :root { --box: rgb(var(--surface)); }
--box-quiet The quieter fill for secondary and nested boxes :root { --box-quiet: rgb(var(--surface) / 0.35); }
--ui-border The hairline around interactive surfaces :root { --ui-border: rgb(var(--fg) / 0.6); }
--tile-size Footprint of one tile — folders and standalone icons share it :root { --tile-size: 110px; }
--tile-cols Upper bound on tile columns (the grid may use fewer to avoid overlap) :root { --tile-cols: 5; }
--label-size !important Font size of the tile labels :root { --label-size: 15px !important; }
--label-shadow The shadow that keeps labels legible over a photo — none removes it :root { --label-shadow: none; }
--wallpaper-blur !important Blur applied to the wallpaper :root { --wallpaper-blur: 8px !important; }
--wallpaper-dim !important How far the scrim darkens the wallpaper, 0 to 1 :root { --wallpaper-dim: 0.65 !important; }

When you need !important

Some variables are written straight onto the page element on every render — the accent, the label size and the wallpaper blur among them. An inline value like that beats any normal rule; only !important gets past it. Every affected entry is marked in the list above, and the examples already carry it.

Three ready-made examples

Square instead of round

Takes the rounding off tiles, search bar and widgets — the fastest route to a different overall feel.

.nx1-tilebox { border-radius: 2px; }
.nx1-searchpill { border-radius: 4px; }
.nx1-widget { border-radius: 4px; overflow: hidden; }

Calmer background, clearer boxes

Darkens the picture further and makes the boxes opaque instead of translucent.

:root {
  --wallpaper-dim: 0.7 !important;
  --box: rgb(var(--surface));
  --label-shadow: none;
}

Big tiles, fewer columns

For a wide screen where eight columns look lost.

:root {
  --tile-size: 120px;
  --tile-cols: 5;
  --label-size: 15px !important;
}

What NX1 filters out

Checking is done with the browser’s own CSS parser, not with a text search — comments and escapes get you nowhere. The dialog tells you afterwards how many rules were removed.

  • Any address other than data: — an image or font from a foreign server would reveal when you open your tab, and is the usual channel for reading values out through attribute selectors.
  • @import, for the same reason: it pulls in a foreign file.
  • @font-face with a foreign source.

You cannot lock yourself out

After your rules, NX1 installs a guard that keeps the gear visible and clickable, whatever you write. Colour and border still give way; it simply cannot disappear. And the dialog has a switch that turns your CSS off temporarily without deleting it.

Missing a hook?

If you want to style something that has no name here, write to us — the list grows with what people actually want to touch. Do not send your rules; we only need to know which spot you mean.

Send a wish

FAQ

Is my CSS synced to my other devices?

No. It lives only on the device you type it into. That is deliberate: style rules that travel between users could be used to fake a system dialog.

Does my CSS travel when I share a start page?

No. Sharing carries the content of the start page only. What a shared sheet may bring along in terms of styling is a fixed schema of colour values — never free-form rules.

Can I use my own fonts?

Only fonts already installed on the device — just name them in font-family. Loading a font from a foreign address is blocked, because it would tell your font provider when you open a tab.

What if I break the page?

The gear stays reachable at all times. From there you can switch your CSS off temporarily or remove it entirely.

Does this apply to the web version too?

Yes. The extension and the web app share the same surface, and therefore the same names.