@import 'tailwindcss'; @source '../**/*.blade.php'; @source '../../app/**/*.php'; @source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; /* | SoftSPM 2 - system "SoftSPM Industrial" (tokeny z uj_dashboard/DESIGN.md). | Corporate Modern + Glassmorphism, karty "Bento", przyciski-pigułki. | Tailwind v4: konfiguracja w CSS przez @theme. */ @theme { /* Fonty (rodziny) */ --font-sans: 'Inter', system-ui, sans-serif; --font-headline-lg: 'Inter', system-ui, sans-serif; --font-headline-md: 'Inter', system-ui, sans-serif; --font-title-sm: 'Inter', system-ui, sans-serif; --font-body-md: 'Inter', system-ui, sans-serif; --font-body-sm: 'Inter', system-ui, sans-serif; --font-data-label: 'JetBrains Mono', monospace; /* Typografia (rozmiary) */ --text-headline-lg: 24px; --text-headline-lg--line-height: 32px; --text-headline-lg--font-weight: 700; --text-headline-md: 20px; --text-headline-md--line-height: 28px; --text-headline-md--font-weight: 600; --text-title-sm: 16px; --text-title-sm--line-height: 24px; --text-title-sm--font-weight: 600; --text-body-md: 14px; --text-body-md--line-height: 20px; --text-body-sm: 12px; --text-body-sm--line-height: 18px; --text-data-label: 12px; --text-data-label--line-height: 16px; --text-data-label--font-weight: 500; --text-data-label--letter-spacing: 0.02em; /* Odstępy nazwane */ --spacing-gutter: 1rem; --spacing-stack-gap: 0.75rem; --spacing-container-padding: 1rem; --spacing-card-inner-padding: 1rem; --spacing-touch-target-min: 44px; /* Cień karty "Bento" */ --shadow-card: 0 4px 12px rgb(0 0 0 / 0.08); /* Kolory - Surface / neutralne */ --color-surface: #f7fafb; --color-surface-bright: #f7fafb; --color-surface-dim: #d7dadc; --color-surface-container-lowest: #ffffff; --color-surface-container-low: #f1f4f5; --color-surface-container: #ebeeef; --color-surface-container-high: #e5e9ea; --color-surface-container-highest: #e0e3e4; --color-surface-variant: #e0e3e4; --color-surface-tint: #b72221; --color-on-surface: #181c1d; --color-on-surface-variant: #5b403d; --color-inverse-surface: #2d3132; --color-inverse-on-surface: #eef1f2; --color-outline: #8f706c; --color-outline-variant: #e3beba; --color-background: #f7fafb; --color-on-background: #181c1d; /* Primary - ciemna czerwień przemysłowa */ --color-primary: #7f0009; --color-on-primary: #ffffff; --color-primary-container: #a61317; --color-on-primary-container: #ffb4ac; --color-inverse-primary: #ffb4ab; --color-primary-fixed: #ffdad6; --color-primary-fixed-dim: #ffb4ab; --color-on-primary-fixed: #410002; --color-on-primary-fixed-variant: #93000d; /* Secondary - teal */ --color-secondary: #006876; --color-on-secondary: #ffffff; --color-secondary-container: #9fecfc; --color-on-secondary-container: #0d6d7b; --color-secondary-fixed: #a2efff; --color-secondary-fixed-dim: #85d2e2; --color-on-secondary-fixed: #001f25; --color-on-secondary-fixed-variant: #004e59; /* Tertiary */ --color-tertiary: #2f3e45; --color-on-tertiary: #ffffff; --color-tertiary-container: #46555d; --color-on-tertiary-container: #b9c9d3; --color-tertiary-fixed: #d5e5ef; --color-tertiary-fixed-dim: #b9c9d2; --color-on-tertiary-fixed: #0e1d24; --color-on-tertiary-fixed-variant: #3a4951; /* Error / statusy */ --color-error: #ba1a1a; --color-on-error: #ffffff; --color-error-container: #ffdad6; --color-on-error-container: #93000a; --color-success-active: #006876; --color-error-alert: #ba1a1a; } /* Wariant 'dark' sterowany klasą na (strategia class, nie media). */ @custom-variant dark (&:where(.dark, .dark *)); /* Kolory neutralne wykresów SVG (adaptują się do motywu). */ :root { --chart-grid: #eceff0; --chart-axis: #9aa6a8; --chart-tick: #888888; --chart-label: #555555; --chart-raw: #1565c0; } /* | ===== MOTYW CIEMNY ===== | Nadpisujemy tylko WARTOŚCI tokenów - wszystkie utility (bg-surface, | text-on-surface, border-outline-variant...) używają var(--color-*), więc | cały interfejs przełącza się automatycznie. Paleta wg Material 3 (dark) | spójna z jasną (czerwień przemysłowa + teal). Tokeny *-fixed są wspólne | dla obu motywów - nie nadpisujemy ich. */ html.dark { /* Surface / neutralne */ --color-surface: #0f1314; --color-surface-bright: #353a3b; --color-surface-dim: #0f1314; --color-surface-container-lowest: #090d0e; --color-surface-container-low: #181c1d; --color-surface-container: #1c2021; --color-surface-container-high: #262a2b; --color-surface-container-highest: #313536; --color-surface-variant: #414b4c; --color-surface-tint: #ffb4ab; --color-on-surface: #e0e3e4; --color-on-surface-variant: #c4c7c8; --color-inverse-surface: #e0e3e4; --color-inverse-on-surface: #2d3132; --color-outline: #899293; --color-outline-variant: #3f4849; --color-background: #0f1314; --color-on-background: #e0e3e4; /* Primary - jaśniejsza czerwień na ciemnym tle */ --color-primary: #ffb4ab; --color-on-primary: #690005; --color-primary-container: #93000d; --color-on-primary-container: #ffdad6; --color-inverse-primary: #a61317; /* Secondary - jaśniejszy teal */ --color-secondary: #85d2e2; --color-on-secondary: #00363f; --color-secondary-container: #004e59; --color-on-secondary-container: #a2efff; /* Tertiary */ --color-tertiary: #b9c9d3; --color-on-tertiary: #243139; --color-tertiary-container: #3a4951; --color-on-tertiary-container: #d5e5ef; /* Error / statusy */ --color-error: #ffb4ab; --color-on-error: #690005; --color-error-container: #93000a; --color-on-error-container: #ffdad6; --color-success-active: #85d2e2; --color-error-alert: #ffb4ab; /* Wykresy */ --chart-grid: #2a2f30; --chart-axis: #566061; --chart-tick: #8a9293; --chart-label: #9aa3a4; --chart-raw: #7fb3ff; } /* ===== Fonty self-hosted (air-gap: pliki w public/fonts/) ===== */ @font-face { font-family: 'Inter'; font-style: normal; font-weight: 100 900; font-display: swap; src: url('/fonts/inter/Inter-Variable.woff2') format('woff2'); } @font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('/fonts/jetbrains-mono/JetBrainsMono-Variable.woff2') format('woff2'); } @font-face { font-family: 'Material Symbols Outlined'; font-style: normal; font-weight: 100 700; font-display: block; src: url('/fonts/material-symbols/MaterialSymbolsOutlined.woff2') format('woff2'); } /* ===== Komponenty ===== */ .material-symbols-outlined { font-family: 'Material Symbols Outlined'; font-weight: normal; font-style: normal; line-height: 1; letter-spacing: normal; text-transform: none; display: inline-block; white-space: nowrap; word-wrap: normal; direction: ltr; font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24; } /* Glassmorfizm - szklane panele/paski (mapa, wyszukiwarka) */ .glass-panel { background: rgba(255, 255, 255, 0.85); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(227, 190, 186, 0.3); } html.dark .glass-panel { background: rgba(24, 28, 29, 0.7); border-color: rgba(137, 146, 147, 0.25); } /* Pill-chipy statusów (OK / Warning / Alert) */ .status-chip { @apply inline-flex items-center gap-1 px-2 py-0.5 rounded-full font-data-label text-data-label; } .status-chip-ok { @apply bg-green-100 text-green-800; } .status-chip-warn { @apply bg-amber-100 text-amber-800; } .status-chip-alert { @apply bg-error-container text-on-error-container; } html.dark .status-chip-ok { @apply bg-green-900/40 text-green-300; } html.dark .status-chip-warn { @apply bg-amber-900/40 text-amber-300; }