fix: add nous-research/ui package

This commit is contained in:
Austin Pickett 2026-04-19 10:48:56 -04:00
parent 957ca79e8e
commit 923539a46b
26 changed files with 798 additions and 637 deletions

View file

@ -1,132 +1,74 @@
@import "tailwindcss";
@import 'tailwindcss';
@import '@nous-research/ui/styles/globals.css';
/* Scan the published design-system bundle so its utility classes survive
Tailwind's JIT purge. */
@source '../node_modules/@nous-research/ui/dist';
/* ------------------------------------------------------------------ */
/* Hermes Agent — Design tokens */
/* Matched to hermes-agent.nousresearch.com (dark teal theme) */
/* Hermes Agent — Nous DS with the LENS_0 (Hermes teal) lens applied */
/* statically. Mirrors nousnet-web/(hermes-agent)/layout.tsx so the */
/* canonical Hermes palette is the default — teal canvas + cream */
/* accent — without relying on leva/gsap at runtime. */
/* ------------------------------------------------------------------ */
/* --- Font faces --- */
@font-face { font-family: "Collapse"; src: url("/fonts/Collapse-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "Collapse"; src: url("/fonts/Collapse-Bold.woff2") format("woff2"); font-weight: 700; font-display: swap; }
@font-face { font-family: "Courier Prime"; src: url("/fonts/CourierPrime-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "Courier Prime"; src: url("/fonts/CourierPrime-Bold.woff2") format("woff2"); font-weight: 700; font-display: swap; }
@font-face { font-family: "RulesCompressed"; src: url("/fonts/RulesCompressed-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "RulesCompressed"; src: url("/fonts/RulesCompressed-Medium.woff2") format("woff2"); font-weight: 600; font-display: swap; }
@font-face { font-family: "RulesExpanded"; src: url("/fonts/RulesExpanded-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "RulesExpanded"; src: url("/fonts/RulesExpanded-Bold.woff2") format("woff2"); font-weight: 700; font-display: swap; }
@font-face { font-family: "Mondwest"; src: url("/fonts/Mondwest-Regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
:root {
/* LENS_0 from design-language/src/ui/components/overlays/index.tsx.
These are the defaults for the `default` (Hermes Teal) dashboard theme;
ThemeProvider rewrites them as inline styles when a user switches themes. */
--foreground: color-mix(in srgb, #ffffff 0%, transparent);
--foreground-base: #ffffff;
--foreground-alpha: 0;
--midground: color-mix(in srgb, #ffe6cb 100%, transparent);
--midground-base: #ffe6cb;
--midground-alpha: 1;
--background: color-mix(in srgb, #041c1c 100%, transparent);
--background-base: #041c1c;
--background-alpha: 1;
@theme {
/* ---- Hermes palette (dark teal, from live site) ---- */
--color-background: #041C1C;
--color-foreground: #ffe6cb;
--color-card: #062424;
--color-card-foreground: #ffe6cb;
--color-primary: #ffe6cb;
--color-primary-foreground: #041C1C;
--color-secondary: #0a2e2e;
--color-secondary-foreground: #ffe6cb;
--color-muted: #083030;
--color-muted-foreground: #8aaa9a;
--color-accent: #0c3838;
--color-accent-foreground: #ffe6cb;
/* Consumed by <Backdrop />; also theme-switchable. */
--warm-glow: rgba(255, 189, 56, 0.35);
--noise-opacity-mul: 1;
}
/* Nousnet's hermes-agent layout bumps `small` and `code` to readable
dashboard sizes. Keep in sync. */
small { font-size: 1.0625rem; }
code { font-size: 0.875rem; }
/* Shadcn-compat tokens.
The dashboard's page code predates the Nous DS and uses shadcn-style
utility classes (bg-card, text-muted-foreground, border-border, etc.)
extensively. Rather than rewrite every call site, we expose those
tokens on top of the Nous palette so classes continue to resolve. */
@theme inline {
/* Remap foreground to midground so `text-foreground` / `bg-foreground`
stay visible in LENS_0, `--foreground` itself has alpha 0. */
--color-foreground: var(--midground);
--color-card: color-mix(in srgb, var(--midground-base) 4%, var(--background-base));
--color-card-foreground: var(--midground);
--color-primary: var(--midground);
--color-primary-foreground: var(--background-base);
--color-secondary: color-mix(in srgb, var(--midground-base) 6%, var(--background-base));
--color-secondary-foreground: var(--midground);
--color-muted: color-mix(in srgb, var(--midground-base) 8%, var(--background-base));
--color-muted-foreground: color-mix(in srgb, var(--midground-base) 55%, transparent);
--color-accent: color-mix(in srgb, var(--midground-base) 10%, var(--background-base));
--color-accent-foreground: var(--midground);
--color-destructive: #fb2c36;
--color-destructive-foreground: #fff;
--color-destructive-foreground: #ffffff;
--color-success: #4ade80;
--color-warning: #ffbd38;
--color-border: color-mix(in srgb, #ffe6cb 15%, transparent);
--color-input: color-mix(in srgb, #ffe6cb 15%, transparent);
--color-ring: #ffe6cb;
--color-popover: #062424;
--color-popover-foreground: #ffe6cb;
/* ---- Font stacks ---- */
--font-sans: "Mondwest", Arial, sans-serif;
--font-mono: "Courier Prime", "Courier New", monospace;
--font-display: "Mondwest", Arial, sans-serif;
--font-expanded: "RulesExpanded", Arial, sans-serif;
--font-compressed: "RulesCompressed", Arial, sans-serif;
--color-border: color-mix(in srgb, var(--midground-base) 15%, transparent);
--color-input: color-mix(in srgb, var(--midground-base) 15%, transparent);
--color-ring: var(--midground);
--color-popover: color-mix(in srgb, var(--midground-base) 4%, var(--background-base));
--color-popover-foreground: var(--midground);
}
/* ---- Global body ---- */
body {
margin: 0;
font-family: "Mondwest", Arial, sans-serif;
background: var(--color-background);
color: var(--color-foreground);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
/* ---- Selection ---- */
::selection {
background: var(--color-foreground);
color: var(--color-background);
}
/* ---- Scrollbars (thin, subtle) ---- */
* {
scrollbar-width: thin;
scrollbar-color: transparent transparent;
}
*:hover {
scrollbar-color: color-mix(in srgb, var(--color-foreground) 15%, transparent) transparent;
}
html, body {
overflow-x: hidden;
scrollbar-color: color-mix(in srgb, var(--color-foreground) 25%, transparent) transparent;
}
::-webkit-scrollbar { width: 4px; height: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--color-foreground) 20%, transparent);
}
::-webkit-scrollbar-thumb:hover {
background: color-mix(in srgb, var(--color-foreground) 35%, transparent);
}
/* ---- Hide scrollbar utility ---- */
.scrollbar-none {
-ms-overflow-style: none;
scrollbar-width: none;
}
.scrollbar-none::-webkit-scrollbar {
display: none;
}
/* ---- Code blocks ---- */
code {
font-family: "Courier Prime", "Courier New", monospace;
font-size: 0.85em;
padding: 0.15em 0.4em;
border-radius: 0;
background: color-mix(in srgb, var(--color-foreground) 8%, transparent);
}
/* ---- Dither texture ---- */
.dither {
background: repeating-conic-gradient(currentColor 0% 25%, #0000 0% 50%) 0 0 / 2px 2px;
}
/* ---- Blink cursor (only on group hover, like canonical) ---- */
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
.blink {
display: none;
}
.group:hover .blink {
display: inline-block;
animation: blink 1s step-end infinite;
}
/* ---- Page transitions ---- */
@keyframes fade-in {
from { opacity: 0; transform: translateY(4px); }
to { opacity: 1; transform: translateY(0); }
}
/* Toast animations used by `components/Toast.tsx`. */
@keyframes toast-in {
from { opacity: 0; transform: translateX(16px); }
to { opacity: 1; transform: translateX(0); }
@ -136,62 +78,38 @@ code {
to { opacity: 0; transform: translateX(16px); }
}
/* ---- Plus-lighter blend for headings ---- */
/* Hide scrollbar utility — used by the header's overflow-x nav row. */
.scrollbar-none {
-ms-overflow-style: none;
scrollbar-width: none;
}
.scrollbar-none::-webkit-scrollbar {
display: none;
}
/* Plus-lighter blend used by logos/titles for a subtle glow. */
.blend-lighter {
mix-blend-mode: plus-lighter;
}
/* ---- Font utilities ---- */
.font-display { font-family: "Mondwest", Arial, sans-serif; }
.font-expanded { font-family: "RulesExpanded", Arial, sans-serif; }
.font-compressed { font-family: "RulesCompressed", Arial, sans-serif; }
.font-courier { font-family: "Courier Prime", "Courier New", monospace; }
.font-collapse { font-family: "Collapse", Arial, sans-serif; }
.font-mono-ui { font-family: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, monospace; }
/* System UI-monospace stack distinct from `font-courier` (Courier
Prime), used for dense data readouts where the display font would
break the grid. */
.font-mono-ui {
font-family: ui-monospace, 'SF Mono', 'Cascadia Mono', Menlo, monospace;
}
/* ---- Subtle grain overlay for badges ---- */
/* Subtle grain overlay for badges. */
.grain {
position: relative;
}
.grain::after {
content: "";
content: '';
position: absolute;
inset: 0;
opacity: 0.12;
pointer-events: none;
background: repeating-conic-gradient(currentColor 0% 25%, #0000 0% 50%) 0 0 / 2px 2px;
background: repeating-conic-gradient(currentColor 0% 25%, #0000 0% 50%) 0 0 /
2px 2px;
}
/* ---- Global noise grain (canonical: color-dodge, #eaeaea, high density) ---- */
.noise-overlay {
pointer-events: none;
position: fixed;
inset: 0;
z-index: 101;
mix-blend-mode: color-dodge;
opacity: 0.10;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' fill='%23eaeaea' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E");
background-size: 512px 512px;
}
/* ---- Vignette (canonical: top-left amber radial, lighten blend) ---- */
.warm-glow {
pointer-events: none;
position: fixed;
inset: 0;
z-index: 99;
mix-blend-mode: lighten;
opacity: 0.22;
background: radial-gradient(ellipse at 0% 0%, rgba(255,189,56,0.35) 0%, rgba(255,189,56,0) 60%);
}
/* ---- Reduced motion ---- */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}