style(risk): polish account status badge for light and dark themes
Extract shared account_risk_badge.css with theme-aware contrast, dot indicator, and hub/instance layout fixes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -21,11 +21,6 @@
|
|||||||
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
||||||
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
||||||
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
||||||
.risk-status-badge{font-size:.78rem;font-weight:600;padding:4px 12px;border-radius:999px;border:1px solid transparent}
|
|
||||||
.risk-status-normal{color:#b8f5d0;background:#14241e;border-color:#2d6a4f}
|
|
||||||
.risk-status-freeze_1h{color:#ffd89a;background:#2a2210;border-color:#8a6a20}
|
|
||||||
.risk-status-freeze_4h{color:#ffb4a0;background:#2a1410;border-color:#8a4020}
|
|
||||||
.risk-status-freeze_daily{color:#ffb0c8;background:#2a1020;border-color:#8a3050}
|
|
||||||
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
||||||
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
||||||
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
||||||
@@ -241,6 +236,7 @@
|
|||||||
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
||||||
|
<link rel="stylesheet" href="/static/account_risk_badge.css?v=1">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body data-page="{{ page }}">
|
<body data-page="{{ page }}">
|
||||||
@@ -268,7 +264,7 @@
|
|||||||
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
||||||
<div class="header-row">
|
<div class="header-row">
|
||||||
<div class="exchange-tag">{{ exchange_display }}</div>
|
<div class="exchange-tag">{{ exchange_display }}</div>
|
||||||
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" role="status" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
||||||
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
||||||
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
||||||
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
||||||
|
|||||||
@@ -21,11 +21,6 @@
|
|||||||
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
||||||
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
||||||
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
||||||
.risk-status-badge{font-size:.78rem;font-weight:600;padding:4px 12px;border-radius:999px;border:1px solid transparent}
|
|
||||||
.risk-status-normal{color:#b8f5d0;background:#14241e;border-color:#2d6a4f}
|
|
||||||
.risk-status-freeze_1h{color:#ffd89a;background:#2a2210;border-color:#8a6a20}
|
|
||||||
.risk-status-freeze_4h{color:#ffb4a0;background:#2a1410;border-color:#8a4020}
|
|
||||||
.risk-status-freeze_daily{color:#ffb0c8;background:#2a1020;border-color:#8a3050}
|
|
||||||
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
||||||
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
||||||
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
||||||
@@ -241,6 +236,7 @@
|
|||||||
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
||||||
|
<link rel="stylesheet" href="/static/account_risk_badge.css?v=1">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body data-page="{{ page }}">
|
<body data-page="{{ page }}">
|
||||||
@@ -268,7 +264,7 @@
|
|||||||
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
||||||
<div class="header-row">
|
<div class="header-row">
|
||||||
<div class="exchange-tag">{{ exchange_display }}</div>
|
<div class="exchange-tag">{{ exchange_display }}</div>
|
||||||
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" role="status" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
||||||
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
||||||
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
||||||
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
||||||
|
|||||||
@@ -21,11 +21,6 @@
|
|||||||
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
||||||
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
||||||
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
||||||
.risk-status-badge{font-size:.78rem;font-weight:600;padding:4px 12px;border-radius:999px;border:1px solid transparent}
|
|
||||||
.risk-status-normal{color:#b8f5d0;background:#14241e;border-color:#2d6a4f}
|
|
||||||
.risk-status-freeze_1h{color:#ffd89a;background:#2a2210;border-color:#8a6a20}
|
|
||||||
.risk-status-freeze_4h{color:#ffb4a0;background:#2a1410;border-color:#8a4020}
|
|
||||||
.risk-status-freeze_daily{color:#ffb0c8;background:#2a1020;border-color:#8a3050}
|
|
||||||
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
||||||
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
||||||
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
||||||
@@ -241,6 +236,7 @@
|
|||||||
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
||||||
|
<link rel="stylesheet" href="/static/account_risk_badge.css?v=1">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body data-page="{{ page }}">
|
<body data-page="{{ page }}">
|
||||||
@@ -268,7 +264,7 @@
|
|||||||
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
||||||
<div class="header-row">
|
<div class="header-row">
|
||||||
<div class="exchange-tag">{{ exchange_display }}</div>
|
<div class="exchange-tag">{{ exchange_display }}</div>
|
||||||
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" role="status" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
||||||
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
||||||
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
||||||
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
||||||
|
|||||||
@@ -21,11 +21,6 @@
|
|||||||
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
.header h1{font-size:1.75rem;color:#dbe4ff;text-align:center;line-height:1.25}
|
||||||
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
.exchange-tag{font-size:.82rem;font-weight:600;color:#b8f5d0;background:#14241e;border:1px solid #2d6a4f;padding:5px 14px;border-radius:999px;letter-spacing:.06em}
|
||||||
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
.header-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
|
||||||
.risk-status-badge{font-size:.78rem;font-weight:600;padding:4px 12px;border-radius:999px;border:1px solid transparent}
|
|
||||||
.risk-status-normal{color:#b8f5d0;background:#14241e;border-color:#2d6a4f}
|
|
||||||
.risk-status-freeze_1h{color:#ffd89a;background:#2a2210;border-color:#8a6a20}
|
|
||||||
.risk-status-freeze_4h{color:#ffb4a0;background:#2a1410;border-color:#8a4020}
|
|
||||||
.risk-status-freeze_daily{color:#ffb0c8;background:#2a1020;border-color:#8a3050}
|
|
||||||
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
.top-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:12px}
|
||||||
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
.top-nav a{padding:6px 10px;border:1px solid #304164;border-radius:8px;background:#151a2a;color:#8fc8ff;text-decoration:none}
|
||||||
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
.top-nav a.active{background:#2a3f6c;color:#dbe4ff}
|
||||||
@@ -241,6 +236,7 @@
|
|||||||
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
.stats-period-block .sub{font-size:.78rem;color:#8892b0;margin-bottom:10px;line-height:1.4}
|
||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
<link rel="stylesheet" href="/static/instance_theme.css?v=14">
|
||||||
|
<link rel="stylesheet" href="/static/account_risk_badge.css?v=1">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body data-page="{{ page }}">
|
<body data-page="{{ page }}">
|
||||||
@@ -268,7 +264,7 @@
|
|||||||
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
<h1>加密货币|交易监控 + AI复盘一体化</h1>
|
||||||
<div class="header-row">
|
<div class="header-row">
|
||||||
<div class="exchange-tag">{{ exchange_display }}</div>
|
<div class="exchange-tag">{{ exchange_display }}</div>
|
||||||
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}" id="account-risk-badge" role="status" title="{{ risk_status.reason|default('', true) }}">{{ risk_status.status_label|default('正常') }}</span>
|
||||||
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
<div class="theme-toggle instance-theme-toggle" role="group" aria-label="界面主题">
|
||||||
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
<button type="button" class="theme-toggle-btn is-active" data-theme-value="dark" aria-pressed="true" title="暗色主题">
|
||||||
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
<svg class="theme-icon" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true">
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ def install_instance_theme_static(app) -> None:
|
|||||||
"instance_theme.js": "application/javascript; charset=utf-8",
|
"instance_theme.js": "application/javascript; charset=utf-8",
|
||||||
"instance_theme_early.css": "text/css; charset=utf-8",
|
"instance_theme_early.css": "text/css; charset=utf-8",
|
||||||
"instance_theme.css": "text/css; charset=utf-8",
|
"instance_theme.css": "text/css; charset=utf-8",
|
||||||
|
"account_risk_badge.css": "text/css; charset=utf-8",
|
||||||
"instance_ui.js": "application/javascript; charset=utf-8",
|
"instance_ui.js": "application/javascript; charset=utf-8",
|
||||||
"ai_review_render.js": "application/javascript; charset=utf-8",
|
"ai_review_render.js": "application/javascript; charset=utf-8",
|
||||||
"form_submit_guard.js": "application/javascript; charset=utf-8",
|
"form_submit_guard.js": "application/javascript; charset=utf-8",
|
||||||
|
|||||||
@@ -518,6 +518,18 @@ app = FastAPI(title="复盘系统中控", docs_url=None, redoc_url=None, lifespa
|
|||||||
STATIC_DIR = DIR / "static"
|
STATIC_DIR = DIR / "static"
|
||||||
_REPO_STATIC = _REPO_ROOT / "static"
|
_REPO_STATIC = _REPO_ROOT / "static"
|
||||||
_AI_REVIEW_RENDER_JS = _REPO_STATIC / "ai_review_render.js"
|
_AI_REVIEW_RENDER_JS = _REPO_STATIC / "ai_review_render.js"
|
||||||
|
_ACCOUNT_RISK_BADGE_CSS = _REPO_STATIC / "account_risk_badge.css"
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/assets/account_risk_badge.css")
|
||||||
|
def hub_account_risk_badge_css():
|
||||||
|
"""与四所实例共用仓库根 static/account_risk_badge.css。"""
|
||||||
|
if not _ACCOUNT_RISK_BADGE_CSS.is_file():
|
||||||
|
raise HTTPException(status_code=404, detail="account_risk_badge.css not found")
|
||||||
|
return FileResponse(
|
||||||
|
str(_ACCOUNT_RISK_BADGE_CSS),
|
||||||
|
media_type="text/css; charset=utf-8",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/assets/ai_review_render.js")
|
@app.get("/assets/ai_review_render.js")
|
||||||
|
|||||||
@@ -596,35 +596,6 @@ button:disabled {
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.risk-status-badge {
|
|
||||||
font-size: 0.72rem;
|
|
||||||
font-weight: 600;
|
|
||||||
padding: 2px 8px;
|
|
||||||
border-radius: 999px;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
.risk-status-normal {
|
|
||||||
color: #b8f5d0;
|
|
||||||
background: #14241e;
|
|
||||||
border-color: #2d6a4f;
|
|
||||||
}
|
|
||||||
.risk-status-freeze_1h {
|
|
||||||
color: #ffd89a;
|
|
||||||
background: #2a2210;
|
|
||||||
border-color: #8a6a20;
|
|
||||||
}
|
|
||||||
.risk-status-freeze_4h {
|
|
||||||
color: #ffb4a0;
|
|
||||||
background: #2a1410;
|
|
||||||
border-color: #8a4020;
|
|
||||||
}
|
|
||||||
.risk-status-freeze_daily {
|
|
||||||
color: #ffb0c8;
|
|
||||||
background: #2a1020;
|
|
||||||
border-color: #8a3050;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-dot {
|
.status-dot {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
@@ -962,6 +933,7 @@ html[data-theme="light"] .host-metric-bar {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hub-tile-name {
|
.hub-tile-name {
|
||||||
@@ -1024,6 +996,10 @@ html[data-theme="light"] .host-metric-bar {
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
letter-spacing: 0.05em;
|
letter-spacing: 0.05em;
|
||||||
margin: 0 0 4px;
|
margin: 0 0 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-sub {
|
.card-sub {
|
||||||
|
|||||||
@@ -513,7 +513,7 @@
|
|||||||
const st = riskStatus.status || "normal";
|
const st = riskStatus.status || "normal";
|
||||||
const label = esc(riskStatus.status_label || "正常");
|
const label = esc(riskStatus.status_label || "正常");
|
||||||
const title = esc(riskStatus.reason || "");
|
const title = esc(riskStatus.reason || "");
|
||||||
return `<span class="risk-status-badge risk-status-${esc(st)}" title="${title}">${label}</span>`;
|
return `<span class="risk-status-badge risk-status-${esc(st)}" role="status" title="${title}">${label}</span>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fmt(n, d) {
|
function fmt(n, d) {
|
||||||
@@ -3248,7 +3248,8 @@
|
|||||||
<div class="hub-tile-body card-expand-zone" title="点击进入全屏详情">
|
<div class="hub-tile-body card-expand-zone" title="点击进入全屏详情">
|
||||||
<div class="hub-tile-top">
|
<div class="hub-tile-top">
|
||||||
<span class="status-dot ${dotCls}" aria-hidden="true"></span>
|
<span class="status-dot ${dotCls}" aria-hidden="true"></span>
|
||||||
<span class="hub-tile-name">${esc(row.name)}${formatRiskStatusBadge(hm.risk_status)}</span>
|
<span class="hub-tile-name">${esc(row.name)}</span>
|
||||||
|
${formatRiskStatusBadge(hm.risk_status)}
|
||||||
</div>
|
</div>
|
||||||
${
|
${
|
||||||
showAccountPnlPref()
|
showAccountPnlPref()
|
||||||
@@ -3301,7 +3302,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="card-title-row">
|
<div class="card-title-row">
|
||||||
<span class="status-dot ${dotCls}" title="${online ? "在线" : "离线"}"></span>
|
<span class="status-dot ${dotCls}" title="${online ? "在线" : "离线"}"></span>
|
||||||
<div class="card-title">${esc(row.name)}${formatRiskStatusBadge(hm.risk_status)}</div>
|
<div class="card-title"><span>${esc(row.name)}</span>${formatRiskStatusBadge(hm.risk_status)}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-sub">${esc(flaskOpen || "")}</div>
|
<div class="card-sub">${esc(flaskOpen || "")}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
|
||||||
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
|
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
|
||||||
<link rel="stylesheet" href="/assets/app.css?v=20260613-host-status-tone" />
|
<link rel="stylesheet" href="/assets/app.css?v=20260613-host-status-tone" />
|
||||||
|
<link rel="stylesheet" href="/assets/account_risk_badge.css?v=1" />
|
||||||
<link rel="stylesheet" href="/assets/dashboard.css?v=20260612-dash-monitor-count" />
|
<link rel="stylesheet" href="/assets/dashboard.css?v=20260612-dash-monitor-count" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -0,0 +1,128 @@
|
|||||||
|
/* 账户风控状态徽章 — 四所实例 + 中控共用;兼容 data-theme light/dark */
|
||||||
|
|
||||||
|
:root,
|
||||||
|
html[data-theme="dark"] {
|
||||||
|
--risk-normal-fg: #9cf0c4;
|
||||||
|
--risk-normal-bg: rgba(36, 140, 96, 0.16);
|
||||||
|
--risk-normal-border: rgba(72, 190, 130, 0.42);
|
||||||
|
--risk-normal-glow: rgba(72, 190, 130, 0.35);
|
||||||
|
|
||||||
|
--risk-1h-fg: #ffd27a;
|
||||||
|
--risk-1h-bg: rgba(210, 150, 40, 0.16);
|
||||||
|
--risk-1h-border: rgba(230, 170, 60, 0.45);
|
||||||
|
--risk-1h-glow: rgba(230, 170, 60, 0.32);
|
||||||
|
|
||||||
|
--risk-4h-fg: #ffab8a;
|
||||||
|
--risk-4h-bg: rgba(210, 90, 55, 0.16);
|
||||||
|
--risk-4h-border: rgba(230, 110, 70, 0.48);
|
||||||
|
--risk-4h-glow: rgba(230, 110, 70, 0.34);
|
||||||
|
|
||||||
|
--risk-daily-fg: #ff9ec4;
|
||||||
|
--risk-daily-bg: rgba(190, 55, 100, 0.18);
|
||||||
|
--risk-daily-border: rgba(210, 75, 120, 0.5);
|
||||||
|
--risk-daily-glow: rgba(210, 75, 120, 0.36);
|
||||||
|
|
||||||
|
--risk-badge-shadow: 0 1px 2px rgba(0, 0, 0, 0.28);
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] {
|
||||||
|
--risk-normal-fg: #056b44;
|
||||||
|
--risk-normal-bg: rgba(10, 143, 92, 0.14);
|
||||||
|
--risk-normal-border: rgba(8, 122, 80, 0.38);
|
||||||
|
--risk-normal-glow: rgba(10, 143, 92, 0.22);
|
||||||
|
|
||||||
|
--risk-1h-fg: #8a5a00;
|
||||||
|
--risk-1h-bg: rgba(200, 140, 20, 0.14);
|
||||||
|
--risk-1h-border: rgba(170, 115, 10, 0.38);
|
||||||
|
--risk-1h-glow: rgba(200, 140, 20, 0.2);
|
||||||
|
|
||||||
|
--risk-4h-fg: #a83812;
|
||||||
|
--risk-4h-bg: rgba(210, 85, 35, 0.12);
|
||||||
|
--risk-4h-border: rgba(180, 65, 25, 0.36);
|
||||||
|
--risk-4h-glow: rgba(210, 85, 35, 0.2);
|
||||||
|
|
||||||
|
--risk-daily-fg: #9a1248;
|
||||||
|
--risk-daily-bg: rgba(180, 35, 80, 0.1);
|
||||||
|
--risk-daily-border: rgba(155, 28, 68, 0.34);
|
||||||
|
--risk-daily-glow: rgba(180, 35, 80, 0.18);
|
||||||
|
|
||||||
|
--risk-badge-shadow: 0 1px 2px rgba(20, 50, 80, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.risk-status-badge {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
font-size: 0.76rem;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
line-height: 1.15;
|
||||||
|
padding: 5px 12px 5px 10px;
|
||||||
|
border-radius: 999px;
|
||||||
|
border: 1px solid var(--risk-border, transparent);
|
||||||
|
background: var(--risk-bg, transparent);
|
||||||
|
color: var(--risk-fg, inherit);
|
||||||
|
box-shadow: var(--risk-badge-shadow);
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.risk-status-badge::before {
|
||||||
|
content: "";
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: currentColor;
|
||||||
|
flex-shrink: 0;
|
||||||
|
box-shadow: 0 0 0 1px color-mix(in srgb, currentColor 30%, transparent),
|
||||||
|
0 0 8px var(--risk-glow, currentColor);
|
||||||
|
opacity: 0.92;
|
||||||
|
}
|
||||||
|
|
||||||
|
.risk-status-normal {
|
||||||
|
--risk-fg: var(--risk-normal-fg);
|
||||||
|
--risk-bg: var(--risk-normal-bg);
|
||||||
|
--risk-border: var(--risk-normal-border);
|
||||||
|
--risk-glow: var(--risk-normal-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.risk-status-freeze_1h {
|
||||||
|
--risk-fg: var(--risk-1h-fg);
|
||||||
|
--risk-bg: var(--risk-1h-bg);
|
||||||
|
--risk-border: var(--risk-1h-border);
|
||||||
|
--risk-glow: var(--risk-1h-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.risk-status-freeze_4h {
|
||||||
|
--risk-fg: var(--risk-4h-fg);
|
||||||
|
--risk-bg: var(--risk-4h-bg);
|
||||||
|
--risk-border: var(--risk-4h-border);
|
||||||
|
--risk-glow: var(--risk-4h-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.risk-status-freeze_daily {
|
||||||
|
--risk-fg: var(--risk-daily-fg);
|
||||||
|
--risk-bg: var(--risk-daily-bg);
|
||||||
|
--risk-border: var(--risk-daily-border);
|
||||||
|
--risk-glow: var(--risk-daily-glow);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 实例页:与交易所标签并排 */
|
||||||
|
.header-row .risk-status-badge {
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 中控卡片标题内 */
|
||||||
|
.card-title .risk-status-badge,
|
||||||
|
.hub-tile-name .risk-status-badge {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
padding: 3px 10px 3px 8px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title .risk-status-badge::before,
|
||||||
|
.hub-tile-name .risk-status-badge::before {
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user