:root { --bg: #0c0e12; --bg-elevated: #12161d; --panel: #181d26; --panel-hover: #1e2430; --text: #e6edf3; --muted: #8b949e; --border: #30363d; --border-soft: #21262d; --green: #3fb950; --red: #f85149; --accent: #539bf5; --accent-dim: #1f3a5f; --radius: 10px; --shadow: 0 4px 24px rgba(0, 0, 0, 0.35); --font: "Segoe UI", ui-sans-serif, system-ui, -apple-system, sans-serif; --mono: ui-monospace, "Cascadia Mono", Consolas, monospace; /* 内容区最大宽度:比 1080p 下常见的 1280 略宽,带鱼屏两侧留白不拉伸 */ --layout-max: 1520px; } * { box-sizing: border-box; } body { font-family: var(--font); background: var(--bg); color: var(--text); margin: 0; font-size: 14px; line-height: 1.5; min-height: 100vh; } a { color: var(--accent); text-decoration: none; } a:hover { text-decoration: underline; } /* —— 顶栏 —— */ .app-shell { width: 100%; max-width: var(--layout-max); margin-left: auto; margin-right: auto; padding: 0 24px 48px; } .app-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--border-soft); margin-bottom: 8px; flex-wrap: wrap; } .brand { font-size: 15px; font-weight: 600; letter-spacing: 0.02em; color: var(--text); } .brand span { color: var(--muted); font-weight: 400; margin-left: 8px; } .top-nav { display: flex; gap: 6px; background: var(--bg-elevated); padding: 4px; border-radius: var(--radius); border: 1px solid var(--border-soft); } .top-nav a { padding: 8px 18px; border-radius: 7px; text-decoration: none; color: var(--muted); font-size: 13px; font-weight: 500; transition: background 0.15s, color 0.15s; } .top-nav a:hover { color: var(--text); background: var(--panel-hover); text-decoration: none; } .top-nav a.active { background: var(--panel); color: var(--text); box-shadow: var(--shadow); border: 1px solid var(--border); } /* —— 页面 —— */ .page.hidden { display: none; } .page-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin: 20px 0 16px; flex-wrap: wrap; } .page-head h1 { margin: 0; font-size: 22px; font-weight: 600; letter-spacing: -0.02em; } .hint-box { margin-bottom: 16px; border: 1px solid var(--border-soft); border-radius: var(--radius); background: var(--bg-elevated); overflow: hidden; } .hint-box summary { padding: 10px 14px; cursor: pointer; font-size: 13px; color: var(--muted); user-select: none; list-style: none; } .hint-box summary::-webkit-details-marker { display: none; } .hint-box summary::before { content: "▸ "; color: var(--accent); } .hint-box[open] summary::before { content: "▾ "; } .hint-box .hint-body { padding: 0 14px 12px; font-size: 12px; color: var(--muted); line-height: 1.6; border-top: 1px solid var(--border-soft); } .hint-box .hint-body code { font-family: var(--mono); font-size: 11px; background: var(--panel); padding: 1px 5px; border-radius: 4px; color: #b8c4ff; } .toolbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; padding: 12px 14px; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 16px; } .toolbar-spacer { flex: 1; min-width: 8px; } .toolbar-meta { font-size: 12px; color: var(--muted); font-family: var(--mono); } /* —— 按钮 —— */ button, .btn { background: var(--bg-elevated); color: var(--text); border: 1px solid var(--border); border-radius: 8px; padding: 8px 16px; cursor: pointer; font-size: 13px; font-weight: 500; transition: border-color 0.15s, background 0.15s; } button:hover:not(:disabled) { border-color: var(--accent); background: var(--panel-hover); } button.primary { background: var(--accent-dim); border-color: var(--accent); color: #fff; } button.danger { border-color: rgba(248, 81, 73, 0.5); color: var(--red); background: rgba(248, 81, 73, 0.08); } button.danger:hover:not(:disabled) { background: rgba(248, 81, 73, 0.15); border-color: var(--red); } button:disabled { opacity: 0.4; cursor: not-allowed; } .btn-link { background: transparent; border: none; color: var(--accent); padding: 6px 10px; font-size: 12px; } .btn-link:hover { background: var(--accent-dim); text-decoration: none; } .chk-label { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--muted); cursor: pointer; } /* —— 卡片 —— */ .card { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); transition: border-color 0.2s; } .card:hover { border-color: #3d444d; } .card-head { padding: 14px 16px; border-bottom: 1px solid var(--border-soft); display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.03) 0%, transparent 100%); } .card-title { font-size: 15px; font-weight: 600; margin: 0 0 4px; } .card-sub { font-size: 11px; color: var(--muted); font-family: var(--mono); word-break: break-all; } .card-actions { display: flex; gap: 6px; align-items: center; flex-shrink: 0; } .card-body { padding: 14px 16px; } /* 固定内容宽度内三列,卡片不被拉宽 */ .grid-monitor { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; } .settings-grid-wrap { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } @media (max-width: 1200px) { .grid-monitor { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* 监控统计 */ .stat-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 12px; } .stat-box { background: var(--bg-elevated); border: 1px solid var(--border-soft); border-radius: 8px; padding: 10px 12px; } .stat-label { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 4px; } .stat-value { font-size: 18px; font-weight: 600; font-variant-numeric: tabular-nums; } .section-title { font-size: 11px; font-weight: 600; color: #b8c4ff; text-transform: uppercase; letter-spacing: 0.06em; margin: 14px 0 8px; padding-bottom: 6px; border-bottom: 1px solid var(--border-soft); } .section-title:first-child { margin-top: 0; } .data-table { width: 100%; border-collapse: collapse; font-size: 12px; } .data-table th { color: var(--muted); font-weight: 500; font-size: 11px; padding: 6px 8px; text-align: left; border-bottom: 1px solid var(--border); } .data-table td { padding: 8px; border-bottom: 1px solid var(--border-soft); font-variant-numeric: tabular-nums; } .data-table tr:last-child td { border-bottom: none; } .list-line { font-size: 12px; color: var(--muted); padding: 6px 0; border-bottom: 1px dashed var(--border-soft); line-height: 1.45; } .list-line:last-child { border-bottom: none; } .empty-hint { font-size: 12px; color: var(--muted); padding: 8px 0; } .pnl-pos { color: var(--green); } .pnl-neg { color: var(--red); } .err { color: var(--red); font-size: 13px; } .badge { font-size: 10px; padding: 2px 8px; border-radius: 999px; background: var(--accent-dim); color: #8fc8ff; border: 1px solid rgba(83, 155, 245, 0.35); white-space: nowrap; } /* —— 下单区 —— */ .trade-bar { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-bottom: 16px; padding: 14px 16px; background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); } .trade-bar label { font-size: 12px; color: var(--muted); margin-right: 6px; } .trade-bar select { min-width: 220px; } .tabs { display: flex; gap: 4px; margin-bottom: 16px; padding: 4px; background: var(--bg-elevated); border-radius: var(--radius); border: 1px solid var(--border-soft); width: fit-content; max-width: 100%; flex-wrap: wrap; } .tabs button { border: none; background: transparent; padding: 8px 16px; border-radius: 7px; } .tabs button.active { background: var(--panel); color: var(--accent); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); border: 1px solid var(--border); } .trade-meta { font-size: 12px; color: var(--muted); padding: 10px 14px; background: var(--bg-elevated); border-left: 3px solid var(--accent); border-radius: 0 var(--radius) var(--radius) 0; margin-bottom: 16px; line-height: 1.55; } .form-panel.hidden { display: none; } .form-panel .card-head strong { font-size: 14px; } .form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px; align-items: end; } .field { display: flex; flex-direction: column; gap: 5px; } .field label { font-size: 11px; color: var(--muted); font-weight: 500; } .field-wide { grid-column: 1 / -1; } .field input, .field select, .trade-bar select, .form-row input, .form-row select { background: var(--bg); border: 1px solid var(--border); color: var(--text); border-radius: 8px; padding: 9px 11px; font-size: 13px; width: 100%; } .field input:focus, .field select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 2px rgba(83, 155, 245, 0.2); } .field-check { flex-direction: row; align-items: center; gap: 8px; padding-top: 20px; } .field-check label { font-size: 13px; color: var(--text); cursor: pointer; } .form-actions { grid-column: 1 / -1; display: flex; justify-content: flex-end; padding-top: 4px; } /* —— 系统设置 —— */ .settings-card { background: var(--panel); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; } .settings-card-head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; } .settings-card-head .ex-name { flex: 1; min-width: 160px; font-size: 15px; font-weight: 600; background: transparent; border: none; border-bottom: 1px dashed var(--border); color: var(--text); padding: 4px 0; } .settings-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; } .settings-grid .field input { font-family: var(--mono); font-size: 12px; } .cap-chips { display: flex; gap: 12px; flex-wrap: wrap; padding: 8px 0; } .cap-chips label { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); cursor: pointer; padding: 6px 12px; background: var(--bg-elevated); border-radius: 999px; border: 1px solid var(--border-soft); } .settings-card-foot { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border-soft); } .settings-card-foot .field { max-width: 80px; } #toast { position: fixed; bottom: 20px; right: 20px; max-width: min(420px, 92vw); background: var(--panel); border: 1px solid var(--border); padding: 12px 16px; border-radius: var(--radius); display: none; z-index: 50; white-space: pre-wrap; font-size: 13px; box-shadow: var(--shadow); } #toast.show { display: block; } @media (max-width: 720px) { .app-shell { padding: 0 12px 32px; } .grid-monitor { grid-template-columns: 1fr; } .settings-grid-wrap { grid-template-columns: 1fr; } .form-grid { grid-template-columns: 1fr; } }