This commit is contained in:
2026-05-08 09:06:14 +12:00
parent 1533b5aa9b
commit 9afc3170ff
22 changed files with 2710 additions and 549 deletions
+51 -35
View File
@@ -36,7 +36,7 @@
let passwordInput: HTMLInputElement | null = null;
const currentYear = new Date().getFullYear();
const appVersion = `v${packageInfo.version}`;
const releaseStage = 'Alpha';
const releaseStage = 'Beta';
const monthLabels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'];
@@ -141,9 +141,9 @@
function buildSegments(current: DashboardSummary | null) {
return [
{ label: 'Materials', value: current?.raw_materials?.count ?? 0, color: '#2c9b5f' },
{ label: 'Mixes', value: current?.mixes?.count ?? 0, color: '#d7802a' },
{ label: 'Products', value: current?.products?.count ?? 0, color: '#286ea7' }
{ label: 'Materials', value: current?.raw_materials?.count ?? 0, color: '#15803d' },
{ label: 'Mixes', value: current?.mixes?.count ?? 0, color: '#bf8700' },
{ label: 'Products', value: current?.products?.count ?? 0, color: '#0969da' }
];
}
@@ -179,7 +179,7 @@
y1: Number(inner.y.toFixed(2)),
x2: Number(outer.x.toFixed(2)),
y2: Number(outer.y.toFixed(2)),
color: activeStop?.color ?? '#2c9b5f'
color: activeStop?.color ?? '#15803d'
};
});
}
@@ -325,7 +325,8 @@
<div class="auth-footer">
<div class="lean-brand">
<img class="footer-login-logo" src="/logo-hsf.png" alt="Lean 101" />
<img class="lean-isotipo" src="/lean101-isotipo.png" alt="Lean 101" />
<span class="powered-by-label">Powered by Lean 101</span>
</div>
<div class="auth-meta">
<span class="version-badge">
@@ -387,7 +388,8 @@
<div class="auth-footer">
<div class="lean-brand">
<img class="footer-login-logo" src="/logo-hsf.png" alt="Lean 101" />
<img class="lean-isotipo" src="/lean101-isotipo.png" alt="Lean 101" />
<span class="powered-by-label">Powered by Lean 101</span>
</div>
<div class="auth-meta">
<span class="version-badge">
@@ -579,13 +581,13 @@
<svg viewBox="0 0 100 56" preserveAspectRatio="none" aria-hidden="true">
<defs>
<linearGradient id="chart-fill" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#59c97f" stop-opacity="0.32" />
<stop offset="100%" stop-color="#59c97f" stop-opacity="0.02" />
<stop offset="0%" stop-color="#15803d" stop-opacity="0.22" />
<stop offset="100%" stop-color="#15803d" stop-opacity="0.02" />
</linearGradient>
</defs>
<path d={trendArea} fill="url(#chart-fill)"></path>
<path d={trendLine} fill="none" stroke="#2ba560" stroke-width="1.6" stroke-linecap="round"></path>
<path d={trendLine} fill="none" stroke="#15803d" stroke-width="1.6" stroke-linecap="round"></path>
</svg>
</div>
@@ -753,7 +755,7 @@
radial-gradient(circle at top left, rgba(115, 197, 146, 0.16), transparent 32%),
radial-gradient(circle at bottom right, rgba(33, 94, 60, 0.1), transparent 30%),
rgba(255, 255, 255, 0.96);
box-shadow: 0 28px 70px rgba(17, 37, 25, 0.14);
box-shadow: none;
backdrop-filter: blur(14px);
overflow: hidden;
}
@@ -833,10 +835,10 @@
display: inline-flex;
align-items: center;
padding: 0.48rem 0.8rem;
border: 1px solid rgba(44, 123, 72, 0.12);
border: 1px solid color-mix(in srgb, var(--color-brand) 16%, transparent);
border-radius: 999px;
background: rgba(240, 249, 244, 0.96);
color: #1e6a3d;
background: var(--color-brand-tint);
color: var(--color-success);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.04em;
@@ -858,10 +860,10 @@
align-items: center;
justify-content: center;
padding: 0.28rem 0.62rem;
border: 1px solid rgba(20, 130, 73, 0.16);
border: 1px solid color-mix(in srgb, var(--color-brand) 16%, transparent);
border-radius: 999px;
background: #eaf8ef;
color: #148249;
background: var(--color-brand-tint);
color: var(--color-success);
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.08em;
@@ -910,8 +912,8 @@
height: 0.95rem;
flex-shrink: 0;
border-radius: 999px;
background: linear-gradient(135deg, #2f7b48 0%, #174b2d 100%);
box-shadow: 0 0 0 0 rgba(47, 123, 72, 0.28);
background: var(--color-brand);
box-shadow: 0 0 0 0 rgba(21, 128, 61, 0.28);
animation: pulse 1.8s ease-out infinite;
}
@@ -946,8 +948,8 @@
.auth-form input:focus {
outline: none;
border-color: #4d9668;
box-shadow: 0 0 0 0.24rem rgba(77, 150, 104, 0.12);
border-color: var(--color-brand);
box-shadow: 0 0 0 0.24rem color-mix(in srgb, var(--color-brand) 12%, transparent);
background: #fff;
}
@@ -975,6 +977,20 @@
.lean-brand {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.lean-isotipo {
width: 2.2rem;
height: 2.2rem;
object-fit: contain;
opacity: 0.8;
}
.powered-by-label {
font-size: 0.78rem;
font-weight: 500;
color: var(--muted);
}
.auth-meta {
@@ -987,17 +1003,17 @@
@keyframes pulse {
0% {
box-shadow: 0 0 0 0 rgba(47, 123, 72, 0.26);
box-shadow: 0 0 0 0 rgba(21, 128, 61, 0.26);
transform: scale(0.96);
}
70% {
box-shadow: 0 0 0 0.7rem rgba(47, 123, 72, 0);
box-shadow: 0 0 0 0.7rem rgba(21, 128, 61, 0);
transform: scale(1);
}
100% {
box-shadow: 0 0 0 0 rgba(47, 123, 72, 0);
box-shadow: 0 0 0 0 rgba(21, 128, 61, 0);
transform: scale(0.96);
}
}
@@ -1102,8 +1118,8 @@
.primary-button {
border: none;
color: #fff;
background: linear-gradient(135deg, #2f7b48 0%, #174b2d 100%);
box-shadow: 0 8px 20px rgba(23, 75, 45, 0.2);
background: var(--color-brand);
box-shadow: none;
}
.secondary-button {
@@ -1195,7 +1211,7 @@
justify-content: center;
border-radius: 0.75rem;
color: #fff;
background: linear-gradient(135deg, #2f7b48 0%, #174b2d 100%);
background: var(--green-deep);
font-size: 0.74rem;
font-weight: 700;
letter-spacing: 0.05em;
@@ -1297,7 +1313,7 @@
.toggle-pill .active {
color: #fff;
background: linear-gradient(135deg, #2f7b48 0%, #174b2d 100%);
background: var(--green-deep);
}
.market-layout {
@@ -1441,8 +1457,8 @@
width: 2rem;
height: 2rem;
border-radius: 999px;
background: linear-gradient(135deg, #eef8f1 0%, #dff5e8 100%);
border: 1px solid #d3eadb;
background: var(--color-brand-tint);
border: 1px solid color-mix(in srgb, var(--color-brand) 15%, transparent);
}
.metric-card strong {
@@ -1457,11 +1473,11 @@
margin-top: 0.4rem;
border-radius: 1.25rem;
background:
linear-gradient(180deg, rgba(88, 197, 121, 0.06) 0%, rgba(88, 197, 121, 0.01) 100%),
linear-gradient(180deg, rgba(21, 128, 61, 0.05) 0%, rgba(21, 128, 61, 0.01) 100%),
repeating-linear-gradient(
to bottom,
transparent 0 3.45rem,
rgba(196, 226, 205, 0.45) 3.45rem 3.55rem
rgba(21, 128, 61, 0.08) 3.45rem 3.55rem
);
overflow: hidden;
}
@@ -1481,7 +1497,7 @@
border-radius: 0.8rem;
background: #1e2420;
color: #fff;
box-shadow: 0 10px 20px rgba(15, 23, 17, 0.16);
box-shadow: none;
}
.focus-badge span {
@@ -1700,7 +1716,7 @@
.owner-chip span {
color: #fff;
background: linear-gradient(135deg, #2f7b48 0%, #174b2d 100%);
background: var(--green-deep);
border-radius: 999px;
}
@@ -1764,7 +1780,7 @@
width: 0.75rem;
height: 0.75rem;
border-radius: 999px;
background: linear-gradient(135deg, #2f7b48 0%, #174b2d 100%);
background: var(--color-brand);
flex-shrink: 0;
}