Opinionated constraints for building better interfaces with Anduril-style design.
When invoked, apply these opinionated constraints for building better interfaces.
/anduril — Apply these constraints to any UI work in this conversation./anduril <file> — Review the file against all constraints and output violations, why it matters, and a concrete fix.Core Palette
/* Backgrounds */
--bg-black: #000000; /* Pure black - dark mode primary */
--bg-dark: #1a1a1a; /* Near black - dark mode secondary */
--bg-warm: #f5f3ef; /* Warm off-white - light mode primary */
--bg-white: #ffffff; /* Pure white - cards, inputs */
/* Text */
--text-primary: #010101; /* Near black */
--text-inverse: #ffffff; /* White on dark */
--text-muted: #666666; /* Secondary text */
--text-subtle: #999999; /* Tertiary text */
/* Brand Accent */
--accent-lime: #DFF140; /* Anduril signature lime - primary accent */
--accent-lime-hover: #c8d93a;
/* Semantic */
--color-error: #FF3535; /* Red - errors, destructive */
--color-error-bg: #fef2f2;
--color-success: #16a34a; /* Green - success states */
--color-success-bg: #f0fdf4;
--color-info: #2563eb; /* Blue - info, links */
--color-info-bg: #eff6ff;
--color-warning: #f59e0b; /* Amber - warnings */
--color-warning-bg: #fffbeb;
/* Borders */
--border-light: #e5e5e5;
--border-default: #ddd;
--border-dark: #333333;
Tailwind Config
colors: {
anduril: {
black: '#000000',
dark: '#1a1a1a',
warm: '#f5f3ef',
lime: '#DFF140',
'lime-hover': '#c8d93a',
}
}
Usage Guidelines
--accent-lime sparingly — one accent per view--bg-black background, --accent-lime for CTAs--bg-warm background, --text-primary for CTAs--color-error for destructive actions only'Helvetica Neue', Helvetica, Arial, sans-serif15px, weight: 400, line-height: 1.5font-weight: 400 (never bold)11px, uppercase, letter-spacing: 0.05em, color: var(--text-muted)48px, font-weight: 400, line-height: 1.114px, uppercase, letter-spacing: 0.1empadding: 32pxpadding: 48px, max-width: 1200pxpadding: 24px 48pxmargin-top: 16px between fieldsCards
background: #ffffffborder: none — NO bordersborder-radius: 0 — sharp corners alwaysButtons
background: var(--text-primary)color: var(--text-inverse)border: 1px solid var(--text-primary)padding: 12px 24pxborder-radius: 0 — sharp cornersfont-weight: 400opacity: 0.85opacity: 0.5Inputs
padding: 10px 12pxborder: 1px solid #dddborder-radius: 0border-color: var(--text-primary), no outlineMethod badges
font-family: monospacefont-size: 11pxtext-transform: uppercaseletter-spacing: 0.05empadding: 4px 8pxcolor: #2563eb; background: #eff6ffcolor: #16a34a; background: #f0fdf4Response/code blocks
background: var(--bg-warm)font-family: monospacefont-size: 12pxbackground: #fef2f2; color: #dc2626background: #f0fdf4; color: #16a34amotion/react when JavaScript animation is requiredtw-animate-css for entrance and micro-animationscn utility (clsx + tailwind-merge) for class logicBase UI, React Aria, Radix)aria-label to icon-only buttonsAlertDialog for destructive actionsh-screen, use h-dvhsafe-area-inset for fixed elementstransform, opacity)width, height, top, left, margin, padding)ease-out on entrance200ms for interaction feedbackprefers-reduced-motiontext-balance for headings, text-pretty for bodytabular-nums for datatruncate or line-clamp for dense UIletter-spacing unless explicitly requestedz-index scale (no arbitrary z-*)size-* for square elementsblur() or backdrop-filter surfaceswill-change outside an active animationuseEffect for render logicShape & Surface
Color Usage
--bg-warm (#f5f3ef) background, dark buttons--bg-black (#000000) background, lime accent CTAs--accent-lime (#DFF140) for primary actions in dark mode only--color-error, --color-success) consistentlyTypography
font-weight: 400)States
opacity: 0.5, cursor: not-allowed