feat: implement PolyWeather dashboard layout with premium dark theme and map integration

This commit is contained in:
2569718930@qq.com
2026-04-23 03:29:20 +08:00
parent 558a0031be
commit d0a98403e7
3 changed files with 865 additions and 168 deletions
@@ -65,7 +65,11 @@
width: 100vw;
background-image:
radial-gradient(circle at 18% 18%, rgba(30, 64, 175, 0.1), transparent 24%),
radial-gradient(circle at 82% 12%, rgba(8, 145, 178, 0.08), transparent 20%),
radial-gradient(
circle at 82% 12%,
rgba(8, 145, 178, 0.08),
transparent 20%
),
linear-gradient(180deg, #040914 0%, #02050d 100%);
}
@@ -156,7 +160,11 @@
}
.root :global(.home-map-modes button.active) {
background: linear-gradient(180deg, rgba(28, 100, 242, 0.76), rgba(31, 72, 184, 0.76));
background: linear-gradient(
180deg,
rgba(28, 100, 242, 0.76),
rgba(31, 72, 184, 0.76)
);
color: #f8fafc;
box-shadow: 0 10px 24px rgba(37, 99, 235, 0.24);
}
@@ -205,7 +213,14 @@
width: 178px;
height: 8px;
border-radius: 999px;
background: linear-gradient(90deg, #2563eb, #06b6d4, #22c55e, #eab308, #ef4444);
background: linear-gradient(
90deg,
#2563eb,
#06b6d4,
#22c55e,
#eab308,
#ef4444
);
}
.root :global(.home-map-legend-values) {
@@ -339,7 +354,11 @@
border-radius: 9px;
border: 1px solid rgba(34, 211, 238, 0.28);
background:
radial-gradient(circle at 30% 30%, rgba(34, 211, 238, 0.24), transparent 52%),
radial-gradient(
circle at 30% 30%,
rgba(34, 211, 238, 0.24),
transparent 52%
),
linear-gradient(180deg, rgba(11, 22, 40, 0.96), rgba(6, 13, 24, 0.96));
display: inline-flex;
align-items: center;
@@ -373,7 +392,11 @@
font-size: 18px;
font-weight: 800;
letter-spacing: -0.03em;
background: linear-gradient(135deg, var(--accent-cyan) 0%, var(--accent-blue) 100%);
background: linear-gradient(
135deg,
var(--accent-cyan) 0%,
var(--accent-blue) 100%
);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
@@ -790,7 +813,9 @@
linear-gradient(135deg, rgba(34, 211, 238, 0.12), rgba(30, 64, 175, 0.1)),
rgba(9, 18, 32, 0.92);
border-color: rgba(34, 211, 238, 0.24);
box-shadow: 0 0 20px rgba(34, 211, 238, 0.08), inset 0 0 0 1px rgba(34, 211, 238, 0.08);
box-shadow:
0 0 20px rgba(34, 211, 238, 0.08),
inset 0 0 0 1px rgba(34, 211, 238, 0.08);
}
.root :global(.city-item-main) {
@@ -899,8 +924,16 @@
border: 1px solid rgba(34, 211, 238, 0.18);
border-radius: 24px;
background:
radial-gradient(circle at 18% 0%, rgba(34, 211, 238, 0.16), transparent 32%),
radial-gradient(circle at 100% 20%, rgba(59, 130, 246, 0.18), transparent 34%),
radial-gradient(
circle at 18% 0%,
rgba(34, 211, 238, 0.16),
transparent 32%
),
radial-gradient(
circle at 100% 20%,
rgba(59, 130, 246, 0.18),
transparent 34%
),
linear-gradient(155deg, rgba(5, 12, 25, 0.86), rgba(12, 19, 35, 0.78));
backdrop-filter: blur(24px) saturate(130%);
box-shadow:
@@ -915,7 +948,11 @@
width: 260px;
height: 260px;
border-radius: 999px;
background: radial-gradient(circle, rgba(34, 211, 238, 0.18), transparent 62%);
background: radial-gradient(
circle,
rgba(34, 211, 238, 0.18),
transparent 62%
);
pointer-events: none;
}
@@ -1150,7 +1187,10 @@
font-weight: 800;
padding: 8px 12px;
text-decoration: none;
transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
transition:
transform 160ms ease,
border-color 160ms ease,
background 160ms ease;
}
.root :global(.home-pro-card a:hover),
@@ -1167,7 +1207,11 @@
overflow-y: auto;
border-color: rgba(34, 211, 238, 0.34);
background:
radial-gradient(circle at 100% 0%, rgba(37, 99, 235, 0.22), transparent 34%),
radial-gradient(
circle at 100% 0%,
rgba(37, 99, 235, 0.22),
transparent 34%
),
linear-gradient(162deg, rgba(3, 12, 24, 0.94), rgba(6, 26, 48, 0.92));
}
@@ -1403,7 +1447,11 @@
width: 44px;
height: 2px;
border-radius: 999px;
background: linear-gradient(90deg, rgba(125, 211, 252, 0), rgba(125, 211, 252, 0.92));
background: linear-gradient(
90deg,
rgba(125, 211, 252, 0),
rgba(125, 211, 252, 0.92)
);
}
.root :global(.home-weather-icon .wind::after) {
@@ -1526,7 +1574,11 @@
.root :global(.home-card-section) {
border-radius: 18px;
border: 1px solid rgba(115, 137, 161, 0.16);
background: linear-gradient(180deg, rgba(7, 14, 26, 0.92), rgba(9, 17, 30, 0.8));
background: linear-gradient(
180deg,
rgba(7, 14, 26, 0.92),
rgba(9, 17, 30, 0.8)
);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
}
@@ -1940,11 +1992,16 @@
border: 1px solid rgba(148, 163, 184, 0.14);
border-radius: 22px;
background:
radial-gradient(circle at 8% 50%, rgba(34, 211, 238, 0.12), transparent 32%),
radial-gradient(
circle at 8% 50%,
rgba(34, 211, 238, 0.12),
transparent 32%
),
rgba(7, 13, 25, 0.76);
backdrop-filter: blur(20px) saturate(130%);
box-shadow: 0 24px 70px rgba(0, 0, 0, 0.34);
animation: opportunity-strip-enter 580ms cubic-bezier(0.16, 1, 0.3, 1) 120ms both;
animation: opportunity-strip-enter 580ms cubic-bezier(0.16, 1, 0.3, 1) 120ms
both;
}
.root :global(.home-summary-grid) {
@@ -2011,10 +2068,18 @@
font-weight: 650;
}
.root :global(.home-summary-stat b.accent-red) { color: #fb7185; }
.root :global(.home-summary-stat b.accent-amber) { color: #fbbf24; }
.root :global(.home-summary-stat b.accent-green) { color: #4ade80; }
.root :global(.home-summary-stat b.accent-cyan) { color: #22d3ee; }
.root :global(.home-summary-stat b.accent-red) {
color: #fb7185;
}
.root :global(.home-summary-stat b.accent-amber) {
color: #fbbf24;
}
.root :global(.home-summary-stat b.accent-green) {
color: #4ade80;
}
.root :global(.home-summary-stat b.accent-cyan) {
color: #22d3ee;
}
.root :global(.opportunity-strip-heading) {
display: flex;
@@ -2064,20 +2129,31 @@
border: 1px solid rgba(148, 163, 184, 0.14);
border-radius: 16px;
background:
radial-gradient(circle at 100% 0%, rgba(30, 64, 175, 0.12), transparent 32%),
radial-gradient(
circle at 100% 0%,
rgba(30, 64, 175, 0.12),
transparent 32%
),
rgba(10, 16, 28, 0.84);
color: inherit;
cursor: pointer;
font: inherit;
text-align: left;
transition: transform 160ms ease, border-color 160ms ease, background 160ms ease;
transition:
transform 160ms ease,
border-color 160ms ease,
background 160ms ease;
}
.root :global(.opportunity-card:hover) {
transform: translateY(-2px);
border-color: rgba(34, 211, 238, 0.32);
background:
radial-gradient(circle at 100% 0%, rgba(30, 64, 175, 0.18), transparent 32%),
radial-gradient(
circle at 100% 0%,
rgba(30, 64, 175, 0.18),
transparent 32%
),
rgba(15, 23, 42, 0.92);
}
@@ -2169,6 +2245,22 @@
font-weight: 800;
}
/* Market-closed opportunity card — dimmed state */
.root :global(.opportunity-card.market-closed) {
opacity: 0.6;
border-style: dashed;
}
.root :global(.opportunity-card.market-closed:hover) {
opacity: 0.82;
}
.root :global(.opportunity-market-status) {
color: rgba(251, 191, 36, 0.8);
font-size: 10px;
font-weight: 700;
}
@keyframes home-panel-enter {
from {
opacity: 0;
@@ -2981,7 +3073,11 @@
.root :global(.model-bar-fill) {
height: 100%;
border-radius: 6px;
background: linear-gradient(90deg, rgba(14, 165, 233, 0.72), rgba(34, 211, 238, 0.92));
background: linear-gradient(
90deg,
rgba(14, 165, 233, 0.72),
rgba(34, 211, 238, 0.92)
);
transition: width 0.6s ease-out;
}
@@ -3096,8 +3192,12 @@
.root :global(.forecast-day-sync) {
cursor: wait;
opacity: 0.76;
background:
linear-gradient(90deg, rgba(15, 23, 42, 0.86), rgba(30, 41, 59, 0.72), rgba(15, 23, 42, 0.86));
background: linear-gradient(
90deg,
rgba(15, 23, 42, 0.86),
rgba(30, 41, 59, 0.72),
rgba(15, 23, 42, 0.86)
);
background-size: 220% 100%;
animation: panelSkeletonSweep 1.35s ease-in-out infinite;
}
@@ -5142,8 +5242,11 @@
padding: 16px;
border: 1px solid rgba(34, 211, 238, 0.22);
border-radius: 8px;
background:
linear-gradient(180deg, rgba(8, 47, 73, 0.42), rgba(15, 23, 42, 0.78));
background: linear-gradient(
180deg,
rgba(8, 47, 73, 0.42),
rgba(15, 23, 42, 0.78)
);
}
.root :global(.future-v2-meteorology-copy) {
@@ -6181,7 +6284,8 @@
background: #22d3ee;
}
.root :global(.future-v2-rule-panel:nth-child(2) .future-v2-rule-list li::before) {
.root
:global(.future-v2-rule-panel:nth-child(2) .future-v2-rule-list li::before) {
background: #f59e0b;
}