Skip to content

Borders

Border utilities draw borders, colour them, change their style and round corners. Widths and radii come from token scales, and colours come from theme tokens, so borders follow the active theme and can be retuned in one place.

  • Width draws the border. border, border-2 and the side classes set the width, a solid style and the --nu-border-regular colour in one class. Colour and style classes only change a border that is already drawn.
  • Tokens. Widths output var(--nu-border-width-{key}) and radii output var(--nu-radius-{key}).
  • Logical sides. s and e mean the inline start and end sides, which swap in right-to-left layouts.
Part Meaning Examples
border, border-{width} All sides border, border-2
t, r, b, l Top, right, bottom, left (physical) border-t, border-l-4
s, e Inline start, inline end (logical) border-s, border-e-2
x, y Left and right, top and bottom border-x, border-y-2
border-{colour} Border colour border-danger, border-strong
border-{style} Border style border-dashed
rounded, rounded-{key} Corner radius rounded, rounded-lg, rounded-s-md

border-x and border-y are physical: border-x sets the left and right borders in both directions.

The width scale is generated from the compiled core build.

KeyTokenValue
0--nu-border-width-00px
1--nu-border-width-11px
2--nu-border-width-22px
4--nu-border-width-44px
8--nu-border-width-88px

border is the same as border-1. border-0 sets the width to zero and leaves style and colour alone.

border
border-2
border-4
border-8
<div class="flex wrap gap-4">
<div class="border p-3 rounded">border</div>
<div class="border-2 p-3 rounded">border-2</div>
<div class="border-4 p-3 rounded">border-4</div>
<div class="border-8 p-3 rounded">border-8</div>
</div>
border-t-2
border-b-2
border-x-2
border-y-2
<div class="flex wrap gap-4">
<div class="border-t-2 p-3">border-t-2</div>
<div class="border-b-2 p-3">border-b-2</div>
<div class="border-x-2 p-3">border-x-2</div>
<div class="border-y-2 p-3">border-y-2</div>
</div>

border-s and border-e set border-inline-start and border-inline-end. The same markup is rendered left to right and right to left: the logical accent moves to the start side, the physical one stays on the left.

LTR
border-s-4: start side
border-l-4: always left
RTL
border-s-4: start side
border-l-4: always left
<div class="space-y-2">
<div class="border-s-4 border-brand ps-3 py-2">border-s-4: start side</div>
<div class="border-l-4 border-brand ps-3 py-2">border-l-4: always left</div>
</div>

A colour class sets border-color only. Combine it with a width class, which draws the border.

Class Colour Changes with the theme
border-regular, border-strong Default and stronger edges Yes
border-control, border-control-hover Form control edges, darker for 3:1 contrast Yes
border-brand, border-danger, border-warning, border-success, border-info --nu-{role} Yes
border-error Alias of border-danger Yes
border-gray, border-red, border-blue, border-green, border-yellow, border-purple, border-pink --nu-{hue}-500 No
border-{name}-{stop} --nu-{name}-{stop}, stops 50 to 950, for roles and hues No
border-black, border-white, border-transparent Basic colours No
regular
strong
control
brand
danger
success
purple
purple-300
<div class="flex wrap gap-3">
<div class="border-2 border-regular p-3 rounded">regular</div>
<div class="border-2 border-strong p-3 rounded">strong</div>
<div class="border-2 border-control p-3 rounded">control</div>
<div class="border-2 border-brand p-3 rounded">brand</div>
<div class="border-2 border-danger p-3 rounded">danger</div>
<div class="border-2 border-success p-3 rounded">success</div>
<div class="border-2 border-purple p-3 rounded">purple</div>
<div class="border-2 border-purple-300 p-3 rounded">purple-300</div>
</div>

The theme border tokens, generated from the compiled core build (light theme values):

KeyTokenValue
regular--nu-border-regular#d3d5d9
strong--nu-border-strongvar(--nu-gray-400)
control--nu-border-controlvar(--nu-gray-500)
control-hover--nu-border-control-hovervar(--nu-gray-600)
focus--nu-border-focusvar(--nu-brand-600)
focus-width--nu-border-focus-width2px
focus-offset--nu-border-focus-offset2px

--nu-border-focus colours the focus ring, which core applies through outline, not border. There is no border-focus class; use border-color(focus) or token(border-focus) when you need it.

Role state words (danger-hover, brand-active, danger-border) have no classes. Use them through border-color() or token().

Every border class sets its style through the internal custom property --nu-border-style. A style class (border-solid, border-dashed, border-dotted, border-double, border-none) changes that property, so it restyles whichever borders the element already draws, on any side.

border-2 border-dashed
border-2 border-dotted
border-4 border-double
border-t-2 border-dashed
<div class="flex wrap gap-4">
<div class="border-2 border-dashed p-3 rounded">border-2 border-dashed</div>
<div class="border-2 border-dotted p-3 rounded">border-2 border-dotted</div>
<div class="border-4 border-double p-3 rounded">border-4 border-double</div>
<div class="border-t-2 border-dashed p-3">border-t-2 border-dashed</div>
</div>

border-t border-dashed gives a dashed top border only: the other sides have no width, so the style has nothing else to draw. Style classes are emitted after every width class, responsive ones included, so a width class never resets the style.

In SCSS, pass the style as the second argument of border() or a side mixin, or include border-style() after the border mixin. border-style() on its own draws nothing.

KeyTokenValuePixels
xs--nu-radius-xs0.25rem4px
sm--nu-radius-sm0.375rem6px
md--nu-radius-md0.5rem8px
lg--nu-radius-lg0.75rem12px
xl--nu-radius-xl1rem16px
2xl--nu-radius-2xl1.25rem20px
full--nu-radius-full99in
none--nu-radius-none00px

rounded uses the md radius. square removes rounding (none) and pill rounds fully (full), for badges and pill buttons.

square
rounded-sm
rounded
rounded-xl
pill
<div class="flex wrap gap-3">
<div class="square border p-3">square</div>
<div class="rounded-sm border p-3">rounded-sm</div>
<div class="rounded border p-3">rounded</div>
<div class="rounded-xl border p-3">rounded-xl</div>
<div class="pill border px-4 py-2">pill</div>
</div>
Classes Corners
rounded-t-*, rounded-r-*, rounded-b-*, rounded-l-* Both corners of one physical side
rounded-tl-*, rounded-tr-*, rounded-br-*, rounded-bl-* One physical corner
rounded-s-*, rounded-e-* Both corners of the inline start or end side (logical)
rounded-ss-*, rounded-se-*, rounded-es-*, rounded-ee-* One logical corner: block start or end, then inline start or end

Side and corner classes always take a key (rounded-s-lg); only rounded has a bare form.

LTR
rounded-s-xl
rounded-e-xl
rounded-ss-xl
rounded-tl-xl
RTL
rounded-s-xl
rounded-e-xl
rounded-ss-xl
rounded-tl-xl
<div class="flex gap-2">
<div class="rounded-s-xl bg-brand-subtle p-3">rounded-s-xl</div>
<div class="rounded-e-xl bg-brand-subtle p-3">rounded-e-xl</div>
<div class="rounded-ss-xl bg-alternate p-3">rounded-ss-xl</div>
<div class="rounded-tl-xl bg-alternate p-3">rounded-tl-xl</div>
</div>
Variant Classes
hover:, focus:, active:, group-hover: Width (hover:border-2), colour (focus:border-brand) and style (hover:border-dashed)

State width classes change the width only, so the element keeps its style and colour. Side widths and radius classes have no state variants.

Hover me
<div class="flex wrap gap-3">
<input class="border border-control focus:border-brand rounded px-3 py-2" placeholder="Focus me" />
<div class="border-2 border-dashed hover:border-solid hover:border-brand p-3 rounded">Hover me</div>
</div>

These classes have responsive variants with an @{breakpoint} suffix: border@md, border-{width}@md, rounded@md, rounded-{key}@md, square@md and pill@md. Side widths, colours, styles and side or corner radii have no responsive variants.

border-0 border-2@md rounded-none rounded-xl@md: resize the window
<div class="border-0 border-2@md rounded-none rounded-xl@md p-4 bg-surface">
border-0 border-2@md rounded-none rounded-xl@md: resize the window
</div>
SuffixMedia query
@xs@media (min-width: 480px)
@sm@media (min-width: 640px)
@md@media (min-width: 768px)
@lg@media (min-width: 1024px)
@xl@media (min-width: 1280px)
@2xl@media (min-width: 1536px)
@use "@nuvoui/core" as *;
.card {
@include apply(border(1), rounded(lg));
}
.alert {
@include apply(border(2, dashed, danger), rounded(md));
}
.card {
border-width: var(--nu-border-width-1);
border-style: var(--nu-border-style);
border-color: var(--nu-border-regular);
--nu-border-style: solid;
border-radius: var(--nu-radius-lg);
}
.alert {
border-width: var(--nu-border-width-2);
border-style: var(--nu-border-style);
border-color: var(--nu-danger);
--nu-border-style: dashed;
border-radius: var(--nu-radius-md);
}
Mixin Arguments
border($width, $style: solid, $color: null) Width key or length; style; colour (defaults to --nu-border-regular)
border-top(), border-right(), border-bottom(), border-left() As border(), for one physical side
border-start(), border-end() As border(), for the inline start or end side (classes border-s, border-e)
border-all($width, $style, $color) All three required; same output as border()
border-style($style) solid, dashed, dotted, double, none, a CSS-wide keyword or var()
border-color($color, $shade: null) Role, role state, palette name, theme word (regular, strong, control, control-hover, focus), colour value or var(); an optional stop 50 to 950
rounded($key: null) and the side and corner mixins Radius key (default md) or a length, calc() or var()
pill No argument; var(--nu-radius-full)

There is no square mixin; use rounded(none). The logical width mixins are named border-start() and border-end(), not border-s().

A unitless width is a key of $border-widths and a radius word is a key of $border-radii. A value with a unit is used as written.

.frame {
@include apply(border(3px, solid, strong), rounded(10px));
}
.note {
border-inline-start: token(border-width-4) solid token(warning);
border-radius: token(radius-sm);
}

$border-widths is a list of pixel values and $border-radii is a map. Each replaces the default; it is not merged. The base styles need widths 1 and 4 and radius xs, and the classes need radii md (rounded), none (square) and full (pill), so keep those keys.

@use "@nuvoui/core" with (
$generate-utility-classes: true,
$border-widths: (0, 1, 2, 3, 4),
$border-radii: ("xs": 0.125rem, "sm": 0.25rem, "md": 0.375rem, "lg": 0.5rem, "full": 9999px, "none": 0)
);

A missing key is reported at compile time, for example Base styles need the key xs in $border-radii. Configured keys: sm, lg, full. Add xs back to $border-radii.

Input Error
border(3) border: 3 is not a configured key. Valid keys: 0, 1, 2, 4, 8. Write a unit for a custom value (3px, 3rem).
border(-1) border: negative key -1 is not allowed here. Negative keys work for margin, inset, offsets, translate and space only.
border(1, wavy) Unknown border style: wavy. Use one of solid, dashed, dotted, double, none, a CSS-wide keyword (inherit, initial, unset, revert, revert-layer) or var().
border-color(nope) border-color(nope): unknown colour. Use a role (brand, success, danger, warning, info), a palette name (gray, red, blue, green, yellow, purple, pink), a theme word (regular, strong, control, control-hover, focus), a hex colour, a CSS colour name, a colour function (rgb(), hsl(), hwb(), lab(), lch(), oklab(), oklch(), color(), color-mix(), light-dark()), a keyword (currentcolor, inherit, initial, unset, revert, revert-layer) or var().
border-color(danger, 450) border-color(danger, 450): invalid shade. Valid shades: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950.
rounded(4) rounded: 4 is not a configured key. Valid keys: xs, sm, md, lg, xl, 2xl, full, none. Write a unit for a custom value (4px, 4rem).
rounded(-4px) rounded: negative value -4px is not allowed here. Negative values work for margin, inset, offsets, translate and space only.
Variable Description
--nu-border-width-{key} One token per entry of $border-widths. Fixed across themes.
--nu-radius-{key} One token per key of $border-radii. Fixed across themes.
--nu-border-regular, --nu-border-strong, --nu-border-control, --nu-border-control-hover Theme border colours. Change with the theme.
--nu-border-focus, --nu-border-focus-width, --nu-border-focus-offset Focus ring colour, width and offset, applied through outline.

--nu-border-style is an internal property set by the border utilities, not a token; token() does not accept it.

Generated from the compiled core build. Responsive variants are not listed.

Width (54 rules)
SelectorDeclarationsDefault value
.borderborder-width: var(--nu-border-width-1)
border-style: var(--nu-border-style)
border-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-tborder-top-width: var(--nu-border-width-1)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-rborder-right-width: var(--nu-border-width-1)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-bborder-bottom-width: var(--nu-border-width-1)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-lborder-left-width: var(--nu-border-width-1)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-sborder-inline-start-width: var(--nu-border-width-1)
border-inline-start-style: var(--nu-border-style)
border-inline-start-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-eborder-inline-end-width: var(--nu-border-width-1)
border-inline-end-style: var(--nu-border-style)
border-inline-end-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-xborder-left-width: var(--nu-border-width-1)
border-right-width: var(--nu-border-width-1)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
1px
1px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-yborder-top-width: var(--nu-border-width-1)
border-bottom-width: var(--nu-border-width-1)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
1px
1px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-0border-width: var(--nu-border-width-0)0px
.border-t-0border-top-width: var(--nu-border-width-0)0px
.border-r-0border-right-width: var(--nu-border-width-0)0px
.border-b-0border-bottom-width: var(--nu-border-width-0)0px
.border-l-0border-left-width: var(--nu-border-width-0)0px
.border-s-0border-inline-start-width: var(--nu-border-width-0)0px
.border-e-0border-inline-end-width: var(--nu-border-width-0)0px
.border-x-0border-left-width: var(--nu-border-width-0)
border-right-width: var(--nu-border-width-0)
0px
0px
.border-y-0border-top-width: var(--nu-border-width-0)
border-bottom-width: var(--nu-border-width-0)
0px
0px
.border-1border-width: var(--nu-border-width-1)
border-style: var(--nu-border-style)
border-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-t-1border-top-width: var(--nu-border-width-1)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-r-1border-right-width: var(--nu-border-width-1)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-b-1border-bottom-width: var(--nu-border-width-1)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-l-1border-left-width: var(--nu-border-width-1)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-s-1border-inline-start-width: var(--nu-border-width-1)
border-inline-start-style: var(--nu-border-style)
border-inline-start-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-e-1border-inline-end-width: var(--nu-border-width-1)
border-inline-end-style: var(--nu-border-style)
border-inline-end-color: var(--nu-border-regular)
--nu-border-style: solid
1px
var(--nu-border-style)
#d3d5d9
solid
.border-x-1border-left-width: var(--nu-border-width-1)
border-right-width: var(--nu-border-width-1)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
1px
1px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-y-1border-top-width: var(--nu-border-width-1)
border-bottom-width: var(--nu-border-width-1)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
1px
1px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-2border-width: var(--nu-border-width-2)
border-style: var(--nu-border-style)
border-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-t-2border-top-width: var(--nu-border-width-2)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-r-2border-right-width: var(--nu-border-width-2)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-b-2border-bottom-width: var(--nu-border-width-2)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-l-2border-left-width: var(--nu-border-width-2)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-s-2border-inline-start-width: var(--nu-border-width-2)
border-inline-start-style: var(--nu-border-style)
border-inline-start-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-e-2border-inline-end-width: var(--nu-border-width-2)
border-inline-end-style: var(--nu-border-style)
border-inline-end-color: var(--nu-border-regular)
--nu-border-style: solid
2px
var(--nu-border-style)
#d3d5d9
solid
.border-x-2border-left-width: var(--nu-border-width-2)
border-right-width: var(--nu-border-width-2)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
2px
2px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-y-2border-top-width: var(--nu-border-width-2)
border-bottom-width: var(--nu-border-width-2)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
2px
2px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-4border-width: var(--nu-border-width-4)
border-style: var(--nu-border-style)
border-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-t-4border-top-width: var(--nu-border-width-4)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-r-4border-right-width: var(--nu-border-width-4)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-b-4border-bottom-width: var(--nu-border-width-4)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-l-4border-left-width: var(--nu-border-width-4)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-s-4border-inline-start-width: var(--nu-border-width-4)
border-inline-start-style: var(--nu-border-style)
border-inline-start-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-e-4border-inline-end-width: var(--nu-border-width-4)
border-inline-end-style: var(--nu-border-style)
border-inline-end-color: var(--nu-border-regular)
--nu-border-style: solid
4px
var(--nu-border-style)
#d3d5d9
solid
.border-x-4border-left-width: var(--nu-border-width-4)
border-right-width: var(--nu-border-width-4)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
4px
4px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-y-4border-top-width: var(--nu-border-width-4)
border-bottom-width: var(--nu-border-width-4)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
4px
4px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-8border-width: var(--nu-border-width-8)
border-style: var(--nu-border-style)
border-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-t-8border-top-width: var(--nu-border-width-8)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-r-8border-right-width: var(--nu-border-width-8)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-b-8border-bottom-width: var(--nu-border-width-8)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-l-8border-left-width: var(--nu-border-width-8)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-s-8border-inline-start-width: var(--nu-border-width-8)
border-inline-start-style: var(--nu-border-style)
border-inline-start-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-e-8border-inline-end-width: var(--nu-border-width-8)
border-inline-end-style: var(--nu-border-style)
border-inline-end-color: var(--nu-border-regular)
--nu-border-style: solid
8px
var(--nu-border-style)
#d3d5d9
solid
.border-x-8border-left-width: var(--nu-border-width-8)
border-right-width: var(--nu-border-width-8)
border-left-style: var(--nu-border-style)
border-left-color: var(--nu-border-regular)
border-right-style: var(--nu-border-style)
border-right-color: var(--nu-border-regular)
--nu-border-style: solid
8px
8px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
.border-y-8border-top-width: var(--nu-border-width-8)
border-bottom-width: var(--nu-border-width-8)
border-top-style: var(--nu-border-style)
border-top-color: var(--nu-border-regular)
border-bottom-style: var(--nu-border-style)
border-bottom-color: var(--nu-border-regular)
--nu-border-style: solid
8px
8px
var(--nu-border-style)
#d3d5d9
var(--nu-border-style)
#d3d5d9
solid
Style (5 rules)
SelectorDeclarationsDefault value
.border-solid, .hover:border-solid:hover, .active:border-solid:active, .focus:border-solid:focus, .group:hover .group-hover:border-solid--nu-border-style: solidsolid
.border-dashed, .hover:border-dashed:hover, .active:border-dashed:active, .focus:border-dashed:focus, .group:hover .group-hover:border-dashed--nu-border-style: dasheddashed
.border-dotted, .hover:border-dotted:hover, .active:border-dotted:active, .focus:border-dotted:focus, .group:hover .group-hover:border-dotted--nu-border-style: dotteddotted
.border-double, .hover:border-double:hover, .active:border-double:active, .focus:border-double:focus, .group:hover .group-hover:border-double--nu-border-style: doubledouble
.border-none, .hover:border-none:hover, .active:border-none:active, .focus:border-none:focus, .group:hover .group-hover:border-none--nu-border-style: nonenone
Colour (20 rules)
SelectorDeclarationsDefault value
.border-brand, .hover:border-brand:hover, .group:hover .group-hover:border-brandborder-color: var(--nu-brand)var(--nu-brand-700)
.border-success, .hover:border-success:hover, .group:hover .group-hover:border-successborder-color: var(--nu-success)var(--nu-success-700)
.border-danger, .hover:border-danger:hover, .group:hover .group-hover:border-dangerborder-color: var(--nu-danger)var(--nu-danger-700)
.border-warning, .hover:border-warning:hover, .group:hover .group-hover:border-warningborder-color: var(--nu-warning)var(--nu-warning-500)
.border-info, .hover:border-info:hover, .group:hover .group-hover:border-infoborder-color: var(--nu-info)var(--nu-info-700)
.border-gray, .hover:border-gray:hover, .group:hover .group-hover:border-grayborder-color: var(--nu-gray-500)#6b7280
.border-red, .hover:border-red:hover, .group:hover .group-hover:border-redborder-color: var(--nu-red-500)#ef4444
.border-blue, .hover:border-blue:hover, .group:hover .group-hover:border-blueborder-color: var(--nu-blue-500)#3b82f6
.border-green, .hover:border-green:hover, .group:hover .group-hover:border-greenborder-color: var(--nu-green-500)#22c55e
.border-yellow, .hover:border-yellow:hover, .group:hover .group-hover:border-yellowborder-color: var(--nu-yellow-500)#eab308
.border-purple, .hover:border-purple:hover, .group:hover .group-hover:border-purpleborder-color: var(--nu-purple-500)#a855f7
.border-pink, .hover:border-pink:hover, .group:hover .group-hover:border-pinkborder-color: var(--nu-pink-500)#ec4899
.border-error, .hover:border-error:hover, .group:hover .group-hover:border-errorborder-color: var(--nu-error)var(--nu-danger)
.border-black, .hover:border-black:hover, .group:hover .group-hover:border-blackborder-color: var(--nu-black)#000
.border-white, .hover:border-white:hover, .group:hover .group-hover:border-whiteborder-color: var(--nu-white)#fff
.border-transparent, .hover:border-transparent:hover, .group:hover .group-hover:border-transparentborder-color: var(--nu-transparent)transparent
.border-regular, .hover:border-regular:hover, .group:hover .group-hover:border-regularborder-color: var(--nu-border-regular)#d3d5d9
.border-strong, .hover:border-strong:hover, .group:hover .group-hover:border-strongborder-color: var(--nu-border-strong)var(--nu-gray-400)
.border-control, .hover:border-control:hover, .group:hover .group-hover:border-controlborder-color: var(--nu-border-control)var(--nu-gray-500)
.border-control-hover, .hover:border-control-hover:hover, .group:hover .group-hover:border-control-hoverborder-color: var(--nu-border-control-hover)var(--nu-gray-600)
Colour shades (132 rules)
SelectorDeclarationsDefault value
.border-brand-50, .hover:border-brand-50:hover, .group:hover .group-hover:border-brand-50border-color: var(--nu-brand-50)#ebf3ff
.border-brand-100, .hover:border-brand-100:hover, .group:hover .group-hover:border-brand-100border-color: var(--nu-brand-100)#dbeaff
.border-brand-200, .hover:border-brand-200:hover, .group:hover .group-hover:border-brand-200border-color: var(--nu-brand-200)#bad7ff
.border-brand-300, .hover:border-brand-300:hover, .group:hover .group-hover:border-brand-300border-color: var(--nu-brand-300)#91beff
.border-brand-400, .hover:border-brand-400:hover, .group:hover .group-hover:border-brand-400border-color: var(--nu-brand-400)#5ca0ff
.border-brand-500, .hover:border-brand-500:hover, .group:hover .group-hover:border-brand-500border-color: var(--nu-brand-500)#007bff
.border-brand-600, .hover:border-brand-600:hover, .group:hover .group-hover:border-brand-600border-color: var(--nu-brand-600)#006be0
.border-brand-700, .hover:border-brand-700:hover, .group:hover .group-hover:border-brand-700border-color: var(--nu-brand-700)#0058bb
.border-brand-800, .hover:border-brand-800:hover, .group:hover .group-hover:border-brand-800border-color: var(--nu-brand-800)#004494
.border-brand-900, .hover:border-brand-900:hover, .group:hover .group-hover:border-brand-900border-color: var(--nu-brand-900)#003270
.border-brand-950, .hover:border-brand-950:hover, .group:hover .group-hover:border-brand-950border-color: var(--nu-brand-950)#002352
.border-success-50, .hover:border-success-50:hover, .group:hover .group-hover:border-success-50border-color: var(--nu-success-50)#e5fae6
.border-success-100, .hover:border-success-100:hover, .group:hover .group-hover:border-success-100border-color: var(--nu-success-100)#cef7d1
.border-success-200, .hover:border-success-200:hover, .group:hover .group-hover:border-success-200border-color: var(--nu-success-200)#a8ecae
.border-success-300, .hover:border-success-300:hover, .group:hover .group-hover:border-success-300border-color: var(--nu-success-300)#7fdb89
.border-success-400, .hover:border-success-400:hover, .group:hover .group-hover:border-success-400border-color: var(--nu-success-400)#54c365
.border-success-500, .hover:border-success-500:hover, .group:hover .group-hover:border-success-500border-color: var(--nu-success-500)#28a745
.border-success-600, .hover:border-success-600:hover, .group:hover .group-hover:border-success-600border-color: var(--nu-success-600)#059333
.border-success-700, .hover:border-success-700:hover, .group:hover .group-hover:border-success-700border-color: var(--nu-success-700)#007a28
.border-success-800, .hover:border-success-800:hover, .group:hover .group-hover:border-success-800border-color: var(--nu-success-800)#005e1d
.border-success-900, .hover:border-success-900:hover, .group:hover .group-hover:border-success-900border-color: var(--nu-success-900)#004513
.border-success-950, .hover:border-success-950:hover, .group:hover .group-hover:border-success-950border-color: var(--nu-success-950)#00300b
.border-danger-50, .hover:border-danger-50:hover, .group:hover .group-hover:border-danger-50border-color: var(--nu-danger-50)#ffeeed
.border-danger-100, .hover:border-danger-100:hover, .group:hover .group-hover:border-danger-100border-color: var(--nu-danger-100)#ffdfde
.border-danger-200, .hover:border-danger-200:hover, .group:hover .group-hover:border-danger-200border-color: var(--nu-danger-200)#ffc1bf
.border-danger-300, .hover:border-danger-300:hover, .group:hover .group-hover:border-danger-300border-color: var(--nu-danger-300)#ff9997
.border-danger-400, .hover:border-danger-400:hover, .group:hover .group-hover:border-danger-400border-color: var(--nu-danger-400)#fd6066
.border-danger-500, .hover:border-danger-500:hover, .group:hover .group-hover:border-danger-500border-color: var(--nu-danger-500)#dc3545
.border-danger-600, .hover:border-danger-600:hover, .group:hover .group-hover:border-danger-600border-color: var(--nu-danger-600)#c72037
.border-danger-700, .hover:border-danger-700:hover, .group:hover .group-hover:border-danger-700border-color: var(--nu-danger-700)#ab0728
.border-danger-800, .hover:border-danger-800:hover, .group:hover .group-hover:border-danger-800border-color: var(--nu-danger-800)#88001c
.border-danger-900, .hover:border-danger-900:hover, .group:hover .group-hover:border-danger-900border-color: var(--nu-danger-900)#670013
.border-danger-950, .hover:border-danger-950:hover, .group:hover .group-hover:border-danger-950border-color: var(--nu-danger-950)#4c000b
.border-warning-50, .hover:border-warning-50:hover, .group:hover .group-hover:border-warning-50border-color: var(--nu-warning-50)#fff6e5
.border-warning-100, .hover:border-warning-100:hover, .group:hover .group-hover:border-warning-100border-color: var(--nu-warning-100)#fff2d8
.border-warning-200, .hover:border-warning-200:hover, .group:hover .group-hover:border-warning-200border-color: var(--nu-warning-200)#ffeabe
.border-warning-300, .hover:border-warning-300:hover, .group:hover .group-hover:border-warning-300border-color: var(--nu-warning-300)#ffdf9c
.border-warning-400, .hover:border-warning-400:hover, .group:hover .group-hover:border-warning-400border-color: var(--nu-warning-400)#ffd16c
.border-warning-500, .hover:border-warning-500:hover, .group:hover .group-hover:border-warning-500border-color: var(--nu-warning-500)#ffc107
.border-warning-600, .hover:border-warning-600:hover, .group:hover .group-hover:border-warning-600border-color: var(--nu-warning-600)#dca600
.border-warning-700, .hover:border-warning-700:hover, .group:hover .group-hover:border-warning-700border-color: var(--nu-warning-700)#b28600
.border-warning-800, .hover:border-warning-800:hover, .group:hover .group-hover:border-warning-800border-color: var(--nu-warning-800)#866300
.border-warning-900, .hover:border-warning-900:hover, .group:hover .group-hover:border-warning-900border-color: var(--nu-warning-900)#5e4500
.border-warning-950, .hover:border-warning-950:hover, .group:hover .group-hover:border-warning-950border-color: var(--nu-warning-950)#3d2b00
.border-info-50, .hover:border-info-50:hover, .group:hover .group-hover:border-info-50border-color: var(--nu-info-50)#e4f8fc
.border-info-100, .hover:border-info-100:hover, .group:hover .group-hover:border-info-100border-color: var(--nu-info-100)#ccf3fb
.border-info-200, .hover:border-info-200:hover, .group:hover .group-hover:border-info-200border-color: var(--nu-info-200)#a4e6f4
.border-info-300, .hover:border-info-300:hover, .group:hover .group-hover:border-info-300border-color: var(--nu-info-300)#79d4e6
.border-info-400, .hover:border-info-400:hover, .group:hover .group-hover:border-info-400border-color: var(--nu-info-400)#4cbdd2
.border-info-500, .hover:border-info-500:hover, .group:hover .group-hover:border-info-500border-color: var(--nu-info-500)#17a2b8
.border-info-600, .hover:border-info-600:hover, .group:hover .group-hover:border-info-600border-color: var(--nu-info-600)#008da1
.border-info-700, .hover:border-info-700:hover, .group:hover .group-hover:border-info-700border-color: var(--nu-info-700)#007485
.border-info-800, .hover:border-info-800:hover, .group:hover .group-hover:border-info-800border-color: var(--nu-info-800)#005a67
.border-info-900, .hover:border-info-900:hover, .group:hover .group-hover:border-info-900border-color: var(--nu-info-900)#00414c
.border-info-950, .hover:border-info-950:hover, .group:hover .group-hover:border-info-950border-color: var(--nu-info-950)#002d35
.border-gray-50, .hover:border-gray-50:hover, .group:hover .group-hover:border-gray-50border-color: var(--nu-gray-50)#f0f1f5
.border-gray-100, .hover:border-gray-100:hover, .group:hover .group-hover:border-gray-100border-color: var(--nu-gray-100)#e3e6ec
.border-gray-200, .hover:border-gray-200:hover, .group:hover .group-hover:border-gray-200border-color: var(--nu-gray-200)#cacfd9
.border-gray-300, .hover:border-gray-300:hover, .group:hover .group-hover:border-gray-300border-color: var(--nu-gray-300)#adb4c0
.border-gray-400, .hover:border-gray-400:hover, .group:hover .group-hover:border-gray-400border-color: var(--nu-gray-400)#8d94a1
.border-gray-500, .hover:border-gray-500:hover, .group:hover .group-hover:border-gray-500border-color: var(--nu-gray-500)#6b7280
.border-gray-600, .hover:border-gray-600:hover, .group:hover .group-hover:border-gray-600border-color: var(--nu-gray-600)#5d6471
.border-gray-700, .hover:border-gray-700:hover, .group:hover .group-hover:border-gray-700border-color: var(--nu-gray-700)#4d535f
.border-gray-800, .hover:border-gray-800:hover, .group:hover .group-hover:border-gray-800border-color: var(--nu-gray-800)#3c414c
.border-gray-900, .hover:border-gray-900:hover, .group:hover .group-hover:border-gray-900border-color: var(--nu-gray-900)#2d3139
.border-gray-950, .hover:border-gray-950:hover, .group:hover .group-hover:border-gray-950border-color: var(--nu-gray-950)#20232a
.border-red-50, .hover:border-red-50:hover, .group:hover .group-hover:border-red-50border-color: var(--nu-red-50)#ffefed
.border-red-100, .hover:border-red-100:hover, .group:hover .group-hover:border-red-100border-color: var(--nu-red-100)#ffe2df
.border-red-200, .hover:border-red-200:hover, .group:hover .group-hover:border-red-200border-color: var(--nu-red-200)#ffc8c3
.border-red-300, .hover:border-red-300:hover, .group:hover .group-hover:border-red-300border-color: var(--nu-red-300)#ffa69e
.border-red-400, .hover:border-red-400:hover, .group:hover .group-hover:border-red-400border-color: var(--nu-red-400)#ff766f
.border-red-500, .hover:border-red-500:hover, .group:hover .group-hover:border-red-500border-color: var(--nu-red-500)#ef4444
.border-red-600, .hover:border-red-600:hover, .group:hover .group-hover:border-red-600border-color: var(--nu-red-600)#d72f33
.border-red-700, .hover:border-red-700:hover, .group:hover .group-hover:border-red-700border-color: var(--nu-red-700)#b81822
.border-red-800, .hover:border-red-800:hover, .group:hover .group-hover:border-red-800border-color: var(--nu-red-800)#930013
.border-red-900, .hover:border-red-900:hover, .group:hover .group-hover:border-red-900border-color: var(--nu-red-900)#6e000c
.border-red-950, .hover:border-red-950:hover, .group:hover .group-hover:border-red-950border-color: var(--nu-red-950)#4f0006
.border-blue-50, .hover:border-blue-50:hover, .group:hover .group-hover:border-blue-50border-color: var(--nu-blue-50)#ecf3ff
.border-blue-100, .hover:border-blue-100:hover, .group:hover .group-hover:border-blue-100border-color: var(--nu-blue-100)#ddeaff
.border-blue-200, .hover:border-blue-200:hover, .group:hover .group-hover:border-blue-200border-color: var(--nu-blue-200)#bfd8ff
.border-blue-300, .hover:border-blue-300:hover, .group:hover .group-hover:border-blue-300border-color: var(--nu-blue-300)#9ac0ff
.border-blue-400, .hover:border-blue-400:hover, .group:hover .group-hover:border-blue-400border-color: var(--nu-blue-400)#6ba3ff
.border-blue-500, .hover:border-blue-500:hover, .group:hover .group-hover:border-blue-500border-color: var(--nu-blue-500)#3b82f6
.border-blue-600, .hover:border-blue-600:hover, .group:hover .group-hover:border-blue-600border-color: var(--nu-blue-600)#2a70df
.border-blue-700, .hover:border-blue-700:hover, .group:hover .group-hover:border-blue-700border-color: var(--nu-blue-700)#1a5ac1
.border-blue-800, .hover:border-blue-800:hover, .group:hover .group-hover:border-blue-800border-color: var(--nu-blue-800)#0b449c
.border-blue-900, .hover:border-blue-900:hover, .group:hover .group-hover:border-blue-900border-color: var(--nu-blue-900)#023179
.border-blue-950, .hover:border-blue-950:hover, .group:hover .group-hover:border-blue-950border-color: var(--nu-blue-950)#012158
.border-green-50, .hover:border-green-50:hover, .group:hover .group-hover:border-green-50border-color: var(--nu-green-50)#e4fde7
.border-green-100, .hover:border-green-100:hover, .group:hover .group-hover:border-green-100border-color: var(--nu-green-100)#ccfcd4
.border-green-200, .hover:border-green-200:hover, .group:hover .group-hover:border-green-200border-color: var(--nu-green-200)#a6f7b6
.border-green-300, .hover:border-green-300:hover, .group:hover .group-hover:border-green-300border-color: var(--nu-green-300)#7ceb96
.border-green-400, .hover:border-green-400:hover, .group:hover .group-hover:border-green-400border-color: var(--nu-green-400)#50da78
.border-green-500, .hover:border-green-500:hover, .group:hover .group-hover:border-green-500border-color: var(--nu-green-500)#22c55e
.border-green-600, .hover:border-green-600:hover, .group:hover .group-hover:border-green-600border-color: var(--nu-green-600)#00ac4d
.border-green-700, .hover:border-green-700:hover, .group:hover .group-hover:border-green-700border-color: var(--nu-green-700)#008d3d
.border-green-800, .hover:border-green-800:hover, .group:hover .group-hover:border-green-800border-color: var(--nu-green-800)#006b2d
.border-green-900, .hover:border-green-900:hover, .group:hover .group-hover:border-green-900border-color: var(--nu-green-900)#004d1e
.border-green-950, .hover:border-green-950:hover, .group:hover .group-hover:border-green-950border-color: var(--nu-green-950)#003412
.border-yellow-50, .hover:border-yellow-50:hover, .group:hover .group-hover:border-yellow-50border-color: var(--nu-yellow-50)#fff5e1
.border-yellow-100, .hover:border-yellow-100:hover, .group:hover .group-hover:border-yellow-100border-color: var(--nu-yellow-100)#fff0cf
.border-yellow-200, .hover:border-yellow-200:hover, .group:hover .group-hover:border-yellow-200border-color: var(--nu-yellow-200)#ffe4aa
.border-yellow-300, .hover:border-yellow-300:hover, .group:hover .group-hover:border-yellow-300border-color: var(--nu-yellow-300)#ffd576
.border-yellow-400, .hover:border-yellow-400:hover, .group:hover .group-hover:border-yellow-400border-color: var(--nu-yellow-400)#f8c43f
.border-yellow-500, .hover:border-yellow-500:hover, .group:hover .group-hover:border-yellow-500border-color: var(--nu-yellow-500)#eab308
.border-yellow-600, .hover:border-yellow-600:hover, .group:hover .group-hover:border-yellow-600border-color: var(--nu-yellow-600)#ca9a00
.border-yellow-700, .hover:border-yellow-700:hover, .group:hover .group-hover:border-yellow-700border-color: var(--nu-yellow-700)#a57d00
.border-yellow-800, .hover:border-yellow-800:hover, .group:hover .group-hover:border-yellow-800border-color: var(--nu-yellow-800)#7c5d00
.border-yellow-900, .hover:border-yellow-900:hover, .group:hover .group-hover:border-yellow-900border-color: var(--nu-yellow-900)#584100
.border-yellow-950, .hover:border-yellow-950:hover, .group:hover .group-hover:border-yellow-950border-color: var(--nu-yellow-950)#3a2a00
.border-purple-50, .hover:border-purple-50:hover, .group:hover .group-hover:border-purple-50border-color: var(--nu-purple-50)#f6f0ff
.border-purple-100, .hover:border-purple-100:hover, .group:hover .group-hover:border-purple-100border-color: var(--nu-purple-100)#efe4ff
.border-purple-200, .hover:border-purple-200:hover, .group:hover .group-hover:border-purple-200border-color: var(--nu-purple-200)#e1cbff
.border-purple-300, .hover:border-purple-300:hover, .group:hover .group-hover:border-purple-300border-color: var(--nu-purple-300)#d0acff
.border-purple-400, .hover:border-purple-400:hover, .group:hover .group-hover:border-purple-400border-color: var(--nu-purple-400)#bd83ff
.border-purple-500, .hover:border-purple-500:hover, .group:hover .group-hover:border-purple-500border-color: var(--nu-purple-500)#a855f7
.border-purple-600, .hover:border-purple-600:hover, .group:hover .group-hover:border-purple-600border-color: var(--nu-purple-600)#9542e0
.border-purple-700, .hover:border-purple-700:hover, .group:hover .group-hover:border-purple-700border-color: var(--nu-purple-700)#7e2ec1
.border-purple-800, .hover:border-purple-800:hover, .group:hover .group-hover:border-purple-800border-color: var(--nu-purple-800)#631b9c
.border-purple-900, .hover:border-purple-900:hover, .group:hover .group-hover:border-purple-900border-color: var(--nu-purple-900)#4b0d79
.border-purple-950, .hover:border-purple-950:hover, .group:hover .group-hover:border-purple-950border-color: var(--nu-purple-950)#350658
.border-pink-50, .hover:border-pink-50:hover, .group:hover .group-hover:border-pink-50border-color: var(--nu-pink-50)#ffeef4
.border-pink-100, .hover:border-pink-100:hover, .group:hover .group-hover:border-pink-100border-color: var(--nu-pink-100)#ffe2ec
.border-pink-200, .hover:border-pink-200:hover, .group:hover .group-hover:border-pink-200border-color: var(--nu-pink-200)#ffc8dc
.border-pink-300, .hover:border-pink-300:hover, .group:hover .group-hover:border-pink-300border-color: var(--nu-pink-300)#ffa5c9
.border-pink-400, .hover:border-pink-400:hover, .group:hover .group-hover:border-pink-400border-color: var(--nu-pink-400)#ff74b2
.border-pink-500, .hover:border-pink-500:hover, .group:hover .group-hover:border-pink-500border-color: var(--nu-pink-500)#ec4899
.border-pink-600, .hover:border-pink-600:hover, .group:hover .group-hover:border-pink-600border-color: var(--nu-pink-600)#d43386
.border-pink-700, .hover:border-pink-700:hover, .group:hover .group-hover:border-pink-700border-color: var(--nu-pink-700)#b41c6e
.border-pink-800, .hover:border-pink-800:hover, .group:hover .group-hover:border-pink-800border-color: var(--nu-pink-800)#900455
.border-pink-900, .hover:border-pink-900:hover, .group:hover .group-hover:border-pink-900border-color: var(--nu-pink-900)#6b003e
.border-pink-950, .hover:border-pink-950:hover, .group:hover .group-hover:border-pink-950border-color: var(--nu-pink-950)#4c002b
Radius (123 rules)
SelectorDeclarationsDefault value
.roundedborder-radius: var(--nu-radius-md)0.5rem
.squareborder-radius: var(--nu-radius-none)0
.rounded-xsborder-radius: var(--nu-radius-xs)0.25rem
.rounded-t-xsborder-top-left-radius: var(--nu-radius-xs)
border-top-right-radius: var(--nu-radius-xs)
0.25rem
0.25rem
.rounded-r-xsborder-top-right-radius: var(--nu-radius-xs)
border-bottom-right-radius: var(--nu-radius-xs)
0.25rem
0.25rem
.rounded-b-xsborder-bottom-left-radius: var(--nu-radius-xs)
border-bottom-right-radius: var(--nu-radius-xs)
0.25rem
0.25rem
.rounded-l-xsborder-top-left-radius: var(--nu-radius-xs)
border-bottom-left-radius: var(--nu-radius-xs)
0.25rem
0.25rem
.rounded-s-xsborder-start-start-radius: var(--nu-radius-xs)
border-end-start-radius: var(--nu-radius-xs)
0.25rem
0.25rem
.rounded-e-xsborder-start-end-radius: var(--nu-radius-xs)
border-end-end-radius: var(--nu-radius-xs)
0.25rem
0.25rem
.rounded-tl-xsborder-top-left-radius: var(--nu-radius-xs)0.25rem
.rounded-tr-xsborder-top-right-radius: var(--nu-radius-xs)0.25rem
.rounded-br-xsborder-bottom-right-radius: var(--nu-radius-xs)0.25rem
.rounded-bl-xsborder-bottom-left-radius: var(--nu-radius-xs)0.25rem
.rounded-ss-xsborder-start-start-radius: var(--nu-radius-xs)0.25rem
.rounded-se-xsborder-start-end-radius: var(--nu-radius-xs)0.25rem
.rounded-es-xsborder-end-start-radius: var(--nu-radius-xs)0.25rem
.rounded-ee-xsborder-end-end-radius: var(--nu-radius-xs)0.25rem
.rounded-smborder-radius: var(--nu-radius-sm)0.375rem
.rounded-t-smborder-top-left-radius: var(--nu-radius-sm)
border-top-right-radius: var(--nu-radius-sm)
0.375rem
0.375rem
.rounded-r-smborder-top-right-radius: var(--nu-radius-sm)
border-bottom-right-radius: var(--nu-radius-sm)
0.375rem
0.375rem
.rounded-b-smborder-bottom-left-radius: var(--nu-radius-sm)
border-bottom-right-radius: var(--nu-radius-sm)
0.375rem
0.375rem
.rounded-l-smborder-top-left-radius: var(--nu-radius-sm)
border-bottom-left-radius: var(--nu-radius-sm)
0.375rem
0.375rem
.rounded-s-smborder-start-start-radius: var(--nu-radius-sm)
border-end-start-radius: var(--nu-radius-sm)
0.375rem
0.375rem
.rounded-e-smborder-start-end-radius: var(--nu-radius-sm)
border-end-end-radius: var(--nu-radius-sm)
0.375rem
0.375rem
.rounded-tl-smborder-top-left-radius: var(--nu-radius-sm)0.375rem
.rounded-tr-smborder-top-right-radius: var(--nu-radius-sm)0.375rem
.rounded-br-smborder-bottom-right-radius: var(--nu-radius-sm)0.375rem
.rounded-bl-smborder-bottom-left-radius: var(--nu-radius-sm)0.375rem
.rounded-ss-smborder-start-start-radius: var(--nu-radius-sm)0.375rem
.rounded-se-smborder-start-end-radius: var(--nu-radius-sm)0.375rem
.rounded-es-smborder-end-start-radius: var(--nu-radius-sm)0.375rem
.rounded-ee-smborder-end-end-radius: var(--nu-radius-sm)0.375rem
.rounded-mdborder-radius: var(--nu-radius-md)0.5rem
.rounded-t-mdborder-top-left-radius: var(--nu-radius-md)
border-top-right-radius: var(--nu-radius-md)
0.5rem
0.5rem
.rounded-r-mdborder-top-right-radius: var(--nu-radius-md)
border-bottom-right-radius: var(--nu-radius-md)
0.5rem
0.5rem
.rounded-b-mdborder-bottom-left-radius: var(--nu-radius-md)
border-bottom-right-radius: var(--nu-radius-md)
0.5rem
0.5rem
.rounded-l-mdborder-top-left-radius: var(--nu-radius-md)
border-bottom-left-radius: var(--nu-radius-md)
0.5rem
0.5rem
.rounded-s-mdborder-start-start-radius: var(--nu-radius-md)
border-end-start-radius: var(--nu-radius-md)
0.5rem
0.5rem
.rounded-e-mdborder-start-end-radius: var(--nu-radius-md)
border-end-end-radius: var(--nu-radius-md)
0.5rem
0.5rem
.rounded-tl-mdborder-top-left-radius: var(--nu-radius-md)0.5rem
.rounded-tr-mdborder-top-right-radius: var(--nu-radius-md)0.5rem
.rounded-br-mdborder-bottom-right-radius: var(--nu-radius-md)0.5rem
.rounded-bl-mdborder-bottom-left-radius: var(--nu-radius-md)0.5rem
.rounded-ss-mdborder-start-start-radius: var(--nu-radius-md)0.5rem
.rounded-se-mdborder-start-end-radius: var(--nu-radius-md)0.5rem
.rounded-es-mdborder-end-start-radius: var(--nu-radius-md)0.5rem
.rounded-ee-mdborder-end-end-radius: var(--nu-radius-md)0.5rem
.rounded-lgborder-radius: var(--nu-radius-lg)0.75rem
.rounded-t-lgborder-top-left-radius: var(--nu-radius-lg)
border-top-right-radius: var(--nu-radius-lg)
0.75rem
0.75rem
.rounded-r-lgborder-top-right-radius: var(--nu-radius-lg)
border-bottom-right-radius: var(--nu-radius-lg)
0.75rem
0.75rem
.rounded-b-lgborder-bottom-left-radius: var(--nu-radius-lg)
border-bottom-right-radius: var(--nu-radius-lg)
0.75rem
0.75rem
.rounded-l-lgborder-top-left-radius: var(--nu-radius-lg)
border-bottom-left-radius: var(--nu-radius-lg)
0.75rem
0.75rem
.rounded-s-lgborder-start-start-radius: var(--nu-radius-lg)
border-end-start-radius: var(--nu-radius-lg)
0.75rem
0.75rem
.rounded-e-lgborder-start-end-radius: var(--nu-radius-lg)
border-end-end-radius: var(--nu-radius-lg)
0.75rem
0.75rem
.rounded-tl-lgborder-top-left-radius: var(--nu-radius-lg)0.75rem
.rounded-tr-lgborder-top-right-radius: var(--nu-radius-lg)0.75rem
.rounded-br-lgborder-bottom-right-radius: var(--nu-radius-lg)0.75rem
.rounded-bl-lgborder-bottom-left-radius: var(--nu-radius-lg)0.75rem
.rounded-ss-lgborder-start-start-radius: var(--nu-radius-lg)0.75rem
.rounded-se-lgborder-start-end-radius: var(--nu-radius-lg)0.75rem
.rounded-es-lgborder-end-start-radius: var(--nu-radius-lg)0.75rem
.rounded-ee-lgborder-end-end-radius: var(--nu-radius-lg)0.75rem
.rounded-xlborder-radius: var(--nu-radius-xl)1rem
.rounded-t-xlborder-top-left-radius: var(--nu-radius-xl)
border-top-right-radius: var(--nu-radius-xl)
1rem
1rem
.rounded-r-xlborder-top-right-radius: var(--nu-radius-xl)
border-bottom-right-radius: var(--nu-radius-xl)
1rem
1rem
.rounded-b-xlborder-bottom-left-radius: var(--nu-radius-xl)
border-bottom-right-radius: var(--nu-radius-xl)
1rem
1rem
.rounded-l-xlborder-top-left-radius: var(--nu-radius-xl)
border-bottom-left-radius: var(--nu-radius-xl)
1rem
1rem
.rounded-s-xlborder-start-start-radius: var(--nu-radius-xl)
border-end-start-radius: var(--nu-radius-xl)
1rem
1rem
.rounded-e-xlborder-start-end-radius: var(--nu-radius-xl)
border-end-end-radius: var(--nu-radius-xl)
1rem
1rem
.rounded-tl-xlborder-top-left-radius: var(--nu-radius-xl)1rem
.rounded-tr-xlborder-top-right-radius: var(--nu-radius-xl)1rem
.rounded-br-xlborder-bottom-right-radius: var(--nu-radius-xl)1rem
.rounded-bl-xlborder-bottom-left-radius: var(--nu-radius-xl)1rem
.rounded-ss-xlborder-start-start-radius: var(--nu-radius-xl)1rem
.rounded-se-xlborder-start-end-radius: var(--nu-radius-xl)1rem
.rounded-es-xlborder-end-start-radius: var(--nu-radius-xl)1rem
.rounded-ee-xlborder-end-end-radius: var(--nu-radius-xl)1rem
.rounded-2xlborder-radius: var(--nu-radius-2xl)1.25rem
.rounded-t-2xlborder-top-left-radius: var(--nu-radius-2xl)
border-top-right-radius: var(--nu-radius-2xl)
1.25rem
1.25rem
.rounded-r-2xlborder-top-right-radius: var(--nu-radius-2xl)
border-bottom-right-radius: var(--nu-radius-2xl)
1.25rem
1.25rem
.rounded-b-2xlborder-bottom-left-radius: var(--nu-radius-2xl)
border-bottom-right-radius: var(--nu-radius-2xl)
1.25rem
1.25rem
.rounded-l-2xlborder-top-left-radius: var(--nu-radius-2xl)
border-bottom-left-radius: var(--nu-radius-2xl)
1.25rem
1.25rem
.rounded-s-2xlborder-start-start-radius: var(--nu-radius-2xl)
border-end-start-radius: var(--nu-radius-2xl)
1.25rem
1.25rem
.rounded-e-2xlborder-start-end-radius: var(--nu-radius-2xl)
border-end-end-radius: var(--nu-radius-2xl)
1.25rem
1.25rem
.rounded-tl-2xlborder-top-left-radius: var(--nu-radius-2xl)1.25rem
.rounded-tr-2xlborder-top-right-radius: var(--nu-radius-2xl)1.25rem
.rounded-br-2xlborder-bottom-right-radius: var(--nu-radius-2xl)1.25rem
.rounded-bl-2xlborder-bottom-left-radius: var(--nu-radius-2xl)1.25rem
.rounded-ss-2xlborder-start-start-radius: var(--nu-radius-2xl)1.25rem
.rounded-se-2xlborder-start-end-radius: var(--nu-radius-2xl)1.25rem
.rounded-es-2xlborder-end-start-radius: var(--nu-radius-2xl)1.25rem
.rounded-ee-2xlborder-end-end-radius: var(--nu-radius-2xl)1.25rem
.rounded-fullborder-radius: var(--nu-radius-full)99in
.rounded-t-fullborder-top-left-radius: var(--nu-radius-full)
border-top-right-radius: var(--nu-radius-full)
99in
99in
.rounded-r-fullborder-top-right-radius: var(--nu-radius-full)
border-bottom-right-radius: var(--nu-radius-full)
99in
99in
.rounded-b-fullborder-bottom-left-radius: var(--nu-radius-full)
border-bottom-right-radius: var(--nu-radius-full)
99in
99in
.rounded-l-fullborder-top-left-radius: var(--nu-radius-full)
border-bottom-left-radius: var(--nu-radius-full)
99in
99in
.rounded-s-fullborder-start-start-radius: var(--nu-radius-full)
border-end-start-radius: var(--nu-radius-full)
99in
99in
.rounded-e-fullborder-start-end-radius: var(--nu-radius-full)
border-end-end-radius: var(--nu-radius-full)
99in
99in
.rounded-tl-fullborder-top-left-radius: var(--nu-radius-full)99in
.rounded-tr-fullborder-top-right-radius: var(--nu-radius-full)99in
.rounded-br-fullborder-bottom-right-radius: var(--nu-radius-full)99in
.rounded-bl-fullborder-bottom-left-radius: var(--nu-radius-full)99in
.rounded-ss-fullborder-start-start-radius: var(--nu-radius-full)99in
.rounded-se-fullborder-start-end-radius: var(--nu-radius-full)99in
.rounded-es-fullborder-end-start-radius: var(--nu-radius-full)99in
.rounded-ee-fullborder-end-end-radius: var(--nu-radius-full)99in
.rounded-noneborder-radius: var(--nu-radius-none)0
.rounded-t-noneborder-top-left-radius: var(--nu-radius-none)
border-top-right-radius: var(--nu-radius-none)
0
0
.rounded-r-noneborder-top-right-radius: var(--nu-radius-none)
border-bottom-right-radius: var(--nu-radius-none)
0
0
.rounded-b-noneborder-bottom-left-radius: var(--nu-radius-none)
border-bottom-right-radius: var(--nu-radius-none)
0
0
.rounded-l-noneborder-top-left-radius: var(--nu-radius-none)
border-bottom-left-radius: var(--nu-radius-none)
0
0
.rounded-s-noneborder-start-start-radius: var(--nu-radius-none)
border-end-start-radius: var(--nu-radius-none)
0
0
.rounded-e-noneborder-start-end-radius: var(--nu-radius-none)
border-end-end-radius: var(--nu-radius-none)
0
0
.rounded-tl-noneborder-top-left-radius: var(--nu-radius-none)0
.rounded-tr-noneborder-top-right-radius: var(--nu-radius-none)0
.rounded-br-noneborder-bottom-right-radius: var(--nu-radius-none)0
.rounded-bl-noneborder-bottom-left-radius: var(--nu-radius-none)0
.rounded-ss-noneborder-start-start-radius: var(--nu-radius-none)0
.rounded-se-noneborder-start-end-radius: var(--nu-radius-none)0
.rounded-es-noneborder-end-start-radius: var(--nu-radius-none)0
.rounded-ee-noneborder-end-end-radius: var(--nu-radius-none)0
.pillborder-radius: var(--nu-radius-full)99in
  • Mirror with logical utilities. Use border-s, border-e, rounded-s-*, rounded-e-* and the logical corner classes for accents and joined controls that should follow the reading direction.
  • Control edges need contrast. Use border-control for the edges of inputs and other controls: it is darker than border-regular so the control boundary meets 3:1 against its background (WCAG 1.4.11 Non-text Contrast).
  • Do not rely on colour alone. A red border is not enough to mark an invalid field. Pair it with a text message and aria-invalid="true" (WCAG 1.4.1 Use of Color).
  • Keep focus visible. Do not remove the focus outline in favour of a border colour change unless the border change itself meets the contrast and size of a focus indicator (WCAG 2.4.7 Focus Visible).
  • Forced colours. In Windows High Contrast mode, borders stay visible while background colours are replaced; a border is a reliable way to show a card or button edge.