SAT / frontend /src /styles.css
KUMARISHWETA242
Final Commit
03fa3e4
Raw
History Blame Contribute Delete
9.08 kB
: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;
}
}