/* ============================================================================
   PortalOS — styles.css
   Dark "command-center" aesthetic. Teal accent, amber for pending engines.
   Fonts: Hanken Grotesk (UI) + IBM Plex Mono (labels/status/version).
   ============================================================================ */

:root {
  --bg:        #0a0c10;
  --bg-glow:   #0e1622;
  --glow-1:    #0e1622;
  --glow-2:    #0f1a17;
  --panel:     #11151c;
  --panel-2:   #161b24;
  --border:    #232b38;
  --border-2:  #2e3949;
  --text:      #e7edf4;
  --muted:     #8794a6;
  --accent:    #34e0c8;
  --accent-dim:#1c8a7c;
  --warn:      #ffb454;
  --ext:       #7aa2ff;
  --danger:    #ff5d6c;
  --ok:        #46d39a;
  --radius:    14px;
  --mono: 'IBM Plex Mono', ui-monospace, monospace;
  --ui: 'Hanken Grotesk', system-ui, sans-serif;
}

/* Day theme — overrides the night defaults above. */
:root[data-theme="day"] {
  --bg:        #eef1f6;
  --glow-1:    #dde8f6;
  --glow-2:    #e7f4ee;
  --panel:     #ffffff;
  --panel-2:   #f3f6fb;
  --border:    #e3e9f1;
  --border-2:  #cdd7e3;
  --text:      #15202e;
  --muted:     #5d6b7d;
  --ok:        #0f9d6e;
  --warn:      #bd7916;
  --ext:       #3360e0;
  --danger:    #d2384a;
}

* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; }
html { font-size: var(--ui-scale, 16px); }
body {
  font-family: var(--ui);
  color: var(--text);
  background:
    radial-gradient(1200px 600px at 80% -10%, var(--glow-1), transparent 60%),
    radial-gradient(900px 500px at -10% 110%, var(--glow-2), transparent 55%),
    var(--bg);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased;
  transition: background-color .2s ease, color .2s ease;
}
code { font-family: var(--mono); font-size: 0.85em; color: var(--accent); }
h1, h2, h3, h4 { margin: 0; font-weight: 650; letter-spacing: -0.01em; }
.muted { color: var(--muted); margin: 4px 0 0; font-size: 0.9rem; }

/* --- buttons --- */
.btn {
  font-family: var(--ui); font-size: 0.92rem; font-weight: 600;
  color: #04110e; background: var(--accent); border: none;
  padding: 10px 18px; border-radius: 10px; cursor: pointer;
  transition: transform .08s ease, filter .15s ease;
}
.btn:hover { filter: brightness(1.08); }
.btn:active { transform: translateY(1px); }
.btn:disabled { opacity: .5; cursor: default; }
.btn.ghost { background: transparent; color: var(--text); border: 1px solid var(--border-2); }
.btn.ghost:hover { border-color: var(--accent-dim); color: var(--accent); }
.btn.block { width: 100%; }
.btn.sm { padding: 6px 12px; font-size: 0.85rem; }

/* --- pills --- */
.pill {
  font-family: var(--mono); font-size: 0.66rem; text-transform: uppercase;
  letter-spacing: .08em; padding: 3px 8px; border-radius: 20px;
  border: 1px solid currentColor; white-space: nowrap;
}
.pill.live { color: var(--ok); }
.pill.warn { color: var(--warn); }
.pill.ext  { color: var(--ext); }

/* --- login --- */
.login { min-height: 100vh; display: grid; place-items: center; padding: 24px; }
.login-card {
  width: 100%; max-width: 360px; background: var(--panel);
  border: 1px solid var(--border); border-radius: var(--radius);
  padding: 32px 28px; box-shadow: 0 30px 80px rgba(0,0,0,.5);
}
.login-card input {
  width: 100%; margin-top: 12px; padding: 12px 14px; border-radius: 10px;
  background: var(--bg); border: 1px solid var(--border-2); color: var(--text);
  font-family: var(--ui); font-size: 0.95rem;
}
.login-card input:focus { outline: none; border-color: var(--accent-dim); }
.login-card .btn { margin-top: 16px; }
.btn.google {
  display: flex; align-items: center; justify-content: center; gap: 10px;
  background: #f5f7fa; color: #1d2530; border: 1px solid #d6dde6;
}
.btn.google:hover { filter: none; background: #fff; }
.btn.google svg { flex: 0 0 auto; }
.divider { display: flex; align-items: center; gap: 12px; margin: 18px 0 4px; color: var(--muted); }
.divider::before, .divider::after { content: ''; flex: 1; height: 1px; background: var(--border-2); }
.divider span { font-family: var(--mono); font-size: 0.68rem; text-transform: uppercase; letter-spacing: .12em; }
.login-err { color: var(--danger); font-size: 0.85rem; min-height: 18px; margin-top: 10px; }
.login-info { color: var(--ok); font-size: 0.85rem; min-height: 0; margin-top: 4px; }
.login-toggle { font-size: 0.85rem; color: var(--muted); margin-top: 14px; text-align: center; }
.linkbtn { background: none; border: none; color: var(--accent); cursor: pointer; font: inherit; padding: 0; text-decoration: underline; }
.linkbtn:hover { filter: brightness(1.15); }
.login-foot { font-family: var(--mono); font-size: 0.7rem; color: var(--muted); margin-top: 18px; text-align: center; }

.brand { font-weight: 750; font-size: 1.15rem; letter-spacing: -0.02em; display: flex; align-items: center; gap: 9px; }
.brand-mark { color: var(--accent); }
.ver { font-family: var(--mono); font-size: 0.62rem; color: var(--muted); border: 1px solid var(--border-2); padding: 2px 6px; border-radius: 6px; letter-spacing: .05em; }

/* --- shell layout --- */
.shell { min-height: 100vh; display: flex; flex-direction: column; --topbar-h: 58px; }
.topbar {
  display: flex; justify-content: space-between; align-items: center;
  padding: 14px 22px; border-bottom: 1px solid var(--border);
  background: rgba(10,12,16,.7); backdrop-filter: blur(8px);
  position: sticky; top: 0; z-index: 60;
}
.topbar-right { display: flex; align-items: center; gap: 14px; }
.user { font-family: var(--mono); font-size: 0.78rem; color: var(--muted); }
.body { flex: 1; position: relative; min-height: 0; }

/* --- rail (collapsed icon strip by default; expands on hover or when pinned,
   as an OVERLAY so the dashboard never reflows; a quiet option list, not tabs).
   FIXED to the viewport BELOW the topbar so the icons stay visible while scrolling
   and never slide under / over the top bar (topbar z-index sits above the rail). --- */
.rail {
  position: fixed; top: calc(var(--topbar-h) + var(--bnr-h, 0px)); left: 0; bottom: var(--adv-h, 0px);
  width: 54px; z-index: 30;
  display: flex; flex-direction: column; gap: 3px; overflow: hidden;
  padding: 12px 9px; background: transparent; border-right: 1px solid var(--border);
  transition: width .16s ease, background .16s ease, box-shadow .16s ease;
}
.shell.bnr-bottom .rail { top: var(--topbar-h); }   /* bottom banner doesn't push the rail down */
.rail:hover, .shell.rail-pinned .rail {
  width: 232px; background: var(--panel); box-shadow: 8px 0 28px rgba(0,0,0,.30); overflow-y: auto;
}
.workzone { margin-left: 54px; }   /* v1.127.0 U1b — BLACK-BAR FIX: the definite-height rule below already subtracts var(--adv-h) from .workzone height (v0.96.0), so its bottom edge lands exactly at the dock top. The old padding-bottom:var(--adv-h) here RE-reserved the same space inside that already-sized box (border-box) → a --bg-colored strip ≈ dock height showing above the dock = the "black bar". Removed; the height calc is the single, correct reservation. */
.rail-item {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  padding: 9px 7px; border-radius: 10px; cursor: pointer; white-space: nowrap;
  background: transparent; border: none; border-left: 2px solid transparent; color: var(--muted);
  justify-content: center;
  transition: background .12s ease, color .12s ease;
}
.rail:hover .rail-item, .shell.rail-pinned .rail-item { justify-content: flex-start; }
.rail-item:hover { background: var(--panel-2); color: var(--text); }
.rail-item.active { color: var(--text); border-left-color: var(--accent); }
.ri-icon { width: 22px; height: 22px; color: inherit; opacity: .75; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; }
.rail-item:hover .ri-icon, .rail-item.active .ri-icon { opacity: 1; }
.rail-item.active .ri-icon { color: var(--accent); }
.ri-icon svg { width: 21px; height: 21px; }
.ri-text { display: none; flex-direction: column; flex: 1 1 auto; min-width: 0; }
.rail:hover .ri-text, .shell.rail-pinned .rail .ri-text { display: flex; }
.rail .pill { display: none; flex: 0 0 auto; }
.rail:hover .pill, .shell.rail-pinned .rail .pill { display: inline-block; }
.ri-label { font-weight: 600; font-size: 0.9rem; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
.ri-sub { font-size: 0.72rem; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* --- panel + home --- */
.panel { padding: 28px 32px; overflow-y: auto; }

/* === v0.42.0 — consistent, centered, responsive engine pages ===
   Every engine tab used to set its own max-width and none were centered, so tabs
   were inconsistently left-aligned (Memory), full-width (Assistant) or centered
   (Dashboard). Now every engine root CENTERS in the panel at a width that scales
   with the screen — narrow/centered on small screens, wider on large/ultrawide —
   and list grids add COLUMNS rather than stretching single cards. The dashboard
   keeps its own .dash-grid width (exempt via :has(.dash2)). */
.panel { --page-w: 1080px; }
@media (min-width: 1500px) { .panel { --page-w: 1280px; } }
@media (min-width: 1920px) { .panel { --page-w: 1520px; } }
@media (min-width: 2400px) { .panel { --page-w: 1780px; } }
.panel:not(:has(.dash2)) > * { max-width: var(--page-w); margin-inline: auto; width: 100%; }
/* reading/form pages stay a comfortable readable column even when centered */
.panel:not(:has(.dash2)) > .settings,
.panel:not(:has(.dash2)) > .hlp-page,
.panel:not(:has(.dash2)) > .rep-wrap { max-width: var(--page-w); }
/* Memory: spend the extra width by adding category COLUMNS (not stretched rows) */
.mem-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 16px 18px; align-items: start; }
.sec { font-family: var(--mono); font-size: 0.72rem; text-transform: uppercase; letter-spacing: .14em; color: var(--muted); margin: 28px 0 12px; }
.tile {
  position: relative; text-align: left; cursor: pointer; color: var(--text);
  background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 18px; display: flex; flex-direction: column; gap: 6px; min-height: 130px;
  transition: transform .1s ease, border-color .15s ease, background .15s ease;
}
.tile:hover { transform: translateY(-2px); border-color: var(--border-2); background: var(--panel-2); }
.tile .pill { position: absolute; top: 14px; right: 14px; }

/* --- scaffold engines --- */
.scaffold > .muted { max-width: 640px; }
.plan-card { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 15px 16px; }
.plan-card h4 { font-size: 0.9rem; }
.plan-card p { margin: 6px 0 0; font-size: 0.82rem; color: var(--muted); }
@keyframes pulse { 0%,100% { transform: scale(1); opacity: .9; } 50% { transform: scale(1.05); opacity: 1; } }
.kv { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); }

/* --- AI engine --- */
.ai-wrap { display: flex; flex-direction: column; height: calc(100vh - 130px - var(--bnr-h, 0px) - var(--adv-h, 0px)); max-width: 820px; }
.ai-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.ai-head h2 { font-size: 1.3rem; }
.ai-log { flex: 1; overflow-y: auto; margin: 18px 0; display: flex; flex-direction: column; gap: 10px; padding-right: 6px; }
.ai-msg { padding: 11px 14px; border-radius: 12px; max-width: 88%; line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; }
.ai-msg.user { align-self: flex-end; background: var(--accent-dim); color: #eafffb; }
.ai-msg.bot { align-self: flex-start; background: var(--panel-2); border: 1px solid var(--border); }
.ai-msg.sys { align-self: stretch; max-width: 100%; background: transparent; border: 1px dashed var(--border-2); color: var(--muted); font-size: 0.84rem; font-family: var(--mono); }
.ai-msg.pending { color: var(--muted); }
.ai-msg.ok { border-color: var(--ok); color: var(--ok); }
.ai-msg.err { border: 1px solid var(--danger); color: #ffd2d6; background: rgba(255,93,108,.08); }
.ai-bar { display: flex; gap: 10px; align-items: flex-end; }
.ai-bar textarea {
  flex: 1; resize: none; font-family: var(--ui); font-size: 0.95rem; line-height: 1.4;
  padding: 12px 14px; border-radius: 12px; background: var(--bg);
  border: 1px solid var(--border-2); color: var(--text); max-height: 160px;
}
.ai-bar textarea:focus { outline: none; border-color: var(--accent-dim); }
.ai-foot { font-family: var(--mono); font-size: 0.7rem; color: var(--muted); margin-top: 8px; min-height: 14px; }

/* --- responsive --- */
@media (max-width: 760px) {
  /* no hover on touch — keep the strip slim; tap ☰ to pin it open as an overlay */
  .rail:hover { width: 54px; background: transparent; box-shadow: none; overflow: hidden; }
  .rail:hover .ri-text, .rail:hover .pill { display: none; }
  .rail:hover .rail-item { justify-content: center; }
  .shell.rail-pinned .rail { width: 220px; background: var(--panel); box-shadow: 8px 0 28px rgba(0,0,0,.3); }
  .shell.rail-pinned .rail .ri-text { display: flex; }
  .shell.rail-pinned .rail .pill { display: inline-block; }
}

/* --- topbar icon toggles (day/night, zen) --- */
.btn.ghost.icon { padding: 6px 10px; font-size: 1rem; line-height: 1; }
.btn.ghost.icon.on { color: var(--accent); border-color: var(--accent-dim); }

/* --- zen mode (mirrors BrisaOS: hide chrome, focus the work) --- */
html.zen .rail { display: none; }
html.zen .workzone { margin-left: 0; }
.tb-left { display: flex; align-items: center; gap: 12px; }
#tb-rail { font-size: 1.05rem; }
html.zen .topbar { background: transparent; backdrop-filter: none; border-bottom-color: transparent; }
html.zen .ver, html.zen .user { display: none; }
html.zen .panel:not(:has(.dash2)) { max-width: 880px; margin-inline: auto; }
html.zen .home-head p { display: none; }

/* --- settings page --- */
.settings { max-width: 640px; }
.settings h2 { font-size: 1.3rem; }
.set-row {
  display: flex; align-items: center; justify-content: space-between; gap: 24px;
  padding: 18px 0; border-bottom: 1px solid var(--border);
}
.set-row h4 { font-size: 0.95rem; }
.set-row .muted { margin-top: 2px; }
.seg { display: inline-flex; border: 1px solid var(--border-2); border-radius: 10px; overflow: hidden; }
.seg button {
  font-family: var(--ui); font-size: 0.85rem; font-weight: 600; color: var(--muted);
  background: transparent; border: none; padding: 8px 16px; cursor: pointer; border-left: 1px solid var(--border-2);
}
.seg button:first-child { border-left: none; }
.seg button:hover { color: var(--text); }
.seg button.active { background: var(--accent); color: #04110e; }
.swatches { display: inline-flex; gap: 8px; }
.swatch {
  width: 26px; height: 26px; border-radius: 50%; cursor: pointer;
  background: var(--sw); border: 2px solid transparent; box-shadow: 0 0 0 1px var(--border-2);
}
.swatch.active { border-color: var(--bg); box-shadow: 0 0 0 2px var(--text); }
.set-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 22px; }
.set-foot .muted { font-family: var(--mono); font-size: 0.7rem; }

/* --- dashboard --- */
.dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; margin-top: 22px; align-items: start; }
.w-card.dragging { opacity: .5; outline: 2px dashed var(--accent-dim); }
.w-time { font-family: var(--mono); font-size: 2.4rem; font-weight: 500; letter-spacing: -0.02em; }
.w-date { color: var(--muted); font-size: 0.85rem; margin-top: 4px; }
.w-ask-out.err { color: var(--danger); }
.w-row.static { cursor: default; }

/* --- notes --- */
.notes { display: grid; grid-template-columns: 260px 1fr; gap: 18px; height: calc(100vh - 130px - var(--bnr-h, 0px) - var(--adv-h, 0px)); }
.nt-side { display: flex; flex-direction: column; gap: 10px; min-height: 0; }
.nt-side-head { display: flex; align-items: center; justify-content: space-between; }
.nt-side-head h2 { font-size: 1.2rem; }
.nt-folders { display: flex; flex-direction: column; gap: 2px; }
.nt-folder { display: flex; justify-content: space-between; align-items: center; padding: 7px 10px; border-radius: 8px; background: transparent; border: none; color: var(--text); cursor: pointer; font-size: 0.85rem; }
.nt-folder:hover { background: var(--panel); }
.nt-folder.active { background: var(--panel-2); color: var(--accent); }
.nt-list { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 4px; border-top: 1px solid var(--border); padding-top: 8px; }
.nt-item { display: flex; flex-direction: column; gap: 2px; text-align: left; padding: 9px 11px; border-radius: 9px; background: var(--panel); border: 1px solid transparent; color: var(--text); cursor: pointer; }
.nt-item:hover { border-color: var(--border-2); }
.nt-item.active { border-color: var(--accent-dim); }
.nt-title { font-weight: 600; font-size: 0.88rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nt-date { font-family: var(--mono); font-size: 0.66rem; color: var(--muted); }
.nt-del { color: var(--muted); font-size: 0.8rem; padding: 0 4px; }
.nt-del:hover { color: var(--danger); }
.nt-editor { display: flex; flex-direction: column; min-height: 0; }
.nt-title-input { font-family: var(--ui); font-size: 1.2rem; font-weight: 650; background: transparent; border: none; color: var(--text); padding: 6px 0; border-bottom: 1px solid var(--border); }
.nt-title-input:focus { outline: none; border-color: var(--accent-dim); }
.nt-body { flex: 1; resize: none; margin-top: 12px; font-family: var(--ui); font-size: 0.95rem; line-height: 1.6; background: transparent; border: none; color: var(--text); }
.nt-body:focus { outline: none; }
.nt-edfoot { display: flex; justify-content: space-between; align-items: center; padding-top: 10px; border-top: 1px solid var(--border); }
.nt-edfoot .muted { font-family: var(--mono); font-size: 0.7rem; }
.nt-empty { color: var(--muted); font-size: 0.85rem; padding: 14px 4px; }
.nt-empty.big { display: grid; place-items: center; height: 100%; }
.block { width: 100%; }

/* --- memory --- */
.memory { max-width: 720px; }
.memory h2 { font-size: 1.3rem; }
.mem-add { display: flex; gap: 8px; margin: 16px 0 22px; }
.mem-add select, .mem-add input { padding: 10px 12px; border-radius: 9px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); }
.mem-add input { flex: 1; }
.mem-add input:focus, .mem-add select:focus { outline: none; border-color: var(--accent-dim); }
.mem-cat { margin-bottom: 18px; }
.mem-cat h4 { font-family: var(--mono); font-size: 0.7rem; text-transform: uppercase; letter-spacing: .12em; color: var(--muted); margin-bottom: 8px; }
.mem-item { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 10px 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 9px; margin-bottom: 6px; font-size: 0.9rem; }

/* --- dashboard columns (v0.5.0) --- */
@media (max-width: 860px) { }

/* editable notes widget */
.wn { display: flex; flex-direction: column; gap: 8px; }
.wn-bar { display: flex; gap: 8px; }
.wn-bar select { flex: 1; min-width: 0; padding: 7px 10px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); }
.wn-title { padding: 8px 10px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); font-weight: 600; }
.wn-body { min-height: 150px; resize: vertical; padding: 10px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); font-size: 0.9rem; line-height: 1.55; }
.wn-title:focus, .wn-bar select:focus, .wn-body:focus { outline: none; border-color: var(--accent-dim); }
.wn-foot { display: flex; justify-content: space-between; align-items: center; }
.wn-foot .muted { font-family: var(--mono); font-size: 0.68rem; }

/* avatar widget */
.wa-cap { font-size: 0.84rem; max-height: 130px; overflow-y: auto; line-height: 1.5; }
.avatar-orb.speaking { animation: pulse .5s ease-in-out infinite; }
.avatar-orb.thinking { filter: saturate(.5); opacity: .65; }

/* --- MIC engine (v0.6.0) --- */
.mic-engine { max-width: 980px; }
.mic-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.mic-head-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.mic-scope-lbl { display: inline-flex; align-items: center; gap: 6px; font-size: .82rem; white-space: nowrap; }
.mic-batch-note { font-size: .82rem; margin: 0 0 8px; padding: 6px 10px; border-radius: 8px; background: color-mix(in srgb, var(--accent) 8%, transparent); border: 1px solid var(--border-2); }
.mic-head h2 { font-size: 1.3rem; }
.mic-tabs { display: flex; gap: 4px; margin: 18px 0 12px; border-bottom: 1px solid var(--border); }
.mic-tab { display: flex; align-items: center; gap: 6px; padding: 9px 14px; background: transparent; border: none; color: var(--muted); cursor: pointer; font-family: var(--ui); font-size: 0.88rem; font-weight: 600; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.mic-tab:hover { color: var(--text); }
.mic-tab.active { color: var(--accent); border-bottom-color: var(--accent); }
.mic-tab-count { font-family: var(--mono); font-size: 0.66rem; color: var(--muted); border: 1px solid var(--border-2); padding: 1px 6px; border-radius: 10px; }
.mic-tab.active .mic-tab-count { color: var(--accent); border-color: var(--accent-dim); }
.mic-add { display: flex; gap: 8px; margin-bottom: 10px; }
.mic-add input { flex: 1; padding: 9px 12px; border-radius: 9px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); }
.mic-add input:focus { outline: none; border-color: var(--accent-dim); }
.mic-symbols { display: flex; flex-wrap: wrap; gap: 6px; min-height: 32px; margin-bottom: 18px; }
.mic-symbol { display: inline-flex; align-items: center; gap: 8px; padding: 5px 10px; background: var(--panel); border: 1px solid var(--border); border-radius: 20px; font-family: var(--mono); font-size: 0.82rem; }
.mic-symbol[title] > span { cursor: help; }   /* v1.68.0: hover the ticker for the company-name tooltip */
.mic-list-foot { margin: -8px 0 16px; }        /* v1.68.0: per-class "↺ Reset to defaults" link */
.mic-scan-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 10px; padding-top: 8px; border-top: 1px solid var(--border); }
.mic-scan-head h4 { font-size: 0.95rem; }
.mic-scan-head .muted { font-family: var(--mono); font-size: 0.72rem; }
.mic-alert { background: var(--panel); border: 1px solid var(--border); border-left: 3px solid var(--muted); border-radius: 10px; padding: 12px 14px; margin-bottom: 8px; }
.mic-alert.imp-high { border-left-color: var(--danger); }
.mic-alert.imp-medium { border-left-color: var(--warn); }
.mic-alert.imp-low { border-left-color: var(--ok); }
.mic-alert-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 6px; }
.mic-alert-head strong { font-family: var(--mono); }
.mic-headline { flex: 1; min-width: 200px; font-size: 0.92rem; }
.pill.imp-high { color: var(--danger); }
.pill.imp-medium { color: var(--warn); }
.pill.imp-low { color: var(--ok); }
.pill.prob, .pill.horizon { color: var(--muted); }
.mic-alert-summary { font-size: 0.86rem; color: var(--text); line-height: 1.5; }
.mic-sources { margin-top: 6px; font-family: var(--mono); font-size: 0.72rem; }
.mic-sources a { color: var(--accent); text-decoration: none; }
.mic-sources a:hover { text-decoration: underline; }

/* --- live dashboard app cards (v0.7.0) --- */

/* AI chat card */
.wc-chat { display: flex; flex-direction: column; gap: 8px; }
.wc-log { display: flex; flex-direction: column; gap: 8px; max-height: 300px; overflow-y: auto; padding-right: 4px; }
.wc-log .ai-msg { max-width: 100%; font-size: 0.86rem; }
.wc-bar { display: flex; gap: 8px; align-items: flex-end; }
.wc-bar textarea { flex: 1; resize: none; font-family: var(--ui); font-size: 0.88rem; line-height: 1.4; padding: 9px 11px; border-radius: 9px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); max-height: 110px; }
.wc-bar textarea:focus { outline: none; border-color: var(--accent-dim); }

/* Memory card */
.wm { display: flex; flex-direction: column; gap: 10px; }
.wm-add { display: flex; gap: 6px; }
.wm-add select, .wm-add input { padding: 8px 10px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); font-size: 0.85rem; }
.wm-add input { flex: 1; min-width: 0; }
.wm-add select:focus, .wm-add input:focus { outline: none; border-color: var(--accent-dim); }
.wm-list { display: flex; flex-direction: column; gap: 5px; max-height: 240px; overflow-y: auto; }
.wm-item { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 8px 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; font-size: 0.84rem; }
.wm-item b { color: var(--accent); font-weight: 600; font-size: 0.72rem; text-transform: uppercase; letter-spacing: .04em; margin-right: 4px; }

/* MIC card */
.wmic { display: flex; flex-direction: column; gap: 10px; }
.wmic-add { display: flex; gap: 6px; }
.wmic-add select, .wmic-add input { padding: 8px 10px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); font-size: 0.85rem; }
.wmic-add input { flex: 1; min-width: 0; }
.wmic-add select:focus, .wmic-add input:focus { outline: none; border-color: var(--accent-dim); }
#wmic-alerts .mic-alert { margin-bottom: 6px; }

/* ============================================================================
   v0.8 — ultrawide split workspace + free-form tile-grid dashboard
   ========================================================================== */

/* --- split workspace --- */
/* v0.96.0 (Chin: "add individual scrolls in each pane so when i scroll not all
   panes are scrolling together"): bound the workzone to the viewport (minus the
   topbar, banner strip and advisor dock) so it is a DEFINITE height. Before this
   the shell was only min-height:100vh and .workzone grew to its TALLEST pane's
   content — so each pane's overflow never engaged and the whole DOCUMENT scrolled,
   moving both panes together. With a definite height, the left .panel
   (overflow-y:auto) and the right .wp-engine (overflow:auto) each scroll on their
   OWN. Same bound applies in single-pane mode (an improvement: the panel scrolls
   internally instead of the document). */
.workzone {
  min-width: 0; min-height: 0; display: flex; overflow: hidden;
  height: calc(100vh - var(--topbar-h, 58px) - var(--bnr-h, 0px) - var(--adv-h, 0px));
}
.workzone > .panel { flex: 1 1 auto; min-width: 0; min-height: 0; }
.split-divider { flex: 0 0 6px; cursor: col-resize; background: var(--border);
  border-left: 1px solid var(--border-2); border-right: 1px solid var(--border-2); }
.split-divider:hover { background: var(--accent-dim); }
/* v0.91.0 — built-in browser pane removed (X-Frame-Options made it blank for nearly all sites); .bp-* styles deleted */
.btn.icon.on { color: var(--accent); border-color: var(--accent-dim); }

/* --- dashboard 2 (free-form grid) --- */
.dash2 { display: flex; flex-direction: column; height: 100%; }
.dash2-bar { display: flex; justify-content: space-between; align-items: flex-end; gap: 16px; margin-bottom: 14px; }
.dash2-bar h1 { font-size: 1.5rem; }
.dash2-tools { display: flex; gap: 8px; flex: 0 0 auto; }
.add-wrap { position: relative; }
.add-menu { position: absolute; right: 0; top: calc(100% + 6px); z-index: 50; display: none;
  background: var(--panel-2); border: 1px solid var(--border-2); border-radius: 10px; padding: 6px;
  min-width: 170px; box-shadow: 0 12px 30px rgba(0,0,0,.35); }
.add-menu.open { display: block; }
.add-menu button { display: block; width: 100%; text-align: left; background: none; border: none;
  color: var(--text); font: inherit; padding: 8px 10px; border-radius: 7px; cursor: pointer; }
.add-menu button:hover { background: var(--panel); color: var(--accent); }

.dash-grid { position: relative; flex: 1 1 auto; min-height: 400px; width: 100%; max-width: 1280px; margin: 0 auto; }
.dtile { position: absolute; display: flex; flex-direction: column; overflow: hidden;
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  box-shadow: 0 1px 0 rgba(255,255,255,.02) inset; transition: box-shadow .15s ease; }
.dtile.dragging, .dtile.resizing { z-index: 40; box-shadow: 0 16px 40px rgba(0,0,0,.45); border-color: var(--accent-dim); transition: none; user-select: none; }
.dtile-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; flex: 0 0 auto;
  border-bottom: 1px solid var(--border); background: var(--panel-2); cursor: grab; touch-action: none; }
.dtile.dragging .dtile-head { cursor: grabbing; }
.dtile-grip { color: var(--muted); font-size: 0.85rem; letter-spacing: -2px; }
.dtile-title { font-family: var(--mono); font-size: 0.7rem; text-transform: uppercase; letter-spacing: .1em; color: var(--muted); flex: 1; }
.dtile-x { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 0.75rem; opacity: 0; transition: opacity .12s; padding: 2px 4px; }
.dtile:hover .dtile-x { opacity: 1; }
.dtile-x:hover { color: var(--danger); }
.dtile-body { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 12px; }
.dtile:hover .dtile-resize::after { border-color: var(--accent-dim); }

/* --- clock widget --- */
.w-time { font-family: var(--mono); font-size: 2.1rem; font-weight: 600; letter-spacing: -1px; color: var(--text); line-height: 1.1; }
.w-date { color: var(--muted); font-size: 0.82rem; margin-top: 2px; }
.sess.on { color: var(--ok); }
.sess.on i { background: var(--ok); box-shadow: 0 0 6px var(--ok); }

/* --- weather widget --- */
.wx-now { display: flex; align-items: center; gap: 14px; }
.wx-temp { font-family: var(--mono); font-size: 2.4rem; font-weight: 600; line-height: 1; }
.wx-temp span { font-size: 1rem; color: var(--muted); }
.wx-cond { font-size: 1rem; font-weight: 600; }
.wx-sub { font-size: 0.72rem; color: var(--muted); margin-top: 3px; }
.wx-day { flex: 1; text-align: center; background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; padding: 7px 4px; font-size: 0.72rem; }
.wx-day span { display: block; color: var(--muted); }
.wx-day b { font-family: var(--mono); font-size: 0.95rem; }

/* --- finance widget --- */
.fin-tag { font-family: var(--mono); font-size: 0.62rem; letter-spacing: .1em; color: var(--ok); }
.fin-chg.up { color: var(--ok); }
.fin-chg.dn { color: var(--danger); }

/* --- news widget --- */
.w-news { display: flex; flex-direction: column; gap: 8px; height: 100%; }
.news-bar { display: flex; align-items: center; gap: 6px; }  /* A1 (v0.80.0): merged with the former duplicate ~L1338; the per-card topics input was removed */
.news-list { flex: 1 1 auto; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 2px; }
.news-item { display: block; padding: 7px 4px; border-bottom: 1px solid var(--border); text-decoration: none; color: var(--text); }
.news-item:hover { background: var(--panel-2); }
.news-title { display: block; font-size: 0.82rem; line-height: 1.3; }
.news-src { display: block; font-family: var(--mono); font-size: 0.64rem; color: var(--muted); margin-top: 2px; }

/* --- gated connect cards --- */
.gated { text-align: center; display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 6px; height: 100%; justify-content: center; }
.gated-mark { font-size: 1.6rem; color: var(--warn); }
.gated-name { font-weight: 650; }
.gated-why { font-size: 0.74rem; line-height: 1.4; }
.gated-when { font-size: 0.66rem; color: var(--muted); font-family: var(--mono); line-height: 1.4; }

/* keep zen mode hiding the new browser pane chrome cleanly */

/* ============================================================================
   v0.9 — zen fix, responsive split, wallpaper, launcher, merged assistant
   ========================================================================== */

/* zen: collapse the empty rail column so the panel is not squeezed/cropped */
html.zen .body { grid-template-columns: 1fr; }

/* responsive safety: never show the workspace pane on narrow screens */
@media (max-width: 1279px) {
  .workspace-pane, .split-divider { display: none !important; }
  .workzone.split > .panel { flex-basis: auto !important; }
}

/* --- wallpaper presets (applied via <html data-wp>) --- */
html[data-wp="aurora"] body { background:
  radial-gradient(900px 500px at 12% -8%, #1b3a5e, transparent 60%),
  radial-gradient(800px 520px at 92% 0%, #145e54, transparent 58%),
  radial-gradient(700px 600px at 60% 115%, #3a1f5e, transparent 55%), var(--bg); }
html[data-wp="dusk"] body { background:
  linear-gradient(160deg, #2a1630 0%, #131a2e 48%, #0a0c10 100%); }
html[data-wp="graphite"] body { background:
  repeating-linear-gradient(45deg, #0d1016 0 14px, #0a0c10 14px 28px); }
html[data-wp="custom"] body { background:
  linear-gradient(rgba(8,10,14,.55), rgba(8,10,14,.78)), var(--wp-image, none) center/cover fixed no-repeat, var(--bg); }
html[data-theme="day"][data-wp="custom"] body { background:
  linear-gradient(rgba(245,247,250,.55), rgba(245,247,250,.78)), var(--wp-image, none) center/cover fixed no-repeat, var(--bg); }

/* --- settings extras --- */
.set-col { display: flex; flex-direction: column; gap: 8px; align-items: flex-end; }
.wp-custom { display: flex; gap: 6px; }
.wp-custom input { background: var(--bg); border: 1px solid var(--border-2); color: var(--text);
  border-radius: 8px; padding: 6px 9px; font-size: 0.8rem; min-width: 180px; }
.wp-custom input:focus { outline: none; border-color: var(--accent-dim); }

/* --- widgets toggle menu (check state) --- */
.add-menu button { display: flex; align-items: center; gap: 8px; }
.add-menu button.on { color: var(--text); }
.tog-box { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px;
  border: 1px solid var(--border-2); border-radius: 4px; font-size: 0.7rem; color: var(--accent); flex: 0 0 auto; }
.add-menu button.on .tog-box { border-color: var(--accent-dim); background: rgba(52,224,200,.12); }

/* --- merged assistant tile --- */
.wc-top { display: flex; align-items: center; gap: 10px; padding-bottom: 8px; margin-bottom: 8px; border-bottom: 1px solid var(--border); }
.wc-id { display: flex; flex-direction: column; line-height: 1.15; }
.wc-id b { font-size: 0.85rem; }
.wc-id .muted { font-size: 0.68rem; }
.wc-chat { display: flex; flex-direction: column; height: 100%; }

/* --- quick launch --- */
.w-launch { display: flex; flex-direction: column; height: 100%; }

/* v1.97.0 — app launcher (own apps) */
.lapp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; overflow: auto; }
.lapp { display: flex; align-items: center; gap: 8px; text-decoration: none; color: var(--text);
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; padding: 8px 10px; font-size: 0.82rem; min-width: 0; }
.lapp:hover { border-color: var(--accent-dim); color: var(--accent); }
.lapp-ic { flex: 0 0 auto; width: 22px; height: 22px; border-radius: 6px; display: inline-flex; align-items: center; justify-content: center;
  background: var(--mc, var(--accent)); color: #fff; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.2px; overflow: hidden; }
.lapp-ic.has-img { background: transparent; }
.lapp-img { width: 22px; height: 22px; object-fit: contain; display: block; }
.lapp-nm { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lapp-foot { font-size: 0.62rem; margin-top: 6px; }
.lapp-empty { font-size: 0.74rem; padding: 6px 2px; }
/* Settings → Apps editor */
.set-apps { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.set-app-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.set-app-row input[type="text"], .set-app-row .set-app-name, .set-app-row .set-app-url, .set-app-row .set-app-icon {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 7px; color: var(--text); padding: 6px 8px; font-size: 0.78rem; }
.set-app-name { flex: 1 1 110px; min-width: 90px; }
.set-app-url { flex: 2 1 200px; min-width: 140px; }
.set-app-icon { flex: 1 1 140px; min-width: 110px; }
.set-app-tab { font-size: 0.72rem; color: var(--muted); display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.set-apps-foot { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }

/* --- market tiles: shared bits --- */
.wmic-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
.mic-symbol.is-default span { color: var(--muted); }
.mic-symbol.is-default { border-style: dashed; }

/* ============================================================================
   Avatar (v0.10.0a — free rigged SVG face). Themed via tokens; skinned via
   inline --av-* custom props set by data_avatar.js. No external deps.
   ============================================================================ */
.av-root { --av-size: 64px; --av-skin: #e8b693; --av-hair: #5a3a22;
  --av-ink: #2a1c14; --av-lip: #c2706e; --av-glow: #000;
  width: var(--av-size); height: var(--av-size); flex: 0 0 auto; line-height: 0; }
.av-svg { width: 100%; height: 100%; display: block; overflow: visible; }

.av-glow { fill: var(--av-glow); opacity: .10; filter: blur(6px);
  transition: opacity .4s ease; transform-box: view-box; transform-origin: center; }

.av-bob { animation: avBob 3.6s ease-in-out infinite; transform-box: view-box; transform-origin: 50% 60%; }
@keyframes avBob { 0%,100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-1.4px) scale(1.012); } }

.av-head { fill: var(--av-skin); stroke: rgba(0,0,0,.12); stroke-width: 1; }
.av-neck { fill: var(--av-skin); filter: brightness(.9); }
.av-shoulders { fill: var(--panel-2); }
.av-hair { fill: var(--av-hair); }
.av-svg[data-hair="none"] .av-hair { display: none; }
.av-svg[data-hair="short"] .av-hair-long { display: none; }
.av-svg[data-hair="long"]  .av-hair-long { display: block; }
.av-brow { fill: none; stroke: var(--av-ink); stroke-width: 3.2; stroke-linecap: round;
  transform-box: fill-box; transform-origin: center; transition: transform .25s ease, opacity .25s; }
.av-eye { transform-box: fill-box; transform-origin: center; transition: transform .09s ease; }
.av-eye.blink { transform: scaleY(.08); }
.av-eye-white { fill: #fff; }
.av-iris { fill: var(--av-ink); transition: transform .25s ease; transform-box: fill-box; transform-origin: center; }
.av-lash { fill: none; stroke: var(--av-ink); stroke-width: 1.8; stroke-linecap: round; }
.av-blush { fill: #e8908f; opacity: .25; transition: opacity .3s ease; }
.av-mouth { fill: var(--av-lip); stroke: none; }
.av-mouth-wrap { transform-box: fill-box; transform-origin: 50% 40%; }

/* state poses (expression via brows / eyes / mouth — no orb glow) */
.av-svg[data-state="thinking"]  .av-brow-l { transform: translateY(-1.4px) rotate(-7deg); }
.av-svg[data-state="thinking"]  .av-iris { transform: translateY(-1px); }
.av-svg[data-state="happy"]     .av-eye { transform: scaleY(.66); }
.av-svg[data-state="happy"]     .av-blush { opacity: .5; }
.av-svg[data-state="alert"]     .av-brow-l,
.av-svg[data-state="alert"]     .av-brow-r { transform: translateY(-2px); }
.av-svg[data-state="concerned"] .av-brow-l { transform: translate(2px,-1px) rotate(10deg); }
.av-svg[data-state="concerned"] .av-brow-r { transform: translate(-2px,-1px) rotate(-10deg); }

/* ============================================================================
   ORB SKIN (v0.64.0) — a minimal pulsating circle that themes itself from the
   Settings accent (--accent / --accent-dim) and reacts to avatar state. While
   speaking, JS feeds --orb-amp (0..1) so the core breathes in sync with speech;
   when not speaking, --orb-amp stays 0 and the state keyframes drive it.
   ============================================================================ */
.orb-root {
  --av-size: 64px; --orb-amp: 0;
  --orb-hi:  var(--accent);
  --orb-lo:  var(--accent-dim, var(--accent));
  width: var(--av-size); height: var(--av-size); flex: 0 0 auto; line-height: 0;
}
.orb-svg { width: 100%; height: 100%; display: block; overflow: visible; }

/* core blob: solid accent → dim gradient, with the speaking amplitude scaling it */
.orb-core-wrap { transform-box: view-box; transform-origin: 50% 50%;
  transform: scale(calc(1 + var(--orb-amp) * 0.10)); transition: transform .06s linear; }
.orb-core {
  fill: var(--orb-hi);
  filter: drop-shadow(0 0 calc(6px + var(--orb-amp) * 10px) var(--orb-lo));
  opacity: .96;
}
.orb-sheen { fill: #fff; opacity: .22; }
.orb-halo { fill: var(--orb-hi); opacity: .12; transform-box: view-box; transform-origin: 50% 50%;
  animation: orbBreathe 3.8s ease-in-out infinite; }

/* amplitude rings — hidden unless speaking, then they expand+fade outward */
.orb-ring { fill: none; stroke: var(--orb-hi); stroke-width: 1.4; opacity: 0;
  transform-box: view-box; transform-origin: 50% 50%; }
.orb-svg[data-state="speaking"] .orb-ring-1 { animation: orbRing 1.5s ease-out infinite; }
.orb-svg[data-state="speaking"] .orb-ring-2 { animation: orbRing 1.5s ease-out .75s infinite; }

/* idle: gentle breathe (default halo anim already runs) */
.orb-svg[data-state="idle"] .orb-core      { animation: orbIdle 4.2s ease-in-out infinite; }
/* listening: a calm, slightly larger steady glow */
.orb-svg[data-state="listening"] .orb-core { animation: orbIdle 2.6s ease-in-out infinite; opacity: 1; }
/* thinking: slow shimmer of the halo + a soft size wobble */
.orb-svg[data-state="thinking"] .orb-halo  { animation: orbBreathe 1.5s ease-in-out infinite; opacity: .2; }
.orb-svg[data-state="thinking"] .orb-core  { animation: orbThink 1.5s ease-in-out infinite; }
/* speaking: the core is driven by --orb-amp (JS); keep a base glow */
.orb-svg[data-state="speaking"] .orb-core  { opacity: 1; }
/* happy: brief brighten */
.orb-svg[data-state="happy"] .orb-core     { opacity: 1; filter: drop-shadow(0 0 12px var(--orb-hi)); }
/* alert: quick attention flash */
.orb-svg[data-state="alert"] .orb-core     { animation: orbAlert .5s ease-in-out 3; }
.orb-svg[data-state="alert"] .orb-halo     { opacity: .28; }
/* concerned: dim + desaturate slightly */
.orb-svg[data-state="concerned"] .orb-core { opacity: .7; filter: none; }
.orb-svg[data-state="concerned"] .orb-halo { opacity: .06; }

@keyframes orbBreathe { 0%,100% { transform: scale(1); opacity: .12; } 50% { transform: scale(1.06); opacity: .2; } }
@keyframes orbIdle    { 0%,100% { transform: scale(1); } 50% { transform: scale(1.03); } }
@keyframes orbThink   { 0%,100% { transform: scale(.98); } 50% { transform: scale(1.05); } }
@keyframes orbAlert   { 0%,100% { transform: scale(1); } 50% { transform: scale(1.10); } }
@keyframes orbRing    { 0% { transform: scale(.55); opacity: .5; } 100% { transform: scale(1.5); opacity: 0; } }

@media (prefers-reduced-motion: reduce) {
  .orb-halo, .orb-core, .orb-ring { animation: none !important; }
  .orb-core-wrap { transition: none; }
}

/* dashboard Assistant tile avatar slot */
.wc-avatar { display: flex; align-items: center; justify-content: center; flex: 0 0 auto; }

/* Avatar engine page */
.av-page-head .muted { max-width: 560px; }
.av-mount { display: flex; align-items: center; justify-content: center; }
.av-ctl-group { display: flex; flex-direction: column; gap: 8px; }
.av-emotes { display: flex; flex-wrap: wrap; gap: 6px; }
.av-swatches { display: flex; flex-wrap: wrap; gap: 8px; }
.av-sw { width: 28px; height: 28px; border-radius: 50%; cursor: pointer; background: var(--sw);
  border: 2px solid var(--border-2); padding: 0; transition: transform .12s, border-color .12s; }
.av-sw:hover { transform: scale(1.12); }
.av-sw.on { border-color: var(--text); transform: scale(1.12); box-shadow: 0 0 0 2px var(--bg); }
.av-hairstyles { display: flex; flex-wrap: wrap; gap: 6px; }
.btn.ghost.sm.on { color: var(--accent); border-color: var(--accent-dim); background: var(--panel-2); }
.av-say { display: flex; gap: 8px; }
.av-say input { flex: 1 1 auto; }
.av-voice { display: flex; align-items: center; gap: 8px; font-size: .84rem; color: var(--muted); cursor: pointer; }
.av-voice.off { opacity: .55; cursor: default; }
.av-note { font-size: .78rem; margin: 2px 0 8px; }
.av-advanced { border: 1px solid var(--border); border-radius: 12px; padding: 10px 14px; }
.av-advanced > summary { cursor: pointer; font-size: .85rem; color: var(--muted); }
.av-advanced[open] > summary { margin-bottom: 8px; color: var(--text); }

/* ============================================================================
   Compact market tickers + Trading Tools (v0.11.0)
   ============================================================================ */
/* ticker tile */
.tk { display: flex; flex-direction: column; gap: 6px; height: 100%; }
.tk-top { display: flex; justify-content: space-between; align-items: center; }
.tk-top-btns { display: flex; gap: 4px; }
.ic-btn { background: none; border: 1px solid var(--border); color: var(--muted); border-radius: 7px;
  width: 24px; height: 22px; cursor: pointer; font-size: .8rem; line-height: 1; }
.ic-btn:hover { color: var(--text); border-color: var(--accent-dim); }
.tk-rows { display: flex; flex-direction: column; gap: 1px; overflow: auto; min-height: 0; flex: 1 1 auto; }
.tk-asof { font-size: 0.62rem; opacity: 0.6; margin-left: 6px; white-space: nowrap; }
.tk-row { display: grid; grid-template-columns: 44px 1fr 54px 30px 50px 15px 14px; align-items: center; gap: 5px;
  padding: 3px 2px; border-bottom: 1px solid var(--border); font-family: var(--mono); font-size: .76rem; cursor: pointer; }
.tk-row:hover { background: var(--panel-2); }
.tk-row:last-child { border-bottom: none; }
.tk-sym { font-weight: 600; color: var(--text); }
.tk-px { text-align: right; color: var(--text); }
.tk-spk { display: inline-flex; align-items: center; justify-content: center; min-width: 0; }
.tk-chg { text-align: right; font-size: .72rem; }
.tk-chg.pos, .tl-out b.pos { color: var(--ok); }
.tk-chg.neg, .tl-out b.neg { color: var(--danger); }
/* real day-range: dot marks where price sits in the day's low→high */
.tk-range { position: relative; height: 4px; border-radius: 3px; background: var(--border-2);
  align-self: center; overflow: visible; }
.tk-range-fill { position: absolute; top: 50%; width: 5px; height: 5px; border-radius: 50%;
  background: var(--accent); transform: translate(-50%, -50%); }
.tk-exp { background: none; border: none; color: var(--muted); cursor: pointer; opacity: 0;
  font-size: .72rem; padding: 0; line-height: 1; }
.tk-row:hover .tk-exp { opacity: 1; }
.tk-exp:hover { color: var(--accent); }
.tk-spark { width: 54px; height: 18px; }
.tk-spark polyline { fill: none; stroke-width: 1.5; vector-effect: non-scaling-stroke; }
.tk-spark.up polyline { stroke: var(--ok); }
.tk-spark.dn polyline { stroke: var(--danger); }
.tk-spark-empty { display: inline-block; width: 54px; height: 18px; }
.tk-rm { background: none; border: none; color: var(--muted); cursor: pointer; opacity: 0; font-size: .7rem; }
.tk-row:hover .tk-rm, .tk-chip:hover .tk-rm { opacity: 1; }
.tk-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; margin: 2px;
  background: var(--panel); border: 1px solid var(--border); border-radius: 14px; font-family: var(--mono); font-size: .74rem; }
.tk-gated { font-size: .68rem; line-height: 1.3; padding: 2px 0; }
.tk-edit { display: flex; gap: 6px; }
.tk-edit input { flex: 1; min-width: 0; padding: 6px 8px; border-radius: 7px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-size: .8rem; }
.tk-alerts:not(:empty) { margin-top: 4px; display: flex; flex-direction: column; gap: 4px; }

/* tools — full engine page */
.tl-page { display: flex; flex-direction: column; gap: 18px; max-width: 920px; }
.tl-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.tl-head .muted { max-width: 620px; }
.tl-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }
.tl-card { background: var(--panel); border: 1px solid var(--border); border-radius: 14px; padding: 16px; }
.tl-card h3 { font-size: .95rem; margin: 0; }
.tl-sub { font-size: .76rem; margin: 4px 0 12px; }
.tl-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.tl-field { display: flex; flex-direction: column; gap: 3px; font-size: .72rem; color: var(--muted); min-width: 0; }
.tl-field input { width: 100%; min-width: 0; padding: 7px 9px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--mono); font-size: .85rem; }
.tl-field input:focus { outline: none; border-color: var(--accent-dim); }
.tl-seg { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; font-size: .72rem; color: var(--muted); }
.tl-seg-btns { display: inline-flex; border: 1px solid var(--border-2); border-radius: 8px; overflow: hidden; }
.tl-seg-btns button { background: var(--bg); border: none; color: var(--muted); padding: 5px 12px; cursor: pointer; font-size: .78rem; }
.tl-seg-btns button.on { background: var(--accent-dim); color: #fff; }
.tl-outs { display: flex; flex-direction: column; gap: 4px; margin-top: 12px; border-top: 1px solid var(--border); padding-top: 10px; }
.tl-out { display: flex; justify-content: space-between; align-items: baseline; font-size: .78rem; }
.tl-out span { color: var(--muted); }
.tl-out b { font-family: var(--mono); color: var(--text); }
.tl-out.big b { font-size: 1.15rem; color: var(--accent); }

/* tools — compact dashboard tile */
.tkit { display: flex; flex-direction: column; gap: 6px; }
.tkit-cap { display: flex; justify-content: space-between; align-items: center; }
.tkit-row { display: flex; gap: 6px; }
.tkit-row input { flex: 1; min-width: 0; width: 100%; padding: 6px 8px; border-radius: 7px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--mono); font-size: .8rem; }
.tkit-row input:focus { outline: none; border-color: var(--accent-dim); }
.tkit-outs { display: flex; gap: 12px; justify-content: space-between; border-top: 1px solid var(--border); padding-top: 6px; }

/* 3D avatar stage (v0.12.0a) */
.av-stage-3d .av-mount { width: 100%; height: 360px; max-width: 420px; margin: 0 auto; position: relative; }
.av3d-canvas { width: 100% !important; height: 100% !important; display: block; }
.av-stage-3d .av-root { margin: 28px auto; }   /* 2D fallback sits centered */

/* v0.12.1 — content-height tiles: auto-grow + reflow (no inner scrolling) */
.dtile { height: auto; min-height: 72px; }
.dtile-body { overflow: visible; }

/* v0.12.2 — compact tickers + move-only tiles (width via header +/–) */
/* resize handle retired */
.dtile-wbtn { background: none; border: none; color: var(--muted); cursor: pointer;
  font-size: 0.95rem; line-height: 1; padding: 0 4px; opacity: 0; transition: opacity .12s; }
.dtile:hover .dtile-wbtn { opacity: .8; }
.dtile-wbtn:hover { color: var(--text); }
/* denser ticker rows so they stop eating space */
.tk { gap: 4px; }
.tk-row { grid-template-columns: 40px 1fr 46px 26px 44px 13px 12px; gap: 4px; padding: 1.5px 2px; font-size: 0.7rem; }
.tk-chg { font-size: 0.66rem; }
.tk-spark { width: 46px; height: 15px; }
.tk-spark-empty { width: 52px; height: 16px; }
.tk-chip { padding: 2px 7px; font-size: 0.7rem; }
.tk-gated { font-size: 0.64rem; padding: 1px 0; }
.tk-top .fin-tag { font-size: 0.58rem; }
.dtile-body { padding: 9px; }

/* v0.13.0 — Ready Player Me creator modal */
.av-modal-bar .muted { font-size: .78rem; flex: 1; }

/* v0.15.1 — MIC impact legend */
.mic-legend { font-size: .76rem; line-height: 1.5; margin: 2px 0 12px; padding: 8px 11px;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; }
.mic-legend b { color: var(--text); }

/* v0.16.0 — merged Assistant (avatar IS the AI; one tab) */
.asst { display: flex; flex-direction: column; gap: 16px; min-height: 0; }
.asst-main { display: flex; gap: 20px; align-items: stretch; min-height: 460px; }
.asst-stage { flex: 0 0 auto; width: 300px; display: flex; flex-direction: column; align-items: center; gap: 12px;
  background: radial-gradient(circle at 50% 34%, var(--panel-2), var(--panel));
  border: 1px solid var(--border); border-radius: 18px; padding: 24px; }
.asst-stage .av-mount { width: 248px; height: 248px; display: flex; align-items: center; justify-content: center; }
.asst-id { display: flex; flex-direction: column; align-items: center; line-height: 1.25; }
.asst-id b { font-size: 1.02rem; }
.asst-id .muted { font-family: var(--mono); font-size: .72rem; }
.asst-chat { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
.asst-chat .ai-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 14px; margin-bottom: 10px; }
.asst-chat .ai-log { flex: 1 1 auto; min-height: 0; overflow-y: auto; margin: 0 0 12px; display: flex; flex-direction: column; gap: 10px; padding-right: 6px; }
.asst-chat .ai-bar { display: flex; gap: 8px; }
.asst-chat .ai-bar textarea { flex: 1; resize: none; font-family: var(--ui); font-size: .92rem; line-height: 1.4; padding: 10px 12px; border-radius: 10px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); max-height: 160px; }
.asst-cust > summary { cursor: pointer; color: var(--muted); font-size: .9rem; padding: 8px 0; border-top: 1px solid var(--border); }
.asst-cust[open] > summary { color: var(--text); }
.asst-cust-body { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 20px; padding-top: 12px; }
@media (max-width: 820px) { .asst-main { flex-direction: column; min-height: 0; } .asst-stage { width: auto; } .asst-chat .ai-log { max-height: 46vh; } }

/* v0.17.0 — Trend & signals card */
.tl-trend { grid-column: 1 / -1; }
.tl-trend-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.tl-trend-bar select { background: var(--bg); border: 1px solid var(--border-2); color: var(--text);
  border-radius: 8px; padding: 7px 10px; font-family: var(--ui); font-size: .85rem; }
.tl-paste { margin: 4px 0 10px; }
.tl-paste > summary { cursor: pointer; color: var(--muted); font-size: .78rem; padding: 4px 0; }
.tl-paste textarea { width: 100%; min-width: 0; box-sizing: border-box; margin: 6px 0; resize: vertical;
  background: var(--bg); border: 1px solid var(--border-2); color: var(--text); border-radius: 8px;
  padding: 8px 10px; font-family: var(--mono); font-size: .8rem; }
.tl-trend-out { border-top: 1px solid var(--border); padding-top: 10px; }
.tl-trend-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 6px 18px; }
.tl-swing { margin-top: 12px; padding: 10px 12px; background: var(--panel-2); border: 1px solid var(--border);
  border-radius: 9px; font-size: .82rem; line-height: 1.55; }
.tl-swing .pos { color: var(--ok); font-weight: 600; }
.tl-swing .neg { color: var(--danger); font-weight: 600; }

/* v0.18.0 — MIC v2 judgment (direction / corroboration / levels) */
.mic-dir { font-size: .85rem; margin-right: 4px; }
.mic-dir.up { color: var(--ok); }
.mic-dir.down { color: var(--danger); }
.mic-dir.flat { color: var(--muted); }
.pill.corr { background: var(--panel-2); color: var(--muted); }
.mic-levels { font-size: .76rem; color: var(--muted); margin-top: 6px; padding: 6px 9px;
  background: var(--bg); border: 1px dashed var(--border-2); border-radius: 7px; line-height: 1.45; }
.mic-levels b { color: var(--text); }
.mic-disclaimer { font-size: .72rem; margin-top: 12px; font-style: italic; }

/* v0.77.0 — "steady compounders" watch dimension panel (MIC tab) */
.ai-msg.warn { border: 1px solid var(--warn); color: #ffe6b3; background: rgba(245,184,77,.08); }
.cmp-panel { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 10px; }
.cmp-intro { font-size: .82rem; line-height: 1.5; }
.cmp-intro b { color: var(--text); }
.cmp-sec-h { font-family: var(--mono); font-size: .8rem; font-weight: 600; color: var(--text); margin-top: 6px; text-transform: uppercase; letter-spacing: .04em; }
.cmp-sec-h .muted { font-weight: 400; text-transform: none; letter-spacing: 0; }
.cmp-baskets { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; }
.cmp-basket { padding: 10px 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 11px; }
.cmp-basket-h { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cmp-basket-h b { font-size: .86rem; }
.cmp-basket-note { font-size: .76rem; line-height: 1.4; margin: 5px 0 7px; }
.cmp-basket-syms { display: flex; flex-wrap: wrap; gap: 5px; }
.cmp-sym, .cmp-srow-sym { font-family: var(--mono); font-size: .78rem; padding: 2px 7px; background: var(--bg); border: 1px solid var(--border-2); border-radius: 6px; }
.cmp-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.cmp-hint { font-size: .78rem; cursor: help; text-decoration: underline dotted; }
.cmp-select, .cmp-region { padding: 7px 10px; border-radius: 8px; background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-family: var(--ui); font-size: .82rem; }
.cmp-region { flex: 1; min-width: 140px; }
.cmp-out { display: flex; flex-direction: column; gap: 6px; }
.cmp-score-head, .cmp-score-err, .cmp-screen-head { font-size: .78rem; }
.cmp-score-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 6px 10px; background: var(--panel); border: 1px solid var(--border); border-radius: 9px; }
.cmp-srow-score { font-family: var(--mono); font-weight: 700; font-size: 1rem; color: var(--accent); min-width: 34px; text-align: right; cursor: help; }
.cmp-srow-detail { font-size: .76rem; font-family: var(--mono); flex: 1; min-width: 0; }
.cmp-badge { font-family: var(--mono); font-size: .68rem; text-transform: uppercase; letter-spacing: .04em; padding: 2px 7px; border-radius: 20px; border: 1px solid var(--border-2); }
.cmp-badge.ok { color: var(--ok); border-color: var(--ok); }
.cmp-badge.warn { color: var(--warn); border-color: var(--warn); }
.cmp-badge.danger { color: var(--danger); border-color: var(--danger); }
.cmp-badge.na { color: var(--muted); }
.cmp-screen-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cmp-cand { padding: 8px 11px; background: var(--panel); border: 1px solid var(--border); border-radius: 10px; min-width: 0; }
.cmp-cand-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cmp-cand-h strong { font-family: var(--mono); }
.cmp-cand-name { color: var(--muted); font-size: .82rem; flex: 1; min-width: 0; }
.cmp-cap { font-family: var(--mono); font-size: .68rem; padding: 1px 6px; border: 1px solid var(--border-2); border-radius: 6px; color: var(--muted); }
.cmp-fit { font-family: var(--mono); font-size: .72rem; color: var(--accent); cursor: help; }
.cmp-cand-why { font-size: .8rem; line-height: 1.45; margin-top: 4px; }
.cmp-cand-src { font-size: .74rem; }
.cmp-watch { font-size: .82rem; padding: 6px 10px; background: var(--bg); border: 1px dashed var(--border-2); border-radius: 8px; }
.cmp-foot { font-size: .72rem; font-style: italic; line-height: 1.45; }
.cmp-foot b, .cmp-watch b { color: var(--text); }

/* v0.18.2 — browser pane "site blocks embedding" notice — REMOVED in v0.91.0 with the Browser tab */

/* v0.19.0 — market-data key field in Settings */
.set-key { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.set-key input { min-width: 0; width: 220px; max-width: 100%; }
.set-key-status { font-size: .76rem; }
/* v1.79.0 — IBKR data bridge round-trip (Generate request → / paste back) */
.ibkr-pane { border: 1px solid var(--border, #2a2f3a); border-radius: 8px; padding: 9px 10px; display: flex; flex-direction: column; gap: 7px; }
.ibkr-pane-h { font-size: .8rem; font-weight: 600; }

/* v0.19.1 — MIC alert real-data snapshot */
.mic-snap-btn { background: none; border: 0; cursor: pointer; font-size: .82rem; padding: 0 2px; opacity: .7; }
.mic-snap-btn:hover { opacity: 1; }
.mic-snap-btn:disabled { opacity: .4; cursor: default; }
.mic-snap-btn.gated { opacity: .45; }
.mic-snap-btn.gated:hover { opacity: .8; }
.mic-snap { margin-top: 5px; font-size: .74rem; color: var(--text); }
.mic-snap-tag { font-size: .6rem; font-weight: 700; letter-spacing: .04em; padding: 1px 5px; border-radius: 4px; background: var(--accent, #4ea1ff); color: #001; margin-right: 6px; }

/* v0.20.0 — MIC data-check badge + Trade-plan card */
.mic-dc { font-size: .6rem; font-weight: 700; letter-spacing: .03em; padding: 1px 6px; border-radius: 4px; margin-right: 6px; }
.mic-dc.agree { background: #11633f; color: #d7ffe9; }
.mic-dc.conflict { background: #6b1f24; color: #ffd9dc; }
.mic-dc.mixed { background: #5a4a17; color: #ffeec2; }
.mic-dc.na { background: #333a44; color: #b9c2cf; }
.tl-plan-sym { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.tl-plan-sym input { min-width: 0; flex: 1; }
.tl-plan-foot { display: flex; gap: 10px; align-items: center; margin-top: 10px; }

/* v0.20.0 — trade-plan base-rate row */
.tl-plan-br { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.tl-plan-br-out { font-size: .76rem; flex: 1; min-width: 160px; }

/* ============================================================================
   v0.21.0 — Report tab + Highlights/Watches digest + term/safety badges
   ============================================================================ */

/* shared badges (used in the Report cards and the dashboard digest) */
.term-badge, .safety-badge {
  display: inline-block; font-size: 11px; line-height: 1; padding: 3px 7px;
  border-radius: 999px; border: 1px solid var(--border); white-space: nowrap;
}
.term-badge { color: var(--muted); }
.term-badge.t-short  { color: var(--accent); border-color: var(--accent-dim, var(--border)); }
.term-badge.t-medium { color: var(--text); }
.term-badge.t-long   { color: var(--muted); }
.safety-badge { font-weight: 600; }
.safety-badge.s-high   { color: var(--ok);     border-color: color-mix(in srgb, var(--ok) 45%, transparent); }
.safety-badge.s-medium { color: var(--warn);   border-color: color-mix(in srgb, var(--warn) 45%, transparent); }
.safety-badge.s-low    { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }

/* Report engine page */
.rep-wrap { padding: 4px 2px 24px; }
.rep-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 14px; }
.rep-head h2 { margin: 0 0 4px; }
.rep-actions { display: flex; align-items: center; gap: 12px; }
.rep-ago { font-size: 12px; }
.rep-err { margin-bottom: 12px; }
.rep-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 360px)); justify-content: start; gap: 12px; }
.rcard {
  background: var(--panel-2, var(--panel)); border: 1px solid var(--border);
  border-left: 3px solid var(--border); border-radius: var(--radius); padding: 12px 14px;
}
.rcard.imp-high   { border-left-color: var(--danger); }
.rcard.imp-medium { border-left-color: var(--warn); }
.rcard.imp-low    { border-left-color: var(--border-2, var(--border)); }
.rc-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.rc-sym { font-size: 15px; letter-spacing: .02em; }
.rc-dir { color: var(--muted); font-size: 13px; }
.rc-dir strong { color: var(--text); }
.rc-badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; align-items: center; }
.rc-corr { font-size: 11px; color: var(--muted); }
.rc-headline { font-weight: 600; margin-bottom: 4px; }
.rc-summary { color: var(--muted); font-size: 13px; line-height: 1.45; }
.rc-line { font-size: 12.5px; margin-top: 6px; }
.rc-k { display: inline-block; min-width: 78px; color: var(--muted); text-transform: uppercase; font-size: 10.5px; letter-spacing: .06em; }
.rc-data { margin-top: 8px; font-size: 12px; color: var(--muted); }
.rc-foot { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.rc-snap { font-size: 12px; color: var(--muted); }
.rc-snap-gated { opacity: .82; }
.rc-snap-need { color: var(--muted); font-size: .85em; font-weight: 400; }

/* Dashboard Highlights & Watches digest box */
.dg-mt { margin-top: 4px; }
.dg-list { display: flex; flex-direction: column; gap: 5px; }
.dg-row {
  display: flex; align-items: center; gap: 7px; width: 100%; text-align: left;
  background: transparent; border: 1px solid var(--border); border-radius: 8px;
  padding: 6px 8px; color: var(--text); cursor: pointer; font: inherit;
}
.dg-row:hover { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 8%, transparent); }
.dg-row strong { font-size: 12.5px; }
.dg-head { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }

/* ============================================================================
   v0.22.0 — supply-chain signal alerts + Sources panel
   ============================================================================ */
.kind-badge { display: inline-block; font-size: 11px; line-height: 1; padding: 3px 7px; border-radius: 999px; border: 1px solid var(--border); }
.kind-badge.k-sc { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 45%, transparent); }
.rc-impl { color: var(--text); }
.rc-impl .rc-k { color: var(--accent); }
.dg-sc { font-size: 12px; color: var(--accent); }

.rep-sources { margin-top: 22px; border-top: 1px solid var(--border); padding-top: 12px; }
.rep-sources > summary { cursor: pointer; font-weight: 600; color: var(--text); }
.rep-sources > summary:hover { color: var(--accent); }
.src-intro { font-size: 12.5px; margin: 8px 0 12px; }
.src-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }
.src-cat h4 { margin: 0 0 6px; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); }
.src-cat ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.src-cat li { font-size: 12.5px; line-height: 1.35; }
.src-cat li a { color: var(--text); text-decoration: none; }
.src-cat li a:hover { color: var(--accent); text-decoration: underline; }
.src-access { display: inline-block; margin-left: 6px; font-size: 10px; padding: 1px 6px; border-radius: 999px; border: 1px solid var(--border); color: var(--muted); white-space: nowrap; }
.src-access.a-public     { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 40%, transparent); }
.src-access.a-free-api   { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 40%, transparent); }
.src-access.a-freemium   { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 40%, transparent); }
.src-access.a-enterprise { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, transparent); }
.src-note { display: block; color: var(--muted); font-size: 11.5px; margin-top: 1px; }

/* ============================================================================
   v0.23.0 — bias chip + "levels to watch" plan block
   ============================================================================ */
.bias-chip { display: inline-block; font-size: 11px; font-weight: 700; letter-spacing: .04em; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--border); }
.bias-chip.b-up      { color: var(--ok);     border-color: color-mix(in srgb, var(--ok) 55%, transparent);     background: color-mix(in srgb, var(--ok) 10%, transparent); }
.bias-chip.b-down    { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 55%, transparent); background: color-mix(in srgb, var(--danger) 10%, transparent); }
.bias-chip.b-neutral { color: var(--muted); }
.rc-plan { margin-top: 10px; border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; background: color-mix(in srgb, var(--accent) 5%, transparent); }
.rc-plan-h { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--text); margin-bottom: 4px; }
.rc-plan-h .muted { text-transform: none; letter-spacing: 0; font-size: 11px; }
.rc-plan .rc-line { margin-top: 3px; }

/* ============================================================================
   v0.25.0 — Briefing + Decision Center tile
   ============================================================================ */
.bias-chip.b-watch { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 45%, transparent); }
.briefing { display: flex; flex-direction: column; gap: 12px; }
.bf-greet { font-size: 16px; font-weight: 700; display: flex; flex-direction: column; gap: 2px; }
.bf-state { font-size: 12px; font-weight: 400; color: var(--muted); }
.bf-sec { display: flex; flex-direction: column; gap: 5px; }
.bf-h { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); }
.bf-h .muted { text-transform: none; letter-spacing: 0; }
.bf-item { display: flex; align-items: center; gap: 7px; width: 100%; text-align: left; background: transparent; border: 1px solid var(--border); border-radius: 8px; padding: 6px 8px; color: var(--text); cursor: pointer; font: inherit; }
.bf-item:hover { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 8%, transparent); }
.bf-item strong { font-size: 12.5px; }
.bf-head { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }
.bf-focus { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 3px; }
.bf-focus li { font-size: 12.5px; color: var(--text); }
.bf-decisions { display: flex; flex-wrap: wrap; gap: 6px; }
.bf-dec { display: inline-flex; align-items: center; gap: 6px; background: transparent; border: 1px solid var(--border); border-radius: 999px; padding: 3px 6px 3px 9px; cursor: pointer; font: inherit; }
.bf-dec:hover { border-color: var(--accent); }
.bf-sym { font-size: 12px; font-weight: 600; color: var(--text); }
.bf-actions { display: flex; gap: 6px; margin-top: 2px; }

/* v1.76.0 Tier-2 collapse — the Today card stacks three folded sub-sections
   (briefing · Highlights & Watches · posture-by-class) in ONE tile. .tm-div is the
   thin rule between them; every sub-section reuses the existing .bf- / .dg- / .snap- /
   .wmic- classes, so no per-section restyle was needed. */
.today-merged { gap: 10px; }
.tm-div { height: 0; border-top: 1px solid var(--border); margin: 3px 0; }

/* ============================================================================
   v0.26.0 — world clock zones + Market Snapshot
   ============================================================================ */
.w-zones { display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px 14px; margin-top: 10px; }
.wz { display: flex; align-items: baseline; gap: 6px; font-size: 12.5px; }
.wz-city { color: var(--muted); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wz-time { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--text); }
.wz-day { color: var(--muted); font-size: 10.5px; }

.snapshot { display: flex; flex-direction: column; gap: 8px; }
.snap-table { display: flex; flex-direction: column; }
.snap-row { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px solid var(--border); }
.snap-row:last-child { border-bottom: none; }
.snap-asset { flex: 1; font-size: 13px; }
.snap-n { color: var(--muted); font-size: 11px; min-width: 64px; text-align: right; }
.snap-trend { font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border); }
.snap-trend.st-up    { color: var(--ok);     border-color: color-mix(in srgb, var(--ok) 45%, transparent); }
.snap-trend.st-dn    { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.snap-trend.st-mixed { color: var(--warn);   border-color: color-mix(in srgb, var(--warn) 45%, transparent); }
.snap-trend.st-na    { color: var(--muted); font-weight: 400; }
.snap-note { font-size: 11.5px; }

/* ============================================================================
   v0.27.0 — settings checkboxes + merged Time & Weather tile
   ============================================================================ */
.set-check { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text); cursor: pointer; }
.set-check input { width: 15px; height: 15px; accent-color: var(--accent); }
.tw { display: flex; flex-direction: column; gap: 12px; }
.tw-clock { display: flex; flex-direction: column; }
.tw-wx { margin-top: 2px; }

/* ============================================================================
   v0.28.0 — Financial Intelligence Lab how-to, Help & Learn, weather type-ahead
   ============================================================================ */

/* --- Lab how-to + section heading --- */
.tl-howto { margin: -4px 0 14px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel-2); }
.tl-howto > summary { cursor: pointer; padding: 9px 12px; font-weight: 600; font-size: .82rem; color: var(--text); list-style: none; }
.tl-howto > summary::-webkit-details-marker { display: none; }
.tl-howto > summary::before { content: '▸'; color: var(--accent); margin-right: 8px; }
.tl-howto[open] > summary::before { content: '▾'; }
.tl-howto-list { margin: 0; padding: 2px 16px 12px 28px; color: var(--muted); font-size: .8rem; line-height: 1.5; }
.tl-howto-list li { margin: 4px 0; }
.tl-howto-list b { color: var(--text); }
.tl-section-title { margin: 18px 0 8px; font-size: .95rem; color: var(--text); border-bottom: 1px solid var(--border); padding-bottom: 6px; }
.tl-dd-note { font-size: .72rem; margin-top: 6px; }
.tl-card[data-calc="dd"] textarea { width: 100%; resize: vertical; background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 8px; padding: 6px 8px; font-family: var(--mono); font-size: .76rem; margin-bottom: 6px; }

/* --- Help & Learn --- */
.hlp-page { max-width: 920px; }
.hlp-head h2 { margin: 0 0 4px; }
.hlp-card { border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); padding: 14px 16px; margin: 14px 0; }
.hlp-sec-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; }
.hlp-sec-head h3 { margin: 0; }
#hlp-search { flex: 0 0 240px; max-width: 50%; background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 8px; padding: 7px 10px; font-size: .82rem; }
.hlp-terms { display: grid; gap: 8px; }
.hlp-term { border: 1px solid var(--border); border-radius: 10px; padding: 9px 11px; background: var(--panel-2); }
.hlp-term-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.hlp-term-head b { color: var(--accent); font-size: .86rem; }
.hlp-def { color: var(--muted); font-size: .8rem; line-height: 1.5; margin-top: 4px; }
.hlp-sub { margin-top: -2px; }
.hlp-lessons { display: grid; gap: 8px; }
.hlp-lesson { border: 1px solid var(--border); border-radius: 10px; background: var(--panel-2); }
.hlp-lesson > summary { cursor: pointer; padding: 10px 12px; font-weight: 600; font-size: .86rem; list-style: none; }
.hlp-lesson > summary::-webkit-details-marker { display: none; }
.hlp-lesson > summary::before { content: '▸'; color: var(--accent); margin-right: 8px; }
.hlp-lesson[open] > summary::before { content: '▾'; }
.hlp-lesson p { margin: 0 12px 10px; color: var(--muted); font-size: .82rem; line-height: 1.55; }
.hlp-lesson .hlp-ask { margin: 0 12px 12px; }

/* --- Weather: type-ahead suggestions + unit toggle --- */
.wx-citywrap { position: relative; flex: 1 1 auto; }
.wx-citywrap input { width: 100%; }
.wx-sug { position: absolute; top: 100%; left: 0; right: 0; z-index: 30; margin-top: 2px; background: var(--panel); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; box-shadow: 0 8px 24px rgba(0,0,0,.28); }
.wx-sug-item { display: block; width: 100%; text-align: left; background: none; border: 0; color: var(--text); padding: 7px 10px; font-size: .8rem; cursor: pointer; }
.wx-sug-item:hover { background: var(--panel-2); color: var(--accent); }
.wx-sug-none { padding: 7px 10px; font-size: .78rem; }
.wx-units { display: inline-flex; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; flex: 0 0 auto; }
.wx-units button { background: var(--panel-2); border: 0; color: var(--muted); padding: 6px 9px; font-size: .76rem; cursor: pointer; }
.wx-units button.on { background: var(--accent); color: #fff; }
.set-wx-loc { margin-top: 10px; }
.set-wx-loc .kv { margin-bottom: 6px; }
.set-wx-row { display: flex; gap: 6px; align-items: flex-start; }
.set-wx-row .wx-citywrap { flex: 1 1 auto; min-width: 0; }
.set-wx-row .wx-citywrap input { width: 100%; }

/* --- ticker reset button sits with the edit row (reuses .btn.ghost.sm) --- */
.tk-edit { flex-wrap: wrap; }

/* ============================================================================
   v0.29.0 — pin → Lab cases · tabbed workspace pane · proactive brief
   (uses existing theme tokens only)
   ============================================================================ */

/* 📌 pin button on alerts (sits beside the 📊 snap button) */
.mic-pin-btn {
  background: none; border: 1px solid var(--border-2); border-radius: 6px;
  cursor: pointer; font-size: 0.78rem; line-height: 1; padding: 3px 6px;
  color: var(--muted); opacity: .65; transition: opacity .12s, border-color .12s, background .12s;
}
.mic-pin-btn:hover { opacity: 1; border-color: var(--accent-dim); }
.mic-pin-btn.on { opacity: 1; border-color: var(--accent); background: var(--accent-dim); color: var(--text); }

/* tabbed workspace pane (replaces the old browser-only pane) */
.workspace-pane {
  flex: 0 0 42%; min-width: 0; display: flex; flex-direction: column;
  border-left: 1px solid var(--border); background: var(--panel); overflow: hidden;
  /* v0.94.0 — the workspace (right) pane was added after the v0.42.0 centering
     pass and never inherited it, so its engine content sat FLUSH-LEFT while the
     dashboard (left) pane was centered. Give it the same centered, responsive
     treatment. --pane-w scales with the screen but stays narrower than the full
     .panel --page-w because the pane is only a FRACTION of the viewport width:
     content fills a normal-width pane and CENTERS when the pane is dragged wide
     or on an ultrawide monitor — matching the dashboard pane. */
  --pane-w: 760px;
}
@media (min-width: 1500px) { .workspace-pane { --pane-w: 880px; } }
@media (min-width: 1920px) { .workspace-pane { --pane-w: 1040px; } }
@media (min-width: 2400px) { .workspace-pane { --pane-w: 1200px; } }
/* wrap so the expanded tab set (Lab / Market Intel / Report / Events /
   Connections / Macro / Map) stays reachable in a narrow pane */
.wp-tabs { display: flex; flex-wrap: wrap; gap: 4px; padding: 6px 8px; border-bottom: 1px solid var(--border); flex: 0 0 auto; }
.wp-tab {
  background: none; border: 1px solid transparent; border-radius: 8px; cursor: pointer;
  color: var(--muted); font: inherit; font-size: 0.74rem; padding: 5px 11px; white-space: nowrap;
}
.wp-tab:hover { color: var(--text); border-color: var(--border-2); }
.wp-tab.on { color: var(--text); background: var(--panel-2); border-color: var(--accent-dim); }
.wp-content { flex: 1; min-height: 0; overflow: auto; display: flex; flex-direction: column; }
.wp-engine { flex: 1; min-height: 0; padding: 14px; overflow: auto; }
/* v1.06.0 — pane 1 may host the DASHBOARD (its default). The dashboard renders
   its own .dash2 grid, so its host is NOT capped by the --pane-w centering rule
   (mirrors how the main .panel exempts .dash2). */
.wp-dash { flex: 1; min-height: 0; padding: 14px; overflow: auto; }
/* v1.06.0 — leftmost pane is flush to the rail (no divider border); JS sets it
   flexible (flex:1) while panes 2/3 carry a basis. */
.workspace-pane:first-of-type { border-left: none; }
/* v1.06.0 — per-pane add/remove control (the 3rd ultrawide pane is opt-in). */
.wp-tabs-ctl { margin-left: auto; display: inline-flex; gap: 4px; align-items: center; }
.wp-panectl {
  background: none; border: 1px solid var(--border-2); border-radius: 8px; cursor: pointer;
  color: var(--muted); font: inherit; font-size: 0.72rem; padding: 4px 9px; white-space: nowrap;
}
.wp-panectl:hover { color: var(--text); border-color: var(--accent-dim); }
/* center each engine's top-level blocks in the pane, mirroring the main panel's
   .panel:not(:has(.dash2)) > * rule — this is the actual "second pane is
   left-aligned" fix. */
.wp-engine > * { max-width: var(--pane-w); margin-inline: auto; width: 100%; }
/* v0.95.0 (Chin: "the map on the second pane looks smaller than the first pane,
   make it larger"): the World Map is a full-bleed VISUAL surface, not a text
   column — exempt it from the centered --pane-w cap so it fills the whole
   workspace pane (the .wmap-stage flex grows → a bigger 2:1 map), and keeps
   growing on an ultrawide pane. Text engines (Lab/Report/Market Intel) stay
   centered. The dashboard pane already fills full width (.dash2 is excluded
   from centering), so this makes the map match it. */
.wp-engine > .wmap { max-width: none; }

/* Lab — interior section sub-tabs (v1.00.0: Deep Dive · Top 5s · Calculators
   in one unified workbench). Mirrors the .wp-tab pane-tab language, sized up a
   touch as a primary section nav. */
.lab-subtabs {
  display: flex; flex-wrap: wrap; gap: 6px;
  margin: 4px 0 14px; padding-bottom: 10px;
  border-bottom: 1px solid var(--border);
}
.lab-subtab {
  background: none; border: 1px solid var(--border-2); border-radius: 999px; cursor: pointer;
  color: var(--muted); font: inherit; font-size: 0.8rem; font-weight: 600;
  padding: 6px 16px; white-space: nowrap; transition: color .12s, border-color .12s, background .12s;
}
.lab-subtab:hover { color: var(--text); border-color: var(--accent-dim); }
.lab-subtab.on { color: var(--bg); background: var(--accent); border-color: var(--accent); }
.lab-sec[hidden] { display: none; }
.tf-host { display: block; }

/* Lab — investigation cases strip */
.lab-cases { margin: 4px 0 10px; }
.lab-cases-empty { font-size: 0.8rem; line-height: 1.5; padding: 8px 0; }
.lab-cases-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lab-chips { display: flex; gap: 6px; flex-wrap: wrap; flex: 1; }
.lab-chip {
  display: inline-flex; align-items: center; gap: 5px; cursor: pointer;
  background: var(--panel-2); border: 1px solid var(--border-2); border-radius: 999px;
  color: var(--text); font: inherit; font-size: 0.76rem; padding: 4px 8px 4px 10px;
}
.lab-chip:hover { border-color: var(--accent-dim); }
.lab-chip.on { border-color: var(--accent); background: var(--accent-dim); }
.lab-chip b { font-family: var(--mono); }
.lab-chip-dir.up { color: var(--ok); }
.lab-chip-dir.down { color: var(--danger); }
.lab-chip-x { color: var(--muted); border-radius: 50%; padding: 0 4px; }
.lab-chip-x:hover { color: var(--danger); background: var(--bg); }

/* Lab — case dossier */
.lab-detail {
  border: 1px solid var(--border-2); border-radius: var(--radius);
  background: var(--panel-2); padding: 14px; margin-bottom: 16px;
}
.lab-detail-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; }
.lab-detail-head h3 { margin: 0; font-size: 1.02rem; }
.lab-detail-head h3 .kind-badge { font-size: 0.66rem; color: var(--warn); }
.lab-detail-headline { color: var(--muted); font-size: 0.82rem; margin-top: 2px; }
.lab-detail-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.lab-detail-summary { font-size: 0.86rem; line-height: 1.5; margin: 10px 0 6px; }
.lab-zones { font-size: 0.74rem; margin: 4px 0; }
.lab-detail-actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 12px 0 6px; }
.lab-note { display: block; margin-top: 10px; }
.lab-note span { display: block; font-size: 0.7rem; color: var(--muted); margin-bottom: 4px; }
.lab-note textarea {
  width: 100%; box-sizing: border-box; resize: vertical; font: inherit; font-size: 0.82rem;
  background: var(--bg); color: var(--text); border: 1px solid var(--border-2); border-radius: 8px; padding: 8px;
}
.lab-note textarea:focus { outline: none; border-color: var(--accent-dim); }
.lab-detail-foot { font-size: 0.68rem; margin-top: 10px; }

/* proactive briefing line in the assistant log */
.ai-msg.brief {
  border-left: 2px solid var(--accent); background: var(--accent-dim);
  font-size: 0.82rem; line-height: 1.5;
}
/* manual voice-preview line (audition a pack); still part of the transcript */
.ai-msg.spoken {
  align-self: stretch; max-width: 100%; background: transparent;
  border: 1px dashed var(--border-2); color: var(--muted);
  font-size: 0.84rem; font-style: italic;
}
/* --- assistant voice bar: mute + stop + voice-pack picker ------------------ */
.ai-voicebar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0 0 8px; }
.ai-voicebar #ai-mute.on { color: var(--ok); border-color: var(--ok); }
.ai-voicebar #ai-mute:not(.on) { color: var(--muted); }
.ai-voicepick { display: flex; align-items: center; gap: 6px; margin-left: auto; font-size: 0.8rem; color: var(--muted); min-width: 0; }
.ai-voicepick.off { opacity: .55; }
.ai-voicepick select {
  max-width: 200px; font-family: var(--ui); font-size: 0.82rem; color: var(--text);
  background: var(--bg); border: 1px solid var(--border-2); border-radius: 8px; padding: 5px 8px;
}
.ai-voicepick select:focus { outline: none; border-color: var(--accent-dim); }
@media (max-width: 820px) { .ai-voicepick { margin-left: 0; } .ai-voicepick select { max-width: 150px; } }

/* responsive safety: the tabbed pane is wide-screen-only too */
@media (max-width: 1279px) {
  .workspace-pane { display: none !important; }
}

/* ---- result-reuse cache affordances (v0.31.0) ------------------------------ */
/* "cached" tag on the scan-result header + the news tile's "as of HH:MM" note. */
.mic-scan-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.mic-cached {
  font-family: var(--mono); font-size: 0.62rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--accent); border: 1px solid var(--accent-dim); border-radius: 6px; padding: 1px 6px;
}
.mic-partial {
  font-family: var(--mono); font-size: 0.62rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--warn, #d8a657); border: 1px solid var(--warn, #d8a657); border-radius: 6px; padding: 1px 6px; opacity: .85;
}
.mic-scan-head #mic-refresh { margin-left: auto; }
.news-asof { font-family: var(--mono); font-size: 0.66rem; white-space: nowrap; }

/* ============================================================================
   World Map tab (v0.32.0) — equirectangular map + one coordinate overlay
   ============================================================================ */
.wmap { display: flex; flex-direction: column; gap: 12px; padding: 4px 2px; }
.wmap-bar { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; }
.wmap-tools { display: flex; align-items: center; gap: 10px; }
.wmap-utc { color: var(--muted); font-size: 0.82rem; }
.mono { font-family: var(--mono); }

.wmap-grid { display: flex; gap: 14px; align-items: flex-start; }
.wmap-stage { flex: 1; min-width: 0; }
.wmap-side { width: 250px; flex: none; }
@media (max-width: 880px) { .wmap-grid { flex-direction: column; } .wmap-side { width: 100%; } }

.wmap-wrap { position: relative; width: 100%; aspect-ratio: 2 / 1; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel-2); overflow: hidden; }
.wmap-wrap.zoomed { cursor: grab; }
.wmap-wrap.zoomed:active { cursor: grabbing; }
/* the single transform target — SVG + line layer + marker overlay scale/pan together */
.wmap-world { position: absolute; inset: 0; transform-origin: 0 0; will-change: transform; }
.wmap-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; border-radius: var(--radius); overflow: hidden; }
.wmap-ocean { fill: var(--panel-2); }
.wmap-land { fill: var(--border-2); stroke: var(--border); stroke-width: 0.4; }
.wmap-grat line { stroke: var(--border); stroke-width: 0.4; opacity: 0.5; }
.wmap-grat .wmap-tz { stroke: var(--border); stroke-width: 0.3; opacity: 0.22; }   /* time-zone meridians (15°) */
.wmap-grat .wmap-pm { stroke: var(--border-2); stroke-width: 0.6; opacity: 0.75; } /* prime + anti-meridian */
.wmap-grat .wmap-eq { stroke: var(--accent); stroke-width: 0.7; opacity: 0.6; }     /* equator */
.wmap-grat .wmap-trop { stroke: var(--border-2); stroke-width: 0.4; opacity: 0.55; stroke-dasharray: 4 4; }  /* tropics */
.wmap-grat .wmap-polar { stroke: var(--border-2); stroke-width: 0.4; opacity: 0.45; stroke-dasharray: 2 5; } /* polar circles */
.wmap.grid-off .wmap-grat { display: none; }
.wmap-grid.on { color: var(--accent); border-color: var(--accent-dim); }
/* day/night terminator layer — above land/graticule, below lines + markers */
.wmap-night { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none; overflow: visible; }
.wmap-night-fill { fill: #0a0f1e; fill-opacity: 0.42; stroke: var(--accent); stroke-width: 0.6; stroke-opacity: 0.35; }
.wmap-sun-core { fill: #ffd66b; }
.wmap-sun-halo { fill: #ffd66b; opacity: 0.18; }
.wmap.night-off .wmap-night { display: none; }
#wmap-night.on { color: var(--accent); border-color: var(--accent-dim); }
/* zoom controls (fixed in the viewport, do NOT transform with the world) */
.wmap-zoom { position: absolute; right: 8px; bottom: 8px; display: flex; flex-direction: column; gap: 4px; z-index: 25; }
.wmap-zoom button { width: 26px; height: 26px; border: 1px solid var(--border-2); background: var(--panel); color: var(--text);
  border-radius: 7px; cursor: pointer; font-size: 0.95rem; line-height: 1; display: flex; align-items: center; justify-content: center; }
.wmap-zoom button:hover { border-color: var(--accent); color: var(--accent); }

.wmap-overlay { position: absolute; inset: 0; pointer-events: none; }
.wmap-mk { position: absolute; transform: translate(-50%, -50%); pointer-events: auto; }
.wmap-mk::after { content: ''; position: absolute; inset: -6px; }
.wmap-ex { width: 9px; height: 9px; border-radius: 50%; }
.wmap-ex.is-open { background: var(--ok); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 26%, transparent); }
.wmap-ex.is-closed { background: transparent; border: 1px solid var(--muted); opacity: 0.75; }
.wmap-beacon { width: var(--bsz, 9px); height: var(--bsz, 9px); border-radius: 50%; background: var(--bc, var(--danger)); }
.wmap-beacon.clickable { cursor: pointer; }
.wmap-ring { position: absolute; left: 50%; top: 50%; width: 100%; height: 100%; border-radius: 50%; background: var(--bc, var(--danger)); transform: translate(-50%, -50%); animation: wmap-pulse 2.4s ease-out infinite; }
@keyframes wmap-pulse { 0% { opacity: 0.5; transform: translate(-50%,-50%) scale(1); } 100% { opacity: 0; transform: translate(-50%,-50%) scale(5); } }

.wmap-tip { position: absolute; max-width: 230px; padding: 7px 10px; background: var(--panel); border: 1px solid var(--border-2); border-radius: 9px; color: var(--text); font-size: 0.78rem; line-height: 1.35; pointer-events: none; opacity: 0; transition: opacity .1s ease; z-index: 30; box-shadow: 0 6px 22px rgba(0,0,0,.35); }
.wmap-tip.on { opacity: 1; }
.wmap-foot { font-size: 0.72rem; margin-top: 8px; }

.wmap-sec { margin: 2px 0 8px; }
.wmap-sec-mt { margin-top: 16px; }
.wmap-list { display: flex; flex-direction: column; gap: 2px; }
.wmap-li { display: flex; align-items: center; gap: 8px; padding: 5px 6px; border-radius: 8px; font-size: 0.84rem; }
.wmap-li:hover { background: var(--panel-2); }
.wmap-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.wmap-dot.is-open { background: var(--ok); }
.wmap-dot.is-closed { background: transparent; border: 1px solid var(--muted); }
.wmap-li-name { flex: 1; }
.wmap-li-sub { color: var(--muted); font-size: 0.76rem; }
.wmap-li-sub.on { color: var(--ok); }
/* v1.09.0 — per-source live-events status block (diagnosability) */
.wmap-evst { display: flex; flex-direction: column; gap: 2px; margin: 0 0 8px; padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--panel-2); }
.wmap-evst-row { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; font-size: 11px; line-height: 1.4; }
.wmap-evst-l { color: var(--muted); }
.wmap-evst-c { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--text); margin-left: auto; }
.wmap-evst-row.ok .wmap-evst-c { color: var(--ok, #34d399); }
.wmap-evst-row.warn .wmap-evst-c { color: var(--warn, #f59e0b); }
.wmap-evst-note { flex: 1 1 100%; color: var(--muted); font-size: 10px; opacity: .9; }
.wmap-evst-row.warn .wmap-evst-note { color: var(--warn, #f59e0b); }
.wmap-ev { display: flex; align-items: baseline; gap: 8px; padding: 6px; border-radius: 8px; text-decoration: none; color: var(--text); }
.wmap-ev:hover { background: var(--panel-2); }
.wmap-ev-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; align-self: center; }
.wmap-ev-t { font-size: 0.82rem; flex: 1; }
.wmap-ev-s { font-size: 0.72rem; }

/* --- World Map v2: generic POI markers (places/conflict/energy/minerals/agri) */
.wmap-poi { width: 10px; height: 10px; background: var(--mc, var(--accent)); }
.wmap-poi.shp-cir { border-radius: 50%; }
.wmap-poi.shp-sq  { border-radius: 2px; }
.wmap-poi.shp-dia { transform: translate(-50%, -50%) rotate(45deg); background: color-mix(in srgb, var(--mc) 18%, transparent); border: 1.5px solid var(--mc); }
.wmap-poi.shp-tri { width: 0; height: 0; background: transparent; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 11px solid var(--mc); border-radius: 0; }
.wmap-poi:not(.shp-dia) { box-shadow: 0 0 0 3px color-mix(in srgb, var(--mc) 22%, transparent); }
.wmap-poi.shp-tri { box-shadow: none; filter: drop-shadow(0 0 2px color-mix(in srgb, var(--mc) 55%, transparent)); }
.wmap-poi:hover { z-index: 12; }

/* --- World Map v2: coordinate-correct line layer (illustrative corridors) --- */
.wmap-lines { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none; overflow: visible; }
.wmap-line { fill: none; stroke: var(--mc, var(--accent)); stroke-width: 1.4; stroke-dasharray: 5 4; opacity: 0.8; vector-effect: non-scaling-stroke; pointer-events: stroke; }
.wmap-line:hover { opacity: 1; stroke-width: 2.2; }

/* --- World Map v2: layer filter panel --------------------------------------- */
.wmap-sec-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.wmap-lf-acts { font-size: 0.74rem; color: var(--muted); }
.wmap-filter { display: flex; flex-direction: column; gap: 2px; }
.wmap-lf-row { display: flex; align-items: center; gap: 8px; padding: 5px 6px; border-radius: 8px; font-size: 0.84rem; cursor: pointer; opacity: 0.55; }
.wmap-lf-row.on { opacity: 1; }
.wmap-lf-row:hover { background: var(--panel-2); }
.wmap-lf-row input { accent-color: var(--accent); flex: none; }
.wmap-lf-sw { width: 11px; height: 11px; flex: none; background: var(--mc, var(--accent)); }
.wmap-lf-sw.shp-cir { border-radius: 50%; }
.wmap-lf-sw.shp-sq  { border-radius: 2px; }
.wmap-lf-sw.shp-dia { transform: rotate(45deg); background: color-mix(in srgb, var(--mc) 18%, transparent); border: 1.5px solid var(--mc); }
.wmap-lf-sw.shp-tri { width: 0; height: 0; background: transparent; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 10px solid var(--mc); }
.wmap-lf-l { flex: 1; }
.wmap-lf-c { color: var(--muted); font-size: 0.74rem; font-family: var(--mono); min-width: 18px; text-align: right; }
.wmap-lf-tag { font-size: 0.6rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 1px 6px; }
.wmap-lf-tag.live { color: var(--ok); border-color: var(--accent-dim); }

/* World-Map LINES legend (v0.67.0) — sea lanes / overland / chokepoints / pipelines */
.wmap-lines-legend { display: flex; flex-direction: column; gap: 8px; }
/* v1.11.0 — curated-review chip + opt-in change-check */
.wmap-curated { display: flex; flex-direction: column; gap: 8px; }
.wmap-cur-chip { display: flex; align-items: center; gap: 7px; padding: 6px 8px; border-radius: 8px; background: var(--panel-2); font-size: 0.74rem; line-height: 1.3; }
.wmap-cur-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ok, #3fb950); flex: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok, #3fb950) 22%, transparent); }
.wmap-cur-chip.stale { background: color-mix(in srgb, var(--warn, #d29922) 14%, var(--panel-2)); }
.wmap-cur-chip.stale .wmap-cur-dot { background: var(--warn, #d29922); box-shadow: 0 0 0 3px color-mix(in srgb, var(--warn, #d29922) 25%, transparent); }
.wmap-cur-txt b { font-weight: 600; }
.wmap-cur-acts { display: flex; }
.wmap-cur-out { border: 1px solid var(--border); border-radius: 8px; padding: 8px 9px; font-size: 0.76rem; line-height: 1.4; }
.wmap-cur-out.busy { color: var(--muted); }
.wmap-cur-head { display: flex; align-items: center; gap: 6px; font-weight: 600; margin-bottom: 5px; }
.wmap-cur-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.wmap-cur-list li { padding: 4px 0; border-top: 1px solid var(--border); }
.wmap-cur-list li:first-child { border-top: none; }
.wmap-cur-k { font-family: var(--mono, monospace); font-size: 0.7rem; color: var(--muted); margin-right: 2px; }
.wmap-cur-foot { margin-top: 7px; font-size: 0.7rem; }
.wmap-cur-foot code { font-size: 0.92em; }
.wmap-cur-relax { color: var(--warn, #d29922); margin-bottom: 6px; font-size: 0.72rem; }
.wmap-cur-err { color: var(--danger, #f85149); }
.wmap-cur-none { color: var(--muted); }
.wmap-lleg-grp { display: flex; flex-direction: column; gap: 1px; }
.wmap-lleg-h { font-size: 0.6rem; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); margin: 2px 0 1px; }
.wmap-lleg-row { display: flex; align-items: baseline; gap: 7px; padding: 3px 4px; border-radius: 6px; font-size: 0.78rem; }
.wmap-lleg-row:hover { background: var(--panel-2); }
.wmap-lleg-sw { width: 14px; height: 0; flex: none; align-self: center; border-top: 2px dashed var(--mc, var(--accent)); }
.wmap-lleg-n { color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 120px; }
.wmap-lleg-d { font-size: 0.68rem; line-height: 1.3; flex: 1; min-width: 0; }
/* v0.68.0: clickable reference link in a lines-legend row + the Real-mode popup */
a.wmap-lleg-link { color: var(--text); text-decoration: none; cursor: pointer; }
a.wmap-lleg-link:hover { color: var(--accent); text-decoration: underline; }
.wmap-lleg-arr { color: var(--accent); font-size: 0.62rem; margin-left: 3px; opacity: 0.75; }
a.wmap-lleg-link:hover .wmap-lleg-arr { opacity: 1; }
.wmap-gl-pop { font-size: 0.78rem; max-width: 240px; }
.wmap-gl-pop-t { font-weight: 600; color: var(--text); margin-bottom: 3px; }
.wmap-gl-pop-d { color: var(--muted); line-height: 1.35; }
.wmap-gl-pop-link { margin-top: 5px; }
.wmap-gl-pop-link a { color: var(--accent); text-decoration: none; }
.wmap-gl-pop-link a:hover { text-decoration: underline; }

/* ============================================================================
   Sources tab (v0.32.0) — registry viewer
   ============================================================================ */
.srcs { display: flex; flex-direction: column; gap: 14px; padding: 4px 2px; }
.srcs-legend { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; }
.src-leg { border: 1px solid var(--border); border-radius: 12px; padding: 10px 12px; background: var(--panel); }
.src-leg-h { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }
.src-leg-n { font-family: var(--mono); color: var(--muted); font-size: 0.8rem; }
.src-leg-note { font-size: 0.74rem; line-height: 1.4; margin: 0; }

.src-group { margin-top: 4px; }
.src-group-h { display: flex; align-items: center; gap: 8px; margin: 0 0 6px; }
.src-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; padding: 9px 6px; border-bottom: 1px solid var(--border); }
.src-row-main { min-width: 0; }
.src-name { color: var(--text); text-decoration: none; font-weight: 600; font-size: 0.92rem; }
.src-name:hover { color: var(--accent); }
.src-host { font-weight: 400; font-size: 0.74rem; }
.src-note { font-size: 0.78rem; margin: 2px 0 0; }
.src-row-tags { display: flex; gap: 6px; align-items: center; flex: none; flex-wrap: wrap; justify-content: flex-end; }

.src-mtag, .src-stag, .src-acc { font-family: var(--mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: .06em; padding: 3px 7px; border-radius: 16px; white-space: nowrap; border: 1px solid currentColor; }
.src-acc { color: var(--muted); }
.src-m-api { color: var(--ok); }
.src-m-ai { color: var(--accent); }
.src-m-rss { color: var(--warn); }
.src-m-footprint { color: var(--muted); }
.src-stag { border-color: transparent; }
.st-wired { color: var(--ok); background: color-mix(in srgb, var(--ok) 16%, transparent); }
.st-via-ai { color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); }
.st-ready { color: var(--ext); background: color-mix(in srgb, var(--ext) 16%, transparent); }
.st-planned { color: var(--warn); background: color-mix(in srgb, var(--warn) 16%, transparent); }
.st-footprint { color: var(--muted); background: color-mix(in srgb, var(--muted) 14%, transparent); }
.srcs-foot { font-size: 0.76rem; line-height: 1.5; border-top: 1px solid var(--border); padding-top: 10px; }

/* ============================================================================
   v0.33.0 — shell-level BANNERS (double ticker: finance + news)
   Lives between the sticky topbar and the body; publishes its height as
   --bnr-h on .shell so .ai-wrap/.notes reclaim space when hidden/zen.
   ========================================================================== */
.shell { --bnr-h: 0px; --adv-h: 0px; }
.banner-strip {
  height: var(--bnr-h, 0px); overflow: hidden;
  position: sticky; top: 0; z-index: 4;
  background: var(--panel); border-bottom: 1px solid var(--border);
  transition: height .16s ease;
}
.shell:not(.banners-on) .banner-strip { border-bottom-color: transparent; }
html.zen .banner-strip { display: none; }

.bnr { position: relative; height: 100%; display: flex; flex-direction: column; }
.bnr-row {
  flex: 1 1 0; min-height: 0; display: flex; align-items: center;
  overflow: hidden; padding-left: 8px; font-family: var(--mono);
}
.bnr-row + .bnr-row { border-top: 1px solid var(--border); }
.bnr-tag {
  flex: 0 0 auto; font-size: 0.6rem; letter-spacing: .12em; font-weight: 700;
  color: var(--bg); background: var(--accent); padding: 2px 6px; border-radius: 5px;
  margin-right: 10px; text-transform: uppercase;
}
.bnr-tag.tag-news { background: var(--ext); }

/* marquee: two identical sequences sliding -50% = seamless, content-independent */
.bnr-scroll { flex: 1 1 auto; overflow: hidden; position: relative; height: 100%; }
.bnr-track { display: inline-flex; align-items: center; height: 100%;
  white-space: nowrap; will-change: transform; animation: bnr-marq 84s linear infinite; }
.bnr-news .bnr-track { animation-duration: 105s; }
.bnr-scroll:hover .bnr-track { animation-play-state: paused; }
.bnr-track.bnr-empty { animation: none; }
.bnr-seq { display: inline-flex; align-items: center; }
@keyframes bnr-marq { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .bnr-track { animation: none; } }

.bnr-item { display: inline-flex; align-items: center; gap: 6px; padding: 0 16px;
  font-size: var(--bnr-fs, 0.72rem); color: var(--text); border-right: 1px solid var(--border);
  height: 60%; }
.bnr-item.muted { color: var(--muted); border-right: none; }
.bnr-sym { font-weight: 700; letter-spacing: .02em; }
.bnr-px { color: var(--text); }
.bnr-chg { font-size: 0.68rem; }
.bnr-chg.up { color: var(--ok); }
.bnr-chg.down { color: var(--danger); }
.bnr-hint { font-style: italic; }

.bnr-link { text-decoration: none; cursor: pointer; }
.bnr-link:hover .bnr-head { color: var(--accent); text-decoration: underline; }
.bnr-dot { width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto; }
.bnr-head { color: var(--text); max-width: 46ch; overflow: hidden; text-overflow: ellipsis; }
.bnr-src { color: var(--muted); font-size: 0.64rem; }

.bnr-close {
  position: absolute; top: 2px; right: 4px; z-index: 2;
  width: 18px; height: 18px; line-height: 1; padding: 0;
  border: none; background: transparent; color: var(--muted); cursor: pointer;
  border-radius: 5px; font-size: 14px;
}
.bnr-close:hover { color: var(--text); background: var(--panel-2); }
.tb-left .ver { white-space: nowrap; }

/* --- v0.34.0: banner freshness, per-article age, thickness, position --- */
/* freshness label pinned to the right edge of each row */
.bnr-fresh { flex: 0 0 auto; font-family: var(--mono); font-size: 0.58rem; color: var(--muted);
  padding: 0 10px 0 8px; border-left: 1px solid var(--border); white-space: nowrap; letter-spacing: .03em; }
/* approximate (AI-reported) article age */
.bnr-age { color: var(--muted); font-size: 0.6rem; opacity: .85; }
.news-age { color: var(--muted); }

/* thickness presets — "standard" is the base height/font; these only scale text.
   Height itself is published as --bnr-h by banners.js per preset. */
.shell.bnr-compact { --bnr-fs: 0.64rem; }
.shell.bnr-tall    { --bnr-fs: 0.82rem; }

/* position = bottom: reorder the shell's flex column so the strip sits below the
   body and pins to the viewport bottom. Header keeps order 0; body before strip.
   The --bnr-h space accounting (.ai-wrap/.notes) is identical top or bottom. */
.shell.bnr-bottom .body { order: 1; }
.shell.bnr-bottom .banner-strip {
  order: 99; top: auto; bottom: 0;
  border-bottom: none; border-top: 1px solid var(--border);
}

/* inline checkbox row (Settings → Banners → finance classes) */
.set-checks { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px 14px; }

/* ── v0.43.0: PERSISTENT ADVISOR BAR (shell chrome, every tab) ──────────────
   Fixed to the viewport bottom so it's always reachable; when banners sit at
   the bottom it lifts above them by --bnr-h. Height published as --adv-h by
   advisor.js so .workzone/.ai-wrap/.notes/.rail reclaim the space. */
.advisor-dock {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
  /* v1.129.0 SLICE 2 — FROSTED CHAT: translucent panel tint + backdrop blur, theme-aware
     via color-mix (frosts in BOTH dark + light). Alpha kept high (82%) so the dock stays
     legible even where backdrop-filter is unsupported. This is a COSMETIC skin only — NOT an
     overlay: the --adv-h height reservation (the .workzone height calc) is left exactly as-is,
     so the v1.127.0 black-bar class stays closed. */
  background: color-mix(in srgb, var(--panel) 82%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
  backdrop-filter: blur(14px) saturate(1.08);
  border-top: 1px solid var(--border);
  box-shadow: 0 -2px 10px rgba(0,0,0,.10),   /* v1.126.0 U1a whisper-soft lift (kept) */
              inset 0 1px 0 color-mix(in srgb, var(--text) 7%, transparent);   /* frosted top sheen */
  font-size: 0.86rem;
}
.shell.bnr-bottom .advisor-dock { bottom: var(--bnr-h, 0px); }   /* sit ABOVE a bottom banner */
.advisor-dock.adv-gone { display: none; }
html.zen .advisor-dock { display: none; }                        /* zen hides chrome */

/* little handle to expand/collapse the transcript */
.adv-tab {
  position: absolute; top: -16px; left: 50%; transform: translateX(-50%);
  width: 46px; height: 16px; line-height: 14px; text-align: center;
  /* v1.129.0 — frost the handle too (it pokes above the dock into content) */
  background: color-mix(in srgb, var(--panel) 82%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
  backdrop-filter: blur(14px) saturate(1.08);
  border: 1px solid var(--border); border-bottom: none;
  border-radius: 8px 8px 0 0; color: var(--muted); cursor: pointer; font-size: 0.7rem;
}
.adv-tab:hover { color: var(--accent); }

/* v1.129.0 — accessibility: honour a reduced-transparency preference → solid, no blur */
@media (prefers-reduced-transparency: reduce) {
  .advisor-dock, .adv-tab {
    background: var(--panel);
    -webkit-backdrop-filter: none; backdrop-filter: none;
  }
}

.adv-body { padding: 8px 14px 10px; }

/* drag-to-resize grip — only present when expanded */
.adv-grip {
  display: none; width: 54px; height: 5px; margin: 0 auto 7px;
  border-radius: 4px; background: var(--border-2); cursor: ns-resize; touch-action: none;
}
.advisor-dock.open .adv-grip { display: block; }
.adv-grip:hover { background: var(--accent); }
.advisor-dock.adv-resizing { user-select: none; }

/* transcript — slides up from 0; open height is resizable (--adv-panel-h, default 42vh) */
.adv-log {
  display: flex; flex-direction: column; gap: 6px;
  height: 0; opacity: 0; overflow-y: auto; padding-right: 2px; margin: 0;
}
.advisor-dock.open .adv-log {
  height: var(--adv-panel-h, 42vh); opacity: 1; margin-bottom: 8px;
}
.adv-msg { padding: 6px 10px; border-radius: 10px; max-width: 92%; white-space: pre-wrap; line-height: 1.4; }
.adv-msg.user { align-self: flex-end; background: var(--accent-dim, var(--panel-2)); color: var(--text); }
.adv-msg.ai   { align-self: flex-start; background: var(--panel-2); color: var(--text); }
.adv-msg.sys  { align-self: center; background: transparent; color: var(--muted); font-size: 0.8rem; }
.adv-msg.err  { align-self: flex-start; background: color-mix(in srgb, var(--danger) 14%, transparent); color: var(--danger); }

/* fill confirmation toast (with Undo) */
.adv-toast {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-bottom: 8px; padding: 6px 10px; border-radius: 10px;
  background: color-mix(in srgb, var(--ok, #2ecc71) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--ok, #2ecc71) 32%, transparent);
  font-size: 0.8rem;
}
.adv-toast-msg { color: var(--text); }
.adv-toast-est { color: var(--muted); }
.adv-focus-warn { display: block; margin-top: 2px; color: var(--warn); }  /* FOCUS slice 3 — held-symbol hard-rail #12 note */
.adv-undo { background: none; border: none; color: var(--accent); cursor: pointer; font-size: 0.82rem; padding: 2px 4px; }
.adv-undo:hover { text-decoration: underline; }

/* input row — always visible; ✦ mark doubles as a click-to-expand affordance */
.adv-row { display: flex; align-items: flex-end; gap: 8px; }
.adv-mark {
  flex: 0 0 auto; background: none; border: none; padding: 0 2px; line-height: 1;
  color: var(--accent); font-size: 0.95rem; cursor: pointer;
}
.adv-mark:hover { color: var(--text); }
/* Orb variant of the ✦ mark (v0.64.0): a mini pulsing circle, themed + state-driven. */
.adv-mark.orb-mark {
  --av-size: 22px; --orb-amp: 0;
  --orb-hi: var(--accent); --orb-lo: var(--accent-dim, var(--accent));
  width: 22px; height: 22px; padding: 0; display: inline-flex; align-items: center; justify-content: center;
}
.adv-mark.orb-mark .orb-svg { width: 100%; height: 100%; display: block; overflow: visible; }
.adv-mark.orb-mark:hover .orb-core { filter: drop-shadow(0 0 8px var(--orb-hi)); }
.adv-input {
  flex: 1 1 auto; min-width: 0; padding: 8px 12px; border-radius: 10px;
  background: var(--bg); border: 1px solid var(--border-2); color: var(--text); font-size: 0.86rem;
  /* v1.133.0 — multi-line: auto-grows (JS caps at 160px), Shift+Enter for a newline */
  font-family: var(--ui); line-height: 1.4; resize: none; max-height: 160px; overflow-y: auto;
}
.adv-input:focus { outline: none; border-color: var(--accent-dim, var(--accent)); }
.adv-status { flex: 0 0 auto; font-family: var(--mono); font-size: 0.62rem; color: var(--muted); white-space: nowrap; }
.adv-send, .adv-hide {
  flex: 0 0 auto; width: 32px; height: 32px; border-radius: 9px; cursor: pointer;
  background: var(--panel-2); border: 1px solid var(--border-2); color: var(--text); font-size: 0.95rem;
}
.adv-send:hover { background: var(--accent); border-color: var(--accent); color: #fff; }
.adv-hide { color: var(--muted); }
.adv-hide:hover { color: var(--danger); }

/* v1.130.0 — VOICE controls on the advisor row (mic dictation + speak-replies toggle) */
.adv-voice {
  flex: 0 0 auto; width: 32px; height: 32px; border-radius: 9px; cursor: pointer;
  background: var(--panel-2); border: 1px solid var(--border-2); color: var(--text);
  font-size: 0.9rem; line-height: 1; display: inline-flex; align-items: center; justify-content: center;
}
.adv-voice:hover { border-color: var(--accent); }
.adv-speak.on { background: var(--accent); border-color: var(--accent); color: #fff; }   /* spoken replies ON */
.adv-mic.listening {   /* actively dictating */
  background: color-mix(in srgb, var(--danger) 22%, transparent);
  border-color: var(--danger); color: var(--danger);
  animation: adv-mic-pulse 1.1s ease-in-out infinite;
}
@keyframes adv-mic-pulse {
  0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--danger) 40%, transparent); }
  50%      { box-shadow: 0 0 0 5px color-mix(in srgb, var(--danger) 0%, transparent); }
}
@media (prefers-reduced-motion: reduce) { .adv-mic.listening { animation: none; } }

/* v1.135.0 — FA-1 file attach: the 📎 control reuses .adv-voice; the scope prompt
   + chip reuse .adv-toast / .adv-undo (no new structure). */
.adv-attach-choice { display: inline-flex; gap: 4px; align-items: center; flex-wrap: wrap; }
.adv-attach-cancel { color: var(--muted); }
.adv-chip { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
.adv-chip .adv-toast-est { white-space: nowrap; }

/* v1.134.0 — N1 CONVERSATION HISTORY drawer (Advisor bar) */
.adv-hist-btn.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.adv-hist {
  border: 1px solid var(--border-2); border-radius: 10px; background: var(--panel-2);
  margin: 0 0 8px; padding: 8px; max-height: 38vh; overflow-y: auto;
}
.adv-hist-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.adv-hist-h { font-family: var(--mono); font-size: 0.66rem; text-transform: uppercase; letter-spacing: .12em; color: var(--muted); }
.adv-hist-sub { text-transform: none; letter-spacing: 0; }
.adv-hist-new {
  flex: 0 0 auto; cursor: pointer; font-size: 0.72rem; padding: 3px 9px; border-radius: 8px;
  background: var(--bg); border: 1px solid var(--border-2); color: var(--text);
}
.adv-hist-new:hover { border-color: var(--accent); color: var(--accent); }
.adv-hist-empty { font-size: 0.74rem; color: var(--muted); line-height: 1.45; padding: 4px 2px; }
.adv-hist-list { display: flex; flex-direction: column; gap: 4px; }
.adv-hist-item { display: flex; align-items: stretch; gap: 4px; border-radius: 8px; }
.adv-hist-item.cur { background: color-mix(in srgb, var(--accent) 12%, transparent); }
.adv-hist-open {
  flex: 1 1 auto; min-width: 0; text-align: left; cursor: pointer; padding: 6px 8px; border-radius: 8px;
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  display: flex; flex-direction: column; gap: 2px;
}
.adv-hist-open:hover { border-color: var(--accent-dim, var(--accent)); }
.adv-hist-item.cur .adv-hist-open { border-color: var(--accent); }
.adv-hist-title { font-size: 0.8rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.adv-hist-item.arch .adv-hist-title { color: var(--muted); }
.adv-hist-meta { font-family: var(--mono); font-size: 0.6rem; color: var(--muted); }
.adv-hist-act {
  flex: 0 0 auto; width: 28px; cursor: pointer; border-radius: 8px; font-size: 0.82rem; line-height: 1;
  background: var(--bg); border: 1px solid var(--border); color: var(--muted);
}
.adv-hist-act:hover { border-color: var(--accent); color: var(--text); }


/* v1.132.0 — speak-to-it mic on the Assistant avatar chat row (mirrors the advisor mic; reuses adv-mic-pulse) */
.ai-mic {
  flex: 0 0 auto; width: 40px; height: 40px; border-radius: 10px; cursor: pointer;
  background: var(--panel-2); border: 1px solid var(--border-2); color: var(--text);
  font-size: 1rem; line-height: 1; display: inline-flex; align-items: center; justify-content: center;
}
.ai-mic:hover { border-color: var(--accent); }
.ai-mic.listening {   /* actively dictating */
  background: color-mix(in srgb, var(--danger) 22%, transparent);
  border-color: var(--danger); color: var(--danger);
  animation: adv-mic-pulse 1.1s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) { .ai-mic.listening { animation: none; } }

@media (prefers-reduced-motion: no-preference) {
  .advisor-dock { transition: bottom .16s ease; }
  .adv-log { transition: height .2s ease, opacity .2s ease; }   /* the slide */
  .advisor-dock.adv-resizing .adv-log { transition: none; }      /* 1:1 while dragging */
}


/* ── News-source catalog (Settings → News sources; req G v0.35.0) ──────────── */
.set-col .nsrc-cats { width: 100%; max-width: 560px; display: flex; flex-direction: column; gap: 10px; margin-top: 4px; }
.nsrc-cat { border: 1px solid var(--border-2); border-radius: 10px; padding: 10px 12px; background: var(--bg); }
.nsrc-cat-all { font-size: 0.9rem; }
.nsrc-cat-all b { color: var(--text); }
.nsrc-cat-note { margin: 2px 0 8px 23px; font-size: 0.8rem; }
.nsrc-list { justify-content: flex-start; gap: 6px 16px; }
.nsrc-list .set-check { flex: 0 0 auto; }
.nsrc-site { font-family: var(--mono); font-size: 0.72rem; }
.nsrc-bias { font-size: 0.72rem; color: var(--accent); }
.nsrc-chips { width: 100%; max-width: 560px; display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-start; }
.nsrc-chip { display: inline-flex; align-items: center; gap: 4px; font-size: 0.78rem; color: var(--text);
  background: var(--bg); border: 1px solid var(--border-2); border-radius: 999px; padding: 3px 6px 3px 10px; }
.nsrc-chip-x { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 1rem; line-height: 1; padding: 0 2px; }
.nsrc-chip-x:hover { color: var(--accent); }
/* --- Watch themes / sectors (v0.60.0) --- */
.thm-list { display: flex; flex-direction: column; gap: 8px; width: 100%; max-width: 620px; }
.thm-row { border: 1px solid var(--border-2); border-radius: 10px; padding: 10px 12px; background: var(--bg); }
.thm-row.watched { border-color: var(--accent); }
.thm-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.thm-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--thm, var(--accent)); flex: 0 0 auto; }
.thm-label { color: var(--text); }
.thm-head .thm-add { margin-left: auto; }
.thm-state { font-size: 0.76rem; }
.thm-desc { margin: 6px 0; font-size: 0.8rem; }
.thm-syms { display: flex; align-items: baseline; flex-wrap: wrap; gap: 5px; margin-top: 4px; font-size: 0.78rem; }
.thm-syms .kv { margin-right: 4px; }
.thm-chip { font-family: var(--mono); font-size: 0.72rem; color: var(--text); border: 1px solid var(--border-2); border-radius: 5px; padding: 1px 5px; background: var(--bg-2); }
.thm-chip.etf { color: var(--muted); }
.wx-stale { font-size: 0.7rem; }
.nsrc-foot { width: 100%; max-width: 560px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* ---- v0.36.0 World-Map mini-card (dashboard tile) ------------------------- */
.wmini { display: flex; flex-direction: column; gap: 6px; cursor: pointer; height: 100%; }
.wmini-map { position: relative; width: 100%; aspect-ratio: 2 / 1; border-radius: var(--radius); overflow: hidden; border: 1px solid var(--border); }
.wmini-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.wmini-ocean { fill: var(--panel-2); }
.wmini-land { fill: var(--border-2); stroke: var(--border); stroke-width: 0.4; }
.wmini-overlay { position: absolute; inset: 0; }
.wmini-dot, .wmini-beacon { position: absolute; transform: translate(-50%, -50%); border-radius: 50%; }
.wmini-dot { width: 5px; height: 5px; }
.wmini-dot.is-open { background: var(--ok); box-shadow: 0 0 0 2px color-mix(in srgb, var(--ok) 26%, transparent); }
.wmini-dot.is-closed { background: transparent; border: 1px solid var(--muted); opacity: 0.7; }
.wmini-beacon { width: 6px; height: 6px; background: var(--bc, var(--danger)); box-shadow: 0 0 0 2px color-mix(in srgb, var(--bc, var(--danger)) 24%, transparent); }
.wmini-foot { display: flex; align-items: center; justify-content: space-between; font-size: 0.78rem; }
.wmini-open { color: var(--ok); font-family: var(--mono); }
.wmini-cta { color: var(--accent); }
.wmini:hover .wmini-map { border-color: var(--accent-dim); }
.wmini:hover .wmini-cta { text-decoration: underline; }

/* ============================================================================
   v0.38.0 — Cross-referencing engine: Connections tab (.xref-*) + mini-tile (.xmini-*)
   ========================================================================== */
.xref-wrap { padding: 16px 18px; max-width: 1100px; }
.xref-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.xref-head h2 { margin: 0; }
.xref-counts { font-family: var(--mono); font-size: 0.74rem; color: var(--muted); white-space: nowrap; }
/* v1.13.0 — Connections freshness + auto-refresh affordances */
.xref-headside { display: flex; flex-direction: column; align-items: flex-end; gap: 7px; }
.xref-fresh { display: flex; align-items: center; gap: 8px; }
.xref-fresh-chip { display: inline-flex; align-items: center; gap: 7px; padding: 4px 9px; border-radius: 8px; background: var(--panel-2); font-size: 0.74rem; line-height: 1.3; color: var(--fg, #e6edf3); white-space: nowrap; }
.xref-fresh-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ok, #3fb950); flex: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok, #3fb950) 22%, transparent); }
.xref-fresh-chip.stale { background: color-mix(in srgb, var(--warn, #d29922) 14%, var(--panel-2)); }
.xref-fresh-chip.stale .xref-fresh-dot { background: var(--warn, #d29922); box-shadow: 0 0 0 3px color-mix(in srgb, var(--warn, #d29922) 25%, transparent); }
/* ── IA-CLEANUP C1b-1 (v1.52.0): THE canonical freshness chip ──────────────
   Rendered by data_freshness.freshChip(); one look for every surface (macro,
   mic, events, dashboard scan, …). States: fresh / aging / stale / none.
   A `· manual` chip says the pull does NOT run on a timer (#17 honesty). */
.fresh-chip { display: inline-flex; align-items: center; gap: 6px; padding: 2px 8px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--panel-2); color: var(--muted);
  font-family: var(--mono); font-size: 0.66rem; line-height: 1.4; white-space: nowrap; vertical-align: middle; }
.fresh-chip::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--muted); flex: none; }
.fresh-chip.fresh { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 35%, var(--border)); }
.fresh-chip.fresh::before { background: var(--ok); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 22%, transparent); }
.fresh-chip.aging { color: var(--fg, #e6edf3); border-color: color-mix(in srgb, var(--warn) 30%, var(--border)); }
.fresh-chip.aging::before { background: var(--warn); }
.fresh-chip.stale { color: var(--warn); background: color-mix(in srgb, var(--warn) 12%, var(--panel-2));
  border-color: color-mix(in srgb, var(--warn) 40%, var(--border)); }
.fresh-chip.stale::before { background: var(--warn); box-shadow: 0 0 0 3px color-mix(in srgb, var(--warn) 22%, transparent); }
.fresh-chip.none { color: var(--muted); border-style: dashed; }
.fresh-chip.none::before { background: transparent; border: 1px solid var(--border-2); }

/* C1b-2: the single batched costed-AI button per surface ("Refresh intelligence ✦").
   A subtle accent tint marks it as THE intelligence action vs the free ↻ refreshes. */
.btn.intel-refresh { border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); color: var(--accent); }
.btn.intel-refresh:hover:not(:disabled) { background: color-mix(in srgb, var(--accent) 12%, transparent); }
.btn.intel-refresh:disabled { opacity: 0.6; }

.xref-livestatus { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 8px 0 2px; font-family: var(--mono); font-size: 0.7rem; color: var(--muted); }
.xref-ls-label { text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.7; margin-right: 2px; }
.xref-ls { display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: 999px; border: 1px solid var(--border); }
.xref-ls.on { color: var(--fg, #e6edf3); border-color: color-mix(in srgb, var(--ok, #3fb950) 40%, var(--border)); }
.xref-ls.off { opacity: 0.6; }
.xref-filters { display: flex; gap: 8px; margin: 12px 0; flex-wrap: wrap; }
.xref-fchip { font: inherit; font-size: 0.78rem; text-transform: capitalize; cursor: pointer;
  background: var(--panel-2); color: var(--muted); border: 1px solid var(--border);
  border-radius: 999px; padding: 4px 12px; }
.xref-fchip:hover { border-color: var(--accent-dim); color: var(--text); }
.xref-fchip.on { background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); border-color: var(--accent-dim); }

.xref-map { position: relative; width: 100%; aspect-ratio: 2.4 / 1; border-radius: var(--radius);
  overflow: hidden; border: 1px solid var(--border); margin-bottom: 14px; }
.xref-map-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.xref-ocean { fill: var(--panel-2); }
.xref-land { fill: var(--border-2); stroke: var(--border); stroke-width: 0.4; }
.xref-edge { stroke: var(--accent); stroke-width: 0.8; opacity: 0.45; }
.xref-edge.is-live { stroke: var(--danger); opacity: 0.7; stroke-dasharray: 3 2; }
.xref-map-overlay { position: absolute; inset: 0; pointer-events: none; }
.xref-node { position: absolute; width: 7px; height: 7px; transform: translate(-50%, -50%);
  border-radius: 50%; background: var(--nc, var(--muted));
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--nc, var(--muted)) 24%, transparent); pointer-events: auto; }
.xref-node::after { content: ''; position: absolute; inset: -8px; border-radius: 50%; }

.xref-list { display: flex; flex-direction: column; gap: 8px; }
.xref-card { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 12px; }
.xref-pair { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.xref-ent { font-weight: 600; padding-left: 12px; position: relative; }
.xref-ent::before { content: ''; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 7px; height: 7px; border-radius: 50%; background: var(--lc, var(--muted)); }
.xref-link { color: var(--muted); }
.xref-kind { margin-left: auto; font-family: var(--mono); font-size: 0.66rem; text-transform: uppercase;
  letter-spacing: .04em; padding: 2px 7px; border-radius: 6px; color: var(--muted); border: 1px solid var(--border); }
.xref-kind.proximity { color: var(--ext); border-color: color-mix(in srgb, var(--ext) 40%, transparent); }
.xref-kind.topic { color: var(--accent); border-color: var(--accent-dim); }
.xref-kind.impact { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 42%, transparent); }
.xref-kind.impact.sign-adverse { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.xref-kind.impact.sign-supportive { color: var(--ok); border-color: var(--accent-dim); }
.xref-kind.impact.sign-mixed { color: var(--muted); }
.xref-kind.signal { color: var(--accent); border-color: var(--accent-dim); }
.xref-kind.signal.bull { color: var(--ok); border-color: var(--accent-dim); }
.xref-kind.signal.bear { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.xref-kind.is-live { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.xref-why { color: var(--muted); font-size: 0.84rem; margin: 5px 0 8px; }
.xref-meta { display: flex; align-items: center; gap: 12px; }
.xref-relbar { flex: 1; height: 5px; border-radius: 3px; background: var(--panel-2); overflow: hidden; max-width: 220px; }
.xref-relbar > span { display: block; height: 100%; background: linear-gradient(90deg, var(--accent-dim), var(--accent)); }
.xref-out { margin-top: 9px; padding-top: 9px; border-top: 1px dashed var(--border); }
.xref-ex-text { font-size: 0.86rem; line-height: 1.5; white-space: pre-wrap; }
.xref-ex-tag { font-family: var(--mono); font-size: 0.66rem; margin-top: 6px; }
.xref-foot { margin-top: 16px; font-size: 0.76rem; line-height: 1.5; }

/* Connections dashboard mini-tile */
.xmini { display: flex; flex-direction: column; gap: 6px; cursor: pointer; height: 100%; }
.xmini-list { display: flex; flex-direction: column; gap: 6px; flex: 1; overflow: hidden; }
.xmini-row { display: flex; align-items: center; gap: 6px; font-size: 0.8rem; line-height: 1.3; }
.xmini-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--lc, var(--muted)); }
.xmini-pair { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xmini-link { color: var(--muted); font-weight: 400; }
.xmini-live { flex: none; font-family: var(--mono); font-size: 0.6rem; text-transform: uppercase;
  color: var(--danger); border: 1px solid color-mix(in srgb, var(--danger) 45%, transparent); border-radius: 5px; padding: 0 4px; }
.xmini-why { margin-left: auto; flex: none; color: var(--muted); font-family: var(--mono); font-size: 0.66rem; white-space: nowrap; }
.xmini-foot { display: flex; align-items: center; justify-content: space-between; font-size: 0.78rem; }
.xmini-foot > span:first-child { color: var(--muted); font-family: var(--mono); }
.xmini-cta { color: var(--accent); }
.xmini:hover .xmini-cta { text-decoration: underline; }
/* D1a(i) — Connections-mini freshness row (reuses .xref-fresh-chip/.xref-fresh-dot/.xref-fresh-txt). */
.xmini-fresh { display: flex; align-items: center; gap: 6px; cursor: default; }
.xmini-fresh .xref-fresh-chip { padding: 2px 7px; font-size: 0.68rem; }
.xmini-fresh .xref-fresh-dot { width: 6px; height: 6px; }
.xmini-fresh .btn.sm { padding: 1px 7px; line-height: 1.4; }
.xmini-fresh .xref-fresh-txt { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* D1b — honest "scanned · ago" stamp on the cards that VIEW the manual data_mic
   scan (Today · Highlights · Watch · Snapshot). Default = quiet/muted; amber when
   stale (>~1h); a softer cue when no scan has run. NEVER an auto-scan. */
.scan-fresh-slot { display: inline-flex; align-items: center; }
.scan-fresh { font-family: var(--mono); font-size: 0.64rem; color: var(--muted); white-space: nowrap;
  border: 1px solid var(--border); border-radius: 999px; padding: 1px 7px; }
.scan-fresh.none { opacity: 0.85; border-style: dashed; }
.scan-fresh.stale { color: var(--warn, #d29922); border-color: color-mix(in srgb, var(--warn, #d29922) 40%, var(--border));
  background: color-mix(in srgb, var(--warn, #d29922) 10%, transparent); }
.bf-greet .scan-fresh { align-self: flex-start; margin-top: 2px; }

/* ============================================================================
   Events (Event Database #4) — the Events tab (.ev-*) + the dashboard tile (.emini-*)
   ============================================================================ */
.ev-wrap { padding: 18px 20px 28px; max-width: 1100px; margin: 0 auto; }
.ev-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.ev-head h2 { margin: 0 0 4px; font-size: 1.4rem; }
.ev-head p { margin: 0; max-width: 640px; }
.ev-counts { font-family: var(--mono); font-size: 0.78rem; color: var(--muted); white-space: nowrap; padding-top: 6px; }
.ev-filters { display: flex; align-items: center; gap: 8px; margin: 16px 0 12px; flex-wrap: wrap; }
.ev-fchip { background: var(--panel-2); color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 5px 12px; cursor: pointer; font-size: 0.82rem; text-transform: capitalize; display: inline-flex; align-items: center; gap: 6px; }
.ev-fchip:hover { color: var(--text); border-color: var(--border-2); }
.ev-fchip.on { color: #04110e; background: var(--accent); border-color: var(--accent); }
.ev-fcount { font-family: var(--mono); font-size: 0.72rem; opacity: 0.85; }
.ev-spacer { flex: 1; }
.ev-clear { background: none; border: 1px solid var(--border); color: var(--muted); border-radius: 6px; padding: 4px 10px; cursor: pointer; font-size: 0.76rem; }
.ev-clear:hover { color: var(--danger); border-color: var(--danger); }

.ev-list { display: flex; flex-direction: column; gap: 10px; }
.ev-card { background: var(--panel); border: 1px solid var(--border); border-left: 3px solid var(--border-2); border-radius: 10px; padding: 12px 14px; }
.ev-card.state-active { border-left-color: var(--ok); }
.ev-card.state-watch { border-left-color: var(--warn); }
.ev-card.state-closed { border-left-color: var(--border-2); opacity: 0.62; }
.ev-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ev-dir { font-size: 0.78rem; }
.ev-dir.dir-up { color: var(--ok); } .ev-dir.dir-down { color: var(--danger); } .ev-dir.dir-neutral { color: var(--muted); }
.ev-label { font-weight: 600; font-size: 0.98rem; }
.ev-badge { font-family: var(--mono); font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.04em; padding: 2px 7px; border-radius: 5px; background: var(--panel-2); color: var(--muted); border: 1px solid var(--border); }
.ev-badge.market { color: var(--ext); } .ev-badge.signal { color: var(--warn); } .ev-badge.geo { color: var(--danger); }
.ev-impact { font-family: var(--mono); font-size: 0.66rem; text-transform: uppercase; padding: 2px 7px; border-radius: 5px; border: 1px solid var(--border); color: var(--muted); }
.ev-impact.imp-high { color: var(--danger); border-color: var(--danger); }
.ev-impact.imp-medium { color: var(--warn); border-color: var(--warn); }
.ev-state { margin-left: auto; font-family: var(--mono); font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.03em; padding: 2px 8px; border-radius: 999px; }
.ev-state.st-active { color: var(--ok); background: color-mix(in srgb, var(--ok) 14%, transparent); }
.ev-state.st-watch { color: var(--warn); background: color-mix(in srgb, var(--warn) 14%, transparent); }
.ev-state.st-closed { color: var(--muted); background: var(--panel-2); }
.ev-headline { margin-top: 6px; font-size: 0.9rem; color: var(--text); }
.ev-body { margin-top: 5px; font-size: 0.86rem; color: var(--muted); line-height: 1.45; }
.ev-meta { margin-top: 8px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 0.76rem; }
.ev-term { font-family: var(--mono); color: var(--ext); }
.ev-prob { font-family: var(--mono); color: var(--text); }
.ev-prob-tag { color: var(--muted); font-size: 0.64rem; text-transform: uppercase; letter-spacing: 0.03em; }
.ev-corr { font-family: var(--mono); color: var(--muted); }
.ev-times { margin-left: auto; font-family: var(--mono); color: var(--muted); font-size: 0.72rem; }
.ev-srcs { margin-top: 8px; display: flex; gap: 8px; flex-wrap: wrap; }
.ev-src { font-size: 0.72rem; color: var(--ext); text-decoration: none; border: 1px solid var(--border); border-radius: 5px; padding: 2px 7px; }
.ev-src:hover { border-color: var(--ext); }
.ev-actions { margin-top: 10px; display: flex; gap: 6px; flex-wrap: wrap; }
.ev-act { background: var(--panel-2); border: 1px solid var(--border); color: var(--muted); border-radius: 6px; padding: 3px 10px; cursor: pointer; font-size: 0.74rem; }
.ev-act:hover { color: var(--text); border-color: var(--border-2); }
/* Slice 0 — headline → composer / clipboard + the watch toggle's on-state. */
.ev-act.ev-compose { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); }
.ev-act.ev-compose:hover { color: var(--accent); border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, var(--panel-2)); }
.ev-act.ev-copy:hover { color: var(--text); }
.ev-act.on { color: var(--ok); border-color: var(--ok); }
.ev-act.on:hover { color: var(--ok); border-color: var(--ok); background: color-mix(in srgb, var(--ok) 12%, var(--panel-2)); }
.ev-foot { margin-top: 16px; font-size: 0.76rem; line-height: 1.5; border-top: 1px solid var(--border); padding-top: 12px; }

/* v0.74.0 — News→Impact Discovery opportunity panel ----------------------- */
.ev-opps-btn { color: var(--accent); border-color: var(--accent-dim); }
.ev-opps-btn:hover { color: var(--accent); border-color: var(--accent); }
.ev-opps-cached { color: var(--ok); font-weight: 700; }
.ev-opps:empty { display: none; }
.ev-opps { margin-top: 10px; }
.opp-card { background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent-dim); border-radius: 9px; padding: 11px 12px; }
.opp-card.opp-err { border-left-color: var(--danger); }
.opp-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.opp-tag { font-family: var(--mono); font-size: 0.7rem; letter-spacing: .04em; color: var(--accent); border: 1px solid var(--accent-dim); border-radius: 5px; padding: 1px 7px; }
.opp-aiest { font-size: 0.68rem; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
.opp-asof { font-size: 0.68rem; color: var(--muted); font-family: var(--mono); }
.opp-rerun, .opp-close { margin-left: auto; background: var(--panel); border: 1px solid var(--border); color: var(--muted); border-radius: 6px; padding: 2px 8px; cursor: pointer; font-size: 0.72rem; }
.opp-close { margin-left: 0; }
.opp-rerun:hover, .opp-close:hover { color: var(--text); border-color: var(--border-2); }
.opp-sec.sign-supportive { border-color: var(--ok); } .opp-sec.sign-adverse { border-color: var(--danger); } .opp-sec.sign-mixed { border-color: var(--warn); }
.opp-chain { margin-top: 9px; font-size: 0.82rem; line-height: 1.5; }
.opp-chain b, .opp-watch b { color: var(--muted); font-weight: 600; }
.opp-cands { margin-top: 10px; display: flex; flex-direction: column; gap: 7px; }
.opp-cand { background: var(--panel); border: 1px solid var(--border); border-left: 3px solid var(--border-2); border-radius: 8px; padding: 8px 10px; }
.opp-cand.sign-supportive { border-left-color: var(--ok); } .opp-cand.sign-adverse { border-left-color: var(--danger); } .opp-cand.sign-mixed { border-left-color: var(--warn); }
.opp-cand-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.opp-tkr { font-family: var(--mono); font-weight: 700; color: var(--text); font-size: 0.86rem; }
.opp-name { color: var(--muted); font-size: 0.8rem; }
.opp-sign { font-size: 0.68rem; text-transform: uppercase; letter-spacing: .03em; padding: 1px 7px; border-radius: 5px; cursor: help; }
.opp-sign.sign-supportive { color: var(--ok); border: 1px solid var(--ok); } .opp-sign.sign-adverse { color: var(--danger); border: 1px solid var(--danger); } .opp-sign.sign-mixed { color: var(--warn); border: 1px solid var(--warn); }
.opp-add { background: var(--accent); color: #04110e; border: none; border-radius: 6px; padding: 3px 11px; cursor: pointer; font-size: 0.74rem; font-weight: 600; }
.opp-add:hover { filter: brightness(1.08); }
.opp-add.on { background: var(--panel-2); color: var(--ok); border: 1px solid var(--ok); cursor: pointer; filter: none; }
.opp-add.on:hover { filter: brightness(1.12); }
.opp-add:disabled { background: var(--panel-2); color: var(--ok); border: 1px solid var(--ok); cursor: default; filter: none; }
/* MOVE 1 (E-LOOP) — candidate action group (Deep Dive / Plan this / + watch) */
.opp-cand-acts { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.opp-act { background: var(--panel-2); color: var(--text); border: 1px solid var(--border-2); border-radius: 6px; padding: 3px 9px; cursor: pointer; font-size: 0.72rem; font-weight: 600; white-space: nowrap; }
.opp-act:hover { border-color: var(--accent); color: var(--accent); }
.opp-plan { border-color: var(--accent); color: var(--accent); }
.opp-plan:hover { background: var(--accent); color: #04110e; }
/* MOVE 1 (E-LOOP) — the "what matters most" verdict lead */
.opp-verdict { margin: 8px 0; padding: 8px 10px; background: var(--panel-2); border: 1px solid var(--border-2); border-left: 3px solid var(--accent); border-radius: 8px; }
.opp-vd-lbl { display: block; font-size: 0.72rem; font-weight: 700; letter-spacing: .03em; color: var(--accent); margin-bottom: 5px; }
.opp-vd-row { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; font-size: 0.78rem; margin: 2px 0; }
.opp-vd-tkr { font-family: var(--mono); font-weight: 700; color: var(--text); }
.opp-vd-call { font-family: var(--mono); font-size: 0.7rem; font-weight: 700; border-radius: 5px; padding: 0 6px; border: 1px solid var(--border-2); }
.opp-vd-call.call-long { color: var(--ok); border-color: var(--ok); }
.opp-vd-call.call-short { color: var(--danger); border-color: var(--danger); }
.opp-vd-tier { font-size: 0.72rem; color: var(--muted); }
.opp-vd-why { color: var(--muted); font-size: 0.74rem; }
.opp-vd-foot { display: block; margin-top: 5px; font-size: 0.68rem; color: var(--muted); }
.opp-why { margin-top: 5px; font-size: 0.78rem; line-height: 1.45; color: var(--text); }
.opp-cand-meta { margin-top: 6px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 0.72rem; color: var(--muted); }
.opp-cls { font-family: var(--mono); text-transform: uppercase; letter-spacing: .03em; }
.opp-sector { color: var(--muted); }
.opp-prob { font-family: var(--mono); color: var(--text); } .opp-est { color: var(--muted); font-size: 0.62rem; text-transform: uppercase; letter-spacing: .03em; }
.opp-hzn { color: var(--muted); }
.opp-srcs { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.opp-src { color: var(--ext); text-decoration: none; border: 1px solid var(--border); border-radius: 5px; padding: 1px 6px; }
.opp-src:hover { border-color: var(--ext); }
.opp-watch { margin-top: 9px; font-size: 0.8rem; line-height: 1.45; }
.opp-empty, .opp-errmsg { margin-top: 9px; font-size: 0.8rem; color: var(--muted); }
.opp-errmsg { color: var(--danger); }
.opp-foot { margin-top: 9px; font-size: 0.7rem; line-height: 1.45; color: var(--muted); border-top: 1px solid var(--border); padding-top: 7px; }
.opp-loading .opp-spin { margin-top: 9px; font-size: 0.8rem; color: var(--muted); }
/* v0.74.1 — keep the panel inside the card on narrow/mobile views. Flex items
   default to min-width:auto and won't shrink below their content, which pushed
   the loading/result text outside the card; min-width:0 + wrap fixes it. */
.ev-card { overflow: hidden; }
.ev-card, .ev-opps, .opp-card { max-width: 100%; }
.opp-card { overflow-wrap: anywhere; word-break: break-word; }
.opp-card, .opp-card * { min-width: 0; }
.opp-head, .opp-cand-top, .opp-cand-meta, .opp-cands { flex-wrap: wrap; }
.opp-name { flex: 1 1 auto; }
.opp-src, .opp-srcs { word-break: break-all; }

/* dashboard mini-tile */
.emini { display: flex; flex-direction: column; gap: 8px; height: 100%; cursor: pointer; }
.emini-counts { display: flex; gap: 6px; flex-wrap: wrap; }
.emini-pill { font-family: var(--mono); font-size: 0.68rem; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border); color: var(--muted); }
.emini-pill.active { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 45%, var(--border)); }
.emini-pill.watch { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 45%, var(--border)); }
.emini-pill.closed { color: var(--muted); }
.emini-list { flex: 1; display: flex; flex-direction: column; gap: 5px; overflow: hidden; }
.emini-row { display: flex; align-items: center; gap: 7px; font-size: 0.78rem; }
.emini-dir.dir-up { color: var(--ok); } .emini-dir.dir-down { color: var(--danger); } .emini-dir.dir-neutral { color: var(--muted); }
.emini-label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.emini-st { font-family: var(--mono); font-size: 0.62rem; text-transform: uppercase; padding: 1px 6px; border-radius: 4px; }
.emini-st.st-active { color: var(--ok); } .emini-st.st-watch { color: var(--warn); } .emini-st.st-closed { color: var(--muted); }
.emini-age { font-family: var(--mono); font-size: 0.66rem; color: var(--muted); min-width: 30px; text-align: right; }
.emini-foot { display: flex; align-items: center; justify-content: space-between; font-size: 0.78rem; }
.emini-foot > span:first-child { color: var(--muted); font-family: var(--mono); }
.emini-cta { color: var(--accent); }
.emini:hover .emini-cta { text-decoration: underline; }

/* v1.131.0 — BREAKING NEWS dashboard card (.brk-*) — the EI-0 priority-ranked strip as a tile */
.brk { display: flex; flex-direction: column; gap: 8px; height: 100%; cursor: pointer; }
.brk-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.brk-title { font-weight: 600; font-size: 0.82rem; color: var(--text); }
.brk-sub { font-family: var(--mono); font-size: 0.6rem; }
.brk-list { flex: 1; display: flex; flex-direction: column; gap: 5px; overflow: hidden; }
.brk-row { display: flex; align-items: center; gap: 7px; font-size: 0.78rem; }
.brk-tier { font-family: var(--mono); font-size: 0.6rem; text-transform: uppercase; letter-spacing: .03em;
  padding: 1px 6px; border-radius: 4px; border: 1px solid var(--border); color: var(--muted); }
.brk-tier.t-crit { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 55%, var(--border)); background: color-mix(in srgb, var(--danger) 12%, transparent); }
.brk-tier.t-high { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, var(--border)); }
.brk-tier.t-med  { color: var(--warn);   border-color: color-mix(in srgb, var(--warn) 45%, var(--border)); }
.brk-tier.t-low  { color: var(--muted); }
.brk-pri { font-family: var(--mono); font-size: 0.7rem; color: var(--text); min-width: 18px; text-align: right; }
.brk-label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.brk-meta { font-family: var(--mono); font-size: 0.62rem; white-space: nowrap; }
.brk-age { font-family: var(--mono); font-size: 0.66rem; min-width: 30px; text-align: right; }
.brk-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 0.72rem; }
.brk-foot > span:first-child { font-size: 0.62rem; }
.brk-cta { color: var(--accent); flex: 0 0 auto; }
.brk:hover .brk-cta { text-decoration: underline; }

/* ============================================================================
   v0.41.0 — two-section dashboard bands · shared tooltip · layout matrix
   ========================================================================== */

/* Section band headers inside the free-form grid (Context / Markets). The grid
   is position:relative and tiles are position:absolute; the band is a full-width
   labelled divider positioned at the section's top by the packer. pointer-events
   are off so it never blocks a tile drag. */
.dash-band { position: absolute; left: 0; right: 0; height: 22px; display: flex; align-items: baseline; gap: 10px;
  pointer-events: none; border-bottom: 1px solid var(--border); padding-bottom: 4px; z-index: 1; }
.dash-band-l { font-family: var(--mono); font-size: 0.72rem; text-transform: uppercase; letter-spacing: .14em; color: var(--text); }
.dash-band-s { font-size: 0.7rem; color: var(--muted); }

/* Shared hover-explanation tooltip (ui_tips.js). Mirrors the World Map's own
   tip styling but fixed-positioned so it works anywhere in the portal. */
.ui-tip { position: fixed; left: 0; top: 0; max-width: 280px; padding: 7px 10px;
  background: var(--panel); border: 1px solid var(--border-2); border-radius: 9px;
  color: var(--text); font-size: 0.78rem; line-height: 1.4; pointer-events: none;
  opacity: 0; transform: translateY(2px); transition: opacity .1s ease, transform .1s ease;
  z-index: 9999; box-shadow: 0 6px 22px rgba(0,0,0,.35); }
.ui-tip.on { opacity: 1; transform: translateY(0); }
/* anything carrying a tooltip gets a subtle affordance on hover */
[data-tip] { cursor: help; }
[data-tip].tk-chip, [data-tip].fin-tag, [data-tip].pill, [data-tip].emini-pill { cursor: default; }

/* Settings → Layout & tiles visibility matrix */
.lt-matrix { display: flex; flex-direction: column; gap: 12px; }
.lt-group .kv { margin-bottom: 6px; }
.lt-list { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.lt-foot { display: flex; align-items: center; gap: 10px; margin-top: 12px; flex-wrap: wrap; }

/* ── Expandable line/candle chart modal (v0.48.0, Lightweight Charts™) ───────── */
.chart-modal { position: fixed; inset: 0; z-index: 200; display: flex; align-items: center;
  justify-content: center; background: rgba(0,0,0,.55); backdrop-filter: blur(2px); padding: 3vmin; }
.chart-card { width: min(960px, 96vw); height: min(640px, 88vh); display: flex; flex-direction: column;
  background: var(--panel); border: 1px solid var(--border-2); border-radius: 12px; overflow: hidden;
  box-shadow: 0 18px 60px rgba(0,0,0,.5); }
.chart-head { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 9px 12px; border-bottom: 1px solid var(--border); }
.chart-title { display: flex; align-items: baseline; gap: 8px; font-family: var(--mono); }
.chart-sym { font-weight: 700; font-size: 1rem; color: var(--text); }
.chart-cls { font-size: .66rem; letter-spacing: .04em; }
.chart-ctrls { display: flex; align-items: center; gap: 8px; }
.chart-seg { display: inline-flex; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.chart-seg button { background: none; border: none; color: var(--muted); cursor: pointer;
  padding: 4px 9px; font-size: .72rem; border-right: 1px solid var(--border); }
.chart-seg button:last-child { border-right: none; }
.chart-seg button.on { background: var(--accent); color: #fff; }
.chart-x { background: none; border: 1px solid var(--border); color: var(--muted); border-radius: 7px;
  width: 26px; height: 26px; cursor: pointer; font-size: .8rem; }
.chart-x:hover { color: var(--text); border-color: var(--border-2); }
.chart-body { position: relative; flex: 1 1 auto; min-height: 0; }
.chart-canvas { position: absolute; inset: 0; }
.chart-state { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  text-align: center; padding: 18px; font-size: .8rem; pointer-events: none; }
.chart-foot { padding: 6px 12px; border-top: 1px solid var(--border); font-size: .62rem; }
.chart-sigs { padding: 8px 12px; border-top: 1px solid var(--border); max-height: 30vh; overflow: auto; font-size: .68rem; }
.sig-loading { padding: 4px 0; font-size: .66rem; }
.sig-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.sig-title { font-weight: 600; letter-spacing: .02em; }
.sig-lean { font-weight: 700; font-size: .66rem; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border); white-space: nowrap; }
.sig-lean.up { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 45%, transparent); }
.sig-lean.down { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.sig-lean.flat { color: var(--muted); }
.sig-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 18px; }
.sig-sub { font-size: .6rem; text-transform: uppercase; letter-spacing: .05em; margin: 2px 0; }
.sig-row { display: flex; justify-content: space-between; gap: 10px; padding: 1px 0; }
.sig-k { flex: 0 0 auto; }
.sig-v { text-align: right; font-variant-numeric: tabular-nums; }
.sig-pats { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 4px; }
.sig-chip { font-size: .6rem; padding: 1px 7px; border-radius: 999px; border: 1px solid var(--border); }
.sig-chip.up { color: var(--ok); } .sig-chip.down { color: var(--danger); } .sig-chip.flat { color: var(--muted); }
.sig-foot { margin-top: 6px; font-size: .58rem; }
@media (max-width: 600px) { .chart-card { height: 86vh; } .chart-cls { display: none; } .sig-cols { grid-template-columns: 1fr; } }

/* ── Per-tab explainer header (v0.49.0) ─────────────────────────────────────── */
.tab-intro { display: flex; align-items: flex-start; gap: 10px; max-width: var(--page-w, 1080px); margin: 0 auto 12px;
  padding: 10px 12px; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--accent);
  border-radius: var(--radius); }
.tab-intro-i { color: var(--accent); font-size: 0.95rem; line-height: 1.3; flex: 0 0 auto; }
.tab-intro-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.tab-intro-body b { color: var(--text); font-size: 0.84rem; }
.tab-intro-body span { color: var(--muted); font-size: 0.78rem; line-height: 1.45; }
.tab-intro-x { flex: 0 0 auto; background: none; border: none; color: var(--muted); cursor: pointer; font-size: 0.78rem; padding: 0 2px; opacity: 0.7; }
.tab-intro-x:hover { opacity: 1; color: var(--text); }
.tab-intro.mini { display: block; max-width: var(--page-w, 1080px); margin: 0 auto 10px; padding: 0; background: none; border: none; }
.tab-intro-show { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 0.72rem; padding: 2px 0; opacity: 0.75; }
.tab-intro-show:hover { color: var(--accent); opacity: 1; }
/* keep the explainer readable-narrow on the form/reading tabs (match v0.42.0) */
.panel:has(.settings) .tab-intro, .panel:has(.hlp-page) .tab-intro, .panel:has(.rep-wrap) .tab-intro { max-width: 820px; }

/* ============================================================================
   Rates & Macro (v0.51.0) — dense FRED table. Real figures only, no advice.
   ========================================================================== */
.macro-wrap { padding: 18px 22px 28px; max-width: 1100px; }
.macro-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.macro-title { margin: 0; font-size: 1.15rem; }
.macro-lead { max-width: 720px; }
.macro-actions { display: flex; align-items: center; gap: 10px; white-space: nowrap; }
.macro-status { font-family: var(--mono); font-size: 0.68rem; }
.macro-load { padding: 28px 4px; color: var(--muted); font-family: var(--mono); font-size: 0.78rem; }
.macro-empty { padding: 22px 4px; max-width: 620px; }
.macro-empty p { margin: 0 0 10px; }
.macro-empty .btn { margin-top: 4px; }

.macro-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 4px; }
.macro-chip {
  font-family: var(--mono); font-size: 0.68rem; letter-spacing: .02em;
  padding: 4px 9px; border-radius: 999px; border: 1px solid var(--border-2);
  color: var(--muted); background: var(--panel-2); cursor: default;
}
.macro-chip.warn { color: var(--warn); border-color: var(--warn); }
.macro-chip.ok   { color: var(--ok); border-color: var(--accent-dim); }

.macro-group { margin-top: 18px; }
.macro-group-h {
  font-family: var(--mono); font-size: 0.7rem; text-transform: uppercase; letter-spacing: .14em;
  color: var(--muted); margin: 0 0 6px; padding-bottom: 5px; border-bottom: 1px solid var(--border);
}
.macro-tbl { width: 100%; border-collapse: collapse; font-size: 0.86rem; }
.macro-tbl thead th {
  text-align: left; font-family: var(--mono); font-size: 0.62rem; text-transform: uppercase;
  letter-spacing: .1em; color: var(--muted); font-weight: 500; padding: 4px 10px 4px 0;
}
.macro-tbl tbody td { padding: 7px 10px 7px 0; border-bottom: 1px solid var(--border); vertical-align: baseline; }
.macro-tbl tbody tr:last-child td { border-bottom: none; }
.macro-name { width: 38%; }
.macro-name span[data-tip] { cursor: help; border-bottom: 1px dotted var(--border-2); }
.macro-id { display: inline-block; margin-left: 8px; font-family: var(--mono); font-size: 0.62rem; color: var(--muted); opacity: .8; }
.macro-val { font-family: var(--mono); font-weight: 600; font-size: 0.95rem; white-space: nowrap; }
.macro-val.warn { color: var(--warn); }
.macro-sub { font-family: var(--mono); font-size: 0.62rem; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }
.macro-delta { font-family: var(--mono); font-size: 0.74rem; white-space: nowrap; }
.macro-delta.up { color: var(--ok); }
.macro-delta.down { color: var(--danger); }
.macro-delta.flat { color: var(--muted); }
.macro-asof { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); white-space: nowrap; }
.macro-foot { margin-top: 20px; font-size: 0.74rem; max-width: 820px; }

/* Rates & Macro — economic calendar section (v0.52.0). AI-assembled, labelled. */
.macro-global { margin-top: 26px; padding-top: 16px; border-top: 1px solid var(--border); }
.macro-global-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.macro-global-title { margin: 0; font-size: 1.0rem; }
.macro-global-actions { display: flex; align-items: center; gap: 10px; }
.macro-global-status { font-family: var(--mono); font-size: 0.66rem; }
.macro-global-hint { max-width: 760px; margin-top: 8px; }
.macro-gtable { width: 100%; margin-top: 10px; }
.macro-gtable .num { text-align: right; font-family: var(--mono); }
.macro-gfoot { margin-top: 10px; font-size: 0.72rem; max-width: 820px; }
.macro-cal { margin-top: 26px; padding-top: 16px; border-top: 1px solid var(--border); }
.macro-cal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.macro-cal-title { margin: 0; font-size: 1.0rem; }
.macro-cal-actions { display: flex; align-items: center; gap: 10px; }
.macro-cal-status { font-family: var(--mono); font-size: 0.66rem; }
.macro-cal-hint { max-width: 760px; margin-top: 8px; }
.cal-empty { padding: 14px 2px; }
.cal-day { margin-top: 14px; }
.cal-day.today { border-left: 2px solid var(--accent); padding-left: 12px; margin-left: -14px; }
.cal-day-h {
  font-family: var(--mono); font-size: 0.7rem; text-transform: uppercase; letter-spacing: .1em;
  color: var(--muted); margin-bottom: 6px;
}
.cal-today-tag { color: var(--accent); }
.cal-row { display: flex; gap: 12px; padding: 6px 0; border-bottom: 1px solid var(--border); }
.cal-row:last-child { border-bottom: none; }
.cal-time { font-family: var(--mono); font-size: 0.74rem; color: var(--muted); min-width: 72px; padding-top: 2px; white-space: nowrap; }
.cal-main { flex: 1; min-width: 0; }
.cal-line1 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cal-line2 { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 3px; }
.cal-imp {
  font-family: var(--mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: .06em;
  padding: 1px 6px; border-radius: 4px; border: 1px solid var(--border-2);
}
.cal-imp.hi { color: var(--danger); border-color: var(--danger); }
.cal-imp.med { color: var(--warn); border-color: var(--warn); }
.cal-imp.lo { color: var(--muted); }
.cal-event { font-weight: 600; font-size: 0.9rem; }
.cal-country { font-family: var(--mono); font-size: 0.66rem; color: var(--muted); }
.cal-cat { font-family: var(--mono); font-size: 0.6rem; color: var(--muted); padding: 1px 6px; border-radius: 999px; background: var(--panel-2); }
.cal-cat.summit { color: var(--accent); }
.cal-src { font-family: var(--mono); font-size: 0.6rem; color: var(--muted); cursor: help; border-bottom: 1px dotted var(--border-2); }
.cal-fp { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); }
.cal-fp b { color: var(--text); }
.cal-affects { display: inline-flex; gap: 5px; flex-wrap: wrap; }
.cal-aff { font-family: var(--mono); font-size: 0.62rem; color: var(--muted); border: 1px solid var(--border-2); border-radius: 4px; padding: 0 5px; }

/* ============================================================================
   Rules engine (v0.53.0) — cross-reference checks + macro-regime read.
   Analysis only: the regime lean is a labelled deterministic factor, NOT a
   probability and NOT advice.
   ============================================================================ */
.rules-wrap { padding: 18px 22px 28px; max-width: 1040px; }
.rules-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.rules-title { margin: 0; font-size: 1.15rem; }
.rules-lead { max-width: 680px; margin: 4px 0 0; font-size: 0.82rem; }
.rules-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rules-advhint { margin: 8px 0 0; font-size: 0.78rem; line-height: 1.5; }
.rules-in {
  background: var(--panel-2); border: 1px solid var(--border-2); color: var(--text);
  border-radius: 7px; padding: 7px 10px; font-size: 0.84rem; font-family: inherit;
}
.rules-in:focus { outline: none; border-color: var(--accent-dim); }
.rules-sym { width: 150px; font-family: var(--mono); }
.rules-ta { width: 100%; min-height: 56px; resize: vertical; margin-top: 8px; }
.rules-sel { padding: 7px 8px; }
.btn.ghost.on { color: var(--accent); border-color: var(--accent-dim); }

.rules-asset {
  display: inline-block; margin: 12px 0 0; font-family: var(--mono); font-size: 0.74rem;
  color: var(--accent); border: 1px solid var(--accent-dim); border-radius: 6px; padding: 2px 8px; cursor: help;
}

/* conclusion card */
.rules-concl { margin: 14px 0 8px; padding: 14px 16px; background: var(--panel); border: 1px solid var(--border); border-radius: 10px; }
.rules-concl-top { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.rules-regime {
  font-weight: 700; font-size: 0.92rem; letter-spacing: .02em; padding: 3px 12px; border-radius: 999px;
  border: 1px solid var(--border-2); color: var(--text); cursor: help;
}
.rules-regime.warn { color: var(--warn); border-color: var(--warn); }
.rules-regime.ok   { color: var(--ok); border-color: var(--accent-dim); }
.rules-regime.muted { color: var(--muted); }
.rules-lean { font-family: var(--mono); font-size: 0.8rem; color: var(--muted); cursor: help; }
.rules-counts { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); margin-left: auto; }
.rules-ips { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 10px 0 4px; }
.rules-ip { font-family: var(--mono); font-size: 0.66rem; padding: 1px 7px; border-radius: 5px; border: 1px solid var(--border-2); color: var(--muted); cursor: help; }
.rules-ip.on  { color: var(--ok); border-color: var(--accent-dim); }
.rules-ip.off { color: var(--muted); opacity: .7; }
.rules-asof { font-family: var(--mono); font-size: 0.64rem; color: var(--muted); }
.rules-honest { margin: 8px 0 0; font-size: 0.74rem; color: var(--muted); line-height: 1.5; }
.rules-honest strong { color: var(--warn); }

/* result rows */
.rules-list { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }
.rules-row { padding: 9px 12px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; border-left: 3px solid var(--border-2); }
.rules-row.st-flag    { border-left-color: var(--warn); }
.rules-row.st-pass    { border-left-color: var(--ok); }
.rules-row.st-nodata  { border-left-color: var(--border-2); opacity: .82; }
.rules-row.st-pending { border-left-color: var(--border-2); opacity: .68; }
.rules-row-h { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.rules-pill {
  font-family: var(--mono); font-size: 0.6rem; text-transform: uppercase; letter-spacing: .06em;
  padding: 1px 7px; border-radius: 4px; border: 1px solid var(--border-2); color: var(--muted);
}
.rules-pill.flag { color: var(--warn); border-color: var(--warn); }
.rules-pill.pass { color: var(--ok); border-color: var(--accent-dim); }
.rules-pill.info { color: var(--muted); }
.rules-pill.nodata, .rules-pill.pending { color: var(--muted); opacity: .8; }
.rules-name { font-weight: 600; font-size: 0.9rem; }
.rules-kind { font-family: var(--mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: .05em; padding: 1px 6px; border-radius: 4px; border: 1px solid var(--border-2); cursor: help; }
.rules-kind.det { color: var(--accent); border-color: var(--accent-dim); }
.rules-kind.ai  { color: var(--muted); }
.rules-cat { font-family: var(--mono); font-size: 0.62rem; color: var(--muted); padding: 1px 6px; border-radius: 999px; background: var(--panel); }
.rules-score { font-family: var(--mono); font-size: 0.7rem; padding: 0 6px; border-radius: 4px; cursor: help; }
.rules-score.up   { color: var(--ok); }
.rules-score.down { color: var(--warn); }
.rules-row-b { margin-top: 5px; font-size: 0.82rem; line-height: 1.45; }
.rules-signal { font-weight: 600; color: var(--text); margin-right: 7px; }
.rules-reason { color: var(--muted); }
.rules-prov { margin-top: 4px; font-family: var(--mono); font-size: 0.62rem; color: var(--muted); opacity: .85; }
.rules-wtv { font-family: var(--mono); font-size: 0.68rem; color: var(--muted); cursor: help; }
.rules-wtv.solo { margin-left: auto; }
.rules-manage { display: inline-flex; align-items: center; gap: 5px; margin-left: auto; }
.rules-wt { background: var(--panel); border: 1px solid var(--border-2); color: var(--text); width: 20px; height: 20px; border-radius: 5px; cursor: pointer; line-height: 1; }
.rules-wt:hover { border-color: var(--accent-dim); color: var(--accent); }

/* manage panel */
.rules-mpanel { margin: 14px 0; padding: 14px 16px; background: var(--panel); border: 1px solid var(--border-2); border-radius: 10px; }
.rules-mhead { margin-bottom: 8px; font-size: 0.86rem; }
.rules-mrow { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--border); }
.rules-en { display: flex; align-items: center; gap: 7px; min-width: 240px; font-size: 0.84rem; cursor: pointer; }
.rules-del { background: none; border: 1px solid var(--border-2); color: var(--danger); width: 22px; height: 22px; border-radius: 5px; cursor: pointer; }
.rules-builtin { font-family: var(--mono); font-size: 0.6rem; color: var(--muted); cursor: help; }
.rules-addbox { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
.rules-addrow { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.rules-mfoot { margin-top: 12px; }
.rules-foot { margin-top: 14px; font-size: 0.74rem; line-height: 1.5; }

/* ── Advisor run (v0.54.0, step D) — AI synthesis card inside the Rules tab ── */
.adv-runbtn { background: var(--panel-2); border: 1px solid var(--accent-dim); color: var(--accent); }
.adv-runbtn:hover { filter: none; background: var(--panel); border-color: var(--accent); }
.adv-runbtn:disabled { opacity: .6; cursor: default; }
.adv-card { margin: 12px 0 4px; padding: 14px 16px; background: var(--panel); border: 1px solid var(--accent-dim); border-radius: 10px; }
.adv-card.err { border-color: var(--warn); }
.adv-card.loading { border-style: dashed; }
.adv-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.adv-badge { font-family: var(--mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: .06em; color: var(--accent); border: 1px solid var(--accent-dim); border-radius: 5px; padding: 1px 7px; }
.adv-bias { font-weight: 700; font-size: 0.86rem; letter-spacing: .03em; padding: 2px 11px; border-radius: 999px; border: 1px solid var(--border-2); color: var(--text); cursor: help; }
.adv-bias.ok { color: var(--ok); border-color: var(--accent-dim); }
.adv-bias.warn { color: var(--warn); border-color: var(--warn); }
.adv-bias.muted { color: var(--muted); }
.adv-conf { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); cursor: help; }
.adv-meta { font-family: var(--mono); font-size: 0.64rem; color: var(--muted); margin-left: auto; }
.adv-rerun { font-size: 0.72rem; padding: 3px 9px; }
.adv-errtext { color: var(--warn); font-size: 0.82rem; }
.adv-spin { width: 13px; height: 13px; border: 2px solid var(--border-2); border-top-color: var(--accent); border-radius: 50%; display: inline-block; animation: adv-spin 0.8s linear infinite; }
@keyframes adv-spin { to { transform: rotate(360deg); } }
.adv-summary { margin: 11px 0 4px; font-size: 0.9rem; line-height: 1.5; color: var(--text); }
.adv-sub { font-family: var(--mono); font-size: 0.64rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.adv-drivers { margin: 10px 0 2px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.adv-chip { font-size: 0.72rem; color: var(--text); background: var(--panel-2); border: 1px solid var(--border-2); border-radius: 999px; padding: 1px 9px; }
.adv-verdicts { margin: 12px 0 2px; display: flex; flex-direction: column; gap: 5px; }
.adv-vrow { display: flex; align-items: baseline; gap: 8px; font-size: 0.8rem; line-height: 1.4; }
.adv-vpill { font-family: var(--mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: .05em; padding: 1px 6px; border-radius: 4px; border: 1px solid var(--border-2); color: var(--muted); flex: none; }
.adv-vpill.flag { color: var(--warn); border-color: var(--warn); }
.adv-vpill.pass { color: var(--ok); border-color: var(--accent-dim); }
.adv-vname { font-weight: 600; color: var(--text); flex: none; }
.adv-vnote { color: var(--muted); }
.adv-scens { margin: 14px 0 2px; }
.adv-scen-grid { margin-top: 8px; display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.adv-scen { padding: 10px 12px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; border-top: 3px solid var(--border-2); }
.adv-scen.worst { border-top-color: var(--warn); }
.adv-scen.best { border-top-color: var(--ok); }
.adv-scen-h { display: flex; align-items: baseline; justify-content: space-between; }
.adv-scen-name { font-weight: 700; font-size: 0.82rem; }
.adv-scen-pct { font-family: var(--mono); font-size: 0.92rem; color: var(--text); cursor: help; }
.adv-scen-bar { margin: 6px 0 8px; height: 4px; background: var(--border); border-radius: 3px; overflow: hidden; }
.adv-scen-bar span { display: block; height: 100%; background: var(--accent-dim); }
.adv-scen.worst .adv-scen-bar span { background: var(--warn); }
.adv-scen.best .adv-scen-bar span { background: var(--ok); }
.adv-scen-th { margin: 0; font-size: 0.78rem; line-height: 1.45; color: var(--text); }
.adv-scen-inv { margin: 6px 0 0; font-size: 0.72rem; line-height: 1.4; color: var(--muted); }
.adv-scen-inv span { font-family: var(--mono); font-size: 0.6rem; text-transform: uppercase; letter-spacing: .04em; opacity: .85; }
.adv-watch { margin: 13px 0 2px; }
.adv-watch ul { margin: 6px 0 0; padding-left: 18px; }
.adv-watch li { font-size: 0.8rem; line-height: 1.5; color: var(--text); }
.adv-honest { margin: 12px 0 0; font-size: 0.73rem; color: var(--muted); line-height: 1.5; }
.adv-honest strong { color: var(--warn); }
.pill-legend { margin: 8px 0 2px; font-size: 0.76rem; }
.pill-legend > summary { cursor: pointer; color: var(--accent); font-size: 0.74rem; list-style: none; width: max-content; }
.pill-legend > summary::-webkit-details-marker { display: none; }
.pill-legend > summary::before { content: 'ⓘ '; opacity: .8; }
.pill-legend[open] > summary { margin-bottom: 6px; }
.pill-legend-list { margin: 0 0 6px; padding-left: 16px; color: var(--muted); line-height: 1.55; }
.pill-legend-list b { color: var(--text); font-family: var(--mono); font-size: 0.72rem; }
.pill-legend-note { margin: 0; font-size: 0.73rem; color: var(--muted); line-height: 1.5; }
.pill-legend-note strong { color: var(--warn); }

/* === Lab trade monitor (v0.55.0, step E) ================================== */
.trd-mon { margin: 14px 0 4px; border: 1px solid var(--border); border-radius: 10px; background: var(--panel); padding: 12px 14px; }
.trd-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.trd-head .trd-sub { font-size: 0.78rem; margin-left: 8px; }
.trd-head-right { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.trd-count { font-family: var(--mono); font-size: 0.62rem; text-transform: uppercase; letter-spacing: .05em; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border-2); color: var(--muted); }
.trd-count.warn { color: var(--warn); border-color: var(--warn); }
.trd-count.watch { color: var(--accent); border-color: var(--accent-dim); }
.trd-empty { font-size: 0.84rem; line-height: 1.5; padding: 8px 2px; }
/* Engine 2 (Manage) — aggregate management strip above the open-trade rows */
.trd-manage { margin: 4px 0 10px; padding: 9px 11px; border: 1px solid var(--border-2); border-radius: 10px; background: var(--panel-2); font-size: 0.82rem; }
.trd-manage.idle, .trd-manage.ok { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.trd-manage.attn { border-color: var(--danger); background: rgba(255,93,108,.06); }
.trd-manage-tag { font-family: var(--mono); font-size: 0.7rem; letter-spacing: .04em; color: var(--accent); border: 1px solid var(--accent-dim); border-radius: 6px; padding: 1px 6px; }
.trd-manage-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.trd-manage-head b.pos { color: var(--ok); } .trd-manage-head b.neg { color: var(--danger); }
.trd-manage .pos { color: var(--ok); }
.trd-manage-asof { margin-left: auto; font-family: var(--mono); font-size: 0.7rem; }
.trd-manage-items { display: flex; flex-direction: column; gap: 4px; margin-top: 7px; }
.trd-manage-item { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 4px 7px; border-radius: 7px; border-left: 3px solid var(--border-2); background: var(--bg); }
.trd-manage-item b { font-family: var(--mono); }
.trd-manage-item .tmi-label { color: var(--muted); }
.trd-manage-item .tmi-icon { font-size: 0.9rem; }
.trd-manage-item.crit { border-left-color: var(--danger); } .trd-manage-item.crit .tmi-label { color: var(--danger); }
.trd-manage-item.warn { border-left-color: var(--warn); }
.trd-manage-item.soon { border-left-color: var(--accent-dim); }
.trd-manage-item.good { border-left-color: var(--ok); } .trd-manage-item.good .tmi-label { color: var(--ok); }
.trd-manage-more { font-size: 0.74rem; padding-left: 4px; }
.trd-manage-foot { margin-top: 7px; font-size: 0.72rem; }
.trd-rows { display: flex; flex-direction: column; gap: 9px; }

.trd-row { border: 1px solid var(--border); border-left: 3px solid var(--border-2); border-radius: 8px; background: var(--panel-2); padding: 9px 11px; }
.trd-row.watch { border-left-color: var(--accent-dim); }
.trd-row.warn { border-left-color: var(--warn); }
.trd-row.open { box-shadow: 0 0 0 1px var(--border-2) inset; }
.trd-row-main { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.trd-id { display: flex; align-items: center; gap: 7px; }
.trd-sym { font-size: 0.96rem; letter-spacing: .02em; }
.trd-levels { font-family: var(--mono); font-size: 0.72rem; color: var(--muted); }
.trd-side { font-family: var(--mono); font-size: 0.58rem; font-weight: 700; letter-spacing: .06em; padding: 1px 6px; border-radius: 4px; border: 1px solid var(--border-2); }
.trd-side.long { color: var(--ok); border-color: var(--accent-dim); }
.trd-side.short { color: var(--warn); border-color: var(--warn); }
.trd-warn { margin-left: auto; font-family: var(--mono); font-size: 0.64rem; text-transform: uppercase; letter-spacing: .05em; padding: 2px 9px; border-radius: 999px; border: 1px solid var(--border-2); color: var(--muted); cursor: help; }
.trd-warn.watch { color: var(--accent); border-color: var(--accent-dim); }
.trd-warn.warn { color: var(--warn); border-color: var(--warn); }
.trd-stats { margin-top: 6px; font-size: 0.78rem; color: var(--muted); }
.trd-stats b { color: var(--text); font-family: var(--mono); font-weight: 600; }
.trd-stats b.pos, .trd-scen-pct.pos { color: var(--ok); }
.trd-stats b.neg { color: var(--warn); }
.trd-reasons { margin-top: 5px; font-size: 0.76rem; color: var(--warn); }
/* v1.21.0 (1b) — live re-eval block + watch-rule flag states */
.trd-live { margin-top: 7px; font-size: 0.78rem; }
.trd-live.pending, .trd-live.idle { color: var(--muted); }
.trd-live-line { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: baseline; color: var(--muted); }
.trd-live-line b { color: var(--text); font-family: var(--mono); font-weight: 600; }
.trd-live-line b.pos { color: var(--ok); }
.trd-live-line b.neg { color: var(--warn); }
.trd-live-asof { font-size: 0.72rem; }
.trd-live-tag { font-size: 0.66rem; text-transform: uppercase; letter-spacing: .04em; padding: 1px 6px; border-radius: 999px; border: 1px solid var(--border-2); }
.trd-live-tag.det { color: var(--ok); border-color: var(--ok); }
.trd-live-tag.warn { color: var(--warn); border-color: var(--warn); }
.trd-live.stale { color: var(--muted); }
.trd-wr { margin-top: 6px; display: flex; flex-direction: column; gap: 3px; }
.trd-wr-row { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: baseline; font-size: 0.76rem; color: var(--muted); }
.trd-wr-row .wr-cond { color: var(--text); }
.wr-state { font-size: 0.68rem; font-weight: 600; padding: 0 5px; border-radius: 4px; white-space: nowrap; }
.wr-state.crossed { color: var(--danger); }
.wr-state.reached { color: var(--ok); }
.wr-state.near { color: var(--warn); }
.wr-state.pending, .wr-state.unknown { color: var(--muted); }
.trd-wr-row.crossed .wr-cond { color: var(--danger); }
.trd-wr-row.reached .wr-cond { color: var(--ok); }
.wr-foot { font-size: 0.7rem; margin-top: 2px; }
.trd-row.ok .trd-reasons { color: var(--muted); }
.trd-cats { margin-top: 7px; display: flex; flex-wrap: wrap; gap: 6px; }
.trd-cat { font-size: 0.7rem; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border-2); color: var(--muted); cursor: help; }
.trd-cat b { font-family: var(--mono); margin-left: 3px; }
.trd-cat.high { color: var(--warn); border-color: var(--warn); }
.trd-cat.med { color: var(--accent); border-color: var(--accent-dim); }
.trd-links { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 6px; }
.trd-link { font-size: 0.7rem; color: var(--muted); }
.trd-link.active { color: var(--warn); }
.trd-row-actions { margin-top: 9px; display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap; }
.trd-mark { display: flex; flex-direction: column; gap: 2px; }
.trd-mark span { font-size: 0.6rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.trd-mark-in { width: 96px; padding: 4px 7px; background: var(--panel); border: 1px solid var(--border-2); border-radius: 6px; color: var(--text); font-family: var(--mono); font-size: 0.78rem; }
.trd-mark-in:focus { outline: none; border-color: var(--accent-dim); }
.trd-err { margin-top: 8px; font-size: 0.78rem; color: var(--warn); }

.trd-add { margin: 4px 0 10px; padding: 11px; border: 1px solid var(--border-2); border-radius: 8px; background: var(--panel-2); }
.trd-add-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 9px; }
.trd-add label, .trd-add-thesis { display: flex; flex-direction: column; gap: 3px; }
.trd-add label span, .trd-add-thesis span { font-size: 0.62rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.trd-add input, .trd-add select, .trd-add-thesis textarea { padding: 5px 8px; background: var(--panel); border: 1px solid var(--border-2); border-radius: 6px; color: var(--text); font: inherit; font-size: 0.82rem; }
.trd-add input:focus, .trd-add select:focus, .trd-add-thesis textarea:focus { outline: none; border-color: var(--accent-dim); }
.trd-add-thesis { margin-top: 9px; }
.trd-add-actions { margin-top: 10px; display: flex; gap: 8px; }

.trd-closed { margin-top: 11px; }
.trd-closed summary { cursor: pointer; font-size: 0.76rem; color: var(--muted); }
.trd-closed-row { display: flex; align-items: center; gap: 10px; padding: 6px 2px; border-top: 1px solid var(--border); font-size: 0.8rem; }
.trd-closed-row > span:first-child { flex: 1; }
.trd-foot { margin-top: 11px; font-size: 0.7rem; line-height: 1.5; }

.trd-report { margin-top: 11px; padding: 11px 12px; border: 1px solid var(--border-2); border-radius: 8px; background: var(--panel); }
.trd-report-head { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.trd-report-head .adv-meta { margin-left: auto; }
.trd-report-summary { margin: 10px 0 4px; font-size: 0.88rem; line-height: 1.5; color: var(--text); }
.trd-drivers { margin: 9px 0 2px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.trd-scens { margin: 12px 0 2px; display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.trd-scen { padding: 9px 11px; background: var(--panel-2); border: 1px solid var(--border); border-top: 3px solid var(--border-2); border-radius: 8px; }
.trd-scen.worst { border-top-color: var(--warn); }
.trd-scen.best { border-top-color: var(--ok); }
.trd-scen-h { display: flex; align-items: baseline; justify-content: space-between; }
.trd-scen-h b { text-transform: capitalize; font-size: 0.82rem; }
.trd-scen-pct { font-family: var(--mono); font-size: 0.9rem; color: var(--text); }
.trd-scen-bar { margin: 6px 0 8px; height: 4px; background: var(--border); border-radius: 3px; overflow: hidden; }
.trd-scen-bar span { display: block; height: 100%; background: var(--accent-dim); }
.trd-scen.worst .trd-scen-bar span { background: var(--warn); }
.trd-scen.best .trd-scen-bar span { background: var(--ok); }
.trd-scen-th { margin: 0; font-size: 0.78rem; line-height: 1.45; color: var(--text); }
.trd-scen-inv { margin: 6px 0 0; font-size: 0.72rem; line-height: 1.4; color: var(--muted); }
.trd-scen-inv span { font-family: var(--mono); font-size: 0.58rem; text-transform: uppercase; letter-spacing: .04em; opacity: .85; }
.trd-watch { margin: 12px 0 2px; }
.trd-watch ul { margin: 6px 0 0; padding-left: 18px; }
.trd-watch li { font-size: 0.8rem; line-height: 1.5; color: var(--text); }
.trd-report-foot { margin-top: 11px; font-size: 0.68rem; line-height: 1.5; color: var(--muted); }

/* ============================================================================
   World Map — "Real map" (MapLibre) basemap  [v0.65.0, opt-in]
   The schematic SVG (.wmap-wrap) stays the default; in Real mode it is hidden
   and the GL canvas (.wmap-gl) takes the same 2:1 box. Markers are the same
   DOM nodes, so we only neutralize the SVG overlay's absolute %-positioning
   (MapLibre positions each marker's wrapper itself).
   ============================================================================ */
.wmap-gl { position: relative; width: 100%; aspect-ratio: 2 / 1; min-height: 240px;
  border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden;
  background: var(--panel-2); display: none; }
.wmap-gl.on { display: block; }
.wmap.real .wmap-wrap { display: none; }
.wmap.real .wmap-zoom { display: none; }   /* MapLibre supplies its own zoom control */
.wmap-gl-hint { margin-top: 8px; padding: 8px 10px; border: 1px solid var(--border);
  border-radius: var(--radius); background: var(--panel-2); font-size: 12px; line-height: 1.45; }
#wmap-basemap.on { color: var(--accent); border-color: var(--accent); }
/* marker wrappers MapLibre creates around our spans */
.wmap-gl-mk { display: inline-block; line-height: 0; }
.wmap-gl-mk .wmap-mk { position: relative; transform: none; left: auto; top: auto; }
.maplibregl-ctrl-attrib, .maplibregl-popup-content { font-size: 11px; }
.maplibregl-ctrl-group button { background: var(--panel); }

/* ============================================================================
   #DD DEEP DIVE / CROSS-REFERENCE ENGINE (v0.78.0)
   The Lab's fused cross-reference report + the dashboard launcher tile.
   Theme-only colours: --accent = supportive, --danger = adverse, --warn = mixed.
   ========================================================================== */
.dd-wrap { margin: 18px 0; padding: 16px; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); }
.dd-bar { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.dd-bar-sub { font-size: 0.82rem; }
.dd-controls { display: flex; flex-direction: column; gap: 10px; margin-bottom: 12px; }
.dd-search { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.dd-search input { flex: 1 1 260px; min-width: 200px; padding: 9px 12px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; color: var(--text); font-size: 0.9rem; }
.dd-search input:focus { outline: none; border-color: var(--accent-dim); }

.dd-result { min-height: 8px; }
.dd-empty { font-size: 0.86rem; line-height: 1.5; }
.dd-loading { padding: 14px 0; font-size: 0.86rem; }

.dd-report { display: flex; flex-direction: column; gap: 16px; }
.dd-rep-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; padding-bottom: 10px; border-bottom: 1px solid var(--border); }
.dd-rep-id { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.dd-rep-id h3 { margin: 0; font-size: 1.3rem; letter-spacing: 0.5px; }
.dd-class { font-size: 0.78rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.4px; }
.dd-idnote { font-size: 0.82rem; margin: -6px 0 0; }

.dd-stab { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border-radius: 999px; font-size: 0.76rem; font-weight: 600; border: 1px solid var(--border); background: var(--panel-2); color: var(--muted); white-space: nowrap; }
.dd-stab.sm { padding: 2px 8px; font-size: 0.72rem; }
.dd-stab.steady   { color: var(--accent); border-color: var(--accent-dim); }
.dd-stab.moderate { color: var(--warn);   border-color: var(--warn); }
.dd-stab.volatile { color: var(--danger); border-color: var(--danger); }
.dd-stab.na       { color: var(--muted); }
.dd-stab.pending  { color: var(--muted); }
.dd-tech-loading { font-size: 0.85rem; line-height: 1.5; margin: 0; }
.dd-tech-sub { font-size: 0.74rem; opacity: 0.85; }

.dd-sec { display: flex; flex-direction: column; gap: 8px; }
.dd-sec > h4 { margin: 0; font-size: 0.96rem; }
.dd-sec h5 { margin: 0 0 4px; font-size: 0.82rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.4px; }
.dd-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.dd-2col > div > h4 { margin: 0 0 6px; font-size: 0.9rem; }
.dd-regime { font-size: 0.86rem; margin: 0 0 6px; }

/* pressure chips + bias pills */
.dd-press { display: inline-block; padding: 2px 8px; border-radius: 6px; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; }
.dd-press.supportive { color: var(--accent); background: rgba(52,224,200,.10); border: 1px solid var(--accent-dim); }
.dd-press.adverse    { color: var(--danger); background: rgba(255,93,108,.10); border: 1px solid var(--danger); }
.dd-press.mixed      { color: var(--warn);   background: rgba(255,180,84,.10); border: 1px solid var(--warn); }
.dd-bias { display: inline-block; padding: 3px 12px; border-radius: 999px; font-size: 0.78rem; font-weight: 700; letter-spacing: 0.5px; border: 1px solid var(--border); }
.dd-bias.long    { color: var(--accent); border-color: var(--accent-dim); background: rgba(52,224,200,.08); }
.dd-bias.short   { color: var(--danger); border-color: var(--danger); background: rgba(255,93,108,.08); }
.dd-bias.watch,
.dd-bias.neutral { color: var(--warn); border-color: var(--warn); background: rgba(255,180,84,.08); }

/* exposure factor list */
.dd-exp-head { font-size: 0.82rem; color: var(--muted); margin-bottom: 4px; }
.dd-live { color: var(--warn); }
.dd-facs { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.dd-fac { padding: 8px 10px; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--border); border-radius: 8px; }
.dd-fac.lit { border-left-color: var(--warn); background: rgba(255,180,84,.06); }
.dd-fac-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 0.86rem; }
.dd-fac-why { font-size: 0.8rem; margin-top: 3px; line-height: 1.45; }
.dd-fac-sec { text-transform: uppercase; letter-spacing: 0.3px; font-size: 0.72rem; }
.dd-live-badge { color: var(--warn); font-size: 0.72rem; font-weight: 700; }
.dd-tag-user { color: var(--accent); font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.3px; border: 1px solid var(--accent-dim); border-radius: 6px; padding: 1px 6px; }
.dd-exp-note, .dd-exp-edit { font-size: 0.78rem; line-height: 1.45; margin: 4px 0 0; }

/* projection (advisor) */
.dd-proj-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.dd-conf, .dd-hor { font-size: 0.76rem; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 2px 8px; }
.dd-aiest { font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--warn); border: 1px dashed var(--warn); border-radius: 6px; padding: 1px 6px; }
.dd-cached { font-size: 0.74rem; }
/* v0.92.0 (N2): projection source tag + the deepen/re-run action */
.dd-src-tag { font-size: 0.68rem; color: var(--muted); border: 1px solid var(--border); border-radius: 6px; padding: 1px 6px; }
.dd-src-tag.web { color: var(--accent); border-color: var(--accent-dim); }
.dd-proj-actions { margin-left: auto; display: inline-flex; gap: 6px; }
/* v1.116.0 NAMED BASIS (§7 source transparency) — the deterministic "Draws on"
   provenance line under the Projection header: the real, computed inputs the
   AI synthesis runs over, named (not "AI thinks"). Reuses the shared .tag.det. */
.dd-basis { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 0.76rem; line-height: 1.5; margin: 0 0 6px; padding: 5px 8px; border: 1px solid var(--border); border-left: 2px solid var(--accent-dim); border-radius: 7px; background: color-mix(in srgb, var(--accent) 4%, transparent); }
.dd-basis.none { border-left-color: var(--border); background: none; }
.dd-basis-lead { font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; font-size: 0.66rem; color: var(--muted); }
.dd-basis-bit { border: 1px solid var(--border); border-radius: 6px; padding: 1px 7px; white-space: nowrap; }
.dd-basis-bit b { font-weight: 600; color: var(--muted); font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.3px; margin-right: 3px; }
.dd-basis-bit.news { border-color: var(--ext); }
.dd-basis-bit.tech { border-color: var(--ok); }
.dd-basis-bit.regime { border-color: var(--accent-dim); }
.dd-basis .tag.det { font-family: var(--mono); font-size: 0.56rem; border-radius: 5px; padding: 1px 5px; text-transform: uppercase; color: var(--ok); border: 1px solid var(--ok); opacity: .8; }
.dd-basis-foot { flex-basis: 100%; font-size: 0.72rem; line-height: 1.45; }
.dd-summary { font-size: 0.9rem; line-height: 1.55; margin: 4px 0; }
.dd-scens { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; margin: 6px 0; }
.dd-scen { padding: 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; }
.dd-scen-h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.dd-scen-p { font-size: 0.8rem; color: var(--accent); font-weight: 700; }
.dd-scen-t { font-size: 0.82rem; line-height: 1.45; margin-top: 4px; }
.dd-scen-i { font-size: 0.76rem; margin-top: 4px; }
.dd-col { margin-top: 8px; }
.dd-col ul { margin: 0; padding-left: 18px; font-size: 0.84rem; line-height: 1.5; }

/* news + technical + foot */
.dd-news { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; font-size: 0.84rem; }
.dd-news-st { display: inline-block; padding: 1px 7px; border-radius: 6px; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; margin-right: 4px; border: 1px solid var(--border); color: var(--muted); }
.dd-news-st.active { color: var(--accent); border-color: var(--accent-dim); }
.dd-news-st.watch  { color: var(--warn);   border-color: var(--warn); }

/* v1.17.0 (rec A stage 2): Deep Dive social-attention read — labelled crowd-attention. */
.dd-social-block { margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--border); }
.dd-social-h { margin: 0 0 6px; font-size: 0.82rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.4px; }
.dd-social-idle { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dd-social-hint { font-size: 0.78rem; line-height: 1.45; flex: 1 1 180px; }
.dd-social-loading { font-size: 0.84rem; margin: 4px 0; }
.dd-social-read { display: flex; flex-direction: column; gap: 6px; font-size: 0.84rem; }
.dd-social-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dd-attn { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; border: 1px solid var(--border); color: var(--muted); background: var(--panel-2); }
.dd-attn.calm { color: var(--accent); border-color: var(--accent-dim); }
.dd-attn.mid  { color: var(--warn);   border-color: var(--warn); }
.dd-attn.hot  { color: var(--danger); border-color: var(--danger); }
.dd-attn.na   { color: var(--muted); }
.dd-social-tag { font-size: 0.72rem; }
.dd-social-sum { margin: 2px 0; line-height: 1.45; }
.dd-social-themes { list-style: none; margin: 2px 0; padding: 0; display: flex; flex-direction: column; gap: 3px; font-size: 0.82rem; }
.dd-social-cautions { list-style: none; margin: 2px 0; padding: 0; display: flex; flex-direction: column; gap: 3px; font-size: 0.8rem; color: var(--warn); }
.dd-social-asof { font-size: 0.72rem; margin: 2px 0 0; }
.dd-social-relaxed { font-size: 0.74rem; margin: 2px 0 0; color: var(--warn); }
.dd-social-foot { font-size: 0.74rem; line-height: 1.45; margin: 4px 0 0; }
.dd-news-st.closed { color: var(--muted); }
.dd-tech { font-size: 0.85rem; line-height: 1.5; margin: 0; }
.dd-real { font-size: 0.76rem; margin: 4px 0 0; }
.dd-foot { font-size: 0.76rem; line-height: 1.5; padding-top: 10px; border-top: 1px solid var(--border); margin: 4px 0 0; }

/* dashboard launcher tile */
.dd-launch { display: flex; flex-direction: column; gap: 10px; height: 100%; }
.dd-launch-search { display: flex; gap: 6px; }
.dd-launch-search input { flex: 1; min-width: 0; padding: 7px 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; color: var(--text); font-size: 0.82rem; }
.dd-launch-search input:focus { outline: none; border-color: var(--accent-dim); }
.dd-launch-safe { display: flex; flex-direction: column; gap: 5px; flex: 1; min-height: 0; overflow: auto; }
/* v0.81.0: two computed screens side-by-side (safest + most volatile). On a
   narrow tile they stack; from ~360px wide they sit in two columns. */
.dd-launch-cards { display: grid; grid-template-columns: 1fr; gap: 12px; flex: 1; min-height: 0; }
@media (min-width: 360px) { .dd-launch-cards { grid-template-columns: 1fr 1fr; } }
.dd-launch-list { display: flex; flex-direction: column; gap: 5px; overflow: auto; }
.dd-launch-vol .dd-launch-head { color: var(--danger, #fb7185); }
.dd-launch-score.vol { color: var(--danger, #fb7185); }
.dd-launch-head { font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--muted); }
.dd-launch-row { display: flex; align-items: center; gap: 8px; padding: 6px 8px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 7px; cursor: pointer; font-size: 0.82rem; }
.dd-launch-row:hover { border-color: var(--accent-dim); }
.dd-launch-rank { color: var(--muted); font-size: 0.74rem; width: 14px; }
.dd-launch-sym { font-weight: 700; flex: 1; }
.dd-launch-score { color: var(--accent); font-weight: 700; font-size: 0.78rem; }
.dd-launch-load, .dd-launch-empty { font-size: 0.78rem; color: var(--muted); padding: 4px 0; line-height: 1.45; }
.dd-launch-foot { font-size: 0.7rem; color: var(--muted); line-height: 1.4; border-top: 1px solid var(--border); padding-top: 6px; }

@media (max-width: 720px) { .dd-2col { grid-template-columns: 1fr; } }

/* v0.87.0: reusable "working" indicator — three blinking dots in the current
   text colour. Used by the Deep Dive loading line, the streamed AI projection
   placeholder, and the Top-5 AI screening line, so a long AI call never looks
   dead. Respects prefers-reduced-motion (steady dots, no flashing). */
.working-dots { display:inline-flex; align-items:center; gap:.18em; vertical-align:middle; }
.working-dots i {
  width:.38em; height:.38em; border-radius:50%; background:currentColor;
  opacity:.3; animation:working-blink 1.2s infinite ease-in-out;
}
.working-dots i:nth-child(2){ animation-delay:.2s; }
.working-dots i:nth-child(3){ animation-delay:.4s; }
@keyframes working-blink { 0%,80%,100%{ opacity:.3; transform:scale(.85); } 40%{ opacity:1; transform:scale(1); } }
.dd-proj-working { display:flex; align-items:center; gap:.4em; }
@media (prefers-reduced-motion: reduce) {
  .working-dots i { animation:none; opacity:.6; }
}

/* v0.88.0: AI-call indicator — a pulsing PURPLE orb + dots, distinct from the
   neutral .working-dots used for data/API calls, so the user can tell at a glance
   whether an AI call (purple) or a regular fetch (neutral) is running. */
.ai-working { display:inline-flex; align-items:center; gap:.45em; color:#a78bfa; }
.ai-working .ai-orb {
  width:.72em; height:.72em; border-radius:50%; flex:0 0 auto;
  background:radial-gradient(circle at 32% 30%, #d8c9ff, #7c3aed);
  box-shadow:0 0 .55em rgba(124,58,237,.85); animation:ai-pulse 1.1s infinite ease-in-out;
}
.ai-working .ai-dots { display:inline-flex; gap:.2em; }
.ai-working .ai-dots i { width:.32em; height:.32em; border-radius:50%; background:currentColor; opacity:.35; animation:working-blink 1.2s infinite ease-in-out; }
.ai-working .ai-dots i:nth-child(2){ animation-delay:.2s; }
.ai-working .ai-dots i:nth-child(3){ animation-delay:.4s; }
@keyframes ai-pulse { 0%,100%{ transform:scale(.8); opacity:.7; } 50%{ transform:scale(1.18); opacity:1; } }
@media (prefers-reduced-motion: reduce) { .ai-working .ai-orb, .ai-working .ai-dots i { animation:none; opacity:.85; } }

/* ── Top-Fives matrix (v0.98.0, N3) ───────────────────────────────────────── */
.tf-wrap { display: flex; flex-direction: column; gap: 12px; }
.tf-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.tf-title { display: flex; align-items: center; gap: 10px; font-size: 0.82rem; }
.tf-status { color: var(--muted); }
.tf-stale { color: var(--warn); }
.tf-viewing { color: var(--ext); }
.tf-err { background: var(--panel-2); border: 1px solid var(--border-2); border-left: 3px solid var(--danger);
  border-radius: 10px; padding: 9px 12px; color: var(--text); font-size: 0.82rem; }
.tf-blank { padding: 18px; border: 1px dashed var(--border-2); border-radius: 12px; font-size: 0.85rem; line-height: 1.5; }
.tf-relaxed { background: var(--panel-2); border: 1px solid var(--border-2); border-left: 3px solid var(--warn, #f59e0b);
  border-radius: 10px; padding: 8px 12px; margin: 0 0 8px; color: var(--text); font-size: 0.8rem; line-height: 1.45; }

.tf-grid { display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: 12px; overflow: hidden; background: var(--panel); }
.tf-row { display: grid; grid-template-columns: 132px repeat(var(--tf-cols, 4), 1fr); border-top: 1px solid var(--border); }
.tf-row:first-child { border-top: 0; }
.tf-head { background: var(--panel-2); position: sticky; top: 0; z-index: 1; }
.tf-corner { padding: 9px 12px; font: 600 0.72rem/1 var(--mono); color: var(--accent); letter-spacing: .04em; text-transform: uppercase; }
.tf-colh { padding: 9px 12px; font: 600 0.74rem/1.2 var(--ui); color: var(--text); border-left: 1px solid var(--border); }
.tf-rowh { padding: 12px; font: 600 0.8rem/1.2 var(--ui); color: var(--text); background: var(--panel-2); display: flex; align-items: center; }
.tf-cell { padding: 8px; border-left: 1px solid var(--border); display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.tf-empty { padding: 4px 2px; font-size: 0.8rem; }

.tf-chip { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; width: 100%; text-align: left;
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; padding: 5px 8px; cursor: pointer;
  color: var(--text); transition: border-color .12s, background .12s; min-width: 0; }
.tf-chip:hover { border-color: var(--accent-dim); background: var(--bg-glow); }
.tf-chip b { font: 600 0.78rem/1.1 var(--mono); color: var(--accent); }
.tf-chip .tf-note { font-size: 0.68rem; color: var(--muted); line-height: 1.2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
/* O3 — ⚡ convergence mark on a Top-Fives cell chip (compact; tier-2 gets a subtle glow). */
.tf-chip .tf-opp { font-size: 0.7rem; line-height: 1; margin-bottom: 1px; }
.tf-chip.opp1 { border-color: color-mix(in srgb, var(--warn, #d29922) 45%, var(--border)); }
.tf-chip.opp1 .tf-opp { color: var(--warn, #d29922); }
.tf-chip.opp2 { border-color: var(--accent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent); background: color-mix(in srgb, var(--accent) 7%, var(--panel-2)); }
.tf-chip.opp2 .tf-opp { color: var(--accent); }

/* O3 — Deep Dive header: the Watch/flag toggle + the ⚡ convergence readout row. */
.dd-rep-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.dd-flag { white-space: nowrap; }
.dd-flag.on { color: var(--accent); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); background: color-mix(in srgb, var(--accent) 8%, transparent); }
.dd-opp-row { margin-top: 8px; }
.dd-opp-row .buddy-opp { margin-top: 0; }

/* v1.31.0 (P3) — the CONVICTION / directional-call card */
.dd-conviction { margin-top: 10px; }
/* v1.145.0 (C4) — the DECISION-SYNTHESIS joint call banner, sitting at the TOP of
   Deep Dive (above the conviction card). The cross-referenced est lean the user
   acts on. Token-driven — no new hex; tone by call verb. est/no-profit copy in
   the foot (#12/#15). */
.dd-synth-host { margin: 10px 0 4px; }
.dd-synth { border: 1px solid var(--border); border-left-width: 3px; border-radius: 8px;
  padding: 11px 13px; background: color-mix(in srgb, var(--accent) 5%, transparent); }
.dd-synth.synth-bull  { border-left-color: var(--ok); }
.dd-synth.synth-bear  { border-left-color: var(--danger); }
.dd-synth.synth-avoid { border-left-color: var(--warn); }
.dd-synth.synth-hold  { border-left-color: var(--accent); }
.dd-synth-top { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.dd-synth-call { font: 800 1.15rem/1 var(--mono, monospace); letter-spacing: 0.06em; }
.synth-bull  .dd-synth-call { color: var(--ok); }
.synth-bear  .dd-synth-call { color: var(--danger); }
.synth-avoid .dd-synth-call { color: var(--warn); }
.synth-hold  .dd-synth-call { color: var(--accent); }
.dd-synth-conf { font-size: 0.92rem; }
.dd-synth-conf b { font-size: 1.05rem; }
.dd-synth-agr { font-size: 0.86rem; color: var(--muted, #8b95a1); }
.dd-synth-lean { font-size: 0.8rem; }
.dd-synth-pos { font: 600 0.72rem/1.4 var(--mono, monospace); letter-spacing: 0.03em;
  padding: 1px 7px; border-radius: 999px; border: 1px solid var(--border); margin-left: auto; }
.dd-synth-pos.pos-long  { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 45%, transparent); }
.dd-synth-pos.pos-short { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.dd-synth-why { list-style: none; margin: 8px 0 0; padding: 0; font-size: 0.85rem; line-height: 1.4; }
.dd-synth-why li { padding: 1px 0; color: var(--text, #e7edf4); }
.dd-synth-risks { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.dd-synth-risk { font: 600 0.72rem/1.4 var(--mono, monospace); padding: 1px 8px; border-radius: 999px;
  border: 1px solid color-mix(in srgb, var(--warn) 45%, transparent); color: var(--warn, #d8a657); }
.dd-synth-risk.r-against-position { border-color: color-mix(in srgb, var(--danger) 50%, transparent); color: var(--danger); }
.dd-synth-risk.r-clean { border-color: color-mix(in srgb, var(--ok) 40%, transparent); color: var(--ok); }
.dd-synth-foot { margin-top: 9px; font-size: 0.76rem; line-height: 1.4; }
.dd-synth-na { border: 1px dashed var(--border); border-radius: 8px; padding: 9px 12px; font-size: 0.85rem; }
.dd-synth .tag.est { font-family: var(--mono); font-size: 0.56rem; border-radius: 5px; padding: 1px 5px; text-transform: uppercase; color: var(--warn); border: 1px solid var(--warn); opacity: .8; }
.cv-card {
  border: 1px solid var(--line, #2a2f36); border-left-width: 3px;
  border-radius: 8px; padding: 10px 12px; background: rgba(255,255,255,0.02);
}
.cv-long  { border-left-color: var(--ok); }
.cv-short { border-left-color: var(--danger); }
.cv-watch { border-left-color: var(--warn); }
.cv-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.cv-call { font-weight: 700; font-size: 1.05rem; letter-spacing: 0.04em; }
.cv-long  .cv-call { color: var(--ok); }
.cv-short .cv-call { color: var(--danger); }
.cv-watch .cv-call { color: var(--warn); }
.cv-conf { font-size: 0.95rem; }
.cv-conf b { font-size: 1.1rem; }
.cv-tier { color: var(--muted, #8b95a1); font-size: 0.82rem; margin-left: 4px; }
.cv-why { margin-top: 8px; }
.cv-why-h { font-size: 0.78rem; color: var(--muted, #8b95a1); margin-bottom: 4px; }
.cv-basis { list-style: none; margin: 0; padding: 0; font-size: 0.85rem; }
.cv-basis li { display: flex; align-items: baseline; gap: 6px; padding: 1px 0; flex-wrap: wrap; }
.cv-pt { font-variant-numeric: tabular-nums; font-weight: 700; min-width: 34px; text-align: right; }
.cv-pt.pos { color: var(--ok); }
.cv-pt.neg { color: var(--danger); }
.cv-pt.zero { color: var(--muted, #8b95a1); }
.cv-lab { font-weight: 600; }
.cv-note { color: var(--muted, #8b95a1); font-size: 0.8rem; }
.cv-inval { margin-top: 8px; font-size: 0.85rem; }
.cv-foot { margin-top: 8px; font-size: 0.76rem; line-height: 1.35; }
/* v1.89.0 (C3 slice 1) — the Simple ⇄ Advanced density toggle (right of the cv
   head) + the condensed Simple card. Reuses the cv- visual language; the est/det
   tags + the honest foot + the invalidation render in BOTH modes (#12/#15). */
.cv-dense { margin-left: auto; display: inline-flex; border: 1px solid var(--border); border-radius: 999px; overflow: hidden; flex: 0 0 auto; }
.cv-dense-b { appearance: none; background: transparent; border: 0; cursor: pointer; font: 600 0.68rem/1 var(--mono, monospace); letter-spacing: 0.03em; color: var(--muted, #8b95a1); padding: 3px 9px; }
.cv-dense-b + .cv-dense-b { border-left: 1px solid var(--border); }
.cv-dense-b.on { background: color-mix(in srgb, var(--accent) 18%, transparent); color: var(--text, #e7edf4); }
.cv-dense-b:hover { color: var(--text, #e7edf4); }
.cv-simple-why { margin-top: 6px; font-size: 0.84rem; }
.cv-inval-sm { margin-top: 6px; font-size: 0.85rem; }
/* v1.32.0 (P3 s2) — the shared COMPACT directional-call chip (Decision Center,
   Buddy watchlist/candidate rows). One renderer → every surface agrees. */
.cv-chip { display: inline-flex; align-items: baseline; gap: 4px; padding: 1px 7px; border-radius: 999px;
  font: 700 0.72rem/1.4 var(--mono); letter-spacing: 0.03em; border: 1px solid var(--border);
  vertical-align: middle; white-space: nowrap; }
.cv-chip .cv-chip-conf { font-weight: 600; opacity: 0.85; font-size: 0.68rem; }
.cv-chip .cv-chip-arrow { font-size: 0.62rem; }
.cv-chip.cv-long  { color: var(--ok);     border-color: color-mix(in srgb, var(--ok) 55%, transparent);     background: color-mix(in srgb, var(--ok) 10%, transparent); }
.cv-chip.cv-short { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 55%, transparent); background: color-mix(in srgb, var(--danger) 10%, transparent); }
.cv-chip.cv-watch { color: var(--warn);   border-color: color-mix(in srgb, var(--warn) 45%, transparent);   background: color-mix(in srgb, var(--warn) 8%, transparent); }
/* the full card leading the Buddy plan slot */
.buddy-cv { margin-bottom: 10px; }
.buddy-cv .cv-card { background: rgba(255,255,255,0.015); }
/* Decision Center: confidence + the labelled scan-lean hint when WATCH */
.bf-conf { font-weight: 600; opacity: 0.8; font-size: 0.92em; }
.bf-scan { font-style: normal; font-size: 0.66rem; font-weight: 700; opacity: 0.7; }
.bf-scan.up { color: var(--ok); }
.bf-scan.down { color: var(--danger); }
/* v1.26.0 (O3.2) — the "Plan this →" bridge action + the Buddy landing highlight */
.dd-plan { white-space: nowrap; color: var(--accent); border-color: color-mix(in srgb, var(--accent) 38%, var(--border)); }
.dd-plan:hover { background: color-mix(in srgb, var(--accent) 10%, transparent); }
.buddy-focus { animation: buddyFocusPulse 2.2s ease-out 1; border-radius: 6px; }
@keyframes buddyFocusPulse {
  0%   { box-shadow: 0 0 0 2px var(--accent), 0 0 14px color-mix(in srgb, var(--accent) 55%, transparent); background: color-mix(in srgb, var(--accent) 12%, transparent); }
  100% { box-shadow: 0 0 0 0 transparent; background: transparent; }
}
@media (prefers-reduced-motion: reduce) { .buddy-focus { animation: none; box-shadow: 0 0 0 2px var(--accent); } }

/* O3 — the banner MKT-row ⚡ convergence chip (count published by tools.js). */
.bnr-opp { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 3px; cursor: pointer;
  font: 600 0.62rem/1 var(--mono); color: var(--warn, #d29922); background: color-mix(in srgb, var(--warn, #d29922) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--warn, #d29922) 40%, var(--border)); border-radius: 999px; padding: 2px 8px; margin-right: 6px; }
.bnr-opp[hidden] { display: none; }
.bnr-opp:hover { background: color-mix(in srgb, var(--warn, #d29922) 20%, transparent); }
.bnr-opp.strong { color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); }

/* v1.32.0 (P3 s2) — the banner MKT-row directional-CALL count chip (cv.chip). */
.bnr-cv { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 3px; cursor: pointer;
  font: 600 0.62rem/1 var(--mono); color: var(--muted, #8b95a1); background: color-mix(in srgb, var(--muted, #8b95a1) 10%, transparent);
  border: 1px solid var(--border); border-radius: 999px; padding: 2px 8px; margin-right: 6px; }
.bnr-cv[hidden] { display: none; }
.bnr-cv.cv-long  { color: var(--ok);     background: color-mix(in srgb, var(--ok) 12%, transparent);     border-color: color-mix(in srgb, var(--ok) 40%, var(--border)); }
.bnr-cv.cv-short { color: var(--danger); background: color-mix(in srgb, var(--danger) 12%, transparent); border-color: color-mix(in srgb, var(--danger) 40%, var(--border)); }

/* v1.33.0 (P3 s3) — the Deep Dive "Plan LONG/SHORT →" button picks up the call's
   tint, and the plan-card carries an honest "seeded from your <CALL> call" note. */
.dd-plan.dir-long  { border-color: color-mix(in srgb, var(--ok) 50%, var(--border));     color: var(--ok); }
.dd-plan.dir-short { border-color: color-mix(in srgb, var(--danger) 50%, var(--border)); color: var(--danger); }
.buddy-plan-seed { display: inline-block; margin-left: 8px; font-size: 0.72rem; opacity: 0.85; }
.buddy-plan-seed b { font-weight: 600; }
.bnr-cv:hover { filter: brightness(1.15); }

.tf-archive { font-size: 0.78rem; }
.tf-archive > summary { cursor: pointer; color: var(--accent); list-style: none; width: max-content; }
.tf-archive > summary::-webkit-details-marker { display: none; }
.tf-archive > summary::before { content: '⌕ '; opacity: .8; }
.tf-arch-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.tf-arch-item { background: var(--panel-2); border: 1px solid var(--border); border-radius: 7px; padding: 4px 8px;
  font: 0.72rem/1 var(--mono); color: var(--muted); cursor: pointer; }
.tf-arch-item:hover { border-color: var(--accent-dim); color: var(--text); }
.tf-foot { font-size: 0.74rem; line-height: 1.55; margin: 2px 0 0; }

@media (max-width: 720px) {
  .tf-row { grid-template-columns: 92px repeat(var(--tf-cols, 4), 1fr); }
  .tf-rowh { padding: 8px; font-size: 0.72rem; }
  .tf-corner, .tf-colh { padding: 7px 8px; font-size: 0.66rem; }
  .tf-cell { padding: 6px; }
}

/* ---- My sources (manual trusted-domain filter, v1.01.0) ---- */
.usrc { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 18px; }
.usrc-head h3 { margin: 0 0 4px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.usrc-head p { margin: 0 0 4px; font-size: 0.86rem; line-height: 1.5; }
.usrc-state { font-size: 0.72rem; font-weight: 600; padding: 2px 9px; border-radius: 999px; border: 1px solid var(--border-2); }
.usrc-state.usrc-on { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 45%, transparent); background: color-mix(in srgb, var(--ok) 12%, transparent); }
.usrc-state.usrc-off { color: var(--muted); }
.usrc-add { display: flex; gap: 8px; margin: 12px 0 6px; flex-wrap: wrap; }
.usrc-in { flex: 1 1 180px; min-width: 0; background: var(--panel-2); color: var(--text); border: 1px solid var(--border-2); border-radius: 8px; padding: 8px 11px; font: inherit; font-size: 0.9rem; }
.usrc-in:focus { outline: none; border-color: var(--accent-dim); }
.usrc-in#usrc-name { flex: 0 1 160px; }
.usrc-addbtn { flex: 0 0 auto; }
.usrc-msg { min-height: 1.1em; font-size: 0.8rem; color: var(--danger); margin-bottom: 4px; }
.usrc-msg:empty { min-height: 0; }
.usrc-list { display: flex; flex-direction: column; gap: 6px; margin: 6px 0 4px; }
.usrc-empty { font-size: 0.86rem; padding: 4px 0; }
.usrc-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: var(--panel-2); border: 1px solid var(--border-2); border-radius: 8px; padding: 7px 11px; }
.usrc-row.is-off { opacity: 0.55; }
.usrc-tog { display: flex; align-items: center; gap: 9px; cursor: pointer; flex: 1 1 auto; min-width: 0; }
.usrc-tog input { accent-color: var(--accent); width: 15px; height: 15px; cursor: pointer; }
.usrc-dom { font-family: var(--mono); font-size: 0.86rem; color: var(--text); }
.usrc-nm { font-size: 0.78rem; }
.usrc-x { flex: 0 0 auto; background: transparent; border: none; color: var(--muted); font-size: 1.2rem; line-height: 1; cursor: pointer; padding: 0 4px; border-radius: 6px; }
.usrc-x:hover { color: var(--danger); }
.usrc-suggest { margin-top: 10px; }
.usrc-sug-h { font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 6px; }
.usrc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.usrc-chip { background: var(--panel-2); border: 1px solid var(--border-2); color: var(--muted); border-radius: 999px; padding: 4px 11px; font-size: 0.78rem; font-family: var(--mono); cursor: pointer; }
.usrc-chip:hover { border-color: var(--accent-dim); color: var(--accent); }

/* === v1.02.0 — Help "How PortalOS works" engine-map view (clarity cluster a) === */
.hlp-map .hlp-sub { margin-bottom: 10px; }
.hlp-map .hlp-sub b { color: var(--text); }
.emap-legend { display: flex; flex-wrap: wrap; gap: 6px 12px; margin: 0 0 12px; padding: 8px 10px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 8px; }
.emap-leg-item { font-size: 0.72rem; color: var(--muted); white-space: nowrap; }
.emap-tree { display: flex; flex-direction: column; gap: 8px; }
.emap-branch { border: 1px solid var(--border); border-radius: 8px; background: var(--panel-2); overflow: hidden; }
.emap-branch > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 10px; padding: 10px 12px; font-weight: 600; color: var(--text); }
.emap-branch > summary::-webkit-details-marker { display: none; }
.emap-branch > summary::after { content: '▸'; margin-left: auto; color: var(--muted); transition: transform .15s ease; }
.emap-branch[open] > summary::after { transform: rotate(90deg); }
.emap-branch[open] > summary { border-bottom: 1px solid var(--border); }
.emap-num { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 6px; background: var(--accent-dim); color: var(--accent); font-size: 0.78rem; font-weight: 700; flex: none; }
.emap-bt { font-size: 0.92rem; }
.emap-blurb { margin: 10px 12px 6px; color: var(--muted); font-size: 0.82rem; line-height: 1.55; }
.emap-items { list-style: none; margin: 0; padding: 0 12px 10px; display: flex; flex-direction: column; gap: 6px; }
.emap-item { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; }
.emap-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: var(--muted); }
.emap-il { color: var(--text); cursor: help; border-bottom: 1px dotted var(--border-2); }
.emap-st { margin-left: auto; font-size: 0.68rem; white-space: nowrap; color: var(--muted); flex: none; }
/* status colours, shared by the summary chip and the row dot */
.emap-live  { color: var(--ok); }    .emap-dot.emap-live  { background: var(--ok); }
.emap-partial { color: var(--warn); } .emap-dot.emap-partial { background: var(--warn); }
.emap-soon  { color: var(--accent); } .emap-dot.emap-soon  { background: var(--accent); }
.emap-next  { color: var(--accent); } .emap-dot.emap-next  { background: var(--accent); box-shadow: 0 0 0 2px var(--accent-dim); }
.emap-gap   { color: var(--danger); } .emap-dot.emap-gap   { background: var(--danger); }
.emap-foot { margin-top: 12px; }

/* === v1.03.0 — brand tagline "Think clearly. Stay disciplined." === */
.brand-tagline { margin: 4px 0 14px; font-size: 0.8rem; color: var(--accent); letter-spacing: .01em; font-weight: 500; }
.brand-sub { margin-left: 10px; font-size: 0.7rem; color: var(--muted); font-style: italic; white-space: nowrap; }
@media (max-width: 1100px) { .brand-sub { display: none; } }

/* === v1.04.0 — Settings "AI & assistant" section (Assistant tab retired into here + dashboard + bar) === */
.set-ai-row { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.set-ai-style { display: inline-flex; gap: 6px; }
.set-ai-toggle { display: flex; align-items: center; gap: 8px; font-size: 0.85rem; color: var(--text); margin-bottom: 10px; }
.set-ai-toggle.off { opacity: .55; }
.set-ai-foot { display: flex; align-items: center; gap: 10px; font-size: 0.78rem; }

/* === INVEST BUDDY (v1.08.0) — Lab planning sandbox ========================= */
.buddy-wrap { display: flex; flex-direction: column; gap: 16px; }
.buddy-bar { display: flex; align-items: center; justify-content: space-between; }
.buddy-title { display: flex; align-items: center; gap: 10px; font-size: 0.82rem; }
.buddy-cap { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; }
.buddy-cap-row, .buddy-add-row { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; }
.buddy-add-row { margin-top: 10px; }
.buddy-fld { display: flex; flex-direction: column; gap: 4px; font-size: 0.78rem; color: var(--muted); }
.buddy-fld.sm { max-width: 130px; }
.buddy-fld input { background: var(--bg); border: 1px solid var(--border-2); color: var(--text); border-radius: 8px; padding: 8px 10px; font: inherit; }
.buddy-fld input:focus { outline: none; border-color: var(--accent-dim); }
.buddy-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin: 14px 0 4px; }
.buddy-stat { background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px; padding: 9px 12px; display: flex; flex-direction: column; gap: 3px; }
.buddy-stat span { font-size: 0.72rem; color: var(--muted); }
.buddy-stat b { font-size: 1rem; font-variant-numeric: tabular-nums; }
.buddy-stat.big b { font-size: 1.35rem; color: var(--accent); }
.buddy-stat b.pos { color: var(--ok); } .buddy-stat b.neg { color: var(--danger); }
.buddy-live, .buddy-cap-hint { font-size: 0.8rem; margin-top: 10px; line-height: 1.5; }
.buddy-live b.neg { color: var(--danger); }
.buddy-cands { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; }
.buddy-cands h3 { margin: 0 0 4px; display: flex; align-items: baseline; gap: 10px; }
.buddy-asof { font-size: 0.72rem; font-weight: 400; }
.buddy-cands-sub { font-size: 0.8rem; margin: 0 0 12px; line-height: 1.5; }
.buddy-blank { font-size: 0.86rem; line-height: 1.6; display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
/* v1.12.0 — inline Top-5 run row + screen error inside Buddy */
.buddy-cand-runrow { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; width: 100%; }
.buddy-tf-err { font-size: 0.8rem; color: var(--danger, #f85149); margin: 0 0 10px; display: flex; align-items: center; gap: 8px; }
.buddy-cand { border-top: 1px solid var(--border); padding: 12px 0; }
.buddy-cand:first-of-type { border-top: none; }
.buddy-cand-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.buddy-cand-id { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.buddy-cand-id b { font-size: 0.98rem; }
.buddy-cand-tags { display: inline-flex; gap: 6px; }
.buddy-cand .chip { font-family: var(--mono); font-size: 0.6rem; letter-spacing: .04em; color: var(--muted); border: 1px solid var(--border-2); border-radius: 6px; padding: 2px 6px; text-transform: uppercase; font-style: normal; }
.buddy-cand-act { display: flex; gap: 6px; }
.buddy-cand-note { font-size: 0.8rem; margin: 6px 0 0; }
/* v1.20.0 (O1) — the ⚡ convergence badge (tier 1 / tier 2). Distinct from ★. */
.buddy-opp { display: flex; align-items: baseline; gap: 8px; margin: 8px 0 0; padding: 7px 10px; border-radius: 8px;
  border: 1px solid var(--border-2); background: var(--panel-2); font-size: 0.78rem; line-height: 1.35; cursor: help; }
.buddy-opp.t1 { border-color: var(--warn); box-shadow: inset 2px 0 0 var(--warn); }
.buddy-opp.t2 { border-color: var(--accent); box-shadow: inset 3px 0 0 var(--accent); background: color-mix(in srgb, var(--accent) 7%, var(--panel-2)); }
.buddy-opp-bolt { font-size: 0.98rem; line-height: 1; flex: none; }
.buddy-opp.t1 .buddy-opp-bolt { color: var(--warn); }
.buddy-opp.t2 .buddy-opp-bolt { color: var(--accent); }
.buddy-opp-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; min-width: 0; }
.buddy-opp-main > b { font-size: 0.82rem; }
.buddy-opp-n { font-family: var(--mono); font-style: normal; font-size: 0.66rem; color: var(--muted); border: 1px solid var(--border-2); border-radius: 5px; padding: 1px 5px; }
.buddy-opp-lean { font-style: normal; font-size: 0.66rem; text-transform: uppercase; letter-spacing: .04em; color: var(--warn); }
.buddy-opp-why { width: 100%; color: var(--muted); font-size: 0.74rem; overflow-wrap: anywhere; }

/* v1.22.0 (O2) — Watchlist & Opportunities panel + "What changed" feed */
.buddy-watchlist { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; }
.buddy-watchlist-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.buddy-watchlist-head h3 { margin: 0; display: flex; align-items: baseline; gap: 8px; }
.buddy-unseen { font-style: normal; font-family: var(--mono); font-size: 0.6rem; letter-spacing: .03em; color: var(--accent); border: 1px solid var(--accent); border-radius: 999px; padding: 1px 7px; }
.buddy-wl-sub { font-size: 0.8rem; margin: 4px 0 12px; line-height: 1.5; }
.buddy-wl-empty { font-size: 0.84rem; margin: 8px 0 4px; line-height: 1.55; }
.buddy-wl-row { border-top: 1px solid var(--border); padding: 11px 0; }
.buddy-wl-row:first-of-type { border-top: none; }
.buddy-wl-row.lit { box-shadow: inset 2px 0 0 var(--warn); padding-left: 10px; border-radius: 4px; }
.buddy-wl-id { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.buddy-wl-id b { font-size: 0.98rem; }
.buddy-wl-id .chip { font-family: var(--mono); font-size: 0.6rem; letter-spacing: .04em; color: var(--muted); border: 1px solid var(--border-2); border-radius: 6px; padding: 2px 6px; text-transform: uppercase; font-style: normal; margin-left: 6px; }
.buddy-wl-src { font-size: 0.66rem; text-transform: uppercase; letter-spacing: .04em; margin-left: 8px; }
.buddy-wl-act { display: flex; gap: 6px; flex-wrap: wrap; }
.buddy-wl-note { font-size: 0.8rem; margin: 6px 0 0; }

.buddy-feed { margin-top: 14px; border-top: 1px dashed var(--border); padding-top: 10px; }
.buddy-feed-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.buddy-feed-head h4 { margin: 0; font-size: 0.74rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.buddy-feed-empty { font-size: 0.8rem; margin: 8px 0 2px; line-height: 1.55; }
.buddy-feed-list { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.buddy-feed-item { display: flex; flex-direction: column; gap: 2px; padding: 7px 10px; border-radius: 8px; background: var(--panel-2); border: 1px solid var(--border-2); border-left-width: 3px; }
.buddy-feed-item.src-opp { border-left-color: var(--accent); }
.buddy-feed-item.src-event { border-left-color: var(--warn); }
.buddy-feed-item.src-trade { border-left-color: var(--muted); }
.buddy-feed-text { font-size: 0.82rem; overflow-wrap: anywhere; }
.buddy-feed-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; font-size: 0.7rem; }
.buddy-feed-ago { font-family: var(--mono); color: var(--muted); font-size: 0.64rem; flex: none; }
.buddy-feed-why { font-size: 0.7rem; overflow-wrap: anywhere; }
/* O2.2 — feed header actions + the opt-in notifications bell */
.buddy-feed-actions { display: flex; gap: 6px; align-items: center; flex: none; }
.buddy-feed-bell.on, .wf-bell.on { color: var(--accent); border-color: var(--accent); }
.buddy-feed-bell[disabled] { opacity: .55; cursor: not-allowed; }
/* O2.2 — the "What changed" dashboard widget (mirrors the Buddy feed) */
.wf-row.src-opp { border-left-color: var(--accent); }
.wf-row.src-event { border-left-color: var(--warn); }
.wf-row.src-trade { border-left-color: var(--muted); }
.buddy-plan-slot:not(:empty) { margin-top: 10px; }
.buddy-plan { background: var(--panel-2); border: 1px solid var(--border-2); border-radius: 10px; padding: 12px 14px; }
.buddy-plan.loading, .buddy-plan.err { font-size: 0.84rem; color: var(--muted); display: flex; align-items: center; gap: 8px; }
.buddy-plan.err { color: var(--warn); flex-wrap: wrap; }
.buddy-plan-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.buddy-plan-head .pill.pos { color: var(--ok); } .buddy-plan-head .pill.neg { color: var(--danger); }
.buddy-plan-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px; }
.buddy-plan-grid .tl-out { background: var(--bg); border: 1px solid var(--border); border-radius: 8px; padding: 7px 10px; display: flex; flex-direction: column; gap: 2px; }
.buddy-plan-grid .tl-out span { font-size: 0.7rem; color: var(--muted); display: flex; align-items: center; gap: 5px; }
.buddy-plan-grid .tl-out b { font-size: 0.95rem; font-variant-numeric: tabular-nums; }
.buddy-plan-grid .tl-out.big b { font-size: 1.12rem; color: var(--accent); }
.buddy-plan .tag { font-family: var(--mono); font-size: 0.56rem; letter-spacing: .03em; border-radius: 5px; padding: 1px 5px; font-style: normal; text-transform: uppercase; }
.buddy-plan .tag.det { color: var(--ok); border: 1px solid var(--ok); opacity: .8; }
.buddy-plan .tag.est { color: var(--warn); border: 1px solid var(--warn); opacity: .8; }
.buddy-plan-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.buddy-plan-foot { font-size: 0.76rem; margin-top: 8px; line-height: 1.5; }
.btn.xs { font-size: 0.72rem; padding: 4px 8px; }

/* v1.19.0 (Invest Buddy 1a) — custom entry · event flags · watch rules · hot star */
.buddy-custom { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; margin: 14px 0; }
.buddy-custom h3 { margin: 0 0 2px; }
.buddy-custom h3 .muted { font-size: 0.74rem; font-weight: 400; }
.buddy-custom-sub { font-size: 0.78rem; margin: 0 0 10px; }
.buddy-custom-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.buddy-custom-row input { flex: 1 1 200px; min-width: 160px; background: var(--bg); border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; color: var(--text); font-size: 0.9rem; text-transform: uppercase; }
.buddy-custom-row input:focus { outline: none; border-color: var(--accent); }
.buddy-flags { margin-top: 10px; }
.buddy-flags h5, .buddy-watch h5 { margin: 0 0 6px; font-size: 0.74rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); display: flex; align-items: center; gap: 6px; }
.buddy-flags h5 .tag, .buddy-watch h5 .tag { font-family: var(--mono); font-size: 0.56rem; border-radius: 5px; padding: 1px 5px; font-style: normal; text-transform: uppercase; }
.buddy-flags h5 .tag.det, .buddy-watch h5 .tag.det { color: var(--ok); border: 1px solid var(--ok); opacity: .8; }
.buddy-watch h5 .tag.est { color: var(--warn); border: 1px solid var(--warn); opacity: .8; }
.buddy-flags.none { font-size: 0.78rem; margin-top: 10px; }
.buddy-flags-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.buddy-flags-list li { font-size: 0.8rem; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.buddy-watch { margin-top: 12px; border-top: 1px dashed var(--border); padding-top: 10px; }
.buddy-watch-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 7px; }
.buddy-watch-row { display: flex; flex-direction: column; gap: 1px; font-size: 0.8rem; border-left: 2px solid var(--accent); padding-left: 9px; }
.buddy-watch-row.inv { border-left-color: var(--danger); }
.buddy-watch-cond b { font-variant-numeric: tabular-nums; }
.buddy-watch-note { font-size: 0.74rem; line-height: 1.45; }
/* v1.115.0 RULES-ON-PLAN — the deterministic cross-reference regime read on the
   Invest Buddy plan card. The regime pill / lean / score / signal chips REUSE the
   existing .rules-regime · .rules-lean · .rules-score · .rules-signal styles; this
   is just the block frame, mirroring .buddy-watch. No new colors. */
.buddy-regime { margin-top: 12px; border-top: 1px dashed var(--border); padding-top: 10px; }
.buddy-regime h5 { margin: 0 0 6px; font-size: 0.74rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); display: flex; align-items: center; gap: 6px; }
.buddy-regime h5 .tag.det { font-family: var(--mono); font-size: 0.56rem; border-radius: 5px; padding: 1px 5px; font-style: normal; text-transform: uppercase; color: var(--ok); border: 1px solid var(--ok); opacity: .8; }
.buddy-regime-top { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.buddy-regime-n { font-family: var(--mono); font-size: 0.72rem; }
.buddy-regime-list { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.buddy-regime-list li { font-size: 0.8rem; display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.buddy-regime-foot { font-size: 0.72rem; margin: 8px 0 0; line-height: 1.45; }
.buddy-regime.none { font-size: 0.78rem; margin-top: 12px; border-top: 1px dashed var(--border); padding-top: 10px; }
.buddy-cand.hot { border-color: var(--accent); }
.buddy-cand-star { color: var(--accent); font-size: 1rem; cursor: help; }
.chip.hot { color: var(--accent); border-color: var(--accent); }

/* v1.15.0 slice 2 — Invest Buddy coach read + what-if Q&A */
.buddy-coach { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; margin-top: 14px; }
.buddy-coach-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.buddy-coach-head h3 { margin: 0; display: flex; align-items: baseline; gap: 8px; }
.buddy-coach-head h3 .muted { font-size: 0.72rem; font-weight: 400; }
.buddy-coach-ctl { display: flex; align-items: center; gap: 10px; }
.buddy-coach-web { font-size: 0.76rem; color: var(--muted); display: inline-flex; align-items: center; gap: 5px; cursor: pointer; white-space: nowrap; }
.buddy-coach-body { margin-top: 10px; font-size: 0.86rem; line-height: 1.5; }
.buddy-coach-body.loading, .buddy-wi-body.loading { color: var(--muted); display: flex; align-items: center; gap: 8px; }
.buddy-coach-body.err, .buddy-wi-body.err { color: var(--danger, #d66); }
.buddy-coach-tags { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.buddy-coach-sum { margin: 4px 0 10px; font-weight: 500; }
.buddy-coach-body h5 { margin: 10px 0 4px; font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); }
.buddy-coach-list { margin: 0; padding-left: 18px; }
.buddy-coach-list li { margin: 3px 0; }
.buddy-coach-list.caut li { color: var(--warn, #c89b3c); }
.buddy-coach-foot { font-size: 0.74rem; margin-top: 10px; line-height: 1.5; }
.buddy-wi { margin-top: 14px; border-top: 1px solid var(--border); padding-top: 12px; }
.buddy-wi-lbl { display: block; font-size: 0.8rem; margin-bottom: 6px; }
.buddy-wi-lbl .muted { font-size: 0.74rem; }
.buddy-wi-row { display: flex; gap: 8px; }
.buddy-wi-row input { flex: 1 1 auto; min-width: 0; }
.buddy-wi-body { margin-top: 10px; font-size: 0.86rem; line-height: 1.5; }
.buddy-wi-facts { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: baseline; margin-bottom: 8px; font-size: 0.78rem; }
.buddy-wi-fact { border: 1px solid var(--border); border-radius: 6px; padding: 2px 7px; }
.buddy-wi-fact i { color: var(--muted); font-style: normal; margin-right: 4px; }
.buddy-wi-ans { display: block; }
.buddy-wi-ans p { margin: 6px 0 0; }
.buddy-wi-caut { font-size: 0.76rem; margin-top: 6px; }
.buddy-wi-foot { font-size: 0.74rem; margin-top: 8px; line-height: 1.5; }

/* ============================================================================
   T3 (Trust Layer, stage 3) — price-truth provenance chip + the
   "How projections work / Sources & methods" transparency panel (v1.30.0).
   ========================================================================== */
.qp-chip { display: inline-flex; align-items: center; gap: .35ch; font-family: var(--mono);
  font-size: .66rem; line-height: 1.4; padding: 1px 7px; border-radius: 6px;
  border: 1px solid var(--border-2); color: var(--muted); white-space: nowrap; }
.qp-chip .qp-tag { text-transform: uppercase; letter-spacing: .04em; font-weight: 600; opacity: .75; }
.qp-chip .qp-agree { font-weight: 600; }
.qp-chip.q2 { border-color: var(--accent-dim); color: var(--accent); }
.qp-chip.q2 .qp-agree { color: var(--accent); }
.qp-chip.q1 { border-color: var(--border-2); color: var(--muted); }
.qp-chip.qd { border-color: var(--warn); color: var(--warn); }
.qp-chip.qd .qp-agree { color: var(--warn); }
.qp-chip.q0 { border-color: var(--border); color: var(--muted); opacity: .85; }
.dd-quote { display: inline-block; margin-top: 3px; }
.buddy-plan-head .qp-chip { margin-left: 6px; vertical-align: baseline; }

.hlp-methods .sm-split { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 6px 0 10px; }
@media (max-width: 720px) { .hlp-methods .sm-split { grid-template-columns: 1fr; } }
.hlp-methods .sm-col { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; background: var(--bg-glow); }
.hlp-methods .sm-col h4 { margin: 0 0 4px; font-size: .9rem; display: flex; align-items: center; gap: 8px; }
.hlp-methods .sm-cap { font-size: .74rem; margin: 0 0 6px; }
.hlp-methods .sm-list { margin: 0; padding-left: 18px; }
.hlp-methods .sm-list li { font-size: .8rem; margin: 3px 0; line-height: 1.4; }
.hlp-methods .sm-col .tag { font-family: var(--mono); font-size: .56rem; border-radius: 5px; padding: 1px 6px; font-style: normal; text-transform: uppercase; }
.hlp-methods .sm-det .tag.det { color: var(--ok); border: 1px solid var(--ok); opacity: .85; }
.hlp-methods .sm-est .tag.est { color: var(--warn); border: 1px solid var(--warn); opacity: .85; }
.hlp-methods .sm-mh { margin: 12px 0 6px; font-size: .92rem; }
.hlp-methods .sm-table { width: 100%; border-collapse: collapse; font-size: .78rem; }
.hlp-methods .sm-table th { text-align: left; color: var(--muted); font-weight: 600; border-bottom: 1px solid var(--border-2); padding: 5px 8px; }
.hlp-methods .sm-table td { border-bottom: 1px solid var(--border); padding: 5px 8px; vertical-align: top; }
.hlp-methods .sm-what { font-weight: 600; }
.hlp-methods .sm-src { color: var(--accent); }
.hlp-methods .sm-note { font-size: .72rem; }
.hlp-methods .sm-why { margin: 6px 0 4px; padding-left: 18px; }
.hlp-methods .sm-why li { font-size: .8rem; margin: 5px 0; line-height: 1.45; }

/* ===== BROKER RAIL — stage 1 (v1.34.0): paper-only execution =============== */
.brk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.55rem .7rem;margin:.5rem 0;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-2)}
.brk-bar.off{opacity:.92}
.brk-bar.on{border-color:var(--accent-dim)}
.brk-bar.on.armed{border-color:var(--danger);box-shadow:inset 0 0 0 1px var(--danger)}
.brk-bar-main{display:flex;align-items:center;gap:.45rem;flex:1 1 60%;min-width:0;flex-wrap:wrap}
.brk-bar-act{display:flex;gap:.4rem;flex:0 0 auto}
.brk-bar-foot{flex:1 1 100%;margin:.3rem 0 0;font-size:.74rem;line-height:1.35}
.brk-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;background:var(--muted)}
.brk-dot.off{background:var(--muted)}
.brk-dot.idle{background:var(--accent)}
.brk-dot.armed{background:var(--danger);box-shadow:0 0 0 3px color-mix(in srgb,var(--danger) 30%,transparent)}
.brk-place-btn{border-color:var(--accent-dim)}
/* confirm modal */
.brk-modal-back{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:1rem}
.brk-modal{width:min(440px,94vw);max-height:88vh;overflow:auto;background:var(--panel);border:1px solid var(--border-2);border-radius:var(--radius);padding:1rem 1.1rem;box-shadow:0 12px 40px rgba(0,0,0,.4)}
.brk-modal-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;margin-bottom:.5rem}
.brk-modal-head h4{margin:0;font-size:1.02rem}
.brk-call{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;margin:.2rem 0 .5rem;font-size:.82rem}
.brk-grid{display:grid;grid-template-columns:1fr;gap:.18rem;margin:.3rem 0 .6rem}
.brk-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.28rem .1rem;border-bottom:1px solid var(--line);font-size:.86rem}
.brk-row span{color:var(--muted)}
.brk-blocks,.brk-warns{border-radius:8px;padding:.45rem .6rem;margin:.4rem 0;font-size:.82rem}
.brk-blocks{background:color-mix(in srgb,var(--danger) 12%,transparent);border:1px solid color-mix(in srgb,var(--danger) 45%,transparent)}
.brk-warns{background:color-mix(in srgb,var(--accent) 10%,transparent);border:1px solid var(--accent-dim)}
.brk-blocks h5,.brk-warns h5{margin:0 0 .2rem;font-size:.74rem;text-transform:uppercase;letter-spacing:.04em}
.brk-blocks ul,.brk-warns ul{margin:0;padding-left:1.1rem}
.brk-blocks li,.brk-warns li{margin:.1rem 0}
.brk-ack{display:flex;align-items:flex-start;gap:.45rem;margin:.5rem 0;font-size:.8rem;line-height:1.35;cursor:pointer}
.brk-ack.dim{opacity:.5;cursor:not-allowed}
.brk-ack input{margin-top:.15rem;flex:0 0 auto}
.brk-modal-act{display:flex;gap:.5rem;margin-top:.3rem}
.brk-modal-act .btn{flex:1 1 auto}
.brk-modal-foot{margin:.5rem 0 0;font-size:.72rem;line-height:1.35}

/* v1.35.0 (#D-SRC) — Settings → Data-source reachability diagnostic.
   A reachability read (can the worker egress reach Yahoo for FX/commodities?),
   never advice. Reuses the theme status tokens. */
.set-diag-head.ok{border-left-color:var(--ok)}
.set-diag-head.warn{border-left-color:var(--warn)}
.set-diag-head.bad{border-left-color:var(--danger)}
.set-diag-row .ok{color:var(--ok)}
.set-diag-row .bad{color:var(--danger)}

/* ===== EI-2 Event Impact composer + EI-4 priority (v1.37.0) ================ */
/* triage priority badge — a labelled estimate from our own math, never advice */
.opp-prio { font-family: var(--mono); font-size: 0.68rem; font-weight: 700; letter-spacing: .03em; border-radius: 5px; padding: 1px 7px; border: 1px solid var(--border-2); color: var(--muted); }
.opp-prio.prio-critical { color: #04110e; background: var(--danger); border-color: var(--danger); }
.opp-prio.prio-high { color: var(--danger); border-color: var(--danger); }
.opp-prio.prio-medium { color: var(--warn); border-color: var(--warn); }
.opp-prio.prio-low { color: var(--muted); }
/* corroboration line: counted fact (det) + AI outlets (est) */
.opp-corr { display: flex; flex-wrap: wrap; gap: 6px 12px; margin-top: 7px; font-size: 0.74rem; }
.opp-corr-det { color: var(--ok); font-weight: 600; }
.opp-corr-ai { color: var(--muted); }
/* tiered watchlist of Direct effects */
.opp-tiers { margin-top: 9px; display: flex; flex-direction: column; gap: 5px; }
.opp-tiers-lbl { font-family: var(--mono); font-size: 0.66rem; letter-spacing: .04em; color: var(--accent); text-transform: uppercase; }
.opp-tiers-none { font-size: 0.78rem; color: var(--muted); }
.opp-tier { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.opp-tier-lbl { font-family: var(--mono); font-size: 0.62rem; font-weight: 700; text-transform: uppercase; border-radius: 4px; padding: 0 5px; min-width: 48px; text-align: center; }
.opp-tier.tier-high .opp-tier-lbl { color: #04110e; background: var(--ok); }
.opp-tier.tier-medium .opp-tier-lbl { color: #04110e; background: var(--warn); }
.opp-tier.tier-low .opp-tier-lbl { color: var(--muted); border: 1px solid var(--border-2); }
.opp-eff { font-size: 0.76rem; border-radius: 6px; padding: 2px 8px; background: var(--panel); border: 1px solid var(--border); border-left: 3px solid var(--border-2); }
.opp-eff.sign-supportive { border-left-color: var(--ok); } .opp-eff.sign-adverse { border-left-color: var(--danger); } .opp-eff.sign-mixed { border-left-color: var(--warn); }
.opp-eff-prob { font-family: var(--mono); font-weight: 600; }
/* EI-1 downstream cascade — second-order chain, decaying. Dashed left rule */
/* signals a DERIVED (not Direct) effect; reuses the sign color tokens. */
.opp-cascade { margin-top: 9px; display: flex; flex-direction: column; gap: 5px; padding-left: 9px; border-left: 2px dashed var(--border-2); }
.opp-cas-lbl { font-family: var(--mono); font-size: 0.66rem; letter-spacing: .04em; color: var(--muted); text-transform: uppercase; }
.opp-cas-tier { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.opp-cas-tier-lbl { font-family: var(--mono); font-size: 0.62rem; font-weight: 700; text-transform: uppercase; border-radius: 4px; padding: 0 5px; min-width: 64px; text-align: center; color: var(--muted); border: 1px solid var(--border-2); }
.opp-cas-tier.cas-macro .opp-cas-tier-lbl { color: var(--accent); border-color: var(--accent-dim); }
.opp-cas-node { font-size: 0.74rem; border-radius: 6px; padding: 2px 8px; background: var(--panel); border: 1px solid var(--border); border-left: 3px dashed var(--border-2); color: var(--muted); }
.opp-cas-node.sign-supportive { border-left-color: var(--ok); } .opp-cas-node.sign-adverse { border-left-color: var(--danger); } .opp-cas-node.sign-mixed { border-left-color: var(--warn); }
.opp-est { color: var(--muted); font-weight: 400; font-size: 0.85em; }
/* the pasted-headline composer bar */
.opp-composer { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 10px 0 4px; padding: 9px 11px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; }
.opp-comp-lbl { font-family: var(--mono); font-size: 0.72rem; letter-spacing: .03em; color: var(--accent); }
.opp-hl-input { flex: 1 1 280px; min-width: 200px; background: var(--panel); border: 1px solid var(--border); border-radius: 7px; color: var(--text); font: inherit; font-size: 0.85rem; padding: 6px 10px; }
.opp-hl-input:focus { outline: none; border-color: var(--accent-dim); }
.opp-hl-run { background: var(--accent); color: #04110e; border: none; border-radius: 7px; font: inherit; font-weight: 600; font-size: 0.82rem; padding: 6px 12px; cursor: pointer; }
.opp-hl-run:hover { filter: brightness(1.05); }
.opp-hl-run.busy, .opp-hl-run:disabled { opacity: .72; cursor: progress; filter: none; }
.opp-spin-ic { display: inline-block; width: 11px; height: 11px; margin-right: 7px; border: 2px solid var(--border-2, var(--border)); border-top-color: var(--accent); border-radius: 50%; vertical-align: -1px; animation: adv-spin 0.7s linear infinite; }
.opp-loading .opp-aiest { display: inline-flex; align-items: center; }
.opp-hl-panel:empty { display: none; }
.opp-hl-panel { margin-bottom: 10px; }

/* EI-0 — breaking-news trigger: scan bar + ranked "Breaking now" strip --------- */
.ev-breaking-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 10px 0 8px; }
.ev-breaking-scan { background: var(--accent); color: #04110e; border: none; border-radius: 7px; font: inherit; font-weight: 700; font-size: 0.82rem; padding: 6px 13px; cursor: pointer; }
.ev-breaking-scan:hover { filter: brightness(1.06); }
.ev-breaking-scan:disabled { opacity: .6; cursor: default; }
.ev-breaking-note { font-size: 0.72rem; }
.ev-breaking-strip { margin: 0 0 12px; padding: 9px 11px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 9px; }
.ev-brk-head { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; }
.ev-brk-title { font-family: var(--mono); font-size: 0.72rem; letter-spacing: .03em; color: var(--accent); }
.ev-brk-count { font-family: var(--mono); font-size: 0.68rem; font-weight: 700; color: var(--muted); border: 1px solid var(--border-2); border-radius: 10px; padding: 0 7px; }
.ev-brk-empty { font-size: 0.78rem; }
.ev-brk-rows { display: flex; flex-direction: column; gap: 6px; }
.ev-brk-row { border: 1px solid var(--border); border-radius: 8px; background: var(--panel); overflow: hidden; }
.ev-brk-open { display: flex; align-items: center; gap: 10px; flex: 1 1 auto; min-width: 0; text-align: left; background: none; border: none; color: var(--text); font: inherit; padding: 7px 10px; cursor: pointer; }
.ev-brk-open:hover { background: var(--panel-2); }
.ev-brk-label { flex: 1 1 auto; font-size: 0.86rem; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Slice 0.1 — breaking-row action cluster (compose / copy / watch) as siblings. */
.ev-brk-head { display: flex; align-items: center; gap: 6px; }
.ev-brk-acts { display: flex; align-items: center; gap: 6px; flex: 0 0 auto; padding: 0 8px 0 2px; }
.ev-brk-state { font-family: var(--mono); font-size: 0.66rem; letter-spacing: .03em; color: var(--muted); text-transform: uppercase; }
.ev-brk-state.st-active { color: var(--accent); }
.ev-brk-eff { font-size: 0.7rem; color: var(--muted); white-space: nowrap; }
/* EI-5 (v1.40.0) — per-row resolution affordance + verdict popover + calibration */
.ev-brk-rslv { font-size: 0.7rem; color: var(--accent); border: 1px solid var(--accent-dim); border-radius: 6px; padding: 1px 8px; white-space: nowrap; cursor: pointer; margin-left: auto; }
.ev-brk-rslv:hover { background: var(--accent-dim); color: #04110e; }
.ev-brk-soon { font-size: 0.66rem; white-space: nowrap; margin-left: auto; opacity: .7; }
.ev-resolved { font-size: 0.66rem; font-family: var(--mono); white-space: nowrap; margin-left: auto; padding: 1px 7px; border-radius: 6px; }
.ev-resolved.hit { color: var(--ok); border: 1px solid color-mix(in srgb, var(--ok) 45%, transparent); }
.ev-resolved.miss { color: var(--danger); border: 1px solid color-mix(in srgb, var(--danger) 45%, transparent); }
.ev-resolved.unsure { color: var(--muted); border: 1px solid var(--line, #2a3b3a); }
.ev-verdict { margin: 4px 10px 10px; padding: 10px 12px; border: 1px solid var(--line, #2a3b3a); border-radius: 8px; background: color-mix(in srgb, var(--accent) 5%, transparent); display: flex; flex-direction: column; gap: 6px; }
.ev-verdict-q { font-size: 0.74rem; color: var(--text); font-weight: 600; }
.ev-verdict-row { display: flex; gap: 6px; flex-wrap: wrap; }
.ev-vbtn { font: inherit; font-size: 0.72rem; padding: 3px 12px; border-radius: 6px; border: 1px solid var(--line, #2a3b3a); background: none; color: var(--text); cursor: pointer; }
.ev-vbtn:hover { border-color: var(--accent-dim); }
.ev-vbtn.on { background: var(--accent-dim); color: #eafffb; border-color: var(--accent-dim); }
.ev-vbtn.hit.on { background: var(--ok); color: #04110e; border-color: var(--ok); }
.ev-vbtn.miss.on { background: var(--danger); color: #1a0608; border-color: var(--danger); }
.ev-verdict-note { font: inherit; font-size: 0.74rem; padding: 5px 8px; border-radius: 6px; border: 1px solid var(--line, #2a3b3a); background: var(--bg, #0b1413); color: var(--text); }
.ev-verdict-note:focus { outline: none; border-color: var(--accent-dim); }
.ev-verdict-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ev-verdict-save { font: inherit; font-size: 0.74rem; padding: 4px 14px; border-radius: 6px; border: none; background: var(--accent); color: #04110e; cursor: pointer; }
.ev-verdict-save:disabled { opacity: .4; cursor: not-allowed; }
.ev-verdict-cancel { font: inherit; font-size: 0.72rem; background: none; border: none; color: var(--muted); cursor: pointer; text-decoration: underline; }
.ev-verdict-hint { font-size: 0.66rem; }
/* v1.41.0 — EI-5 auto-proposer evidence line (the computed move + its pre-fill) */
.ev-verdict-auto { font-size: 0.7rem; line-height: 1.35; color: var(--text); padding: 5px 8px; border-radius: 6px; border: 1px dashed var(--accent-dim, #2f6f6a); background: color-mix(in srgb, var(--accent) 7%, transparent); }
.ev-verdict-auto.muted { color: var(--muted); border-style: dotted; background: transparent; }
.ev-verdict-auto b { color: var(--accent); font-weight: 600; }
.ev-calib { margin: 8px 0 4px; padding: 10px 12px; border: 1px solid var(--line, #2a3b3a); border-radius: 8px; }
.ev-calib-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; justify-content: space-between; }
.ev-calib-title { font-size: 0.78rem; font-weight: 600; color: var(--text); }
.ev-calib-stat { font-size: 0.72rem; }
.ev-calib-ready { color: var(--accent); }
.ev-calib-empty { font-size: 0.72rem; margin-top: 6px; line-height: 1.45; }
.ev-calib-overall { font-size: 0.72rem; margin: 8px 0 6px; color: var(--text); }
.ev-calib-table { display: flex; flex-direction: column; gap: 4px; }
.ev-calib-krow { display: grid; grid-template-columns: 90px 1fr auto; align-items: center; gap: 8px; font-size: 0.72rem; }
.ev-calib-k { font-family: var(--mono); color: var(--muted); text-transform: capitalize; }
.ev-calib-bar { height: 6px; border-radius: 3px; background: color-mix(in srgb, var(--text) 12%, transparent); overflow: hidden; }
.ev-calib-fill { display: block; height: 100%; background: var(--accent); }
.ev-calib-rate { font-family: var(--mono); white-space: nowrap; }
.ev-brk-panel:empty { display: none; }
.ev-brk-panel { padding: 0 10px 10px; }
.opp-shell-only .opp-run-ai { background: none; border: 1px solid var(--accent-dim); color: var(--accent); border-radius: 6px; font: inherit; font-size: 0.72rem; padding: 2px 9px; cursor: pointer; }
.opp-shell-only .opp-run-ai:hover { background: var(--accent-dim); color: #04110e; }

/* v1.39.0 — scan-button feedback + composer clarity ---------------------------- */
.ev-breaking-scan.busy { opacity: .8; cursor: progress; }
.ev-breaking-status { font-size: 0.74rem; font-family: var(--mono); letter-spacing: .02em; }
.ev-breaking-status.scanning { color: var(--accent); }
.ev-breaking-status.scanning::before { content: ''; display: inline-block; width: 9px; height: 9px; margin-right: 6px; border: 2px solid var(--accent); border-top-color: transparent; border-radius: 50%; vertical-align: -1px; animation: evspin .7s linear infinite; }
.ev-breaking-status.done { color: var(--ok, var(--accent)); }
.ev-breaking-status.err { color: var(--danger); cursor: default; }
@keyframes evspin { to { transform: rotate(360deg); } }
.opp-comp-hint { font-size: 0.74rem; margin: 0 0 10px; line-height: 1.45; }
.opp-comp-eg { background: none; border: 1px solid var(--accent-dim); color: var(--accent); border-radius: 6px; font: inherit; font-size: 0.72rem; padding: 1px 9px; cursor: pointer; white-space: nowrap; }
.opp-comp-eg:hover { background: var(--accent-dim); color: #04110e; }

/* ── ENGINE 1 — AUDIT (v1.44.0): the one-click pre-trade audit panel ─────── */
.aud-slot:empty { display: none; }
.aud-run-btn { font-weight: 600; }
.aud-panel {
  margin-top: 10px; padding: 12px 14px; border: 1px solid var(--line, #2a2f3a);
  border-radius: 10px; background: var(--panel-2, rgba(255,255,255,0.02));
}
.aud-head-row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.aud-head-row b { font-size: 13px; letter-spacing: .02em; }
.aud-asof { font-size: 11px; }
.aud-verdict { margin: 8px 0; padding: 6px 10px; border-radius: 8px; border-left: 3px solid var(--muted, #66707f); background: rgba(255,255,255,0.02); }
.aud-verdict b { font-size: 15px; }
.aud-verdict .aud-conf { font-weight: 600; opacity: .9; }
.aud-verdict .aud-vnote { display: block; font-size: 11px; opacity: .7; margin-top: 2px; }
.aud-verdict.aud-long  { border-left-color: var(--pos, #2ecc71); }
.aud-verdict.aud-short { border-left-color: var(--neg, #e74c3c); }
.aud-verdict.aud-watch { border-left-color: var(--muted, #f0b429); }
.aud-stages { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.aud-stage { display: flex; gap: 8px; align-items: flex-start; padding: 5px 6px; border-radius: 6px; }
.aud-stage:nth-child(odd) { background: rgba(255,255,255,0.015); }
.aud-stage .aud-n { flex: 0 0 18px; text-align: center; font-size: 11px; opacity: .55; line-height: 1.4; }
.aud-stage .aud-main { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; flex: 1; }
.aud-stage .aud-lab { font-weight: 600; font-size: 12px; }
.aud-stage .aud-head { font-size: 12px; opacity: .92; }
.aud-stage .aud-detail { flex-basis: 100%; font-size: 11px; opacity: .6; }
.aud-stage.notrun { opacity: .62; }
.aud-stage.notrun .aud-head { font-style: italic; }
.aud-stage.ok .aud-lab::before { content: "● "; color: var(--pos, #2ecc71); font-size: 9px; }
.aud-stage.weak .aud-lab::before { content: "● "; color: var(--muted, #f0b429); font-size: 9px; }
.aud-stage.notrun .aud-lab::before { content: "○ "; opacity: .5; font-size: 9px; }
.aud-end { margin-top: 10px; }
.aud-end-lab { display: block; font-size: 12px; font-weight: 600; margin-bottom: 4px; }
.aud-ticket { width: 100%; box-sizing: border-box; font-family: var(--mono, monospace); font-size: 11px;
  border: 1px solid var(--line, #2a2f3a); border-radius: 6px; background: rgba(0,0,0,0.18); color: inherit;
  padding: 8px; resize: vertical; }
.aud-end-acts { display: flex; align-items: center; gap: 10px; margin-top: 6px; flex-wrap: wrap; }
.aud-end-hint { font-size: 11px; }
.aud-arm { font-size: 11px; margin: 6px 0 0; }
.aud-foot { font-size: 11px; margin: 8px 0 0; line-height: 1.5; }
/* G1 · devil's-advocate challenge block — reuses the aud- visual language */
.aud-challenge { margin: 10px 0 0; padding: 8px 10px; border-radius: 8px;
  border-left: 3px solid var(--muted, #66707f); background: rgba(255,255,255,0.015); }
.aud-challenge.aud-chal-vlong  { border-left-color: var(--neg, #e74c3c); }  /* a LONG call's challenge argues the bear/short side */
.aud-challenge.aud-chal-vshort { border-left-color: var(--pos, #2ecc71); }  /* a SHORT call's challenge argues the bull/long side */
.aud-challenge.aud-chal-vwatch { border-left-color: var(--muted, #f0b429); }
.aud-chal-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.aud-chal-head b { font-size: 13px; }
.aud-chal-head .aud-chal-btn { margin-left: auto; }
.aud-chal-side { font-size: 12px; margin: 6px 0; opacity: .92; }
.aud-chal-sec { margin: 6px 0; }
.aud-chal-lab { display: inline-block; font-size: 10px; text-transform: uppercase; letter-spacing: .04em; opacity: .6; margin-right: 4px; }
.aud-chal-list { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 3px; }
.aud-chal-list li { font-size: 12px; padding-left: 14px; position: relative; line-height: 1.4; }
.aud-chal-list li::before { content: "•"; position: absolute; left: 2px; opacity: .6; }
.aud-chal-list li.aud-chal-conflict::before { content: "✕"; color: var(--neg, #e74c3c); opacity: .85; }
.aud-chal-list li.aud-chal-weak::before { content: "–"; opacity: .55; }
.aud-chal-thin { font-size: 12px; margin: 4px 0 0; line-height: 1.45; }
.aud-chal-conf, .aud-chal-inval { font-size: 12px; margin: 6px 0 0; line-height: 1.45; }
.aud-chal-ai { font-size: 12px; margin: 8px 0 0; padding: 7px 9px; border-radius: 6px; background: rgba(255,255,255,0.02); }
.aud-chal-ai.err { background: rgba(231,76,60,0.06); }
.aud-chal-ai-head { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.aud-chal-thesis { margin: 4px 0; line-height: 1.5; }
.aud-chal-aiwatch { margin: 4px 0; opacity: .92; }
.aud-chal-risks { list-style: disc; margin: 4px 0 0; padding-left: 18px; display: flex; flex-direction: column; gap: 2px; }
.aud-chal-risks li { line-height: 1.4; }

/* v1.77.0 Tier-3/C2: Market Intel interior section bar (Watchlists · Report) — reuses .lab-subtabs */
.mic-engine .lab-subtabs { margin: 6px 0 12px; }

/* EI-3 (v1.82.0) — Market Intel → Exposure section: book-level thematic concentration */
.exp-headline { font-size: 1.02rem; margin: 6px 0 12px; line-height: 1.5; }
.exp-ls { display: flex; flex-wrap: wrap; gap: 16px; font-size: 12px; color: var(--muted); margin: 0 0 14px; }
.exp-ls strong { color: var(--text); }
.exp-block { margin: 0 0 16px; }
.exp-block h4 { margin: 0 0 8px; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.exp-row { display: grid; grid-template-columns: minmax(140px, 1.4fr) minmax(80px, 2fr) 52px minmax(0, 1.6fr); align-items: center; gap: 10px; padding: 5px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
.exp-row:last-child { border-bottom: none; }
.exp-row-cls { grid-template-columns: minmax(140px, 1.4fr) minmax(80px, 2fr) 52px; }
.exp-row-label { display: flex; align-items: center; gap: 7px; color: var(--text); }
.exp-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; flex: none; }
.exp-row-pct { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
.exp-row-syms { font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.exp-bar { display: block; height: 8px; border-radius: 4px; background: var(--panel-2); overflow: hidden; }
.exp-bar-fill { display: block; height: 100%; border-radius: 4px; }
.exp-bar-long  { background: var(--ok); }
.exp-bar-short { background: var(--danger); }
.exp-bar-flat  { background: var(--muted); }
.exp-dir { font-size: 10px; padding: 1px 6px; border-radius: 6px; border: 1px solid var(--border-2); }
.exp-dir-long  { color: var(--ok); }
.exp-dir-short { color: var(--danger); }
.exp-dir-flat  { color: var(--muted); }
.exp-meta { font-size: 12px; margin: 6px 0 0; }
.exp-caveat { margin-top: 14px; }
.exp-caveat summary { cursor: pointer; color: var(--muted); font-size: 12px; }

/* v1.94.0 PLAYBOOK slice 2 — Trader-DNA section (reuses rep-/exp- language + tokens) */
.pb-wrap { padding-bottom: 24px; }
.pb-empty p { margin: 6px 0; line-height: 1.55; }
.pb-prov { margin: 10px 0 14px; padding: 8px 12px; border-left: 3px solid var(--warn); background: var(--panel-2); border-radius: 4px; font-size: 12.5px; line-height: 1.5; }
.pb-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px; margin: 4px 0 14px; }
.pb-card { border: 1px solid var(--border); border-radius: 8px; padding: 14px 16px; background: var(--panel-2); }
.pb-card h4 { margin: 0 0 12px; font-size: 0.96rem; display: flex; flex-wrap: wrap; gap: 8px; align-items: baseline; }
.pb-card-n { font-size: 11px; font-weight: 400; }
.pb-card h5 { margin: 12px 0 6px; font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--muted); }
.pb-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(108px, 1fr)); gap: 10px; }
.pb-stat { display: flex; flex-direction: column; gap: 1px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--panel); }
.pb-stat-v { font-family: var(--mono); font-size: 1.12rem; font-weight: 600; }
.pb-stat-l { font-size: 11px; color: var(--muted); }
.pb-stat-sub { font-size: 10px; }
.pb-stat.pb-pos .pb-stat-v { color: var(--ok); }
.pb-stat.pb-neg .pb-stat-v { color: var(--danger); }
.pb-rows { display: flex; flex-direction: column; gap: 4px; }
.pb-row { display: flex; justify-content: space-between; gap: 12px; font-size: 12.5px; padding: 3px 0; border-bottom: 1px solid var(--border); }
.pb-row:last-child { border-bottom: 0; }
.pb-row-k { color: var(--muted); }
.pb-row-v { font-family: var(--mono); text-align: right; }
.pb-row-v.pb-pos { color: var(--ok); }
.pb-row-v.pb-neg { color: var(--danger); }
.pb-block { margin-top: 6px; }
.pb-cal-wrap { margin: 2px 0 6px; }
.pb-cal { display: inline-block; font-size: 12px; padding: 4px 10px; border-radius: 12px; border: 1px solid var(--border); }
.pb-cal-good { color: var(--ok); border-color: var(--ok); }
.pb-cal-bad { color: var(--danger); border-color: var(--danger); }
.pb-flags-card .pb-block { margin-top: 10px; }
.pb-flag { display: flex; flex-direction: column; gap: 1px; padding: 7px 10px; border-radius: 6px; margin-bottom: 6px; border-left: 3px solid var(--border); background: var(--panel); }
.pb-flag-good { border-left-color: var(--ok); }
.pb-flag-warn { border-left-color: var(--danger); }
.pb-flag-note { border-left-color: var(--muted); }
.pb-flag-label { font-size: 13px; font-weight: 500; }
.pb-flag-basis { font-size: 11.5px; line-height: 1.45; }
.pb-read { margin: 6px 0 4px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--panel-2); }
.pb-read-cta { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.pb-read-head { font-size: 13px; font-weight: 600; margin-bottom: 6px; }
.pb-read-body { margin: 4px 0 8px; line-height: 1.6; font-size: 13.5px; }
.pb-read-line { margin: 3px 0; font-size: 13px; line-height: 1.5; }
.pb-read-foot { margin-top: 8px; font-size: 11.5px; }
.pb-read-hint { font-size: 11.5px; }
/* v1.95.0 (Playbook slice 3) — DNA flags, active at decision time, on the Invest
   Buddy plan card. A contextual mirror of the user's own det record, between the
   conviction card and the plan grid. Reuses the global tokens; no new colors. */
.pb-nudge-wrap { margin: 8px 0 12px; padding: 10px 12px; border: 1px solid var(--border); border-left: 3px solid var(--warn); border-radius: 8px; background: var(--panel-2); }
.pb-nudge-h { font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--muted); margin-bottom: 8px; display: flex; gap: 8px; align-items: baseline; }
.pb-nudge { display: flex; gap: 9px; align-items: flex-start; padding: 6px 0; border-top: 1px solid var(--border); }
.pb-nudge:first-of-type { border-top: 0; padding-top: 2px; }
.pb-nudge-ico { font-size: 13px; line-height: 1.5; flex: 0 0 auto; }
.pb-nudge.warn .pb-nudge-ico { color: var(--danger); }
.pb-nudge.good .pb-nudge-ico { color: var(--ok); }
.pb-nudge-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pb-nudge-txt { font-size: 13px; line-height: 1.5; }
.pb-nudge-basis { font-size: 11px; font-family: var(--mono); line-height: 1.4; }
.pb-nudge.prov .pb-nudge-txt { opacity: 0.92; }
.pb-nudge-foot { margin: 8px 0 0; font-size: 11px; line-height: 1.45; }
.pb-read-err { color: var(--danger); font-size: 12.5px; margin: 0 0 8px; }
.pb-read-busy { color: var(--muted); font-style: italic; }

/* ── v1.96.0 §8.1/§8.2 PROMPT EXPORT ("run it free") ─────────────────────────
   Compact row beneath the Playbook ✦ read: ⧉ Copy prompt · ⭳ .txt + an honest
   note. Reuses .linkbtn + the global tokens; no new colors. */
.pe-row { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: baseline; margin: 8px 0 2px; padding: 8px 10px; border: 1px dashed var(--border); border-radius: 8px; }
.pe-row .linkbtn.pe-copy, .pe-row .linkbtn.pe-dl { font-family: var(--mono); font-size: 12px; white-space: nowrap; }
.pe-note { font-size: 11px; line-height: 1.45; flex: 1 1 220px; min-width: 0; }

/* ===== v1.103.0 AUTOPILOT slice 1 — Auto-watch universe panel (Market Intel → Watchlists) ===== */
.mic-autowatch { margin: 0 0 12px; }
.aw { border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel-2); overflow: hidden; }
.aw > .aw-sum { list-style: none; cursor: pointer; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; padding: 8px 12px; font-size: 13px; }
.aw > .aw-sum::-webkit-details-marker { display: none; }
.aw-title { font-weight: 700; letter-spacing: .2px; }
.aw-count { font-family: var(--mono); font-size: 11px; color: var(--accent); border: 1px solid var(--border); border-radius: 999px; padding: 0 7px; }
.aw-sub { font-size: 11px; flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.aw-foot-tag { font-family: var(--mono); font-size: 9px; text-transform: uppercase; letter-spacing: .5px; color: var(--muted); border: 1px solid var(--border); border-radius: 4px; padding: 0 4px; }
.aw-body { padding: 4px 12px 10px; border-top: 1px solid var(--border); }
.aw-rows { display: flex; flex-direction: column; gap: 6px; padding: 6px 0; }
.aw-row { display: grid; grid-template-columns: 92px 1fr auto; align-items: center; gap: 10px; padding: 5px 0; border-bottom: 1px dashed var(--border); }
.aw-row:last-child { border-bottom: 0; }
.aw-sym { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.aw-sym b { font-family: var(--mono); font-size: 14px; }
.aw-cls { font-size: 9px; text-transform: uppercase; letter-spacing: .4px; color: var(--muted); }
.aw-why { display: flex; flex-wrap: wrap; gap: 4px; min-width: 0; }
.aw-chip { font-size: 10.5px; line-height: 1.5; padding: 1px 7px; border-radius: 999px; border: 1px solid var(--border); color: var(--text); background: var(--bg-2); white-space: nowrap; }
.aw-chip.aw-held { border-color: var(--accent); color: var(--accent); }
.aw-chip.aw-theme { border-color: var(--warn); }
.aw-chip.aw-moving { border-color: var(--ok); }
.aw-add { white-space: nowrap; }
.aw-empty { font-size: 12px; line-height: 1.5; color: var(--muted); padding: 6px 0 4px; }
.aw-disc { font-size: 10.5px; line-height: 1.45; padding-top: 6px; }

/* v1.104.0 — AUTOPILOT LOOP (slice 2): the priority alert feed atop Invest Buddy.
   Reuses global tokens; no new colors. The tier accent = the row's left edge. */
.buddy-autopilot { margin: 0 0 16px; border: 1px solid var(--border); border-radius: 10px; padding: 12px 13px; background: var(--panel-2); }
.ap-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.ap-head h3 { margin: 0; font-size: 0.86rem; }
.ap-head-act { display: flex; align-items: center; gap: 8px; }
.ap-clear-l { font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; }
.ap-clear { font: inherit; font-size: 11px; padding: 2px 6px; border: 1px solid var(--border); border-radius: 6px; background: var(--panel); color: var(--text); }
/* v1.106.0 — auto-prepare opt-in toggle (reuses global tokens; the accent only when ON) */
.ap-autofire-l { display: inline-flex; align-items: center; gap: 4px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); border: 1px solid var(--border); border-radius: 6px; padding: 2px 7px 2px 5px; cursor: pointer; user-select: none; white-space: nowrap; }
.ap-autofire-l input { margin: 0; accent-color: var(--accent); cursor: pointer; }
.ap-autofire-l.on { color: var(--accent); border-color: var(--accent); }
.ap-sub { font-size: 11px; margin: 4px 0 0; }
.ap-empty { font-size: 0.8rem; line-height: 1.55; margin: 8px 0 2px; }
.ap-list { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.ap-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 8px 11px; border-radius: 8px; background: var(--panel); border: 1px solid var(--border-2); border-left-width: 3px; }
.ap-row.ap-tier-critical { border-left-color: var(--danger); }
.ap-row.ap-tier-high { border-left-color: var(--warn); }
.ap-row.ap-tier-medium { border-left-color: var(--accent); }
.ap-row.ap-tier-low { border-left-color: var(--border); }
.ap-row.ap-cleared { box-shadow: inset 0 0 0 1px rgba(52,224,200,.12); }
.ap-main { min-width: 0; flex: 1; }
.ap-id { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; font-size: 0.82rem; }
.ap-id b { font-family: var(--mono); letter-spacing: .02em; }
.ap-cls { font-size: 10px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); font-style: normal; }
.ap-dir { font-size: 11px; }
.ap-dir-bull { color: var(--ok); }
.ap-dir-bear { color: var(--danger); }
.ap-dir-mixed { color: var(--muted); }
.ap-tier-tag { font-family: var(--mono); font-size: 10px; padding: 1px 6px; border-radius: 999px; border: 1px solid var(--border); color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
.ap-tier-tag.ap-tier-critical { color: var(--danger); border-color: var(--danger); }
.ap-tier-tag.ap-tier-high { color: var(--warn); border-color: var(--warn); }
.ap-tier-tag.ap-tier-medium { color: var(--accent); border-color: var(--accent); }
.ap-why { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 4px; font-size: 11px; }
.ap-conv { color: var(--text); }
.ap-rsn { font-size: 10px; padding: 1px 6px; border-radius: 6px; background: var(--panel-2); border: 1px solid var(--border); color: var(--muted); font-style: normal; max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ap-rsn-held { color: var(--accent); }
.ap-rsn-moving { color: var(--warn); }
.ap-basis { font-size: 10px; margin-top: 3px; line-height: 1.45; }
.ap-act { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; flex-shrink: 0; }
.ap-prep.busy { opacity: .7; }
.ap-watch { font-size: 10.5px; font-style: italic; }
.ap-foot { font-size: 10px; line-height: 1.5; margin: 12px 0 0; padding-top: 8px; border-top: 1px dashed var(--border); }

/* ── v1.105.0 (Autopilot slice 3 — SIMPLE MODE) ──────────────────────────────
   The whole-app face for the Autopilot loop. A device-sticky `ui.appmode=simple`
   puts `.app-simple` on `.shell`; this is a PURE-CSS chrome strip (no per-element
   JS hiding): drop the rail / banners / advisor dock / pane chrome, and reduce the
   Invest Buddy surface to ONLY the Autopilot alert feed (#buddy-autopilot) + the
   prepared decision card (.buddy-custom slot). The Simple⇄Full toggle (#tb-mode)
   + theme/zen/sign-out stay reachable in the topbar. No new colors — global tokens.
   A DISPLAY mode only — never a buy/sell call, never a profit promise (#12). */
.app-simple .rail,
.app-simple .banner-strip,
.app-simple .advisor-dock,
.app-simple #tb-bnr,
.app-simple #tb-adv,
.app-simple #tb-split { display: none !important; }
.app-simple .workzone { margin-left: 0; }                       /* no rail gutter */
.app-simple .wp-tabs { display: none !important; }              /* pane tab bars */
.app-simple .workzone > .panel ~ .panel { display: none !important; }  /* split → primary pane only */
.app-simple .workzone > .panel { max-width: 920px; margin: 0 auto; width: 100%; }
/* strip the Lab chrome down to the Buddy section */
.app-simple .tl-head,
.app-simple #lab-subtabs,
.app-simple .tl-howto,
.app-simple .trd-mon { display: none !important; }
.app-simple .tl-page { padding-top: 14px; }
/* the Buddy surface → ONLY the Autopilot feed + the prepared/staged decision card */
.app-simple .buddy-wrap > * { display: none !important; }
.app-simple .buddy-wrap > #buddy-autopilot,
.app-simple .buddy-wrap > .buddy-custom { display: block !important; }
/* keep the prepared plan slot (+ opp context); drop the manual "Plan a symbol"
   entry chrome — in simple mode you stage a decision via Prepare only */
.app-simple .buddy-custom > h3,
.app-simple .buddy-custom > .buddy-custom-sub,
.app-simple .buddy-custom > .buddy-custom-row { display: none !important; }
.app-simple .buddy-custom { margin-top: 14px; }
/* the feed becomes the hero */
.app-simple .buddy-autopilot { margin: 0; }
.app-simple .buddy-autopilot .ap-head h3 { font-size: 0.96rem; }
#tb-mode.on { color: var(--accent); }
/* B1 decision-staging card (simple mode, nothing prepared yet — zero spend) */
.ap-stage { margin: 12px 0 0; padding: 12px 13px; border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 9px; background: var(--panel); }
.ap-stage-h { display: flex; align-items: center; gap: 7px; font-size: 0.82rem; }
.ap-stage-ic { font-size: 0.95rem; }
.ap-stage-lead { margin-top: 5px; font-weight: 600; font-size: 0.92rem; }
.ap-stage-sub { font-size: 11.5px; line-height: 1.5; margin: 4px 0 0; }
.ap-back { white-space: nowrap; }

/* ============================================================================
   v1.121.0 MARKETS OVERVIEW (Market Intel → Overview, slice 1) — a cross-asset
   "market state" board. Reuses the established tokens (--panel/--border/--ok/
   --danger/--accent/--muted); NO new colors, NO layout-key bump.
   ============================================================================ */
.ov-wrap { padding-top: 2px; }
.ov-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 6px; }
.ov-block { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px; min-width: 0; }
.ov-block-pulse { grid-column: 1 / -1; }
.ov-block-head { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.ov-block-head h4 { margin: 0; font-size: 0.92rem; }
.ov-block-head .fin-tag.det { color: var(--ok); }
.ov-block-head .fin-tag.est { color: var(--accent); }
.ov-asof { font-size: 0.72rem; margin-left: auto; }
.ov-note { margin: 8px 0 0; font-size: 0.74rem; }
.ov-empty { font-size: 0.82rem; }

/* curve flag */
.ov-curve { font-family: var(--mono); font-size: 0.62rem; letter-spacing: .04em; padding: 1px 7px; border-radius: 999px; border: 1px solid var(--border-2); }
.ov-curve-inverted { color: var(--danger); border-color: var(--danger); }
.ov-curve-flat { color: var(--warn); border-color: var(--warn); }
.ov-curve-normal { color: var(--ok); border-color: var(--accent-dim); }

/* rates row */
.ov-rates { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 14px; }
.ov-rate { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.ov-rate-l { color: var(--muted); font-size: 0.78rem; flex: 1 1 auto; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ov-rate-v { font-family: var(--mono); font-weight: 600; font-size: 0.86rem; }
.ov-delta { font-family: var(--mono); font-size: 0.66rem; }
.ov-vs { font-family: var(--mono); font-size: 0.64rem; padding: 0 5px; border-radius: 6px; border: 1px solid var(--border-2); }
.ov-vs.hot { color: var(--warn); border-color: var(--warn); }
.ov-vs.cool { color: var(--ok); border-color: var(--accent-dim); }

/* calendar rows */
.ov-cal { display: flex; flex-direction: column; gap: 6px; }
.ov-cal-row { display: flex; align-items: center; gap: 8px; font-size: 0.8rem; min-width: 0; }
.ov-cal-when { font-family: var(--mono); font-size: 0.7rem; color: var(--muted); white-space: nowrap; }
.ov-cal-when.today { color: var(--accent); }
.ov-cal-label { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-cal-cty { font-size: 0.7rem; white-space: nowrap; }

/* impact dot */
.ov-imp { width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto; display: inline-block; }
.ov-imp-high { background: var(--danger); }
.ov-imp-med { background: var(--warn); }
.ov-imp-low { background: var(--muted); }

/* movers rows */
.ov-mv { display: flex; flex-direction: column; gap: 6px; }
.ov-mv-row { display: flex; align-items: center; gap: 7px; font-size: 0.8rem; min-width: 0; }
.ov-dir { font-size: 0.72rem; flex: 0 0 auto; }
.ov-dir.up { color: var(--ok); }
.ov-dir.down { color: var(--danger); }
.ov-dir.flat { color: var(--muted); }
.ov-mv-sym { font-family: var(--mono); font-size: 0.8rem; flex: 0 0 auto; }
.ov-mv-head { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted); }
.ov-mv-prob { font-family: var(--mono); font-size: 0.72rem; color: var(--accent); flex: 0 0 auto; }

/* watch pulse */
.ov-pulse { display: flex; flex-wrap: wrap; gap: 18px; }
.ov-pulse-cell { display: flex; flex-direction: column; align-items: center; min-width: 54px; }
.ov-pulse-n { font-family: var(--mono); font-size: 1.3rem; font-weight: 600; line-height: 1.1; }
.ov-pulse-l { font-size: 0.72rem; }

.ov-cold { padding: 18px 6px; }
.ov-disclaimer { margin-top: 12px; font-size: 0.72rem; }

/* v1.122.0 slice 2 — live cross-asset strips (crypto + forex majors + USD read) */
.ov-strips { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 6px 0 12px; }
.ov-strip { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 12px; min-width: 0; }
.ov-strip-head { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.ov-strip-head h4 { margin: 0; font-size: 0.92rem; }
.ov-strip-head .fin-tag.det { color: var(--ok); }
.ovs-rows { display: flex; flex-direction: column; gap: 5px; }
.ovs-row { display: grid; grid-template-columns: 4.2em 1fr 64px 4.2em; align-items: center; gap: 8px; font-size: 0.8rem; min-width: 0; }
.ovs-sym { font-family: var(--mono); font-size: 0.78rem; }
.ovs-px { font-family: var(--mono); text-align: right; overflow: hidden; text-overflow: ellipsis; }
.ovs-spk-wrap { display: inline-flex; justify-content: center; }
.ovs-spk { width: 64px; height: 18px; }
.ovs-spk polyline { fill: none; stroke-width: 1.5; vector-effect: non-scaling-stroke; }
.ovs-spk.up polyline { stroke: var(--ok); }
.ovs-spk.dn polyline { stroke: var(--danger); }
.ovs-spk-empty { display: inline-block; width: 64px; height: 18px; }
.ovs-chg { font-family: var(--mono); font-size: 0.74rem; text-align: right; }
.ovs-chg.pos { color: var(--ok); }
.ovs-chg.neg { color: var(--danger); }
.ov-usd-slot { margin-left: auto; }
.ov-usd { font-size: 0.72rem; font-family: var(--mono); padding: 1px 7px; border-radius: 999px; border: 1px solid var(--border); }
.ov-usd-up { color: var(--ok); border-color: var(--accent-dim); }
.ov-usd-down { color: var(--danger); border-color: var(--accent-dim); }
.ov-usd-mixed { color: var(--muted); }

@media (max-width: 720px) {
  .ov-grid { grid-template-columns: 1fr; }
  .ov-rates { grid-template-columns: 1fr; }
  .ov-strips { grid-template-columns: 1fr; }
}

/* ============================================================================
   v1.128.0 — CHAT MARKDOWN RENDER + per-message COPY (suite primitive)
   The model emits markdown; both chat surfaces used to dump it raw via
   textContent (literal ###, **, pipe-tables). .msg-md renders it; .msg-copy is
   the shared clipboard primitive's button. Token-only, no new hex colors.
   ============================================================================ */
.adv-msg.ai, .ai-msg.bot, .ai-msg.brief, .ai-msg.spoken { position: relative; }
.msg-md { white-space: normal; word-wrap: break-word; }
.msg-md > *:first-child { margin-top: 0; }
.msg-md > *:last-child { margin-bottom: 0; }
.msg-md p { margin: 0 0 8px; }
.msg-md h1, .msg-md h2, .msg-md h3, .msg-md h4, .msg-md h5, .msg-md h6 { margin: 12px 0 6px; line-height: 1.25; font-weight: 650; }
.msg-md h1 { font-size: 1.18em; }
.msg-md h2 { font-size: 1.10em; }
.msg-md h3 { font-size: 1.03em; }
.msg-md h4, .msg-md h5, .msg-md h6 { font-size: 1em; color: var(--muted); }
.msg-md ul, .msg-md ol { margin: 4px 0 8px; padding-left: 20px; }
.msg-md li { margin: 2px 0; }
.msg-md li.task { list-style: none; margin-left: -16px; }
.msg-md li.task input { margin-right: 6px; vertical-align: middle; }
.msg-md code { font-family: var(--mono); font-size: .9em; background: var(--panel); border: 1px solid var(--border); border-radius: 4px; padding: 1px 5px; }
.msg-md pre { margin: 6px 0; padding: 10px 12px; background: var(--panel); border: 1px solid var(--border); border-radius: 8px; overflow-x: auto; }
.msg-md pre code { background: none; border: 0; padding: 0; }
.msg-md blockquote { margin: 6px 0; padding: 2px 12px; border-left: 3px solid var(--border-2); color: var(--muted); }
.msg-md a { color: var(--accent); text-decoration: underline; }
.msg-md hr { border: 0; border-top: 1px solid var(--border); margin: 10px 0; }
.msg-md table { border-collapse: collapse; margin: 6px 0; font-size: .92em; display: block; max-width: 100%; overflow-x: auto; }
.msg-md th, .msg-md td { border: 1px solid var(--border); padding: 5px 9px; text-align: left; vertical-align: top; }
.msg-md thead th { background: var(--panel); font-weight: 600; }
.msg-md tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--panel) 45%, transparent); }
/* per-message copy button — hover-reveal, top-right of the bubble */
.msg-copy { position: absolute; top: 6px; right: 6px; width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center;
  background: var(--panel); border: 1px solid var(--border); border-radius: 6px; color: var(--muted); cursor: pointer;
  font-size: 13px; line-height: 1; padding: 0; opacity: 0; transition: opacity .12s ease, color .12s ease, border-color .12s ease; }
.adv-msg:hover .msg-copy, .ai-msg:hover .msg-copy, .msg-copy:focus-visible { opacity: .85; }
.msg-copy:hover { color: var(--text); border-color: var(--accent-dim); }
.msg-copy.copied { color: var(--ok); border-color: var(--ok); opacity: 1; }
/* keep the reply text clear of the button */
.adv-msg.ai .msg-md, .ai-msg.bot .msg-md, .ai-msg.brief .msg-md, .ai-msg.spoken .msg-md { padding-right: 22px; }

/* ── Focus / Attention panel (v1.136.0 · Focus Mode slice 1) ───────────────── */
/* Token-driven only (no new hardcoded hex); tints via color-mix, the frosted-chat pattern. */
.set-focus-row .focus-panel { gap: 12px; }
.focus-state { font-size: 13px; color: var(--muted); }
.focus-badge { font-weight: 700; font-size: 12px; padding: 1px 7px; border-radius: 999px; }
.focus-badge.on { color: var(--ok); background: color-mix(in srgb, var(--ok) 14%, transparent); }
.focus-badge.off { color: var(--muted); background: color-mix(in srgb, var(--text) 8%, transparent); }
.focus-block { display: flex; flex-direction: column; gap: 6px; }
.focus-block .kv { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); }
.focus-chips { display: flex; flex-wrap: wrap; gap: 6px; min-height: 8px; }
.focus-chip {
  display: inline-flex; align-items: center; gap: 4px;
  font: 600 12px/1 var(--mono, var(--ui)); padding: 4px 7px;
  border-radius: var(--radius, 8px); border: 1px solid var(--border);
  background: color-mix(in srgb, var(--accent) 10%, transparent); color: var(--text);
}
.focus-chip.muted { background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--muted); }
.focus-chip.held { background: color-mix(in srgb, var(--ok) 14%, transparent); border-color: color-mix(in srgb, var(--ok) 35%, var(--border)); cursor: default; }
.focus-chip-x { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 14px; line-height: 1; padding: 0 0 0 2px; }
.focus-chip-x:hover { color: var(--danger); }
.focus-empty { font-size: 12px; }
.focus-add input { font-family: var(--mono, var(--ui)); }
.focus-preview {
  display: flex; flex-direction: column; gap: 3px;
  padding: 8px 10px; border-radius: var(--radius, 8px);
  background: color-mix(in srgb, var(--panel-2, var(--panel)) 70%, transparent);
  border: 1px solid var(--border);
}
.focus-credit { font-size: 13px; }
.focus-counts { font-size: 12px; color: var(--muted); }
.focus-profiles .focus-saved { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.focus-saved-chip {
  display: inline-flex; align-items: center; gap: 4px;
  border: 1px solid var(--border); border-radius: var(--radius, 8px); padding: 2px 4px 2px 7px;
}
.focus-saved-chip.active { border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); background: color-mix(in srgb, var(--accent) 8%, transparent); }
.focus-load { border: 0; background: none; color: var(--text); cursor: pointer; font: 600 12px/1 var(--ui); padding: 2px 0; }
.focus-load:hover { color: var(--accent); }
.focus-saved-meta { font-size: 10px; }
.focus-del { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 14px; line-height: 1; }
.focus-del:hover { color: var(--danger); }
.focus-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.focus-note:empty { display: none; }
.focus-note { color: var(--warn); font-size: 12px; }

/* v1.140.0 · FOCUS slice 5 — editable curation questions + standing demands */
.focusq-block { margin-top: 4px; padding-top: 10px; border-top: 1px solid color-mix(in srgb, var(--text) 8%, transparent); }
.focusq-list { display: flex; flex-direction: column; gap: 6px; }
.focusq-row { display: flex; align-items: center; gap: 8px; }
.focusq-row.off { opacity: .5; }
.focusq-en { flex: 0 0 auto; cursor: pointer; }
.focusq-text { flex: 1 1 auto; min-width: 0; font-family: var(--ui); font-size: 13px; }
.focusq-row.off .focusq-text { text-decoration: line-through; }
.focusq-del { flex: 0 0 auto; border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 15px; line-height: 1; padding: 0 2px; }
.focusq-del:hover { color: var(--danger); }
.focusq-empty { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.focusq-defaults { margin: 0; padding-left: 18px; color: var(--muted); font-size: 12px; display: flex; flex-direction: column; gap: 3px; }
.focusq-foot { font-size: 11px; margin: 2px 0 0; }
