WFDASH-WEBAPP/src/app/globals.css
SJCoetz 7f924ccc45 refactor: switch hardcoded UI colors to semantic theme tokens
Overhaul the app's color system by replacing all hardcoded Tailwind color classes with semantic theme variables to ensure consistent theming across all components, pages, and tests.

Additional changes:
- Add assigned date support for order item status updates: add `assignedDate` field to the order item status PATCH API, implement server-side normalization/validation, and add corresponding tests
- Refactor purchase order PDF workflows to use the consolidated `purchase_orders.documents` field instead of the legacy separate `purchase_order_pdfs` collection
- Fix quote number parsing and formatting to support both dashed (Q-YYYY-MM-NNN) and dashless (QYYYYMMNNN) formats
- Rename `driver_pool` item status to `collection_pool` across the codebase
- Add null handling for order item quantities and pricing to display "—" for missing values
- Improve filter tab styling: make mobile tabs scrollable, prevent text wrapping, hide scrollbar
- Add new utility scripts, API routes, migrations, and polish small UI/UX fixes including tsconfig updates and theme hook improvements
2026-07-07 17:22:03 +02:00

153 lines
4.5 KiB
CSS

@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
@import "../styles/themes.css";
@custom-variant dark (&:is(.dark *));
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-body);
--font-mono: var(--font-geist-mono);
--font-heading: var(--font-heading);
--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar: var(--sidebar);
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--color-ring: var(--ring);
--color-input-highlight: var(--input-highlight);
--color-input: var(--input);
--color-border: var(--border);
--color-destructive: var(--destructive);
--color-success: var(--success);
--color-success-foreground: var(--success-foreground);
--color-warn: var(--warn);
--color-warn-foreground: var(--warn-foreground);
--color-info: var(--info);
--color-info-foreground: var(--info-foreground);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
--color-muted: var(--muted);
--color-secondary-foreground: var(--secondary-foreground);
--color-secondary: var(--secondary);
--color-primary-foreground: var(--primary-foreground);
--color-primary: var(--primary);
--color-popover-foreground: var(--popover-foreground);
--color-popover: var(--popover);
--color-card-foreground: var(--card-foreground);
--color-card: var(--card);
--radius-sm: calc(var(--radius) * 0.6);
--radius-md: calc(var(--radius) * 0.8);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) * 1.4);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
html {
@apply font-sans;
}
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-heading);
letter-spacing: -0.01em;
}
body {
font-family: var(--font-body);
}
}
/* ============================================================================
* Map labels — clean rounded pills on the supplier map. Token-driven so
* every theme picks up its sidebar/card colours automatically.
* ========================================================================= */
.supplier-map-label {
border: 0;
border-radius: 999px;
box-shadow: 0 6px 16px rgba(15, 23, 42, 0.16);
background: var(--card);
color: var(--foreground);
font-size: 10px;
font-weight: 700;
line-height: 1;
padding: 3px 7px;
}
.supplier-map-label::before {
display: none;
}
.dark .supplier-map-label {
background: oklch(0.20 0.01 240);
color: oklch(0.94 0.005 240);
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.34);
}
.leaflet-container {
z-index: 0;
}
.leaflet-pane,
.leaflet-top,
.leaflet-bottom {
z-index: 10;
}
.dark .leaflet-control-zoom a,
.dark .leaflet-control-attribution,
.dark .leaflet-popup-content-wrapper,
.dark .leaflet-popup-tip {
background: var(--card);
color: var(--card-foreground);
}
.dark .leaflet-control-zoom a {
border-color: var(--border);
}
.dark .leaflet-control-attribution a,
.dark .leaflet-popup-content a {
color: var(--primary);
}
/* ============================================================================
* Modal shell — single source of truth for dialog/sheet padding rhythm.
* Every dialog in the app composes this so they all line up.
* ========================================================================= */
.modal-shell {
@apply flex max-h-[90vh] flex-col gap-0 overflow-hidden bg-card text-card-foreground;
border-radius: var(--radius-lg);
}
.modal-shell__header {
@apply flex flex-row items-center justify-between gap-3 border-b px-6 py-4;
}
.modal-shell__title {
@apply truncate text-base font-semibold tracking-tight;
}
.modal-shell__body {
@apply flex-1 overflow-y-auto px-6 py-5;
}
.modal-shell__footer {
@apply flex flex-row flex-wrap items-center justify-end gap-2 border-t px-6 py-3;
}
.modal-shell__footer--split {
@apply justify-between;
}