folder rename
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
// =============================================================================
|
||||
// Fusion Plating — Safety (EHS) backend styles
|
||||
// Copyright 2026 Nexa Systems Inc.
|
||||
// License OPL-1 (Odoo Proprietary License v1.0)
|
||||
//
|
||||
// THEME AWARENESS
|
||||
// ---------------
|
||||
// This file NEVER hardcodes backgrounds or text colours. All surface colours
|
||||
// come from Odoo / Bootstrap CSS custom properties so the component renders
|
||||
// correctly in BOTH light and dark mode without any duplication:
|
||||
//
|
||||
// background: var(--bs-body-bg) // main surface
|
||||
// surface: var(--o-view-background-color) // view canvas
|
||||
// foreground: var(--bs-body-color) // main text
|
||||
// muted text: var(--bs-secondary-color)
|
||||
// border: var(--bs-border-color)
|
||||
// primary: var(--o-action) // Odoo action/brand
|
||||
//
|
||||
// Hazard / severity tints use color-mix() against the Bootstrap theme
|
||||
// tokens so a red badge is darker on light mode and brighter on dark mode
|
||||
// automatically — one rule, two looks.
|
||||
//
|
||||
// We never target `.o_dark`, `html.dark`, or `@media (prefers-color-scheme)`
|
||||
// to override colours. If you find yourself needing that, it's a smell —
|
||||
// use a variable instead.
|
||||
// =============================================================================
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Local helpers
|
||||
// -----------------------------------------------------------------------------
|
||||
@mixin fp-tint($color-var, $amount: 12%) {
|
||||
background-color: color-mix(in srgb, var(#{$color-var}) #{$amount}, transparent);
|
||||
color: var(#{$color-var});
|
||||
border: 1px solid color-mix(in srgb, var(#{$color-var}) 35%, transparent);
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// SDS kanban — hazard-class tinted card
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_sds_kanban {
|
||||
|
||||
.o_fp_sds_card {
|
||||
// Use a left border tint by hazard class — subtle, theme-aware.
|
||||
border-left-width: 4px;
|
||||
border-left-color: var(--bs-border-color);
|
||||
|
||||
&[data-hazard="flammable"],
|
||||
&[data-hazard="oxidizer"] {
|
||||
border-left-color: var(--bs-danger);
|
||||
background-color: color-mix(in srgb, var(--bs-danger) 4%, var(--o-view-background-color, var(--bs-body-bg)));
|
||||
}
|
||||
&[data-hazard="corrosive"],
|
||||
&[data-hazard="toxic"],
|
||||
&[data-hazard="carcinogen"],
|
||||
&[data-hazard="reproductive_toxin"] {
|
||||
border-left-color: var(--bs-warning);
|
||||
background-color: color-mix(in srgb, var(--bs-warning) 4%, var(--o-view-background-color, var(--bs-body-bg)));
|
||||
}
|
||||
&[data-hazard="compressed_gas"],
|
||||
&[data-hazard="sensitizer"],
|
||||
&[data-hazard="aquatic_toxin"] {
|
||||
border-left-color: var(--bs-info, var(--o-action));
|
||||
}
|
||||
|
||||
// Status overlay — expired wins over hazard tint.
|
||||
&[data-state="expired"] {
|
||||
border-left-color: var(--bs-danger);
|
||||
opacity: 0.85;
|
||||
}
|
||||
&[data-state="expiring_soon"] {
|
||||
border-left-color: var(--bs-warning);
|
||||
}
|
||||
&[data-state="withdrawn"] {
|
||||
opacity: 0.6;
|
||||
}
|
||||
}
|
||||
|
||||
.o_fp_badge {
|
||||
padding: 2px 8px;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 500;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.02em;
|
||||
border-radius: 999px;
|
||||
|
||||
&[data-state="current"] {
|
||||
@include fp-tint(--bs-success);
|
||||
}
|
||||
&[data-state="expiring_soon"] {
|
||||
@include fp-tint(--bs-warning);
|
||||
}
|
||||
&[data-state="expired"] {
|
||||
@include fp-tint(--bs-danger);
|
||||
}
|
||||
&[data-state="withdrawn"] {
|
||||
@include fp-tint(--bs-secondary-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Training kanban — expiry indicator on the card
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_training_kanban {
|
||||
|
||||
.o_fp_training_card {
|
||||
border-left-width: 4px;
|
||||
border-left-color: var(--bs-success);
|
||||
|
||||
&[data-state="expiring_soon"] {
|
||||
border-left-color: var(--bs-warning);
|
||||
}
|
||||
&[data-state="expired"] {
|
||||
border-left-color: var(--bs-danger);
|
||||
background-color: color-mix(in srgb, var(--bs-danger) 5%, var(--o-view-background-color, var(--bs-body-bg)));
|
||||
}
|
||||
}
|
||||
|
||||
.o_fp_badge {
|
||||
padding: 2px 8px;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 500;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.02em;
|
||||
border-radius: 999px;
|
||||
|
||||
&[data-state="current"] {
|
||||
@include fp-tint(--bs-success);
|
||||
}
|
||||
&[data-state="expiring_soon"] {
|
||||
@include fp-tint(--bs-warning);
|
||||
}
|
||||
&[data-state="expired"] {
|
||||
@include fp-tint(--bs-danger);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Incident kanban — severity tint by type
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_incident_kanban {
|
||||
|
||||
.o_fp_incident_card {
|
||||
border-left-width: 4px;
|
||||
border-left-color: var(--bs-secondary-color);
|
||||
|
||||
// High-severity
|
||||
&[data-type="injury"],
|
||||
&[data-type="lost_time"],
|
||||
&[data-type="medical"] {
|
||||
border-left-color: var(--bs-danger);
|
||||
background-color: color-mix(in srgb, var(--bs-danger) 5%, var(--o-view-background-color, var(--bs-body-bg)));
|
||||
}
|
||||
|
||||
// Mid-severity
|
||||
&[data-type="first_aid"],
|
||||
&[data-type="property_damage"],
|
||||
&[data-type="environmental"] {
|
||||
border-left-color: var(--bs-warning);
|
||||
}
|
||||
|
||||
// Low-severity
|
||||
&[data-type="near_miss"] {
|
||||
border-left-color: var(--bs-info, var(--o-action));
|
||||
}
|
||||
|
||||
// Closed records dim
|
||||
&[data-state="closed"] {
|
||||
opacity: 0.65;
|
||||
}
|
||||
}
|
||||
|
||||
.o_fp_badge {
|
||||
padding: 2px 8px;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 500;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.02em;
|
||||
border-radius: 999px;
|
||||
|
||||
&[data-state="draft"] {
|
||||
@include fp-tint(--bs-secondary-color);
|
||||
}
|
||||
&[data-state="investigation"] {
|
||||
@include fp-tint(--bs-warning);
|
||||
}
|
||||
&[data-state="closed"] {
|
||||
@include fp-tint(--bs-success);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user