/* 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__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)); }