/* Enyo Console — standalone ops page (own theme; not an embedded widget). */
:root{
  --bg:#0e1319; --panel:#141b24; --panel-2:#182231; --line:#243040;
  --fg:#e6edf5; --muted:#8fa3b8; --accent:#4da3ff; --ok:#35c98a;
  --warn:#e8b64c; --bad:#ff6b6b; --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--fg);
  font:14px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
code{font-family:var(--mono);font-size:.92em;background:#1d2735;padding:1px 5px;border-radius:4px}

.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:14px 20px;background:linear-gradient(180deg,#131b25,#0f151d);border-bottom:1px solid var(--line);flex-wrap:wrap}
.brand{display:flex;align-items:baseline;gap:12px}
.wordmark{font-size:24px;font-weight:700;letter-spacing:.22em}
.tagline{color:var(--muted);font-size:12px;letter-spacing:.06em;text-transform:uppercase}
.topmeta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pill{font-family:var(--mono);font-size:12px;padding:4px 10px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel);color:var(--muted);text-transform:uppercase}
.pill[data-state="ok"]{color:var(--ok);border-color:#1f5a44}
.pill[data-state="dry"]{color:var(--accent);border-color:#1d4368}
.pill[data-state="live"]{color:var(--bad);border-color:#6a2b2b}
.pill[data-state="bad"]{color:var(--bad);border-color:#6a2b2b}
.pill[data-state="warn"]{color:var(--warn);border-color:#6a5720}

.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;padding:14px 20px 4px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.kpi label{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em}
.kpi strong{display:block;font-size:20px;font-family:var(--mono);margin-top:2px;overflow-wrap:anywhere}
.kpi small{display:block;color:var(--muted);font-size:11px;margin-top:2px;overflow-wrap:anywhere}

.connect{padding:18px 20px}
.connect[hidden]{display:none}
.connect-inner{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px 18px;max-width:960px}
.connect-copy h2{margin:0 0 4px;font-size:16px}
.connect-copy p{margin:0 0 12px;color:var(--muted)}
.connect-form{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
.connect-form label{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.06em}
input,select,button{font:inherit;color:var(--fg);background:var(--panel-2);
  border:1px solid var(--line);border-radius:7px;padding:7px 10px}
input:focus,select:focus,button:focus{outline:2px solid var(--accent);outline-offset:1px}
button{cursor:pointer}
button:hover{background:#20304a}
.connect-error{color:var(--bad);min-height:18px;margin:10px 0 0;font-family:var(--mono);font-size:12px}

.tabs{display:flex;gap:6px;padding:6px 20px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.tab{background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;
  color:var(--muted);padding:8px 14px;text-transform:uppercase;font-size:12px;letter-spacing:.08em}
.tab[aria-selected="true"]{background:var(--panel);border-color:var(--line);color:var(--fg)}
.tab:focus{outline:2px solid var(--accent);outline-offset:-2px}

main{padding:16px 20px 40px}
.pane[hidden]{display:none}
.pane-title{margin:0 0 4px;font-size:18px}
.pane-sub{margin:0 0 14px;color:var(--muted)}
h3{margin:18px 0 6px;font-size:14px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}

.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-bottom:14px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:10px 12px}
.card label{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em}
.card strong{display:block;font-family:var(--mono);font-size:17px;margin-top:3px}

table{width:100%;border-collapse:collapse;background:var(--panel);
  border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:6px}
caption{caption-side:top;text-align:left;color:var(--muted);font-size:12px;padding:8px 10px}
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em;background:var(--panel-2)}
tr:last-child td{border-bottom:none}
td.num,td.mono{font-family:var(--mono)}
/* Signed numbers by class, not by an inline style attribute — the console ships a CSP with
   style-src 'self', which forbids inline styles (and the live suite flags a violation). */
td.num.pos{color:var(--ok)}
td.num.neg{color:var(--bad)}
tbody tr:hover{background:#1a2433}

.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.chip{background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 12px;
  font-size:12px;cursor:pointer;color:var(--muted)}
.chip[aria-pressed="true"]{background:#20304a;border-color:var(--accent);color:var(--fg)}
.chip .n{font-family:var(--mono);margin-left:6px;color:var(--accent)}
.filters{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.filters .inline{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.06em}
.filter-count{color:var(--muted);font-family:var(--mono);font-size:12px}
.hint{color:var(--muted);font-size:12px;margin:6px 0 0}
/* FreqUI embedded (ADR-007): one front door, upstream's UI untouched, and signed in for you
   (the console mints the engine's token and seeds FreqUI's own localStorage — same origin).
   FreqUI's dashboard is wide: give the frame a floor so its layout keeps its shape and let the
   WRAPPER scroll sideways, instead of the frame shrinking to fit and crushing its columns. */
.desk-scroll{overflow:auto;max-height:80vh;border:1px solid var(--line);border-radius:10px;background:#0b0f14}
#desk-frame{display:block;width:100%;min-width:1280px;height:78vh;min-height:560px;border:0;background:#0b0f14}
.chart-host{position:relative;height:420px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:6px}
.chart-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--muted)}

.badge{font-family:var(--mono);font-size:11px;padding:2px 7px;border-radius:5px;border:1px solid var(--line);color:var(--muted)}
.badge[data-status="inert"]{color:var(--muted)}
.badge[data-status="template"]{color:var(--accent);border-color:#1d4368}
.badge[data-status="research"]{color:var(--warn);border-color:#6a5720}
.badge[data-status="active"]{color:var(--ok);border-color:#1f5a44}

.phase{border:1px solid var(--line);border-radius:10px;margin-bottom:10px;overflow:hidden;background:var(--panel)}
.phase>header{display:flex;justify-content:space-between;gap:12px;padding:10px 12px;background:var(--panel-2)}
.phase h3{margin:0;color:var(--fg);text-transform:none;letter-spacing:0;font-size:14px}
.phase p{margin:8px 12px;color:var(--muted);font-size:12px}
.phase table{margin:0;border:0;border-radius:0}
.phase td:last-child{color:var(--muted);font-size:12px}

footer{display:flex;gap:18px;flex-wrap:wrap;color:var(--muted);font-family:var(--mono);font-size:12px;
  padding:14px 20px;border-top:1px solid var(--line)}

/* ── the tweak surface: limit inputs, file rows, the editor modal ─────────────────────────── */
.limit-input{width:110px;padding:4px 7px;font-family:var(--mono);font-size:12px;color:var(--fg);
  background:var(--panel-2);border:1px solid var(--line);border-radius:5px}
.limit-input.dirty{border-color:var(--warn);color:var(--warn)}
.edit-file{font-family:var(--mono);font-size:12px;color:var(--accent);background:none;border:0;padding:0;
  cursor:pointer;text-decoration:underline}
.edit-file:hover{color:var(--fg)}
.editor-backdrop{position:fixed;inset:0;background:rgba(6,10,16,.72);display:flex;align-items:center;
  justify-content:center;padding:24px;z-index:50}
/* An author `display:flex` beats the UA's `[hidden]{display:none}`, so without this rule the
   "hidden" overlay was invisible and still swallowed every click on the page underneath. */
.editor-backdrop[hidden]{display:none}
.editor{width:min(1100px,94vw);max-height:90vh;display:flex;flex-direction:column;gap:10px;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px;box-shadow:0 18px 60px rgba(0,0,0,.5)}
.editor-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.editor-head h3{margin:0}
#editor-text{width:100%;min-height:52vh;flex:1;font-family:var(--mono);font-size:12.5px;line-height:1.5;
  color:var(--fg);background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:10px;resize:vertical}

/* ── the plugin / file lifecycle surface ──────────────────────────────────────────────────── */
/* The caveat is not decoration: for a strategy it is the sentence that stops "enabled" being
   read as "the running bot now trades this". Amber, so it reads as a caution beside the control. */
.caveat{color:var(--warn);font-size:12px;margin-top:4px;max-width:46ch}
.badge[data-status="failed"]{color:var(--bad);border-color:#6a2b2b}
.plugin-toggle{font-family:var(--mono);font-size:12px;color:var(--accent);background:none;border:0;padding:0;
  cursor:pointer;text-decoration:underline}
.plugin-toggle:hover{color:var(--fg)}
.file-delete{font-family:var(--mono);font-size:12px;color:var(--bad);background:none;border:0;padding:0;
  cursor:pointer;text-decoration:underline}
.file-delete:hover{color:var(--fg)}
.trash-restore{font-family:var(--mono);font-size:12px;color:var(--accent);background:none;border:0;padding:0;
  cursor:pointer;text-decoration:underline}
.trash-restore:hover{color:var(--fg)}
#new-file-text{width:100%;min-height:160px;font-family:var(--mono);font-size:12.5px;line-height:1.5;
  color:var(--fg);background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:10px;resize:vertical}

/* The strategy row's actions: the same link-style controls the file list uses, on the row itself —
   because this is the pane the operator acts from. Amber for the intent toggle, red for delete. */
.strat-edit,.strat-toggle,.strat-delete,.strat-restore,.strat-purge{
  font-family:var(--mono);font-size:12px;background:none;border:0;padding:0;cursor:pointer;text-decoration:underline}
.strat-edit,.strat-restore{color:var(--accent)}
.strat-toggle{color:var(--warn)}
.strat-delete,.strat-purge{color:var(--bad)}
.strat-edit:hover,.strat-toggle:hover,.strat-delete:hover,.strat-restore:hover,.strat-purge:hover{color:var(--fg)}
.actions{white-space:nowrap}
.actions button{margin-right:8px}
.pane-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0 10px}
.pane-tools input[type=text]{min-width:24rem}
.pane-tools .hint{margin:0}
#editor-newpath{min-width:26rem;font-family:var(--mono);font-size:12.5px}

/* War room — the state strip and the candidate ranking. Cards, not a chart: the operator
   reads state off a phone, and a number in a card survives a small screen. */
.war-strip{grid-template-columns:repeat(auto-fit,minmax(205px,1fr))}
.war-card .war-pair{font-family:var(--mono);font-size:13px}
.war-card .war-price{font-family:var(--mono);font-size:17px;margin:3px 0 6px;display:flex;justify-content:space-between;gap:8px}
.war-card .war-chg{color:var(--muted);font-size:13px}
.war-card .war-line{display:flex;justify-content:space-between;gap:8px;font-size:11.5px;color:var(--muted);margin-top:3px}
.war-state{font-weight:600}
.war-state.up{color:var(--ok)} .war-state.down{color:var(--bad)}
.war-state.elevated{color:var(--warn)} .war-state.compressed{color:var(--muted)}
.war-note{color:var(--muted);font-size:11px;margin-top:5px}
.war-card.gone{border-color:#6a2b2b}
td.war-gate{font-size:12px;max-width:34rem}
