feat: implement Polymarket read-only data service and add scan terminal dashboard components

This commit is contained in:
2569718930@qq.com
2026-04-24 10:19:16 +08:00
parent c05cdd17c6
commit c61a3f500d
9 changed files with 707 additions and 419 deletions
@@ -9251,35 +9251,25 @@
border-bottom: 1px solid rgba(118, 146, 188, 0.1);
}
.root :global(.scan-topbar-tabs) {
.root :global(.scan-topbar-title) {
display: flex;
gap: 28px;
flex-direction: column;
gap: 6px;
min-width: 0;
}
.root :global(.scan-topbar-tab) {
position: relative;
border: none;
background: transparent;
color: #b4c8e2;
font-size: 17px;
font-weight: 700;
cursor: pointer;
.root :global(.scan-topbar-title strong) {
margin: 0;
font-size: 28px;
line-height: 1.08;
letter-spacing: -0.04em;
color: #f3f8ff;
}
.root :global(.scan-topbar-tab.active) {
color: #fff;
}
.root :global(.scan-topbar-tab.active::after) {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -18px;
height: 3px;
border-radius: 999px;
background: #3f8cff;
box-shadow: 0 0 14px rgba(63, 140, 255, 0.4);
.root :global(.scan-topbar-title span) {
color: #8fa4c3;
font-size: 14px;
line-height: 1.5;
}
.root :global(.scan-topbar-actions) {
@@ -9329,8 +9319,6 @@
.root :global(.scan-ghost-button),
.root :global(.scan-cta-ghost),
.root :global(.scan-theme-button),
.root :global(.scan-sort-pill),
.root :global(.scan-icon-pill),
.root :global(.scan-detail-action-button),
.root :global(.scan-detail-icon-button),
.root :global(.scan-view-all-button) {
@@ -9386,21 +9374,8 @@
animation: spin 1s linear infinite;
}
.root :global(.scan-hero h1) {
margin: 0;
font-size: 44px;
line-height: 1.08;
letter-spacing: -0.04em;
}
.root :global(.scan-hero p) {
margin: 10px 0 0;
color: #8fa4c3;
font-size: 16px;
}
.root :global(.scan-kpi-bar) {
grid-template-columns: repeat(5, minmax(0, 1fr));
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
}
@@ -9425,6 +9400,10 @@
color: #17d98b;
}
.root :global(.scan-kpi-card.cyan .scan-kpi-label) {
color: #37d6ff;
}
.root :global(.scan-kpi-card.purple .scan-kpi-label) {
color: #a35cff;
}
@@ -9433,6 +9412,14 @@
color: #49a3ff;
}
.root :global(.scan-kpi-card.red .scan-kpi-label) {
color: #ff647c;
}
.root :global(.scan-kpi-card.amber .scan-kpi-label) {
color: #ffb84f;
}
.root :global(.scan-kpi-card.orange .scan-kpi-label) {
color: #ffb020;
}
@@ -9487,20 +9474,37 @@
color: #fff;
}
.root :global(.scan-list-controls) {
.root :global(.scan-list-status) {
display: flex;
gap: 10px;
align-items: center;
}
.root :global(.scan-sort-pill) {
min-width: 188px;
padding: 12px 14px;
.root :global(.scan-status-chip) {
display: inline-flex;
align-items: center;
gap: 8px;
height: 34px;
padding: 0 12px;
border-radius: 999px;
border: 1px solid rgba(98, 126, 167, 0.22);
background: rgba(10, 22, 38, 0.92);
color: #c4d4e9;
font-size: 12px;
font-weight: 800;
letter-spacing: 0.02em;
}
.root :global(.scan-icon-pill) {
width: 48px;
display: grid;
place-items: center;
.root :global(.scan-status-chip.live) {
border-color: rgba(55, 214, 255, 0.28);
background: rgba(55, 214, 255, 0.1);
color: #71e6ff;
}
.root :global(.scan-status-chip.stale) {
border-color: rgba(255, 184, 79, 0.24);
background: rgba(255, 184, 79, 0.1);
color: #ffc765;
}
.root :global(.scan-table-shell) {
@@ -9518,6 +9522,27 @@
min-height: 340px;
}
.root :global(.scan-table-banner) {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
padding: 12px 16px;
border-bottom: 1px solid rgba(95, 124, 168, 0.12);
background: linear-gradient(180deg, rgba(255, 184, 79, 0.08), rgba(255, 184, 79, 0.03));
}
.root :global(.scan-table-banner strong) {
font-size: 13px;
font-weight: 800;
color: #ffd27f;
}
.root :global(.scan-table-banner span) {
font-size: 13px;
color: #c7d4e7;
}
.root :global(.scan-table-header) {
display: grid;
grid-template-columns: 46px minmax(180px, 1.08fr) minmax(132px, 0.72fr) minmax(220px, 1.08fr) minmax(150px, 0.82fr) 92px 82px;