266 lines
5.4 KiB
CSS
266 lines
5.4 KiB
CSS
/* Gold Desk — XAU/USD dashboard styles
|
|
*
|
|
* Builds on Bootstrap 5.3 color modes (data-bs-theme). Only app-specific
|
|
* tokens and components live here; layout, typography, tables, badges,
|
|
* cards, alerts, modals, etc. come from Bootstrap.
|
|
*/
|
|
|
|
:root {
|
|
--xau-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
--xau-font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Consolas, Menlo, monospace;
|
|
--xau-gold: #f5b301;
|
|
}
|
|
|
|
/* Forced dark theme (owner decision 2026-08-16): dark background, pure
|
|
* white text (no gray), vivid red/green for data accents. Loaded after
|
|
* Bootstrap so these overrides win. */
|
|
[data-bs-theme="dark"] {
|
|
--bs-body-bg: #0a0e14;
|
|
--bs-secondary-bg: #111823;
|
|
--bs-tertiary-bg: #0e141d;
|
|
--bs-body-color: #ffffff;
|
|
--bs-emphasis-color: #ffffff;
|
|
--bs-heading-color: #ffffff;
|
|
--bs-secondary-color: rgba(255, 255, 255, 0.92);
|
|
--bs-tertiary-color: rgba(255, 255, 255, 0.8);
|
|
--bs-border-color: rgba(255, 255, 255, 0.14);
|
|
--bs-card-bg: #0e141d;
|
|
--bs-card-border-color: rgba(255, 255, 255, 0.12);
|
|
--bs-modal-bg: #0e141d;
|
|
--bs-success: #22c55e;
|
|
--bs-success-rgb: 34, 197, 94;
|
|
--bs-success-text-emphasis: #4ade80;
|
|
--bs-success-bg-subtle: rgba(34, 197, 94, 0.16);
|
|
--bs-success-border-subtle: rgba(34, 197, 94, 0.45);
|
|
--bs-danger: #ef4444;
|
|
--bs-danger-rgb: 239, 68, 68;
|
|
--bs-danger-text-emphasis: #f87171;
|
|
--bs-danger-bg-subtle: rgba(239, 68, 68, 0.16);
|
|
--bs-danger-border-subtle: rgba(239, 68, 68, 0.45);
|
|
}
|
|
|
|
html, body {
|
|
font-family: var(--xau-font-sans);
|
|
letter-spacing: -0.005em;
|
|
-webkit-font-smoothing: antialiased;
|
|
background-color: var(--bs-body-bg);
|
|
color: var(--bs-body-color);
|
|
}
|
|
|
|
.num, .xau-price, .xau-symbol {
|
|
font-family: var(--xau-font-mono);
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.xau-symbol {
|
|
font-size: 0.95rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.08em;
|
|
color: var(--xau-gold);
|
|
}
|
|
|
|
.xau-price {
|
|
line-height: 1;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.live-dot {
|
|
display: inline-block;
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
background: var(--bs-success);
|
|
margin-right: 5px;
|
|
animation: pulse 2.4s ease-in-out infinite;
|
|
}
|
|
|
|
.live-dot.closed {
|
|
background: var(--bs-warning);
|
|
animation: none;
|
|
}
|
|
|
|
@keyframes pulse {
|
|
50% { opacity: 0.35; }
|
|
}
|
|
|
|
/* signal-coloured accents */
|
|
.sig-buy { --xau-signal: var(--bs-success); }
|
|
.sig-sell { --xau-signal: var(--bs-danger); }
|
|
.sig-neutral { --xau-signal: var(--bs-secondary); }
|
|
|
|
.border-signal {
|
|
border-left: 3px solid var(--xau-signal, var(--bs-secondary)) !important;
|
|
}
|
|
|
|
.text-signal {
|
|
color: var(--xau-signal, var(--bs-secondary)) !important;
|
|
}
|
|
|
|
/* timeframe cards */
|
|
.tf-card {
|
|
cursor: pointer;
|
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
}
|
|
|
|
.tf-card:hover, .tf-card:focus-visible {
|
|
border-color: var(--bs-primary);
|
|
box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.15);
|
|
}
|
|
|
|
.tf-name {
|
|
font-family: var(--xau-font-mono);
|
|
font-weight: 700;
|
|
font-size: 1.1rem;
|
|
color: var(--bs-primary);
|
|
letter-spacing: 0.05em;
|
|
}
|
|
|
|
/* score bar: zero-centered diverging with midpoint tick */
|
|
.scorebar {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.75rem;
|
|
}
|
|
|
|
.scorebar .track {
|
|
position: relative;
|
|
flex: 1;
|
|
height: 9px;
|
|
border-radius: 5px;
|
|
background: var(--bs-secondary-bg);
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Chart.js gauge canvas host (see gauge.js) — thin bar in the row */
|
|
.scorebar .gauge-container {
|
|
position: relative;
|
|
flex: 1;
|
|
min-width: 60px;
|
|
height: 22px;
|
|
}
|
|
|
|
.scorebar .track::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: 2px;
|
|
background: var(--bs-secondary);
|
|
transform: translateX(-1px);
|
|
}
|
|
|
|
.scorebar .fill {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
border-radius: 4px;
|
|
transition: width 0.5s ease;
|
|
}
|
|
|
|
.scorebar .fill.pos {
|
|
left: 50%;
|
|
background: var(--bs-success);
|
|
}
|
|
|
|
.scorebar .fill.neg {
|
|
right: 50%;
|
|
background: var(--bs-danger);
|
|
}
|
|
|
|
.scorebar .val {
|
|
width: 58px;
|
|
text-align: right;
|
|
font-size: 0.95rem;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.scorebar .lbl {
|
|
font-size: 0.8rem;
|
|
color: var(--bs-secondary);
|
|
width: 44px;
|
|
}
|
|
|
|
/* rail chips in hero */
|
|
.rail-chip {
|
|
cursor: pointer;
|
|
font-family: var(--xau-font-mono);
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.rail-chip:hover {
|
|
border-color: var(--bs-primary) !important;
|
|
}
|
|
|
|
/* detail dialog sections */
|
|
.d-stat .k {
|
|
display: block;
|
|
font-size: 0.7rem;
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
color: var(--bs-secondary);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.d-stat .v {
|
|
font-size: 1.15rem;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.d-table {
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.d-table .ind-k {
|
|
font-family: var(--xau-font-mono);
|
|
font-weight: 600;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.wbar {
|
|
display: block;
|
|
height: 4px;
|
|
border-radius: 2px;
|
|
background: var(--bs-secondary-bg);
|
|
margin-top: 3px;
|
|
}
|
|
|
|
.wbar > i {
|
|
display: block;
|
|
height: 100%;
|
|
border-radius: 2px;
|
|
background: var(--bs-primary);
|
|
}
|
|
|
|
/* news */
|
|
.wire-item {
|
|
cursor: pointer;
|
|
border-radius: var(--bs-border-radius);
|
|
}
|
|
|
|
.wire-item:hover {
|
|
background: rgba(var(--bs-primary-rgb), 0.08);
|
|
}
|
|
|
|
.wire-score {
|
|
font-family: var(--xau-font-mono);
|
|
font-size: 0.85rem;
|
|
font-weight: 700;
|
|
padding: 2px 7px;
|
|
border-radius: 5px;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* calendar highlight for next upcoming event */
|
|
.cal-next-up td:first-child {
|
|
box-shadow: inset 4px 0 0 var(--bs-primary);
|
|
padding-left: 0.75rem !important;
|
|
}
|
|
|
|
/* reduced motion */
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.live-dot { animation: none; }
|
|
.scorebar .fill { transition: none; }
|
|
* { transition: none !important; }
|
|
}
|