/* Gold Desk — XAU/USD dashboard styles * * Bootstrap 5.3 supplies layout, cards, tables, badges, alerts, modals and * the form switch; this file supplies the desk: the token set, the sticky * ticker bar, the direction board, the four timeframe instruments and the * chart surfaces Chart.js draws onto. * * Colour notes * Dark only (owner decision 2026-08-16): dark ground, white text, red and * green reserved for direction. * --up / --down are the CHART mark colours: a diverging pair validated on * this surface (lightness band, chroma floor, colour-vision separation, * contrast). --up-text / --down-text are the lighter steps of the same two * hues, used wherever the colour has to work as text. Direction is never * colour alone — an arrow icon and the word BUY or SELL ride with it. */ :root { --sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif; --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Consolas, Menlo, monospace; --desk-bg: #0c0f13; --panel: #12161c; --panel-2: #171d25; --rule: rgba(255, 255, 255, 0.10); --rule-soft: rgba(255, 255, 255, 0.06); --gold: #f5b301; --gold-wash: rgba(245, 179, 1, 0.12); --up: #0d9f7a; --down: #e8503a; --flat: #6b7a8d; --up-text: #2fd6a3; --down-text: #ff7d66; --up-wash: rgba(13, 159, 122, 0.16); --down-wash: rgba(232, 80, 58, 0.16); --grid: rgba(255, 255, 255, 0.07); --zero: rgba(255, 255, 255, 0.30); --axis: rgba(255, 255, 255, 0.64); } [data-bs-theme="dark"] { --bs-body-bg: var(--desk-bg); --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.78); --bs-secondary-bg: var(--panel-2); --bs-tertiary-bg: var(--panel-2); --bs-border-color: var(--rule); --bs-card-bg: var(--panel); --bs-card-border-color: var(--rule); --bs-modal-bg: var(--panel); --bs-border-radius: 0.5rem; --bs-primary: var(--gold); --bs-primary-rgb: 245, 179, 1; --bs-success: #0d9f7a; --bs-success-rgb: 13, 159, 122; --bs-success-text-emphasis: var(--up-text); --bs-success-bg-subtle: var(--up-wash); --bs-success-border-subtle: rgba(13, 159, 122, 0.45); --bs-danger: #e8503a; --bs-danger-rgb: 232, 80, 58; --bs-danger-text-emphasis: var(--down-text); --bs-danger-bg-subtle: var(--down-wash); --bs-danger-border-subtle: rgba(232, 80, 58, 0.45); --bs-warning: #e9a23b; --bs-warning-rgb: 233, 162, 59; --bs-link-color: var(--gold); --bs-link-hover-color: #ffca3f; } html, body { background: var(--desk-bg); color: #fff; font-family: var(--sans); font-size: 0.9375rem; -webkit-font-smoothing: antialiased; } h1, h2, h3, h4, h5 { font-weight: 600; } .num { font-family: var(--mono); font-variant-numeric: tabular-nums; font-feature-settings: "zero" 1; } .up { color: var(--up-text); } .down { color: var(--down-text); } .flat { color: rgba(255, 255, 255, 0.72); } .sig-buy { --edge: var(--up); --edge-text: var(--up-text); --edge-wash: var(--up-wash); } .sig-sell { --edge: var(--down); --edge-text: var(--down-text); --edge-wash: var(--down-wash); } .sig-neutral { --edge: var(--flat); --edge-text: rgba(255, 255, 255, 0.8); --edge-wash: rgba(255, 255, 255, 0.05); } .desk-shell { width: 100%; max-width: 1560px; margin: 0 auto; padding: 0 1rem; } /* ── ticker bar ────────────────────────────────────────────────── */ .desk-bar { background: rgba(12, 15, 19, 0.94); backdrop-filter: blur(8px); border-bottom: 1px solid var(--rule); padding: 0.55rem 0; } .desk-mark { color: var(--gold); font-size: 1rem; } .desk-symbol { font-family: var(--mono); font-weight: 600; letter-spacing: 0.06em; color: var(--gold); font-size: 0.9rem; } .desk-price { font-size: 1.6rem; font-weight: 600; line-height: 1; } .desk-rail { display: flex; gap: 0.4rem; flex-wrap: wrap; } .rail-chip { display: inline-flex; align-items: baseline; gap: 0.35rem; border: 1px solid var(--rule); border-left: 2px solid var(--edge, var(--flat)); border-radius: 0.3rem; background: var(--panel); color: #fff; font-family: var(--mono); font-size: 0.78rem; padding: 0.2rem 0.45rem; } .rail-chip:hover { background: var(--panel-2); } .rail-chip .rail-tf { font-weight: 600; } .rail-chip .rail-score { color: var(--edge-text); } .desk-status { display: flex; align-items: center; gap: 1rem; font-size: 0.8rem; color: var(--bs-secondary-color); } .desk-meta { white-space: nowrap; } .desk-meta i { opacity: 0.55; margin-right: 0.25rem; } .desk-meta.is-stale { color: var(--bs-warning); font-weight: 600; } .live-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--up-text); margin-right: 0.4rem; animation: pulse 2.4s ease-in-out infinite; } .live-dot.closed { background: var(--bs-warning); animation: none; } @keyframes pulse { 50% { opacity: 0.3; } } /* ── direction board ───────────────────────────────────────────── */ .board { background: var(--panel); border: 1px solid var(--rule); border-radius: 0.6rem; overflow: hidden; } .board-read { display: flex; flex-direction: column; padding: 1.5rem 1.6rem; border-right: 1px solid var(--rule); } .board-headline { font-size: clamp(1.5rem, 2.4vw, 2rem); font-weight: 600; line-height: 1.15; margin-bottom: 0.5rem; max-width: 22ch; } .board-sub { color: var(--bs-secondary-color); max-width: 46ch; margin-bottom: 1.1rem; } .board-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; margin-top: auto; border-top: 1px solid var(--rule); padding-top: 0.9rem; } .board-stats .k { display: block; font-size: 0.72rem; color: rgba(255, 255, 255, 0.7); margin-bottom: 0.15rem; } .board-stats .v { font-size: 1.05rem; font-weight: 600; } .board-stats .v small { font-weight: 400; font-size: 0.78rem; color: rgba(255, 255, 255, 0.7); } .board-plot { padding: 1.5rem 1.6rem; } .plot-title { font-size: 0.95rem; margin-bottom: 0.75rem; } .plot-note { font-size: 0.78rem; color: rgba(255, 255, 255, 0.72); margin: 0.6rem 0 0; max-width: 62ch; } .chart-wrap { position: relative; } .chart-direction { height: 190px; } .chart-ind { height: 158px; margin-bottom: 0.9rem; } .chart-tone { height: 58px; } /* ── news voice inside the board ───────────────────────────────── */ .board-news { border-left: 2px solid var(--gold); padding-left: 0.85rem; margin-bottom: 1.2rem; } .context-text { margin: 0 0 0.5rem; color: var(--bs-secondary-color); font-size: 0.85rem; max-width: 60ch; } .context-chips { display: flex; flex-wrap: wrap; gap: 0.4rem; } .chip { display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.75rem; padding: 0.2rem 0.5rem; border-radius: 0.3rem; border: 1px solid var(--rule); background: var(--panel-2); color: var(--bs-secondary-color); white-space: nowrap; } .chip i { opacity: 0.7; } .chip .num { font-weight: 600; } .chip-up { border-color: rgba(13, 159, 122, 0.45); background: var(--up-wash); color: var(--up-text); } .chip-down { border-color: rgba(232, 80, 58, 0.45); background: var(--down-wash); color: var(--down-text); } .chip-warn { border-color: rgba(233, 162, 59, 0.5); background: rgba(233, 162, 59, 0.14); color: #ffc46b; } .chip-gold { border-color: rgba(245, 179, 1, 0.5); background: var(--gold-wash); color: var(--gold); } /* ── section headings ──────────────────────────────────────────── */ .sec-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.6rem; margin-bottom: 0.85rem; } .sec-title { font-size: 1.05rem; margin: 0; } .sec-note { font-size: 0.8rem; color: rgba(255, 255, 255, 0.72); } /* ── timeframe instruments ─────────────────────────────────────── */ .tf-card { height: 100%; overflow: hidden; background: var(--panel); scroll-margin-top: 5.5rem; } .tf-card.is-target { outline: 2px solid var(--gold); outline-offset: 1px; } .tf-card .card-body { padding: 0.95rem 1.05rem 0.6rem; } .tf-edge { height: 3px; background: var(--edge, var(--flat)); } .tf-head { display: flex; align-items: baseline; gap: 0.45rem; margin-bottom: 0.55rem; } .tf-name { font-family: var(--mono); font-size: 1.1rem; font-weight: 600; letter-spacing: 0.04em; margin: 0; color: var(--gold); } .tf-long { font-size: 0.75rem; color: rgba(255, 255, 255, 0.7); } .tf-clock { font-size: 0.75rem; color: rgba(255, 255, 255, 0.78); white-space: nowrap; } .tf-clock i { opacity: 0.55; margin-right: 0.2rem; } .tf-signal { display: flex; align-items: center; gap: 0.5rem; font-size: 1.35rem; font-weight: 600; line-height: 1.1; color: var(--edge-text, #fff); } .tf-signal .fa-solid { font-size: 1.05rem; } .grade { font-family: var(--mono); font-size: 0.72rem; font-weight: 600; padding: 0.1rem 0.4rem; border-radius: 0.25rem; border: 1px solid var(--rule); color: rgba(255, 255, 255, 0.85); align-self: center; } .grade.grade-high { border-color: rgba(245, 179, 1, 0.55); background: var(--gold-wash); color: var(--gold); } .tf-action { font-size: 0.82rem; color: var(--bs-secondary-color); margin: 0.35rem 0 0.8rem; min-height: 1.1rem; } .tf-readouts { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-bottom: 0.8rem; } .readout-k { display: block; font-size: 0.72rem; color: rgba(255, 255, 255, 0.7); } .readout-v { font-size: 1.15rem; font-weight: 600; } .meter { position: relative; display: block; height: 5px; margin-top: 0.35rem; border-radius: 3px; background: rgba(255, 255, 255, 0.08); overflow: hidden; } .meter::after { content: ""; position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: var(--zero); } .meter i { position: absolute; top: 0; bottom: 0; border-radius: 3px; transition: width 0.25s ease; } .meter i.pos { left: 50%; background: var(--up); } .meter i.neg { right: 50%; background: var(--down); } .meter-linear::after { display: none; } .meter-linear i { left: 0; background: rgba(255, 255, 255, 0.55); } .tf-chips { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-bottom: 0.9rem; } .tf-chips .chip { font-size: 0.72rem; padding: 0.15rem 0.4rem; } .tf-sub { font-size: 0.78rem; font-weight: 600; color: rgba(255, 255, 255, 0.82); margin-bottom: 0.4rem; } /* trade plan */ .plan { border: 1px solid var(--rule); border-left: 2px solid var(--edge, var(--flat)); border-radius: 0.4rem; background: var(--panel-2); padding: 0.6rem 0.7rem; } .plan-head { display: flex; align-items: baseline; gap: 0.4rem; font-size: 0.82rem; font-weight: 600; color: var(--edge-text); margin-bottom: 0.5rem; } .plan-strategy { font-family: var(--mono); font-size: 0.7rem; font-weight: 400; color: rgba(255, 255, 255, 0.7); } .plan-rr { margin-left: auto; font-family: var(--mono); font-size: 0.75rem; color: rgba(255, 255, 255, 0.85); } /* Two columns in a card, four across the wider dialog — never three, which would strand Target 2 on a row of its own. */ .plan-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.35rem 1.25rem; margin: 0; } @media (min-width: 768px) { .d-sec .plan-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } } .plan-grid > div { display: flex; align-items: baseline; justify-content: space-between; gap: 0.5rem; } .plan-grid dt { font-size: 0.75rem; font-weight: 400; color: rgba(255, 255, 255, 0.75); } .plan-grid dt i { width: 0.9rem; opacity: 0.65; margin-right: 0.3rem; } .plan-grid dd { margin: 0; font-family: var(--mono); font-size: 0.85rem; font-weight: 500; } .plan-trail { margin-top: 0.5rem; padding-top: 0.45rem; border-top: 1px solid var(--rule-soft); font-size: 0.74rem; color: rgba(255, 255, 255, 0.75); } .plan-empty { border-left-color: var(--rule); color: rgba(255, 255, 255, 0.75); font-size: 0.8rem; } .tf-flags { margin-top: 0.7rem; display: grid; gap: 0.25rem; font-size: 0.76rem; } .tf-flags i { width: 0.9rem; margin-right: 0.25rem; } .tf-flags .flag-warn { color: #ffc46b; } .tf-flags .flag-watch { color: var(--gold); font-weight: 500; } .tf-card .card-footer { display: flex; align-items: center; gap: 0.6rem; background: transparent; border-top: 1px solid var(--rule-soft); padding: 0.5rem 1.05rem; } .tf-scanned { margin-left: auto; font-size: 0.72rem; color: rgba(255, 255, 255, 0.68); } .btn-desk { border: 1px solid var(--rule); color: #fff; background: var(--panel-2); font-size: 0.78rem; } .btn-desk:hover { border-color: var(--gold); color: var(--gold); background: var(--panel-2); } .btn-desk i { margin-right: 0.3rem; opacity: 0.8; } .tf-empty { padding: 1.6rem 0.4rem 2rem; text-align: center; color: rgba(255, 255, 255, 0.78); font-size: 0.85rem; } .tf-empty i { display: block; font-size: 1.4rem; opacity: 0.5; margin-bottom: 0.5rem; } /* ── calendar + wire ───────────────────────────────────────────── */ .card-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.6rem; margin-bottom: 0.8rem; } .card-title { font-size: 0.95rem; margin: 0; } .card-title i { color: var(--gold); margin-right: 0.45rem; } .card-note { font-size: 0.75rem; color: rgba(255, 255, 255, 0.7); } .form-check-label { font-size: 0.78rem; } .form-switch .form-check-input:checked { background-color: var(--gold); border-color: var(--gold); } .form-check-input:focus { box-shadow: none; border-color: var(--gold); } /* The calendar fills whatever height the row settles on, then scrolls. */ .card-body:has(.cal-scroll) { display: flex; flex-direction: column; } .cal-scroll { flex: 1 1 auto; max-height: 30rem; overflow-y: auto; } .cal-table { font-size: 0.82rem; margin-bottom: 0; } .cal-table thead th { position: sticky; top: 0; z-index: 1; background: var(--panel); font-size: 0.72rem; font-weight: 500; color: rgba(255, 255, 255, 0.7); border-bottom: 1px solid var(--rule); } .cal-table td { border-color: var(--rule-soft); } .cal-table .empty { text-align: center; padding: 1.2rem 0; color: rgba(255, 255, 255, 0.7); } .cal-day td { padding-top: 0.7rem; font-size: 0.75rem; font-weight: 600; color: var(--gold); } .cal-past { color: rgba(255, 255, 255, 0.55); } .cal-next td { background: rgba(245, 179, 1, 0.06); } .cal-next td:first-child { box-shadow: inset 2px 0 0 var(--gold); } .cal-event { display: block; width: 100%; padding: 0; border: 0; background: none; color: inherit; text-align: left; } .cal-event:hover { color: var(--gold); text-decoration: underline; } .impact { display: inline-block; font-size: 0.68rem; padding: 0.1rem 0.35rem; border-radius: 0.25rem; border: 1px solid var(--rule); } .impact-high { border-color: rgba(232, 80, 58, 0.5); background: var(--down-wash); color: var(--down-text); } .impact-medium { border-color: rgba(233, 162, 59, 0.5); background: rgba(233, 162, 59, 0.14); color: #ffc46b; } .impact-low { color: rgba(255, 255, 255, 0.7); } .tone { margin-bottom: 0.8rem; } .tone-legend { display: flex; flex-wrap: wrap; gap: 0.75rem; font-size: 0.74rem; color: rgba(255, 255, 255, 0.8); } .tone-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .tone-key { width: 9px; height: 9px; border-radius: 2px; display: inline-block; } .wire-item { display: flex; gap: 0.5rem; align-items: baseline; width: 100%; padding: 0.3rem 0.35rem; border: 0; border-radius: 0.3rem; background: none; color: inherit; font: inherit; text-align: left; } button.wire-item:hover { background: rgba(255, 255, 255, 0.05); } .wire-score { font-family: var(--mono); font-size: 0.74rem; font-weight: 600; padding: 0.05rem 0.35rem; border-radius: 0.25rem; white-space: nowrap; min-width: 2.7rem; text-align: center; } .wire-score.pos { background: var(--up-wash); color: var(--up-text); } .wire-score.neg { background: var(--down-wash); color: var(--down-text); } .wire-score.zero { background: rgba(255, 255, 255, 0.06); color: rgba(255, 255, 255, 0.75); } .wire-text { flex: 1 1 auto; font-size: 0.82rem; } .wire-src { font-size: 0.72rem; color: rgba(255, 255, 255, 0.65); white-space: nowrap; } .wire-more { font-size: 0.78rem; color: rgba(255, 255, 255, 0.78); cursor: pointer; padding: 0.35rem; } /* ── modals ────────────────────────────────────────────────────── */ .modal-sub { font-size: 0.8rem; color: rgba(255, 255, 255, 0.78); } .modal-sub .num { margin-right: 0.4rem; } .d-sec { margin-bottom: 1.4rem; } .d-sec > h6 { display: flex; align-items: center; gap: 0.5rem; font-size: 0.82rem; font-weight: 600; margin-bottom: 0.6rem; } .d-sec > h6 i { color: var(--gold); } .d-rule { flex: 1 1 auto; height: 1px; background: var(--rule); } .d-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(7.5rem, 1fr)); gap: 0.5rem; } .d-tile { border: 1px solid var(--rule); border-radius: 0.35rem; background: var(--panel-2); padding: 0.45rem 0.55rem; } .d-tile .k { display: block; font-size: 0.7rem; color: rgba(255, 255, 255, 0.7); } .d-tile .v { font-size: 1.02rem; font-weight: 600; } .d-table { font-size: 0.82rem; } .d-table .ind-k { font-family: var(--mono); font-weight: 600; white-space: nowrap; } .d-table td, .d-table th { border-color: var(--rule-soft); } .detail-scroll { overflow-x: auto; } .wbar { display: block; height: 3px; border-radius: 2px; background: rgba(255, 255, 255, 0.1); margin-top: 3px; } .wbar > i { display: block; height: 100%; border-radius: 2px; background: var(--gold); } .d-sec details { border: 1px solid var(--rule); border-radius: 0.4rem; padding: 0.5rem 0.65rem; margin-bottom: 0.5rem; } .d-sec summary { cursor: pointer; font-size: 0.85rem; } .d-sec summary > * { margin-right: 0.4rem; } .reasons { display: grid; gap: 0.25rem; font-size: 0.82rem; } .reasons i { width: 1rem; margin-right: 0.3rem; } .reason-group { font-size: 0.76rem; color: rgba(255, 255, 255, 0.72); margin: 0.6rem 0 0.25rem; } .desk-foot { margin-top: 2rem; padding-top: 1rem; border-top: 1px solid var(--rule); font-size: 0.78rem; color: rgba(255, 255, 255, 0.7); } .desk-foot i { color: rgba(255, 255, 255, 0.5); margin-right: 0.35rem; } /* ── focus, motion, small screens ──────────────────────────────── */ .rail-chip:focus-visible, .wire-item:focus-visible, .cal-event:focus-visible, .btn-desk:focus-visible, .form-check-input:focus-visible, summary:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; border-radius: 0.25rem; } @media (prefers-reduced-motion: reduce) { .live-dot { animation: none; } *, *::before, *::after { transition: none !important; } } @media (max-width: 991.98px) { .board-read { border-right: 0; border-bottom: 1px solid var(--rule); } .board-read, .board-plot { padding: 1.15rem 1.15rem; } } @media (max-width: 575.98px) { .desk-price { font-size: 1.35rem; } .desk-status { gap: 0.6rem; font-size: 0.75rem; } .board-stats { grid-template-columns: 1fr; gap: 0.5rem; } .desk-shell { padding: 0 0.75rem; } }