Feat/LOY-316 Level Progress Card
* feat(LOY-315): Add MembershipOverviewCard
* refactor(LOY-315): abstract sasbooststatus
* feat(LOY-316): build out LevelProgressCard skeleton & variant styling
* feat(LOY-316): Add HighesMembershipCard
* feat(LOY-316): ProgressBarCard base
* refactor(LOY-315): highest level card misc fixes
* feat(LOY-316): Add progress component to design system
* fix(LOY-316): type check
* refactor(LOY-316): calculate currentEarnings correctly
* fix(LOY-316): sas icon showing when not boosted
* fix(LOY-316): css module
* refactor(LOY-316): Restructure components
* feat(LOY-316): Add marker pin 📍
* fix(LOY-316): strict equality checks
* fix(LOY-316): code review fixes
* chore(LOY-316): conditionally hide old section under flag
* feat(LOY-316): Add level progress card to my points page
* chore(LOY-316): marker label container height
Approved-by: Matilda Landström
103 lines
1.8 KiB
CSS
103 lines
1.8 KiB
CSS
.card {
|
|
background: var(--Surface-Primary-Default);
|
|
border-radius: var(--Corner-radius-lg);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--Space-x2);
|
|
padding: var(--Space-x3) 0;
|
|
}
|
|
|
|
.statsContainer {
|
|
display: flex;
|
|
padding: 0 var(--Space-x3);
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
align-self: stretch;
|
|
}
|
|
|
|
.statItem {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--Space-x05);
|
|
}
|
|
|
|
.statItem:last-child {
|
|
text-align: right;
|
|
}
|
|
|
|
.label {
|
|
color: var(--Text-Secondary);
|
|
}
|
|
|
|
.value {
|
|
color: var(--Text-Accent-Primary);
|
|
word-break: break-all;
|
|
}
|
|
|
|
.progressSection {
|
|
padding: 0 var(--Space-x3);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--Space-x1);
|
|
}
|
|
|
|
.progressSection.hasMarker {
|
|
padding-bottom: var(--Space-x1);
|
|
}
|
|
|
|
.progressContainer {
|
|
position: relative;
|
|
}
|
|
|
|
.levelMarker {
|
|
position: absolute;
|
|
top: 50%;
|
|
transform: translateX(-50%);
|
|
z-index: 2;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.markerPin {
|
|
width: 6px;
|
|
height: 6px;
|
|
background: var(--Surface-Brand-Primary-1-OnSurface-Default);
|
|
border-radius: 50%;
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
.markerLine {
|
|
width: 1px;
|
|
height: 21px;
|
|
background: var(--Surface-Brand-Primary-1-OnSurface-Default);
|
|
margin-top: -3px;
|
|
}
|
|
|
|
.markerLabelContainer {
|
|
position: relative;
|
|
height: var(--Space-x3);
|
|
margin-top: var(--Space-x15);
|
|
}
|
|
|
|
.markerLabel {
|
|
position: absolute;
|
|
top: 0;
|
|
|
|
/* Define both edges - let browser calculate width automatically */
|
|
inset-inline-start: var(--Space-x3); /* respects card padding */
|
|
inset-inline-end: calc(100% - var(--marker-pos)); /* right edge under pin */
|
|
|
|
white-space: normal;
|
|
overflow-wrap: anywhere;
|
|
color: var(--Text-Secondary);
|
|
text-align: right;
|
|
}
|
|
|
|
@media screen and (min-width: 521px) {
|
|
.markerLabelContainer {
|
|
height: var(--Space-x2);
|
|
}
|
|
}
|