Spaces:
Sleeping
Sleeping
| @tailwind base; | |
| @tailwind components; | |
| @tailwind utilities; | |
| /* LIGHT MODE */ | |
| :root { | |
| --button-outline: rgba(0,0,0, .10); | |
| --badge-outline: rgba(0,0,0, .05); | |
| --opaque-button-border-intensity: -8; | |
| --elevate-1: rgba(0,0,0, .03); | |
| --elevate-2: rgba(0,0,0, .08); | |
| --background: 210 5% 98%; | |
| --foreground: 210 6% 12%; | |
| --border: 210 6% 90%; | |
| --card: 210 5% 96%; | |
| --card-foreground: 210 6% 12%; | |
| --card-border: 210 6% 92%; | |
| --sidebar: 210 5% 94%; | |
| --sidebar-foreground: 210 6% 12%; | |
| --sidebar-border: 210 6% 88%; | |
| --sidebar-primary: 211 85% 42%; | |
| --sidebar-primary-foreground: 210 5% 98%; | |
| --sidebar-accent: 210 8% 88%; | |
| --sidebar-accent-foreground: 210 6% 12%; | |
| --sidebar-ring: 211 85% 42%; | |
| --popover: 210 6% 92%; | |
| --popover-foreground: 210 6% 12%; | |
| --popover-border: 210 6% 86%; | |
| --primary: 211 85% 42%; | |
| --primary-foreground: 210 5% 98%; | |
| --secondary: 210 8% 86%; | |
| --secondary-foreground: 210 6% 12%; | |
| --muted: 210 8% 88%; | |
| --muted-foreground: 210 5% 38%; | |
| --accent: 210 12% 90%; | |
| --accent-foreground: 210 6% 12%; | |
| --destructive: 0 72% 48%; | |
| --destructive-foreground: 0 5% 98%; | |
| --input: 210 12% 72%; | |
| --ring: 211 85% 42%; | |
| --chart-1: 211 85% 42%; | |
| --chart-2: 142 76% 36%; | |
| --chart-3: 262 52% 47%; | |
| --chart-4: 27 87% 52%; | |
| --chart-5: 340 82% 52%; | |
| --font-sans: Inter, sans-serif; | |
| --font-serif: Georgia, serif; | |
| --font-mono: JetBrains Mono, monospace; | |
| --radius: .5rem; | |
| --shadow-2xs: 0px 2px 0px 0px hsl(210 6% 12% / 0.00); | |
| --shadow-xs: 0px 2px 0px 0px hsl(210 6% 12% / 0.00); | |
| --shadow-sm: 0px 2px 0px 0px hsl(210 6% 12% / 0.00), 0px 1px 2px -1px hsl(210 6% 12% / 0.00); | |
| --shadow: 0px 2px 0px 0px hsl(210 6% 12% / 0.00), 0px 1px 2px -1px hsl(210 6% 12% / 0.00); | |
| --shadow-md: 0px 2px 0px 0px hsl(210 6% 12% / 0.00), 0px 2px 4px -1px hsl(210 6% 12% / 0.00); | |
| --shadow-lg: 0px 2px 0px 0px hsl(210 6% 12% / 0.00), 0px 4px 6px -1px hsl(210 6% 12% / 0.00); | |
| --shadow-xl: 0px 2px 0px 0px hsl(210 6% 12% / 0.00), 0px 8px 10px -1px hsl(210 6% 12% / 0.00); | |
| --shadow-2xl: 0px 2px 0px 0px hsl(210 6% 12% / 0.00); | |
| --tracking-normal: 0em; | |
| --spacing: 0.25rem; | |
| /* Fallback for older browsers */ | |
| --sidebar-primary-border: hsl(var(--sidebar-primary)); | |
| --sidebar-primary-border: hsl(from hsl(var(--sidebar-primary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --sidebar-accent-border: hsl(var(--sidebar-accent)); | |
| --sidebar-accent-border: hsl(from hsl(var(--sidebar-accent)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --primary-border: hsl(var(--primary)); | |
| --primary-border: hsl(from hsl(var(--primary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --secondary-border: hsl(var(--secondary)); | |
| --secondary-border: hsl(from hsl(var(--secondary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --muted-border: hsl(var(--muted)); | |
| --muted-border: hsl(from hsl(var(--muted)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --accent-border: hsl(var(--accent)); | |
| --accent-border: hsl(from hsl(var(--accent)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --destructive-border: hsl(var(--destructive)); | |
| --destructive-border: hsl(from hsl(var(--destructive)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| } | |
| .dark { | |
| --button-outline: rgba(255,255,255, .10); | |
| --badge-outline: rgba(255,255,255, .05); | |
| --opaque-button-border-intensity: 9; | |
| --elevate-1: rgba(255,255,255, .04); | |
| --elevate-2: rgba(255,255,255, .09); | |
| --background: 210 5% 8%; | |
| --foreground: 210 5% 95%; | |
| --border: 210 6% 18%; | |
| --card: 210 5% 10%; | |
| --card-foreground: 210 5% 95%; | |
| --card-border: 210 6% 14%; | |
| --sidebar: 210 5% 12%; | |
| --sidebar-foreground: 210 5% 95%; | |
| --sidebar-border: 210 6% 16%; | |
| --sidebar-primary: 211 85% 55%; | |
| --sidebar-primary-foreground: 210 5% 98%; | |
| --sidebar-accent: 210 8% 16%; | |
| --sidebar-accent-foreground: 210 5% 95%; | |
| --sidebar-ring: 211 85% 55%; | |
| --popover: 210 6% 14%; | |
| --popover-foreground: 210 5% 95%; | |
| --popover-border: 210 6% 18%; | |
| --primary: 211 85% 55%; | |
| --primary-foreground: 210 5% 98%; | |
| --secondary: 210 8% 18%; | |
| --secondary-foreground: 210 5% 95%; | |
| --muted: 210 8% 16%; | |
| --muted-foreground: 210 5% 70%; | |
| --accent: 210 12% 15%; | |
| --accent-foreground: 210 5% 95%; | |
| --destructive: 0 72% 52%; | |
| --destructive-foreground: 0 5% 98%; | |
| --input: 210 12% 32%; | |
| --ring: 211 85% 55%; | |
| --chart-1: 211 85% 65%; | |
| --chart-2: 142 76% 55%; | |
| --chart-3: 262 52% 65%; | |
| --chart-4: 27 87% 62%; | |
| --chart-5: 340 82% 62%; | |
| --shadow-2xs: 0px 2px 0px 0px hsl(210 5% 95% / 0.00); | |
| --shadow-xs: 0px 2px 0px 0px hsl(210 5% 95% / 0.00); | |
| --shadow-sm: 0px 2px 0px 0px hsl(210 5% 95% / 0.00), 0px 1px 2px -1px hsl(210 5% 95% / 0.00); | |
| --shadow: 0px 2px 0px 0px hsl(210 5% 95% / 0.00), 0px 1px 2px -1px hsl(210 5% 95% / 0.00); | |
| --shadow-md: 0px 2px 0px 0px hsl(210 5% 95% / 0.00), 0px 2px 4px -1px hsl(210 5% 95% / 0.00); | |
| --shadow-lg: 0px 2px 0px 0px hsl(210 5% 95% / 0.00), 0px 4px 6px -1px hsl(210 5% 95% / 0.00); | |
| --shadow-xl: 0px 2px 0px 0px hsl(210 5% 95% / 0.00), 0px 8px 10px -1px hsl(210 5% 95% / 0.00); | |
| --shadow-2xl: 0px 2px 0px 0px hsl(210 5% 95% / 0.00); | |
| /* Fallback for older browsers */ | |
| --sidebar-primary-border: hsl(var(--sidebar-primary)); | |
| --sidebar-primary-border: hsl(from hsl(var(--sidebar-primary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --sidebar-accent-border: hsl(var(--sidebar-accent)); | |
| --sidebar-accent-border: hsl(from hsl(var(--sidebar-accent)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --primary-border: hsl(var(--primary)); | |
| --primary-border: hsl(from hsl(var(--primary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --secondary-border: hsl(var(--secondary)); | |
| --secondary-border: hsl(from hsl(var(--secondary)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --muted-border: hsl(var(--muted)); | |
| --muted-border: hsl(from hsl(var(--muted)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --accent-border: hsl(var(--accent)); | |
| --accent-border: hsl(from hsl(var(--accent)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| /* Fallback for older browsers */ | |
| --destructive-border: hsl(var(--destructive)); | |
| --destructive-border: hsl(from hsl(var(--destructive)) h s calc(l + var(--opaque-button-border-intensity)) / alpha); | |
| } | |
| @layer base { | |
| * { | |
| @apply border-border; | |
| } | |
| body { | |
| @apply font-sans antialiased bg-background text-foreground; | |
| } | |
| } | |
| /** | |
| * Using the elevate system. | |
| * Automatic contrast adjustment. | |
| * | |
| * <element className="hover-elevate" /> | |
| * <element className="active-elevate-2" /> | |
| * | |
| * // Using the tailwind utility when a data attribute is "on" | |
| * <element className="toggle-elevate data-[state=on]:toggle-elevated" /> | |
| * // Or manually controlling the toggle state | |
| * <element className="toggle-elevate toggle-elevated" /> | |
| * | |
| * Elevation systems have to handle many states. | |
| * - not-hovered, vs. hovered vs. active (three mutually exclusive states) | |
| * - toggled or not | |
| * - focused or not (this is not handled with these utilities) | |
| * | |
| * Even without handling focused or not, this is six possible combinations that | |
| * need to be distinguished from eachother visually. | |
| */ | |
| @layer utilities { | |
| /* Hide ugly search cancel button in Chrome until we can style it properly */ | |
| input[type="search"]::-webkit-search-cancel-button { | |
| @apply hidden; | |
| } | |
| /* Placeholder styling for contentEditable div */ | |
| [contenteditable][data-placeholder]:empty::before { | |
| content: attr(data-placeholder); | |
| color: hsl(var(--muted-foreground)); | |
| pointer-events: none; | |
| } | |
| /* .no-default-hover-elevate/no-default-active-elevate is an escape hatch so consumers of | |
| * buttons/badges can remove the automatic brightness adjustment on interactions | |
| * and program their own. */ | |
| .no-default-hover-elevate {} | |
| .no-default-active-elevate {} | |
| /** | |
| * Toggleable backgrounds go behind the content. Hoverable/active goes on top. | |
| * This way they can stack/compound. Both will overlap the parent's borders! | |
| * So borders will be automatically adjusted both on toggle, and hover/active, | |
| * and they will be compounded. | |
| */ | |
| .toggle-elevate::before, | |
| .toggle-elevate-2::before { | |
| content: ""; | |
| pointer-events: none; | |
| position: absolute; | |
| inset: 0px; | |
| /*border-radius: inherit; match rounded corners */ | |
| border-radius: inherit; | |
| z-index: -1; | |
| /* sits behind content but above backdrop */ | |
| } | |
| .toggle-elevate.toggle-elevated::before { | |
| background-color: var(--elevate-2); | |
| } | |
| /* If there's a 1px border, adjust the inset so that it covers that parent's border */ | |
| .border.toggle-elevate::before { | |
| inset: -1px; | |
| } | |
| /* Does not work on elements with overflow:hidden! */ | |
| .hover-elevate:not(.no-default-hover-elevate), | |
| .active-elevate:not(.no-default-active-elevate), | |
| .hover-elevate-2:not(.no-default-hover-elevate), | |
| .active-elevate-2:not(.no-default-active-elevate) { | |
| position: relative; | |
| z-index: 0; | |
| } | |
| .hover-elevate:not(.no-default-hover-elevate)::after, | |
| .active-elevate:not(.no-default-active-elevate)::after, | |
| .hover-elevate-2:not(.no-default-hover-elevate)::after, | |
| .active-elevate-2:not(.no-default-active-elevate)::after { | |
| content: ""; | |
| pointer-events: none; | |
| position: absolute; | |
| inset: 0px; | |
| /*border-radius: inherit; match rounded corners */ | |
| border-radius: inherit; | |
| z-index: 999; | |
| /* sits in front of content */ | |
| } | |
| .hover-elevate:hover:not(.no-default-hover-elevate)::after, | |
| .active-elevate:active:not(.no-default-active-elevate)::after { | |
| background-color: var(--elevate-1); | |
| } | |
| .hover-elevate-2:hover:not(.no-default-hover-elevate)::after, | |
| .active-elevate-2:active:not(.no-default-active-elevate)::after { | |
| background-color: var(--elevate-2); | |
| } | |
| /* If there's a 1px border, adjust the inset so that it covers that parent's border */ | |
| .border.hover-elevate:not(.no-hover-interaction-elevate)::after, | |
| .border.active-elevate:not(.no-active-interaction-elevate)::after, | |
| .border.hover-elevate-2:not(.no-hover-interaction-elevate)::after, | |
| .border.active-elevate-2:not(.no-active-interaction-elevate)::after, | |
| .border.hover-elevate:not(.no-hover-interaction-elevate)::after { | |
| inset: -1px; | |
| } | |
| } | |