release: bump version to 0.25.3
This commit is contained in:
@@ -7,6 +7,28 @@ This project follows the repository versioning rule:
|
||||
- `feature` -> `+0.1.0`
|
||||
- `bugfix` -> `+0.0.1`
|
||||
|
||||
## 0.25.3
|
||||
|
||||
Released: 2026-04-11
|
||||
|
||||
### Highlights
|
||||
|
||||
- Refined the Earth HUD visual system into a calmer operator-facing style, turned the top-left Earth brand into a real reusable component with language-driven rendering, and cleaned up duplicated brand assets so the page now has a single source of truth for HUD branding.
|
||||
|
||||
### Added
|
||||
|
||||
- Added [frontend/public/earth/js/brand.js](/home/ray/dev/linkong/planet/frontend/public/earth/js/brand.js) as a reusable Earth `brand` component that renders the top-left logo/title/subtitle block from a shared config instead of hardcoding the structure in HTML.
|
||||
- Added [frontend/public/earth/assets/brand/earth-logo.svg](/home/ray/dev/linkong/planet/frontend/public/earth/assets/brand/earth-logo.svg), [frontend/public/earth/assets/brand/title-zh.svg](/home/ray/dev/linkong/planet/frontend/public/earth/assets/brand/title-zh.svg), and [frontend/public/earth/assets/brand/title-en.svg](/home/ray/dev/linkong/planet/frontend/public/earth/assets/brand/title-en.svg) as the canonical Earth brand asset set.
|
||||
|
||||
### Improved
|
||||
|
||||
- Improved [frontend/public/earth/css/base.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/base.css), [frontend/public/earth/css/hud.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/hud.css), [frontend/public/earth/css/coordinates-display.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/coordinates-display.css), [frontend/public/earth/css/legend.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/legend.css), [frontend/public/earth/css/earth-stats.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/earth-stats.css), and [frontend/public/earth/css/toolbar.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/toolbar.css) by rebalancing the Earth HUD into a more restrained deep-blue control-room look instead of the earlier over-layered glass-and-neon mix.
|
||||
- Improved [frontend/public/earth/index.html](/home/ray/dev/linkong/planet/frontend/public/earth/index.html), [frontend/public/earth/js/main.js](/home/ray/dev/linkong/planet/frontend/public/earth/js/main.js), and [frontend/public/earth/js/constants.js](/home/ray/dev/linkong/planet/frontend/public/earth/js/constants.js) by moving the Earth brand mount to a dedicated root and letting `HUD_CONFIG.brandLanguage` choose between `zh` and `en` without embedding the language decision in the DOM.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed [frontend/public/earth/css/info-panel.css](/home/ray/dev/linkong/planet/frontend/public/earth/css/info-panel.css) so the Earth brand area now uses consistent `earth-brand` component selectors and English-specific typography hooks, avoiding the earlier one-off `brand-banner` naming drift and duplicated title styles.
|
||||
|
||||
## 0.25.2
|
||||
|
||||
Released: 2026-04-10
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
## Current Version
|
||||
|
||||
- `main` 当前主线历史推导到:`0.16.5`
|
||||
- `dev` 当前开发分支历史推导到:`0.25.2`
|
||||
- `dev` 当前开发分支历史推导到:`0.25.3`
|
||||
|
||||
## Timeline
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
| `0.25.0` | feature | `dev` | `89a71e6f` | add persistent backend-backed AI Playground chat state, split alert workspaces into dedicated pages, and establish the situational-awareness foundation for later multi-signal analysis |
|
||||
| `0.25.1` | bugfix | `dev` | `pending` | clean duplicated Playground flow code, add reusable code-hygiene rules, and fix first-level sidebar menu expansion behavior across route navigation and refresh |
|
||||
| `0.25.2` | bugfix | `dev` | `pending` | refine Earth settings modal sizing, eliminate first-frame HUD scale flicker, and make dragged HUD panels animate cleanly through maximized layout transitions |
|
||||
| `0.25.3` | bugfix | `dev` | `pending` | refactor the Earth HUD visual system, extract the top-left Earth brand into a reusable language-driven component, and consolidate duplicated brand assets into a single canonical set |
|
||||
|
||||
## Maintenance Commits Not Counted as Version Bumps
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "planet-frontend",
|
||||
"version": "0.25.2",
|
||||
"version": "0.25.3",
|
||||
"private": true,
|
||||
"packageManager": "bun@1",
|
||||
"dependencies": {
|
||||
|
||||
9
frontend/public/earth/assets/brand/README.md
Normal file
9
frontend/public/earth/assets/brand/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
Earth brand runtime assets live in this folder.
|
||||
|
||||
- `earth-logo.png`
|
||||
- `title-zh.png`
|
||||
- `title-en.png`
|
||||
|
||||
These runtime images were generated from the uploaded SVG artwork so the Earth
|
||||
page can keep the intended look without tracking unusually large pixel-rect SVG
|
||||
exports in Git history.
|
||||
BIN
frontend/public/earth/assets/brand/earth-logo.png
Normal file
BIN
frontend/public/earth/assets/brand/earth-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 183 KiB |
BIN
frontend/public/earth/assets/brand/title-en.png
Normal file
BIN
frontend/public/earth/assets/brand/title-en.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 166 KiB |
BIN
frontend/public/earth/assets/brand/title-zh.png
Normal file
BIN
frontend/public/earth/assets/brand/title-zh.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.5 KiB |
@@ -9,23 +9,37 @@
|
||||
:root {
|
||||
--hud-scale: 1;
|
||||
--hud-offset: calc(20px * var(--hud-scale));
|
||||
--hud-radius: calc(20px * var(--hud-scale));
|
||||
--hud-panel-padding: calc(16px * var(--hud-scale));
|
||||
--hud-panel-padding-sm: calc(12px * var(--hud-scale));
|
||||
--hud-gap-xs: calc(6px * var(--hud-scale));
|
||||
--hud-gap-sm: calc(10px * var(--hud-scale));
|
||||
--hud-gap-md: calc(14px * var(--hud-scale));
|
||||
--hud-gap-lg: calc(18px * var(--hud-scale));
|
||||
--hud-radius: calc(22px * var(--hud-scale));
|
||||
--hud-panel-padding: calc(18px * var(--hud-scale));
|
||||
--hud-panel-padding-sm: calc(13px * var(--hud-scale));
|
||||
--hud-gap-xs: calc(7px * var(--hud-scale));
|
||||
--hud-gap-sm: calc(11px * var(--hud-scale));
|
||||
--hud-gap-md: calc(16px * var(--hud-scale));
|
||||
--hud-gap-lg: calc(22px * var(--hud-scale));
|
||||
--hud-font-size: calc(0.88rem * var(--hud-scale));
|
||||
--hud-font-size-sm: calc(0.76rem * var(--hud-scale));
|
||||
--hud-title-size: calc(1.05rem * var(--hud-scale));
|
||||
--hud-border: rgba(225, 242, 255, 0.2);
|
||||
--hud-border-hover: rgba(236, 248, 255, 0.34);
|
||||
--hud-border-active: rgba(240, 249, 255, 0.5);
|
||||
--glass-fill-top: rgba(255, 255, 255, 0.14);
|
||||
--glass-fill-bottom: rgba(118, 200, 255, 0.08);
|
||||
--glass-shadow: 0 18px 34px rgba(0, 0, 0, 0.22);
|
||||
--glass-glow: 0 0 26px rgba(145, 214, 255, 0.18);
|
||||
--hud-font-size-sm: calc(0.75rem * var(--hud-scale));
|
||||
--hud-title-size: calc(1.02rem * var(--hud-scale));
|
||||
--hud-kicker-size: calc(0.68rem * var(--hud-scale));
|
||||
--hud-surface-top: rgba(17, 31, 53, 0.84);
|
||||
--hud-surface-bottom: rgba(7, 17, 31, 0.76);
|
||||
--hud-surface-overlay: rgba(157, 204, 255, 0.07);
|
||||
--hud-border: rgba(201, 225, 247, 0.14);
|
||||
--hud-border-hover: rgba(226, 238, 250, 0.24);
|
||||
--hud-border-active: rgba(235, 244, 255, 0.32);
|
||||
--hud-shadow: 0 18px 46px rgba(1, 7, 16, 0.34);
|
||||
--hud-shadow-soft: 0 10px 28px rgba(3, 10, 22, 0.22);
|
||||
--hud-highlight: rgba(248, 252, 255, 0.14);
|
||||
--hud-line: rgba(197, 220, 242, 0.1);
|
||||
--hud-title: #dbe8f5;
|
||||
--hud-text: #eef4fb;
|
||||
--hud-text-muted: #8ea3ba;
|
||||
--hud-text-soft: #6f849b;
|
||||
--hud-accent: #91baff;
|
||||
--hud-accent-strong: #d7e8ff;
|
||||
--glass-fill-top: rgba(255, 255, 255, 0.08);
|
||||
--glass-fill-bottom: rgba(109, 157, 214, 0.04);
|
||||
--glass-shadow: 0 16px 36px rgba(0, 0, 0, 0.2);
|
||||
--glass-glow: 0 0 18px rgba(123, 176, 236, 0.08);
|
||||
}
|
||||
|
||||
* {
|
||||
|
||||
@@ -4,28 +4,30 @@
|
||||
top: var(--hud-offset);
|
||||
right: var(--hud-offset);
|
||||
border-radius: var(--hud-radius);
|
||||
padding: var(--hud-panel-padding-sm) var(--hud-panel-padding);
|
||||
padding: calc(14px * var(--hud-scale)) var(--hud-panel-padding);
|
||||
z-index: 10;
|
||||
font-size: var(--hud-font-size);
|
||||
min-width: calc(180px * var(--hud-scale));
|
||||
min-width: calc(196px * var(--hud-scale));
|
||||
}
|
||||
|
||||
.hud-panel-coordinates .coord-item {
|
||||
margin-bottom: var(--hud-gap-xs);
|
||||
margin-bottom: calc(8px * var(--hud-scale));
|
||||
}
|
||||
|
||||
.hud-panel-coordinates .earth-zoom-level {
|
||||
margin-top: var(--hud-gap-xs);
|
||||
color: #ffff44;
|
||||
font-weight: 500;
|
||||
margin-top: calc(10px * var(--hud-scale));
|
||||
padding-top: calc(10px * var(--hud-scale));
|
||||
border-top: 1px solid var(--hud-line);
|
||||
color: var(--hud-accent);
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
font-size: calc(1rem * var(--hud-scale));
|
||||
font-size: calc(0.94rem * var(--hud-scale));
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
|
||||
.hud-panel-coordinates .earth-mouse-coords {
|
||||
font-size: var(--hud-font-size-sm);
|
||||
color: #aaa;
|
||||
margin-top: var(--hud-gap-xs);
|
||||
padding-top: var(--hud-gap-xs);
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
color: var(--hud-text-muted);
|
||||
margin-top: calc(8px * var(--hud-scale));
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,22 @@
|
||||
right: var(--hud-offset);
|
||||
border-radius: var(--hud-radius);
|
||||
padding: var(--hud-panel-padding);
|
||||
width: calc(250px * var(--hud-scale));
|
||||
width: calc(264px * var(--hud-scale));
|
||||
z-index: 10;
|
||||
font-size: var(--hud-font-size);
|
||||
}
|
||||
|
||||
.hud-panel-stats .stats-item {
|
||||
margin-bottom: var(--hud-gap-sm);
|
||||
margin-bottom: 0;
|
||||
padding: calc(9px * var(--hud-scale)) 0;
|
||||
border-bottom: 1px solid rgba(214, 229, 245, 0.06);
|
||||
}
|
||||
|
||||
.hud-panel-stats .stats-item:last-child {
|
||||
border-bottom: none;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.hud-panel-stats .stats-item:first-of-type {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
@@ -5,28 +5,28 @@
|
||||
overflow: hidden;
|
||||
isolation: isolate;
|
||||
background:
|
||||
radial-gradient(circle at 24% 12%, rgba(255, 255, 255, 0.12), transparent 28%),
|
||||
radial-gradient(circle at 78% 115%, rgba(255, 255, 255, 0.06), transparent 32%),
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(110, 176, 255, 0.06)),
|
||||
rgba(7, 18, 36, 0.28);
|
||||
border: 1px solid rgba(225, 242, 255, 0.2);
|
||||
radial-gradient(circle at 18% 0%, rgba(255, 255, 255, 0.08), transparent 30%),
|
||||
radial-gradient(circle at 86% 115%, rgba(145, 186, 255, 0.08), transparent 36%),
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.05), transparent 26%),
|
||||
linear-gradient(180deg, var(--hud-surface-top), var(--hud-surface-bottom));
|
||||
border: 1px solid var(--hud-border);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.14),
|
||||
inset 0 -1px 0 rgba(255, 255, 255, 0.04),
|
||||
0 18px 40px rgba(0, 0, 0, 0.24),
|
||||
0 0 32px rgba(120, 200, 255, 0.12);
|
||||
backdrop-filter: blur(20px) saturate(145%);
|
||||
-webkit-backdrop-filter: blur(20px) saturate(145%);
|
||||
inset 0 1px 0 var(--hud-highlight),
|
||||
inset 0 -1px 0 rgba(255, 255, 255, 0.03),
|
||||
var(--hud-shadow),
|
||||
0 0 0 1px rgba(255, 255, 255, 0.02);
|
||||
backdrop-filter: blur(18px) saturate(125%);
|
||||
-webkit-backdrop-filter: blur(18px) saturate(125%);
|
||||
}
|
||||
|
||||
.hud-panel::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 1px 1px 24% 1px;
|
||||
inset: 1px 1px 52% 1px;
|
||||
border-radius: inherit;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.05) 26%, transparent 70%);
|
||||
opacity: 0.46;
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.02) 58%, transparent 100%);
|
||||
opacity: 0.52;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@@ -34,13 +34,13 @@
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: -1px;
|
||||
padding: 1.4px;
|
||||
padding: 1px;
|
||||
border-radius: inherit;
|
||||
background:
|
||||
linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(170, 223, 255, 0.2) 34%, rgba(88, 169, 255, 0.14) 68%, rgba(255, 255, 255, 0.24));
|
||||
opacity: 0.78;
|
||||
linear-gradient(135deg, rgba(244, 249, 255, 0.22), rgba(164, 194, 226, 0.08) 36%, rgba(90, 123, 161, 0.04) 70%, rgba(255, 255, 255, 0.16));
|
||||
opacity: 0.72;
|
||||
pointer-events: none;
|
||||
filter: url(#liquid-glass-distortion) blur(0.35px);
|
||||
filter: blur(0.2px);
|
||||
-webkit-mask:
|
||||
linear-gradient(#000 0 0) content-box,
|
||||
linear-gradient(#000 0 0);
|
||||
@@ -57,9 +57,11 @@
|
||||
}
|
||||
|
||||
.hud-panel-title {
|
||||
color: #4db8ff;
|
||||
color: var(--hud-title);
|
||||
margin: 0 0 var(--hud-gap-sm);
|
||||
font-size: var(--hud-title-size);
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.01em;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
@@ -69,6 +71,8 @@
|
||||
justify-content: space-between;
|
||||
gap: var(--hud-gap-sm);
|
||||
margin-bottom: var(--hud-gap-sm);
|
||||
padding-bottom: var(--hud-gap-sm);
|
||||
border-bottom: 1px solid var(--hud-line);
|
||||
}
|
||||
|
||||
.hud-panel-header .hud-panel-title {
|
||||
@@ -90,15 +94,20 @@
|
||||
height: calc(var(--hud-title-size) * 1.24);
|
||||
min-width: calc(var(--hud-title-size) * 1.24);
|
||||
padding: 0;
|
||||
border: 0;
|
||||
border: 1px solid rgba(220, 234, 248, 0.08);
|
||||
border-radius: 999px;
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
color: #d9efff;
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
color: var(--hud-text-muted);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
transition: background 0.18s ease, transform 0.18s ease, opacity 0.18s ease;
|
||||
transition:
|
||||
background 0.18s ease,
|
||||
border-color 0.18s ease,
|
||||
color 0.18s ease,
|
||||
transform 0.18s ease,
|
||||
opacity 0.18s ease;
|
||||
}
|
||||
|
||||
.hud-panel-close .material-symbols-rounded {
|
||||
@@ -107,8 +116,10 @@
|
||||
}
|
||||
|
||||
.hud-panel-close:hover {
|
||||
background: rgba(255, 255, 255, 0.14);
|
||||
transform: scale(1.04);
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
border-color: rgba(225, 239, 255, 0.14);
|
||||
color: var(--hud-accent-strong);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.hud-panel.is-dragging {
|
||||
@@ -132,15 +143,19 @@
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: var(--hud-gap-sm);
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.hud-panel-label {
|
||||
color: #aaa;
|
||||
color: var(--hud-text-soft);
|
||||
font-size: var(--hud-font-size-sm);
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hud-panel-value {
|
||||
color: #4db8ff;
|
||||
font-weight: 500;
|
||||
color: var(--hud-text);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.hud-error-message {
|
||||
@@ -159,15 +174,16 @@
|
||||
top: 20px;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -18px);
|
||||
background-color: rgba(10, 10, 30, 0.85);
|
||||
border-radius: 10px;
|
||||
padding: 10px 15px;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(18, 31, 52, 0.92), rgba(8, 18, 32, 0.9));
|
||||
border-radius: 14px;
|
||||
padding: 11px 15px;
|
||||
z-index: 210;
|
||||
box-shadow: 0 0 20px rgba(0, 150, 255, 0.3);
|
||||
border: 1px solid rgba(0, 150, 255, 0.2);
|
||||
box-shadow: var(--hud-shadow-soft);
|
||||
border: 1px solid var(--hud-border);
|
||||
font-size: 0.9rem;
|
||||
display: none;
|
||||
backdrop-filter: blur(5px);
|
||||
backdrop-filter: blur(10px);
|
||||
text-align: center;
|
||||
min-width: 180px;
|
||||
opacity: 0;
|
||||
@@ -182,31 +198,32 @@
|
||||
}
|
||||
|
||||
.earth-status-message.success {
|
||||
color: #44ff44;
|
||||
border-left: 3px solid #44ff44;
|
||||
color: #d8f7df;
|
||||
border-left: 3px solid #66d18f;
|
||||
}
|
||||
|
||||
.earth-status-message.warning {
|
||||
color: #ffff44;
|
||||
border-left: 3px solid #ffff44;
|
||||
color: #fff2c3;
|
||||
border-left: 3px solid #e4c464;
|
||||
}
|
||||
|
||||
.earth-status-message.error {
|
||||
color: #ff4444;
|
||||
border-left: 3px solid #ff4444;
|
||||
color: #ffd4d7;
|
||||
border-left: 3px solid #ff7b86;
|
||||
}
|
||||
|
||||
.earth-tooltip {
|
||||
position: absolute;
|
||||
background-color: rgba(10, 10, 30, 0.95);
|
||||
border: 1px solid #4db8ff;
|
||||
border-radius: 5px;
|
||||
padding: 5px 10px;
|
||||
font-size: 0.8rem;
|
||||
color: #fff;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(21, 37, 61, 0.96), rgba(8, 18, 31, 0.95));
|
||||
border: 1px solid rgba(214, 230, 247, 0.14);
|
||||
border-radius: 10px;
|
||||
padding: 8px 12px;
|
||||
font-size: 0.78rem;
|
||||
color: var(--hud-text);
|
||||
pointer-events: none;
|
||||
z-index: 100;
|
||||
box-shadow: 0 0 10px rgba(77, 184, 255, 0.3);
|
||||
box-shadow: var(--hud-shadow-soft);
|
||||
display: none;
|
||||
user-select: none;
|
||||
}
|
||||
@@ -225,9 +242,9 @@
|
||||
.earth-settings-backdrop {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(2, 8, 20, 0.38);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
background: rgba(2, 8, 20, 0.46);
|
||||
backdrop-filter: blur(14px);
|
||||
-webkit-backdrop-filter: blur(14px);
|
||||
}
|
||||
|
||||
.earth-settings-sheet {
|
||||
@@ -240,13 +257,25 @@
|
||||
max-height: calc(100vh - max(64px, 18vh));
|
||||
margin-inline: auto;
|
||||
transform: none;
|
||||
border-radius: calc(28px * var(--hud-scale));
|
||||
border-radius: calc(24px * var(--hud-scale));
|
||||
padding: calc(20px * var(--hud-scale));
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--hud-gap-md);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.earth-settings-sheet.liquid-glass-surface {
|
||||
animation: none;
|
||||
background:
|
||||
radial-gradient(circle at 18% 0%, rgba(255, 255, 255, 0.09), transparent 30%),
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.05), transparent 28%),
|
||||
linear-gradient(180deg, rgba(19, 34, 56, 0.92), rgba(8, 18, 31, 0.9));
|
||||
border-color: rgba(207, 224, 243, 0.12);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.08),
|
||||
0 24px 56px rgba(2, 7, 15, 0.4),
|
||||
0 0 0 1px rgba(255, 255, 255, 0.025);
|
||||
}
|
||||
|
||||
.earth-settings-sheet.liquid-glass-surface:hover,
|
||||
@@ -270,19 +299,19 @@
|
||||
justify-content: space-between;
|
||||
gap: var(--hud-gap-md);
|
||||
padding-bottom: var(--hud-gap-sm);
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-bottom: 1px solid var(--hud-line);
|
||||
}
|
||||
|
||||
.earth-settings-kicker {
|
||||
color: #9eb7d0;
|
||||
font-size: 0.78rem;
|
||||
letter-spacing: 0.08em;
|
||||
color: var(--hud-text-soft);
|
||||
font-size: var(--hud-kicker-size);
|
||||
letter-spacing: 0.16em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.earth-settings-title {
|
||||
margin: 4px 0 0;
|
||||
color: #eef7ff;
|
||||
color: var(--hud-title);
|
||||
}
|
||||
|
||||
.earth-settings-close {
|
||||
@@ -293,7 +322,7 @@
|
||||
overflow-y: auto;
|
||||
padding-right: 4px;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: rgba(160, 220, 255, 0.45) transparent;
|
||||
scrollbar-color: rgba(160, 186, 216, 0.34) transparent;
|
||||
}
|
||||
|
||||
.earth-settings-content::-webkit-scrollbar {
|
||||
@@ -305,7 +334,7 @@
|
||||
}
|
||||
|
||||
.earth-settings-content::-webkit-scrollbar-thumb {
|
||||
background: linear-gradient(180deg, rgba(210, 237, 255, 0.28), rgba(110, 176, 255, 0.34));
|
||||
background: linear-gradient(180deg, rgba(210, 225, 242, 0.2), rgba(126, 154, 185, 0.28));
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
@@ -315,9 +344,9 @@
|
||||
|
||||
.earth-settings-section-title {
|
||||
margin-bottom: 12px;
|
||||
color: #9eb7d0;
|
||||
font-size: 0.8rem;
|
||||
letter-spacing: 0.08em;
|
||||
color: var(--hud-text-soft);
|
||||
font-size: var(--hud-kicker-size);
|
||||
letter-spacing: 0.16em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@@ -332,11 +361,23 @@
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
padding: 14px 16px;
|
||||
border-radius: 18px;
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(92, 151, 218, 0.03));
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
padding: 15px 16px;
|
||||
border-radius: 16px;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent),
|
||||
rgba(255, 255, 255, 0.025);
|
||||
border: 1px solid rgba(212, 227, 244, 0.08);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
||||
cursor: pointer;
|
||||
transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
|
||||
}
|
||||
|
||||
.earth-settings-item:hover {
|
||||
background:
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent),
|
||||
rgba(255, 255, 255, 0.04);
|
||||
border-color: rgba(224, 236, 249, 0.14);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.earth-settings-copy {
|
||||
@@ -346,13 +387,13 @@
|
||||
}
|
||||
|
||||
.earth-settings-item-title {
|
||||
color: #eef7ff;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
color: var(--hud-text);
|
||||
font-size: calc(0.98rem * var(--hud-scale));
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.earth-settings-item-subtitle {
|
||||
color: #90a6bb;
|
||||
color: var(--hud-text-muted);
|
||||
font-size: 0.82rem;
|
||||
line-height: 1.4;
|
||||
}
|
||||
@@ -373,8 +414,8 @@
|
||||
width: 48px;
|
||||
height: 30px;
|
||||
border-radius: 999px;
|
||||
background: rgba(255, 255, 255, 0.14);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
border: 1px solid rgba(215, 229, 242, 0.12);
|
||||
position: relative;
|
||||
transition: background 0.18s ease, border-color 0.18s ease;
|
||||
}
|
||||
@@ -387,14 +428,14 @@
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 50%;
|
||||
background: #f5fbff;
|
||||
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.22);
|
||||
background: #edf4fc;
|
||||
box-shadow: 0 6px 14px rgba(1, 8, 18, 0.26);
|
||||
transition: transform 0.18s ease;
|
||||
}
|
||||
|
||||
.earth-settings-switch input:checked + .earth-settings-switch-track {
|
||||
background: linear-gradient(180deg, rgba(69, 171, 255, 0.92), rgba(34, 123, 255, 0.84));
|
||||
border-color: rgba(220, 243, 255, 0.36);
|
||||
background: linear-gradient(180deg, rgba(143, 185, 255, 0.72), rgba(104, 147, 221, 0.78));
|
||||
border-color: rgba(223, 236, 252, 0.28);
|
||||
}
|
||||
|
||||
.earth-settings-switch input:checked + .earth-settings-switch-track::after {
|
||||
|
||||
@@ -4,45 +4,97 @@
|
||||
top: var(--hud-offset);
|
||||
left: var(--hud-offset);
|
||||
border-radius: var(--hud-radius);
|
||||
padding: calc(20px * var(--hud-scale));
|
||||
width: calc(320px * var(--hud-scale));
|
||||
padding: calc(22px * var(--hud-scale));
|
||||
width: calc(336px * var(--hud-scale));
|
||||
z-index: 10;
|
||||
font-size: var(--hud-font-size);
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-app-title {
|
||||
font-size: calc(1.8rem * var(--hud-scale));
|
||||
margin-bottom: var(--hud-gap-xs);
|
||||
color: #4db8ff;
|
||||
text-shadow: 0 0 10px rgba(77, 184, 255, 0.5);
|
||||
text-align: center;
|
||||
.hud-panel-info .earth-brand {
|
||||
margin-bottom: calc(12px * var(--hud-scale));
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: calc(10px * var(--hud-scale));
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.hud-panel-info .subtitle {
|
||||
margin-bottom: calc(20px * var(--hud-scale));
|
||||
border-bottom: 1px solid rgba(255,255,255,0.1);
|
||||
padding-bottom: calc(12px * var(--hud-scale));
|
||||
text-align: center;
|
||||
.hud-panel-info .earth-brand__logo {
|
||||
display: block;
|
||||
flex: 0 0 auto;
|
||||
width: min(calc(148px * var(--hud-scale)), 41%);
|
||||
height: auto;
|
||||
object-fit: contain;
|
||||
image-rendering: auto;
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand__copy {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
gap: calc(8px * var(--hud-scale));
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand__title {
|
||||
display: block;
|
||||
width: min(100%, calc(196px * var(--hud-scale)));
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
object-fit: contain;
|
||||
image-rendering: auto;
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand__meta {
|
||||
text-align: left;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
align-items: flex-start;
|
||||
gap: calc(4px * var(--hud-scale));
|
||||
}
|
||||
|
||||
.hud-panel-info .subtitle-main {
|
||||
color: #d7e7f5;
|
||||
font-size: calc(0.95rem * var(--hud-scale));
|
||||
line-height: 1.35;
|
||||
.hud-panel-info .earth-brand__subtitle {
|
||||
color: var(--hud-text-muted);
|
||||
font-size: calc(0.84rem * var(--hud-scale));
|
||||
line-height: 1.38;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.02em;
|
||||
letter-spacing: 0.015em;
|
||||
}
|
||||
|
||||
.hud-panel-info .subtitle-meta {
|
||||
color: #8ea5bc;
|
||||
font-size: calc(0.74rem * var(--hud-scale));
|
||||
line-height: 1.3;
|
||||
.hud-panel-info .earth-brand__description {
|
||||
color: var(--hud-text-soft);
|
||||
font-size: calc(0.66rem * var(--hud-scale));
|
||||
line-height: 1.35;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand--en .earth-brand__logo {
|
||||
width: min(calc(140px * var(--hud-scale)), 39%);
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand--en .earth-brand__title {
|
||||
width: min(100%, calc(208px * var(--hud-scale)));
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand--en .earth-brand__meta {
|
||||
gap: calc(3px * var(--hud-scale));
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand--en .earth-brand__subtitle,
|
||||
.hud-panel-info .earth-brand--en .earth-brand__description {
|
||||
font-family: "Roboto Condensed", "Arial Narrow", "Trebuchet MS", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand--en .earth-brand__subtitle {
|
||||
font-size: calc(0.84rem * var(--hud-scale));
|
||||
line-height: 1.26;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
|
||||
.hud-panel-info .earth-brand--en .earth-brand__description {
|
||||
font-size: calc(0.66rem * var(--hud-scale));
|
||||
line-height: 1.24;
|
||||
letter-spacing: 0.045em;
|
||||
}
|
||||
|
||||
/* Info Card - Unified details panel (inside info-panel) */
|
||||
@@ -50,13 +102,13 @@
|
||||
display: none;
|
||||
margin-top: var(--hud-gap-lg);
|
||||
background:
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(110, 176, 255, 0.04)),
|
||||
rgba(7, 18, 36, 0.2);
|
||||
border-radius: calc(14px * var(--hud-scale));
|
||||
border: 1px solid rgba(225, 242, 255, 0.12);
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 48%),
|
||||
rgba(255, 255, 255, 0.025);
|
||||
border-radius: calc(18px * var(--hud-scale));
|
||||
border: 1px solid rgba(214, 229, 245, 0.08);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.08),
|
||||
0 10px 24px rgba(0, 0, 0, 0.16);
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.05),
|
||||
0 12px 28px rgba(0, 0, 0, 0.14);
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
pointer-events: auto;
|
||||
@@ -70,8 +122,9 @@
|
||||
.info-card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: calc(10px * var(--hud-scale)) calc(12px * var(--hud-scale));
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(77, 184, 255, 0.06));
|
||||
padding: calc(12px * var(--hud-scale)) calc(14px * var(--hud-scale));
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.015));
|
||||
border-bottom: 1px solid var(--hud-line);
|
||||
gap: var(--hud-gap-sm);
|
||||
}
|
||||
|
||||
@@ -82,16 +135,17 @@
|
||||
.info-card-header h3 {
|
||||
flex: 1;
|
||||
margin: 0;
|
||||
font-size: calc(1rem * var(--hud-scale));
|
||||
color: #4db8ff;
|
||||
font-size: calc(0.96rem * var(--hud-scale));
|
||||
color: var(--hud-title);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.info-card-content {
|
||||
padding: calc(10px * var(--hud-scale)) calc(12px * var(--hud-scale));
|
||||
padding: calc(12px * var(--hud-scale)) calc(14px * var(--hud-scale));
|
||||
max-height: 40vh;
|
||||
overflow-y: auto;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: rgba(160, 220, 255, 0.45) transparent;
|
||||
scrollbar-color: rgba(160, 186, 216, 0.34) transparent;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
@@ -104,19 +158,20 @@
|
||||
}
|
||||
|
||||
.info-card-content::-webkit-scrollbar-thumb {
|
||||
background: linear-gradient(180deg, rgba(210, 237, 255, 0.32), rgba(110, 176, 255, 0.34));
|
||||
background: linear-gradient(180deg, rgba(210, 225, 242, 0.2), rgba(126, 154, 185, 0.28));
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.info-card-content::-webkit-scrollbar-thumb:hover {
|
||||
background: linear-gradient(180deg, rgba(232, 246, 255, 0.42), rgba(128, 198, 255, 0.46));
|
||||
background: linear-gradient(180deg, rgba(226, 236, 246, 0.28), rgba(136, 164, 196, 0.34));
|
||||
}
|
||||
|
||||
.info-card-property {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: calc(6px * var(--hud-scale));
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
||||
align-items: flex-start;
|
||||
padding: calc(8px * var(--hud-scale)) 0;
|
||||
border-bottom: 1px solid rgba(214, 229, 245, 0.06);
|
||||
pointer-events: auto;
|
||||
gap: var(--hud-gap-sm);
|
||||
}
|
||||
@@ -126,22 +181,25 @@
|
||||
}
|
||||
|
||||
.info-card-label {
|
||||
color: #aaa;
|
||||
font-size: calc(0.85rem * var(--hud-scale));
|
||||
color: var(--hud-text-soft);
|
||||
font-size: calc(0.72rem * var(--hud-scale));
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
cursor: pointer;
|
||||
transition: color 0.18s ease;
|
||||
}
|
||||
|
||||
.info-card-label:hover {
|
||||
color: #d9f1ff;
|
||||
color: var(--hud-text-muted);
|
||||
}
|
||||
|
||||
.info-card-value {
|
||||
color: #4db8ff;
|
||||
font-weight: 500;
|
||||
font-size: calc(0.9rem * var(--hud-scale));
|
||||
color: var(--hud-text);
|
||||
font-weight: 600;
|
||||
font-size: calc(0.88rem * var(--hud-scale));
|
||||
line-height: 1.45;
|
||||
text-align: right;
|
||||
max-width: calc(180px * var(--hud-scale));
|
||||
max-width: calc(190px * var(--hud-scale));
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,24 +5,24 @@
|
||||
left: var(--hud-offset);
|
||||
border-radius: var(--hud-radius);
|
||||
padding: var(--hud-panel-padding);
|
||||
width: calc(220px * var(--hud-scale));
|
||||
width: calc(236px * var(--hud-scale));
|
||||
z-index: 10;
|
||||
font-size: var(--hud-font-size);
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-title {
|
||||
margin-bottom: var(--hud-gap-md);
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--hud-gap-sm);
|
||||
max-height: calc(202px * var(--hud-scale));
|
||||
gap: calc(9px * var(--hud-scale));
|
||||
max-height: calc(214px * var(--hud-scale));
|
||||
overflow-y: auto;
|
||||
padding-right: calc(4px * var(--hud-scale));
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: rgba(160, 220, 255, 0.4) transparent;
|
||||
scrollbar-color: rgba(160, 186, 216, 0.32) transparent;
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-list::-webkit-scrollbar {
|
||||
@@ -34,27 +34,38 @@
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-list::-webkit-scrollbar-thumb {
|
||||
background: linear-gradient(180deg, rgba(210, 237, 255, 0.28), rgba(110, 176, 255, 0.34));
|
||||
background: linear-gradient(180deg, rgba(210, 225, 242, 0.2), rgba(126, 154, 185, 0.28));
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: calc(6px * var(--hud-scale)) calc(8px * var(--hud-scale));
|
||||
border-radius: calc(10px * var(--hud-scale));
|
||||
background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(120, 180, 255, 0.02));
|
||||
border: 1px solid rgba(225, 242, 255, 0.06);
|
||||
gap: calc(10px * var(--hud-scale));
|
||||
padding: calc(9px * var(--hud-scale)) calc(10px * var(--hud-scale));
|
||||
border-radius: calc(14px * var(--hud-scale));
|
||||
background:
|
||||
linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent),
|
||||
rgba(255, 255, 255, 0.018);
|
||||
border: 1px solid rgba(214, 229, 245, 0.07);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.035);
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-color {
|
||||
width: calc(20px * var(--hud-scale));
|
||||
height: calc(20px * var(--hud-scale));
|
||||
border-radius: calc(6px * var(--hud-scale));
|
||||
margin-right: var(--hud-gap-md);
|
||||
width: calc(16px * var(--hud-scale));
|
||||
height: calc(16px * var(--hud-scale));
|
||||
border-radius: 999px;
|
||||
margin-right: 0;
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.2),
|
||||
0 0 12px rgba(77, 184, 255, 0.18);
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.28),
|
||||
0 0 0 3px rgba(255, 255, 255, 0.04);
|
||||
}
|
||||
|
||||
.hud-panel-legend .legend-item span {
|
||||
color: var(--hud-text);
|
||||
font-size: calc(0.84rem * var(--hud-scale));
|
||||
font-weight: 500;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
.legend-color-americas {
|
||||
|
||||
@@ -415,6 +415,9 @@
|
||||
|
||||
.earth-zoom-toolbar .earth-zoom-btn {
|
||||
height: 42px;
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.earth-zoom-toolbar .earth-zoom-value {
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
<link rel="stylesheet" href="css/coordinates-display.css">
|
||||
<link rel="stylesheet" href="css/legend.css">
|
||||
<link rel="stylesheet" href="css/earth-stats.css">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400;500;600&display=swap">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@24,500,0,0">
|
||||
</head>
|
||||
<body class="earth-page">
|
||||
@@ -48,11 +49,7 @@
|
||||
</svg>
|
||||
<div id="container" class="earth-app">
|
||||
<div id="info-panel" class="hud-panel hud-panel-info">
|
||||
<h1 class="earth-app-title">智能星球计划</h1>
|
||||
<div class="subtitle">
|
||||
<span class="subtitle-main">现实层宇宙全息感知系统</span>
|
||||
<span class="subtitle-meta">卫星 · 海底光缆 · 算力基础设施</span>
|
||||
</div>
|
||||
<div id="brand-root"></div>
|
||||
|
||||
<div id="info-card" class="info-card">
|
||||
<div class="info-card-header">
|
||||
@@ -137,9 +134,9 @@
|
||||
<span class="tooltip earth-toolbar-tooltip">缩放控制</span>
|
||||
</button>
|
||||
<div id="zoom-toolbar" class="earth-stack-toolbar earth-zoom-toolbar">
|
||||
<button id="zoom-in" class="liquid-glass-surface earth-zoom-btn" title="放大">+<span class="tooltip earth-toolbar-tooltip">放大</span></button>
|
||||
<button id="zoom-in" class="liquid-glass-surface earth-zoom-btn" title="放大" aria-label="放大"><span aria-hidden="true">+</span></button>
|
||||
<span id="zoom-value" class="liquid-glass-surface earth-zoom-value" title="重置缩放到100%">100%<span class="tooltip earth-toolbar-tooltip">重置缩放到100%</span></span>
|
||||
<button id="zoom-out" class="liquid-glass-surface earth-zoom-btn" title="缩小">−<span class="tooltip earth-toolbar-tooltip">缩小</span></button>
|
||||
<button id="zoom-out" class="liquid-glass-surface earth-zoom-btn" title="缩小" aria-label="缩小"><span aria-hidden="true">−</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<button id="settings-trigger" class="floating-btn liquid-glass-surface earth-toolbar-btn" title="设置">
|
||||
|
||||
55
frontend/public/earth/js/brand.js
Normal file
55
frontend/public/earth/js/brand.js
Normal file
@@ -0,0 +1,55 @@
|
||||
const BRANDS = {
|
||||
zh: {
|
||||
ariaLabel: "智能星球计划品牌标识",
|
||||
titleAlt: "智能星球计划",
|
||||
titleSrc: "assets/brand/title-zh.png",
|
||||
subtitle: "现实层宇宙全息感知系统",
|
||||
description: "卫星 · 海底光缆 · 算力基础设施",
|
||||
},
|
||||
en: {
|
||||
ariaLabel: "Intelligent Planet Program brand banner",
|
||||
titleAlt: "Intelligent Planet Program",
|
||||
titleSrc: "assets/brand/title-en.png",
|
||||
subtitle: "Physical-Universe Holography",
|
||||
description: "Satellites · Cables · Compute Infra",
|
||||
},
|
||||
};
|
||||
|
||||
function getBrandConfig(variant = "zh") {
|
||||
return BRANDS[variant] ?? BRANDS.zh;
|
||||
}
|
||||
|
||||
export function renderBrand(variant = "zh") {
|
||||
const config = getBrandConfig(variant);
|
||||
|
||||
return `
|
||||
<div class="earth-brand earth-brand--${variant}" aria-label="${config.ariaLabel}">
|
||||
<img
|
||||
class="earth-brand__logo"
|
||||
src="assets/brand/earth-logo.png"
|
||||
alt=""
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div class="earth-brand__copy">
|
||||
<img
|
||||
class="earth-brand__title"
|
||||
src="${config.titleSrc}"
|
||||
alt="${config.titleAlt}"
|
||||
>
|
||||
<div class="earth-brand__meta">
|
||||
<span class="earth-brand__subtitle">${config.subtitle}</span>
|
||||
<span class="earth-brand__description">${config.description}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`.trim();
|
||||
}
|
||||
|
||||
export function mountBrand(target, variant = "zh") {
|
||||
if (!target) return;
|
||||
target.innerHTML = renderBrand(variant);
|
||||
}
|
||||
|
||||
export function getBrandVariants() {
|
||||
return Object.keys(BRANDS);
|
||||
}
|
||||
@@ -17,6 +17,7 @@ export const HUD_CONFIG = {
|
||||
scaleReferenceHeight: 1080,
|
||||
minScale: 0.7,
|
||||
maxScale: 1,
|
||||
brandLanguage: "zh",
|
||||
};
|
||||
|
||||
// Earth coordinate constants
|
||||
|
||||
@@ -123,6 +123,7 @@ import {
|
||||
refreshLegend,
|
||||
setLegendItems,
|
||||
} from "./legend.js";
|
||||
import { mountBrand } from "./brand.js";
|
||||
|
||||
export let scene;
|
||||
export let camera;
|
||||
@@ -853,6 +854,11 @@ export function init() {
|
||||
initialized = true;
|
||||
simplex = createNoise3D();
|
||||
updateHudScale();
|
||||
const brandRoot = document.getElementById("brand-root");
|
||||
mountBrand(
|
||||
brandRoot,
|
||||
HUD_CONFIG.brandLanguage || "zh",
|
||||
);
|
||||
|
||||
scene = new THREE.Scene();
|
||||
camera = new THREE.PerspectiveCamera(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "planet"
|
||||
version = "0.25.2"
|
||||
version = "0.25.3"
|
||||
description = "智能星球计划 - 态势感知系统"
|
||||
requires-python = ">=3.14"
|
||||
dependencies = [
|
||||
|
||||
Reference in New Issue
Block a user