/* The Vellmar Exchange: a stock exchange's market-data site of 2026.
   A scrolling market-data strip, a green-on-white brand, cards of figures, sortable tables in tabular numerals,
   company quote pages with the price, the change, the chart and the announcements. Prices delayed 15 minutes. */

html.shell-exchange {
  --body-font: 'IBM Plex Sans', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --head-font: 'IBM Plex Sans', system-ui, sans-serif;
  --mono: 'IBM Plex Mono', ui-monospace, Menlo, monospace;
  --ui: var(--body-font);
  --paper: #f5f7f8; --ink: #14202b; --accent: #0f5c4c; --rule: #d5dde3; --muted: #5b6b78; --rule-soft: #e8edf0; --panel: #ffffff;
  --up: #0a8f4f; --down: #d23f31;
  --measure: none; --fs: 16px; --lh: 1.5; --gap: .9rem; --block: 1.6rem; --h-weight: 600;
}
.shell-exchange body { background: var(--paper); font-variant-numeric: tabular-nums lining-nums; }
.shell-exchange a { color: #0d5f9e; text-decoration: none; }
.shell-exchange a:hover { text-decoration: underline; }
.vx-in { max-width: 1280px; margin: 0 auto; padding: 0 1.5rem; }
.up, .moves .up, td.up { color: var(--up); }
.down, .moves .down, td.down { color: var(--down); }

/* ---------- the market-data strip ---------- */
.vx-strip-slot { background: #0b1220; min-height: 34px; overflow: hidden; }
.mkt-strip { background: #0b1220; color: #e6edf3; font: 500 13px/34px var(--mono); overflow: hidden; white-space: nowrap; }
.vx-main .mkt-strip { margin: 0 calc(50% - 50vw) 1rem; }
.mkt-row { display: inline-flex; animation: vx-marquee 60s linear infinite; }
.mkt-strip:hover .mkt-row { animation-play-state: paused; }
@keyframes vx-marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .mkt-row { animation: none; } }
.mkt-item { color: #e6edf3 !important; padding: 0 1.1rem; border-right: 1px solid #1e2a3a; text-decoration: none !important; }
.mkt-item b { color: #fff; font-weight: 600; margin-right: .35rem; }
.mkt-item.up .mkt-chg { color: #3ddc84; }
.mkt-item.down .mkt-chg { color: #ff6b5e; }

/* ---------- header ---------- */
.vx-header { background: #fff; border-bottom: 1px solid var(--rule); }
.vx-header-in { display: flex; align-items: center; gap: 1.8rem; padding-top: .8rem; padding-bottom: .8rem; }
.vx-logo { display: flex; align-items: center; gap: .6rem; color: var(--ink) !important; text-decoration: none !important; flex: none; }
.vx-logo span { display: flex; flex-direction: column; line-height: 1.05; }
.vx-logo b { font-size: 1.2rem; font-weight: 700; letter-spacing: -.01em; }
.vx-logo small { font-size: .72rem; color: var(--muted); text-transform: uppercase; letter-spacing: .1em; }
.vx-nav { display: flex; gap: 1.3rem; }
.vx-nav a { color: var(--ink); font-weight: 500; font-size: .95rem; }
.vx-nav a:hover { color: var(--accent); text-decoration: none; }
.vx-search { margin-left: auto; display: flex; border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; background: #f5f7f8; }
.vx-search input { font: inherit; font-size: .9rem; border: 0; background: transparent; padding: .45rem .7rem; width: 12rem; }
.vx-search button { border: 0; background: transparent; color: var(--muted); padding: 0 .6rem; cursor: pointer; }
.vx-subbar { background: #eef3f1; border-top: 1px solid var(--rule-soft); font-size: .8rem; color: var(--muted); }
.vx-subbar .vx-in { display: flex; justify-content: space-between; gap: 1rem; padding-top: .35rem; padding-bottom: .35rem; }
.vx-market::before { content: ""; display: inline-block; width: .5rem; height: .5rem; border-radius: 50%; background: #9aa6b2; margin-right: .45rem; vertical-align: .05em; }
.vx-market.is-open::before { background: var(--up); }
.vx-market.is-closed::before { background: var(--down); }

/* ---------- page ---------- */
.shell-exchange main.vx-main { max-width: 1280px; padding: 0 1.5rem 3rem; }
.shell-exchange body { overflow-x: clip; }
.shell-exchange h1, .shell-exchange h2, .shell-exchange h3 { font-family: var(--head-font); color: var(--ink); letter-spacing: -.01em; }
.shell-exchange h1 { font-size: 1.9rem; font-weight: 600; }
.shell-exchange h1 a { color: inherit; }
.shell-exchange h2 { font-size: 1.1rem; font-weight: 600; margin-top: 0; }
.shell-exchange .kicker { font-family: var(--body-font); font-size: .8rem; color: var(--muted); font-variant: normal; letter-spacing: 0; }
.shell-exchange .lede { color: var(--muted); font-size: .98rem; }
.shell-exchange th { font-family: var(--body-font); font-size: .75rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); font-weight: 600; border-bottom: 1px solid var(--rule); font-variant: normal; }
.shell-exchange td { border-bottom-color: var(--rule-soft); }
.shell-exchange td.num, .shell-exchange th.num { font-family: var(--mono); font-size: .88em; }
.shell-exchange th.num { font-family: var(--body-font); }
.vx-crumbs { font-size: .82rem; color: var(--muted); margin: .2rem 0 .8rem; }
.vx-pagehead { margin: .5rem 0 1.2rem; }
.vx-pagehead h1 { margin: .1rem 0 .2rem; }
.vx-card { background: #fff; border: 1px solid var(--rule); border-radius: 8px; padding: 1rem 1.2rem; margin: 0 0 1.2rem; }
.vx-card-head { display: flex; justify-content: space-between; align-items: center; gap: 1rem; border-bottom: 1px solid var(--rule-soft); padding-bottom: .55rem; margin-bottom: .8rem; }
.vx-card-head h2 { margin: 0; }
.vx-chip { font-size: .72rem; font-weight: 600; color: var(--accent); background: #e6f2ee; padding: .15rem .55rem; border-radius: 999px; white-space: nowrap; }
.vx-dash { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 1.2rem; align-items: start; }
.vx-two { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1.2rem; align-items: start; }
.vx-bigquote { margin: .2rem 0 .1rem; display: flex; align-items: baseline; gap: .7rem; flex-wrap: wrap; max-width: none; }
.vx-price { font-family: var(--mono); font-size: 2.3rem; font-weight: 600; letter-spacing: -.02em; color: var(--ink); }
.vx-cur { font-size: .9rem; color: var(--muted); font-weight: 600; }
.vx-change { font-family: var(--mono); font-size: 1.05rem; font-weight: 600; margin: 0; }
.vx-change.up { color: var(--up); } .vx-change.down { color: var(--down); }
.vx-asof { font-size: .78rem; color: var(--muted); margin: .2rem 0 0; }
.vx-suspended { display: inline-block; font-weight: 600; color: #fff; background: #6b7785; border-radius: 4px; padding: .1rem .5rem; font-size: .85rem; margin: .2rem 0; }
.vx-ranges { display: inline-flex; border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; font-size: .78rem; font-weight: 600; margin: .4rem 0 .6rem; }
.vx-ranges span { padding: .25rem .6rem; color: var(--muted); border-left: 1px solid var(--rule); }
.vx-ranges span:first-child { border-left: 0; }
.vx-ranges span.on { background: var(--accent); color: #fff; }
.vx-card-head .vx-ranges { margin: 0; }
.shell-exchange figure.chart { margin: 0 0 .8rem; }
.shell-exchange figure.chart img, .shell-exchange .chart img { width: 100%; display: block; border: 1px solid var(--rule-soft); border-radius: 4px; background: #fff; }
dl.vx-stats { display: grid; grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr)); gap: .1rem 1rem; margin: 0; }
dl.vx-stats div { border-top: 1px solid var(--rule-soft); padding: .5rem 0; }
dl.vx-stats dt { font-size: .75rem; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
dl.vx-stats dd { margin: 0; font-family: var(--mono); font-weight: 600; font-size: 1rem; }
dl.vx-stats dd small { font-family: var(--body-font); font-weight: 400; color: var(--muted); }
dl.vx-kv { display: grid; grid-template-columns: 1fr auto; margin: 0; font-size: .9rem; }
dl.vx-kv dt, dl.vx-kv dd { padding: .4rem 0; border-bottom: 1px solid var(--rule-soft); margin: 0; }
dl.vx-kv dd { text-align: right; font-family: var(--mono); font-weight: 600; }
dl.vx-kv dd small { font-family: var(--body-font); font-weight: 400; color: var(--muted); }
table.vx-table { font-size: .88rem; margin: 0; }
table.vx-table td { padding: .42rem .5rem .42rem 0; }
table.vx-table tbody tr:hover td { background: #f3f7f9; }
table.sortable th { cursor: pointer; user-select: none; white-space: nowrap; }
table.sortable th::after { content: " ↕"; color: #b7c2cb; font-size: .9em; }
table.sortable th.sorted[data-asc="1"]::after { content: " ↑"; color: var(--accent); }
table.sortable th.sorted[data-asc="0"]::after { content: " ↓"; color: var(--accent); }
.vx-scroll { overflow-x: auto; max-width: 100%; }
.board-list .vx-scroll { max-height: 42rem; overflow-y: auto; }
.board-list thead th { position: sticky; top: 0; background: #fff; z-index: 1; }
td.ticker, .exchange td.ticker, .listing td.ticker { font-family: var(--mono); font-weight: 600; letter-spacing: .02em; }
ul.vx-news, ul.notices { list-style: none; padding: 0; margin: 0; }
ul.vx-news li, ul.notices li { padding: .55rem 0; border-bottom: 1px solid var(--rule-soft); font-size: .9rem; max-width: none; }
ul.vx-news time, ul.notices .sc { display: block; font-size: .75rem; color: var(--muted); font-variant: normal; letter-spacing: 0; }
.vx-tick, .vx-cat { display: inline-block; font-family: var(--mono); font-size: .72rem; font-weight: 600; background: #eef3f1; color: var(--accent) !important; border-radius: 4px; padding: 0 .35rem; margin-right: .35rem; }
.vx-cat { font-family: var(--body-font); text-transform: uppercase; letter-spacing: .04em; }
a.vx-link { display: block; color: var(--ink) !important; }
a.vx-link:hover { border-color: var(--accent); text-decoration: none; }
a.vx-link h2 { color: var(--accent); }
a.vx-link img.banknote { display: block; width: 100%; max-width: 360px; margin-top: .6rem; }

/* the quote page */
.vx-quotehead { display: flex; justify-content: space-between; align-items: flex-end; gap: 1.5rem; flex-wrap: wrap; background: #fff; border: 1px solid var(--rule); border-radius: 8px; padding: 1.1rem 1.3rem; margin: 0 0 .8rem; }
.vx-quote-id { display: flex; gap: 1rem; align-items: center; }
.vx-quote-logo { width: 64px; height: 64px; border: 1px solid var(--rule-soft); border-radius: 8px; background: #fff; flex: none; }
.vx-quotehead h1 { margin: 0; font-size: 1.7rem; }
.vx-ids { font-family: var(--mono); font-size: .78rem; color: var(--muted); margin: .2rem 0 0; }
.vx-quote-price { text-align: right; }
.vx-quote-price .vx-bigquote { justify-content: flex-end; }
.vx-tabs { display: flex; gap: 1.4rem; border-bottom: 1px solid var(--rule); margin: .6rem 0 1.2rem; overflow-x: auto; }
.vx-tabs a { color: var(--muted); font-weight: 600; font-size: .92rem; padding: .5rem 0; border-bottom: 3px solid transparent; white-space: nowrap; }
.vx-tabs a.on, .vx-tabs a:hover { color: var(--ink); border-bottom-color: var(--accent); text-decoration: none; }
.shell-exchange .entry-grid { grid-template-columns: minmax(0, 1fr) 20rem; gap: 0 1.2rem; }
.shell-exchange aside.infobox { background: #fff; border: 1px solid var(--rule); border-radius: 8px; padding: 1rem 1.1rem; margin: 0; font-size: .88rem; }
.shell-exchange aside.infobox h2 { font-size: .95rem; margin: 0 0 .5rem; }
.shell-exchange aside.infobox h2 + dl, .shell-exchange aside.infobox dl + h2 { margin-top: .8rem; }
.shell-exchange aside.infobox dl.facts { grid-template-columns: minmax(5.5rem, 7rem) 1fr; }
.shell-exchange dl.facts dt { font-family: var(--body-font); font-size: .78rem; color: var(--muted); font-weight: 600; font-variant: normal; letter-spacing: 0; }
.shell-exchange dl.facts dt, .shell-exchange dl.facts dd { border-bottom-color: var(--rule-soft); border-bottom-style: solid; }
.shell-exchange aside.infobox .logo img { max-width: 120px; border: 0; }
.listing .lede { margin: 0 0 .6rem; }

/* the official price list, shown as the Ministry's document */
.vx-doc { border: 1px solid #3a3a3a; border-radius: 6px; overflow: hidden; margin: 0 0 1.2rem; background: #4a4a4a; }
.vx-doc-bar { display: flex; justify-content: space-between; color: #eee; background: #2a2a2a; font-size: .8rem; padding: .4rem .8rem; }
.vx-doc-page { background: #f6f1e4; color: #1e1a14; margin: 1.2rem; padding: 1.6rem 2rem; box-shadow: 0 2px 10px rgba(0,0,0,.45); font-family: Georgia, 'Times New Roman', serif; }
.vx-doc-page h2 { font-family: Georgia, serif; text-align: center; font-variant: small-caps; letter-spacing: .06em; font-weight: 400; font-size: 1.3rem; border-bottom: 3px double #333; padding-bottom: .3rem; color: #1e1a14; }
.vx-doc-page table { font-size: .92rem; }
.vx-doc-page th { font-family: Georgia, serif; font-variant: small-caps; text-transform: none; letter-spacing: .04em; color: #333; border-bottom: 1px solid #333; font-size: .82rem; }
.vx-doc-page td { border-bottom: 1px dotted rgba(0,0,0,.3); }
.vx-doc-page td.num { font-family: Georgia, serif; }
.vx-doc-page .muted { color: #6a5f4d; }
[data-era="early"] .vx-doc-page, [data-era="victorian"] .vx-doc-page { background: #efe4c8; }

/* ---------- the older exchange furniture, kept ---------- */
.shell-exchange { --panel: #ffffff; }
.exchange .kicker a { text-decoration: none; }
.vex-masthead { display: grid; grid-template-columns: 1fr auto; gap: 2rem; align-items: start; border-bottom: 0; padding-bottom: 0; margin-bottom: 1.2rem; }
.vex-masthead h1 { font-size: 1.9rem; margin: 0 0 .3rem; }
.vex-masthead h1 a { text-decoration: none; }
.ticker-board { display: grid; grid-template-columns: repeat(2, minmax(150px, 1fr)); gap: .6rem; }
.ticker-board .tile { border: 1px solid var(--rule); border-radius: 8px; background: #fff; padding: .6rem .9rem; display: flex; flex-direction: column; min-width: 150px; }
.ticker-board .label { font-size: .75rem; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
.ticker-board .value { font-family: var(--mono); font-size: 1.4rem; font-weight: 600; color: var(--ink); line-height: 1.3; }
.ticker-board .sub { font-size: .75rem; color: var(--muted); }
.exchange h2, .listing h2 { border-bottom: 0; }
.listing-head { border-bottom: 0; padding-bottom: 0; margin-bottom: .8rem; }
.listing h1 .ticker { font-family: var(--mono); font-size: .7em; color: #fff; background: var(--accent); border-radius: 4px; padding: .05rem .4rem; margin-right: .4rem; vertical-align: .15em; }
.exchange td.ticker a { text-decoration: none; }
.banknote img { width: 100%; border: 1px solid var(--rule); }
.board-list td:first-child { white-space: nowrap; }
.exchange .prevnext { display: flex; flex-wrap: wrap; gap: .3rem .8rem; margin: .4rem 0 1rem; color: var(--muted); border-top: 0; padding: 0; }
.exchange table.pricelist td.num, .exchange table.pricelist th.num { text-align: right; white-space: nowrap; }
.exchange table.pricelist tr.fixed td { color: #6a5f4d; font-style: italic; }
.exchange .ticker-board .small-value { font-size: 1rem; font-family: var(--body-font); }
.exchange .banknote-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: .8rem; margin: .6rem 0; }
.exchange .banknote-grid figure { margin: 0; background: #fff; border: 1px solid var(--rule-soft); border-radius: 6px; padding: .5rem; }
.exchange .banknote-grid img.banknote { width: 100%; max-width: none; }
.exchange .banknote-grid figcaption { font-size: .8rem; color: var(--muted); text-align: center; margin-top: .2rem; }
.exchange .series { background: #fff; border: 1px solid var(--rule); border-radius: 8px; padding: 1rem 1.2rem; margin: 0 0 1.2rem; }
.exchange .series.current { border-color: var(--accent); box-shadow: inset 4px 0 0 var(--accent); }
.exchange .series.current h2 { color: var(--accent); }
.exchange .series dl.facts { grid-template-columns: 9rem 1fr; }
.exchange section.chart-block, .exchange .twocol > section { background: #fff; border: 1px solid var(--rule); border-radius: 8px; padding: 1rem 1.2rem; margin: 0 0 1.2rem; }
.shell-exchange .twocol { gap: 0 1.2rem; }
.shell-exchange .colophon { border-top: 1px solid var(--rule); }

/* ---------- footer ---------- */
.shell-exchange footer.vx-footer { background: #0b1220; color: #b7c2cb; text-align: left; border: 0; padding: 2.4rem 0 1.4rem; font-size: .88rem; }
.vx-foot-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.2fr; gap: 2rem; margin-bottom: 1.4rem; }
.vx-foot-brand { color: #fff; font-size: 1.15rem; }
.vx-footer h2 { color: #fff; font-size: .95rem; margin: 0 0 .5rem; }
.vx-footer ul { list-style: none; padding: 0; margin: 0; }
.vx-footer li { margin: 0 0 .3rem; }
.vx-footer a { color: #e6edf3 !important; }
.vx-footer p { max-width: none; }
.vx-legal { font-size: .78rem; color: #8995a1; border-top: 1px solid #1e2a3a; padding-top: .8rem; }
.vx-footer .vmt { color: #8995a1; }

/* ---------- small screens ---------- */
@media (max-width: 1000px) {
  .vx-nav { display: none; }
  .vx-dash, .vx-two, .shell-exchange .entry-grid { grid-template-columns: minmax(0, 1fr); }
  .vex-masthead { grid-template-columns: 1fr; }
  .vx-foot-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
  .vx-in { padding: 0 16px; }
  .shell-exchange main.vx-main { padding: 0 16px 2rem; }
  .vx-search input { width: 8rem; }
  .vx-subbar .vx-in { flex-direction: column; gap: .1rem; }
  .vx-quotehead { padding: .9rem; }
  .vx-quote-price { text-align: left; }
  .vx-quote-price .vx-bigquote { justify-content: flex-start; }
  .vx-price { font-size: 1.9rem; }
  .vx-quote-logo { width: 48px; height: 48px; }
  .vx-card { padding: .8rem .9rem; }
  .vx-doc-page { margin: .6rem; padding: 1rem; }
  .ticker-board { grid-template-columns: 1fr 1fr; gap: .4rem; }
  .ticker-board .tile { min-width: 0; padding: .4rem .6rem; }
  .vx-foot-grid { grid-template-columns: 1fr; }
  .shell-exchange table.vx-table { display: table; }
}
.vx-quotehead.listing-head { border-bottom: 1px solid var(--rule); padding-bottom: 1.1rem; margin-bottom: .8rem; }
.vx-nav a, .nm-nav a { flex: none; }
.vx-tabs a { flex: none; } @media (max-width: 640px) { dl.vx-stats { grid-template-columns: 1fr 1fr; } .vx-search { display: none; } }
@media (max-width: 1000px) { .vx-header-in { flex-wrap: wrap; row-gap: .3rem; } .vx-nav { display: flex; order: 3; flex-basis: 100%; overflow-x: auto; gap: 1.1rem; } .vx-nav a { font-size: .9rem; } }

/* ---------- practice portfolio: dealing ticket, contract note, holdings ---------- */
.vx-practice .vx-pagehead h1 { margin: .2rem 0 .3rem; }
.vx-deal { align-items: start; }
.vx-ticket { display: flex; flex-direction: column; gap: .8rem; }
.vx-side { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; }
.vx-side label { cursor: pointer; }
.vx-side input { position: absolute; opacity: 0; }
.vx-side span { display: block; text-align: center; padding: .7rem; font-weight: 700; color: var(--muted); }
.vx-side label:first-child input:checked + span { background: var(--up); color: #fff; }
.vx-side label:last-child input:checked + span { background: var(--down); color: #fff; }
.vx-field { display: flex; flex-direction: column; gap: .3rem; font-size: 13px; font-weight: 600; color: var(--muted); }
.vx-field input { font: 600 1.2rem var(--mono); padding: .6rem .7rem; border: 1px solid var(--rule); border-radius: 6px; }
.vx-est { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; margin: 0; }
.vx-est div { background: var(--paper); border-radius: 6px; padding: .5rem .7rem; }
.vx-est dt { font-size: 12px; color: var(--muted); } .vx-est dd { margin: 0; font: 600 15px var(--mono); }
.vx-msg { color: var(--down); font-weight: 600; margin: 0; }
.vx-btn { display: inline-block; font: 600 14px var(--ui); background: var(--accent); color: #fff !important; border: 2px solid var(--accent); border-radius: 6px; padding: .6rem 1.1rem; cursor: pointer; text-decoration: none !important; }
.vx-btn.ghost { background: #fff; color: var(--accent) !important; }
.vx-btn.small { padding: .25rem .6rem; font-size: 12px; }
.vx-note th { text-align: left; color: var(--muted); font-weight: 500; width: 40%; }
.vx-note .vx-total th, .vx-note .vx-total td { font-weight: 700; border-top: 2px solid var(--ink); }
.vx-note .sz-barcode { width: 100%; height: 40px; margin: .8rem 0 .2rem; }
.vx-status { font-weight: 600; color: var(--up); }
.vx-status.bad { color: var(--down); }
.vx-kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; margin: 0 0 1rem; }
.vx-kpis .vx-card p { margin: 0; }
.vx-tradebar { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; margin: .6rem 0 1rem; }
html.vx-rejected .vx-note { opacity: .45; }
@media (max-width: 760px) { .vx-kpis { grid-template-columns: 1fr; } .vx-est { grid-template-columns: 1fr 1fr; } }
.vx-note .vx-table { width: 100%; } .vx-note .vx-table td, .vx-note .vx-table th { white-space: normal; word-break: break-word; } .vx-card { min-width: 0; }
