Files
planet/frontend/public/earth/css/info-panel.css
rayd1o 81970a1d05
Some checks failed
ci / backend (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / delivery (push) Has been cancelled
release / images (push) Has been cancelled
release: bump version to 0.60.0
2026-05-17 02:50:42 +08:00

723 lines
18 KiB
CSS

/* info-panel.css — brand panel + detail card */
/* ── Left column wrapper ──────────────────────────────────────── */
.earth-left-column {
position: absolute;
top: var(--hud-offset);
left: var(--hud-offset);
display: flex;
flex-direction: column;
z-index: 10;
pointer-events: none;
/* Width is set by the widest child (brand or info card) */
max-width: min(calc(340px * var(--hud-scale)), calc(100vw - 32px));
}
.earth-left-column > * {
position: relative; /* override .hud-panel position:absolute */
pointer-events: auto;
width: 100%;
box-sizing: border-box;
}
/* ── Brand panel ──────────────────────────────────────────────── */
.hud-panel-brand {
--brand-scale: 0.88;
--brand-copy-width: 160px;
padding: calc(10px * var(--hud-scale)) calc(4px * var(--hud-scale)) calc(12px * var(--hud-scale)) 0;
display: flex;
align-items: center;
justify-content: flex-start;
/* Reserve full panel height before brand images load */
min-height: calc(66px * var(--hud-scale));
background: transparent;
border: 0;
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
isolation: isolate;
}
.hud-panel-brand::before,
.hud-panel-brand::after {
display: none;
}
.hud-panel-brand .earth-brand {
display: flex;
align-items: center;
gap: calc(10px * var(--hud-scale) * var(--brand-scale));
min-width: 0;
position: relative;
}
.hud-panel-brand .earth-brand::after {
content: "";
position: absolute;
inset: calc(4px * var(--hud-scale)) calc(-10px * var(--hud-scale)) calc(6px * var(--hud-scale)) calc(-10px * var(--hud-scale));
background:
radial-gradient(circle at 18% 50%, rgba(145, 186, 255, 0.14), transparent 32%),
linear-gradient(90deg, rgba(145, 186, 255, 0.05), transparent 58%);
opacity: 0.75;
pointer-events: none;
filter: blur(14px);
z-index: -1;
}
.hud-panel-brand .earth-brand__logo {
display: block;
flex: 0 0 auto;
width: calc(128px * var(--hud-scale) * var(--brand-scale));
height: calc(128px * var(--hud-scale) * var(--brand-scale));
object-fit: contain;
}
.hud-panel-brand .earth-brand__copy {
display: flex;
flex: 0 0 auto;
flex-direction: column;
justify-content: center;
gap: calc(5px * var(--hud-scale) * var(--brand-scale));
width: calc(var(--brand-copy-width) * var(--hud-scale) * var(--brand-scale));
}
.hud-panel-brand .earth-brand__title {
display: block;
width: min(100%, calc(var(--brand-copy-width) * var(--hud-scale) * var(--brand-scale)));
max-width: 100%;
height: auto;
min-height: calc(20px * var(--hud-scale) * var(--brand-scale));
object-fit: contain;
}
.hud-panel-brand .earth-brand__title-text {
color: var(--hud-text);
font-size: calc(1rem * var(--hud-scale) * var(--brand-scale));
line-height: 1.18;
font-weight: 700;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.hud-panel-brand .earth-brand__meta {
display: flex;
flex-direction: column;
gap: calc(2px * var(--hud-scale) * var(--brand-scale));
width: fit-content;
}
.hud-panel-brand .earth-brand__subtitle {
color: var(--hud-text-muted);
font-size: calc(0.74rem * var(--hud-scale) * var(--brand-scale));
line-height: 1.3;
font-weight: 500;
letter-spacing: 0.01em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.hud-panel-brand .earth-brand__description {
color: var(--hud-text-soft);
font-size: calc(0.6rem * var(--hud-scale) * var(--brand-scale));
line-height: 1.3;
letter-spacing: 0.08em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.hud-panel-brand .earth-brand--en {
--brand-copy-width: 172px;
}
.hud-panel-brand .earth-brand--en .earth-brand__title {
width: min(100%, calc(var(--brand-copy-width) * var(--hud-scale) * var(--brand-scale)));
}
.hud-panel-brand .earth-brand--en .earth-brand__copy {
width: calc(var(--brand-copy-width) * var(--hud-scale) * var(--brand-scale));
}
.hud-panel-brand .earth-brand--en .earth-brand__subtitle,
.hud-panel-brand .earth-brand--en .earth-brand__description {
font-family: "Roboto Condensed", "Arial Narrow", "Trebuchet MS", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
/* ── Info detail panel (floating, positioned near click by JS) ── */
.hud-panel-info {
position: absolute;
z-index: 50;
width: min(calc(300px * var(--hud-scale)), calc(100vw - 32px));
border-radius: 0;
padding: 0;
overflow: hidden;
/* Start hidden */
opacity: 0;
transform: scale(0.94) translateY(4px);
pointer-events: none;
transition:
opacity 0.22s ease,
transform 0.22s ease;
visibility: hidden;
user-select: none;
-webkit-user-select: none;
}
.hud-panel-info.is-visible {
opacity: 1;
transform: scale(1) translateY(0);
pointer-events: auto;
visibility: visible;
}
.hud-panel-info.hud-panel-info--anchor-stable {
transform: none;
transition: opacity 0.22s ease;
}
.hud-panel-info.hud-panel-info--anchor-stable.is-visible {
transform: none;
}
.callout-connector {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
overflow: visible;
opacity: 0;
pointer-events: none;
transition: opacity 0.22s ease;
z-index: 49;
}
.callout-connector polyline {
fill: none;
stroke: rgba(255, 255, 255, 0.98);
stroke-width: 2.15;
stroke-linecap: round;
stroke-linejoin: round;
filter:
drop-shadow(0 0 1px rgba(6, 14, 28, 0.72))
drop-shadow(0 0 2px rgba(6, 14, 28, 0.56))
drop-shadow(0 0 6px rgba(8, 20, 36, 0.1));
}
.callout-connector circle {
fill: rgba(255, 255, 255, 0.98);
stroke: rgba(7, 16, 32, 0.72);
stroke-width: 1.0;
filter:
drop-shadow(0 0 1px rgba(6, 14, 28, 0.72))
drop-shadow(0 0 2px rgba(6, 14, 28, 0.54))
drop-shadow(0 0 6px rgba(8, 20, 36, 0.1));
transform-box: fill-box;
transform-origin: center;
}
.callout-connector.is-visible {
opacity: 1;
}
.callout-connector.is-animating polyline {
animation: calloutConnectorDraw 0.42s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}
.callout-connector.is-animating circle {
opacity: 0;
}
.callout-connector.is-animating circle:first-of-type {
animation: calloutConnectorNodeIn 0.14s ease forwards;
animation-delay: 0.02s;
}
.callout-connector.is-animating circle:last-of-type {
animation: calloutConnectorNodeIn 0.16s ease forwards;
animation-delay: 0.34s;
}
@keyframes calloutConnectorDraw {
from {
stroke-dashoffset: var(--connector-length, 0px);
}
to {
stroke-dashoffset: 0px;
}
}
@keyframes calloutConnectorNodeIn {
from {
opacity: 0;
transform: scale(0.72);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* ── Info Card ────────────────────────────────────────────────── */
.info-card {
display: block;
}
.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.05), rgba(255, 255, 255, 0.015));
border-bottom: 1px solid var(--hud-line);
gap: var(--hud-gap-xs);
}
.info-card-icon {
font-size: calc(16px * var(--hud-scale));
flex-shrink: 0;
}
.info-card-header h3 {
flex: 1;
margin: 0;
font-size: var(--hud-panel-header-title-size);
color: var(--hud-title);
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.info-card-close {
flex-shrink: 0;
align-self: auto;
width: auto;
height: auto;
min-width: 0;
padding: calc(7px * var(--hud-scale));
}
.info-card-close .material-symbols-rounded {
font-size: calc(16px * var(--hud-scale));
}
.info-card-content {
padding: calc(8px * var(--hud-scale)) calc(12px * var(--hud-scale));
max-height: 58vh;
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: rgba(160, 186, 216, 0.34) transparent;
pointer-events: auto;
user-select: none;
-webkit-user-select: none;
}
.info-card.compute_unresolved .info-card-content {
max-height: min(calc(330px * var(--hud-scale)), calc(100vh - 180px));
}
.info-card-content::-webkit-scrollbar {
width: 4px;
}
.info-card-content::-webkit-scrollbar-track {
background: transparent;
}
.info-card-content::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, rgba(210, 225, 242, 0.2), rgba(126, 154, 185, 0.28));
border-radius: 999px;
}
.info-card-property {
display: flex;
justify-content: space-between;
align-items: flex-start;
padding: calc(6px * var(--hud-scale)) 0;
border-bottom: 1px solid rgba(214, 229, 245, 0.06);
pointer-events: auto;
gap: var(--hud-gap-sm);
}
.info-card-property:last-child {
border-bottom: none;
}
.info-card-label {
color: var(--hud-text-soft);
font-size: calc(0.68rem * var(--hud-scale));
letter-spacing: 0.1em;
text-transform: uppercase;
cursor: pointer;
flex-shrink: 0;
transition: color 0.18s ease;
user-select: none;
-webkit-user-select: none;
}
.info-card-label:hover {
color: var(--hud-text-muted);
}
.info-card-value {
color: var(--hud-text);
font-weight: 600;
font-size: calc(0.82rem * var(--hud-scale));
line-height: 1.45;
text-align: right;
max-width: calc(180px * var(--hud-scale));
word-break: break-word;
user-select: none;
-webkit-user-select: none;
}
/* Type-specific header accent colors */
.info-card.cable .info-card-header {
background: rgba(255, 200, 0, 0.12);
border-bottom-color: rgba(255, 200, 0, 0.15);
}
.info-card.cable .info-card-header h3 { color: #ffc800; }
.info-card.satellite .info-card-header {
background: rgba(0, 229, 255, 0.12);
border-bottom-color: rgba(0, 229, 255, 0.15);
}
.info-card.satellite .info-card-header h3 { color: #00e5ff; }
.info-card.bgp .info-card-header {
background: rgba(120, 180, 255, 0.12);
border-bottom-color: rgba(120, 180, 255, 0.15);
}
.info-card.bgp .info-card-header h3 { color: var(--hud-accent-strong); }
.info-card.news .info-card-header {
background: rgba(255, 196, 92, 0.12);
border-bottom-color: rgba(255, 196, 92, 0.16);
}
.info-card.news .info-card-header h3 { color: #ffd77a; }
.info-card.news .info-card-content {
padding-top: calc(10px * var(--hud-scale));
padding-bottom: calc(12px * var(--hud-scale));
}
.info-card-news-layout {
display: grid;
gap: calc(10px * var(--hud-scale));
}
.info-card-news-kicker {
color: rgba(255, 215, 122, 0.82);
font-size: calc(0.62rem * var(--hud-scale));
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.info-card-news-title {
color: var(--hud-title);
font-size: calc(0.96rem * var(--hud-scale));
line-height: 1.45;
font-weight: 700;
text-wrap: balance;
}
.info-card-news-summary-shell {
position: relative;
padding: calc(10px * var(--hud-scale)) calc(12px * var(--hud-scale));
border: 1px solid rgba(255, 215, 122, 0.12);
background:
linear-gradient(180deg, rgba(255, 215, 122, 0.05), rgba(255, 255, 255, 0.02)),
radial-gradient(circle at top left, rgba(120, 180, 255, 0.08), transparent 56%),
rgba(7, 15, 29, 0.42);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.05),
0 10px 28px rgba(0, 0, 0, 0.16);
overflow: hidden;
}
.info-card-news-summary-shell::before {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(90deg, transparent 0%, rgba(122, 180, 255, 0.12) 50%, transparent 100%);
opacity: 0.42;
transform: translateX(-100%);
animation: infoCardNewsScan 3.2s linear infinite;
pointer-events: none;
}
.info-card-news-summary-label {
color: rgba(188, 212, 238, 0.72);
font-size: calc(0.6rem * var(--hud-scale));
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
margin-bottom: calc(6px * var(--hud-scale));
}
.info-card-news-summary {
position: relative;
color: #d7e6f7;
font-size: calc(0.8rem * var(--hud-scale));
line-height: 1.65;
min-height: calc(4.8em * var(--hud-scale));
white-space: pre-wrap;
word-break: break-word;
}
.info-card-news-summary.is-typing::after {
content: "";
display: inline-block;
width: 0.58em;
height: 1.05em;
margin-left: 0.16em;
vertical-align: -0.14em;
background: linear-gradient(180deg, rgba(255, 215, 122, 0.96), rgba(122, 180, 255, 0.78));
box-shadow: 0 0 10px rgba(255, 215, 122, 0.28);
animation: infoCardNewsCaret 0.9s steps(1, end) infinite;
}
@keyframes infoCardNewsScan {
from {
transform: translateX(-100%);
}
to {
transform: translateX(100%);
}
}
@keyframes infoCardNewsCaret {
0%, 49% {
opacity: 1;
}
50%, 100% {
opacity: 0;
}
}
/* ── Layout-expanded: slide left column off-screen ────────────── */
.earth-app.layout-expanded .earth-left-column {
transform: translate(calc(-100% + var(--hud-offset)), 0);
}
.layout-mode-mobile .earth-left-column {
top: calc(8px + var(--safe-top));
left: 8px;
max-width: min(300px, calc(100vw - 16px));
}
.layout-mode-mobile .hud-panel-info {
position: fixed;
left: 8px !important;
right: 8px !important;
top: auto !important;
bottom: calc(84px + var(--safe-bottom)) !important;
width: auto;
max-width: none;
max-height: min(58vh, 520px);
z-index: 240;
}
.layout-mode-mobile .info-card-header {
cursor: default;
}
.layout-mode-mobile .info-card-content {
max-height: min(46vh, 420px);
}
.layout-mode-mobile .info-card-property {
flex-direction: column;
align-items: stretch;
}
.layout-mode-mobile .info-card-value {
max-width: none;
text-align: left;
}
.info-card-compute-collect {
margin-top: calc(8px * var(--hud-scale));
padding-top: calc(8px * var(--hud-scale));
border-top: 1px solid rgba(214, 229, 245, 0.06);
pointer-events: auto;
}
.info-card-compute-collect-button {
display: inline-flex;
align-items: center;
gap: 4px;
padding: calc(3px * var(--hud-scale)) calc(8px * var(--hud-scale));
background: transparent;
color: var(--hud-text-soft);
border: 1px solid rgba(214, 229, 245, 0.18);
border-radius: 4px;
cursor: pointer;
font-size: calc(0.7rem * var(--hud-scale));
letter-spacing: 0.04em;
transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
.info-card-compute-collect-button:hover:not(:disabled) {
color: #c9dcff;
background: rgba(72, 138, 255, 0.14);
border-color: rgba(72, 138, 255, 0.45);
}
.info-card-compute-collect-button:disabled {
opacity: 0.55;
cursor: progress;
}
.info-card-compute-collect-button .material-symbols-rounded {
font-size: calc(13px * var(--hud-scale));
}
.info-card-compute-collect-status {
margin-top: calc(8px * var(--hud-scale));
color: var(--hud-text-soft);
font-size: calc(0.7rem * var(--hud-scale));
}
.info-card-compute-collect-candidates {
margin-top: calc(6px * var(--hud-scale));
display: flex;
flex-direction: column;
gap: calc(6px * var(--hud-scale));
}
.info-card-compute-candidate {
background: rgba(214, 229, 245, 0.04);
border: 1px solid rgba(214, 229, 245, 0.08);
border-radius: 6px;
padding: calc(6px * var(--hud-scale)) calc(8px * var(--hud-scale));
font-size: calc(0.7rem * var(--hud-scale));
}
.info-card-compute-candidate.is-best {
border-color: rgba(72, 138, 255, 0.5);
background: rgba(72, 138, 255, 0.1);
}
.info-card-compute-candidate-line {
display: flex;
justify-content: space-between;
gap: 8px;
align-items: center;
}
.info-card-compute-candidate-precision {
color: #cfe1ff;
font-weight: 600;
}
.info-card-compute-candidate-preview {
background: transparent;
color: #c9dcff;
border: 1px solid rgba(214, 229, 245, 0.18);
border-radius: 4px;
cursor: pointer;
padding: 2px 6px;
font-size: calc(0.68rem * var(--hud-scale));
}
.info-card-compute-candidate-preview:hover {
background: rgba(72, 138, 255, 0.18);
}
.info-card-unresolved-summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: calc(8px * var(--hud-scale));
padding: calc(4px * var(--hud-scale)) 0 calc(8px * var(--hud-scale));
color: var(--hud-text-soft);
font-size: calc(0.72rem * var(--hud-scale));
line-height: 1.35;
}
.info-card-unresolved-summary > span {
min-width: 0;
}
.info-card-unresolved-list {
display: flex;
flex-direction: column;
gap: calc(7px * var(--hud-scale));
}
.info-card-unresolved-item {
padding: calc(7px * var(--hud-scale)) calc(8px * var(--hud-scale));
border: 1px solid rgba(214, 229, 245, 0.08);
border-radius: 6px;
background: rgba(214, 229, 245, 0.035);
pointer-events: auto;
}
.info-card-unresolved-main {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
align-items: center;
gap: calc(8px * var(--hud-scale));
}
.info-card-unresolved-index {
display: inline-flex;
align-items: center;
justify-content: center;
width: calc(18px * var(--hud-scale));
height: calc(18px * var(--hud-scale));
border-radius: 999px;
background: rgba(255, 171, 81, 0.14);
color: #ffd59b;
font-size: calc(0.62rem * var(--hud-scale));
font-weight: 700;
font-variant-numeric: tabular-nums;
}
.info-card-unresolved-copy {
min-width: 0;
}
.info-card-unresolved-name {
overflow: hidden;
color: var(--hud-title);
font-size: calc(0.78rem * var(--hud-scale));
font-weight: 600;
line-height: 1.3;
text-overflow: ellipsis;
white-space: nowrap;
}
.info-card-unresolved-meta {
overflow: hidden;
color: var(--hud-text-soft);
font-size: calc(0.64rem * var(--hud-scale));
line-height: 1.3;
text-overflow: ellipsis;
white-space: nowrap;
}
.info-card-unresolved-adopt {
color: #ffe0aa;
border-color: rgba(255, 171, 81, 0.32);
}
.info-card-unresolved-adopt:hover {
background: rgba(255, 171, 81, 0.16);
}
.info-card-unresolved-empty {
padding: calc(10px * var(--hud-scale)) 0;
color: var(--hud-text-soft);
font-size: calc(0.74rem * var(--hud-scale));
}