/* 拆分自 static/index.html，勿直接编辑此处；修改请回 index.html 结构后重新拆分 */
  @font-face{font-family:'JetBrains Mono';src:local('JetBrains Mono'),local('Consolas'),local('Courier New');font-display:swap}


/* ── Light theme (Claude-like background) ── */
:root{
  --bg:#f6f5f2;
  --bg2:#efeee9;
  --bg3:#e7e5df;
  --surface:#ffffff;
  --surface2:#faf9f6;
  --border:#e2e0d9;
  --border2:#d5d2ca;
  --text:#1f1e1c;
  --text2:#4a4843;
  --muted:#8c887f;
  --muted2:#a7a39a;
  --gold:#b8860b;
  --gold2:#d4a017;
  --gold-bg:rgba(184,134,11,.07);
  --gold-bdr:rgba(184,134,11,.22);
  --green:#166534;
  --green-bg:rgba(22,101,52,.07);
  --green-bdr:rgba(22,101,52,.22);
  --red:#991b1b;
  --red-bg:rgba(153,27,27,.07);
  --red-bdr:rgba(153,27,27,.22);
  --yellow:#854d0e;
  --user-bubble:#b8860b;
  --ai-bubble:#f1efe9;
  --shadow:0 1px 3px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.05);
  --shadow-lg:0 4px 24px rgba(0,0,0,.12);
  --shadow-up:0 -4px 24px rgba(0,0,0,.12);
  --r:8px;
  --sidebar-w:240px;
  --safe-top:env(safe-area-inset-top,0px);
  --safe-bottom:env(safe-area-inset-bottom,0px);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{height:100%;height:-webkit-fill-available;overflow:hidden;overscroll-behavior:none;-webkit-text-size-adjust:100%}
body{height:100%;height:100dvh;min-height:-webkit-fill-available;overflow:hidden;overscroll-behavior:none;-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--text);font-family:'PingFang SC','Microsoft YaHei','Hiragino Sans GB','Noto Sans CJK SC',sans-serif;font-size:14px;width:100%}
.layout{display:flex;flex-direction:column;height:100%;height:100dvh;overflow:hidden}

/* Fixed top: header + tabs */
.app-top{flex-shrink:0;z-index:200;background:var(--surface);box-shadow:0 1px 4px rgba(0,0,0,.06);padding-top:var(--safe-top)}
.header{background:var(--surface);border-bottom:1px solid var(--border)}
.hinner{max-width:1440px;margin:0 auto;padding:0 16px;display:flex;align-items:center;gap:10px;min-height:52px;height:52px}
.hbrand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.logo{font-size:17px;font-weight:900;color:var(--gold);letter-spacing:-.5px;white-space:nowrap}
.badge{display:flex;align-items:center;gap:5px;font-size:12px;padding:3px 10px;border-radius:20px;background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr);font-family:'JetBrains Mono',monospace}
.badge.off{background:var(--bg2);color:var(--muted);border-color:var(--border)}
.dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}
.dot.pulse{animation:pulse 2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
.hprice{display:none}
.spacer{flex:1}
.hbtns{display:flex;gap:8px;align-items:center}

/* Buttons */
.btn{padding:6px 14px;border-radius:6px;border:1px solid transparent;cursor:pointer;font-size:13px;font-weight:700;font-family:'PingFang SC','Microsoft YaHei',sans-serif;transition:all .15s;white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
.btn-gold{background:var(--gold);color:#fff;border-color:var(--gold)}.btn-gold:hover{background:var(--gold2)}
.btn-ghost{background:transparent;color:var(--text2);border-color:var(--border2)}.btn-ghost:hover{background:var(--bg2)}
.btn-green{background:var(--green-bg);color:var(--green);border-color:var(--green-bdr)}.btn-green:hover{background:rgba(22,101,52,.13)}
.btn-red{background:var(--red-bg);color:var(--red);border-color:var(--red-bdr)}.btn-red:hover{background:rgba(153,27,27,.13)}
.btn-sm{padding:4px 11px;font-size:12px}.btn-xs{padding:2px 8px;font-size:11px}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* Tabs */
.tabs{background:var(--surface);border-bottom:2px solid var(--border);overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;touch-action:pan-x;scrollbar-width:none;-ms-overflow-style:none}
.tabs::-webkit-scrollbar{display:none}
.tabsinner{max-width:1440px;margin:0 auto;padding:0 16px;display:flex;align-items:stretch;min-height:44px}
.tab{display:flex;align-items:center;padding:11px 16px;font-size:13px;font-weight:700;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;transition:color .15s,border-color .15s;flex-shrink:0}
.tab:hover{color:var(--text2)}.tab.active{color:var(--gold);border-bottom-color:var(--gold)}

/* Chat panel — 纯色布局，避免 backdrop-filter / 半透明导致输入法卡顿 */
.gr-chat-overlay{position:fixed;inset:0;z-index:2500;display:flex;align-items:center;justify-content:center;background:var(--bg);padding:max(8px,env(safe-area-inset-top)) max(8px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left));overflow:hidden;overscroll-behavior:contain}
.gr-chat-overlay.hidden{display:none}
body.chat-open{overflow:hidden}
.gr-chat-shell{width:min(96vw,1152px);height:min(90dvh,90vh);max-width:96vw;max-height:90dvh;min-width:0;min-height:0;background:var(--surface);border:1px solid var(--border2);border-radius:var(--r);display:flex;overflow:hidden;flex-shrink:0}
.gr-chat-sidebar{width:260px;flex:0 0 260px;background:var(--surface2);display:flex;flex-direction:column;min-width:0;transition:flex-basis .18s,width .18s}
.gr-chat-sidebar.collapsed{width:0;flex-basis:0;border-right:none;overflow:hidden}
.gr-chat-side-head{height:50px;display:flex;align-items:center;gap:8px;padding:0 10px;flex-shrink:0}
.gr-chat-side-close{display:none;margin-left:auto}
.gr-chat-mark{width:26px;height:26px;border-radius:7px;background:var(--gold);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:900;flex-shrink:0}
.gr-chat-brand{font-size:15px;font-weight:900;color:var(--gold);min-width:0;white-space:nowrap}
.gr-chat-version{font-size:11px;color:var(--muted);border:1px solid var(--border);background:var(--bg2);border-radius:999px;padding:2px 7px;margin-left:auto}
.gr-chat-icon{width:30px;height:30px;border:none;border-radius:6px;background:var(--surface);color:var(--muted);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.gr-chat-icon:hover{background:var(--bg2);color:var(--text)}
.gr-chat-sidebar.collapsed .gr-chat-side-head,.gr-chat-sidebar.collapsed .gr-chat-brand,.gr-chat-sidebar.collapsed .gr-chat-version,.gr-chat-sidebar.collapsed .gr-chat-actions,.gr-chat-sidebar.collapsed .gr-chat-section,.gr-chat-sidebar.collapsed .gr-chat-sessions{display:none}
.gr-chat-actions{padding:10px;display:flex;flex-shrink:0}
.gr-chat-new{width:100%;height:34px;border:1px solid var(--border2);background:var(--surface);color:var(--text2);border-radius:6px;display:flex;align-items:center;justify-content:center;gap:7px;font-weight:800;cursor:pointer}
.gr-chat-new:hover{background:var(--bg2);color:var(--gold)}
.gr-chat-section{font-size:11px;font-weight:900;letter-spacing:.5px;text-transform:uppercase;color:var(--muted);padding:2px 12px 7px}
.gr-chat-sessions{flex:1;min-height:0;overflow-y:auto;padding:0 8px 10px}
.gr-chat-session{height:34px;display:flex;align-items:center;gap:7px;padding:0 7px;border-radius:6px;cursor:pointer;color:var(--text2);min-width:0}
.gr-chat-session:hover{background:var(--bg2)}
.gr-chat-session.active{background:#faf6ea;color:var(--gold)}
.gr-chat-session .session-pinned-mark,.gr-chat-session .session-lock-mark{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;color:var(--muted);opacity:.5;flex-shrink:0}
.gr-chat-session .session-pinned-mark svg,.gr-chat-session .session-lock-mark svg{width:12px;height:12px;display:block}
.gr-chat-session:hover .session-pinned-mark{display:none}
.gr-chat-session-trail{display:flex;align-items:center;gap:3px;flex-shrink:0;margin-left:6px}
.gr-chat-session-title{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}
.gr-chat-session-acts{display:none;gap:2px;flex-shrink:0;align-items:center}
.gr-chat-session:hover .gr-chat-session-acts{display:flex}
.gr-chat-session-acts button{width:22px;height:22px;border:none;border-radius:5px;background:var(--surface2);color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0}
.gr-chat-session-acts button svg{width:12px;height:12px;display:block}
.gr-chat-session-acts button:hover{background:var(--surface);color:var(--text)}
.gr-chat-main{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--surface);position:relative}
.gr-chat-head{height:50px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 14px;flex-shrink:0}
.gr-chat-title-wrap{display:flex;align-items:center;gap:8px;min-width:0}
.gr-chat-title{font-size:15px;font-weight:900;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gr-chat-title-edit svg,.gr-chat-icon svg{width:16px;height:16px;stroke:currentColor}
.gr-chat-close{font-size:22px;line-height:1;width:36px;height:36px;color:var(--text);background:var(--bg2);border:1px solid var(--border2);border-radius:8px;flex-shrink:0;z-index:3}
.gr-chat-messages{flex:1;min-height:0;overflow-y:auto;padding:16px clamp(14px,3vw,22px);background:var(--surface);position:relative;-webkit-overflow-scrolling:touch}
.gr-chat-empty{height:100%;display:none;align-items:center;justify-content:center;text-align:center;color:var(--muted);font-size:14px}
.gr-chat-empty.show{display:flex}
.gr-chat-msg{display:flex;margin:0 0 18px}
.gr-chat-msg.user{justify-content:flex-end}
.gr-chat-msg.assistant{justify-content:flex-start}
.gr-chat-msg-body{max-width:min(760px,78%);min-width:0}
.gr-chat-msg-head{font-size:11px;font-weight:900;color:var(--muted);margin:0 0 5px;padding:0 2px}
.gr-chat-msg.user .gr-chat-msg-head{text-align:right}
.gr-chat-bubble{border-radius:8px;padding:10px 12px;line-height:1.72;font-size:14px;word-break:break-word;overflow-wrap:anywhere}
.gr-chat-msg.user .gr-chat-bubble{background:var(--gold);color:#fff;white-space:pre-wrap}
.gr-chat-msg.assistant .gr-chat-bubble{background:var(--ai-bubble);color:var(--text);border:1px solid var(--border)}
.gr-chat-bubble p{margin:0 0 8px}.gr-chat-bubble p:last-child{margin-bottom:0}
.gr-chat-bubble h1,.gr-chat-bubble h2,.gr-chat-bubble h3,.gr-chat-bubble h4,.gr-chat-bubble h5,.gr-chat-bubble h6{margin:10px 0 6px;color:var(--text);line-height:1.45;font-weight:900}
.gr-chat-bubble h1{font-size:16px}.gr-chat-bubble h2{font-size:15px}.gr-chat-bubble h3{font-size:14px}
.gr-chat-bubble h4{font-size:14px}.gr-chat-bubble h5{font-size:13px}.gr-chat-bubble h6{font-size:12px;color:var(--text2)}
.gr-chat-bubble ul,.gr-chat-bubble ol{margin:6px 0 8px 20px;padding:0}.gr-chat-bubble li{margin:3px 0}
.gr-chat-bubble .md-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;margin:8px 0}
.gr-chat-bubble table{border-collapse:collapse;width:100%;min-width:240px;font-size:12.5px}
.gr-chat-bubble th,.gr-chat-bubble td{border:1px solid var(--border);padding:6px 8px;text-align:left;vertical-align:top;word-break:break-word}
.gr-chat-bubble th{background:var(--bg2);font-weight:800}
.gr-chat-bubble hr{border:none;border-top:1px solid var(--border);margin:10px 0}
.gr-chat-bubble blockquote{border-left:3px solid var(--gold);margin:8px 0;padding:4px 0 4px 10px;color:var(--text2);background:#faf6ea}
.gr-chat-bubble pre{background:#1f1e1c;color:#f7f4ea;border-radius:7px;padding:10px;overflow:auto;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.55;margin:8px 0}
.gr-chat-bubble code{font-family:'JetBrains Mono',monospace;font-size:.92em;background:#eceae4;border-radius:4px;padding:1px 4px}
.gr-chat-bubble pre code{background:#1f1e1c;padding:0;color:inherit}
.gr-chat-meta{display:flex;align-items:center;gap:8px;margin-top:5px;color:var(--muted);font-size:11px}
.gr-chat-msg.user .gr-chat-meta{justify-content:flex-end}
.gr-chat-msg-actions{display:flex;gap:3px;visibility:hidden}
.gr-chat-msg:hover .gr-chat-msg-actions{visibility:visible}
.gr-chat-msg-actions button{width:24px;height:24px;border:none;border-radius:5px;background:var(--bg2);color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.gr-chat-msg-actions button:hover{background:var(--bg2);color:var(--text)}
.gr-chat-msg-actions svg{width:14px;height:14px;stroke:currentColor}
.gr-chat-input{padding:10px clamp(14px,3vw,22px) calc(12px + env(safe-area-inset-bottom,0px));background:var(--surface);flex-shrink:0;border-top:1px solid var(--border)}
.gr-chat-input-box{background:var(--surface);border:1px solid var(--border2);border-radius:8px;padding:8px}
.gr-chat-input-box:focus-within{border-color:var(--gold)}
.gr-chat-input textarea{width:100%;max-height:150px;min-height:44px;resize:none;border:none;background:var(--surface);color:var(--text);outline:none;font:inherit;line-height:1.55;padding:2px 3px}
.gr-chat-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:4px}
.gr-chat-count{font-size:11px;color:var(--muted);margin-right:auto}
.gr-chat-model{height:34px;min-width:210px;max-width:260px;border:1px solid var(--border);border-radius:7px;background:var(--bg2);color:var(--text2);padding:0 10px;font-size:12px;line-height:34px;display:inline-flex;align-items:center;justify-content:space-between;gap:8px;white-space:nowrap;overflow:hidden;cursor:pointer}
.gr-chat-model:hover:not(:disabled){background:var(--bg3);border-color:var(--gold-bdr);color:var(--text)}
.gr-chat-model:disabled{opacity:.5;cursor:not-allowed}
.gr-chat-model-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
.gr-chat-model-arrow{font-size:9px;flex-shrink:0;color:var(--muted)}
.gr-model-picker{display:none;position:fixed;z-index:2605;min-width:260px;max-width:min(380px,calc(100vw - 24px));max-height:min(380px,60dvh);overflow-y:auto;padding:7px 0;background:rgba(255,255,255,.98);border:1px solid var(--border);border-radius:8px;box-shadow:0 16px 40px rgba(0,0,0,.14)}
.gr-model-picker.open{display:block}
.gr-model-group{padding:8px 13px 4px;font-size:11px;font-weight:900;color:var(--muted);text-transform:uppercase;letter-spacing:.35px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gr-model-item{padding:9px 13px;font-size:13px;color:var(--text2);display:flex;align-items:center;gap:8px;cursor:pointer;transition:background .15s,color .15s;min-width:0}
.gr-model-item:hover{background:var(--bg2);color:var(--text)}
.gr-model-item.active{background:#faf6ea;color:var(--gold);font-weight:800}
.gr-model-check{width:14px;flex-shrink:0;color:currentColor}
.gr-model-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gr-chat-send{width:34px;height:34px;border:none;border-radius:7px;background:var(--gold);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.gr-chat-send:hover:not(:disabled){background:var(--gold2)}
.gr-chat-send:disabled{opacity:.45;cursor:not-allowed}
.gr-chat-send.streaming{background:#3c3c3c}
.gr-chat-send svg{width:17px;height:17px;stroke:currentColor}
.gr-chat-error{color:var(--red)}
.typing-cursor::after{content:'▋';margin-left:2px;animation:pulse 1s infinite;color:var(--gold)}
.ask-ai-btn{width:28px;height:28px;border:none;border-radius:7px;background:var(--surface);color:var(--gold);border:1px solid var(--gold);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.ask-ai-btn:hover{background:var(--gold);color:#fff}
.ask-ai-btn svg{width:17px;height:17px;stroke:currentColor}
.ask-ai-wrap{display:flex;align-items:flex-start;gap:8px}
.ask-ai-wrap .ask-ai-content{flex:1;min-width:0}
.chat-fab{position:fixed;right:20px;bottom:20px;z-index:2100;width:34px;height:34px;border:none;border-radius:50%;background:#22c55e;border:2px solid #16a34a;display:none;align-items:center;justify-content:center;cursor:grab;touch-action:none}
.chat-fab.show{display:flex}
body.chat-open .chat-fab{visibility:hidden;pointer-events:none}
.chat-fab.dragging{cursor:grabbing;transition:none}
.chat-fab svg{width:25px;height:25px}
.chat-fab:hover{background:#16a34a}
@media(max-width:760px){
  .gr-chat-overlay{padding:5px;align-items:stretch;justify-content:stretch}
  .gr-chat-shell{width:100%;height:100%;max-width:none;max-height:none;border-radius:10px}
  .gr-chat-sidebar{position:absolute;inset:0 auto 0 0;z-index:4;width:min(72vw,260px);flex-basis:min(72vw,260px);border-right:1px solid var(--border2);transform:translateX(-100%);transition:transform .18s}
  .gr-chat-sidebar.mobile-open{transform:translateX(0)}
  .gr-chat-sidebar.collapsed{transform:translateX(-100%);width:min(72vw,260px);flex-basis:min(72vw,260px)}
  .gr-chat-sidebar.collapsed .gr-chat-brand,.gr-chat-sidebar.collapsed .gr-chat-version,.gr-chat-sidebar.collapsed .gr-chat-actions,.gr-chat-sidebar.collapsed .gr-chat-section,.gr-chat-sidebar.collapsed .gr-chat-sessions{display:flex}
  .gr-chat-sidebar.collapsed .gr-chat-sessions{display:block}
  .gr-chat-msg-body{max-width:88%}
  .gr-chat-messages{padding:12px 14px}
  .gr-chat-input{padding:8px 14px calc(10px + env(safe-area-inset-bottom,0px))}
  .gr-chat-head{padding:0 10px}
  .gr-chat-model{display:inline-flex;min-width:0;width:min(58vw,230px);max-width:230px}
  .gr-chat-side-close{display:inline-flex;font-size:22px;line-height:1;width:36px;height:36px;color:var(--text);background:var(--bg2);border:1px solid var(--border2);border-radius:8px}
  .chat-fab{right:max(16px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));width:34px;height:34px}
}

/* Content */
.content{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:12px 0 calc(12px + var(--safe-bottom));background:var(--bg2)}
.ci{max-width:1440px;margin:0 auto;padding:0 16px;min-width:0;width:100%;position:relative;min-height:100%}
.panel{display:none;min-width:0;max-width:100%;overflow-x:hidden}.panel.active{display:block}

/* Cards */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px;box-shadow:var(--shadow)}
.card-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin-bottom:10px}
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.card-head .card-title{margin-bottom:0}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.g3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.g2{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.mb12{margin-bottom:12px}

/* Price */
.price-big{font-size:40px;font-weight:900;color:var(--gold);letter-spacing:-2px;line-height:1;font-family:'JetBrains Mono',monospace}
.price-chg{font-size:13px;margin-top:5px;font-family:'JetBrains Mono',monospace}
.price-chg.up{color:var(--red)}.price-chg.down{color:var(--green)}
.price-meta{font-size:11px;color:var(--muted);margin-top:8px;line-height:1.9}

/* Signal */
.sig-action{font-size:16px;font-weight:800;line-height:1.5;color:var(--text);background:var(--gold-bg);border-left:4px solid var(--gold);border-radius:6px;padding:10px 12px;margin:0 0 10px;text-align:left;letter-spacing:.2px;word-break:break-word;overflow-wrap:anywhere;max-width:100%}
.sig-action.empty{color:var(--muted);font-weight:600;background:var(--bg2);border-left-color:var(--border2)}
.sig-divider{height:1px;background:var(--border);margin:8px 0}
.sig-meta-row{display:flex;align-items:center;justify-content:flex-start;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.sig-label{font-size:28px;font-weight:900;letter-spacing:2px;font-family:'JetBrains Mono',monospace;line-height:1}
.sig-label.BUY{color:var(--red)}.sig-label.SELL{color:var(--green)}.sig-label.HOLD{color:var(--yellow)}
.conf-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:11px;font-weight:700;font-family:'JetBrains Mono',monospace}
.conf-badge.HIGH{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr)}
.conf-badge.MEDIUM{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-bdr)}
.conf-badge.LOW{background:var(--bg2);color:var(--muted);border:1px solid var(--border)}
.sig-time{font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace}
.sig-levels{display:flex;justify-content:flex-start;gap:8px;flex-wrap:wrap;margin:0;font-size:12px;font-family:'JetBrains Mono',monospace}
.sig-levels .lv{padding:4px 11px;border-radius:5px;background:var(--bg2);border:1px solid var(--border);color:var(--text2)}
.sig-levels .lv b{color:var(--gold);margin-left:4px}
.sig-reason{font-size:12px;line-height:1.7;color:var(--muted);margin-bottom:4px;padding:0 1px;word-break:break-word;overflow-wrap:anywhere;max-width:100%}
.sig-risk{font-size:11.5px;line-height:1.6;color:var(--red);padding:5px 9px;background:var(--red-bg);border:1px solid var(--red-bdr);border-radius:5px;margin-bottom:4px;word-break:break-word;overflow-wrap:anywhere;max-width:100%}
.sig-risk:empty{display:none}
.sig-model{font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace;text-align:left;opacity:.8;margin-top:6px;word-break:break-word;overflow-wrap:anywhere;max-width:100%;min-width:0;flex:1}

/* Macro / external analysis card */
.macro-summary{font-size:13px;line-height:1.75;color:var(--text);background:var(--surface2);border-left:4px solid var(--gold2);border-radius:6px;padding:10px 13px;margin-bottom:12px;font-weight:600;word-break:break-word;overflow-wrap:anywhere;max-width:100%}
.macro-summary.empty{color:var(--muted);font-weight:500;background:var(--bg2);border-left-color:var(--border2)}
.macro-factors{display:flex;flex-direction:column;gap:7px;margin-bottom:12px}
.macro-factor{display:flex;align-items:center;gap:9px;padding:8px 11px;background:var(--bg2);border:1px solid var(--border);border-radius:7px;font-size:12.5px;line-height:1.6}
.macro-factor .mf-impact{flex-shrink:0;font-size:10.5px;font-weight:800;padding:2px 8px;border-radius:10px;letter-spacing:.4px;font-family:'JetBrains Mono',monospace;line-height:1.5;min-width:32px;text-align:center}
.macro-factor .mf-impact.利多{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr)}
.macro-factor .mf-impact.利空{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr)}
.macro-factor .mf-impact.中性{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-bdr)}
.macro-factor .mf-impact.ev-tag{font-size:10px;letter-spacing:.5px;min-width:36px}
.macro-factor .mf-impact.ev-tag.高{background:rgba(220,53,69,.12);color:#dc3545;border:1px solid rgba(220,53,69,.3)}
.macro-factor .mf-impact.ev-tag.中{background:rgba(245,158,11,.12);color:#f59e0b;border:1px solid rgba(245,158,11,.3)}
.macro-factor .mf-impact.ev-tag.低{background:rgba(107,114,128,.12);color:#6b7280;border:1px solid rgba(107,114,128,.3)}
.macro-factor .mf-text{flex:1;min-width:0;color:var(--text2);word-break:break-word;overflow-wrap:anywhere}
.macro-factor .mf-name{word-break:break-word;overflow-wrap:anywhere}
.macro-factor .mf-name{font-weight:800;color:var(--text);margin-right:6px}
.macro-empty{font-size:12px;color:var(--muted);padding:10px 12px;background:var(--bg2);border:1px dashed var(--border2);border-radius:7px;text-align:center;margin-bottom:12px}
.outlook-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:6px;margin-bottom:4px}
.outlook-cell{padding:9px 12px;background:var(--bg2);border:1px solid var(--border);border-radius:7px;font-size:12.5px;line-height:1.65}
.outlook-cell .ol-label{display:block;font-size:10px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:3px;font-family:'JetBrains Mono',monospace}
.outlook-cell .ol-text{color:var(--text2);word-break:break-word;overflow-wrap:anywhere;display:block}
.events-list{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.event-item{display:flex;align-items:center;gap:9px;padding:7px 11px;background:var(--surface2);border:1px solid var(--border);border-radius:7px;font-size:12px}
.event-item .ev-impact{flex-shrink:0;font-size:10px;font-weight:800;padding:2px 7px;border-radius:8px;font-family:'JetBrains Mono',monospace;min-width:24px;text-align:center}
.event-item .ev-impact.高{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr)}
.event-item .ev-impact.中{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-bdr)}
.event-item .ev-impact.低{background:var(--bg2);color:var(--muted);border:1px solid var(--border)}
.event-item .ev-name{flex:1;color:var(--text);font-weight:600}
.event-item .ev-when{color:var(--muted);font-size:11px;font-family:'JetBrains Mono',monospace}
.sec-mini-title{font-size:11px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin:10px 0 6px;display:flex;align-items:center;gap:6px}
.sec-mini-title:first-child{margin-top:0}
.sec-mini-title::before{content:'';display:inline-block;width:3px;height:11px;background:var(--gold);border-radius:2px}

/* 指标分析 + 外部分析：等宽双列 */
.guide-row{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;align-items:stretch;min-width:0;max-width:100%}
.guide-row > .card{display:flex;flex-direction:column;min-width:0;overflow:hidden;max-width:100%}
@media(max-width:900px){.guide-row{grid-template-columns:1fr}}

/* Analysis card headers */
.analysis-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:10px;flex-wrap:wrap;min-width:0;max-width:100%}
.analysis-card-head .head-title{font-size:12px;font-weight:700;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;flex:1 1 auto;min-width:0}
.analysis-card-head .head-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;max-width:100%;min-width:0;justify-content:flex-end;flex:1 1 auto}
.analysis-card-head .head-actions .sig-label,.analysis-card-head .head-actions .conf-badge{flex-shrink:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.analysis-card-head .head-actions .btn{flex-shrink:0;white-space:nowrap}

/* Trading guidance card: distribute content vertically to fill height */
.guide-card-body{flex:1;display:flex;flex-direction:column;gap:8px;min-width:0;max-width:100%;overflow:hidden}
.guide-card-body .sig-action{margin-bottom:0}
.guide-levels-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:2px 0}
.guide-levels-grid .lv-cell{display:flex;align-items:baseline;justify-content:space-between;padding:7px 11px;border-radius:7px;background:var(--bg2);border:1px solid var(--border);font-family:'JetBrains Mono',monospace}
.guide-levels-grid .lv-cell .lv-tag{font-size:11px;color:var(--muted);font-weight:700;letter-spacing:.4px}
.guide-levels-grid .lv-cell .lv-num{font-size:14px;font-weight:900;color:var(--text)}
.guide-levels-grid .lv-cell.lv-key{background:var(--gold-bg);border-color:var(--gold-bdr)}
.guide-levels-grid .lv-cell.lv-key .lv-num{color:var(--gold)}
.guide-levels-grid .lv-cell.lv-target .lv-num{color:var(--red)}
.guide-levels-grid .lv-cell.lv-support .lv-num{color:var(--green)}
.guide-levels-grid .lv-cell.lv-resistance .lv-num{color:var(--red)}
.guide-spacer{flex:1;min-height:4px}
.guide-footer{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;flex-wrap:wrap;padding-top:8px;border-top:1px solid var(--border);margin-top:auto;min-width:0;max-width:100%}
.guide-footer .sig-time{flex-shrink:0;word-break:break-word;overflow-wrap:anywhere}

/* Compact metric row: increase padding for breathing room */
.metric-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.metric-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px 16px 14px;box-shadow:var(--shadow);position:relative;overflow:hidden;min-height:118px;display:flex;flex-direction:column}
.metric-card .m-label{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin-bottom:8px;display:flex;align-items:center;gap:7px;min-width:0}
.metric-card .m-label > span:not(.m-icon):not(.btn){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.metric-card .m-icon{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border-radius:5px;background:var(--gold-bg);color:var(--gold);font-size:12px;font-weight:800;flex-shrink:0}
.metric-card .m-value{font-size:24px;font-weight:900;font-family:'JetBrains Mono',monospace;color:var(--text);line-height:1.15;letter-spacing:-.5px}
.metric-card .m-value.up{color:var(--red)}.metric-card .m-value.down{color:var(--green)}
.metric-card .m-value.gold{color:var(--gold)}
.metric-card .m-sub{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.55;font-family:'JetBrains Mono',monospace}
.metric-card .m-bar{display:flex;gap:3px;margin-top:auto;padding-top:8px}
.metric-card .m-bar span{flex:1;height:4px;border-radius:2px;background:var(--border)}
.metric-card .m-bar span.on-low{background:var(--green)}
.metric-card .m-bar span.on-mid{background:var(--gold)}
.metric-card .m-bar span.on-high{background:var(--red)}
.metric-card .m-range{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:8px;font-size:11px;font-family:'JetBrains Mono',monospace;color:var(--muted)}
.metric-card .m-range .rng-bar{position:relative;flex:1;height:5px;background:var(--bg3);border-radius:3px;margin:0 9px;overflow:visible}
.metric-card .m-range .rng-fill{position:absolute;top:0;height:5px;background:linear-gradient(90deg,var(--green),var(--gold),var(--red));border-radius:3px}
.metric-card .m-range .rng-now{position:absolute;top:-3px;width:3px;height:11px;background:var(--gold);border-radius:1px;transform:translateX(-1px);box-shadow:0 0 0 2px var(--surface)}
/* 顶部指标行紧凑模式：压缩高度、隐藏次要信息行 */
.metric-row.compact .metric-card{padding:9px 12px 8px;min-height:0}
.metric-row.compact .m-label{margin-bottom:4px}
.metric-row.compact .m-value{font-size:17px}
.metric-row.compact .m-sub{margin-top:2px;font-size:10.5px}
.metric-row.compact .m-bar{display:none}
.metric-row.compact #priceMeta{display:none}
/* 浮动盈亏卡：悬停/点击展示已实现盈亏 tooltip @author Grok @date 2026-07-20 */
.metric-card.has-tip{cursor:help}
.metric-card.has-tip .m-tip{
  position:absolute;left:50%;bottom:calc(100% - 4px);transform:translateX(-50%) translateY(4px);
  min-width:148px;max-width:min(240px,90vw);padding:8px 11px;border-radius:8px;
  background:#1f1e1c;color:#f7f4ea;font-size:11.5px;line-height:1.55;font-family:'JetBrains Mono',monospace;
  box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .15s,transform .15s,visibility .15s;z-index:20;text-align:center;white-space:normal;
}
.metric-card.has-tip .m-tip::after{
  content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);
  border:6px solid transparent;border-top-color:#1f1e1c;
}
.metric-card.has-tip .m-tip b{font-weight:900}
.metric-card.has-tip .m-tip .tip-up{color:#f87171}.metric-card.has-tip .m-tip .tip-down{color:#4ade80}.metric-card.has-tip .m-tip .tip-zero{color:#a7a39a}
.metric-card.has-tip:hover .m-tip,
.metric-card.has-tip:focus-within .m-tip,
.metric-card.has-tip.tip-show .m-tip{
  opacity:1;visibility:visible;transform:translateX(-50%) translateY(0);pointer-events:auto;
}
/* 分析卡"展开详情"折叠开关 */
.detail-toggle{align-self:flex-start;background:none;border:1px dashed var(--border);color:var(--muted);font-size:11px;border-radius:6px;padding:3px 10px;cursor:pointer;margin:8px 0 2px}
.detail-toggle:hover{color:var(--gold);border-color:var(--gold)}
@media(max-width:768px){.metric-row{grid-template-columns:repeat(2,1fr)}.metric-card{min-height:106px}}
@media(max-width:480px){.metric-row{grid-template-columns:repeat(2,1fr);gap:8px}.metric-card{padding:12px 12px 10px;min-height:96px}.metric-card .m-value{font-size:20px}}

/* Stats */
.sv{font-size:22px;font-weight:900;margin-top:5px;font-family:'JetBrains Mono',monospace}
.sv.g{color:var(--green)}.sv.r{color:var(--red)}.sv.y{color:var(--yellow)}
.sv-sub{font-size:11px;color:var(--muted);margin-top:2px}

/* Chart */
.chart-wrap{position:relative;height:180px}
.chart-wrap-tall{height:220px}
.chart-row{margin-bottom:0}
.period-tabs{display:flex;gap:4px}
.ptab{padding:4px 12px;border-radius:5px;font-size:12px;cursor:pointer;border:1px solid var(--border2);background:transparent;color:var(--muted);transition:all .15s;font-weight:700}
.ptab.active{background:var(--gold);color:#fff;border-color:var(--gold)}
.day-keypoints{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.day-keypoints.hidden{display:none}
.day-kp{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;background:var(--bg2);border:1px solid var(--border);font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--text2)}
.day-kp-tag{color:var(--muted);font-weight:700}
.day-kp-val{color:var(--gold);font-weight:800}
.chart-label-chip{padding:2px 7px;border-radius:999px}

/* Table */
.tbl-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:12px}
th{text-align:left;padding:8px 10px;color:var(--muted);font-weight:700;border-bottom:2px solid var(--border);font-size:11px;white-space:nowrap;background:var(--bg2)}
td{padding:8px 10px;border-bottom:1px solid var(--border)}
tr:last-child td{border-bottom:none}
tr:hover td{background:var(--bg2)}
.chip{display:inline-block;padding:1px 8px;border-radius:4px;font-weight:700;font-size:11px;font-family:'JetBrains Mono',monospace}
.chip.BUY{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr)}
.chip.SELL{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr)}
.chip.HOLD{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-bdr)}
.chip.SUCCESS{color:var(--green)}.chip.FAILED{color:var(--red)}.chip.SKIPPED{color:var(--muted)}
.chip.push-Bark测试{background:#f3f0ff;color:#6d28d9;border:1px solid #c4b5fd}
.chip.push-手动分析{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr)}
.chip.push-自动交易建议{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-bdr)}
.chip.push-系统告警{background:#fff0e6;color:#c05800;border:1px solid #fdb97d}
.chip.push-日间开盘,.chip.push-晚间开盘,.chip.push-晚间收盘{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr)}
.level-ERROR{color:var(--red);font-weight:700}.level-WARNING{color:var(--yellow);font-weight:700}.level-INFO{color:var(--muted)}
.mono{font-family:'JetBrains Mono',monospace}

/* Position */
.unit-sm{font-size:.58em;font-weight:800;white-space:nowrap;margin-left:.18em;letter-spacing:0}
.pnl-pos{color:var(--red)}.pnl-neg{color:var(--green)}.pnl-zero{color:var(--muted)}

/* Trade form */
.trade-form{background:var(--bg2);border:1px solid var(--border);border-radius:8px;padding:14px;margin-bottom:14px}
.trade-row{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.fi{display:flex;flex-direction:column;gap:4px;flex:1;min-width:100px}
.fi label{font-size:11px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.4px}
.fi input,.fi select{padding:8px 10px;background:var(--surface);border:1px solid var(--border2);border-radius:6px;color:var(--text);font-size:13px;outline:none;transition:border .15s;width:100%;font-family:'JetBrains Mono',monospace;height:38px;box-sizing:border-box;-webkit-appearance:none;appearance:none}
.fi select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px}
.fi input:focus,.fi select:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(184,134,11,.12)}

/* Proxy toggle rows */
.proxy-toggle-row{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:8px;cursor:pointer;transition:background .15s}
.proxy-toggle-row:hover{background:var(--bg3)}
.proxy-toggle-row input[type=checkbox]{width:18px;height:18px;margin-top:2px;flex-shrink:0;accent-color:var(--gold);cursor:pointer}
.ptog-label{display:flex;flex-direction:column;gap:2px;flex:1}
.ptog-title{font-size:13px;font-weight:700;color:var(--text2)}
.ptog-sub{font-size:11px;color:var(--muted);line-height:1.5}
.model-list{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.model-row{display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--bg2);border:1px solid var(--border);border-radius:8px}
.model-row .mono{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inline-row{display:flex;gap:8px;align-items:center}
.inline-row input{flex:1}
.provider-card{border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:10px;background:var(--surface2)}
.provider-card-head{padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--bg2);cursor:pointer}
.provider-card.collapsed .provider-card-body{display:none}
.provider-card-main{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.provider-card-main input[type=radio]{accent-color:var(--gold);width:16px;height:16px;flex-shrink:0}
.provider-card-title{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.provider-card-name{font-size:13px;font-weight:800;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.provider-card-meta{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.provider-card-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.provider-card-body{padding:12px;border-top:1px solid var(--border)}
.provider-empty{padding:16px 14px;border:1px dashed var(--border2);border-radius:10px;background:var(--surface2);font-size:12px;color:var(--muted);text-align:center}
.btn-add-provider{width:100%;padding:9px 12px;border-radius:8px;border:1.5px dashed var(--border2);background:transparent;color:var(--text2);font-size:13px;font-weight:700;cursor:pointer;transition:all .15s}
.btn-add-provider:hover{background:var(--bg2);border-color:var(--gold-bdr);color:var(--gold)}
.add-provider-form{padding:14px;border:1px solid var(--border);border-radius:10px;background:var(--surface2);margin-top:10px}
.pm-default-models{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pm-default-label{font-size:11px;color:var(--text2);margin-right:2px}
.pm-default-chip{font-size:11px;padding:3px 10px;border:1px dashed var(--gold,#c9a44a);border-radius:20px;background:var(--bg2);cursor:pointer;color:var(--gold,#c9a44a);white-space:nowrap;transition:all .15s}
.pm-default-chip:hover{border-style:solid;filter:brightness(1.08)}
.pm-default-chip.added{border-style:solid;border-color:#2f9e63;color:#2f9e63;cursor:default;opacity:.85}
.push-time-row{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:8px}
.push-time-row .ptog-label{min-width:0}
.push-time-row .time-input{width:100px;flex-shrink:0}
/* Modals */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding:20px 12px;overflow-y:auto}
.modal-overlay.hidden{display:none}
.modal{background:var(--surface);border:1px solid var(--border2);border-radius:12px;width:100%;box-shadow:var(--shadow-lg);animation:mIn .2s ease}
@keyframes mIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}
.modal-hd{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);background:var(--bg2);border-radius:12px 12px 0 0}
.modal-title{font-size:16px;font-weight:900;color:var(--gold)}
.modal-x{background:transparent;border:none;color:var(--muted);font-size:20px;cursor:pointer;padding:2px 6px;border-radius:4px;line-height:1;transition:all .15s}.modal-x:hover{background:var(--bg3);color:var(--text)}
.modal-body{padding:20px;max-height:75vh;overflow-y:auto}
.modal-ft{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;background:var(--bg2);border-radius:0 0 12px 12px}
.auth-overlay{position:fixed;inset:0;z-index:3000;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:24px 18px;padding-top:max(24px,var(--safe-top));padding-bottom:max(24px,var(--safe-bottom))}
.auth-overlay.hidden{display:none}
.auth-card{width:100%;max-width:360px;min-width:0;background:var(--surface);border-radius:16px;padding:28px 28px 24px;box-shadow:0 0 0 1px oklch(0 0 0 / .06),0 1px 2px -1px oklch(0 0 0 / .06),0 8px 24px oklch(0 0 0 / .06)}
.auth-brand{display:flex;align-items:center;gap:12px;margin-bottom:24px}
.auth-mark{width:40px;height:40px;border-radius:12px;overflow:hidden;flex-shrink:0;box-shadow:0 0 0 1px oklch(0 0 0 / .08)}
.auth-mark img{width:100%;height:100%;display:block}
.auth-brand-text{min-width:0}
.auth-title{font-size:18px;font-weight:700;color:var(--text);letter-spacing:-.02em;line-height:1.2}
.auth-sub{font-size:13px;color:var(--text2);line-height:1.7;margin-bottom:18px}
.auth-card .auth-sub{margin:4px 0 0;color:var(--text2);line-height:1.4}
.auth-card .fg{margin-bottom:16px}
.auth-card .fg label{font-size:13px;font-weight:600;color:var(--text2);text-transform:none;letter-spacing:0;margin-bottom:8px}
.auth-card .fg input{height:44px;padding:0 14px;border-radius:10px;background:var(--surface);font-family:inherit;font-size:15px;line-height:22px}
.auth-card .fg input:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(184,134,11,.12)}
.auth-submit{width:100%;height:44px;padding:0 16px;justify-content:center;border-radius:10px;font-size:15px;font-weight:600;transition-property:background-color,border-color,scale,opacity;transition-duration:150ms;transition-timing-function:cubic-bezier(.2,0,0,1)}
.auth-submit:active{scale:.96}
.auth-submit:disabled,.auth-submit.is-loading{opacity:.72;cursor:wait}
.auth-error{display:none;margin-top:10px;padding:8px 10px;border-radius:7px;background:var(--red-bg);border:1px solid var(--red-bdr);color:var(--red);font-size:12px;line-height:1.6}
.auth-error.show{display:block}
.auth-card .auth-error{margin-top:12px;border-radius:10px}
@media(max-width:480px){.auth-overlay{padding:16px;padding-top:max(16px,var(--safe-top));padding-bottom:max(16px,var(--safe-bottom))}.auth-card{padding:24px 20px 20px;border-radius:14px}.auth-mark{width:36px;height:36px;border-radius:10px}.auth-title{font-size:17px}}
@media(prefers-reduced-motion:reduce){.auth-submit{transition:none}.auth-submit:active{scale:1}}
.modal.cfg-modal{display:flex;flex-direction:column;max-height:min(90vh,900px)}
.modal.cfg-modal .modal-hd{border-bottom:none;padding-bottom:12px}
.modal.cfg-modal .modal-body{flex:1;min-height:0;overflow-y:auto;max-height:none;padding-top:18px}
.cfg-tabs{display:flex;flex-shrink:0;align-items:center;gap:4px;min-height:52px;background:var(--bg2);border-bottom:1px solid var(--border);padding:8px 20px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;touch-action:pan-x;scrollbar-width:none;-ms-overflow-style:none}
.cfg-tabs::-webkit-scrollbar{display:none}
.cfg-tab{display:flex;align-items:center;padding:8px 16px;font-size:13px;font-weight:700;color:var(--muted);cursor:pointer;border-radius:999px;transition:color .15s,background .15s;white-space:nowrap;flex-shrink:0}
.cfg-tab:hover{color:var(--text2);background:rgba(0,0,0,.035)}
.cfg-tab.active{color:#fff;background:var(--gold)}
@media(max-width:660px){.cfg-tabs{min-height:46px;padding:7px 14px}.cfg-tab{padding:7px 13px;font-size:12.5px}}
.cfg-sec{display:none}.cfg-sec.active{display:block}
.llm-provider-block{padding:14px;border:1px solid var(--border);border-radius:10px;background:var(--surface2)}
.fg{margin-bottom:14px}
.fg label{display:block;font-size:11px;color:var(--text2);margin-bottom:5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}
.fg input,.fg select{width:100%;padding:9px 12px;background:var(--bg);border:1px solid var(--border2);border-radius:7px;color:var(--text);font-size:13px;outline:none;transition:border .15s;font-family:'JetBrains Mono',monospace;height:40px;line-height:20px;box-sizing:border-box;-webkit-appearance:none;appearance:none}
.fg textarea{width:100%;padding:9px 12px;background:var(--bg);border:1px solid var(--border2);border-radius:7px;color:var(--text);font-size:13px;outline:none;transition:border .15s;font-family:'JetBrains Mono',monospace;min-height:40px;height:auto;line-height:1.5;box-sizing:border-box;resize:vertical}
.fg select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(184,134,11,.1)}
.hint{font-size:11px;color:var(--muted);margin-top:4px;line-height:1.6}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.sec-lbl{font-size:11px;font-weight:900;color:var(--gold);margin:16px 0 10px;border-bottom:1px solid var(--border);padding-bottom:5px;text-transform:uppercase;letter-spacing:.6px}
.test-result{font-size:12px;margin-top:8px;padding:7px 10px;border-radius:6px;display:none;font-family:'JetBrains Mono',monospace;line-height:1.6;word-break:break-all}
.test-result.ok{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr);display:block}
.test-result.err{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr);display:block}
.drop-zone{border:2px dashed var(--border2);border-radius:10px;padding:32px 20px;text-align:center;cursor:pointer;transition:all .2s;background:var(--bg2)}
.drop-zone:hover,.drop-zone.dragover{border-color:var(--gold);background:var(--gold-bg)}
.drop-preview{max-width:100%;max-height:200px;border-radius:8px;margin-top:12px;display:none}
.import-result{margin-top:12px;font-size:13px;padding:12px 14px;border-radius:7px;display:none;line-height:1.6;word-break:break-all}
.import-result.ok{background:var(--green-bg);color:var(--green);border:1px solid var(--green-bdr);display:block}
.import-result.err{background:var(--red-bg);color:var(--red);border:1px solid var(--red-bdr);display:block}
.import-result.running{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-bdr);display:block}
.confirm-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);backdrop-filter:blur(4px);z-index:3600;display:flex;align-items:center;justify-content:center}
.confirm-overlay.hidden{display:none}
/* 折叠组 */
.collapse-group{border:1px solid var(--border);border-radius:8px;margin-bottom:10px;overflow:hidden}
.collapse-head{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--bg2);cursor:pointer;user-select:none;transition:background .15s}
.collapse-head:hover{background:var(--bg3,var(--bg2))}
.collapse-title{font-size:12px;font-weight:900;color:var(--gold);text-transform:uppercase;letter-spacing:.6px}
.collapse-arrow{font-size:10px;color:var(--muted);transition:transform .2s}
.collapse-group.open .collapse-arrow{transform:rotate(90deg)}
.collapse-body{padding:0 14px 12px}
/* 波动规则行 */
/* @author Grok 4.6 @date 2026-08-25 */
.vol-alert-row{display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--bg2);border:1px solid var(--border);border-radius:8px;flex-wrap:wrap}
.vol-alert-row input[type=number]{width:72px;flex-shrink:0;padding:5px 8px;background:var(--bg);border:1px solid var(--border2);border-radius:6px;color:var(--text);font-size:13px;font-family:'JetBrains Mono',monospace;height:34px}
.vol-alert-row input[type=checkbox]{accent-color:var(--gold);width:16px;height:16px;flex-shrink:0}
.vol-alert-row .vol-label{font-size:12px;color:var(--text2);white-space:nowrap}
.vol-alert-row .btn-del{background:var(--bg);border:1px solid var(--border2);color:var(--muted);cursor:pointer;font-size:18px;padding:6px 10px;line-height:1;flex-shrink:0;border-radius:6px;min-width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease;margin-left:auto}
.vol-alert-row .btn-del:hover{background:var(--red-bg);border-color:var(--red-bdr);color:var(--red)}
@media(max-width:480px){
  .vol-alert-row{gap:5px;padding:8px 9px}
  .vol-alert-row input[type=number]{width:54px;padding:4px 6px;font-size:12px}
  .vol-alert-row .vol-label{font-size:11px}
  .vol-alert-row .btn-del{min-width:30px;height:30px;padding:4px 8px;font-size:16px}
}
.confirm-box{background:var(--surface);border:1px solid var(--border2);border-radius:12px;padding:28px 28px 22px;max-width:360px;width:90%;box-shadow:var(--shadow-lg);animation:mIn .15s ease;text-align:center}
.confirm-icon{font-size:40px;margin-bottom:10px}.confirm-title{font-size:18px;font-weight:900;margin-bottom:8px}
.confirm-msg{font-size:13px;color:var(--text2);line-height:1.7;margin-bottom:22px}
.confirm-btns{display:flex;gap:10px;justify-content:center}
#toast{position:fixed;left:0;right:0;bottom:0;background:#ece9d8;color:#333;border-top:1px solid #b8b5ad;padding:4px 10px;font-size:12px;line-height:1.4;opacity:0;transition:opacity .12s;pointer-events:none;z-index:9999;box-shadow:none;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#toast.show{opacity:1}
#toast.err{color:#7a0000;background:#f3e7e7;border-top-color:#d5a9a9}
#toast.ok{color:#333}
#importNotice{position:fixed;top:18px;right:18px;display:flex;flex-direction:column;gap:8px;z-index:10000;pointer-events:none}
.import-notice-close{position:absolute;top:8px;right:8px;width:22px;height:22px;border-radius:50%;border:none;background:rgba(0,0,0,.06);cursor:pointer;font-size:13px;line-height:22px;text-align:center;color:#666;pointer-events:auto;display:flex;align-items:center;justify-content:center;transition:background .15s}
.import-notice-close:hover{background:rgba(0,0,0,.14)}
.import-notice{position:relative;min-width:320px;max-width:min(420px,calc(100vw - 24px));background:linear-gradient(135deg,rgba(255,255,255,.98),rgba(250,249,246,.98));border:1px solid var(--gold-bdr);border-radius:14px;box-shadow:var(--shadow-lg);padding:14px 16px 14px 14px;opacity:0;transform:translateY(-8px) scale(.98);transition:opacity .24s,transform .24s;overflow:hidden}
.import-notice.show{opacity:1;transform:translateY(0) scale(1)}
.import-notice::before{content:'';position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,var(--gold),var(--gold2))}
.import-notice.err{border-color:var(--red-bdr);background:linear-gradient(135deg,rgba(255,250,250,.98),rgba(249,241,241,.98))}
.import-notice.err::before{background:linear-gradient(180deg,#b91c1c,#ef4444)}
.import-notice.err .import-notice-icon{background:var(--red-bg);border-color:var(--red-bdr);color:var(--red)}
.import-notice.err .import-notice-title{color:var(--red)}
.import-notice.err .import-metric .n{color:var(--red)}
.import-notice-hd{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.import-notice-icon{width:34px;height:34px;border-radius:10px;background:var(--gold-bg);border:1px solid var(--gold-bdr);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.import-notice-title{font-size:14px;font-weight:900;color:var(--gold)}
.import-notice-sub{font-size:12px;color:var(--text2);line-height:1.7}
.import-notice-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
.import-metric{background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:8px 10px;text-align:center}
.import-metric .n{display:block;font-size:18px;font-weight:900;font-family:'JetBrains Mono',monospace;color:var(--gold)}
.import-metric .l{display:block;font-size:11px;color:var(--muted);margin-top:3px}
.log-summary-btn{display:block;width:100%;padding:0;border:none;background:transparent;color:var(--text2);text-align:left;cursor:pointer;font:inherit}
.log-summary-text{display:block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-summary-btn:hover .log-summary-text{text-decoration:underline;text-decoration-color:var(--gold-bdr)}
.syslog-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.syslog-filter{width:260px;padding:6px 10px;border:1px solid var(--border2);border-radius:6px;background:var(--surface2);color:var(--text)}
.syslog-table{table-layout:fixed}
.syslog-time{width:118px;color:var(--muted);white-space:nowrap}
.syslog-level{width:96px;white-space:nowrap}
.syslog-row td{padding:6px 8px;vertical-align:top}
.syslog-level-badge{display:inline-flex;align-items:center;justify-content:center;min-width:74px;padding:3px 8px;border-radius:999px;font-size:11px;font-weight:800;font-family:'JetBrains Mono',monospace;line-height:1.2;border:1px solid var(--border);background:var(--bg2);color:var(--muted)}
.syslog-level-badge.INFO{background:var(--bg2);border-color:var(--border);color:var(--muted2)}
.syslog-level-badge.WARNING{background:var(--gold-bg);border-color:var(--gold-bdr);color:var(--gold)}
.syslog-level-badge.ERROR{background:var(--red-bg);border-color:var(--red-bdr);color:var(--red)}
.syslog-level-badge.DEBUG{background:var(--surface2);border-color:var(--border2);color:var(--muted)}
.syslog-level-badge.CRITICAL{background:var(--red-bg);border-color:var(--red-bdr);color:var(--red)}
.syslog-summary-text{display:-webkit-box;max-width:none;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-word;line-height:1.45;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.syslog-time-level{display:flex;flex-direction:column;gap:4px;min-width:0}
.detail-modal{max-width:680px;width:100%}
.detail-content{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.85;color:var(--text2);background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:14px 16px}
.detail-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.detail-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--surface2);border:1px solid var(--border);font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace}
::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:var(--bg2)}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px}
.tbl-wrap,.modal-body{-webkit-overflow-scrolling:touch}
::-webkit-scrollbar-thumb:hover{background:var(--muted2)}
/* ── Mobile ── */
@media(max-width:900px){}
@media(max-width:768px){
  .content{padding:12px 0}
  .g4{grid-template-columns:repeat(2,1fr)}
  .g3{grid-template-columns:1fr}
  .g2{grid-template-columns:1fr}
  .price-big{font-size:28px}
  .sig-action{font-size:14px}
  .ci{padding:0 10px}
  /* Header: single-row mobile toolbar */
  .hinner{height:44px;min-height:44px;padding:0 10px;flex-wrap:nowrap;gap:6px;align-items:center}
  .hbrand{flex:0 1 auto;gap:5px;flex-wrap:nowrap;min-width:0;overflow:hidden}
  .logo{font-size:14px;letter-spacing:-.6px;overflow:hidden;text-overflow:ellipsis}
  .hbrand > .badge.off{flex-shrink:0;font-size:10px;padding:2px 6px;gap:3px}
  #hBadge{display:none}
  .spacer{display:none}
  .hbtns{flex:1 1 auto;width:auto;min-width:0;gap:8px;flex-wrap:nowrap;margin-left:0;justify-content:flex-end;align-items:center}
  .hbtns .btn-analyze,
  .hbtns #toggleBtn{flex:0 0 auto;min-width:0;padding:0;border:none;background:transparent;border-radius:0;font-size:12px;font-weight:700;box-shadow:none;white-space:nowrap}
  .hbtns .btn-analyze{color:var(--text2)}
  .hbtns .btn-analyze:active{opacity:.65}
  .hbtns #toggleBtn.btn-green{color:var(--green)}
  .hbtns #toggleBtn.btn-red{color:var(--red)}
  .hbtns #toggleBtn:active{opacity:.65}
  .hbtns .config-btn{flex:0 0 auto;margin-left:0;padding:0 2px;min-width:auto;width:auto;height:auto;background:transparent;border:none;color:var(--gold);border-radius:0;box-shadow:none}
  .hbtns .config-btn:active{opacity:.65}
  .hbtns .config-btn .cfg-label{display:none}
  .hbtns .config-btn .cfg-icon{font-size:20px;line-height:1;display:block}
  .analysis-card-head .head-actions{width:100%;justify-content:flex-start}
  .analysis-card-head .head-actions .btn{font-size:10px;padding:2px 7px}
  /* Config modal */
  .modal-overlay{padding:10px 8px}
  .modal-body{padding:14px 12px}
  .modal-hd{padding:12px 14px}
  .modal.cfg-modal .modal-hd{padding-bottom:8px}
  .cfg-tabs{padding:6px 12px;min-height:40px;gap:3px}
  .cfg-tab{padding:6px 11px;font-size:12px}
  .modal-ft{padding:10px 14px}
  .tbl-wrap{overflow-x:auto}
  /* 系统日志筛选工具栏：竖向排列，搜索框全宽 */
  .syslog-toolbar{flex-direction:column;align-items:stretch;gap:6px}
  .syslog-filter{width:100%}
  /* 系统日志表格：移动端合并时间和级别列 */
  .syslog-table thead th.syslog-time,
  .syslog-table thead th.syslog-level{display:none}
  .syslog-table thead::before{content:'';display:table-cell;width:110px}
  .syslog-row .syslog-time,
  .syslog-row .syslog-level{display:none}
  .syslog-row td:first-child{padding-left:8px}
  .syslog-row td:first-child::before{content:attr(data-time) '\A' attr(data-level);white-space:pre;display:block;font-size:10px;line-height:1.4;color:var(--muted);font-family:'JetBrains Mono',monospace;width:110px;padding-right:8px;float:left}
  /* 系统状态4格卡片：2列 */
  #p-system .g4{grid-template-columns:repeat(2,1fr)}
  .row2{grid-template-columns:1fr}
  /* Trade form */
  .trade-row{flex-direction:column}
  .fi{min-width:0;width:100%}
  /* Tabs scrollable */
  .tabsinner{gap:0;min-height:34px}
  .tab{padding:6px 11px;font-size:12px}
  /* Cards */
  .card{padding:12px}
  .card-head{flex-wrap:wrap;gap:6px}
  .unit-sm{font-size:.52em;margin-left:.12em}
  .sv-sub{font-size:10.5px;line-height:1.45}

  /* ── 分析日志移动端卡片列表 ── */
  .alog-card-list{display:flex;flex-direction:column;gap:8px}
  .alog-card{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;transition:background .15s}
  .alog-card:active{background:var(--bg3)}
  .alog-card-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}
  .alog-card-time{font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .alog-card-price{font-size:12px;font-weight:700;font-family:'JetBrains Mono',monospace;color:var(--text);white-space:nowrap}
  .alog-card-bottom{display:flex;align-items:center;gap:8px}
  .alog-card-action{flex:1;min-width:0;font-size:12px;color:var(--text2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* 推送记录移动端卡片列表 */
  .plog-card-list{display:flex;flex-direction:column;gap:8px}
  .plog-card{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;transition:background .15s}
  .plog-card:active{background:var(--bg3)}
  .plog-card-top{display:flex;align-items:center;gap:8px;margin-bottom:5px}
  .plog-card-time{font-size:11px;color:var(--muted);font-family:'JetBrains Mono',monospace;flex:1;min-width:0}
  .plog-card-msg{font-size:12px;color:var(--text2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}
@media(max-width:480px){
  .content{padding:10px 0}
  .g4{grid-template-columns:1fr 1fr}
  .g3{grid-template-columns:1fr}
  .hinner{gap:4px;padding:0 8px}
  .logo{font-size:13px}
  .hbrand > .badge.off{font-size:9px;padding:1px 5px}
  .hbtns{gap:6px}
  .hbtns .btn-analyze,
  .hbtns #toggleBtn{font-size:11.5px}
  .hbtns .config-btn .cfg-icon{font-size:19px}
  .price-big{font-size:26px}
  .sig-action{font-size:13px}
  .tab{padding:5px 9px;font-size:11.5px}
  .guide-levels-grid{grid-template-columns:1fr}
}
