:root {
  --pico-font-size: 15px;
  --pico-spacing: 0.75rem;
  --pico-block-spacing-vertical: 0.75rem;
  --pico-form-element-spacing-vertical: 0.35rem;
  --pico-form-element-spacing-horizontal: 0.6rem;
}
body { min-height: 100vh; }
main.container-fluid { padding-top: 0.5rem; }
.topbar nav { flex-wrap: wrap; }
.topbar nav ul { flex-wrap: wrap; }
.topbar nav ul li { padding: 0.25rem 0.4rem; }
.topbar a.active { text-decoration: underline; font-weight: 600; }
.topbar .brand { font-weight: 700; text-decoration: none; }
.footer { text-align: center; opacity: 0.6; padding: 1rem 0 2rem; }

.badge { display: inline-block; padding: 0.05rem 0.45rem; border-radius: 0.4rem; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; background: #3a3f4b; color: #e8e8e8; vertical-align: middle; }
.badge-live { background: #b3261e; color: #fff; }
.badge-dry { background: #7a5c00; color: #fff; }
.badge-ok, .badge-info { background: #1f6f43; color: #fff; }
.badge-info { background: #1f4f8f; }
.badge-warn, .badge-warn { background: #8a5a00; color: #fff; }
.badge-critical { background: #b3261e; color: #fff; }
.badge-info { background: #1f4f8f; }
.state-HELD { background: #7a5c00; color: #fff; }
.state-LISTING_REQUESTED { background: #1f4f8f; color: #fff; }
.state-LISTED { background: #1f6f43; color: #fff; }
.state-SOLD { background: #2e7d32; color: #fff; }
.state-CANCELLED, .state-REVERTED, .state-FAILED { background: #b3261e; color: #fff; }
.decision-set { background: #1f6f43; color: #fff; }
.decision-remove { background: #b3261e; color: #fff; }
.decision-keep { background: #3a3f4b; }
.decision-accepted { background: #1f6f43; color: #fff; }
.decision-ignored, .decision-pending { background: #8a5a00; color: #fff; }
.decision-dry_run { background: #7a5c00; color: #fff; }

.kpis article { margin-bottom: 0.75rem; }
.kpi { font-size: 1.6rem; font-weight: 700; margin: 0.2rem 0 0.4rem; }
.kpi small { font-size: 0.8rem; font-weight: 400; opacity: 0.7; }
.grid.two { grid-template-columns: repeat(auto-fit, minmax(420px, 1fr)); }
.grid.kpis { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
table.compact { font-size: 0.85rem; margin-bottom: 0.25rem; }
table.compact td, table.compact th { padding: 0.25rem 0.45rem; }
table.compact td:first-child { white-space: nowrap; }
table.compact td.wrap { white-space: normal; }
table.compact td.wrap small { display: block; line-height: 1.25; }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.table-wrap { overflow-x: auto; }
tr.dim { opacity: 0.45; }
.pos { color: #4fd18b; }
.neg { color: #ff6b6b; }
.warn { color: #ffb347; }
.muted { opacity: 0.65; }
.actions { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.5rem; }
.actions button, button.tiny { width: auto; margin: 0; padding: 0.25rem 0.6rem; font-size: 0.8rem; }
.cap-buttons { flex-wrap: nowrap; }
/* Several cards sharing one grid cell (Sellability + buy-order ceiling). */
.grid > .stack { display: flex; flex-direction: column; gap: var(--pico-spacing, 1rem); }
.grid > .stack > article { margin: 0; }
.cap-buttons form { margin: 0; flex: 1 1 0; }
.cap-buttons button { width: 100%; min-width: 0; padding-inline: 0.4rem; }
.cap-facts { display: grid; grid-template-columns: max-content 1fr; gap: 0.3rem 0.9rem; margin: 0.75rem 0 0.5rem; font-size: 0.85rem; }
.cap-facts dt { color: var(--pico-muted-color); white-space: nowrap; }
.cap-facts dd { margin: 0; }
form.inline { display: inline-flex; gap: 0.3rem; align-items: center; margin: 0; }
form.inline input, form.inline select { margin: 0; width: auto; padding: 0.15rem 0.4rem; font-size: 0.8rem; }
form.inline input[type=text] { min-width: 3rem; }
form.inline-form { display: flex; gap: 0.4rem; align-items: center; margin: 0.35rem 0; flex-wrap: wrap; }
form.inline-form input { margin: 0; width: 9rem; padding: 0.2rem 0.45rem; font-size: 0.8rem; }
form.inline-form input[type=text] { width: 14rem; }
form.inline-form button { width: auto; margin: 0; padding: 0.25rem 0.6rem; font-size: 0.8rem; }
.capital-forms { margin-top: 0.5rem; }
.capital-forms summary { cursor: pointer; }
button.tiny .pos, button.tiny .neg { font-weight: 600; }
label.inline { display: inline-flex; align-items: center; gap: 0.3rem; margin: 0; }
.row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.row h3 { margin: 0; }
.filters a { margin-right: 0.6rem; font-size: 0.85rem; }
.filters a.active { font-weight: 700; text-decoration: underline; }
.filter-input { max-width: 240px; margin: 0; }
ul.plain { list-style: none; padding-left: 0; margin: 0; }
ul.plain li { list-style: none; }
ul.plain li::marker { content: ''; }
ul.plain li { padding: 0.25rem 0; border-bottom: 1px solid rgba(255,255,255,0.06); }
/* Trade / money alerts: loud enough to spot from across the room. */
ul.plain li.alert-hit { padding: 0.55rem 0.7rem; margin: 0.35rem 0; border-radius: 0.5rem; border: 1px solid transparent; }
ul.plain li.alert-hit b { font-size: 1.05rem; }
.hit-badge { display: inline-block; padding: 0.1rem 0.55rem; border-radius: 0.4rem; font-size: 0.78rem; font-weight: 800; letter-spacing: 0.08em; color: #0b0d11; vertical-align: middle; }
li.alert-sold { background: linear-gradient(90deg, rgba(79, 209, 139, 0.28), rgba(79, 209, 139, 0.06)); border-color: rgba(79, 209, 139, 0.55); }
li.alert-sold .hit-badge { background: #4fd18b; }
li.alert-bought { background: linear-gradient(90deg, rgba(86, 156, 255, 0.28), rgba(86, 156, 255, 0.06)); border-color: rgba(86, 156, 255, 0.55); }
li.alert-bought .hit-badge { background: #7fb4ff; }
li.alert-liquidated { background: linear-gradient(90deg, rgba(255, 179, 71, 0.28), rgba(255, 179, 71, 0.06)); border-color: rgba(255, 179, 71, 0.55); }
li.alert-liquidated .hit-badge { background: #ffb347; }
li.alert-money { background: linear-gradient(90deg, rgba(212, 175, 55, 0.26), rgba(212, 175, 55, 0.05)); border-color: rgba(212, 175, 55, 0.55); }
li.alert-money .hit-badge { background: #d4af37; }
li.alert-hit.fresh { animation: hit-glow 1.6s ease-in-out 6; }
li.alert-sold.fresh { --hit-glow: rgba(79, 209, 139, 0.75); }
li.alert-bought.fresh { --hit-glow: rgba(86, 156, 255, 0.75); }
li.alert-liquidated.fresh, li.alert-money.fresh { --hit-glow: rgba(255, 179, 71, 0.75); }
@keyframes hit-glow {
  0%, 100% { box-shadow: 0 0 0 0 transparent; }
  50% { box-shadow: 0 0 0.9rem 0.15rem var(--hit-glow, rgba(255,255,255,0.5)); }
}
@media (prefers-reduced-motion: reduce) { li.alert-hit.fresh { animation: none; } }
.flash { padding: 0.5rem 0.9rem; margin-bottom: 0.75rem; background: rgba(31, 111, 67, 0.18); }
.flash.error { background: rgba(179, 38, 30, 0.18); }
p.error { color: #ff6b6b; }
.logbox { height: 70vh; overflow: auto; font-size: 0.78rem; line-height: 1.35; padding: 0.6rem; white-space: pre-wrap; word-break: break-word; }
.lvl-ERROR { color: #ff6b6b; }
.lvl-WARN { color: #ffb347; }
.lvl-INFO { color: #d7dbe0; }
.lvl-DEBUG, .lvl-TRACE { color: #8b93a1; }
code.payload { display: block; max-width: 70vw; white-space: pre-wrap; word-break: break-all; font-size: 0.72rem; }
.pager { display: flex; gap: 1rem; }
.login-wrap { display: flex; min-height: 100vh; align-items: center; justify-content: center; }
.login-card { max-width: 420px; width: 100%; }
input[type=checkbox][role=switch] { margin-bottom: 0; }
.items td { vertical-align: middle; white-space: nowrap; }
.items td .reason { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }

.switch-row { margin-bottom: 0.1rem; }
small.help { display: block; margin: 0 0 0.75rem 0; }

