Spaces:
Sleeping
Sleeping
| :root { | |
| font-family: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif; | |
| color: #f3f6fb; | |
| background: | |
| radial-gradient(circle at top left, rgba(47, 109, 186, 0.26), transparent 28%), | |
| radial-gradient(circle at 80% 10%, rgba(21, 191, 156, 0.16), transparent 24%), | |
| linear-gradient(180deg, #06111f 0%, #08192c 44%, #040b14 100%); | |
| color-scheme: dark; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| margin: 0; | |
| min-height: 100vh; | |
| background: transparent; | |
| } | |
| button, | |
| progress { | |
| font: inherit; | |
| } | |
| #root { | |
| min-height: 100vh; | |
| } | |
| .app-shell { | |
| position: relative; | |
| min-height: 100vh; | |
| overflow: hidden; | |
| padding: 32px; | |
| } | |
| .ambient { | |
| position: absolute; | |
| border-radius: 999px; | |
| filter: blur(60px); | |
| pointer-events: none; | |
| } | |
| .ambient-a { | |
| top: 6%; | |
| left: -4%; | |
| width: 340px; | |
| height: 340px; | |
| background: rgba(34, 144, 255, 0.18); | |
| } | |
| .ambient-b { | |
| right: -3%; | |
| bottom: 12%; | |
| width: 320px; | |
| height: 320px; | |
| background: rgba(70, 255, 188, 0.13); | |
| } | |
| .topbar, | |
| .layout { | |
| position: relative; | |
| z-index: 1; | |
| } | |
| .topbar { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 24px; | |
| margin-bottom: 24px; | |
| } | |
| .brand { | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| } | |
| .brand-mark { | |
| display: grid; | |
| place-items: center; | |
| width: 44px; | |
| height: 44px; | |
| border-radius: 14px; | |
| background: linear-gradient(145deg, rgba(50, 118, 201, 0.9), rgba(18, 188, 160, 0.8)); | |
| box-shadow: 0 18px 50px rgba(17, 91, 165, 0.25); | |
| } | |
| .eyebrow { | |
| margin: 0 0 6px; | |
| font-size: 0.72rem; | |
| letter-spacing: 0.18em; | |
| text-transform: uppercase; | |
| color: rgba(173, 211, 255, 0.72); | |
| } | |
| .brand h2, | |
| .card h3, | |
| .globe-overlay h1 { | |
| margin: 0; | |
| font-weight: 600; | |
| } | |
| .task-switcher { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 10px; | |
| } | |
| .task-pill { | |
| border: 1px solid rgba(163, 188, 224, 0.2); | |
| border-radius: 999px; | |
| background: rgba(8, 19, 34, 0.8); | |
| color: #dbe9ff; | |
| padding: 10px 16px; | |
| text-transform: capitalize; | |
| cursor: pointer; | |
| } | |
| .task-pill.active { | |
| background: linear-gradient(135deg, #184f77, #1ca594); | |
| border-color: transparent; | |
| } | |
| .layout { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1.45fr) minmax(340px, 0.8fr); | |
| gap: 24px; | |
| } | |
| .panel { | |
| min-width: 0; | |
| } | |
| .panel-main { | |
| display: flex; | |
| } | |
| .globe-shell, | |
| .card, | |
| .metric-card { | |
| border: 1px solid rgba(164, 194, 231, 0.12); | |
| background: linear-gradient(180deg, rgba(8, 21, 37, 0.94), rgba(5, 14, 24, 0.92)); | |
| box-shadow: 0 20px 60px rgba(0, 0, 0, 0.24); | |
| } | |
| .globe-shell { | |
| position: relative; | |
| flex: 1; | |
| min-height: 760px; | |
| border-radius: 30px; | |
| overflow: hidden; | |
| } | |
| .globe-frame { | |
| position: relative; | |
| display: grid; | |
| place-items: center; | |
| min-height: 760px; | |
| background: | |
| radial-gradient(circle at 50% 44%, rgba(88, 160, 255, 0.12), transparent 32%), | |
| radial-gradient(circle at 50% 50%, rgba(9, 23, 40, 0.22), transparent 58%); | |
| } | |
| .globe-backdrop { | |
| position: absolute; | |
| inset: 0; | |
| background: | |
| radial-gradient(circle at 20% 20%, rgba(82, 153, 255, 0.18), transparent 22%), | |
| radial-gradient(circle at 70% 78%, rgba(42, 198, 164, 0.14), transparent 24%), | |
| linear-gradient(180deg, rgba(8, 18, 32, 0.7), rgba(4, 10, 18, 0.9)); | |
| } | |
| .globe-frame canvas { | |
| cursor: grab; | |
| border-radius: 50%; | |
| } | |
| .globe-frame canvas:active { | |
| cursor: grabbing; | |
| } | |
| .transfer { | |
| fill: none; | |
| stroke-width: 2.2; | |
| stroke-linecap: round; | |
| stroke-dasharray: 8 10; | |
| opacity: 0.95; | |
| } | |
| .transfer-capture { | |
| stroke-dasharray: 5 14; | |
| } | |
| .station-ring { | |
| fill: rgba(22, 244, 208, 0.12); | |
| stroke: rgba(144, 255, 238, 0.36); | |
| } | |
| .station-node { | |
| fill: #8cffef; | |
| } | |
| .satellite-orbit-glow { | |
| fill: rgba(126, 193, 255, 0.14); | |
| } | |
| .satellite-node { | |
| stroke: rgba(255, 255, 255, 0.7); | |
| stroke-width: 1; | |
| } | |
| .satellite-node.action-capture { | |
| fill: #ffb86b; | |
| } | |
| .satellite-node.action-downlink { | |
| fill: #7cf7c9; | |
| } | |
| .satellite-node.action-maintain { | |
| fill: #9caaff; | |
| } | |
| .satellite-node.action-idle { | |
| fill: #95a2bb; | |
| } | |
| .globe-marker { | |
| display: grid; | |
| place-items: center; | |
| pointer-events: none; | |
| } | |
| .globe-marker span { | |
| display: block; | |
| width: var(--marker-size); | |
| height: var(--marker-size); | |
| border-radius: 999px; | |
| background: var(--marker-color); | |
| border: 2px solid rgba(255, 255, 255, 0.72); | |
| box-shadow: | |
| 0 0 0 4px rgba(128, 196, 255, 0.12), | |
| 0 0 22px var(--marker-color); | |
| } | |
| .globe-marker.station span { | |
| width: calc(var(--marker-size) * 0.88); | |
| height: calc(var(--marker-size) * 0.88); | |
| border-color: rgba(187, 255, 245, 0.84); | |
| box-shadow: | |
| 0 0 0 5px rgba(94, 255, 228, 0.12), | |
| 0 0 16px rgba(94, 255, 228, 0.28); | |
| } | |
| .globe-marker.region span { | |
| width: calc(var(--marker-size) * 0.84); | |
| height: calc(var(--marker-size) * 0.84); | |
| border-color: rgba(255, 231, 205, 0.9); | |
| box-shadow: | |
| 0 0 0 4px rgba(255, 195, 121, 0.14), | |
| 0 0 14px rgba(255, 195, 121, 0.24); | |
| } | |
| .globe-overlay { | |
| position: absolute; | |
| inset: auto 24px 24px 24px; | |
| display: flex; | |
| align-items: end; | |
| justify-content: space-between; | |
| gap: 20px; | |
| } | |
| .globe-overlay h1 { | |
| max-width: 520px; | |
| font-size: clamp(2.1rem, 4vw, 3.6rem); | |
| line-height: 0.98; | |
| } | |
| .overlay-metrics { | |
| display: grid; | |
| grid-template-columns: repeat(3, minmax(92px, 1fr)); | |
| gap: 12px; | |
| } | |
| .overlay-metrics div, | |
| .weather-card, | |
| .metric-card { | |
| border-radius: 18px; | |
| background: rgba(6, 14, 24, 0.78); | |
| border: 1px solid rgba(172, 197, 227, 0.12); | |
| } | |
| .overlay-metrics div { | |
| padding: 14px 16px; | |
| } | |
| .overlay-metrics span, | |
| .metric-card span, | |
| .weather-card small, | |
| .meter-row label, | |
| .compact-row span, | |
| .task-item span:last-child, | |
| .meta-row span { | |
| color: rgba(206, 222, 246, 0.72); | |
| } | |
| .overlay-metrics strong, | |
| .metric-card strong, | |
| .weather-card strong { | |
| display: block; | |
| margin-top: 8px; | |
| font-size: 1.25rem; | |
| } | |
| .panel-side { | |
| display: grid; | |
| gap: 18px; | |
| } | |
| .card { | |
| border-radius: 24px; | |
| padding: 20px; | |
| } | |
| .card-head { | |
| display: flex; | |
| align-items: start; | |
| justify-content: space-between; | |
| gap: 12px; | |
| margin-bottom: 16px; | |
| } | |
| .controls-row { | |
| display: flex; | |
| gap: 12px; | |
| margin-bottom: 12px; | |
| } | |
| .action-button, | |
| .ghost-button { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 8px; | |
| border-radius: 14px; | |
| border: 1px solid rgba(158, 193, 235, 0.14); | |
| background: rgba(12, 24, 40, 0.92); | |
| color: #eff5ff; | |
| padding: 12px 16px; | |
| cursor: pointer; | |
| } | |
| .action-button:disabled, | |
| .ghost-button:disabled, | |
| .task-pill:disabled { | |
| opacity: 0.58; | |
| cursor: not-allowed; | |
| } | |
| .action-button.primary { | |
| background: linear-gradient(135deg, #155b95, #1fa491); | |
| border-color: transparent; | |
| } | |
| .ghost-button { | |
| width: 100%; | |
| } | |
| .stats-grid { | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 14px; | |
| } | |
| .metric-card { | |
| padding: 16px; | |
| } | |
| .metric-icon { | |
| margin-bottom: 12px; | |
| color: #8fd8ff; | |
| } | |
| .list { | |
| display: grid; | |
| gap: 12px; | |
| } | |
| .list.condensed { | |
| gap: 10px; | |
| } | |
| .list-item, | |
| .compact-row, | |
| .task-item { | |
| border-radius: 18px; | |
| background: rgba(9, 18, 31, 0.82); | |
| border: 1px solid rgba(169, 191, 223, 0.08); | |
| } | |
| .list-item { | |
| padding: 14px; | |
| } | |
| .list-title, | |
| .compact-row, | |
| .task-item, | |
| .meta-row, | |
| .meter-row { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 10px; | |
| } | |
| .meter-row { | |
| margin-top: 10px; | |
| grid-template-columns: auto 1fr auto; | |
| } | |
| .meter-row progress { | |
| flex: 1; | |
| height: 8px; | |
| border-radius: 999px; | |
| overflow: hidden; | |
| appearance: none; | |
| } | |
| .meter-row progress::-webkit-progress-bar { | |
| background: rgba(90, 108, 133, 0.25); | |
| } | |
| .meter-row progress::-webkit-progress-value { | |
| background: linear-gradient(90deg, #59b8ff, #7cf7c9); | |
| } | |
| .status-badge { | |
| border-radius: 999px; | |
| padding: 6px 10px; | |
| text-transform: capitalize; | |
| font-size: 0.78rem; | |
| background: rgba(140, 161, 194, 0.14); | |
| } | |
| .status-badge.capture { | |
| background: rgba(255, 184, 107, 0.16); | |
| color: #ffcf99; | |
| } | |
| .status-badge.downlink { | |
| background: rgba(124, 247, 201, 0.14); | |
| color: #9bf7d6; | |
| } | |
| .status-badge.maintain { | |
| background: rgba(157, 170, 255, 0.14); | |
| color: #b5bfff; | |
| } | |
| .compact-row, | |
| .task-item { | |
| padding: 12px 14px; | |
| } | |
| .compact-row div, | |
| .task-item { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .active-transfer { | |
| border-color: rgba(124, 247, 201, 0.22); | |
| } | |
| .weather-grid { | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 12px; | |
| margin-bottom: 14px; | |
| } | |
| .weather-card { | |
| padding: 14px; | |
| } | |
| .weather-card span { | |
| display: block; | |
| color: rgba(212, 225, 248, 0.72); | |
| text-transform: capitalize; | |
| } | |
| .task-list { | |
| display: grid; | |
| gap: 10px; | |
| } | |
| .loading-state, | |
| .error-text { | |
| color: #ffe5d2; | |
| } | |
| .loading-state { | |
| display: grid; | |
| place-items: center; | |
| min-height: 420px; | |
| font-size: 1.1rem; | |
| } | |
| @media (max-width: 1180px) { | |
| .layout { | |
| grid-template-columns: 1fr; | |
| } | |
| .globe-shell { | |
| min-height: auto; | |
| } | |
| } | |
| @media (max-width: 720px) { | |
| .app-shell { | |
| padding: 18px; | |
| } | |
| .topbar, | |
| .controls-row, | |
| .globe-overlay { | |
| flex-direction: column; | |
| align-items: stretch; | |
| } | |
| .overlay-metrics, | |
| .stats-grid, | |
| .weather-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .globe-overlay { | |
| position: static; | |
| padding: 0 18px 18px; | |
| } | |
| } | |