D4 Part 2: hub style.css v2 + template sweep
- style.css: slate tokens -> the canonical navy block + @font-face (self-hosted, latin-ext for Hungarian customer names); single 2px radius; hairline table rows (--line-soft dividers, density kept); status classes re-expressed per the design-system addendum: .status-badge = outline tag + CSS ::before dot keyed by the raw status the templates emit (ok=blue, warn/blocked/stale=amber, down/fail=red, pending/disabled=quiet neutral); .status-dot = class-based 8px dot; severity badges stay filled amber/red (exceptions stay loud); config badges = filled informational chips in v2 colors; row tint only for warn/down (warn-dim/crit-dim). - Two-tone brand heading on all 8 'Felhom Hub' pages (<h1>Felhom <span>Hub</span></h1>, span = blue-bright). - app_detail chart retinted: avg #2EA8F5 (primary data), peak #8E7CE8 (secondary DATA series — not status red), catalog-limit line #E0A93E (threshold marker); legend/tick/grid -> v2 literals. - customer_unified: JS status-message colors (success -> blue-bright, error -> crit), all inline slate hexes -> tokens. - Login page inline HTML retinted (#0088cc -> #0083D8). - Grep gate: every slate hex (#0f172a #1e293b #334155 #60a5fa #4ade80 #facc15 #f87171 #94a3b8 #64748b #475569 #e2e8f0) at ZERO across hub/internal/web (non-test); statusIcon 0; inline statusColor style 0. go build/vet/test green; api/ + store/ untouched.
This commit is contained in:
@@ -272,7 +272,7 @@
|
||||
{{if index . "last_sync_error"}}
|
||||
<div class="info-item">
|
||||
<span class="label">Szinkron hiba</span>
|
||||
<span class="value" style="color: #f87171">{{index . "last_sync_error"}}</span>
|
||||
<span class="value" style="color: var(--crit)">{{index . "last_sync_error"}}</span>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
@@ -439,9 +439,9 @@
|
||||
<span class="value">
|
||||
v{{.LatestVersion}}
|
||||
{{if .UpdateAvailable}}
|
||||
<span style="color: #4ade80; margin-left: 0.3em;">● update available</span>
|
||||
<span style="color: var(--blue-bright); margin-left: 0.3em;">● update available</span>
|
||||
{{else}}
|
||||
<span style="color: #94a3b8; margin-left: 0.3em;">— up to date</span>
|
||||
<span style="color: var(--text-2); margin-left: 0.3em;">— up to date</span>
|
||||
{{end}}
|
||||
</span>
|
||||
</div>
|
||||
@@ -449,24 +449,24 @@
|
||||
{{if .ControllerURL}}
|
||||
<div class="info-item">
|
||||
<span class="label">Controller URL</span>
|
||||
<span class="value"><a href="{{.ControllerURL}}" target="_blank" style="color: #60a5fa;">{{.ControllerURL}}</a></span>
|
||||
<span class="value"><a href="{{.ControllerURL}}" target="_blank" style="color: var(--blue-bright);">{{.ControllerURL}}</a></span>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
<!-- Phase 2 managed-update floor (operator-enforced minimum) -->
|
||||
<div class="info-grid" style="margin-top: 0.75rem; border-top: 1px solid #334155; padding-top: 0.75rem;">
|
||||
<div class="info-grid" style="margin-top: 0.75rem; border-top: 1px solid var(--line); padding-top: 0.75rem;">
|
||||
<div class="info-item">
|
||||
<span class="label">Effective floor (min. version)</span>
|
||||
<span class="value">
|
||||
{{if .EffectiveFloor}}v{{.EffectiveFloor}}
|
||||
{{if .BelowFloor}}<span style="color: #f59e0b; margin-left: 0.3em;">● below floor — will auto-update</span>
|
||||
{{else}}<span style="color: #94a3b8; margin-left: 0.3em;">— at/above floor</span>{{end}}
|
||||
{{else}}<span style="color: #94a3b8;">none (Phase 2 inert)</span>{{end}}
|
||||
{{else}}<span style="color: var(--text-2); margin-left: 0.3em;">— at/above floor</span>{{end}}
|
||||
{{else}}<span style="color: var(--text-2);">none (Phase 2 inert)</span>{{end}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Global floor</span>
|
||||
<span class="value">{{if .GlobalFloor}}v{{.GlobalFloor}}{{else}}<span style="color: #94a3b8;">unset</span>{{end}}</span>
|
||||
<span class="value">{{if .GlobalFloor}}v{{.GlobalFloor}}{{else}}<span style="color: var(--text-2);">unset</span>{{end}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<form method="POST" action="/customers/{{.CustomerID}}/floor" style="margin-top: 0.5rem; display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap;">
|
||||
@@ -474,7 +474,7 @@
|
||||
<label style="font-size: 0.85em; color: #cbd5e1;">Per-customer override</label>
|
||||
<input type="text" name="min_controller_version" value="{{.FloorOverride}}" placeholder="e.g. 0.87.0 (blank = use global)" style="padding: 0.3em 0.5em; font-size: 0.85em; width: 14em;">
|
||||
<button class="btn btn-outline btn-sm" type="submit">Save floor</button>
|
||||
<span style="font-size: 0.8em; color: #94a3b8;">Boxes below the effective floor auto-update on their next report. Blank clears the override.</span>
|
||||
<span style="font-size: 0.8em; color: var(--text-2);">Boxes below the effective floor auto-update on their next report. Blank clears the override.</span>
|
||||
</form>
|
||||
<p class="text-muted" style="margin-top: 0.75em; font-size: 0.8em;">
|
||||
Controller updates are agent-driven (the version floor above) and config is delivered by the
|
||||
@@ -705,12 +705,12 @@
|
||||
if (data.ok) {
|
||||
msg.textContent = data.message || 'Geo-korlátozás eltávolítva';
|
||||
msg.style.display = 'inline';
|
||||
msg.style.color = '#4ade80';
|
||||
msg.style.color = '#2EA8F5';
|
||||
setTimeout(function() { location.reload(); }, 2000);
|
||||
} else {
|
||||
msg.textContent = data.error || 'Hiba történt';
|
||||
msg.style.display = 'inline';
|
||||
msg.style.color = '#f87171';
|
||||
msg.style.color = '#E5534B';
|
||||
btn.disabled = false;
|
||||
btn.textContent = 'Összes geo-korlátozás eltávolítása';
|
||||
}
|
||||
@@ -718,7 +718,7 @@
|
||||
.catch(function() {
|
||||
msg.textContent = 'Kapcsolódási hiba';
|
||||
msg.style.display = 'inline';
|
||||
msg.style.color = '#f87171';
|
||||
msg.style.color = '#E5534B';
|
||||
btn.disabled = false;
|
||||
btn.textContent = 'Összes geo-korlátozás eltávolítása';
|
||||
});
|
||||
@@ -753,7 +753,7 @@
|
||||
position: relative;
|
||||
width: 32px;
|
||||
height: 18px;
|
||||
background: #475569;
|
||||
background: var(--bg-2);
|
||||
border-radius: 9px;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
@@ -764,7 +764,7 @@
|
||||
left: 2px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
background: #94a3b8;
|
||||
background: var(--text-2);
|
||||
border-radius: 50%;
|
||||
transition: transform 0.2s, background 0.2s;
|
||||
}
|
||||
@@ -775,7 +775,7 @@
|
||||
transform: translateX(14px);
|
||||
background: #fff;
|
||||
}
|
||||
.toggle-label { color: #94a3b8; }
|
||||
.toggle-label { color: var(--text-2); }
|
||||
</style>
|
||||
<script>
|
||||
(function() {
|
||||
|
||||
Reference in New Issue
Block a user