Initial portal commit: landing + 9 AI-powered apps
Apps: - dwg-rooms: extract room numbers from DWG/DXF - dwg-counting: count symbols in PDF drawings (OpenCV template matching) - contract-check: review PDF contracts against a checklist (Claude vision + Tesseract OCR fallback) - email-drafter: bullet notes → polished Czech/English business emails - invoice-extractor: PDF/image invoice → structured data → Excel - translator: Czech-first translator across 19 languages with tone control - vv-check: find inconsistent unit prices across VV sheets in one workbook - vv-compare: diff original vs new VV files (changes / added / removed) - feature-request: portal users submit ideas + sample files Infrastructure: - LiteLLM gateway with per-app virtual keys + budgets - Langfuse observability - Geist font, shared theme, cross-subdomain back link + theme sync via cookie/URL - Caddy reverse proxy on *.klas.chat
This commit is contained in:
155
landing/src/app/globals.css
Normal file
155
landing/src/app/globals.css
Normal file
@@ -0,0 +1,155 @@
|
||||
@import "tailwindcss";
|
||||
|
||||
@custom-variant dark (&:where(.dark, .dark *));
|
||||
|
||||
@theme {
|
||||
/* Dify / Untitled UI palette */
|
||||
--color-bg-primary: #ffffff;
|
||||
--color-bg-secondary: #f9fafb;
|
||||
--color-bg-tertiary: #f2f4f7;
|
||||
--color-bg-section: #f6f7f9;
|
||||
|
||||
--color-text-primary: #101828;
|
||||
--color-text-secondary: #354052;
|
||||
--color-text-tertiary: #676f83;
|
||||
--color-text-quaternary: #98a2b2;
|
||||
--color-text-disabled: #d0d5dc;
|
||||
|
||||
--color-border-subtle: rgb(16 24 40 / 0.04);
|
||||
--color-border-default: rgb(16 24 40 / 0.08);
|
||||
--color-border-hover: rgb(16 24 40 / 0.14);
|
||||
--color-border-strong: #d0d5dc;
|
||||
|
||||
--color-card: #ffffff;
|
||||
--color-card-hover: #f9fafb;
|
||||
|
||||
/* Dify primary blue */
|
||||
--color-primary-50: #eff4ff;
|
||||
--color-primary-100: #d1e0ff;
|
||||
--color-primary-200: #b2caff;
|
||||
--color-primary-500: #2970ff;
|
||||
--color-primary-600: #155aef;
|
||||
--color-primary-700: #004aeb;
|
||||
--color-primary-800: #00359e;
|
||||
|
||||
--color-primary: var(--color-primary-600);
|
||||
--color-primary-hover: var(--color-primary-700);
|
||||
--color-primary-foreground: #ffffff;
|
||||
|
||||
/* Accent palette for tile icons (also re-declared in :root below so
|
||||
Tailwind v4 doesn't tree-shake them — they're only used via inline
|
||||
style in tile.tsx, which Tailwind's purger can't see). */
|
||||
--color-accent-blue: #155aef;
|
||||
--color-accent-indigo: #444ce7;
|
||||
--color-accent-violet: #7a5af8;
|
||||
--color-accent-cyan: #0ba5ec;
|
||||
--color-accent-emerald: #17b26a;
|
||||
--color-accent-amber: #f79009;
|
||||
--color-accent-rose: #f04438;
|
||||
--color-accent-gray: #475467;
|
||||
|
||||
--color-destructive: #d92d20;
|
||||
--color-destructive-bg: #fef3f2;
|
||||
--color-destructive-border: #fda29b;
|
||||
|
||||
--radius-sm: 6px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
--radius-xl: 16px;
|
||||
|
||||
--shadow-card: 0 1px 2px rgb(16 24 40 / 0.05);
|
||||
--shadow-card-hover: 0 12px 24px -8px rgb(16 24 40 / 0.12), 0 4px 8px -4px rgb(16 24 40 / 0.06);
|
||||
|
||||
--font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif;
|
||||
--font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, monospace;
|
||||
}
|
||||
|
||||
/* Re-declare accents in :root so they survive Tailwind v4's purge of unused
|
||||
@theme variables. Used by inline styles in tile.tsx (color-mix). */
|
||||
:root {
|
||||
--color-accent-blue: #155aef;
|
||||
--color-accent-indigo: #444ce7;
|
||||
--color-accent-violet: #7a5af8;
|
||||
--color-accent-cyan: #0ba5ec;
|
||||
--color-accent-emerald: #17b26a;
|
||||
--color-accent-amber: #f79009;
|
||||
--color-accent-rose: #f04438;
|
||||
--color-accent-gray: #475467;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--color-bg-primary: #14181f;
|
||||
--color-bg-secondary: #1a1f29;
|
||||
--color-bg-tertiary: #232936;
|
||||
--color-bg-section: #181d26;
|
||||
|
||||
--color-text-primary: #f5f7fa;
|
||||
--color-text-secondary: #c8ccd5;
|
||||
--color-text-tertiary: #98a2b2;
|
||||
--color-text-quaternary: #676f83;
|
||||
--color-text-disabled: #4a525e;
|
||||
|
||||
--color-border-subtle: rgb(255 255 255 / 0.05);
|
||||
--color-border-default: rgb(255 255 255 / 0.08);
|
||||
--color-border-hover: rgb(255 255 255 / 0.14);
|
||||
--color-border-strong: #354052;
|
||||
|
||||
--color-card: #1a1f29;
|
||||
--color-card-hover: #232936;
|
||||
|
||||
--color-primary: var(--color-primary-500);
|
||||
--color-primary-hover: #4187ff;
|
||||
|
||||
--shadow-card: 0 1px 2px rgb(0 0 0 / 0.4);
|
||||
--shadow-card-hover: 0 12px 24px -8px rgb(0 0 0 / 0.5), 0 4px 8px -4px rgb(0 0 0 / 0.3);
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background: var(--color-bg-secondary);
|
||||
color: var(--color-text-primary);
|
||||
font-family: var(--font-sans);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* Dify-style typography utilities */
|
||||
.system-2xs-medium-uppercase {
|
||||
font-size: 10px;
|
||||
line-height: 14px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.05em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.system-xs-regular {
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
.system-xs-medium {
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.system-sm-medium {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.system-sm-semibold {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Scrollbar polish */
|
||||
.no-scrollbar::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.no-scrollbar {
|
||||
scrollbar-width: none;
|
||||
}
|
||||
Reference in New Issue
Block a user