Design consistency audit fixes: alerts, cards, dark mode, utilities

Alert sweep (113 alerts, 79 files):
  All persistent static banners now carry alert-permanent so the
  layout's 5-second auto-dismiss cannot swallow guidance, warnings,
  or validation errors. Transient dismissible toasts left untouched.

CSS fixes (site.css):
  .card.shadow-sm      — strips rogue border from ~40 drifted cards
  .card-header.bg-white — rebinds to var(--bs-body-bg) so card
                          headers follow dark/light theme correctly
  Typography utilities  — .text-2xs (.68rem), .text-xs (.73rem)
  Token color classes   — .text-ember, .text-ok, .text-bad,
                          .text-warn, .text-cool, .bg-paper-2
  Layout utilities      — .mw-xs/sm/md/lg replace inline max-width
  Comment              — documents text-ember vs text-primary intent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-10 18:05:29 -04:00
parent f6d457fe0e
commit 328b195127
80 changed files with 603 additions and 561 deletions
@@ -1,4 +1,4 @@
@using PowderCoating.Application.DTOs.PurchaseOrder
@using PowderCoating.Application.DTOs.PurchaseOrder
@model CreatePurchaseOrderDto
@{
@@ -25,7 +25,7 @@
<h4 class="mb-0">
@if (fromLowStock)
{
<span><i class="bi bi-lightning-charge text-warning me-1"></i> New PO From Low Stock</span>
<span><i class="bi bi-lightning-charge text-warning me-1"></i> New PO — From Low Stock</span>
}
else
{
@@ -35,7 +35,7 @@
<a tabindex="0" class="help-icon" role="button"
data-bs-toggle="popover" data-bs-placement="right" data-bs-trigger="focus"
data-bs-title="New Purchase Order"
data-bs-content="POs are saved as Draft and can be edited before submitting. Add line items from your inventory catalog or enter a custom description for items not in the system. Once submitted you can receive goods against the PO receiving automatically updates inventory quantities. After receiving, use Create Bill to convert the PO into a payable bill.">
data-bs-content="POs are saved as Draft and can be edited before submitting. Add line items from your inventory catalog or enter a custom description for items not in the system. Once submitted you can receive goods against the PO — receiving automatically updates inventory quantities. After receiving, use Create Bill to convert the PO into a payable bill.">
<i class="bi bi-question-circle"></i>
</a>
</div>
@@ -46,7 +46,7 @@
@if (!ViewData.ModelState.IsValid)
{
<div class="alert alert-danger">
<div class="alert alert-danger alert-permanent">
<ul class="mb-0">
@foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
{
@@ -70,7 +70,7 @@
<a tabindex="0" class="help-icon" role="button"
data-bs-toggle="popover" data-bs-placement="right" data-bs-trigger="focus"
data-bs-title="Order Details"
data-bs-content="Select the vendor you're ordering from. Order Date defaults to today adjust if you're entering a past order. Expected Delivery is used to flag the PO as Overdue on the list view if goods haven't arrived by that date.">
data-bs-content="Select the vendor you're ordering from. Order Date defaults to today — adjust if you're entering a past order. Expected Delivery is used to flag the PO as Overdue on the list view if goods haven't arrived by that date.">
<i class="bi bi-question-circle"></i>
</a>
</div>
@@ -80,7 +80,7 @@
<label asp-for="VendorId" class="form-label fw-semibold">Vendor <span class="text-danger">*</span></label>
<select asp-for="VendorId" asp-items="@ViewBag.Vendors" class="form-select"
data-quick-add-url="/Vendors/Create" data-quick-add-title="Add New Vendor">
<option value="__new__">+ Add New Vendor</option>
<option value="__new__">+ Add New Vendor…</option>
</select>
<span asp-validation-for="VendorId" class="text-danger small"></span>
</div>
@@ -147,12 +147,12 @@
<div class="col-md-6">
<label asp-for="Notes" class="form-label fw-semibold">Notes</label>
<textarea asp-for="Notes" class="form-control" rows="3"
placeholder="Visible on PO"></textarea>
placeholder="Visible on PO…"></textarea>
</div>
<div class="col-md-6">
<label asp-for="InternalNotes" class="form-label fw-semibold">Internal Notes</label>
<textarea asp-for="InternalNotes" class="form-control" rows="3"
placeholder="Internal use only"></textarea>
placeholder="Internal use only…"></textarea>
</div>
</div>
</div>
@@ -1,4 +1,4 @@
@using PowderCoating.Application.DTOs.PurchaseOrder
@using PowderCoating.Application.DTOs.PurchaseOrder
@model UpdatePurchaseOrderDto
@{
@@ -27,14 +27,14 @@
</a>
</div>
<div class="alert alert-info d-flex align-items-center gap-2 mb-3">
<div class="alert alert-info alert-permanent d-flex align-items-center gap-2 mb-3">
<i class="bi bi-info-circle-fill"></i>
<span>Only <strong>Draft</strong> purchase orders can be edited.</span>
</div>
@if (!ViewData.ModelState.IsValid)
{
<div class="alert alert-danger">
<div class="alert alert-danger alert-permanent">
<ul class="mb-0">
@foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
{
@@ -57,7 +57,7 @@
<label asp-for="VendorId" class="form-label fw-semibold">Vendor <span class="text-danger">*</span></label>
<select asp-for="VendorId" asp-items="@ViewBag.Vendors" class="form-select"
data-quick-add-url="/Vendors/Create" data-quick-add-title="Add New Vendor">
<option value="__new__">+ Add New Vendor</option>
<option value="__new__">+ Add New Vendor…</option>
</select>
<span asp-validation-for="VendorId" class="text-danger small"></span>
</div>
@@ -114,12 +114,12 @@
<div class="col-md-6">
<label asp-for="Notes" class="form-label fw-semibold">Notes</label>
<textarea asp-for="Notes" class="form-control" rows="3"
placeholder="Visible on PO"></textarea>
placeholder="Visible on PO…"></textarea>
</div>
<div class="col-md-6">
<label asp-for="InternalNotes" class="form-label fw-semibold">Internal Notes</label>
<textarea asp-for="InternalNotes" class="form-control" rows="3"
placeholder="Internal use only"></textarea>
placeholder="Internal use only…"></textarea>
</div>
</div>
</div>
@@ -1,8 +1,8 @@
@using PowderCoating.Application.DTOs.PurchaseOrder
@using PowderCoating.Application.DTOs.PurchaseOrder
@model ReceivePurchaseOrderDto
@{
ViewData["Title"] = $"Receive Goods {ViewBag.PoNumber}";
ViewData["Title"] = $"Receive Goods — {ViewBag.PoNumber}";
int poId = (int)ViewBag.PoId;
}
@@ -17,11 +17,11 @@
<a tabindex="0" class="help-icon" role="button"
data-bs-toggle="popover" data-bs-placement="right" data-bs-trigger="focus"
data-bs-title="Receive Goods"
data-bs-content="Enter the quantity actually received for each line item. Use Receive All to fill in the full remaining quantity for every item. You can receive partial quantities the PO becomes Partially Received and you can come back to record the rest later. Saving automatically adds the received quantities to inventory on hand and records purchase transactions.">
data-bs-content="Enter the quantity actually received for each line item. Use Receive All to fill in the full remaining quantity for every item. You can receive partial quantities — the PO becomes Partially Received and you can come back to record the rest later. Saving automatically adds the received quantities to inventory on hand and records purchase transactions.">
<i class="bi bi-question-circle"></i>
</a>
</div>
<small class="text-muted">@ViewBag.PoNumber · @ViewBag.VendorName · Ordered @((DateTime)ViewBag.OrderDate).ToString("MM/dd/yyyy")</small>
<small class="text-muted">@ViewBag.PoNumber · @ViewBag.VendorName · Ordered @((DateTime)ViewBag.OrderDate).ToString("MM/dd/yyyy")</small>
</div>
<a asp-action="Details" asp-route-id="@poId" class="btn btn-sm btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Back
@@ -40,7 +40,7 @@
<a tabindex="0" class="help-icon" role="button"
data-bs-toggle="popover" data-bs-placement="right" data-bs-trigger="focus"
data-bs-title="Items to Receive"
data-bs-content="Remaining = Ordered minus Previously Received. Enter how many units arrived in this shipment you can enter less than Remaining for a partial delivery. Rows already fully received are shown in green and cannot be edited. Only inventory catalog items will have their stock quantities updated on save.">
data-bs-content="Remaining = Ordered minus Previously Received. Enter how many units arrived in this shipment — you can enter less than Remaining for a partial delivery. Rows already fully received are shown in green and cannot be edited. Only inventory catalog items will have their stock quantities updated on save.">
<i class="bi bi-question-circle"></i>
</a>
</div>
@@ -108,7 +108,7 @@
else
{
<input type="hidden" name="Items[@i].QuantityToReceive" value="0" />
<span class="text-muted"></span>
<span class="text-muted">—</span>
}
</td>
</tr>
@@ -132,12 +132,12 @@
<div class="mb-3">
<label asp-for="Notes" class="form-label fw-semibold">Notes</label>
<textarea asp-for="Notes" class="form-control" rows="3"
placeholder="Any notes about this receipt"></textarea>
placeholder="Any notes about this receipt…"></textarea>
</div>
</div>
</div>
<div class="alert alert-info small">
<div class="alert alert-info alert-permanent small">
<i class="bi bi-info-circle me-1"></i>
Receiving goods will automatically update inventory quantities and record purchase transactions.
</div>