VigilanzaTurni/client/src/index.css
marco370 abe4041cd1 Add basic UI components and structure for the application
Initial commit adds core UI components, including layout elements, form controls, and navigation elements, along with the main application structure and routing.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 99f0fce6-9386-489a-9632-1d81223cab44
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/99f0fce6-9386-489a-9632-1d81223cab44/nGJAldO
2025-10-11 09:36:55 +00:00

355 lines
11 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
/* LIGHT MODE */
:root {
--button-outline: rgba(0,0,0, .10);
--badge-outline: rgba(0,0,0, .05);
/* Automatic computation of border around primary / danger buttons */
--opaque-button-border-intensity: -8; /* In terms of percentages */
/* Backgrounds applied on top of other backgrounds when hovered/active */
--elevate-1: rgba(0,0,0, .03);
--elevate-2: rgba(0,0,0, .08);
--background: 0 0% 98%;
--foreground: 220 15% 15%;
--border: 220 10% 88%;
--card: 0 0% 100%;
--card-foreground: 220 15% 15%;
--card-border: 220 10% 92%;
--sidebar: 220 8% 96%;
--sidebar-foreground: 220 15% 15%;
--sidebar-border: 220 10% 90%;
--sidebar-primary: 210 100% 45%;
--sidebar-primary-foreground: 210 100% 98%;
--sidebar-accent: 220 8% 92%;
--sidebar-accent-foreground: 220 15% 20%;
--sidebar-ring: 210 100% 45%;
--popover: 220 8% 94%;
--popover-foreground: 220 15% 15%;
--popover-border: 220 10% 86%;
--primary: 210 100% 45%;
--primary-foreground: 210 100% 98%;
--secondary: 220 8% 88%;
--secondary-foreground: 220 15% 20%;
--muted: 220 10% 91%;
--muted-foreground: 220 12% 35%;
--accent: 220 12% 89%;
--accent-foreground: 220 15% 20%;
--destructive: 0 70% 50%;
--destructive-foreground: 0 0% 98%;
--input: 220 15% 70%;
--ring: 210 100% 45%;
--chart-1: 210 100% 40%;
--chart-2: 160 60% 35%;
--chart-3: 35 90% 45%;
--chart-4: 280 60% 45%;
--chart-5: 25 90% 45%;
--font-sans: Inter, sans-serif;
--font-serif: Georgia, serif;
--font-mono: JetBrains Mono, monospace;
--radius: .5rem; /* 8px */
--shadow-2xs: 0px 2px 0px 0px hsl(220 15% 15% / 0.02);
--shadow-xs: 0px 2px 0px 0px hsl(220 15% 15% / 0.03);
--shadow-sm: 0px 2px 0px 0px hsl(220 15% 15% / 0.04), 0px 1px 2px -1px hsl(220 15% 15% / 0.06);
--shadow: 0px 2px 0px 0px hsl(220 15% 15% / 0.05), 0px 1px 2px -1px hsl(220 15% 15% / 0.08);
--shadow-md: 0px 2px 0px 0px hsl(220 15% 15% / 0.06), 0px 2px 4px -1px hsl(220 15% 15% / 0.10);
--shadow-lg: 0px 2px 0px 0px hsl(220 15% 15% / 0.08), 0px 4px 6px -1px hsl(220 15% 15% / 0.12);
--shadow-xl: 0px 2px 0px 0px hsl(220 15% 15% / 0.10), 0px 8px 10px -1px hsl(220 15% 15% / 0.14);
--shadow-2xl: 0px 2px 0px 0px hsl(220 15% 15% / 0.12);
--tracking-normal: 0em;
--spacing: 0.25rem;
/* Automatically computed borders - intensity can be controlled by the user by the --opaque-button-border-intensity setting */
/* 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; /* In terms of percentages */
/* Backgrounds applied on top of other backgrounds when hovered/active */
--elevate-1: rgba(255,255,255, .04);
--elevate-2: rgba(255,255,255, .09);
--background: 220 15% 12%;
--foreground: 220 8% 92%;
--border: 220 12% 22%;
--card: 220 15% 16%;
--card-foreground: 220 8% 92%;
--card-border: 220 12% 24%;
--sidebar: 220 15% 18%;
--sidebar-foreground: 220 8% 92%;
--sidebar-border: 220 12% 26%;
--sidebar-primary: 210 100% 50%;
--sidebar-primary-foreground: 210 100% 98%;
--sidebar-accent: 220 12% 22%;
--sidebar-accent-foreground: 220 8% 88%;
--sidebar-ring: 210 100% 50%;
--popover: 220 15% 20%;
--popover-foreground: 220 8% 92%;
--popover-border: 220 12% 28%;
--primary: 210 100% 50%;
--primary-foreground: 210 100% 98%;
--secondary: 220 12% 24%;
--secondary-foreground: 220 8% 88%;
--muted: 220 12% 22%;
--muted-foreground: 220 10% 65%;
--accent: 220 15% 23%;
--accent-foreground: 220 8% 88%;
--destructive: 0 70% 55%;
--destructive-foreground: 0 0% 98%;
--input: 220 15% 40%;
--ring: 210 100% 50%;
--chart-1: 210 100% 65%;
--chart-2: 160 60% 55%;
--chart-3: 35 90% 60%;
--chart-4: 280 60% 65%;
--chart-5: 25 90% 60%;
--shadow-2xs: 0px 2px 0px 0px hsl(220 15% 8% / 0.20);
--shadow-xs: 0px 2px 0px 0px hsl(220 15% 8% / 0.25);
--shadow-sm: 0px 2px 0px 0px hsl(220 15% 8% / 0.30), 0px 1px 2px -1px hsl(220 15% 8% / 0.35);
--shadow: 0px 2px 0px 0px hsl(220 15% 8% / 0.35), 0px 1px 2px -1px hsl(220 15% 8% / 0.40);
--shadow-md: 0px 2px 0px 0px hsl(220 15% 8% / 0.40), 0px 2px 4px -1px hsl(220 15% 8% / 0.45);
--shadow-lg: 0px 2px 0px 0px hsl(220 15% 8% / 0.45), 0px 4px 6px -1px hsl(220 15% 8% / 0.50);
--shadow-xl: 0px 2px 0px 0px hsl(220 15% 8% / 0.50), 0px 8px 10px -1px hsl(220 15% 8% / 0.55);
--shadow-2xl: 0px 2px 0px 0px hsl(220 15% 8% / 0.60);
/* 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;
}
}