diff --git a/frontend/index.html b/frontend/index.html index 5b242fb..da95e16 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -12,6 +12,7 @@ + diff --git a/frontend/src/components/Filters.css b/frontend/src/components/Filters.css index 27cdfe1..95a3405 100644 --- a/frontend/src/components/Filters.css +++ b/frontend/src/components/Filters.css @@ -1,14 +1,6 @@ .filters { padding: 1rem; - & .button { - background-color: var(--bg-secondary-light); - color: var(--accent-orange); - border: 1px solid var(--accent-orange); - border-radius: 6px; - padding: .5em .8em; - } - & .filters-container { display: flex; flex-wrap: wrap; @@ -52,7 +44,7 @@ & input { margin: .5em 0 0; - accent-color: var(--accent-orange); + accent-color: var(--led-orange); } & .slider { @@ -61,8 +53,8 @@ & select { background-color: var(--bg-secondary-light); - color: var(--accent-orange); - border: 1px solid var(--accent-orange); + color: var(--led-orange); + border: 1px solid var(--led-orange); border-radius: 6px; padding: .3em; } diff --git a/frontend/src/components/Filters.tsx b/frontend/src/components/Filters.tsx index af0108e..be81f60 100644 --- a/frontend/src/components/Filters.tsx +++ b/frontend/src/components/Filters.tsx @@ -213,7 +213,7 @@ export default function Filters({ onChange }: FiltersProps) { ))} - + ) } \ No newline at end of file diff --git a/frontend/src/components/Header.css b/frontend/src/components/Header.css index b8c9d3c..f52e161 100644 --- a/frontend/src/components/Header.css +++ b/frontend/src/components/Header.css @@ -2,74 +2,77 @@ display: flex; align-items: center; justify-content: space-between; - background-color: var(--bg-secondary-dark); + background: linear-gradient(180deg, #c9c9c4 0%, #a8a8a4 50%, #6e6e6a 100%); flex: 0 0 var(--header-height-lg); + gap: 1em; padding: 0.5em 2em; - border: 2px solid; - border-image-slice: 1; - border-image-source: linear-gradient( - to left, - var(--bg-secondary-dark), - var(--bg-secondary-light), - var(--bg-secondary-dark) - ); - border-top: 0; - border-left: 0; - border-right: 0; + border-style: solid; + border-width: 0 0 1px; + border-bottom-color: var(--text-engraved-soft); & > * { min-width: 12%; - margin: 0 0.5em; } & .logo { display: inline-block; - color: var(--text-primary); - font-family: "Orbitron", sans-serif; - font-size: var( --font-size-app-title); + color: var(--text-engraved); + font-family: var(--font-headings); + font-size: var(--font-size-app-title); font-weight: 700; letter-spacing: 0.05em; - text-shadow: 0px 0px 20px var(--accent-cyan-light); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.4); text-decoration: none; + + & .logo-line { + display: inline; + } + + & .logo-mender { + color: #006289; + } } & .search-box { flex: 0 1 600px; display: flex; + height: 2.6rem; + background: var(--bg-secondary); + border: 1px solid var(--bg-secondary-light); + border-radius: var(--r-panel); & input { + color: var(--led-cyan); + width: 100%; flex: 1; - height: 2.6rem; + height: 100%; padding: 0.5em 1em; - border: 1px solid var(--bg-secondary-light); - border-radius: 6px 0 0 6px; - font-size: 1em; - background: var(--bg-secondary-light); + border: none; + border-radius: var(--r-panel); + font-family: var(--font-mono); + font-size: 1rem; + background-color: transparent; transition: border-color 0.2s, box-shadow 0.2s; } - & input:focus { - outline: none; - box-shadow: var(--shadow-outline); + & input::placeholder { + color: var(--led-cyan-dim); } - & .button-search { - height: 2.6rem; - padding: 0.45rem 0.7rem; - border: 1px solid var(--bg-secondary); - border-radius: 0 6px 6px 0; - background: var(--bg-secondary); + & input:placeholder-shown { + text-overflow: ellipsis; } - & .button-search:hover { - border-color: var(--bg-secondary-light); - background: var(--bg-secondary-light); + & input:focus { + outline: none; + box-shadow: var(--shadow-glow-inset); } - & .button-search:focus { - outline: none; - box-shadow: var(--shadow-outline); + & .btn-search { + margin: 3px; + font-size: 1rem; + box-shadow: none; } } @@ -92,4 +95,24 @@ flex: 1 1 auto; } } +} + +@media (width < 768px) { + .header { + gap: .5em; + padding: 0.5em 1em; + + & > * { + min-width: initial; + } + + & .logo { + line-height: 1; + font-size: calc(var(--font-size-app-title) * .75); + + & .logo-line { + display: block; + } + } + } } \ No newline at end of file diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index 3e65cf0..62a4231 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -15,7 +15,10 @@ export default function Header({onSearch}: { onSearch: (query: string) => void } return (
diff --git a/frontend/src/components/PlayButton.css b/frontend/src/components/PlayButton.css index ef4836c..6ee4cf8 100644 --- a/frontend/src/components/PlayButton.css +++ b/frontend/src/components/PlayButton.css @@ -1,7 +1,6 @@ .button-play { - --play-button-glow: rgba(46,211,230,0.5); - cursor: pointer; + color: var(--text-primary); display: flex; align-items: center; @@ -12,14 +11,14 @@ border-radius: 50%; background: radial-gradient(circle at 30% 30%, #2b3138, #1b2026); - border: 2px solid var(--accent-cyan); - box-shadow: 0 0 8px var(--play-button-glow); + border: 2px solid var(--led-cyan); + box-shadow: 0 0 8px var(--led-cyan-dim); transition: all 0.2s ease; &:hover { transform: scale(1.08); - box-shadow: 0 0 8px var(--accent-cyan), - 0 0 10px var(--play-button-glow); + box-shadow: 0 0 8px var(--led-cyan), + 0 0 10px var(--led-cyan-dim); } &:focus { @@ -30,6 +29,6 @@ &:active { outline: none; transform: scale(0.95); - box-shadow: 0 0 6px var(--play-button-glow); + box-shadow: 0 0 6px var(--led-cyan-dim); } } \ No newline at end of file diff --git a/frontend/src/components/Player.css b/frontend/src/components/Player.css index ba1cd97..44be8c5 100644 --- a/frontend/src/components/Player.css +++ b/frontend/src/components/Player.css @@ -1,6 +1,6 @@ .player { position: relative; - background-color: var(--bg-secondary); + background: linear-gradient(180deg, #b8b3a8 0%, #8a847a 55%, #5a564e 100%); flex: 0 0 var(--player-height-lg); &.empty { @@ -18,7 +18,7 @@ left: 0; right: 0; bottom: 100%; - background-color: var(--bg-primary); + background: linear-gradient(180deg, #4a4d52 0%, #2e3136 50%, #1a1c1f 100%); transition: height 0.4s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } @@ -98,29 +98,16 @@ } } - & .content { + & .footer-bar { padding: 10px; display: flex; gap: 1rem; justify-content: space-between; align-items: center; - /* Gradient border for footer top */ - border: 2px solid; - border-image-slice: 1; - border-image-source: linear-gradient( - to left, - var(--bg-secondary), - var(--bg-secondary-light), - var(--bg-secondary) - ); - border-bottom: 0; - border-left: 0; - border-right: 0; - - & .meta { - flex: 1; - } + border-style: solid; + border-width: 1px 0 0; + border-top-color: var(--text-engraved-soft); & .coverart { display: flex; @@ -150,9 +137,18 @@ color: var( --text-secondary); } } + + & .meta { + flex: 1 1; + overflow: hidden; + } + + & .controls { + flex-shrink: 0; + } } - & .content .title { + & .footer-bar .meta .title { font-weight: 600; line-height: 1.2; white-space: nowrap; @@ -160,7 +156,7 @@ text-overflow: ellipsis; } - & .content .artist-album { + & .footer-bar .meta .artist-album { margin-top: 0.15rem; font-size: 0.92rem; white-space: nowrap; @@ -172,11 +168,11 @@ } } - & .content button { + & .footer-bar .controls button { font-size: 1.4rem; } - & .content button + button { + & .footer-bar .controls button + button { margin-left: .5rem; } diff --git a/frontend/src/components/Player.tsx b/frontend/src/components/Player.tsx index d2b138a..45fa9ea 100644 --- a/frontend/src/components/Player.tsx +++ b/frontend/src/components/Player.tsx @@ -238,7 +238,7 @@ export default function Player({ ref }: PlayerProps) { const fallbackText = track.title?.charAt(0)?.toUpperCase() ?? "♪" return ( -