/* ForexR dashboard pages: home (/), /rates hub, /rates/{symbol}. Hand-written, no build step; linked after app.css
   by index.php, rates.php and pair.php. Tokens come from app.css (src/tailwind.css): use them, never raw colors.
   Prefixes: dx- = shared dashboard partial, hx- = home, mk- = markets table, rx- = rates hub. */

/* ---- Surfaces: borderless tiles on the page ground, hairlines inside ---- */
.dash .hdr,.dash .pnl,.dash .card,.dx-two .card,.mk-card,.hol-banner,.ad-banner,.hx-tool,.hx-guide{border:0;border-radius:18px;box-shadow:none;overflow:hidden}
.dash{gap:16px;grid-template-columns:minmax(0,1fr)}
.dash-main,.dash-side{gap:16px}
@media(min-width:940px){.dash{grid-template-columns:minmax(0,1fr) 340px}}
.dash .card-h,.dx-two .card-h{border-bottom:0;padding:16px 20px 12px;align-items:baseline}
.dash .card-h h2,.dx-two .card-h h2{font-size:1rem;font-weight:700}
.dash .card-h .muted,.dx-two .card-h .muted{font-size:.8rem;color:var(--muted);font-weight:400}
.dx-more{display:inline-flex;align-items:center;gap:2px;font-size:.88rem;font-weight:600;color:var(--brand-strong);white-space:nowrap}
.dx-more:hover{text-decoration:underline;text-underline-offset:3px}
.dash .card-h .dx-more{font-size:.88rem;font-weight:600;color:var(--brand-strong)}
.dx-more svg{flex-shrink:0}
.dx-dim{color:var(--muted)}
/* Several hooks here set display, which would otherwise beat the hidden attribute. */
[hidden]{display:none!important}
a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--brand-strong);outline-offset:2px;border-radius:8px}

/* ---- Market status pill (partials/market-status.php) ---- */
.dx-status{display:inline-flex;align-items:center;flex-wrap:wrap;justify-content:center;gap:4px 8px;padding:6px 14px;border-radius:980px;background:var(--surface);font-size:.84rem;color:var(--muted)}
.dx-status .mkt-dot{width:8px;height:8px;border-radius:50%;flex:none}
.dx-status .mkt-dot.open{background:var(--up);box-shadow:0 0 0 4px var(--up-bg)}
.dx-status .mkt-dot.closed{background:var(--dn);box-shadow:0 0 0 4px var(--dn-bg)}
.dx-status #mktLabel{color:var(--ink);font-weight:600}
.dx-status-sess:not(:empty)::before,.dx-status-time:not(:empty)::before{content:"\00b7";margin-right:8px;color:var(--faint)}
.dx-status-row{margin:4px 0 14px}
@media(max-width:600px){.dx-status-sess{display:none}}

/* ---- Home hero ---- */
.hx-hero{display:grid;justify-items:center;gap:16px;text-align:center;padding:26px 0 34px}
.hx-hero h1{font-size:clamp(1.6rem,4.4vw,2.9rem);font-weight:800;letter-spacing:-.035em;line-height:1.08;max-width:27ch;text-wrap:balance}
.hx-hero p{font-size:1.04rem;color:var(--muted);max-width:56ch}
.hx-act{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 22px;margin-top:4px}
.hx-btn{display:inline-flex;align-items:center;min-height:44px;padding:0 22px;border-radius:980px;background:var(--brand);color:var(--brand-on);font-size:.95rem;font-weight:700}
.hx-btn:hover{background:var(--brand2)}
@media(max-width:600px){
  .hx-hero{gap:10px;padding:8px 0 20px}
  .hx-hero p,.hx-act .dx-more+.dx-more{display:none}
}

/* ---- Quote card ---- */
.dx-q{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px 32px;align-items:end;padding:20px}
.dx-pairbtn{width:auto;display:inline-flex;gap:8px;padding:6px 14px 6px 8px;border-radius:980px;background:var(--hair)}
.dx-pairbtn:hover{background:var(--brand-soft)}
.dx-pairbtn .pair-sym{font-size:1.05rem;font-weight:700;letter-spacing:-.01em}
.dx-pairbtn .pair-lbl{flex:0 1 auto;font-size:.84rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dx-q .quote-wrap{align-items:center;gap:10px 12px;margin-top:14px}
.dx-q .q-price{font-size:clamp(2.2rem,7vw,3.1rem);font-weight:500;letter-spacing:-.04em}
.dx-q .q-chg{font-size:.86rem;font-weight:500;padding:4px 9px}
.dx-q-side{display:grid;gap:8px;min-width:236px;font-size:.82rem;color:var(--muted)}
.dx-kv{display:flex;align-items:center;justify-content:space-between;gap:16px}
.dx-kv b{font-family:var(--fm);font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums}
.dx-q-side .q-cache{font-size:.7rem;letter-spacing:.06em}
.dx-range{position:relative;display:block;height:4px;border-radius:4px;background:var(--hair)}
.dx-range::after{content:"";position:absolute;top:50%;left:var(--p,50%);width:10px;height:10px;border-radius:50%;background:var(--brand);transform:translate(-50%,-50%);box-shadow:0 0 0 2px var(--surface);transition:left .4s ease}
@media(max-width:640px){.dx-q{grid-template-columns:minmax(0,1fr)}.dx-q-side{min-width:0}}
@media(prefers-reduced-motion:reduce){.dx-range::after{transition:none}}

/* Sessions strip, folded into the quote card */
.dx-quote .sess{border:0;border-top:1px solid var(--hair);border-radius:0;background:var(--hair)}
.dx-quote .sess-item{flex-direction:column;gap:2px;padding:10px 4px;letter-spacing:.05em}
.sess-n{display:inline-flex;align-items:center;gap:6px}
.sess-t{font-family:var(--fm);font-size:.7rem;font-weight:400;letter-spacing:0;text-transform:none;color:var(--faint)}
.sess-item .sess-dot{display:none}
.sess-item.on .sess-dot{display:block}

/* ---- Chart card + sponsored trade row ---- */
.dx-chart .tv-wrap{border:0;border-radius:0;background:transparent;height:380px;min-height:0}
@media(max-width:640px){.dx-chart .tv-wrap{height:280px}}
/* Chart loader: app.js keeps .is-loading on #tvWrap until candles and the first quote are in */
.tv-load{position:absolute;inset:0;z-index:3;display:none;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--muted);font-size:.84rem}
.tv-wrap.is-loading .tv-load,.tv-wrap.is-empty .tv-load{display:flex}
.tv-spin{width:22px;height:22px;border:2px solid var(--line);border-top-color:var(--brand-strong);border-radius:50%;animation:tv-spin .8s linear infinite}
@keyframes tv-spin{to{transform:rotate(360deg)}}
.tv-empty-t,.tv-wrap.is-empty .tv-spin,.tv-wrap.is-empty .tv-load-t{display:none}
.tv-wrap.is-empty .tv-empty-t{display:inline}
#lwchart{transition:opacity .3s ease}
.tv-wrap.is-loading #lwchart,.tv-wrap.is-empty #lwchart{opacity:0}
@media(prefers-reduced-motion:reduce){.tv-spin{animation-duration:2.4s}#lwchart{transition:none}}
.dx-trade{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;padding:12px 20px;border-top:1px solid var(--hair)}
.dx-trade .ad-badge{margin:0}
.dx-trade p{flex:1 1 200px;font-size:.9rem}
.dx-tbtn{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:0 20px;border-radius:980px;font-size:.86rem;font-weight:700;color:#fff}
.dx-tbtn.buy{background:#087d56}
.dx-tbtn.sell{background:#b4233c}
.dx-tbtn:hover{filter:brightness(1.08)}

/* ---- Side panels ---- */
.dash .pv-row,.dash .pv-now{padding:11px 20px}
.dash .pv-row:first-child{border-top:1px solid var(--hair)}
/* Resistance reads as a ceiling (down colour), support as a floor (up colour). */
.dash .pv-row.r .pv-lbl{color:var(--dn)}
.dash .pv-row.s .pv-lbl{color:var(--up)}
.dash .pv-val{font-weight:500}
.dash .pv-now-val{font-weight:500}
.dx-rowlink{display:flex;align-items:center;justify-content:space-between;padding:13px 20px;border-top:1px solid var(--hair);font-size:.88rem;font-weight:600;color:var(--brand-strong)}
.dx-rowlink:hover{background:var(--hair)}
.dx-atr{font-family:var(--fm);font-weight:500;color:var(--ink)}
.dash .ohlc{padding:0;gap:0;border-top:1px solid var(--hair)}
.dash .ohlc-item{padding:10px 20px;border-bottom:0}
.dash .ohlc-item:nth-child(odd){border-right:1px solid var(--hair)}
.dash .ohlc-item:nth-child(n+3){border-top:1px solid var(--hair)}
.dash .ohlc-v{font-weight:500}
.dx-sub-h{border-top:1px solid var(--hair)}
.dx-trend{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:2px 20px 18px}
.dx-tr{display:grid;gap:2px;padding:9px 10px;border-radius:12px;background:var(--hair);font-size:.74rem;color:var(--muted);min-width:0}
.dx-tr .tr-v{font-size:.82rem;font-weight:600;white-space:nowrap}
.dx-tr .tr-v i{display:none}
.dx-tr .tr-v.flat{color:var(--ink)}

/* ---- Calendar + news, side by side ---- */
.dx-two{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;margin-top:16px}
@media(min-width:940px){.dx-two{grid-template-columns:repeat(2,minmax(0,1fr))}}
.dx-two .cal-filters{padding:0 20px 12px;border-bottom:0}
.dx-feed{max-height:560px;overflow-y:auto;border-top:1px solid var(--hair);overscroll-behavior:contain}
.cal-day{position:sticky;top:0;z-index:1;padding:7px 20px;background:var(--hair);font-size:.7rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--faint)}
.cal-day+.cal-card{border-top:0}
.cal-imp{font-size:.62rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;padding:1px 7px;border-radius:980px;background:var(--hair);color:var(--faint)}
.cal-imp.hi{background:var(--dn-bg);color:var(--dn)}
.cal-imp.md{background:var(--brand-soft);color:var(--brand-strong)}
a.news-card,a.ad-card{color:inherit;font-weight:inherit}
a.news-card:hover .news-title{color:var(--brand-strong)}
.dx-feed .news-card:first-child,.dx-feed .cal-card:first-child{border-top:0}

/* ---- Sponsored banner spacing on these pages ---- */
.ad-banner{margin-top:16px}

/* ---- Markets table ---- */
/* Fixed layout so the columns line up from one group table to the next on /rates. */
.mk{width:100%;border-collapse:collapse;font-size:.92rem;table-layout:fixed}
.mk thead th:nth-child(2){width:22%}
.mk thead th:nth-child(3){width:15%}
.mk thead th{padding:12px 20px 10px;font-size:.68rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);text-align:right}
.mk thead th:first-child{text-align:left}
.mk tbody th,.mk tbody td{padding:0;border-top:1px solid var(--hair);font-weight:400;text-align:right}
.mk tbody a{display:block;padding:11px 20px;color:var(--ink);font-weight:500;font-family:var(--fm);font-variant-numeric:tabular-nums}
.mk tbody th a{display:flex;align-items:center;gap:12px;text-align:left;font-family:var(--ff)}
.mk-sym{display:block;font-weight:600}
.mk tbody th a>span:last-child{min-width:0}
.mk-nm{display:block;font-size:.78rem;font-weight:400;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mk tbody a.up{color:var(--up)}
.mk tbody a.dn{color:var(--dn)}
.mk tbody tr:hover>*{background:var(--hair)}
.mk tbody tr:hover .mk-sym{color:var(--brand-strong)}
.mk-rg{width:250px}
.mk td.mk-rg a{display:grid;grid-template-columns:auto minmax(40px,1fr) auto;align-items:center;gap:10px;font-size:.74rem;font-weight:400;color:var(--faint)}
.mk-tick-up{animation:mk-up .9s ease-out}
.mk-tick-dn{animation:mk-dn .9s ease-out}
@keyframes mk-up{from{background:var(--up-bg)}to{background:transparent}}
@keyframes mk-dn{from{background:var(--dn-bg)}to{background:transparent}}
@media(prefers-reduced-motion:reduce){.mk-tick-up,.mk-tick-dn{animation:none}}
@media(max-width:760px){
  .mk-rg,.mk-nm{display:none}
  .mk thead th:nth-child(2){width:32%}
  .mk thead th:nth-child(3){width:26%}
  .mk thead th,.mk tbody a{padding-left:12px;padding-right:12px}
}

/* ---- Home: tools + guides ---- */
.home-sec{margin-top:44px}
.hx-g3{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
@media(min-width:640px){.hx-g3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:960px){.hx-g3{grid-template-columns:repeat(3,minmax(0,1fr))}}
.hx-tool,.hx-guide{display:grid;align-content:start;background:var(--surface);color:var(--ink);font-weight:400}
.hx-tool{gap:4px;padding:18px}
.hx-tool b{font-family:var(--fh);font-size:1rem;font-weight:700;letter-spacing:-.02em}
.hx-tool span{font-size:.86rem;color:var(--muted)}
.hx-tool em{margin-top:6px;font-style:normal;font-size:.84rem;font-weight:600;color:var(--brand-strong)}
.hx-guide img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;background:var(--hair)}
.hx-guide-in{display:grid;gap:8px;padding:14px 18px 18px}
.hx-guide b{font-family:var(--fh);font-size:1.02rem;font-weight:700;line-height:1.3;letter-spacing:-.02em}
.hx-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:.74rem;color:var(--faint)}
.hx-chip{padding:2px 7px;border-radius:6px;background:var(--brand-soft);color:var(--brand-strong);font-weight:600}
.hx-tool:hover b,.hx-guide:hover b{color:var(--brand-strong)}

/* ---- Rates hub ---- */
.rx-hero{padding-bottom:20px}
.rx-count{font-size:.84rem;color:var(--faint)}
.rx-note{margin-top:22px;font-size:.82rem;color:var(--faint);max-width:72ch}
