:root{
  --bg:#FAF1E4; --panel:#ffffff; --panel2:#F5E8D0; --border:#e2d5bd; --border-b:#cdbb9a;
  --ink:#1d2b3d; --dim:#6b6154; --faint:#9a8d7a;
  --topbar:#0F2138; --tabbar:#17293f;
  --up:#1e7d43; --down:#b3372f; --signal:#E89018; --amber:#a3630a;
  --verdict:#7a4fd0; --verdict-bg:rgba(122,79,208,0.05);
  --grid:#e2d5bd; --priceStroke:#0F2138; --priceFill:rgba(15,33,56,0.10);
  --mono:"JetBrains Mono",ui-monospace,monospace; --sans:"Inter",-apple-system,sans-serif; --serif:"Fraunces",Georgia,serif;
}
html[data-theme="dark"]{
  --bg:#0a0e14; --panel:#111722; --panel2:#161d2b; --border:#1f2937; --border-b:#2d3a4f;
  --ink:#e6edf3; --dim:#8b98a9; --faint:#5a6779;
  --topbar:#111722; --tabbar:#0d131c;
  --up:#26d07c; --down:#f2495c; --signal:#f5a524; --amber:#f5a524;
  --verdict:#a878ff; --verdict-bg:rgba(168,120,255,0.08);
  --grid:#1f2937; --priceStroke:#4aa8ff; --priceFill:rgba(74,168,255,0.10);
}
*{margin:0;padding:0;box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;padding-bottom:120px;transition:background .2s}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.serif{font-family:var(--serif)}
/* Top */
.topbar{display:flex;align-items:center;gap:14px;padding:11px 20px;background:var(--topbar);color:#e8ecf2;position:sticky;top:0;z-index:30}
.brand{display:flex;align-items:baseline;gap:9px}
.brand .k{font-weight:700;font-size:17px;color:#fff;font-family:var(--serif)}
.brand .sub{color:#8b98a9;font-size:11px;letter-spacing:0.1em;text-transform:uppercase}
.scope{display:flex;align-items:center;gap:7px;background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.14);border-radius:8px;padding:6px 12px;font-size:12.5px;color:#e8ecf2;cursor:pointer;margin-left:8px}
.scope .ic{color:var(--signal)} .scope .cs{font-weight:600} .scope .ar{color:#8b98a9;font-size:10px}
.client{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:12.5px;color:#c3ccd8}
.client .dot{width:7px;height:7px;border-radius:50%;background:#26d07c;box-shadow:0 0 8px #26d07c}
.clock{font-size:12.5px;color:#c3ccd8}
.theme-btn{background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.14);color:#e8ecf2;border-radius:8px;width:34px;height:34px;cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center}
.tabs{display:flex;gap:2px;padding:0 20px;background:var(--tabbar);position:sticky;top:44px;z-index:29}
.tab{padding:12px 18px;font-size:13px;font-weight:500;color:#8b98a9;cursor:pointer;border-bottom:2px solid transparent}
.tab:hover{color:#e8ecf2}
.tab.active{color:#fff;border-bottom-color:var(--signal)}
.tab .count{margin-left:7px;font-size:11px;background:var(--signal);color:#fff;border-radius:9px;padding:0 6px;font-weight:700}
.ticker{display:flex;gap:28px;overflow:hidden;white-space:nowrap;padding:9px 20px;background:var(--panel2);border-bottom:1px solid var(--border);font-size:12.5px}
.ticker b{color:var(--signal);font-weight:700;letter-spacing:0.06em}
.ticker .t{color:var(--dim)} .ticker .up{color:var(--up)} .ticker .dn{color:var(--down)}
.focusbar{display:none;align-items:center;gap:10px;padding:8px 20px;background:var(--verdict-bg);border-bottom:1px solid var(--border);font-size:12.5px;color:var(--verdict)}
html.focused .focusbar{display:flex}
.focusbar b{color:var(--ink)} .focusbar .exit{margin-left:auto;color:var(--dim);cursor:pointer;text-decoration:underline}
.screen{display:none;padding:20px;max-width:1440px;margin:0 auto}
.screen.active{display:block}
/* Filters */
.filters{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:12px 16px;background:var(--panel);border:1px solid var(--border);border-radius:9px;margin-bottom:16px;font-size:12px}
.filters .lbl{color:var(--faint);letter-spacing:0.1em;font-size:11px}
.chip{padding:5px 13px;border-radius:6px;border:1px solid var(--border-b);color:var(--dim);font-size:12.5px;cursor:pointer;background:var(--panel)}
.chip.on{background:var(--topbar);border-color:var(--topbar);color:#fff;font-weight:600}
html[data-theme="dark"] .chip.on{background:var(--signal);border-color:var(--signal);color:#0a0e14}
/* Verdict hero */
.verdict-panel{border:1.5px solid var(--verdict);background:var(--verdict-bg);border-radius:11px;margin-bottom:16px;overflow:hidden}
.vp-head{display:flex;gap:14px;align-items:center;padding:13px 18px;border-bottom:1px solid rgba(122,79,208,0.18)}
.vp-head .diamond{color:var(--verdict);font-weight:700;letter-spacing:0.07em;font-size:13px;white-space:nowrap}
.vp-head .sub{color:var(--dim);font-size:12px}
.v-row{display:flex;gap:18px;padding:16px 18px;border-bottom:1px solid var(--border)}
.v-row:last-child{border-bottom:none}
.score{min-width:58px;height:58px;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--mono)}
.score b{font-size:23px;line-height:1}.score span{font-size:8.5px;letter-spacing:0.1em;margin-top:3px}
.s-red{background:rgba(179,55,47,0.08);color:var(--down);border:1px solid rgba(179,55,47,0.35)}
.s-amber{background:rgba(232,144,24,0.1);color:var(--amber);border:1px solid rgba(232,144,24,0.45)}
.s-green{background:rgba(30,125,67,0.08);color:var(--up);border:1px solid rgba(30,125,67,0.35)}
.v-body{flex:1}
.v-title{display:flex;gap:10px;align-items:center;margin-bottom:6px}
.v-title b{font-size:15.5px;font-family:var(--serif);color:var(--ink)}
.badge{font-size:10.5px;font-weight:700;letter-spacing:0.08em;border-radius:4px;padding:2px 8px}
.b-hold{background:rgba(179,55,47,0.1);color:var(--down)}
.b-lock{background:rgba(232,144,24,0.14);color:var(--amber)}
.b-move{background:rgba(30,125,67,0.1);color:var(--up)}
.v-text{font-size:13.5px;line-height:1.55;margin-bottom:9px}
.sig-chips{display:flex;gap:7px;flex-wrap:wrap}
.sig{font-size:11.5px;color:var(--dim);background:var(--panel);border:1px solid var(--border);border-radius:5px;padding:3px 9px;display:flex;align-items:center;gap:6px}
.sig i{width:6px;height:6px;border-radius:50%;display:inline-block}
.i-r{background:var(--down)}.i-a{background:var(--signal)}.i-g{background:var(--up)}
/* Panels + charts */
.grid2{display:grid;grid-template-columns:1.35fr 1fr;gap:16px;margin-bottom:16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}
.panel{background:var(--panel);border:1px solid var(--border);border-radius:11px;overflow:hidden}
.p-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);font-size:12.5px;font-weight:700;letter-spacing:0.05em;color:var(--ink)}
.p-head .r{margin-left:auto;color:var(--faint);font-weight:400;font-size:11.5px}
.tag{font-size:10px;font-weight:700;border-radius:4px;padding:2px 7px;background:rgba(122,79,208,0.12);color:var(--verdict)}
.tag.g{background:rgba(30,125,67,0.14);color:var(--up)}
.tag.n{background:rgba(122,79,208,0.06);color:var(--dim);border:1px solid var(--border)}
.chart-wrap{padding:8px 12px 12px}
.chart-meta{display:flex;align-items:baseline;gap:12px;padding:10px 16px 2px}
.chart-meta .px{font-family:var(--mono);font-size:22px;font-weight:700;color:var(--ink)}
.chart-meta .chg{font-family:var(--mono);font-size:13px;font-weight:600}
.chart-meta .lbl{color:var(--faint);font-size:11px;margin-left:auto}
svg.lc{width:100%;display:block;height:200px}
/* stat tiles */
.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.tile{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:13px 15px}
.tile .k{font-size:11px;color:var(--faint);letter-spacing:0.06em;text-transform:uppercase;margin-bottom:5px}
.tile .v{font-family:var(--mono);font-size:19px;font-weight:700;color:var(--ink)}
.tile .c{font-family:var(--mono);font-size:12px;font-weight:600}
.tile svg{width:100%;height:34px;margin-top:6px}
/* My trades */
.mytrades{margin-bottom:16px}
.trade-row{display:flex;align-items:center;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border);font-size:13px}
.trade-row:last-child{border-bottom:none}
.lifecycle{display:flex;gap:4px;align-items:center;min-width:130px}
.lc-dot{width:8px;height:8px;border-radius:50%;background:var(--border-b)}
.lc-dot.done{background:var(--priceStroke)}
.lc-dot.cur{background:var(--signal);box-shadow:0 0 6px var(--signal)}
.lc-lbl{font-size:10.5px;color:var(--amber);font-weight:700;margin-left:5px;letter-spacing:0.05em}
.tr-name{font-weight:600;min-width:210px}
.tr-meta{color:var(--dim);font-size:12px}
.tr-score{margin-left:auto;font-family:var(--mono);font-weight:700}
.sc-g{color:var(--up)}.sc-a{color:var(--amber)}.sc-r{color:var(--down)}
/* Deal board */
.quickadd{display:flex;gap:10px;align-items:center;background:var(--panel);border:1.5px solid var(--priceStroke);border-radius:10px;padding:11px 14px;margin-bottom:12px}
.quickadd .plus{width:32px;height:32px;border-radius:7px;background:var(--priceStroke);color:var(--panel);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:18px}
.quickadd input{flex:1;background:transparent;border:none;outline:none;color:var(--ink);font-size:13.5px;font-family:var(--sans)}
.quickadd input::placeholder{color:var(--faint)}
.qa-btn{background:var(--priceStroke);color:var(--panel);font-weight:700;font-size:13px;border:none;border-radius:7px;padding:9px 20px;cursor:pointer}
.qa-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
.qa-card{display:flex;gap:12px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:9px;padding:12px 14px}
.qa-card .ic{width:34px;height:34px;border-radius:8px;background:var(--panel2);display:flex;align-items:center;justify-content:center;font-size:16px}
.qa-card b{font-size:13px;display:block;color:var(--ink)}
.qa-card span{font-size:11.5px;color:var(--dim)}
.board{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px;align-items:start}
.col{background:var(--panel2);border:1px solid var(--border);border-radius:11px;padding:11px}
.col-h{display:flex;align-items:center;justify-content:space-between;padding:3px 6px 11px;font-size:11px;font-weight:700;letter-spacing:0.12em;color:var(--ink)}
.col-h .n{font-family:var(--mono);background:var(--panel);border:1px solid var(--border-b);border-radius:10px;padding:1px 8px;font-size:11px}
.card{background:var(--panel);border:1px solid var(--border);border-left:3px solid var(--signal);border-radius:9px;padding:12px;margin-bottom:10px;cursor:pointer}
.card.exp{border-left-color:var(--up)}
.card:hover{box-shadow:0 6px 18px rgba(0,0,0,0.10)}
.card .name{font-weight:700;font-size:13.5px;margin-bottom:7px;color:var(--ink)}
.card .meta{font-size:11.5px;color:var(--dim);margin-bottom:9px;font-family:var(--mono)}
.card .foot{display:flex;align-items:center;gap:8px}
.vs{font-family:var(--mono);font-weight:700;font-size:14px;border-radius:5px;padding:2px 8px}
.vs-r{background:rgba(179,55,47,0.1);color:var(--down)}
.vs-a{background:rgba(232,144,24,0.13);color:var(--amber)}
.vs-g{background:rgba(30,125,67,0.1);color:var(--up)}
.lane{font-size:9.5px;font-weight:700;letter-spacing:0.06em;margin-left:auto;color:var(--faint)}
.lane.e{color:var(--up)}
.nudge{margin-top:9px;font-size:11.5px;background:rgba(232,144,24,0.07);border-left:2px solid var(--signal);padding:6px 9px;border-radius:0 5px 5px 0;line-height:1.45}
.col-empty{text-align:center;color:var(--faint);font-size:12px;padding:20px 8px}
.strip{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.deal{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--border);font-size:12.5px}
.deal:last-child{border-bottom:none}
.deal .c{font-weight:700;min-width:105px;color:var(--ink)}
.deal .m{color:var(--dim);font-family:var(--mono)}
.deal .prov{margin-left:auto;font-size:9.5px;font-weight:700;letter-spacing:0.06em;border-radius:4px;padding:2px 7px}
.pv-inf{background:rgba(232,144,24,0.13);color:var(--amber)}
.pv-conf{background:rgba(30,125,67,0.12);color:var(--up)}
/* vessel table */
.vtable{width:100%;border-collapse:collapse;font-size:13px}
.vtable th{text-align:left;padding:9px 16px;color:var(--faint);font-size:10.5px;letter-spacing:0.08em;font-weight:600;border-bottom:1px solid var(--border)}
.vtable td{padding:11px 16px;border-bottom:1px solid var(--border);color:var(--ink)}
.vtable tr:last-child td{border-bottom:none}
.vtable .vn{font-weight:600}
.vtable .mono{color:var(--dim)}
.vstat{font-size:10px;font-weight:700;letter-spacing:0.04em;border-radius:4px;padding:2px 8px}
.vs-ok{background:rgba(30,125,67,0.12);color:var(--up)}
.vs-slip{background:rgba(232,144,24,0.14);color:var(--amber)}
.vs-new{background:rgba(122,79,208,0.12);color:var(--verdict)}
.vs-berth{background:rgba(15,33,56,0.08);color:var(--ink)}
html[data-theme="dark"] .vs-berth{background:rgba(255,255,255,0.08)}
.vs-dep{background:var(--panel2);color:var(--faint)}
.vlink{font-size:10px;color:var(--verdict);background:var(--verdict-bg);border-radius:4px;padding:1px 6px;margin-left:7px}
/* seasonality strip */
.season{padding:12px 16px}
.season-head{display:flex;align-items:center;gap:10px;margin-bottom:7px}
.season-head .lbl{min-width:130px;font-size:10px;color:var(--faint);letter-spacing:0.08em;text-transform:uppercase}
.season-head .cal{flex:1;display:grid;grid-template-columns:repeat(12,1fr);gap:2px}
.season-head .cal span{text-align:center;font-size:10px;color:var(--faint);font-family:var(--mono)}
.season-row{display:flex;align-items:center;gap:10px;margin-bottom:9px;font-size:12px}
.season-row .lbl{min-width:130px;color:var(--dim)}
.cal{flex:1;display:grid;grid-template-columns:repeat(12,1fr);gap:2px}
.cal .m{height:16px;border-radius:2px;background:var(--panel2)}
.cal .m.harvest{background:var(--up)} .cal .m.lean{background:rgba(179,55,47,0.35)} .cal .m.arrive{background:var(--signal)}
.cal-legend{display:flex;gap:16px;font-size:11px;color:var(--dim);margin-top:6px;padding-left:140px}
.cal-legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:middle}
/* explore panel */
.explore-form{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:14px 16px;border-bottom:1px solid var(--border)}
.explore-form label{font-size:10.5px;color:var(--faint);letter-spacing:0.06em;text-transform:uppercase;margin-right:-4px}
.explore-form select{padding:9px 12px;border:1px solid var(--border-b);border-radius:8px;background:var(--panel);color:var(--ink);font-size:13px;font-family:inherit}
.explore-form .go{background:var(--signal);color:#fff;border:none;border-radius:8px;padding:9px 20px;font-weight:700;font-size:13px;cursor:pointer;margin-left:auto}
.explore-out{padding:16px;display:grid;grid-template-columns:1.15fr 1fr;gap:20px;align-items:start}
.explore-out .ans .an-h{font-size:10.5px;font-weight:700;letter-spacing:0.06em;color:var(--verdict);margin:0 0 4px}
.explore-out .ans p{font-size:13px;line-height:1.5;margin-bottom:12px;color:var(--ink)}
.explore-out .ans .src{font-size:11px;color:var(--faint);border-top:1px dashed var(--border);padding-top:9px;margin-bottom:12px}
.explore-out .ans .src b.live{color:var(--up)} .explore-out .ans .src b.dir{color:var(--amber)}
.explore-out .ans .acts{display:flex;gap:8px}
.explore-out .ans .acts button{font-size:11.5px;font-weight:600;border-radius:7px;padding:7px 13px;cursor:pointer;border:1px solid var(--border-b);background:var(--panel2);color:var(--ink)}
.explore-out .ans .acts button.pri{background:var(--signal);color:#fff;border-color:var(--signal)}
.explore-chart .cc-h{font-size:10.5px;color:var(--faint);letter-spacing:0.05em;font-weight:700;margin-bottom:6px}
.explore-chart .dev{font-size:11.5px;color:var(--amber);margin-top:6px}
/* ask desk */
.ask-wrap{display:grid;grid-template-columns:280px 1fr;gap:16px}
.threads{background:var(--panel);border:1px solid var(--border);border-radius:11px;overflow:hidden;height:fit-content}
.threads-h{padding:12px 15px;border-bottom:1px solid var(--border);font-size:12.5px;font-weight:700;display:flex;align-items:center;color:var(--ink)}
.threads-h button{margin-left:auto;background:var(--signal);color:#fff;border:none;border-radius:6px;font-size:11px;font-weight:700;padding:4px 10px;cursor:pointer}
.thread{padding:11px 15px;border-bottom:1px solid var(--border);cursor:pointer}
.thread.active{background:var(--panel2)}
.thread .tt{font-size:12.5px;font-weight:600;color:var(--ink);margin-bottom:3px}
.thread .sn{font-size:11px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.thread .at{margin-top:5px;font-size:10px;color:var(--verdict);background:var(--verdict-bg);border-radius:4px;padding:2px 6px;display:inline-block}
.conv{background:var(--panel);border:1px solid var(--border);border-radius:11px;display:flex;flex-direction:column;overflow:hidden}
.conv-h{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.conv-h .tt{font-weight:700;font-size:13.5px;color:var(--ink)}
.conv-h .attach{margin-left:auto;background:var(--panel2);border:1px solid var(--border-b);border-radius:7px;font-size:11.5px;color:var(--ink);padding:6px 12px;cursor:pointer;font-weight:600}
.msgs{padding:16px;display:flex;flex-direction:column;gap:14px}
.msg{max-width:78%;font-size:13px;line-height:1.5}
.msg.u{align-self:flex-end;background:var(--priceStroke);color:var(--panel);border-radius:12px 12px 3px 12px;padding:9px 13px}
.msg.a{align-self:flex-start;background:var(--panel2);border:1px solid var(--border);border-radius:12px 12px 12px 3px;padding:11px 14px;max-width:88%}
.msg.a .inlinechart{margin-top:10px;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px}
.msg.a .cc-h{font-size:11px;color:var(--faint);letter-spacing:0.05em;margin-bottom:4px;font-weight:700}
/* reports */
.rep-sec{margin-bottom:22px}
.rep-sec-h{display:flex;align-items:center;gap:9px;margin-bottom:12px}
.rep-sec-h h3{font-family:var(--serif);color:var(--ink);font-size:16px}
.rep-sec-h .cnt{font-size:11px;color:var(--faint);background:var(--panel2);border-radius:10px;padding:1px 9px}
.rep-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.rep-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:15px}
.rep-card .rt{font-size:10px;font-weight:700;letter-spacing:0.06em;color:var(--verdict);margin-bottom:7px}
.rep-card.you .rt{color:var(--signal)}
.rep-card .rn{font-weight:600;font-size:13.5px;color:var(--ink);margin-bottom:5px}
.rep-card .rd{font-size:11.5px;color:var(--dim);margin-bottom:11px}
.rep-card .ra{display:flex;gap:8px}
.rep-card .ra button{font-size:11px;font-weight:600;border:1px solid var(--border-b);background:var(--panel2);color:var(--ink);border-radius:6px;padding:5px 11px;cursor:pointer}
/* projects overlay */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:60;display:none;align-items:flex-start;justify-content:center;overflow-y:auto;padding:50px 16px}
.overlay.open{display:flex}
.proj-panel{background:var(--bg);border:1px solid var(--border);border-radius:16px;max-width:820px;width:100%;padding:26px 28px}
.proj-panel h2{font-family:var(--serif);color:var(--ink);font-size:21px;margin-bottom:4px}
.proj-panel .ps{color:var(--dim);font-size:13px;margin-bottom:20px}
.proj-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.proj-card{background:var(--panel);border:1px solid var(--border);border-radius:11px;padding:16px;cursor:pointer}
.proj-card:hover{border-color:var(--signal)}
.proj-card.new{border-style:dashed;display:flex;align-items:center;justify-content:center;color:var(--dim);font-weight:600;min-height:120px}
.proj-card .pn{font-family:var(--serif);font-size:16px;color:var(--ink);margin-bottom:8px}
.proj-card .pchips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.proj-card .pchip{font-size:10.5px;background:var(--panel2);border:1px solid var(--border);border-radius:5px;padding:2px 8px;color:var(--dim)}
.proj-card .pmeta{display:flex;gap:14px;font-size:11.5px;color:var(--faint)}
.proj-card .pmeta b{color:var(--ink)}
.proj-card .pedit{margin-top:11px;display:flex;gap:8px}
.proj-card .pedit button{font-size:11px;font-weight:600;border-radius:6px;padding:5px 12px;cursor:pointer;border:1px solid var(--border-b);background:var(--panel2);color:var(--ink)}
.proj-card .pedit button.enter{background:var(--signal);color:#fff;border-color:var(--signal)}
.ov-close{position:absolute;top:20px;right:24px;font-size:24px;color:#fff;cursor:pointer}
/* stub */
.stub{text-align:center;padding:60px 20px;color:var(--dim)}
.stub h2{font-family:var(--serif);color:var(--ink);margin-bottom:8px}
/* Chat dock */
.chatdock{position:fixed;bottom:0;left:0;right:0;z-index:40;background:var(--topbar);border-top:2px solid var(--signal);box-shadow:0 -6px 24px rgba(0,0,0,0.18)}
.cd-inner{max-width:1440px;margin:0 auto;padding:10px 20px}
.cd-context{display:flex;align-items:center;gap:8px;font-size:11px;color:#8b98a9;margin-bottom:8px}
.cd-context b{color:var(--signal);font-weight:700;letter-spacing:0.04em}
.cd-context .sugg{margin-left:auto;display:flex;gap:6px}
.cd-sugg{background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.12);color:#c3ccd8;font-size:11px;border-radius:14px;padding:3px 11px;cursor:pointer}
.cd-sugg:hover{border-color:var(--signal);color:#fff}
.cd-bar{display:flex;gap:10px;align-items:center}
.cd-bar .spark{width:32px;height:32px;border-radius:8px;background:var(--signal);color:#fff;display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
.cd-bar input{flex:1;background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.14);border-radius:9px;padding:11px 15px;color:#fff;font-size:13.5px;outline:none;font-family:var(--sans)}
.cd-bar input::placeholder{color:#8b98a9}
.cd-bar .send{background:var(--signal);color:#fff;border:none;border-radius:9px;padding:11px 20px;font-weight:700;font-size:13px;cursor:pointer}
.cd-bar .mic{background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.14);color:#c3ccd8;border-radius:9px;padding:11px 14px;cursor:pointer}
@media(max-width:1024px){.board,.tiles{grid-template-columns:repeat(2,1fr)}.grid2,.grid3,.strip,.qa-row,.proj-grid,.rep-grid,.ask-wrap{grid-template-columns:1fr}}

/* ── Login gate (pre-shell) ─────────────────────────────────────────────── */
.lx-login{min-height:100vh;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:22px;padding:24px}
.lx-login-card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:38px 34px;max-width:410px;width:100%;box-shadow:0 12px 40px rgba(0,0,0,0.10);text-align:center}
.lx-login-card img{width:60px;height:60px;margin-bottom:12px}
.lx-login-card h1{font-family:var(--serif);font-size:24px;color:var(--ink);margin-bottom:4px}
.lx-login-sub{color:var(--dim);font-size:13px;margin-bottom:22px}
.lx-login-card input{width:100%;padding:12px 16px;border:1px solid var(--border-b);border-radius:10px;font-size:16px;margin-bottom:12px;background:var(--bg);color:var(--ink);outline:none;text-align:center;letter-spacing:2px;font-family:var(--sans)}
.lx-login-card input:focus{border-color:var(--signal)}
.lx-login-err{color:var(--down);font-size:13px;min-height:18px;margin-bottom:6px}
.lx-login-btn{width:100%;background:var(--signal);color:#fff;border:none;border-radius:10px;padding:12px;font-weight:700;font-size:14px;cursor:pointer;font-family:var(--sans)}
.lx-login-btn:disabled{opacity:.5;cursor:default}
.lx-private{font-size:12px;color:var(--faint)}
#lx-app{display:none}
#lx-app.ready{display:block}
.lx-loading{text-align:center;color:var(--faint);font-size:12.5px;padding:18px}

/* ── LX Phase-2 wiring states (honest gaps + coverage) ─────────────────────── */
.deal-empty{padding:16px;font-size:12px;line-height:1.6;color:var(--dim)}
.deal-empty b{color:var(--ink)} .deal-empty i{color:var(--faint);font-style:italic}
.vcoverage{padding:10px 16px;font-size:11px;line-height:1.55;color:var(--faint);border-top:1px solid var(--border)}
.vcoverage .vc{display:block;margin-top:5px}
.vcoverage .vc b{color:var(--dim)}
.grade-chip{font-size:9px;font-weight:700;letter-spacing:0.05em;border-radius:4px;padding:1px 6px;margin-left:6px;vertical-align:middle}
.grade-real{background:rgba(30,125,67,0.14);color:var(--up)}
.grade-directional{background:rgba(163,99,10,0.16);color:var(--amber)}
.grade-reference{background:rgba(107,97,84,0.14);color:var(--dim)}
.vstat.vs-unpub{background:rgba(107,97,84,0.14);color:var(--faint)}

/* ── Self-managed login: hint line under the buttons ──────────────────────── */
.lx-login-hint{color:var(--faint);font-size:11.5px;margin-top:12px;line-height:1.5}

/* ── Live-state honesty: empty states + freshness stamps ──────────────────── */
.lx-empty{padding:22px 18px;font-size:13px;line-height:1.6;color:var(--dim);text-align:center}
.v-asof{margin-left:auto;font-size:10.5px;color:var(--faint);font-family:var(--mono)}
.tk-asof{color:var(--faint);font-size:10px}
.vs-g{background:rgba(30,125,67,0.14);color:var(--up)}
.vs-a{background:rgba(163,99,10,0.16);color:var(--amber)}
.vs-r{background:rgba(179,55,47,0.14);color:var(--down)}
.sc-g{color:var(--up)} .sc-a{color:var(--amber)} .sc-r{color:var(--down)}

/* ── Quick-add save feedback: a save is never silent ──────────────────────── */
.lx-toast{max-height:0;overflow:hidden;opacity:0;transition:opacity .2s,max-height .2s,margin .2s;font-size:12.5px;border-radius:8px;text-align:center}
.lx-toast.show{max-height:80px;opacity:1;padding:10px 14px;margin:10px 0}
.lx-toast.toast-ok{background:rgba(30,125,67,0.12);color:var(--up);border:1px solid rgba(30,125,67,0.3)}
.lx-toast.toast-err{background:rgba(179,55,47,0.10);color:var(--down);border:1px solid rgba(179,55,47,0.3)}

/* ── Market tab tile freshness ────────────────────────────────────────────── */
.tile-asof{font-size:9.5px;color:var(--faint);font-family:var(--mono);margin-top:2px}

/* ── Interactivity: cursors, chat thinking, report preview ────────────────── */
.qa-card{cursor:pointer}
.cd-sugg{cursor:pointer}
.chip{cursor:pointer}
.proj-card{cursor:pointer}
.thread{cursor:pointer}
.lx-thinking{color:var(--faint);font-style:italic}
.rep-preview:empty{display:none}
.rep-preview{margin-top:18px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px}
.rep-preview table{width:100%;font-size:12px}

/* ── Market brief report rendering ────────────────────────────────────────── */
.brief-sec{margin:10px 0}
.brief-sec ul{margin:6px 0 0;padding-left:18px}
.brief-sec li{font-size:12.5px;line-height:1.6;color:var(--ink);margin-bottom:3px}

/* ── Spot line: same-day landed benchmark beside the trend chart ──────────── */
.spot-line{display:block;width:100%;margin-top:6px;font-family:var(--mono);font-size:11px;color:var(--up);letter-spacing:0.02em}

/* ── Vessel tracker: schedule progress, delivery-app style ─────────────────
   The bar answers "how far along is this cargo" at a glance. It is driven by
   the published line-up (declared → en route → berthed → sailed), NOT by any
   live vessel position — we have no AIS, and the panel says so under the rows.
   Stage ticks sit at the same offsets the fill targets, so the fill visibly
   lands on a named stage rather than floating at an arbitrary percentage. */
.vt-row{padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s}
.vt-row:last-child{border-bottom:none}
.vt-row:hover{background:var(--panel2)}
.vt-top{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.vt-name{font-weight:600;font-size:13px;color:var(--ink)}
.vt-tracked{margin-left:7px;font-size:10px;color:var(--signal);font-weight:700}
.vt-cargo{font-size:12px;color:var(--dim)}
.vt-tons{margin-left:auto;font-size:12px;color:var(--dim)}
.vt-stage{font-size:10px;font-weight:700;letter-spacing:0.04em;border-radius:4px;padding:2px 8px;white-space:nowrap}

.vt-bar{position:relative;height:6px;border-radius:3px;background:var(--panel2);
        border:1px solid var(--border);overflow:visible}
.vt-fill{height:100%;border-radius:3px;transition:width .9s cubic-bezier(0.16,1,0.3,1)}
.vt-tick{position:absolute;top:50%;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;border-radius:50%;
         background:var(--border-b);transform:translateZ(0)}
.vt-tick.on{background:var(--panel);box-shadow:0 0 0 1.5px currentColor}
.vt-note{margin-top:7px;font-size:11.5px;color:var(--faint)}
.vt-empty{padding:20px 16px;font-size:13px;color:var(--dim)}
.vt-foot{padding:10px 16px;border-top:1px solid var(--border);font-size:11px;color:var(--faint)}

/* Inline variant for the Market line-up table — same model, no ticks. */
.vt-bar.vt-mini{width:90px;height:5px}

/* Tone per stage. Amber = moving, green = alongside/complete, red = attention. */
.vt-route{background:rgba(232,144,24,0.14);color:var(--amber)}
.vt-f-route{background:var(--signal)}
.vt-due{background:rgba(232,144,24,0.2);color:var(--amber)}
.vt-f-due{background:var(--signal)}
.vt-berth{background:rgba(30,125,67,0.13);color:var(--up)}
.vt-f-berth{background:var(--up)}
.vt-done{background:rgba(107,97,84,0.14);color:var(--faint)}
.vt-f-done{background:var(--border-b)}
.vt-slip{background:rgba(179,55,47,0.12);color:var(--down)}
.vt-f-slip{background:var(--down)}
.vt-stale{background:rgba(179,55,47,0.1);color:var(--down)}
.vt-f-stale{background:var(--down);opacity:.55}
.vt-idle{background:rgba(107,97,84,0.12);color:var(--faint)}
.vt-f-idle{background:var(--border-b)}

/* A cargo in motion breathes; one that has sailed or stalled does not. The
   pulse marks "currently under way", so it must never run on a stale row. */
.vt-f-route, .vt-f-due{animation:vtPulse 2.6s ease-in-out infinite}
@keyframes vtPulse{0%,100%{opacity:1}50%{opacity:.72}}
@media (prefers-reduced-motion: reduce){
  .vt-fill{transition:none}
  .vt-f-route,.vt-f-due{animation:none}
}
