changes
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
// =============================================================================
|
||||
// Fusion Plating — Quality (QMS) 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 and
|
||||
// semantic colours come from Odoo / Bootstrap CSS custom properties so the
|
||||
// component renders correctly in BOTH light and dark mode without any
|
||||
// duplication or media-query overrides.
|
||||
//
|
||||
// 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
|
||||
// success: var(--bs-success)
|
||||
// warning: var(--bs-warning)
|
||||
// danger: var(--bs-danger)
|
||||
// info: var(--bs-info)
|
||||
//
|
||||
// Semantic status tints use `color-mix()` against the Bootstrap theme tokens
|
||||
// so a danger 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)`.
|
||||
// =============================================================================
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Local helper — semantic tint mixin
|
||||
// -----------------------------------------------------------------------------
|
||||
@mixin fp-quality-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);
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Universal overdue indicator — used across CAPAs, calibration, and AVL
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_overdue {
|
||||
display: inline-block;
|
||||
padding: 1px 8px;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
border-radius: 999px;
|
||||
@include fp-quality-tint(--bs-danger, 14%);
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// NCR kanban — severity tint on the left border
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_ncr_kanban {
|
||||
|
||||
.o_fp_ncr_card {
|
||||
border-left-width: 4px;
|
||||
border-left-color: var(--bs-info, var(--o-action));
|
||||
|
||||
&[data-severity="low"] {
|
||||
border-left-color: var(--bs-info, var(--o-action));
|
||||
}
|
||||
&[data-severity="medium"] {
|
||||
border-left-color: color-mix(in srgb, var(--bs-warning) 70%, var(--bs-border-color));
|
||||
}
|
||||
&[data-severity="high"] {
|
||||
border-left-color: var(--bs-warning);
|
||||
}
|
||||
&[data-severity="critical"] {
|
||||
border-left-color: var(--bs-danger);
|
||||
}
|
||||
}
|
||||
|
||||
.o_fp_severity_pill {
|
||||
padding: 2px 8px;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.03em;
|
||||
border-radius: 999px;
|
||||
|
||||
&[data-severity="low"] { @include fp-quality-tint(--bs-info); }
|
||||
&[data-severity="medium"] { @include fp-quality-tint(--bs-secondary-color); }
|
||||
&[data-severity="high"] { @include fp-quality-tint(--bs-warning); }
|
||||
&[data-severity="critical"] { @include fp-quality-tint(--bs-danger); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// CAPA kanban — overdue tint, type pill
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_capa_kanban {
|
||||
|
||||
.o_fp_capa_card {
|
||||
border-left-width: 4px;
|
||||
border-left-color: var(--bs-success);
|
||||
|
||||
&[data-overdue="true"] {
|
||||
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_capa_type {
|
||||
padding: 2px 8px;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.03em;
|
||||
border-radius: 999px;
|
||||
|
||||
&[data-type="corrective"] { @include fp-quality-tint(--bs-warning); }
|
||||
&[data-type="preventive"] { @include fp-quality-tint(--bs-info); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// FAIR card — result tint
|
||||
// -----------------------------------------------------------------------------
|
||||
.o_fp_fair_card {
|
||||
border-left-width: 4px;
|
||||
border-left-color: var(--bs-secondary-color);
|
||||
|
||||
&[data-result="pass"] {
|
||||
border-left-color: var(--bs-success);
|
||||
}
|
||||
&[data-result="conditional"] {
|
||||
border-left-color: var(--bs-warning);
|
||||
}
|
||||
&[data-result="fail"] {
|
||||
border-left-color: var(--bs-danger);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user