/* ---------- design tokens ----------
   Brand colour: data-brand on <html> (navy default). Light/dark: follows the system unless data-theme is set.
   Price moves use the US convention: green = up, red = down. */
:root{
  --brand-l:#1F4FBF;--brand-l-hover:#1A43A3;--brand-l-soft:#E8EEFB;--brand-d:#7A9CF5;--brand-d-btn:#3A64DB;--brand-d-soft:#1D2A47;
  --bg:#F4F5F7;--card:#FFFFFF;--card2:#F7F8FA;--line:#E5E7EB;--line2:#D9DCE1;--gutter:#EEF0F3;
  --ink:#1A1D23;--ink2:#3F444D;--muted:#6B7079;--faint:#8B9099;
  --field:#FFFFFF;--field-line:#CDD1D8;--btn:#FFFFFF;
  --accent:var(--brand-l);--primary:var(--brand-l);--primary-hover:var(--brand-l-hover);--primary-ink:#FFFFFF;--brand-soft:var(--brand-l-soft);
  --pressed:var(--brand-l-soft);--pressed-line:var(--brand-l);
  --inverse:#1A1D23;--inverse-ink:#FFFFFF;
  --ok:#1E8A55;--load:#2563EB;--err:#B42318;--quiet:#9AA0A8;--up:#15803D;--dn:#C62828;--attn:#B45309;--flash:#FFF4C2;
  --info-bg:#EEF3FC;--info-line:#C3D2EE;--warn-bg:#FFF4D6;--warn-line:#E2B13C;--warn-ink:#4A3500;
  --err-bg:#FFF5F4;--err-line:#EBBDB7;--err-ink:#9A1F15;--ok-bg:#E8F5EE;--ok-ink:#1F7A4D;
  --add:#E8F5EE;--addb:#1F7A4D;--mod:#FFF4D6;--modb:#E2B13C;--del:#FCEDEB;--shift:#E7ECF7;
  --shadow:0 8px 28px rgba(20,22,26,.14);--shadow-sm:0 1px 2px rgba(20,22,26,.06);
  color-scheme:light;
}
:root[data-brand="teal"]{--brand-l:#0E7490;--brand-l-hover:#0B6178;--brand-l-soft:#E2F2F6;--brand-d:#4FB8D3;--brand-d-btn:#157C99;--brand-d-soft:#12303A}
:root[data-brand="indigo"]{--brand-l:#4F46E5;--brand-l-hover:#4239C8;--brand-l-soft:#ECEBFD;--brand-d:#A19CF7;--brand-d-btn:#5E57E8;--brand-d-soft:#25234A}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#111317;--card:#1A1D22;--card2:#1F2227;--line:#2A2E35;--line2:#343840;--gutter:#22252B;
  --ink:#E8EAED;--ink2:#C4C8CF;--muted:#949AA3;--faint:#7C828C;
  --field:#14161A;--field-line:#454A53;--btn:#23262C;
  --accent:var(--brand-d);--primary:var(--brand-d-btn);--primary-hover:var(--brand-d);--primary-ink:#FFFFFF;--brand-soft:var(--brand-d-soft);
  --pressed:var(--brand-d-soft);--pressed-line:var(--brand-d);
  --inverse:#E8EAED;--inverse-ink:#111317;
  --ok:#3FBF7F;--load:#6E9BFF;--err:#F07A6E;--quiet:#6E747D;--up:#4CC98A;--dn:#F47174;--attn:#F0A060;--flash:#3A3418;
  --info-bg:#192436;--info-line:#2E4870;--warn-bg:#33290F;--warn-line:#8A6A1E;--warn-ink:#F2D58A;
  --err-bg:#341B19;--err-line:#7A3530;--err-ink:#F4A69C;--ok-bg:#163024;--ok-ink:#7FD3A5;
  --add:#163024;--addb:#3FBF7F;--mod:#33290F;--modb:#8A6A1E;--del:#341B19;--shift:#1E2840;
  --shadow:0 8px 28px rgba(0,0,0,.5);--shadow-sm:0 1px 2px rgba(0,0,0,.3);
  color-scheme:dark;
}}
:root[data-theme="dark"]{
  --bg:#111317;--card:#1A1D22;--card2:#1F2227;--line:#2A2E35;--line2:#343840;--gutter:#22252B;
  --ink:#E8EAED;--ink2:#C4C8CF;--muted:#949AA3;--faint:#7C828C;
  --field:#14161A;--field-line:#454A53;--btn:#23262C;
  --accent:var(--brand-d);--primary:var(--brand-d-btn);--primary-hover:var(--brand-d);--primary-ink:#FFFFFF;--brand-soft:var(--brand-d-soft);
  --pressed:var(--brand-d-soft);--pressed-line:var(--brand-d);
  --inverse:#E8EAED;--inverse-ink:#111317;
  --ok:#3FBF7F;--load:#6E9BFF;--err:#F07A6E;--quiet:#6E747D;--up:#4CC98A;--dn:#F47174;--attn:#F0A060;--flash:#3A3418;
  --info-bg:#192436;--info-line:#2E4870;--warn-bg:#33290F;--warn-line:#8A6A1E;--warn-ink:#F2D58A;
  --err-bg:#341B19;--err-line:#7A3530;--err-ink:#F4A69C;--ok-bg:#163024;--ok-ink:#7FD3A5;
  --add:#163024;--addb:#3FBF7F;--mod:#33290F;--modb:#8A6A1E;--del:#341B19;--shift:#1E2840;
  --shadow:0 8px 28px rgba(0,0,0,.5);--shadow-sm:0 1px 2px rgba(0,0,0,.3);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","PingFang SC","Microsoft YaHei","Noto Sans SC",sans-serif}
a{color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.muted{color:var(--muted)}
.small{font-size:12.5px}
.num{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-variant-numeric:tabular-nums}
input,select,textarea{font:inherit;color:var(--ink);background:var(--field);border:1px solid var(--field-line);border-radius:8px}
input[type=checkbox],input[type=radio]{accent-color:var(--accent)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--brand-soft)}
.btn{font:inherit;font-size:13.5px;padding:9px 14px;border-radius:8px;border:1px solid var(--field-line);background:var(--btn);color:var(--ink);cursor:pointer;min-height:40px;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}
.btn:hover{border-color:var(--faint)}
.btn.primary{background:var(--primary);color:var(--primary-ink);border-color:var(--primary);font-weight:600}
.btn.primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}
.btn.danger{color:var(--err);border-color:var(--err-line)}
.btn.sm{min-height:32px;padding:5px 10px;font-size:12.5px}
.btn[aria-pressed="true"]{background:var(--pressed);border-color:var(--pressed-line)}
.btn:disabled{opacity:.5;cursor:default}
.form-error{color:var(--err);margin:0}
.form-error:empty{display:none}
.linklike{background:none;border:0;padding:0;color:var(--accent);cursor:pointer;font:inherit;text-decoration:underline}
/* ---------- login ---------- */
.login-page{display:flex;min-height:100vh;align-items:center;justify-content:center;padding:16px}
.login-card{background:var(--card);border:1px solid var(--line2);border-radius:14px;padding:28px;width:100%;max-width:360px}
.login-card h1{margin:0 0 18px;font-size:20px}
.login-card form{display:flex;flex-direction:column;gap:14px}
.login-card label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink2)}
.login-card input{padding:10px;min-height:44px}
.login-card .btn{width:100%;min-height:44px;font-size:15px}
.login-help{margin:16px 0 0;text-align:center}
.login-card label.check{flex-direction:row;align-items:center;gap:8px;font-size:13.5px;color:var(--ink)}
.login-card label.check input{width:18px;height:18px;min-height:0;margin:0}
.login-tip{margin:-6px 0 0;color:var(--muted)}
/* ---------- top ---------- */
.topbar{background:var(--card);border-bottom:1px solid var(--line2);padding:10px 24px 0;display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:20}
.brand{font-size:17px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:10px}
.brand strong{font-weight:700;letter-spacing:-.01em}
.brand .muted{font-size:13px;overflow:hidden;text-overflow:ellipsis;padding-left:10px;border-left:1px solid var(--line2)}
.mark{width:28px;height:28px;flex:none;display:block}
.mark .tile{fill:var(--brand-l)}
:root[data-theme="dark"] .mark .tile{fill:var(--brand-d-btn)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .mark .tile{fill:var(--brand-d-btn)}}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;background:var(--card);border:1px solid var(--line2);font-size:12.5px;color:var(--ink)}
button.chip{cursor:pointer;font:inherit;font-size:12.5px}
.tabs{display:flex;gap:4px;width:100%;overflow-x:auto;scrollbar-width:none}
.tab{font:inherit;background:none;border:0;border-bottom:2px solid transparent;padding:10px 14px;color:var(--muted);cursor:pointer;min-height:44px;white-space:nowrap}
.tab.on{color:var(--ink);font-weight:600;border-bottom-color:var(--accent)}
.tab:hover{color:var(--ink)}
#logout{margin-left:auto}
.global-appearance{position:fixed;right:24px;top:calc(var(--topbar-h,96px) + 8px);z-index:50;width:min(360px,calc(100vw - 24px));max-height:calc(100vh - var(--topbar-h,96px) - 24px);overflow:auto;background:var(--card);border:1px solid var(--line2);border-radius:12px;box-shadow:var(--shadow);padding:18px;box-sizing:border-box}
.global-appearance-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}
.global-appearance .appearance{grid-template-columns:1fr;gap:8px}
.global-appearance .seg:not([hidden]){display:flex;width:100%;margin-bottom:12px;box-sizing:border-box}
.global-appearance .seg button{flex:1;min-height:40px;padding:6px 8px}
.global-appearance .seg button[aria-pressed="true"]{background:var(--primary);color:var(--primary-ink)}
.global-appearance p{margin-bottom:0;line-height:1.6}
#appearance-toggle[aria-expanded="true"]{background:var(--pressed);border-color:var(--accent)}
@media(max-width:760px), screen and (max-width:1024px) and (pointer:coarse){.global-appearance{right:12px}}
.view{padding:12px 24px 40px}
.notice{margin:12px 24px 0;padding:10px 14px;border-radius:8px;display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:14px}
.banner{margin:12px 24px 0;padding:10px 14px;border-radius:8px;background:var(--info-bg);border:1px solid var(--info-line);display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.market-banner{margin:12px 24px 0;padding:8px 14px;border-radius:8px;background:var(--info-bg);border:1px solid var(--info-line);color:var(--ink2);font-size:13px;line-height:1.5;display:flex;flex-wrap:wrap;gap:2px 16px;align-items:baseline}
.market-banner small{font-size:12.5px;color:var(--muted)}
.market-banner.warn{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn-ink)}
.ibkr-bar{margin:12px 24px 0;padding:10px 14px;border-radius:8px;background:var(--card);border:1px solid var(--line2);display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;font-size:14px}
.ibkr-bar.disconnected{background:var(--err-bg);border-color:var(--err-line)}
.ibkr-bar.waiting,.ibkr-bar.connecting{background:var(--info-bg);border-color:var(--info-line)}
.ibkr-state{display:flex;align-items:center;gap:8px}
.ibkr-actions{display:flex;gap:8px;flex-wrap:wrap}
/* ---------- toolbar / counts ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}
.counts{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:13px;color:var(--ink2);align-items:center}
.counts b{font-size:20px;color:var(--ink)}
.count-link{background:none;border:0;padding:2px 6px;margin:-2px -6px;border-radius:6px;font:inherit;color:var(--err);cursor:pointer}
.count-link:hover{background:var(--err-bg,rgba(200,40,40,.08));text-decoration:underline}
.actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.search{display:flex;gap:8px;align-items:center;font-size:13px}
.search input,.search select{padding:8px 10px;min-height:40px}
.search input{width:160px}
.hint{font-size:12.5px;color:var(--muted);margin:8px 0}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none;background:var(--quiet)}
.dot.ok{background:var(--ok)}.dot.loading{background:var(--load)}.dot.error{background:var(--err)}.dot.quiet{background:var(--quiet)}
.dot.frozen{background:transparent;border:2px solid #B08A2E;width:9px;height:9px}
.dot.none{visibility:hidden}
/* ---------- monitor sheet ---------- */
.sheet-wrap{overflow-x:auto;background:var(--card);border:1px solid var(--line2);border-radius:10px}
.sheet{min-width:1266px}
.hdr,.row{display:grid;grid-template-columns:52px 44px 160px 60px 112px 76px 96px 92px 112px 56px 96px 150px minmax(160px,1fr);align-items:center}
.hdr{position:sticky;top:0;background:var(--gutter);border-bottom:1px solid var(--line2);font-size:12px;color:var(--ink2);font-weight:500;z-index:1}
.hdr>div{padding:8px 10px}
.r{text-align:right}
.row{min-height:34px;border-bottom:1px solid var(--line);font-size:13.5px;background:var(--card)}
.row>div{padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row.blank{min-height:12px;background:var(--card2)}
.row.note{color:var(--muted);font-style:italic}
.row.gs{border-top:2px solid var(--line2)}
.row.error{background:var(--err-bg)}
.row.hidden{display:none}
.row.target{outline:2px solid var(--accent);outline-offset:-2px}
.rn{background:var(--gutter);color:var(--faint);text-align:center;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:12px;align-self:stretch;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.1}
.rn small{font-size:10px;color:var(--load)}
.sym{font-weight:600}
.v{text-align:right;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-variant-numeric:tabular-nums;border-radius:4px;transition:background .6s}
.row .v{color:var(--ink2)}
.row .v.key{color:var(--ink);font-weight:600}
.hdr .key{color:var(--ink);font-weight:600}
.v.flash{background:var(--flash);transition:none}
.v.up::after{content:" ▲";color:var(--up);font-size:10px}
.v.dn::after{content:" ▼";color:var(--dn);font-size:10px}
.st{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink2)}
.row.error .st{color:var(--err-ink)}
.row.frozen .v.mkt,.row.stale-px .v.px{color:var(--faint);font-style:italic}
.row:not(.blank):not(.hdr):hover{background:var(--card2)}
.row.error:hover{background:var(--err-bg)}
.row.frozen .st{color:var(--warn-ink)}
.ln.frozen .v{color:var(--faint);font-style:italic}
#rows.sorted{display:flex;flex-direction:column}
.near{font-size:12.5px;color:var(--muted)}
.near.hot{color:var(--attn);font-weight:600}
.near.done{color:var(--faint)}
.empty{padding:40px 16px;text-align:center;color:var(--ink2);display:flex;flex-direction:column;align-items:center;gap:12px}
.empty p{margin:0;font-size:15px}
/* ---------- getting started (compact) ---------- */
.onboarding{background:var(--card);border:1px solid var(--line2);border-left:3px solid var(--accent);border-radius:10px;padding:10px 14px;margin:0 0 12px}
.ob-head{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}
.ob-head strong{font-size:14px}
.ob-bar{flex:0 0 90px;height:6px;border-radius:3px;background:var(--gutter);overflow:hidden}
.ob-bar i{display:block;height:100%;background:var(--accent)}
.ob-next{color:var(--ink2);font-size:13.5px;flex:1 1 220px}
.ob-head .spacer{flex:1}
.onboarding .steps{margin-top:8px}
.onboarding .step{display:flex;align-items:center;gap:10px;padding:6px 0;border-top:1px solid var(--line);font-size:13.5px}
.onboarding .step .mark{width:20px;height:20px;border-radius:50%;border:2px solid var(--quiet);display:inline-flex;align-items:center;justify-content:center;font-size:11px;flex:none}
.onboarding .step.done .mark{background:var(--ok);border-color:var(--ok);color:#fff}
.onboarding .step.done .t{color:var(--muted)}
.onboarding .step .btn{margin-left:auto}
/* ---------- diff / update ---------- */
.diff .row.added{background:var(--add);box-shadow:inset 3px 0 var(--addb)}
.diff .row.modified .chg{background:var(--mod);outline:1px solid var(--modb);border-radius:4px}
.diff .row.deleted{background:var(--del)}
.diff .row.deleted>div:not(.rn):not(.badge-cell){text-decoration:line-through;color:var(--err-ink)}
.diff .row.moved .rn{background:var(--shift)}
.diff-open{display:none}
@media(max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  #view-update .sheet.diff{min-width:0;width:100%}
  #view-update .diff .hdr{display:none}
  #view-update .diff .row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:start;padding:10px;min-height:44px}
  #view-update .diff .rn{grid-column:1;grid-row:1;display:block;text-align:left;background:transparent}
  #view-update .diff .rn::before{content:'行 '}
  #view-update .diff .rn small{margin-left:4px}
  #view-update .diff .badge-cell{grid-column:2;grid-row:1;text-align:right}
  #view-update .diff-open{grid-column:1/-1;grid-row:2;display:flex;align-items:center;justify-content:space-between;text-align:left;overflow-wrap:anywhere;min-height:44px;padding:4px 8px;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:6px;font:inherit}
  #view-update .diff-open::after{content:'展开';color:var(--accent);font-size:12px;flex:none;margin-left:6px}
  #view-update .diff-expanded .diff-open::after{content:'收起'}
  #view-update .diff .diff-value{display:none;min-width:0;text-align:left;white-space:normal;overflow-wrap:anywhere;padding:3px 6px}
  #view-update .diff :is(.diff-expanded .diff-value,.diff-value.chg){display:block}
  #view-update .diff .diff-value::before{content:attr(data-label);display:block;font-size:12px;color:var(--muted)}
  #view-update .diff .diff-value:empty::after{content:'—'}
  #view-alerts .setbar #mobile-unpick{grid-column:1/-1}
  #view-alerts .panel:not(.editing-selection) .setbar #mobile-unpick{display:none}
}
.old{text-decoration:line-through;color:var(--warn-ink);font-size:11.5px;margin-right:4px}
.badge{display:inline-block;font-size:12px;padding:3px 8px;border-radius:999px}
.b-added{background:var(--addb);color:#fff}.b-modified{background:#F6D27A;color:#4A3500}.b-deleted{background:var(--err);color:#fff}
.upload-box{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between}
.upload-box h2{margin:0 0 4px;font-size:16px}
.upload-box p{margin:0}
.file-btn{position:relative}
.file-btn input{position:absolute;left:-9999px}
.toggle{display:flex;gap:8px;align-items:center;font-size:13px}
.toggle input{width:18px;height:18px}
.preview-grid{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start;margin-top:12px}
.preview-grid>.sheet-wrap{flex:999 1 720px;min-width:0}
.side{flex:1 1 300px;max-width:380px;background:var(--card);border:1px solid var(--line2);border-radius:10px;padding:14px;display:flex;flex-direction:column;gap:10px}
.side h3{margin:0;font-size:15px}
.side-actions{display:flex;flex-wrap:wrap;gap:8px}
.side-actions .btn{flex:1 1 140px}
.warn{background:var(--err-bg);color:var(--err-ink);border-radius:8px;padding:10px;font-size:13px}
.kv{font-size:13px;line-height:1.7}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:4px 0 0}
.stat{background:var(--card2);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12.5px;color:var(--muted)}
.stat b{display:block;font-size:16px;color:var(--ink);margin-top:2px;font-weight:600}
.stat.warnish b{color:var(--dn)}
.meter{height:6px;border-radius:3px;background:var(--gutter);overflow:hidden;margin-top:6px}
.meter i{display:block;height:100%;background:var(--accent)}
.meter.high i{background:var(--dn)}
.symbol-fixes{border:1px solid var(--warn-line);background:var(--warn-bg);color:var(--warn-ink);border-radius:8px;padding:12px 14px;margin:10px 0}
.symbol-fixes .fix{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:6px}
.hist{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px}
.hist:last-child{border-bottom:0}
.hist .tag{display:inline-block;min-width:52px;margin-right:10px;text-align:center;font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--gutter);color:var(--ink2)}
.hist .tag.cur{background:var(--ok-bg);color:var(--ok-ink)}
.hist .tag.pre{background:var(--info-bg);color:var(--load)}
/* ---------- panels / forms ---------- */
.panel{background:var(--card);border:1px solid var(--line2);border-radius:10px;padding:16px;margin-bottom:16px}
.panel h2{margin:0 0 10px;font-size:16px}
.panel h3{margin:0 0 8px;font-size:14px}
.panel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px}
.stack{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink2)}
.stack input,.stack select,.stack textarea,.assign input,.assign select{font-size:13.5px;padding:8px 10px;min-height:40px}
.row-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:8px}
.plan-form{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-top:12px;padding-top:12px;border-top:1px dashed var(--line2)}
.plan-form .stack input{width:130px}
.item{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.item:last-child{border-bottom:0}
.item .btn{min-height:34px;padding:5px 12px}
.ibkr-account p{margin:0 0 10px}
.form-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:10px}
.form-grid label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink2)}
.form-grid input{padding:9px 10px;min-height:42px;width:100%}
.conn-line{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;padding:10px 12px;border-radius:8px;background:var(--card2);border:1px solid var(--line);margin-bottom:12px}
/* ---------- alerts: sub-tabs ---------- */
.subtabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
.subtab{font:inherit;font-size:13.5px;padding:7px 14px;border-radius:999px;border:1px solid var(--line2);background:var(--card);color:var(--ink2);cursor:pointer;min-height:36px}
.subtab.on{background:var(--brand-soft);color:var(--accent);border-color:var(--accent);font-weight:600}
.subtab .cnt{font-size:11.5px;margin-left:4px;opacity:.75}
/* ---------- alerts: contract table ---------- */
.assign-tools{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;margin-bottom:10px}
.bulkbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 10px;border-radius:8px;background:var(--card2);border:1px solid var(--line);margin-bottom:10px;font-size:13px}
.bulkbar select{min-height:36px;padding:5px 8px}
.bulkbar .btn{min-height:36px;padding:6px 12px}
.assign{min-width:1240px}
.ahdr,.arow{display:grid;grid-template-columns:36px 46px minmax(190px,1fr) 88px 196px 132px 104px 64px 132px 104px minmax(150px,1fr);gap:8px;align-items:center;padding:5px 10px}
.ahdr{background:var(--gutter);font-size:12px;color:var(--ink2);font-weight:500;position:sticky;top:0;z-index:2}
.arow{border-bottom:1px solid var(--line);font-size:13.5px}
.arow.dirty{background:var(--warn-bg)}
.arow input[type=number],.arow input[type=text],.arow select{width:100%;min-height:32px;padding:4px 8px}
.arow input[type=checkbox],.ahdr input[type=checkbox],.agroup input[type=checkbox]{min-height:0;width:16px;height:16px;padding:0;margin:0}
.basecell{display:flex;gap:6px}
.basecell input{flex:1 1 auto;min-width:0}
.basecell select{flex:0 0 84px}
.basecell input[readonly]{background:var(--card2);color:var(--muted)}
.agroup{display:flex;gap:10px;align-items:center;padding:7px 10px;background:var(--card2);border-bottom:1px solid var(--line);font-size:13px;font-weight:600;cursor:pointer;user-select:none}
.agroup .caret{width:14px;color:var(--muted);font-weight:400}
.agroup .meta{font-weight:400;color:var(--muted)}
.agroup .meta .on{color:var(--ok-ink)}
.astat{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.astat.on{color:var(--ok-ink)}
.savebar{position:sticky;bottom:12px;z-index:5;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-top:12px;padding:10px 14px;border-radius:10px;background:var(--inverse);color:var(--inverse-ink);box-shadow:var(--shadow)}
.savebar .btn{background:transparent;color:inherit;border-color:currentColor}
.savebar .btn.primary{background:var(--primary);color:var(--primary-ink);border-color:var(--primary)}
.excel-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.import-preview{border:1px solid var(--info-line);background:var(--info-bg);border-radius:8px;padding:12px 14px;margin:10px 0}
.import-preview h3{margin:0 0 8px;font-size:15px}
.import-preview .err{color:var(--err)}
/* ---------- alerts: log ---------- */
.log-tools{margin-bottom:6px}
.log-tools .counts{font-size:13px;color:var(--muted)}
.log-entry{padding:10px 0;border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr auto;gap:4px 12px;align-items:start}
.log-entry:last-child{border-bottom:0}
.log-entry.clickable{cursor:pointer}
.log-entry.clickable:hover .log-title{text-decoration:underline}
.log-title{font-weight:600}
.log-when{font-size:12px;color:var(--muted);text-align:right;white-space:nowrap}
.log-meta{font-size:12.5px;color:var(--muted);grid-column:1/-1}
.log-now{font-size:12.5px;grid-column:1/-1}
.log-now .up,.log-title .up{color:var(--up)}.log-now .dn,.log-title .dn{color:var(--dn)}
.chans{grid-column:1/-1}
.chan{display:inline-block;font-size:12px;padding:2px 8px;border-radius:999px;margin:2px 6px 0 0;background:var(--gutter);color:var(--ink2)}
.chan.sent{background:var(--ok-bg);color:var(--ok-ink)}.chan.failed{background:var(--err-bg);color:var(--err-ink)}.chan.pending,.chan.sending{background:var(--info-bg);color:var(--load)}
.log-empty{padding:16px 0;color:var(--muted);font-size:13px}
/* ---------- toasts / modal ---------- */
.toasts{position:fixed;bottom:calc(16px + env(safe-area-inset-bottom,0px));right:16px;z-index:100;display:flex;flex-direction:column;gap:8px;align-items:stretch;pointer-events:none;width:min(calc(100vw - 32px),420px)}
.toast{pointer-events:auto;background:var(--inverse);color:var(--inverse-ink);padding:10px 14px;border-radius:10px;box-shadow:var(--shadow);font-size:14px;display:flex;gap:10px;align-items:center;max-width:100%;animation:toast-in .18s ease-out}
.toast.err{background:var(--err);color:#fff}
.toast button{background:none;border:0;color:inherit;cursor:pointer;font:inherit;opacity:.8;padding:0 2px}
@keyframes toast-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.modal{position:fixed;inset:0;z-index:90;background:rgba(10,11,13,.45);display:flex;align-items:center;justify-content:center;padding:16px}
.modal-box{background:var(--card);border:1px solid var(--line2);border-radius:12px;box-shadow:var(--shadow);padding:20px;max-width:640px;width:100%;max-height:calc(100dvh - 32px);overflow:auto;animation:dialog-in .14s ease-out}
.modal-box h2{font-size:19px;margin:0 0 12px}.modal-box h3{font-size:14px;margin:0 0 6px}
.confirm-section{padding:12px;border:1px solid var(--line);border-radius:8px;margin:10px 0;overflow-wrap:anywhere;white-space:pre-line}
.modal-box .row-actions{position:sticky;bottom:-20px;padding:12px 0;background:var(--card);border-top:1px solid var(--line);z-index:1}
@keyframes dialog-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.modal-box p{margin:0 0 6px;font-size:14.5px;line-height:1.55}
.modal-box .row-actions{justify-content:flex-end;margin-top:14px}
/* ---------- diagnostics ---------- */
.diag-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.diag-grid .kv{background:var(--gutter);border-radius:8px;padding:8px 10px;font-size:13px}
.diag-grid .kv b{display:block;font-size:16px;margin-top:2px}
.dtable{width:100%;border-collapse:collapse;font-size:12.5px}
.dtable th,.dtable td{border-bottom:1px solid var(--line);padding:5px 8px;text-align:left;white-space:nowrap}
.dtable td.r,.dtable th.r{text-align:right;font-variant-numeric:tabular-nums}
.dtable tr.bad td{color:var(--err)}
.diag-scroll{overflow-x:auto}
#view-diag{max-width:1440px;margin:16px auto}
.diag-heading{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:18px}
.diag-heading h1{font-size:26px;margin:0 0 6px}
.diag-heading p{margin:0}
.diag-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px}
.diag-actions label{display:flex;align-items:center;gap:6px}
.diag-actions input{min-height:0;width:16px;height:16px}
.diag-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
#view-diag .panel{padding:20px;margin-bottom:16px}
#view-diag h2{font-size:17px;margin-top:0}
#view-diag .diag-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
#view-diag .kv{padding:14px;font-size:13px;color:var(--ink2)}
#view-diag .kv b{color:var(--ink);font-size:19px;margin-top:8px;overflow-wrap:anywhere}
.diag-issue{padding:12px 14px;border-left:3px solid var(--attn);background:var(--warn-bg);border-radius:6px;margin:10px 0;overflow-wrap:anywhere}
.diag-issue strong{font-size:14px}.diag-issue p{font-size:13px;line-height:1.65;margin:5px 0 0;color:var(--ink2)}
.diag-table-wrap{overflow:auto;max-height:440px;border:1px solid var(--line);border-radius:8px;margin:10px 0}
#view-diag .dtable th{background:var(--gutter);position:sticky;top:0;z-index:1}
#view-diag .dtable th,#view-diag .dtable td{padding:10px 12px;font-size:13px}
#view-diag .dtable tr:hover td{background:var(--card2)}
.diag-fold{border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin:12px 0}
.diag-fold>summary{cursor:pointer;font-size:14px;font-weight:600;line-height:1.7}
.diag-fold[open]>summary{margin-bottom:12px}
#diag-access .dtable tr.bad td,#diag-online .dtable tr.bad td{color:var(--attn)}
#diag-logs{display:flex;gap:8px;flex-wrap:wrap}
@media(max-width:760px), screen and (max-width:1024px) and (pointer:coarse){#view-diag{margin-top:8px}#view-diag .diag-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#view-diag .panel{padding:14px}.diag-heading h1{font-size:23px}.diag-tabs .btn{flex:1 1 40%}.diag-actions{gap:8px}.diag-table-wrap{max-height:360px}#view-diag .kv b{font-size:16px}}
input[aria-invalid="true"]{border-color:var(--err);box-shadow:0 0 0 3px color-mix(in srgb,var(--err) 18%,transparent)}
#view-diag .panel{overflow-x:auto}
/* ---------- mobile ---------- */
.cards{display:none}
.mobile-only{display:none}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .desktop-only{display:none!important}
  .mobile-only{display:block}
  .topbar{padding:8px 16px 0}
  .view{padding:12px 16px 32px}
  .banner,.market-banner,.ibkr-bar,.notice{margin:10px 16px 0}
  .sheet-wrap{display:none}
  .chips .chip#contract-count{display:none}
  .tab{padding:10px 12px}
  .mtools{display:flex;gap:8px;margin:8px 0 0}
  .mtools input{flex:1 1 auto;min-width:0;padding:8px 10px;min-height:40px}
  .mtools .btn{padding:8px 10px}
  #view-monitor .mtools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
  #view-monitor .mtools input{grid-column:1/-1;width:100%;min-height:44px}
  #view-monitor .mtools .btn{min-height:44px}
  #cards .monitor-detail{width:100%;min-height:44px;text-align:left;color:var(--ink);font-family:inherit;background-color:transparent;border:0;border-bottom:1px solid var(--line);cursor:pointer}
  #cards .monitor-detail.error{background-color:var(--err-bg)}
  #cards .monitor-detail:focus-visible{outline-offset:-3px}
  #cards .monitor-detail .v{font-variant-numeric:tabular-nums}
  .cards{display:flex;flex-direction:column;gap:10px;margin-top:10px}
  .card{background:var(--card);border:1px solid var(--line2);border-radius:12px;overflow:hidden}
  .card-h{display:flex;justify-content:space-between;gap:8px;padding:10px 12px;background:var(--card2);border-bottom:1px solid var(--line)}
  .card-h .near{font-size:12px}
  .ln{display:grid;grid-template-columns:34px 1fr auto;gap:8px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--line);font-size:13px}
  .ln:last-child{border-bottom:0}
  .ln .rn{background:none;font-size:11px;align-self:center}
  .ln.error{background:var(--err-bg)}
  .form-grid{grid-template-columns:1fr}
  .onboarding .ob-bar{display:none}
  .log-entry{grid-template-columns:1fr}
  .log-when{text-align:left}
}

.warn-text{color:var(--err-ink)}
#devices h4{margin:14px 0 4px;font-size:13px;font-weight:600;color:var(--ink2)}
/* Settings: bounded reading width, aligned cards and single-column mobile layout. */
#view-account{max-width:1120px;margin:28px auto 40px}
.settings-heading{margin-bottom:24px}
.settings-heading h1{font-size:28px;margin:0 0 8px;line-height:1.3}
.settings-heading p{margin:0}
.settings-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);grid-template-areas:"connection appearance" "security help";gap:18px;align-items:stretch}
.settings-grid>.panel{margin:0;padding:24px;min-width:0}
.settings-grid h2{margin:0 0 20px;font-size:18px}
.settings-connection{grid-area:connection;display:flex;flex-direction:column}
.settings-security{grid-area:security}
.settings-appearance{grid-area:appearance}
.settings-help{grid-area:help}
.settings-connection .conn-line{background:none;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:0 0 22px;margin:0 0 20px}
.settings-connection h3{font-size:13px;font-weight:400;color:var(--ink2);margin:0 0 8px}
#ibkr-account-current{font-size:15px;line-height:1.65;margin:0 0 14px;overflow-wrap:anywhere}
.settings-disconnect{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:auto;padding-top:24px}
.settings-disconnect p{margin:0}
.settings-disconnect .btn{flex-shrink:0}
.settings-grid .appearance{grid-template-columns:1fr;gap:9px}
.settings-grid .appearance .seg{margin:0 0 14px;max-width:100%}
.settings-grid .appearance .seg:not([hidden]){display:flex;width:100%}
.settings-grid .appearance .seg button{flex:1;min-height:38px;padding:7px 9px}
.settings-grid .seg button[aria-pressed="true"]{background:var(--primary);color:var(--primary-ink)}
.settings-grid .form-grid{grid-template-columns:1fr}
.settings-grid .form-grid input{min-width:0}
.settings-password-toggle{display:inline-flex;list-style:none;margin:8px 0 4px}
.settings-password-toggle::marker{content:""}
.settings-password-toggle::-webkit-details-marker{display:none}
#view-account details.fold>.settings-password-toggle{padding:9px 14px;color:var(--ink)}
#view-account details.fold>.settings-password-toggle::before{content:none}
.settings-appearance .swatch i{border-radius:50%}
.settings-help-links{border:1px solid var(--line2);border-radius:10px;overflow:hidden}
.settings-help-links>a,.settings-help-links>button{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;padding:16px;text-align:left;background:none;color:var(--ink);font:inherit;text-decoration:none;border:0;cursor:pointer;box-sizing:border-box}
.settings-help-links>*+*{border-top:1px solid var(--line2)!important}
.settings-help-links>*:hover{background:var(--card2)}
.settings-help-links small{display:block;color:var(--ink2);font-size:12px;margin-top:5px}
.settings-help-links>* >span:last-child{font-size:23px;color:var(--ink2)}
.settings-note{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);background:var(--card);border-radius:10px;padding:15px 18px;margin:18px 0 0;color:var(--ink2);font-size:13px;line-height:1.7}
@media(max-width:800px){#view-account{margin:18px auto 24px}.settings-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:"connection" "security" "appearance" "help";gap:14px}.settings-grid>.panel{padding:20px}.settings-heading{margin-bottom:18px}.settings-disconnect{flex-wrap:wrap}.settings-heading h1{font-size:24px}}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .log-tools .actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}
  .log-tools .actions label:first-child{grid-column:1/-1}
  .log-tools .search input,.log-tools .search select{width:100%}
  .log-tools .counts{order:2}
  #view-alerts [data-sub=notify] .panel-grid{grid-template-columns:minmax(0,1fr)}
  #view-alerts [data-sub=notify] .panel-grid>div:last-child{order:-1;border-bottom:1px solid var(--line);padding-bottom:12px}
  #view-alerts :is(#devices,#plans) .item{display:grid;grid-template-columns:minmax(0,1fr);overflow-wrap:anywhere}
  #view-alerts :is(#devices,#plans) .actions{justify-content:flex-start;flex-wrap:wrap}
  #view-alerts #emails,#view-alerts .log-tools :is(input,select){font-size:16px;min-width:0}
  #view-alerts .delivery-timeline summary{min-height:44px;line-height:1.5;align-content:center}
  .subtabs-gap{display:none}
  .subtab.minor{font-size:13.5px;color:var(--ink2);border-color:var(--line2);background:var(--card)}
}
.row-actions:has(> [hidden]:only-child){display:none}

/* ---------- density ---------- */
:root #view-monitor .row:not(.blank){min-height:42px}
:root[data-density="compact"] #view-monitor .row:not(.blank){min-height:30px}
:root[data-density="compact"] #view-monitor .hdr>div{padding:5px 10px}
:root[data-density="compact"] #view-monitor .row.blank{min-height:8px}
:root[data-density="compact"] #view-monitor .ln{padding:5px 12px}
:root #view-alerts .srow{min-height:52px;padding-top:10px;padding-bottom:10px}
:root[data-density="compact"] #view-alerts .srow{min-height:36px;padding-top:4px;padding-bottom:4px}
:root[data-density="compact"] #view-alerts .shdr{padding-top:4px;padding-bottom:4px}
:root[data-density="compact"] #view-alerts .srow .binput{min-height:28px;padding-top:2px;padding-bottom:2px}
:root #view-iv .iv-table td{padding-top:12px;padding-bottom:12px}
:root[data-density="compact"] #view-iv .iv-table td{padding-top:5px;padding-bottom:5px}
:root[data-density="compact"] #view-iv .iv-table th{padding-top:5px;padding-bottom:5px}
.density-preview{grid-column:1/-1;margin:0 0 14px;color:var(--ink2);font-size:12px}
.density-preview p{margin:0 0 8px;line-height:1.6}
.density-preview-table{border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.density-preview-head,.density-preview-row{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:center;padding:0 10px;gap:8px}
.density-preview-head{min-height:28px;background:var(--gutter);color:var(--muted)}
.density-preview-row{min-height:42px;border-top:1px solid var(--line);font-variant-numeric:tabular-nums}
:root[data-density="compact"] .density-preview-row{min-height:30px}
/* ---------- appearance settings ---------- */
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:9px;padding:2px;background:var(--card2);gap:2px}
.seg button{font:inherit;font-size:13px;border:0;background:none;color:var(--ink2);padding:6px 12px;border-radius:7px;cursor:pointer;min-height:32px}
.seg button[aria-pressed="true"]{background:var(--card);color:var(--ink);font-weight:600;box-shadow:var(--shadow-sm)}
.appearance{display:grid;grid-template-columns:130px 1fr;gap:12px 16px;align-items:center;font-size:13.5px;color:var(--ink2)}
.appearance .seg{justify-self:start;flex-wrap:wrap}
.swatch{display:inline-flex;align-items:center;gap:8px}
.swatch i{width:14px;height:14px;border-radius:4px;display:inline-block}
.swatch i.navy{background:#1F4FBF}.swatch i.teal{background:#0E7490}.swatch i.indigo{background:#4F46E5}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){.appearance{grid-template-columns:1fr;gap:6px}.appearance .seg{margin-bottom:8px}}
/* ---------- login ---------- */
.login-page{flex-direction:column;gap:18px;background:radial-gradient(900px 420px at 50% -8%,var(--brand-soft),transparent 72%),var(--bg)}
.login-brand{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}
.login-brand .mark{width:52px;height:52px}
.login-brand h1{margin:0;font-size:24px;font-weight:700;letter-spacing:-.01em}
.login-brand p{margin:0;color:var(--muted);font-size:14px}
.login-card{box-shadow:var(--shadow-sm)}
.login-foot{color:var(--faint);font-size:12px;text-align:center;margin:0}
@media screen and (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .login-page{min-height:100dvh;gap:12px;padding-bottom:max(16px,env(safe-area-inset-bottom))}
  .login-card{padding:20px}
  .login-card input:not([type=checkbox]),#view-account .form-grid input{font-size:16px}
  .login-card .pw-eye,.login-card .check,#view-account .seg button,#view-account details.fold>summary{min-height:44px}
  #view-account .settings-grid>.panel{padding:16px}
  #view-account .settings-grid h2{margin-bottom:12px}
  #view-account .settings-disconnect{padding-top:12px}
  #view-diag .diag-tabs{display:grid;grid-template-columns:1fr 1fr}
  #view-diag .diag-actions label,#view-diag .btn,#view-diag .diag-fold>summary{min-height:44px}
  #view-diag .diag-fold>summary{align-content:center}
  #view-diag .diag-table-wrap{max-width:100%;overscroll-behavior-x:contain}
}

/* ---------- sticky table headers (page scroll) on wide screens ---------- */
@media (min-width:1316px){ /* 1266px sheet, 2px border, 48px page padding */
  #view-monitor .sheet-wrap{overflow:visible}
  #view-monitor .hdr{top:var(--topbar-h,0px);border-radius:10px 10px 0 0}
}
@media (min-width:1400px){
  #view-alerts .sheet-wrap{overflow:visible}
  #view-alerts .shdr{top:var(--topbar-h,0px)}
}
/* ---------- update page ---------- */
.upload-panel{transition:border-color .15s,background .15s}
.upload-panel.drag{border:2px dashed var(--accent);background:var(--brand-soft)}
.upload-box.busy .file-btn{opacity:.7;pointer-events:none}
.side{position:sticky;top:calc(var(--topbar-h,0px) + 12px)}
#diff-rows .empty{grid-column:1/-1}

/* ---------- folds (settings) ---------- */
details.fold{margin-top:4px}
details.fold>summary{cursor:pointer;color:var(--accent);font-size:13.5px;font-weight:500;list-style:none;display:inline-flex;align-items:center;gap:6px;padding:4px 0;user-select:none}
details.fold>summary::-webkit-details-marker{display:none}
details.fold>summary::before{content:"▸";font-size:11px;transition:transform .15s}
details.fold[open]>summary::before{transform:rotate(90deg)}
details.fold[open]>summary{margin-bottom:10px}
/* ---------- login: show password ---------- */
.pw-wrap{position:relative;display:block}
.pw-wrap input{width:100%;padding-right:64px}
.pw-eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:0;background:none;color:var(--accent);font:inherit;font-size:13px;cursor:pointer;padding:6px 8px;border-radius:6px}
.pw-eye:hover{background:var(--brand-soft)}
/* the market-session banner only matters next to prices */
body[data-view="account"] #market-banner,body[data-view="update"] #market-banner,body[data-view="diag"] #market-banner{display:none}
/* ---------- alert columns tip / default rule ---------- */
.sheet-tip{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-radius:10px;margin:0 0 12px;
  background:linear-gradient(135deg,var(--brand-soft),transparent 70%),var(--card2);border:1px solid var(--line2)}
.sheet-tip-icon{flex:none;width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent);color:#fff;font-size:14px}
.sheet-tip strong{font-size:14px}
.sheet-tip p{margin:4px 0 0;font-size:13px;color:var(--ink2);line-height:1.6}
.sheet-tip b{color:var(--ink)}
.tag-default{display:inline-block;margin-left:8px;font-size:11.5px;font-weight:600;padding:1px 8px;border-radius:999px;
  background:var(--brand-soft);color:var(--accent);border:1px solid var(--accent);vertical-align:1px}
.diff-alerts{border-top:1px dashed var(--line2);padding-top:10px}
.diff-alerts h4{margin:0 0 6px;font-size:14px}
.diff-alerts p{margin:0 0 6px}
/* =====================================================================
   Next: roadmap for orders. One bold element (the order-ticket stage);
   everything else is quiet, ruled and left-aligned.
   ===================================================================== */
.tab-next{color:var(--accent)!important;font-weight:600}
.tab-next::before{content:"✦ ";font-size:11px}
body[data-view="next"] #market-banner{display:none}
.nx{max-width:1120px;margin:0 auto}
.nx h1,.nx h2,.nx h3{letter-spacing:-.01em}
/* hero */
.nx-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,480px);gap:40px;align-items:center;padding:28px 0 36px;border-bottom:1px solid var(--line2)}
.nx-kicker{display:flex;align-items:center;gap:10px;margin:0 0 14px;color:var(--muted);font-size:13px}
.nx-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;background:var(--brand-soft);color:var(--accent);font-weight:600;font-size:12.5px}
.nx-pill::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}
.nx-hero h1{font-size:clamp(26px,3.4vw,40px);line-height:1.18;margin:0 0 16px;font-weight:750;text-wrap:balance}
.nx-lead{font-size:16px;line-height:1.75;color:var(--ink2);margin:0 0 20px;max-width:34em}
.nx-promises{list-style:none;padding:0;margin:0;display:grid;gap:10px}
.nx-promises li{position:relative;padding-left:26px;font-size:14px;line-height:1.6;color:var(--ink2)}
.nx-promises li::before{content:"";position:absolute;left:0;top:4px;width:16px;height:16px;border-radius:5px;background:var(--brand-soft);
  box-shadow:inset 0 0 0 1.5px var(--accent)}
.nx-promises li::after{content:"";position:absolute;left:5px;top:7px;width:5px;height:8px;border:solid var(--accent);border-width:0 2px 2px 0;transform:rotate(45deg)}
/* stage */
.nx-stage{background:var(--card2);border:1px solid var(--line2);border-radius:18px;padding:16px;position:relative}
.nx-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;background:var(--gutter);border-radius:12px;padding:4px;margin-bottom:6px}
.nx-step{font:inherit;font-size:13px;border:0;background:none;color:var(--ink2);padding:8px 6px;border-radius:9px;cursor:pointer;display:flex;gap:7px;align-items:center;justify-content:center;min-height:38px}
.nx-step b{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11.5px;background:var(--card);color:var(--muted);border:1px solid var(--line2)}
.nx-step.on{background:var(--card);color:var(--ink);font-weight:600;box-shadow:var(--shadow-sm)}
.nx-step.on b{background:var(--accent);border-color:var(--accent);color:#fff}
.nx-chart{display:block;width:100%;height:auto;margin:6px 0 -4px}
.nx-chart .lv{stroke:var(--faint);stroke-width:1;stroke-dasharray:3 4}
.nx-chart .lvt{fill:var(--faint);font-size:9px;text-anchor:end}
.nx-chart .px{fill:none;stroke:var(--ink2);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.nx-chart .dot{fill:var(--dn)}
.nx-chart .ring{fill:none;stroke:var(--dn);stroke-width:1.5;opacity:.5}
/* the ticket */
.nx-ticket{position:relative;background:var(--card);border:1px solid var(--line2);border-radius:14px;box-shadow:0 14px 34px rgba(20,30,60,.10);overflow:hidden}
.nx-ticket::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--accent)}
.nx-ticket-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:16px 16px 14px;border-bottom:1px dashed var(--line2);position:relative}
.nx-ticket-head::before,.nx-ticket-head::after{content:"";position:absolute;bottom:-8px;width:16px;height:16px;border-radius:50%;background:var(--card2);border:1px solid var(--line2)}
.nx-ticket-head::before{left:-9px}.nx-ticket-head::after{right:-9px}
.nx-ticket-head strong{display:block;font-size:15px}
.nx-ticket-head span{font-size:12.5px;color:var(--dn)}
.nx-state{flex:none;font-size:12px!important;font-weight:600;padding:3px 9px;border-radius:999px;white-space:nowrap}
.nx-state.s1{background:var(--gutter);color:var(--ink2)!important}
.nx-state.s2{background:var(--warn-bg);color:var(--warn-ink)!important}
.nx-state.s3{background:var(--ok-bg);color:var(--ok-ink)!important}
.nx-order{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;margin:0;padding:14px 16px 4px}
.nx-order div{min-width:0}
.nx-order dt{font-size:12px;color:var(--muted)}
.nx-order dd{margin:2px 0 0;font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}
.nx-order dd.up{color:var(--up)}
.nx-checks{list-style:none;margin:0;padding:10px 16px 14px;display:flex;flex-wrap:wrap;gap:6px}
.nx-checks li{font-size:12px;padding:3px 9px 3px 22px;border-radius:999px;background:var(--ok-bg);color:var(--ok-ink);position:relative}
.nx-checks li::before{content:"";position:absolute;left:9px;top:6px;width:4px;height:7px;border:solid currentColor;border-width:0 1.6px 1.6px 0;transform:rotate(45deg)}
.nx-ticket-foot{border-top:1px solid var(--line);padding:12px 16px;background:var(--card2)}
.nx-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.nx-actions small{flex-basis:100%;color:var(--muted);font-size:12px}
.nx-fake{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:6px 14px;border-radius:9px;font-size:13px;font-weight:600;background:var(--card);border:1px solid var(--field-line);color:var(--ink);user-select:none}
.nx-fake.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}
.nx-fake.ghost{font-weight:500;color:var(--ink2)}
.nx-fake.danger{color:var(--dn);border-color:var(--err-line);margin-left:auto}
.nx-auto{display:grid;gap:8px}
.nx-meter{display:grid;grid-template-columns:64px 1fr auto;gap:10px;align-items:center;font-size:12.5px;color:var(--ink2)}
.nx-meter i{height:6px;border-radius:3px;background:var(--gutter);overflow:hidden;display:block}
.nx-meter b{display:block;height:100%;background:var(--accent);border-radius:3px}
.nx-meter b.w15{width:15%}.nx-meter b.w42{width:42%}
.nx-meter em{font-style:normal;font-variant-numeric:tabular-nums;color:var(--ink)}
.nx-kill{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;padding-top:4px}
.nx-switch{width:32px;height:18px;border-radius:999px;background:var(--ok);position:relative;flex:none}
.nx-switch::after{content:"";position:absolute;right:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff}
.nx-mock{margin:0;padding:6px 16px 10px;font-size:11.5px;color:var(--faint);background:var(--card2)}
/* phase switching: only the current phase's bits are shown */
.nx-ticket .s1,.nx-ticket .s2,.nx-ticket .s3{display:none}
.nx-ticket[data-phase="1"] .s1,.nx-ticket[data-phase="2"] .s2,.nx-ticket[data-phase="3"] .s3{display:revert}
.nx-ticket[data-phase="1"] .nx-actions.s1,.nx-ticket[data-phase="2"] .nx-actions.s2{display:flex}
.nx-ticket[data-phase="3"] .nx-auto.s3{display:grid}
.nx-ticket[data-phase="3"] .nx-order div.s3{display:block}
/* phase cards: a swipeable track that advances on its own */
.nx-track{display:grid;grid-auto-flow:column;grid-auto-columns:100%;gap:16px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;padding:6px 2px 30px;margin:0 -2px -22px}
.nx-track::-webkit-scrollbar{display:none}
.nx-slide{scroll-snap-align:start;scroll-snap-stop:always;min-width:0}
.nx-track .nx-ticket{box-shadow:0 6px 18px rgba(20,30,60,.08)}
.nx-track .nx-phase{margin-top:18px}
.nx-step{position:relative}
.nx-bar{position:absolute;left:14px;right:14px;bottom:3px;height:2px;border-radius:2px;background:var(--line2);overflow:hidden;opacity:0}
.nx-bar i{display:block;height:100%;width:0;background:var(--accent)}
.nx-step.on .nx-bar{opacity:1}
.nx-bar.run i{animation:nx-progress 7s linear forwards}
.nx-stage.paused .nx-bar i{animation-play-state:paused}
@keyframes nx-progress{to{width:100%}}
.nx-phase{margin-top:14px;display:grid;gap:8px}
.nx-phase p{margin:0;font-size:13.5px;line-height:1.6;color:var(--ink2);display:grid;grid-template-columns:76px 1fr;gap:10px}
.nx-phase b{color:var(--ink);font-weight:600}
/* sections */
.nx-sec{padding:36px 0;border-bottom:1px solid var(--line2)}
.nx-sec:last-child{border-bottom:0}
.nx-sec-head{max-width:40em;margin-bottom:20px}
.nx-sec-head h2{font-size:22px;margin:0 0 6px;font-weight:700}
.nx-sec-head p{margin:0;color:var(--muted);font-size:14.5px;line-height:1.7}
.nx-foot{color:var(--faint);font-size:12.5px;margin:12px 0 0}
/* proof strip: a ruled table, standard vs measured */
.nx-proof{border-top:2px solid var(--ink)}
.nx-proof-row{display:grid;grid-template-columns:80px minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr);gap:20px;padding:16px 0;border-bottom:1px solid var(--line2);align-items:baseline;font-size:13.5px;color:var(--ink2);line-height:1.6}
.nx-proof-hd{padding:8px 0;font-size:12px;color:var(--muted)}
.nx-proof-name{font-weight:700;color:var(--ink);font-size:15px}
.nx-proof-val{color:var(--ink2)}
.nx-proof-val b{display:block;font-size:26px;line-height:1.15;color:var(--ink);font-weight:750;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
/* flow */
.nx-flow{display:grid;grid-template-columns:1fr 28px 1fr 28px 1fr 44px 1fr;align-items:stretch}
.nx-node{border:1px solid var(--line2);background:var(--card);border-radius:12px;padding:14px}
.nx-node h3{margin:6px 0 4px;font-size:16px}
.nx-node p{margin:0;font-size:12.5px;line-height:1.6;color:var(--muted)}
.nx-new{border:1.5px dashed var(--accent);background:var(--brand-soft)}
.nx-tag{display:inline-block;font-size:11.5px;font-weight:600;padding:1px 8px;border-radius:999px;background:var(--brand-soft);color:var(--accent)}
.nx-tag.ok{background:var(--ok-bg);color:var(--ok-ink)}
.nx-new .nx-tag{background:var(--card)}
.nx-arrow{position:relative}
.nx-arrow::before{content:"";position:absolute;left:4px;right:8px;top:50%;height:2px;background:var(--line2)}
.nx-arrow::after{content:"";position:absolute;right:4px;top:calc(50% - 4px);border:5px solid transparent;border-left:7px solid var(--line2);border-right:0}
.nx-wall{position:relative;display:flex;align-items:center;justify-content:center}
.nx-wall::before{content:"";position:absolute;top:-6px;bottom:-6px;left:50%;width:6px;margin-left:-3px;border-radius:3px;
  background:repeating-linear-gradient(45deg,var(--warn-line) 0 6px,transparent 6px 12px);opacity:.9}
.nx-wall span{position:relative;writing-mode:vertical-rl;font-size:11.5px;font-weight:600;color:var(--warn-ink);background:var(--warn-bg);padding:6px 2px;border-radius:6px}
.nx-safety{list-style:none;padding:0;margin:22px 0 0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 32px}
.nx-safety li{font-size:13.5px;line-height:1.65;color:var(--ink2);padding-left:14px;border-left:2px solid var(--accent)}
.nx-safety b{display:block;color:var(--ink);font-size:14px;margin-bottom:2px}
/* gates: requirements, not yet built -> empty boxes */
.nx-gates{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid var(--line2);border-left:1px solid var(--line2)}
.nx-gates li{position:relative;padding:14px 14px 14px 42px;border-right:1px solid var(--line2);border-bottom:1px solid var(--line2);font-size:12.5px;line-height:1.6;color:var(--muted);background:var(--card)}
.nx-gates li::before{content:"";position:absolute;left:14px;top:16px;width:16px;height:16px;border-radius:4px;border:1.5px solid var(--faint)}
.nx-gates b{display:block;color:var(--ink);font-size:14px;margin-bottom:2px}
/* scope */
.nx-scope{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px}
.nx-scope h3{font-size:15px;margin:0 0 10px;padding-bottom:8px;border-bottom:2px solid var(--ink)}
.nx-scope div:last-child h3{border-bottom-color:var(--accent);color:var(--accent)}
.nx-done,.nx-todo{list-style:none;padding:0;margin:0}
.nx-done li,.nx-todo li{position:relative;padding:9px 0 9px 26px;border-bottom:1px solid var(--line);font-size:14px;color:var(--ink2)}
.nx-done li::before{content:"";position:absolute;left:4px;top:13px;width:5px;height:9px;border:solid var(--ok);border-width:0 2px 2px 0;transform:rotate(45deg)}
.nx-todo li::before{content:"";position:absolute;left:2px;top:15px;width:10px;height:10px;border-radius:50%;border:2px solid var(--accent)}
/* questions */
.nx-questions{list-style:none;padding:0;margin:0 0 20px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.nx-questions li{background:var(--card);border:1px solid var(--line2);border-radius:12px;padding:14px 16px 14px 44px;position:relative;font-size:14px;line-height:1.65;color:var(--ink)}
.nx-questions li::before{content:"?";position:absolute;left:14px;top:14px;width:20px;height:20px;border-radius:50%;background:var(--brand-soft);color:var(--accent);font-weight:700;font-size:12px;display:flex;align-items:center;justify-content:center}
/* the document */
.nx-doc{max-width:860px;background:var(--card);border:1px solid var(--line2);border-radius:14px;padding:32px 40px 40px;line-height:1.75;font-size:15px;color:var(--ink2)}
.nx-doc-tools{display:flex;justify-content:flex-end;margin:-12px -16px 8px 0}
.nx-doc h1{font-size:28px;line-height:1.25;color:var(--ink);margin:0 0 6px}
.nx-doc-meta{color:var(--muted);font-size:13px;margin:0 0 20px}
.nx-doc h2{font-size:19px;color:var(--ink);margin:32px 0 10px;padding-top:18px;border-top:1px solid var(--line2)}
.nx-doc p{margin:0 0 12px}
.nx-doc ul{margin:0 0 12px;padding-left:22px}
.nx-doc li{margin:4px 0}
.nx-doc-checks{list-style:none;padding-left:0!important}
.nx-doc-checks li{position:relative;padding-left:28px}
.nx-doc-checks li::before{content:"";position:absolute;left:2px;top:6px;width:14px;height:14px;border-radius:3px;border:1.5px solid var(--faint)}
.nx-table{overflow-x:auto;margin:0 0 14px}
.nx-doc table{border-collapse:collapse;width:100%;font-size:13.5px;line-height:1.6}
.nx-doc th,.nx-doc td{border:1px solid var(--line2);padding:8px 10px;text-align:left;vertical-align:top}
.nx-doc th{background:var(--gutter);color:var(--ink);font-weight:600}
.nx-doc td:first-child{color:var(--ink);font-weight:600;white-space:nowrap}
@media (max-width:1100px){
  .nx-flow{grid-template-columns:1fr 28px 1fr 28px 1fr;row-gap:14px}
  .nx-wall{grid-column:1/-1;height:28px}
  .nx-wall::before{top:50%;bottom:auto;left:0;right:0;width:auto;height:6px;margin:-3px 0 0}
  .nx-wall span{writing-mode:horizontal-tb;padding:2px 10px}
  .nx-new{grid-column:1/-1}
  .nx-gates{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:860px){
  .nx-hero{grid-template-columns:1fr;gap:24px;padding-top:12px}
  .nx-proof-hd{display:none}
  .nx-proof-row{grid-template-columns:1fr;gap:4px}
  .nx-proof-val b{display:inline;font-size:22px;margin-right:8px}
  .nx-flow{grid-template-columns:1fr}
  .nx-arrow{height:22px}
  .nx-arrow::before{left:50%;right:auto;top:2px;bottom:8px;width:2px;height:auto}
  .nx-arrow::after{left:calc(50% - 5px);right:auto;top:auto;bottom:2px;border:5px solid transparent;border-top:7px solid var(--line2);border-bottom:0}
  .nx-wall,.nx-new{grid-column:auto}
  .nx-safety,.nx-scope,.nx-questions,.nx-gates{grid-template-columns:1fr}
  .nx-doc{padding:20px 18px 28px;font-size:14.5px}
  .nx-doc-tools{margin:0 0 8px}
}
@media (prefers-reduced-motion:reduce){.nx-bar{display:none}.nx-bar.run i{animation:none}}
@media screen and (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  #view-next :is(.nx-step,.subtab,.btn){min-height:44px}
  #view-next .nx-proof-row [role=cell]:nth-child(2)::before{content:"怎么测 · "}
  #view-next .nx-proof-row [role=cell]:nth-child(3)::before{content:"验收标准 · "}
  #view-next .nx-proof-row [role=cell]:nth-child(4)::before{content:"首批实测 · "}
  #view-next .nx-proof-row [role=cell]::before{color:var(--muted);font-size:12px}
  #view-next .nx-table{overscroll-behavior-x:contain}
  #view-next .nx-doc table{min-width:32rem}
  #view-next .nx-doc td:first-child{white-space:normal}
}
@media print{
  .topbar,#ibkr-bar,#market-banner,#banner,#toasts,#modal,.subtabs,.nx-doc-tools,#next-roadmap{display:none!important}
  .view:not(#view-next){display:none!important}
  body{background:#fff}
  .nx-doc{border:0;padding:0;max-width:none}
}
#plan-form-title{margin:16px 0 0;padding-top:14px;border-top:1px dashed var(--line2)}
#plan-form{border-top:0;padding-top:0;margin-top:8px}
.sheet-tip-note{color:var(--muted)!important;font-size:12.5px!important}
.item-default{flex-wrap:wrap}
.plan-note{flex-basis:100%;margin:2px 0 0;font-size:12.5px;line-height:1.6;color:var(--muted)}
.notice-soft{background:var(--warn-bg);border:1px solid var(--warn-line);color:var(--warn-ink);border-radius:8px;padding:10px 12px;margin:8px 0;display:grid;gap:4px;line-height:1.55}
.notice-soft strong{font-size:13.5px}
/* ---------- IV screen ---------- */
.iv-top.drag{border:2px dashed var(--accent);background:var(--brand-soft)}
.iv-head{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:flex-start;justify-content:space-between}
.iv-head h2{margin:0 0 4px}
.iv-head p{margin:0;max-width:36em}
.iv-bar{display:flex;flex-wrap:wrap;gap:10px 20px;align-items:center;justify-content:space-between;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.iv-thr{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;font-size:13.5px;color:var(--ink2)}
.iv-thr-title{font-weight:600;color:var(--ink)}
.iv-thr input{width:64px;min-height:34px;padding:4px 8px;margin-left:4px;font-weight:600;text-align:center}
.iv-summary{display:flex;flex-wrap:wrap;gap:6px 20px;align-items:baseline;margin:4px 0 12px}
.iv-big{display:flex;align-items:baseline;gap:8px;color:var(--ink2)}
.iv-big b{font-size:30px;line-height:1;font-weight:750;color:var(--muted);font-variant-numeric:tabular-nums}
.iv-big.on b{color:#B7791F}
.iv-counts,.iv-progress{font-size:13px;color:var(--muted)}
.iv-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}
.iv-tools input,.iv-tools select{min-height:38px;padding:6px 10px}
.iv-tools input{width:160px}
.iv-tools .btn:last-child{margin-left:auto}
.iv-table-wrap{background:var(--card);border:1px solid var(--line2);border-radius:10px;overflow:clip}
body[data-view="iv"] #market-banner{display:none}
.iv-table{width:100%;border-collapse:collapse;font-size:14px}
.iv-table th{position:sticky;top:var(--topbar-h,0px);z-index:1;background:var(--gutter);font-size:12px;font-weight:500;color:var(--ink2);text-align:left;padding:9px 12px;border-bottom:1px solid var(--line2)}
.iv-table th.r,.iv-table td.r{text-align:right}
.iv-table td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.iv-table tr:last-child td{border-bottom:0}
.iv-table td.sym{font-weight:700;letter-spacing:.01em}
.iv-table .num-col{width:56px;color:var(--faint);font-size:12px}
.iv-table .st-col{width:34%}
.iv-table tr.dim td{color:var(--muted)}
.iv-table tr.hit td{background:#FFF6D6}
.iv-table tr.hit td:first-child{box-shadow:inset 3px 0 #E0A21B}
.iv-tag{display:inline-block;margin-left:8px;font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;background:#E0A21B;color:#fff;vertical-align:1px}
.ivv{width:150px;white-space:nowrap}
.ivv b{font-weight:500;font-variant-numeric:tabular-nums;display:inline-block;min-width:2.2em}
.ivv.reach b{font-weight:800;color:#9A5B00}
.ivm{display:inline-block;position:relative;width:64px;height:6px;border-radius:3px;background:var(--gutter);margin-left:10px;vertical-align:middle;overflow:visible}
.ivm i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--faint)}
.ivv.reach .ivm i{background:#E0A21B}
.ivm em{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--ink2);opacity:.55}
.iv-explain{margin:12px 2px 0;line-height:1.6}
:root[data-theme="dark"] .iv-table tr.hit td{background:#3A2F12}
:root[data-theme="dark"] .ivv.reach b,:root[data-theme="dark"] .iv-big.on b{color:#F5C451}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .iv-table tr.hit td{background:#3A2F12}
  :root:not([data-theme="light"]) .ivv.reach b,:root:not([data-theme="light"]) .iv-big.on b{color:#F5C451}}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .iv-table .num-col,.iv-table .opt-col{display:none}
  .iv-table .st-col{display:none}
  .ivm{width:40px;margin-left:6px}
  .ivv{width:auto}
  .iv-table td,.iv-table th{padding:9px 8px}
  .iv-tools input{flex:1 1 120px}
  .iv-tools .btn:last-child{margin-left:0}
  #view-iv .iv-head>.actions,#view-iv .iv-tools{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
  #view-iv .iv-head>.actions .file-btn,#view-iv .iv-tools input{grid-column:1/-1}
  #view-iv .iv-tools :is(input,select),#view-iv .iv-thr input{min-width:0;font-size:16px;min-height:44px}
  #view-iv .iv-tools input{width:100%}
  #view-iv .iv-head .btn,#view-iv .iv-tools .btn{min-height:44px;white-space:normal;text-align:center}
  #view-iv .iv-thr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px}
  #view-iv .iv-thr-title{grid-column:1/-1}
  #view-iv .iv-thr label{display:grid;gap:4px}
  #view-iv .iv-thr input{width:100%;margin:0}
  #view-iv .iv-meta,#view-iv .iv-table .sym{overflow-wrap:anywhere}
}
.iv-sub{display:none;font-weight:400;font-size:11.5px;color:var(--muted);margin-top:2px}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){.iv-sub{display:block}}
/* ---------- earnings ---------- */
.earn-badge{display:inline-block;margin-left:6px;font-size:11px;font-weight:600;padding:1px 6px;border-radius:999px;background:var(--warn-bg);color:var(--warn-ink);border:1px solid var(--warn-line);vertical-align:1px;white-space:nowrap}
.card-h .earn-badge{margin-left:8px}
.earn-badge.est{background:transparent;border-style:dashed;font-weight:500}
.iv-table .earn-col{width:120px;white-space:nowrap}
.earn-col small{display:block;font-size:11.5px;color:var(--muted)}
.earn-date{font-variant-numeric:tabular-nums}
.earn-date.soon{font-weight:700;color:var(--warn-ink)}
.iv-table tr.expandable{cursor:pointer}
.iv-table tr.expandable:hover td{background:var(--card2)}
.iv-table tr.hit.expandable:hover td{background:#FCEFC4}
.iv-detail td{background:var(--card2);padding:12px 16px 14px 68px}
.iv-earn{display:grid;gap:4px;font-size:13px;color:var(--ink2);line-height:1.6}
.iv-earn strong{color:var(--ink);font-size:14px}
.iv-links{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:2px}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){.iv-table .earn-col{display:none}.iv-detail td{padding:10px 12px}}
.ibkr-hint{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}
.ibkr-state{align-items:flex-start}
.ibkr-state .dot{margin-top:6px}

/* review 10/28 */
.same-note{display:flex;align-items:center;gap:12px;flex-wrap:wrap;border:1px solid var(--info-line);background:var(--info-bg);border-radius:10px;padding:12px 16px;margin:10px 0;font-size:13.5px;color:var(--ink2)}
.form-actions{display:inline-flex;gap:8px;align-items:center}
.diag-online-sum{margin:0 0 10px;font-size:14px;font-weight:600;color:var(--ink)}

/* ---------- alerts: stock list (2026-10-30: stocks only, pick several then set) ---------- */
.subtabs{align-items:center}
.subtabs-gap{flex:1 1 auto}
.subtab.minor{border-color:transparent;background:transparent;color:var(--muted);font-size:13px;padding:6px 10px;min-height:32px}
.subtab.minor:hover{color:var(--ink)}
.subtab.minor.on{background:var(--gutter);color:var(--ink);border-color:var(--line2);font-weight:600}
.setbar{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center;padding:10px 12px;margin:12px 0 6px;border-radius:10px;background:var(--card2);border:1px solid var(--line)}
.setbar .search input{width:150px}
.setbar .search select{min-width:180px}
.setbar-n{font-size:13px;color:var(--ink2);margin-right:4px}
.setbar input:disabled{background:var(--gutter);color:var(--muted)}
.set-hint{margin:0 0 10px}
.sheet-note{margin:10px 0 0}
.stock-alerts{min-width:760px}
.shdr,.srow{display:grid;grid-template-columns:36px 56px 150px 110px 110px 100px 220px minmax(180px,1fr);gap:10px;align-items:center;padding:7px 12px}
.shdr{background:var(--gutter);font-size:12px;color:var(--ink2);font-weight:500;position:sticky;top:0;z-index:2;border-bottom:1px solid var(--line2)}
.srow{border-bottom:1px solid var(--line);font-size:13.5px;cursor:pointer;font-variant-numeric:tabular-nums}
.srow:last-child{border-bottom:0}
.srow:hover{background:var(--card2)}
.srow:has(.pick:checked){background:var(--brand-soft)}
.srow .sym{font-weight:600}
.srow .up{color:var(--up)}.srow .dn{color:var(--dn)}
.srow .plan{color:var(--ink2)}
.sstat{color:var(--muted);font-size:13px}
.srow.on .sstat{color:var(--ok-ink)}
.shdr input[type=checkbox],.srow input[type=checkbox]{min-height:0;width:16px;height:16px;padding:0;margin:0}
.empty-note{padding:16px 12px;margin:0}
.assign-sum{font-size:13.5px;color:var(--ink2)}.assign-sum b{font-size:18px;color:var(--ink);margin-right:2px}
@media (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){.subtab.minor[data-sub=log]{order:-1}}
#modal-text{white-space:pre-line;overflow-wrap:anywhere}
#alert-list-result{margin:12px 0}#alert-list-result summary{cursor:pointer}.alert-list-detail{white-space:pre-line;max-height:32vh;overflow:auto;padding:10px 0;overflow-wrap:anywhere}
.srow .binput{width:96px;min-height:30px;padding:3px 8px;text-align:right;font-variant-numeric:tabular-nums;background:transparent;border-color:transparent}
.srow:hover .binput,.srow .binput:focus{border-color:var(--field-line);background:var(--card)}
.srow .binput::placeholder{color:var(--faint)}
.srow .binput{-moz-appearance:textfield;appearance:textfield}.srow .binput::-webkit-inner-spin-button,.srow .binput::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}

@media(max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .tabs .tab{flex:none;white-space:nowrap}
  .mtools{flex-wrap:wrap}.mtools input{flex-basis:100%}
  #view-alerts .subtabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  #view-alerts .subtab{order:0;min-height:44px;border:1px solid var(--line2)}
  #view-alerts .panel[data-sub=assign] .actions,#view-alerts .setbar{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  #view-alerts .panel[data-sub=assign] .search{display:grid;min-width:0}
  #view-alerts .panel[data-sub=assign] .search :is(input,select){min-width:0;width:100%}
  #view-alerts .setbar-n{grid-column:1/-1}
  #view-alerts .sheet-wrap{display:block;background:transparent;border:0}
  #view-alerts .stock-alerts{min-width:0}
  #view-alerts .shdr{position:static;display:block;padding:8px;background:transparent}
  #view-alerts .shdr>div:not(:first-child){display:none}
  #view-alerts .shdr>div:first-child::after{content:' 全选当前显示的股票'}
  #view-alerts :is(.shdr,.srow) input[type=checkbox]{width:22px;height:22px;vertical-align:middle}
  #view-alerts .srow{margin:8px 0;display:grid;grid-template-columns:30px minmax(0,1fr) minmax(0,1fr);grid-template-areas:"pick symbol line" ". price base" ". change plan" ". status status";gap:6px 8px;border:1px solid var(--line2);border-radius:10px;background:var(--card);align-items:center}
  #view-alerts .srow:has(.pick:checked){border-color:var(--accent);background:var(--brand-soft)}
  #view-alerts .srow>div{min-width:0;overflow-wrap:anywhere;text-align:left}
  #view-alerts .srow>div:nth-child(1){grid-area:pick}
  #view-alerts .srow>div:nth-child(2){grid-area:line;text-align:right}
  #view-alerts .srow>div:nth-child(2)::before{content:'原表行 '}
  #view-alerts .srow>div:nth-child(3){grid-area:symbol;font-size:16px}
  #view-alerts .srow>div:nth-child(4){grid-area:price}
  #view-alerts .srow>div:nth-child(4)::before{content:'当前价 '}
  #view-alerts .srow>div:nth-child(5){grid-area:base}
  #view-alerts .srow>div:nth-child(5)::before{content:'基准价';display:block}
  #view-alerts .srow>div:nth-child(6){grid-area:change}
  #view-alerts .srow>div:nth-child(6)::before{content:'较基准 '}
  #view-alerts .srow>div:nth-child(7){grid-area:plan}
  #view-alerts .srow>div:nth-child(8){grid-area:status}
  #view-alerts .srow .binput{width:100%;min-height:40px;background:var(--field);border-color:var(--field-line);text-align:left;font-size:16px}
  #view-alerts .rule-preview-link{min-height:40px}
  #view-alerts .plan-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  #view-alerts .plan-form .stack :is(input,select){width:100%;min-width:0;font-size:16px}
  #view-alerts .plan-form :is(.form-actions,.toggle){grid-column:1/-1}
  #view-update .preview-grid{display:flex;flex-direction:column}
  #view-update .preview-grid>.side{order:-1;position:static;flex:auto;width:100%;max-width:none}
  #view-update .preview-grid>.sheet-wrap{display:block;flex:auto;width:100%;max-height:55vh;overflow:auto}
  #view-update .upload-box .actions{flex-wrap:wrap}
}

/* Phone workflows: keep the list in view and bring actions to the selection. */
#nav-secondary{display:contents}
.nav-icon{display:none}
@media screen and (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .app-page{--touch-bottom:env(safe-area-inset-bottom,0px);--mobile-nav-height:calc(58px + var(--touch-bottom));padding-bottom:var(--mobile-nav-height)}
  .app-page .topbar{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;padding:4px 12px}
  .topbar .brand{display:grid;grid-template-columns:24px minmax(0,1fr);column-gap:6px;row-gap:0;line-height:1.2}
  .topbar .brand .mark{grid-row:1/3;width:24px;height:24px}
  .topbar .brand strong{font-size:15px}
  .topbar #filename{grid-column:2;border:0;padding:0;font-size:11px}
  .topbar .chips{display:grid;grid-template-columns:auto auto;gap:0 4px;align-items:center}
  .topbar #last-data{grid-column:1/-1;justify-self:end;padding:0;border:0;color:var(--muted)}
  .topbar .chips button{min-height:44px;padding:0 6px;border-color:transparent;background:transparent}
  .topbar #conn-text{max-width:27vw;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
  .global-appearance{max-height:calc(100dvh - var(--topbar-h,60px) - var(--mobile-nav-height) - 16px);overscroll-behavior:contain}
  .global-appearance .seg button,#appearance-close{min-height:44px}
  html:has(.app-page){scroll-padding-top:calc(var(--topbar-h,60px) + 8px);scroll-padding-bottom:calc(66px + env(safe-area-inset-bottom,0px))}
  .app-page :is(input:not([type=checkbox]):not([type=radio]):not([type=file]),textarea,select){font-size:16px}
  .app-page.keyboard-open .topbar .tabs{display:none}
  .app-page.keyboard-open #view-alerts .has-selection .setbar{bottom:var(--keyboard-inset)}
  .app-page.keyboard-open #view-alerts .has-selection .setbar:not(:focus-within){visibility:hidden}
  .app-page.keyboard-open:has(#modal:not([hidden])) .setbar{visibility:hidden}
  .app-page.keyboard-open #toasts{top:calc(var(--topbar-h,60px) + 6px);bottom:auto}
  .topbar .tabs{position:fixed;inset:auto 0 0;height:var(--mobile-nav-height);box-sizing:border-box;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));align-items:stretch;gap:0;padding:0 4px var(--touch-bottom);overflow:visible;background:var(--card);border-top:1px solid var(--line2)}
  .topbar .tabs>.tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:12px;line-height:15px;padding:4px 2px;border:0;background:transparent;color:var(--ink2)}
  .topbar .tabs .nav-icon{display:block;width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}
  .topbar .tabs>.tab.on,.tabs:has(#nav-secondary .tab.on) #mobile-nav-more,#mobile-nav-more[aria-expanded=true]{color:var(--accent);font-weight:650}
  .topbar .tab.on .nav-icon{stroke-width:2.15}
  #nav-secondary{display:none}
  #mobile-nav-more[aria-expanded=true]+#nav-secondary{display:grid;position:absolute;right:8px;bottom:calc(100% + 4px);min-width:150px;padding:6px;background:var(--card);border:1px solid var(--line2);border-radius:10px;box-shadow:var(--shadow)}
  #nav-secondary .tab{text-align:left;margin:0}
  .topbar:has(#mobile-nav-more[aria-expanded=true]){z-index:60}
  .app-page #view-alerts .has-selection .setbar{bottom:var(--mobile-nav-height);padding-bottom:8px}
  .app-page .toasts{bottom:calc(12px + var(--mobile-nav-height))}
}
@media(max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  #view-alerts .panel[data-sub=assign]:not(.show-file-tools) :is(.actions>a[href="/api/alert-settings/export"],.actions>.file-btn,.toolbar+.row-actions,.toolbar+.row-actions+.alert-help){display:none}
  #mobile-tools-toggle{grid-column:1/-1}
  #view-alerts .panel[data-sub=assign] .setbar{display:none}
  #view-alerts .panel[data-sub=assign].has-selection{padding-bottom:calc(90px + env(safe-area-inset-bottom,0px))}
  #view-alerts .panel[data-sub=assign].has-selection.editing-selection{padding-bottom:calc(250px + env(safe-area-inset-bottom,0px))}
  #view-alerts .has-selection .setbar{display:grid!important;position:fixed;z-index:32;bottom:0;left:0;right:0;width:100%;box-sizing:border-box;margin:0;max-height:60dvh;overflow:auto;padding:8px 16px calc(8px + env(safe-area-inset-bottom,0px));background:var(--card);border-radius:12px 12px 0 0;box-shadow:var(--shadow)}
  #view-alerts .has-selection .setbar-n{grid-column:1;align-self:center}
  #view-alerts .has-selection:not(.editing-selection) .setbar>:is(.search,#set-apply,#set-clear){display:none}
  #view-alerts .set-hint{display:none}
  #view-alerts .srow:focus-within{outline:1px solid var(--accent)}
  #view-alerts .panel[data-sub=assign] input,#view-alerts .panel[data-sub=assign] select,#m-search{font-size:16px}
  #view-alerts .subtab,#view-alerts .btn,#view-update .btn{min-height:44px}
  #view-alerts .rule-preview-link{padding:8px 0}
  .modal{align-items:flex-end;padding:0}
  .modal .modal-box{max-height:85dvh;width:100%;border-radius:16px 16px 0 0;padding:18px 16px calc(16px + var(--touch-bottom,env(safe-area-inset-bottom,0px)))}
  .modal .modal-box .row-actions{bottom:calc(-16px - var(--touch-bottom,env(safe-area-inset-bottom,0px)));display:flex;padding-bottom:calc(12px + var(--touch-bottom,env(safe-area-inset-bottom,0px)))}
  .modal .row-actions .btn{flex:1;min-height:46px}
  body:has(#view-alerts:not([hidden]) .has-selection:not([hidden])) .toasts{bottom:auto;top:calc(6px + env(safe-area-inset-top,0px))}
}
.alert-overview{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 16px}
.alert-coverage{flex:1 1 540px;min-width:0;line-height:1.5}
.coverage-metrics{display:flex;flex-wrap:wrap;gap:8px 20px}.coverage-metric{font-size:13px;color:var(--ink2)}.coverage-metric b{font-size:18px;color:var(--ink);font-variant-numeric:tabular-nums;margin-left:4px}
.coverage-detail{margin-top:6px}.coverage-detail summary,.alert-help summary{cursor:pointer;font-size:12.5px;color:var(--muted);padding:4px 0}
.alert-help{margin:6px 0}.alert-help p{line-height:1.6;margin:6px 0}
.save-feedback{font-size:13px;margin:6px 0;line-height:1.5}.save-feedback:empty{display:none}
.save-feedback[data-state="saving"]{color:var(--load)}.save-feedback[data-state="saved"]{color:var(--ok)}.save-feedback[data-state="error"]{color:var(--err)}
.btn{transition:background-color .12s,border-color .12s,box-shadow .12s}.btn:active:not(:disabled){box-shadow:inset 0 1px 3px rgba(0,0,0,.15)}
@media(max-width:760px), screen and (max-width:1024px) and (pointer:coarse){.alert-overview{gap:8px;padding:12px}.coverage-metrics{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px}.coverage-metric b{font-size:16px}.alert-overview>.btn{min-height:40px}.modal-box{padding:16px}.modal-box .row-actions{bottom:-16px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.alert-coverage p{margin:6px 0 0;overflow-wrap:anywhere}
.alert-ready,.srow.on .sstat.alert-ready{color:var(--ok)}.alert-attention,.srow.on .sstat.alert-attention{color:var(--attn)}
.sstat .small{max-width:330px;white-space:normal;line-height:1.5}
.rule-preview-link{display:block;background:none;border:0;color:var(--accent,#4265cd);font:inherit;font-size:12px;padding:4px 0;cursor:pointer;text-decoration:underline}
.delivery-timeline{grid-column:1/-1;margin-top:8px;padding:10px 12px;border:1px solid var(--line2);border-radius:8px;overflow-wrap:anywhere}
.delivery-timeline summary{cursor:pointer;font-size:13px}.delivery-timeline p{margin:8px 0;line-height:1.6}

/* IV: earnings within 3 days (2026-10-30) */
.iv-table tr.soon td:first-child{box-shadow:inset 3px 0 #EA580C}
.iv-table tr.soon:not(.hit) td{background:#FFF1E6}
.iv-tag.soon{background:#EA580C}
.earn-date.hot{font-weight:800;color:#C2410C}
button.iv-big{font:inherit;cursor:pointer;padding:6px 12px;border-radius:10px;border:1px solid #FDBA74;background:#FFF1E6;color:#9A3412}
button.iv-big.soon b{color:#C2410C}
#iv-only-soon[aria-pressed="true"]{background:#FFF1E6;border-color:#EA580C;color:#9A3412;font-weight:600}
:root[data-theme="dark"] .iv-table tr.soon:not(.hit) td{background:#3B2414}
:root[data-theme="dark"] button.iv-big{background:#3B2414;border-color:#9A3412;color:#FDBA74}
:root[data-theme="dark"] .earn-date.hot{color:#FB923C}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .iv-table tr.soon:not(.hit) td{background:#3B2414}
  :root:not([data-theme="light"]) button.iv-big{background:#3B2414;border-color:#9A3412;color:#FDBA74}
  :root:not([data-theme="light"]) .earn-date.hot{color:#FB923C}}

/* Installed app: keep controls above rounded corners even with a zero reported inset. */
@media screen and (max-width:760px) and (display-mode:standalone), screen and (max-width:1024px) and (pointer:coarse) and (display-mode:standalone){
  .app-page{--touch-bottom:max(32px,env(safe-area-inset-bottom,0px))}
}
@media screen and (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  .ios-home-screen .app-page{--touch-bottom:max(32px,env(safe-area-inset-bottom,0px))}
}

@media screen and (max-width:760px), screen and (max-width:1024px) and (pointer:coarse){
  #view-update .panel{padding:14px;margin-bottom:12px}
  #view-update .upload-box{gap:10px}
  #view-update .upload-box .actions{width:100%;display:grid;gap:6px}
  #view-update #file-label{grid-row:1;min-height:46px}
  #view-update .upload-box .toggle{min-height:40px}
  #view-update .symbol-fixes{background:var(--card);border:1px solid var(--line2);border-left:3px solid var(--attn);color:var(--ink);padding:12px}
  #view-update .symbol-fixes .fix{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;overflow-wrap:anywhere}
  #view-update .fix .small{grid-column:1/-1}
  #current-list .stats{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}
  #current-list .stat:nth-child(-n+2){grid-column:1/-1;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:baseline;gap:12px;background:transparent;border:0;padding:3px 0}
  #current-list .stat:nth-child(-n+2) b{text-align:right;font-size:14px;margin:0;overflow-wrap:anywhere}
  #current-list .stat{min-width:0}
  #current-list .row-actions{display:flex;flex-wrap:wrap;gap:8px}
  #current-list .row-actions .btn{flex:1 1 130px;white-space:normal;text-align:center}
}

#symbol-rail{display:none}
@media screen and (min-width:600px) and (max-width:1024px) and (pointer:coarse){
  #monitor-panes:has(#symbol-rail button){display:grid;grid-template-columns:minmax(140px,28%) minmax(0,1fr);gap:12px;align-items:start;margin-top:12px}
  #symbol-rail:has(button){display:grid;position:sticky;top:calc(var(--topbar-h,60px) + 8px);max-height:60dvh;overflow:auto;background:var(--card);border:1px solid var(--line2);border-radius:12px}
  #symbol-rail button{min-height:44px;text-align:left;padding:8px 12px;background:transparent;color:var(--ink);font:inherit;border:0;border-bottom:1px solid var(--line)}
  #symbol-rail button[aria-pressed=true]{background:var(--brand-soft);color:var(--accent);font-weight:700}
  #monitor-panes #cards{margin-top:0;min-width:0}
  #monitor-panes .card[data-inactive]{display:none}
  #assign-rows{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  #view-alerts #assign-rows .srow{margin:0}
}

/* ---------- trading (phase 2; private preview) ---------- */
#view-trading .panel{margin-bottom:14px}
.tr-head .tr-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tr-head h2{margin:0}
.tr-badge{font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;background:var(--warn-bg);color:var(--warn-ink);border:1px solid var(--warn-line)}
.tr-controls{display:flex;flex-wrap:wrap;gap:14px 22px;align-items:center;margin-top:10px}
.tr-group{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tr-group select{min-height:36px;padding:4px 8px}
.tr-right{margin-left:auto}
.tr-toggle{display:inline-flex;align-items:center;gap:7px}
.tr-toggle .tr-dot{width:9px;height:9px;border-radius:50%;background:var(--quiet)}
.tr-toggle.on{border-color:var(--ok);color:var(--ok-ink);background:var(--ok-bg)}
.tr-toggle.on .tr-dot{background:var(--ok)}
.tr-note{margin:10px 0 0;padding:8px 12px;border-radius:8px;background:var(--info-bg);border:1px solid var(--info-line)}
.tr-note.attn{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn-ink)}
.tr-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:14px}
.tr-grid .panel{margin-bottom:0}
#view-trading .tr-grid{margin-bottom:14px}
.tr-scroll{max-height:380px;overflow:auto}
.tr-table td,.tr-table th{padding:7px 10px}
.tr-chip{display:inline-block;font-size:12px;font-weight:600;padding:1px 8px;border-radius:999px;white-space:nowrap;margin-left:4px;border:1px solid var(--line2);color:var(--muted)}
.tr-chip.ok{color:var(--ok-ink);background:var(--ok-bg);border-color:transparent}
.tr-chip.load{color:var(--load);border-color:var(--load)}
.tr-chip.attn{color:var(--warn-ink);background:var(--warn-bg);border-color:var(--warn-line)}
.tr-chip.err{color:var(--err-ink);background:var(--err-bg);border-color:var(--err-line)}
.btn.small{min-height:28px;padding:2px 10px;font-size:12px}
.tr-intent{padding:9px 0;border-bottom:1px solid var(--line)}
.tr-intent:last-child{border-bottom:0}
.tr-intent-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tr-orders{margin:6px 0 0 18px;padding:0;font-size:13px;line-height:1.7}
.tr-writes summary,#view-trading details>summary{cursor:pointer;list-style-position:inside}
#view-trading details>summary h2{display:inline;margin:0}
.tr-sheet-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:8px}
.tr-sheet-head h2{margin:0}
.tr-sheet-head input{margin-left:auto;min-height:36px;padding:4px 10px;width:160px}
.tr-sheet-wrap{overflow:auto;max-height:70vh;border:1px solid var(--line2);border-radius:10px}
.tr-sheet{font-size:13px;min-width:1100px}
.tr-sheet th{top:0}
.tr-sheet td{padding:5px 10px;font-variant-numeric:tabular-nums}
.tr-block-head td{background:var(--card2);border-top:2px solid var(--line2)}
.tr-block-head td .tr-scen{margin-left:12px;min-height:28px;padding:2px 6px;font-size:12px}
.tr-sheet tr.tr-changed td{background:var(--flash)}
.tr-sheet tr.tr-repl td:nth-child(3){color:var(--attn)}
.tr-sheet tr.dim td{color:var(--faint)}
.tr-events{margin:8px 0 0;padding:0;list-style:none;font-size:13px;line-height:1.7;max-height:320px;overflow:auto}
.tr-events .lvl-warn{color:var(--attn)}
.tr-events .lvl-error{color:var(--err)}
@media (max-width:900px){.tr-grid{grid-template-columns:1fr}.tr-right{margin-left:0}}
.tr-scroll .iv-table th{top:0}
body[data-view="trading"] #ibkr-bar{display:none}
