UNPKG

tanuki-ui

Version:

HTML-first React component library with semantic elements, multi-OS themes, and production-ready visual node editor

319 lines (270 loc) 10.9 kB
:root { /* Fonts - Vercel uses Inter font family */ --themeDefaultFontFamily: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; --themeControlFontFamily: var(--themeDefaultFontFamily); --themeLabelFontFamily: var(--themeDefaultFontFamily); --themeSystemFont: normal normal 400 14px/1.5 var(--themeDefaultFontFamily); /* Vercel Color Palette - Light Mode */ --vercelGray50: #fafafa; --vercelGray100: #f4f4f5; --vercelGray200: #e4e4e7; --vercelGray300: #d4d4d8; --vercelGray400: #a1a1aa; --vercelGray500: #71717a; --vercelGray600: #52525b; --vercelGray700: #3f3f46; --vercelGray800: #27272a; --vercelGray900: #18181b; --vercelBlue50: #eff6ff; --vercelBlue100: #dbeafe; --vercelBlue500: #3b82f6; --vercelBlue600: #2563eb; --vercelBlue700: #1d4ed8; --vercelRed50: #fef2f2; --vercelRed100: #fee2e2; --vercelRed500: #ef4444; --vercelRed600: #dc2626; --vercelGreen50: #f0fdf4; --vercelGreen100: #dcfce7; --vercelGreen500: #22c55e; --vercelGreen600: #16a34a; --vercelYellow50: #fefce8; --vercelYellow100: #fef3c7; --vercelYellow500: #eab308; --vercelYellow600: #ca8a04; /* Core Colors */ --textColor: var(--vercelGray900); --secondaryTextColor: var(--vercelGray600); --tertiaryTextColor: var(--vercelGray500); --quaternaryTextColor: var(--vercelGray400); --accentColor: var(--vercelBlue600); --successColor: var(--vercelGreen500); --warningColor: var(--vercelYellow500); --errorColor: var(--vercelRed500); --cautionColor: var(--errorColor); /* Background Colors */ --windowBackgroundColor: #ffffff; --backgroundSecondary: var(--vercelGray50); --backgroundTertiary: var(--vercelGray100); /* Text Colors */ --labelColor: var(--textColor); --secondaryLabelColor: var(--secondaryTextColor); --tertiaryLabelColor: var(--tertiaryTextColor); --quaternaryLabelColor: var(--quaternaryTextColor); --placeholderTextColor: var(--vercelGray400); --selectedTextColor: var(--textColor); --textBackgroundColor: var(--windowBackgroundColor); --selectedTextBackgroundColor: var(--vercelBlue100); --linkColor: var(--accentColor); /* Border Colors */ --separatorColor: var(--vercelGray200); --borderColor: var(--vercelGray300); --focusBorderColor: var(--accentColor); /* Control Colors */ --controlAccentColor: var(--accentColor); --controlColor: var(--windowBackgroundColor); --controlTextColor: var(--textColor); --disabledControlTextColor: var(--vercelGray400); --selectedControlColor: var(--vercelBlue100); --selectedControlTextColor: var(--textColor); /* Shadow */ --shadowColor: rgba(0, 0, 0, 0.1); --boxShadowSmall: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --boxShadowMedium: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --boxShadowLarge: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* Typography */ --textFont: normal normal 400 14px/1.5 var(--themeDefaultFontFamily); --textFontSmall: normal normal 400 12px/1.4 var(--themeDefaultFontFamily); --textFontLarge: normal normal 400 16px/1.5 var(--themeDefaultFontFamily); /* Control Styling */ --controlBorderRadius: 6px; --controlBorderRadiusSmall: 4px; --controlBorderRadiusLarge: 8px; --controlPadding: 8px 12px; --controlPaddingSmall: 6px 10px; --controlPaddingLarge: 12px 16px; --controlBackground: var(--windowBackgroundColor); --controlBorder: 1px solid var(--borderColor); --controlBoxShadow: var(--boxShadowSmall); --controlHoverBackground: var(--vercelGray50); --controlFocusBoxShadow: 0 0 0 2px var(--vercelBlue100); --controlTextFont: var(--textFont); /* Button Primary */ --controlBackground--primary: var(--accentColor); --controlTextColor--primary: #ffffff; --controlBorder--primary: 1px solid var(--accentColor); --controlHoverBackground--primary: var(--vercelBlue700); --controlFocusBoxShadow--primary: 0 0 0 2px var(--vercelBlue100); /* Button Secondary */ --controlBackground--secondary: var(--windowBackgroundColor); --controlTextColor--secondary: var(--textColor); --controlBorder--secondary: 1px solid var(--borderColor); --controlHoverBackground--secondary: var(--vercelGray50); /* Button Danger */ --controlBackground--danger: var(--errorColor); --controlTextColor--danger: #ffffff; --controlBorder--danger: 1px solid var(--errorColor); --controlHoverBackground--danger: var(--vercelRed600); /* Input */ --inputBackground: var(--windowBackgroundColor); --inputBorder: 1px solid var(--borderColor); --inputBorderRadius: var(--controlBorderRadius); --inputPadding: var(--controlPadding); --inputFont: var(--textFont); --inputBoxShadow: var(--boxShadowSmall); --inputFocusBorder: 1px solid var(--focusBorderColor); --inputFocusBoxShadow: 0 0 0 2px var(--vercelBlue100); /* Progress & Meter */ --progressBackground: var(--vercelGray200); --progressForeground: var(--accentColor); --meterBackground: var(--vercelGray200); --meterOptimum: var(--successColor); --meterSuboptimal: var(--warningColor); --meterEvenLessGood: var(--errorColor); /* Table */ --tableBackgroundColor: var(--windowBackgroundColor); --tableBorderColor: var(--separatorColor); --tableHeaderTextColor: var(--secondaryTextColor); --tableHeaderBackgroundColor: var(--backgroundSecondary); --tableRowTextColor: var(--textColor); --tableRowBackgroundColor: var(--windowBackgroundColor); --tableRowAlternateBackgroundColor: var(--vercelGray50); /* Dialog */ --dialogBackground: var(--windowBackgroundColor); --dialogBoxShadow: var(--boxShadowLarge); --dialogBorderRadius: var(--controlBorderRadiusLarge); /* Navigation */ --tabBarBackground: var(--windowBackgroundColor); --tabItemTextColor: var(--secondaryTextColor); --tabItemTextColor-selected: var(--accentColor); --tabItemBackground-selected: var(--vercelBlue50); --tabItemBorderRadius: var(--controlBorderRadius); /* Sidebar */ --sidebarBackground: var(--backgroundSecondary); --sidebarItemTextColor: var(--textColor); --sidebarItemHoverBackground: var(--vercelGray100); --sidebarItemSelectedBackground: var(--vercelBlue100); --sidebarItemSelectedTextColor: var(--accentColor); --sidebarListItemTextColor: var(--textColor); --selectedSidebarListItemBackground: var(--vercelBlue100); --selectedSidebarListItemTextColor: var(--accentColor); /* Sidebar Section Title */ --sidebarSectionTitleFont: var(--textFontSmall); --sidebarSectionTitleLetterSpacing: 0.05em; --sidebarSectionTitleMargin: 20px 0 8px 0; --sidebarSectionTitlePadding: 0 12px; --sidebarSectionTitleColor: var(--tertiaryTextColor); --sidebarSectionTitleBackground: transparent; --sidebarSectionTitleBorderRadius: 0; --sidebarSectionTitleTextTransform: uppercase; /* Checkbox & Radio */ --checkboxSize: 16px; --checkboxBackground: var(--windowBackgroundColor); --checkboxBorder: var(--inputBorder); --checkboxCheckedBackground: var(--accentColor); --checkboxCheckedBorder: 1px solid var(--accentColor); /* Elevation levels */ --elevation1: var(--boxShadowSmall); --elevation2: var(--boxShadowMedium); --elevation3: var(--boxShadowLarge); } /* Dark Mode */ @media (prefers-color-scheme: dark) { :root { /* Dark Mode Colors */ --textColor: var(--vercelGray100); --secondaryTextColor: var(--vercelGray400); --tertiaryTextColor: var(--vercelGray500); --quaternaryTextColor: var(--vercelGray600); --windowBackgroundColor: var(--vercelGray900); --backgroundSecondary: var(--vercelGray800); --backgroundTertiary: var(--vercelGray700); --labelColor: var(--textColor); --secondaryLabelColor: var(--secondaryTextColor); --tertiaryLabelColor: var(--tertiaryTextColor); --quaternaryLabelColor: var(--quaternaryTextColor); --placeholderTextColor: var(--vercelGray500); --selectedTextColor: var(--textColor); --textBackgroundColor: var(--windowBackgroundColor); --selectedTextBackgroundColor: rgba(59, 130, 246, 0.3); /* Border Colors - Dark */ --separatorColor: var(--vercelGray700); --borderColor: var(--vercelGray600); /* Control Colors - Dark */ --controlColor: var(--vercelGray800); --controlTextColor: var(--textColor); --disabledControlTextColor: var(--vercelGray500); --controlBackground: var(--vercelGray800); --controlHoverBackground: var(--vercelGray700); /* Input - Dark */ --inputBackground: var(--vercelGray800); --inputBorder: 1px solid var(--vercelGray600); /* Table - Dark */ --tableBackgroundColor: var(--windowBackgroundColor); --tableBorderColor: var(--separatorColor); --tableHeaderBackgroundColor: var(--backgroundSecondary); --tableRowBackgroundColor: var(--windowBackgroundColor); --tableRowAlternateBackgroundColor: var(--vercelGray800); /* Dialog - Dark */ --dialogBackground: var(--vercelGray800); /* Navigation - Dark */ --tabBarBackground: var(--windowBackgroundColor); --tabItemBackground-selected: rgba(59, 130, 246, 0.2); /* Sidebar - Dark */ --sidebarBackground: var(--backgroundSecondary); --sidebarItemHoverBackground: var(--vercelGray700); --sidebarItemSelectedBackground: rgba(59, 130, 246, 0.2); /* Checkbox - Dark */ --checkboxBackground: var(--vercelGray800); --checkboxBorder: 1px solid var(--vercelGray600); /* Shadows - Dark */ --shadowColor: rgba(0, 0, 0, 0.3); --boxShadowSmall: 0 1px 2px 0 rgba(0, 0, 0, 0.2); --boxShadowMedium: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2); --boxShadowLarge: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2); } } /* Vercel-specific component overrides */ :root { font-feature-settings: "rlig" 1, "calt" 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; } /* Focus styles for accessibility */ *:focus-visible { outline: 2px solid var(--accentColor); outline-offset: 2px; } /* Scrollbar styling */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--vercelGray300); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--vercelGray400); } @media (prefers-color-scheme: dark) { ::-webkit-scrollbar-thumb { background: var(--vercelGray600); } ::-webkit-scrollbar-thumb:hover { background: var(--vercelGray500); } } /* Animation and transitions */ * { transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }