diff --git a/src/app/components/level-card/level-card.html b/src/app/components/level-card/level-card.html
index c915cdf..737d33a 100644
--- a/src/app/components/level-card/level-card.html
+++ b/src/app/components/level-card/level-card.html
@@ -1,6 +1,22 @@
+
+
diff --git a/src/app/components/level-card/level-card.scss b/src/app/components/level-card/level-card.scss
index ab89240..57162f4 100644
--- a/src/app/components/level-card/level-card.scss
+++ b/src/app/components/level-card/level-card.scss
@@ -1,36 +1,137 @@
+$animation_timing: cubic-bezier(0.4, 0, 0.2, 1);
+$default_animation_duration: 0.2s;
+
+@property --hover-state {
+ syntax: '';
+ inherits: false;
+ initial-value: 0;
+}
+
:host {
width: 400px;
height: 160px;
+ display: flex;
+ flex-direction: row;
+
+ --animation-duration: calc(#{$default_animation_duration} * var(--motion-duration-multiplier));
+ justify-content: space-between;
+
border-radius: 8px;
outline: light-dark(oklch(0 0 0 / 20%), oklch(1 0 0 / 20%)) 2px solid;
-
- padding: 12px;
+ overflow: hidden;
section.information {
+ width: 336px;
+ padding: 12px;
+ box-sizing: border-box;
+ overflow: hidden;
+ flex-shrink: 0;
+
+ z-index: 1;
+ background-color: light-dark(white, black);
+
+ outline: light-dark(oklch(0 0 0 / 20%), oklch(1 0 0 / 20%)) 1px solid;
+
.soundtrack {
display: flex;
flex-direction: column;
- gap: 6px;
+ gap: 4px;
.artist {
- height: 19px;
+ display: inline-block;
font-size: 14px;
+ height: 20px;
align-content: center;
- font-weight: 800;
+ font-weight: 700;
+
+ white-space: nowrap;
+ word-wrap: break-word;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.track-name {
- font-size: 18px;
- line-height: 20px;
-
- height: 40px;
- font-weight: 900;
-
- -webkit-line-clamp: 2;
+ display: -webkit-box;
-webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ align-self: stretch;
+
overflow: hidden;
text-overflow: ellipsis;
+ word-wrap: break-word;
+ font-size: 18px;
+ font-weight: 900;
+ line-height: 22px;
+ height: 44px;
+ }
+ }
+
+ .other {
+ display: flex;
+ width: 312px;
+ height: 68px;
+ padding: 3px 0;
+ flex-direction: column;
+ box-sizing: border-box;
+ justify-content: space-between;
+ align-items: flex-start;
+
+ .creator {
+ display: flex;
+ flex-direction: row;
+ font-size: 14px;
+ height: 20px;
+ gap: 3px;
+
+ span {
+ align-content: center;
+ &:nth-child(2) {
+ font-weight: 900;
+ }
+ }
+ }
+ }
+ }
+
+ section.buttons {
+ display: flex;
+ flex-direction: column;
+
+ align-self: stretch;
+ flex-shrink: 0;
+
+ flex-grow: 1;
+ margin-left: -80px;
+
+ button {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+ align-items: center;
+
+ width: 100%;
+ height: 50%;
+ border: none;
+ transition: --hover-state calc(var(--animation-duration) / 3) $animation_timing;
+ background-color: color-mix(
+ in oklch,
+ light-dark(oklch(1 0 0), oklch(0 0 0)),
+ light-dark(oklch(0.9702 0 0), oklch(0.25 0 0))
+ calc(var(--hover-state) * 100%)
+ );
+
+ padding: 0;
+
+ &:hover {
+ --hover-state: 1;
+ }
+
+ div.button-icon {
+ width: 40px;
+ height: 40px;
+ margin-right: 12px;
+ user-select: none;
}
}
}
diff --git a/src/app/components/level-card/level-card.ts b/src/app/components/level-card/level-card.ts
index 86b470a..5f50f8c 100644
--- a/src/app/components/level-card/level-card.ts
+++ b/src/app/components/level-card/level-card.ts
@@ -1,4 +1,4 @@
-import { Component } from '@angular/core';
+import { Component, input } from '@angular/core';
@Component({
selector: 'level-card',
@@ -6,4 +6,8 @@ import { Component } from '@angular/core';
templateUrl: './level-card.html',
styleUrl: './level-card.scss',
})
-export class LevelCard {}
+export class LevelCard {
+ artist = input.required()
+ trackName = input.required()
+ creator = input.required()
+}
diff --git a/src/app/pages/levels/levels.html b/src/app/pages/levels/levels.html
index e22d586..88b729d 100644
--- a/src/app/pages/levels/levels.html
+++ b/src/app/pages/levels/levels.html
@@ -1,4 +1,7 @@
Level Card Test
-
+