.wrapper {
display: grid;
align-content: flex-start;
width: 100%;
gap: 20px;
min-height: 70vh;
overflow-x: hidden;
padding-bottom: 100px;
}
// Header: wallet + status pill
.header {
display: flex;
align-items: center;
justify-content: space-between;
}
.walletInfo {
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
color: #999;
font-family: monospace;
}
.copyBtn {
background: none;
border: none;
cursor: pointer;
color: #777;
padding: 2px 4px;
font-size: 14px;
&:hover {
color: #36d6ae;
}
}
// Hero: big hashrate + sparkline
.heroContainer {
display: flex;
flex-direction: column;
align-items: center;
padding: 20px 0;
}
.heroValue {
font-size: 48px;
font-weight: bold;
color: #36d6ae;
line-height: 1.1;
}
.heroUnit {
font-size: 20px;
font-weight: normal;
color: #777;
}
.heroAvg {
font-size: 14px;
color: #777;
font-family: monospace;
margin-top: 4px;
}
.heroPulse {
animation: miningPulse 2s ease-in-out infinite;
}
@keyframes miningPulse {
0%,
100% {
text-shadow: 0 0 8px rgba(54, 214, 174, 0.3);
}
50% {
text-shadow: 0 0 20px rgba(54, 214, 174, 0.6), 0 0 40px rgba(54, 214, 174, 0.2);
}
}
// TESTING: Countdown styles โ remove after testing phase
.countdownValue {
font-size: 56px;
font-weight: bold;
color: #f59e0b;
line-height: 1.1;
animation: countdownPulse 1.5s ease-in-out infinite;
}
.countdownLabel {
font-size: 14px;
color: #888;
margin-top: 6px;
}
@keyframes countdownPulse {
0%,
100% {
text-shadow: 0 0 8px rgba(245, 158, 11, 0.3);
}
50% {
text-shadow: 0 0 20px rgba(245, 158, 11, 0.6), 0 0 40px rgba(245, 158, 11, 0.2);
}
}
.sparkline {
width: 100%;
height: 60px;
margin-top: 10px;
}
// 4-card stat grid
.statsGrid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 12px;
min-width: 0;
@media (max-width: 600px) {
grid-template-columns: repeat(2, 1fr);
}
}
.statCard {
display: flex;
flex-direction: column;
gap: 6px;
align-items: center;
padding: 12px 8px;
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 4px;
text-align: center;
min-width: 0;
}
.statCardLabel {
color: #777;
font-size: 12px;
text-transform: uppercase;
}
.statCardValue {
color: #36d6ae;
font-size: 24px;
font-weight: bold;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.statCardSuffix {
font-size: 14px;
font-weight: normal;
color: #777;
}
// LI Balance row
.balanceRow {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 15px;
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 4px;
font-size: 14px;
> span:first-child {
color: #777;
text-transform: uppercase;
font-size: 12px;
}
> span:last-child {
color: #36d6ae;
font-weight: bold;
}
}
// Network header + controls
.networkHeader {
display: flex;
align-items: center;
justify-content: space-between;
}
.refreshBadge {
font-size: 11px;
color: #555;
}
// Thread selector
.threadSelector {
display: flex;
align-items: center;
gap: 10px;
}
.threadLabel {
color: #777;
font-size: 13px;
white-space: nowrap;
}
.threadRange {
width: 120px;
accent-color: #36d6ae;
cursor: pointer;
-webkit-appearance: none;
appearance: none;
background: transparent;
height: 20px;
&::-webkit-slider-runnable-track {
height: 4px;
background: rgba(54, 214, 174, 0.3);
border-radius: 2px;
}
&::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 14px;
height: 14px;
background: #36d6ae;
border-radius: 50%;
border: none;
margin-top: -5px;
cursor: pointer;
}
&::-moz-range-track {
height: 4px;
background: rgba(54, 214, 174, 0.3);
border-radius: 2px;
border: none;
}
&::-moz-range-thumb {
width: 14px;
height: 14px;
background: #36d6ae;
border-radius: 50%;
border: none;
cursor: pointer;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
&::-webkit-slider-thumb {
cursor: not-allowed;
}
&::-moz-range-thumb {
cursor: not-allowed;
}
}
}
.backendSelect {
background: transparent;
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 4px;
padding: 4px 8px;
color: #ccc;
font-size: 13px;
cursor: pointer;
outline: none;
&:focus {
border-color: #36d6ae;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
option {
background: #1a1a2e;
color: #ccc;
}
}
// Proof log
.proofLog {
display: grid;
gap: 8px;
}
.proofLogTitle {
color: #777;
font-size: 12px;
text-transform: uppercase;
}
.proofEntry {
display: grid;
grid-template-columns: 40px 1fr 1fr 70px;
gap: 8px;
align-items: center;
padding: 8px 12px;
border: 1px solid rgba(54, 214, 174, 0.15);
border-radius: 4px;
font-size: 13px;
a {
display: flex;
align-items: center;
gap: 6px;
color: #36d6ae;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}
.proofEntryIndex {
color: #555;
font-weight: bold;
}
.proofEntryHash {
color: #999;
font-family: monospace;
overflow: hidden;
text-overflow: ellipsis;
}
.proofEntryStatus {
overflow: hidden;
text-overflow: ellipsis;
}
.proofEntryTime {
color: #555;
text-align: right;
font-size: 12px;
}
.showMoreBtn {
background: none;
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 4px;
padding: 8px 16px;
color: #777;
font-size: 13px;
cursor: pointer;
text-align: center;
width: 100%;
&:hover {
color: #36d6ae;
border-color: rgba(54, 214, 174, 0.5);
}
}
// Section box (staking, referral, emission)
.sectionBox {
display: grid;
gap: 12px;
padding: 15px;
border: 1px solid rgba(54, 214, 174, 0.2);
border-radius: 4px;
}
.sectionTitle {
color: #777;
font-size: 12px;
text-transform: uppercase;
font-weight: bold;
}
// Staking / referral actions
.stakingActions {
display: grid;
gap: 10px;
}
.stakingRow {
display: flex;
align-items: center;
gap: 10px;
}
.stakingInput {
flex: 1;
background: transparent;
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 4px;
padding: 8px 12px;
color: #ccc;
font-size: 14px;
outline: none;
min-height: 36px;
&:focus {
border-color: #36d6ae;
box-shadow: 0 0 0 1px rgba(54, 214, 174, 0.4);
}
&:disabled {
opacity: 0.5;
}
}
.stakingBtn {
background: rgba(54, 214, 174, 0.15);
border: 1px solid rgba(54, 214, 174, 0.4);
border-radius: 4px;
padding: 8px 16px;
color: #36d6ae;
font-size: 13px;
cursor: pointer;
white-space: nowrap;
&:hover:not(:disabled) {
background: rgba(54, 214, 174, 0.25);
}
&:disabled {
opacity: 0.4;
cursor: not-allowed;
}
}
.dangerBtn {
background: rgba(239, 68, 68, 0.15);
border: 1px solid rgba(239, 68, 68, 0.4);
border-radius: 4px;
padding: 8px 16px;
color: #ef4444;
font-size: 13px;
cursor: pointer;
white-space: nowrap;
&:hover:not(:disabled) {
background: rgba(239, 68, 68, 0.25);
}
&:disabled {
opacity: 0.4;
cursor: not-allowed;
}
}
.stakingStatus {
font-size: 13px;
color: #999;
word-break: break-all;
}
// Referral section
.referralRow {
display: flex;
align-items: center;
gap: 10px;
font-size: 14px;
}
.referralLabel {
color: #777;
white-space: nowrap;
}
.referralValue {
color: #36d6ae;
font-family: monospace;
font-size: 13px;
}
// Mining active badge
.miningBadge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 12px;
border-radius: 20px;
background: rgba(54, 214, 174, 0.12);
border: 1px solid rgba(54, 214, 174, 0.4);
color: #36d6ae;
font-size: 13px;
font-weight: bold;
font-family: monospace;
white-space: nowrap;
animation: badgeGlow 2s ease-in-out infinite;
}
.miningBadgeDot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #36d6ae;
animation: dotPulse 1.5s ease-in-out infinite;
}
@keyframes badgeGlow {
0%,
100% {
box-shadow: 0 0 4px rgba(54, 214, 174, 0.2);
}
50% {
box-shadow: 0 0 12px rgba(54, 214, 174, 0.4), 0 0 24px rgba(54, 214, 174, 0.1);
}
}
@keyframes dotPulse {
0%,
100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.5;
transform: scale(0.7);
}
}
// Simulator toggle button
.simToggleBtn {
background: rgba(54, 214, 174, 0.1);
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 4px;
padding: 4px 12px;
color: #36d6ae;
font-size: 13px;
cursor: pointer;
white-space: nowrap;
&:hover {
background: rgba(54, 214, 174, 0.2);
}
}
// Simulator section
.simulatorSection {
display: grid;
gap: 16px;
padding: 16px;
border: 1px solid rgba(54, 214, 174, 0.2);
border-radius: 4px;
background: rgba(54, 214, 174, 0.03);
}
.simSliders {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
@media (max-width: 900px) {
grid-template-columns: repeat(2, 1fr);
}
@media (max-width: 600px) {
grid-template-columns: 1fr;
}
}
.simInputRow {
display: flex;
flex-direction: column;
gap: 4px;
}
.simInputHeader {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.simInputLabel {
font-size: 12px;
color: #777;
white-space: nowrap;
}
.simInputFieldWrap {
display: flex;
align-items: center;
gap: 4px;
}
.simInputField {
width: 80px;
background: transparent !important;
border: 1px solid rgba(54, 214, 174, 0.25) !important;
border-radius: 3px;
padding: 2px 6px;
color: #36d6ae;
font-size: 13px;
font-family: monospace;
text-align: right;
outline: none !important;
box-shadow: none !important;
&:focus,
&:focus-visible,
&:active {
border: 1px solid #36d6ae !important;
outline: none !important;
box-shadow: none !important;
}
}
.simInputSuffix {
font-size: 11px;
color: #666;
white-space: nowrap;
}
.simRange {
width: 100%;
accent-color: #36d6ae;
cursor: pointer;
touch-action: none;
}
// Legend
.simLegend {
display: flex;
flex-wrap: wrap;
gap: 10px;
font-size: 12px;
color: #999;
}
.simLegendItem {
display: flex;
align-items: center;
gap: 4px;
}
.simLegendDot {
width: 8px;
height: 8px;
border-radius: 50%;
display: inline-block;
flex-shrink: 0;
}
// Split bar
.simSplitBar {
display: flex;
height: 24px;
border-radius: 4px;
overflow: hidden;
font-size: 11px;
line-height: 24px;
}
.simSplitSegment {
display: flex;
align-items: center;
justify-content: center;
color: #fff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 0 4px;
transition: width 0.15s ease;
}
// Config panel (replaces simulator)
.configPanel {
display: grid;
gap: 16px;
padding: 16px;
border: 1px solid rgba(54, 214, 174, 0.2);
border-radius: 4px;
background: rgba(54, 214, 174, 0.03);
}
.configFieldGrid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
@media (max-width: 900px) {
grid-template-columns: repeat(2, 1fr);
}
@media (max-width: 600px) {
grid-template-columns: 1fr;
}
}
.configField {
display: flex;
flex-direction: column;
gap: 4px;
padding: 6px 8px;
border: 1px solid rgba(54, 214, 174, 0.15);
border-radius: 4px;
}
.configFieldChanged {
border-color: #f59e0b;
}
.configFieldLabel {
font-size: 11px;
color: #777;
text-transform: uppercase;
}
.configFieldValue {
font-size: 13px;
color: #ccc;
font-family: monospace;
word-break: break-all;
}
.configFieldInput {
background: transparent;
border: 1px solid rgba(54, 214, 174, 0.3);
border-radius: 3px;
padding: 4px 6px;
color: #36d6ae;
font-size: 13px;
font-family: monospace;
outline: none;
width: 100%;
box-sizing: border-box;
&:focus {
border-color: #36d6ae;
}
}
.adminBadge {
display: inline-block;
padding: 2px 10px;
border-radius: 10px;
background: rgba(54, 214, 174, 0.15);
border: 1px solid rgba(54, 214, 174, 0.4);
color: #36d6ae;
font-size: 12px;
font-weight: bold;
text-transform: uppercase;
width: fit-content;
}
.pausedBadge {
display: inline-block;
padding: 2px 10px;
border-radius: 10px;
background: rgba(239, 68, 68, 0.15);
border: 1px solid rgba(239, 68, 68, 0.4);
color: #ef4444;
font-size: 12px;
font-weight: bold;
width: fit-content;
}
.activeBadge {
display: inline-block;
padding: 2px 10px;
border-radius: 10px;
background: rgba(54, 214, 174, 0.1);
border: 1px solid rgba(54, 214, 174, 0.3);
color: #36d6ae;
font-size: 12px;
width: fit-content;
}
.diffView {
display: grid;
gap: 8px;
padding: 12px;
border: 1px solid rgba(245, 158, 11, 0.3);
border-radius: 4px;
background: rgba(245, 158, 11, 0.05);
}
.diffRow {
display: flex;
align-items: center;
gap: 8px;
font-size: 13px;
font-family: monospace;
color: #ccc;
}
.warningBox {
padding: 8px 12px;
border: 1px solid rgba(239, 68, 68, 0.3);
border-radius: 4px;
background: rgba(239, 68, 68, 0.08);
color: #f87171;
font-size: 13px;
}
.overridesToggle {
background: rgba(168, 85, 247, 0.1);
border: 1px solid rgba(168, 85, 247, 0.3);
border-radius: 4px;
padding: 6px 14px;
color: #a855f7;
font-size: 13px;
cursor: pointer;
width: fit-content;
&:hover {
background: rgba(168, 85, 247, 0.2);
}
}
.confirmActions {
display: flex;
gap: 10px;
justify-content: flex-end;
}
// Download hero CTA
@keyframes ctaPulse {
0%, 100% { box-shadow: 0 0 8px rgba(54, 214, 174, 0.3), 0 0 24px rgba(54, 214, 174, 0.1); }
50% { box-shadow: 0 0 16px rgba(54, 214, 174, 0.5), 0 0 40px rgba(54, 214, 174, 0.2); }
}
@keyframes glowSweep {
0% { transform: translateX(-100%); }
100% { transform: translateX(200%); }
}
.downloadHero {
position: relative;
padding: 24px 0;
text-align: center;
overflow: hidden;
}
.downloadHeroContent {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.downloadBadge {
display: inline-block;
padding: 3px 10px;
border-radius: 100px;
background: rgba(54, 214, 174, 0.15);
border: 1px solid rgba(54, 214, 174, 0.3);
color: #36d6ae;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.downloadHeadline {
font-size: 18px;
font-weight: 700;
color: #fff;
letter-spacing: -0.01em;
}
.downloadSub {
font-size: 13px;
color: #888;
max-width: 320px;
}
.downloadCtaBtn {
position: relative;
overflow: hidden;
margin-top: 6px;
padding: 12px 32px;
border: 1px solid rgba(54, 214, 174, 0.5);
border-radius: 6px;
background: rgba(54, 214, 174, 0.12);
color: #36d6ae;
font-size: 15px;
font-weight: 700;
cursor: pointer;
white-space: nowrap;
animation: ctaPulse 3s ease-in-out infinite;
transition: background 0.2s, transform 0.15s;
&:hover:not(:disabled) {
background: rgba(54, 214, 174, 0.22);
transform: translateY(-1px);
}
&:active:not(:disabled) {
transform: translateY(0);
}
&:disabled {
animation: none;
opacity: 0.6;
cursor: wait;
}
}
.downloadCtaLoading {
animation: none;
}
.downloadCtaGlow {
position: absolute;
top: 0;
left: 0;
width: 50%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(54, 214, 174, 0.15), transparent);
animation: glowSweep 3s ease-in-out infinite;
pointer-events: none;
}
.downloadError {
font-size: 13px;
color: #ef4444;
margin-top: 4px;
}
// Window progress bar
.windowProgress {
width: 100%;
height: 4px;
background: rgba(54, 214, 174, 0.15);
border-radius: 2px;
overflow: hidden;
margin-top: 4px;
}
.windowProgressFill {
height: 100%;
background: #36d6ae;
border-radius: 2px;
transition: width 0.3s ease;
}