From d301e9cb8e71fcc142934679f7bf00b9a35323e1 Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:20:53 +0330 Subject: [PATCH] Import source: css/style Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- css/style.css | 1793 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1793 insertions(+) create mode 100644 css/style.css diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..650b018 --- /dev/null +++ b/css/style.css @@ -0,0 +1,1793 @@ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +:root { + --bg: #000; + --panel: #0d0d0f; + --panel2: #121215; + --card: #1c1c1e; + --card-hover: #252529; + --line: rgba(255, 255, 255, 0.08); + --text: #f5f5f7; + --text2: #a1a1a6; + --text3: #6e6e73; + --red: #fa233b; + --pink: #fb5c74; + --grad: linear-gradient(135deg, #fa233b, #fb5c74); + --radius: 10px; +} + +html, +body { + height: 100%; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + background: var(--bg); + color: var(--text); + overflow: hidden; + -webkit-font-smoothing: antialiased; + user-select: none; +} + +button { + font-family: inherit; + border: none; + background: none; + color: inherit; + cursor: pointer; +} + +img { + -webkit-user-drag: none; +} + +::selection { + background: rgba(250, 35, 59, 0.5); +} + +#app { + display: grid; + grid-template-columns: 252px 1fr; + grid-template-rows: 1fr 88px; + height: 100vh; +} + +#sidebar { + grid-row: 1 / 2; + background: var(--panel); + border-right: 1px solid var(--line); + padding: 14px 10px 10px; + display: flex; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; + z-index: 10; +} + +.logo { + display: flex; + align-items: center; + gap: 9px; + font-size: 19px; + font-weight: 800; + letter-spacing: -0.02em; + padding: 6px 12px 18px; +} + +.logo-mark { + display: grid; + place-items: center; + width: 30px; + height: 30px; + border-radius: 8px; + background: var(--grad); + color: #fff; + box-shadow: 0 4px 14px rgba(250, 35, 59, 0.45); +} + +.nav { + display: flex; + flex-direction: column; + gap: 2px; + margin-bottom: 10px; +} + +.nav-item { + display: flex; + align-items: center; + gap: 12px; + padding: 8px 12px; + border-radius: 8px; + color: var(--text2); + font-weight: 600; + font-size: 14px; + cursor: pointer; + text-decoration: none; + white-space: nowrap; + transition: background 0.15s, color 0.15s; +} + +.nav-item:hover { + background: rgba(255, 255, 255, 0.06); + color: var(--text); +} + +.nav-item.active { + background: rgba(255, 255, 255, 0.11); + color: var(--text); +} + +.nav-item.active svg { + color: var(--red); +} + +.section-label { + font-size: 11px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--text3); + padding: 12px 12px 6px; +} + +.row-between { + display: flex; + align-items: center; + justify-content: space-between; +} + +.pl-list { + flex: 1; + margin-bottom: 0; + min-height: 60px; +} + +.pl-item .pl-dot { + width: 10px; + height: 10px; + border-radius: 50%; + flex: none; +} + +.pl-name { + overflow: hidden; + text-overflow: ellipsis; +} + +.pl-empty { + font-size: 12px; + color: var(--text3); + padding: 6px 12px; +} + +.side-footer { + font-size: 11px; + color: var(--text3); + padding: 10px 12px 4px; + border-top: 1px solid var(--line); + margin-top: 8px; +} + +#main { + grid-row: 1 / 2; + overflow-y: auto; + overflow-x: hidden; + position: relative; + background: + radial-gradient(1100px 420px at 18% -8%, rgba(250, 35, 59, 0.05), transparent 60%), + var(--bg); +} + +#view { + max-width: 1360px; + margin: 0 auto; + padding: 22px 30px 46px; + animation: fadeUp 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); +} + +@keyframes fadeUp { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: none; + } +} + +#view > * { + animation: fadeUp 0.45s cubic-bezier(0.2, 0.8, 0.2, 1) backwards; +} + +#view > *:nth-child(2) { animation-delay: 0.05s; } +#view > *:nth-child(3) { animation-delay: 0.1s; } +#view > *:nth-child(4) { animation-delay: 0.15s; } +#view > *:nth-child(5) { animation-delay: 0.2s; } + +::-webkit-scrollbar { + width: 9px; + height: 9px; +} + +::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.14); + border-radius: 5px; + border: 2px solid transparent; + background-clip: content-box; +} + +::-webkit-scrollbar-thumb:hover { + background-color: rgba(255, 255, 255, 0.26); +} + +::-webkit-scrollbar-track { + background: transparent; +} + +.page-title { + font-size: 30px; + font-weight: 800; + letter-spacing: -0.02em; + margin-bottom: 18px; +} + +.hero { + position: relative; + display: flex; + gap: 32px; + align-items: flex-end; + padding: 34px 38px; + border-radius: 18px; + margin-bottom: 30px; + overflow: hidden; + min-height: 300px; + border: 1px solid rgba(255, 255, 255, 0.07); +} + +.hero::before { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(180deg, transparent 40%, rgba(0, 0, 0, 0.55)); + pointer-events: none; +} + +.hero > * { + position: relative; + z-index: 1; +} + +.hero-art { + width: min(32vw, 270px); + aspect-ratio: 1; + border-radius: 12px; + box-shadow: 0 26px 70px rgba(0, 0, 0, 0.65); + transform: rotate(-3deg); + transition: transform 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); + flex: none; + animation: heroIn 0.6s cubic-bezier(0.2, 0.8, 0.2, 1) backwards; +} + +@keyframes heroIn { + from { + opacity: 0; + transform: translateY(24px) scale(0.94); + } +} + +.hero-art.round { + border-radius: 50%; + transform: none; +} + +.center-art { + display: grid; + place-items: center; + color: #fff; + background: rgba(0, 0, 0, 0.35); + backdrop-filter: blur(4px); + box-shadow: 0 26px 70px rgba(0, 0, 0, 0.65); +} + +.hero-info { + max-width: 58%; +} + +.hero-kicker { + font-size: 12px; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--pink); + margin-bottom: 8px; +} + +.hero-title { + font-size: clamp(30px, 4vw, 52px); + font-weight: 800; + letter-spacing: -0.03em; + line-height: 1.05; + margin-bottom: 10px; + text-shadow: 0 2px 24px rgba(0, 0, 0, 0.5); +} + +.hero-sub { + font-size: 15px; + font-weight: 600; + color: rgba(255, 255, 255, 0.85); + margin-bottom: 8px; +} + +.hero-plays { + font-size: 13px; + color: rgba(255, 255, 255, 0.6); + margin-bottom: 20px; +} + +.link { + color: #fff; + text-decoration: underline; + text-decoration-color: rgba(255, 255, 255, 0.3); + text-underline-offset: 3px; +} + +.link:hover { + color: var(--pink); + text-decoration-color: var(--pink); +} + +.hero-actions { + display: flex; + gap: 12px; + flex-wrap: wrap; +} + +.btn-primary { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 22px; + border-radius: 999px; + background: var(--grad); + color: #fff; + font-size: 14px; + font-weight: 700; + transition: transform 0.15s, box-shadow 0.2s, filter 0.2s; + box-shadow: 0 8px 24px rgba(250, 35, 59, 0.4); +} + +.btn-primary:hover { + filter: brightness(1.1); + transform: translateY(-1px); + box-shadow: 0 12px 30px rgba(250, 35, 59, 0.5); +} + +.btn-primary:active { + transform: scale(0.97); +} + +.btn-primary:disabled { + opacity: 0.4; + pointer-events: none; +} + +.btn-primary.sm { + padding: 7px 16px; + font-size: 13px; + box-shadow: none; +} + +.btn-ghost { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 20px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(8px); + color: #fff; + font-size: 14px; + font-weight: 600; + transition: background 0.15s, transform 0.15s; + border: 1px solid rgba(255, 255, 255, 0.12); +} + +.btn-ghost:hover { + background: rgba(255, 255, 255, 0.18); + transform: translateY(-1px); +} + +.btn-ghost:disabled { + opacity: 0.4; + pointer-events: none; +} + +.btn-ghost.danger:hover { + background: rgba(250, 35, 59, 0.25); + border-color: rgba(250, 35, 59, 0.5); +} + +.radio-badge, +.genre-badge { + width: 200px; + aspect-ratio: 1; + display: grid; + place-items: center; + border-radius: 50%; + background: rgba(0, 0, 0, 0.35); + border: 1px solid rgba(255, 255, 255, 0.15); + color: #fff; + backdrop-filter: blur(6px); + flex: none; + box-shadow: 0 26px 70px rgba(0, 0, 0, 0.6); +} + +.radio-badge svg { + animation: pulse 3s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { transform: scale(1); opacity: 1; } + 50% { transform: scale(1.08); opacity: 0.8; } +} + +.view-section { + margin-bottom: 30px; +} + +.section-head { + display: flex; + align-items: baseline; + justify-content: space-between; + margin-bottom: 14px; +} + +.section-title { + font-size: 22px; + font-weight: 800; + letter-spacing: -0.02em; +} + +.see-all { + font-size: 13px; + font-weight: 600; + color: var(--text2); + cursor: pointer; + text-decoration: none; +} + +.see-all:hover { + color: var(--pink); +} + +.row { + display: grid; + grid-auto-flow: column; + grid-auto-columns: minmax(158px, 1fr); + gap: 16px; + overflow-x: auto; + padding-bottom: 8px; + scroll-snap-type: x proximity; +} + +.grid-row { + grid-auto-flow: row; + grid-template-columns: repeat(auto-fill, minmax(158px, 1fr)); + overflow: visible; +} + +.card { + cursor: pointer; + padding: 12px; + background: var(--card); + border-radius: 12px; + transition: background 0.18s, transform 0.18s; + scroll-snap-align: start; +} + +.card:hover { + background: var(--card-hover); + transform: translateY(-3px); +} + +.card-art { + position: relative; + aspect-ratio: 1; + border-radius: 8px; + overflow: hidden; + margin-bottom: 10px; + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4); +} + +.card-art img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.35s cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.card:hover .card-art img { + transform: scale(1.06); +} + +.card-art.round { + border-radius: 50%; +} + +.card-art.round img { + border-radius: 50%; +} + +.card-play { + position: absolute; + right: 10px; + bottom: 10px; + width: 38px; + height: 38px; + border-radius: 50%; + background: var(--grad); + color: #fff; + display: grid; + place-items: center; + opacity: 0; + transform: translateY(8px); + transition: opacity 0.2s, transform 0.25s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.2s; + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.5); +} + +.card:hover .card-play { + opacity: 1; + transform: none; +} + +.card-play:hover { + filter: brightness(1.1); + box-shadow: 0 10px 26px rgba(250, 35, 59, 0.55); +} + +.card-title { + font-size: 13.5px; + font-weight: 650; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.card-sub { + font-size: 12px; + color: var(--text2); + margin-top: 3px; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.card-title.center, +.card-sub.center { + text-align: center; +} + +.genre-tile { + position: relative; + min-height: 120px; + border-radius: 14px; + display: flex; + align-items: flex-end; + padding: 16px; + cursor: pointer; + font-size: 19px; + font-weight: 800; + letter-spacing: -0.01em; + border: 1px solid rgba(255, 255, 255, 0.1); + transition: transform 0.18s, box-shadow 0.25s; + overflow: hidden; +} + +.genre-tile::after { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(180deg, transparent 50%, rgba(0, 0, 0, 0.5)); +} + +.genre-tile span { + position: relative; + z-index: 1; + text-shadow: 0 2px 12px rgba(0, 0, 0, 0.6); +} + +.genre-tile:hover { + transform: translateY(-3px) scale(1.01); + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5); +} + +.list-card { + background: var(--panel2); + border: 1px solid var(--line); + border-radius: 14px; + padding: 8px; + margin-bottom: 30px; +} + +.song-row { + display: grid; + align-items: center; + gap: 14px; + padding: 7px 12px; + border-radius: 8px; + cursor: pointer; + transition: background 0.13s; +} + +.song-row:hover { + background: rgba(255, 255, 255, 0.06); +} + +.song-row.num { + grid-template-columns: 34px minmax(0, 1.6fr) minmax(0, 1.1fr) 52px 78px; +} + +.song-row.art { + grid-template-columns: 44px minmax(0, 1.6fr) minmax(0, 1.1fr) 52px 78px; +} + +.song-row.chart { + grid-template-columns: 30px 44px minmax(0, 1.6fr) minmax(0, 1fr) 52px 78px; +} + +.row-idx { + width: 20px; + text-align: center; + font-size: 13px; + color: var(--text2); + display: grid; + place-items: center; +} + +.row-rank { + width: 20px; + text-align: center; + font-size: 14px; + font-weight: 800; + color: var(--text3); +} + +.song-row.is-cur .row-idx, +.song-row.is-cur .row-rank { + color: var(--pink); +} + +.song-row.is-cur .row-title { + color: var(--pink); +} + +.row-art { + width: 44px; + height: 44px; + border-radius: 6px; + object-fit: cover; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); +} + +.row-main { + min-width: 0; +} + +.row-title { + font-size: 14px; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.row-sub { + font-size: 12px; + color: var(--text2); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.row-album { + font-size: 13px; + color: var(--text2); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.row-time { + font-size: 12.5px; + color: var(--text2); + text-align: right; + font-variant-numeric: tabular-nums; +} + +.row-actions { + display: flex; + gap: 6px; + justify-content: flex-end; + opacity: 0; + transition: opacity 0.15s; +} + +.song-row:hover .row-actions, +.song-row.is-cur .row-actions { + opacity: 1; +} + +.icon-btn { + display: grid; + place-items: center; + width: 32px; + height: 32px; + border-radius: 50%; + color: var(--text2); + transition: color 0.15s, background 0.15s, transform 0.1s; + flex: none; +} + +.icon-btn:hover { + color: var(--text); + background: rgba(255, 255, 255, 0.09); +} + +.icon-btn:active { + transform: scale(0.9); +} + +.icon-btn.liked { + color: var(--pink); +} + +.icon-btn.on { + color: var(--pink); +} + +.eq { + display: inline-flex; + gap: 2.5px; + align-items: flex-end; + height: 14px; + width: 16px; + justify-content: center; +} + +.eq span { + width: 3px; + background: var(--grad); + border-radius: 2px; + animation: eqBounce 0.9s ease-in-out infinite; +} + +.eq span:nth-child(2) { + animation-delay: 0.25s; +} + +.eq span:nth-child(3) { + animation-delay: 0.5s; +} + +@keyframes eqBounce { + 0%, 100% { height: 4px; } + 50% { height: 13px; } +} + +.tabs { + display: flex; + gap: 8px; + margin-bottom: 22px; + flex-wrap: wrap; +} + +.tab { + padding: 8px 18px; + border-radius: 999px; + font-size: 13.5px; + font-weight: 650; + color: var(--text2); + background: var(--card); + transition: background 0.15s, color 0.15s; +} + +.tab:hover { + background: var(--card-hover); + color: var(--text); +} + +.tab.active { + background: rgba(250, 35, 59, 0.18); + color: var(--pink); +} + +.search-hero { + margin-bottom: 26px; +} + +.search-box { + display: flex; + align-items: center; + gap: 12px; + background: var(--card); + border: 1px solid var(--line); + border-radius: 14px; + padding: 12px 16px; + color: var(--text2); + transition: border-color 0.2s, box-shadow 0.2s; + max-width: 720px; +} + +.search-box:focus-within { + border-color: rgba(250, 35, 59, 0.6); + box-shadow: 0 0 0 3px rgba(250, 35, 59, 0.15); +} + +.search-box input { + flex: 1; + background: none; + border: none; + outline: none; + color: var(--text); + font-size: 16px; + font-family: inherit; +} + +.search-box input::placeholder { + color: var(--text3); +} + +.search-hint { + text-align: center; + padding: 60px 0; +} + +.search-hint h2 { + font-size: 22px; + font-weight: 800; + margin-bottom: 8px; +} + +.search-hint p { + color: var(--text2); + font-size: 14px; +} + +.top-result { + display: flex; + align-items: center; + gap: 18px; + background: var(--panel2); + border: 1px solid var(--line); + border-radius: 14px; + padding: 14px 18px; + cursor: pointer; + transition: background 0.15s, transform 0.15s; + max-width: 720px; +} + +.top-result:hover { + background: var(--card); + transform: translateY(-2px); +} + +.top-result img { + width: 64px; + height: 64px; + border-radius: 8px; + object-fit: cover; + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4); +} + +.tr-main { + flex: 1; + min-width: 0; +} + +.tr-title { + font-size: 16px; + font-weight: 700; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.tr-sub { + font-size: 13px; + color: var(--text2); + margin-top: 3px; +} + +.artist-bio { + font-size: 14px; + line-height: 1.6; + color: var(--text2); + max-width: 720px; + margin: -14px 0 24px; + padding: 0 4px; +} + +.empty-state { + text-align: center; + padding: 70px 0; + color: var(--text2); +} + +.empty-icon { + width: 90px; + height: 90px; + margin: 0 auto 20px; + border-radius: 50%; + display: grid; + place-items: center; + background: var(--card); + color: var(--pink); + border: 1px solid var(--line); +} + +.empty-state h2 { + font-size: 20px; + font-weight: 800; + color: var(--text); + margin-bottom: 8px; +} + +.empty-state p { + font-size: 14px; + margin-bottom: 20px; +} + +#player { + grid-row: 2 / 3; + grid-column: 1 / 3; + background: rgba(16, 16, 19, 0.92); + backdrop-filter: blur(24px); + -webkit-backdrop-filter: blur(24px); + border-top: 1px solid var(--line); + display: grid; + grid-template-columns: minmax(260px, 1fr) minmax(320px, 2fr) minmax(200px, 1fr); + align-items: center; + padding: 0 18px; + gap: 12px; + z-index: 30; +} + +.pb-left { + display: flex; + align-items: center; + gap: 12px; + min-width: 0; +} + +.pb-art { + position: relative; + width: 56px; + height: 56px; + border-radius: 8px; + overflow: hidden; + cursor: pointer; + flex: none; + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.5); +} + +.pb-art img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.pb-art.has-track { + animation: artBreath 2.4s ease-in-out infinite alternate; +} + +@keyframes artBreath { + from { box-shadow: 0 6px 16px rgba(0, 0, 0, 0.5); } + to { box-shadow: 0 6px 22px rgba(250, 35, 59, 0.4); } +} + +.pb-eq { + position: absolute; + inset: 0; + display: grid; + place-items: center; + background: rgba(0, 0, 0, 0.45); + opacity: 0; + transition: opacity 0.2s; + backdrop-filter: blur(2px); +} + +.pb-art:hover .pb-eq { + opacity: 1; +} + +.pb-eq .eq span { + background: #fff; +} + +.pb-meta { + min-width: 0; +} + +.pb-title { + font-size: 13.5px; + font-weight: 650; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; +} + +.pb-title:hover { + text-decoration: underline; +} + +.pb-sub { + font-size: 12px; + color: var(--text2); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.pb-heart { + width: 36px; + height: 36px; +} + +.pb-center { + display: flex; + flex-direction: column; + gap: 6px; + align-items: center; + min-width: 0; +} + +.pb-controls { + display: flex; + align-items: center; + gap: 10px; +} + +.ctrl-big { + width: 38px; + height: 38px; +} + +.play-btn { + width: 46px; + height: 46px; + border-radius: 50%; + background: #fff; + color: #000; + display: grid; + place-items: center; + transition: transform 0.12s, opacity 0.15s; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5); + padding-left: 2px; +} + +.play-btn:hover { + transform: scale(1.06); + opacity: 0.92; +} + +.play-btn:active { + transform: scale(0.94); +} + +.play-btn.big { + width: 64px; + height: 64px; + box-shadow: 0 8px 30px rgba(0, 0, 0, 0.6); +} + +.pb-progress { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + max-width: 640px; +} + +.t { + font-size: 11px; + color: var(--text2); + font-variant-numeric: tabular-nums; + min-width: 34px; + text-align: center; +} + +.bar { + position: relative; + height: 6px; + border-radius: 3px; + background: rgba(255, 255, 255, 0.15); + cursor: pointer; + flex: 1; + touch-action: none; +} + +.bar-fill { + position: absolute; + inset: 0 auto 0 0; + width: 0%; + background: #fff; + border-radius: 3px; + transition: background 0.2s; +} + +.bar:hover .bar-fill { + background: var(--grad); +} + +.bar-thumb { + position: absolute; + top: 50%; + width: 12px; + height: 12px; + border-radius: 50%; + background: #fff; + transform: translate(-50%, -50%); + opacity: 0; + transition: opacity 0.15s; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); + pointer-events: none; +} + +.bar:hover .bar-thumb { + opacity: 1; +} + +.bar.big { + height: 8px; +} + +.pb-right { + display: flex; + align-items: center; + gap: 6px; + justify-content: flex-end; + min-width: 0; +} + +.vol-wrap { + width: 110px; + display: flex; +} + +.vbar.wide { + width: 200px; +} + +.rep-one { + position: absolute; + font-size: 8.5px; + font-weight: 800; + background: var(--pink); + color: #fff; + border-radius: 50%; + width: 12px; + height: 12px; + display: grid; + place-items: center; + top: 1px; + right: 0; +} + +#pb-repeat, +#now-repeat { + position: relative; +} + +#now { + position: fixed; + inset: 0; + z-index: 60; + display: none; + overflow-y: auto; +} + +#now.open { + display: block; + animation: nowIn 0.35s cubic-bezier(0.2, 0.8, 0.2, 1); +} + +@keyframes nowIn { + from { + opacity: 0; + transform: scale(1.02); + } +} + +.now-bg { + position: fixed; + inset: -60px; + z-index: 0; +} + +.now-bg img { + width: 100%; + height: 100%; + object-fit: cover; + filter: blur(70px) saturate(1.3); + opacity: 0.35; + transform: scale(1.1); +} + +.now-bg::after { + content: ""; + position: fixed; + inset: 0; + background: linear-gradient(180deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.88)); +} + +.now-close { + position: absolute; + top: 22px; + left: 26px; + z-index: 5; + width: 40px; + height: 40px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + display: grid; + place-items: center; + color: #fff; + transform: rotate(90deg); + transition: background 0.15s, transform 0.3s; +} + +.now-close:hover { + background: rgba(255, 255, 255, 0.22); + transform: rotate(90deg) scale(1.05); +} + +.now-inner { + position: relative; + z-index: 1; + max-width: 1100px; + margin: 0 auto; + padding: 70px 40px 60px; + display: grid; + grid-template-columns: minmax(300px, 480px) 1fr; + gap: 60px; + align-items: center; + min-height: 100%; +} + +.now-art-wrap { + position: relative; +} + +.now-art-inner { + position: relative; + aspect-ratio: 1; + border-radius: 16px; + overflow: hidden; + box-shadow: 0 40px 90px rgba(0, 0, 0, 0.7); + transition: transform 0.6s cubic-bezier(0.2, 0.8, 0.2, 1); +} + +.now-art-inner.live { + animation: tiltPulse 3s ease-in-out infinite alternate; +} + +@keyframes tiltPulse { + from { transform: rotate(-1.2deg) scale(1); } + to { transform: rotate(1.2deg) scale(1.02); } +} + +.now-art-inner img { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; +} + +#now-viz { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + opacity: 0.75; + mix-blend-mode: screen; +} + +.now-right { + min-width: 0; +} + +.now-meta { + margin-bottom: 26px; +} + +.now-title { + font-size: clamp(26px, 3.4vw, 40px); + font-weight: 800; + letter-spacing: -0.02em; + line-height: 1.1; + margin-bottom: 8px; +} + +.now-artist { + font-size: 17px; + font-weight: 600; + color: var(--text2); +} + +.now-controls { + display: flex; + align-items: center; + gap: 14px; + margin-bottom: 24px; + flex-wrap: wrap; +} + +.now-controls .icon-btn { + width: 42px; + height: 42px; +} + +.now-controls .ctrl-big { + width: 48px; + height: 48px; +} + +.now-seek { + display: flex; + align-items: center; + gap: 14px; + margin-bottom: 20px; +} + +.now-vol-row { + display: flex; + align-items: center; + gap: 14px; + margin-top: 6px; +} + +#qpanel { + position: fixed; + top: 0; + right: -400px; + width: 400px; + max-width: 92vw; + height: 100%; + background: rgba(18, 18, 21, 0.97); + backdrop-filter: blur(30px); + -webkit-backdrop-filter: blur(30px); + z-index: 50; + transition: right 0.35s cubic-bezier(0.2, 0.8, 0.2, 1); + border-left: 1px solid var(--line); + display: flex; + flex-direction: column; +} + +#qpanel.open { + right: 0; +} + +.qp-head { + display: flex; + align-items: center; + justify-content: space-between; + padding: 22px 20px 12px; + border-bottom: 1px solid var(--line); +} + +.qp-title { + font-size: 15px; + font-weight: 700; +} + +.qp-sub { + font-size: 12.5px; + color: var(--text2); + margin-top: 3px; +} + +.qp-head-actions { + display: flex; + gap: 4px; +} + +.qp-upnext { + font-size: 11.5px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--text3); + padding: 16px 20px 6px; +} + +.qp-list { + flex: 1; + overflow-y: auto; + padding: 6px 10px 20px; +} + +.qp-row { + display: flex; + align-items: center; + gap: 12px; + padding: 8px 10px; + border-radius: 10px; + cursor: pointer; + transition: background 0.13s; +} + +.qp-row:hover { + background: rgba(255, 255, 255, 0.06); +} + +.qp-row.is-cur { + background: rgba(250, 35, 59, 0.12); +} + +.qp-row img { + width: 44px; + height: 44px; + border-radius: 6px; + object-fit: cover; + flex: none; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); +} + +.qp-main { + flex: 1; + min-width: 0; +} + +.qp-name { + font-size: 13.5px; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + display: flex; + align-items: center; + gap: 6px; +} + +.qp-row.is-cur .qp-name { + color: var(--pink); +} + +.qp-artist { + font-size: 12px; + color: var(--text2); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.qp-empty { + text-align: center; + color: var(--text3); + font-size: 13.5px; + padding: 50px 20px; + line-height: 1.7; +} + +#toast { + position: fixed; + bottom: 108px; + left: 50%; + transform: translate(-50%, 16px); + background: rgba(40, 40, 44, 0.95); + backdrop-filter: blur(20px); + border: 1px solid var(--line); + color: var(--text); + font-size: 13.5px; + font-weight: 600; + padding: 11px 22px; + border-radius: 999px; + opacity: 0; + pointer-events: none; + transition: opacity 0.25s, transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1); + z-index: 90; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6); + white-space: nowrap; +} + +#toast.show { + opacity: 1; + transform: translate(-50%, 0); +} + +#menu-root { + position: fixed; + inset: 0; + z-index: 80; + pointer-events: none; +} + +.menu { + position: fixed; + min-width: 210px; + background: rgba(40, 40, 45, 0.98); + backdrop-filter: blur(30px); + border: 1px solid var(--line); + border-radius: 12px; + padding: 6px; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.7); + animation: menuIn 0.16s cubic-bezier(0.2, 0.8, 0.2, 1); +} + +@keyframes menuIn { + from { + opacity: 0; + transform: translateY(-6px) scale(0.98); + } +} + +.menu-item { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + padding: 9px 12px; + border-radius: 8px; + font-size: 13.5px; + font-weight: 550; + color: var(--text); + text-align: left; + transition: background 0.12s; +} + +.menu-item svg { + color: var(--text2); + flex: none; +} + +.menu-item:hover { + background: rgba(255, 255, 255, 0.09); +} + +.menu-item:hover svg { + color: var(--pink); +} + +.menu-item.danger { + color: #ff6b7a; +} + +.menu-item.danger svg { + color: #ff6b7a; +} + +.menu-sep { + height: 1px; + background: var(--line); + margin: 5px 8px; +} + +#modal-root .modal-backdrop { + position: fixed; + inset: 0; + z-index: 100; + background: rgba(0, 0, 0, 0.65); + backdrop-filter: blur(10px); + display: grid; + place-items: center; + animation: fadeIn 0.2s; +} + +@keyframes fadeIn { + from { opacity: 0; } +} + +.modal { + width: 360px; + max-width: 92vw; + background: #1f1f23; + border: 1px solid var(--line); + border-radius: 16px; + padding: 26px; + box-shadow: 0 30px 80px rgba(0, 0, 0, 0.7); + animation: modalIn 0.25s cubic-bezier(0.2, 0.8, 0.2, 1); +} + +@keyframes modalIn { + from { + opacity: 0; + transform: translateY(14px) scale(0.97); + } +} + +.modal h3 { + font-size: 18px; + font-weight: 800; + margin-bottom: 16px; +} + +.modal-input { + width: 100%; + background: var(--card); + border: 1px solid var(--line); + border-radius: 10px; + padding: 12px 14px; + color: var(--text); + font-size: 15px; + font-family: inherit; + outline: none; + margin-bottom: 16px; + transition: border-color 0.2s, box-shadow 0.2s; +} + +.modal-input:focus { + border-color: rgba(250, 35, 59, 0.6); + box-shadow: 0 0 0 3px rgba(250, 35, 59, 0.15); +} + +.swatches { + display: flex; + gap: 10px; + flex-wrap: wrap; + margin-bottom: 20px; +} + +.swatch { + width: 30px; + height: 30px; + border-radius: 50%; + transition: transform 0.15s, box-shadow 0.15s; + box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.15); +} + +.swatch:hover { + transform: scale(1.15); +} + +.swatch.sel { + box-shadow: inset 0 0 0 3px #fff, 0 0 0 2px rgba(255, 255, 255, 0.35); + transform: scale(1.1); +} + +.modal-actions { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +@media (max-width: 1080px) { + #app { + grid-template-columns: 210px 1fr; + } + + .song-row.num { + grid-template-columns: 30px minmax(0, 1.6fr) 52px 70px; + } + + .song-row.num .row-album { + display: none; + } + + .song-row.art { + grid-template-columns: 44px minmax(0, 1.6fr) 52px 70px; + } + + .song-row.art .row-album { + display: none; + } + + .pb-right { + display: none; + } + + #player { + grid-template-columns: minmax(240px, 1fr) minmax(300px, 2fr); + } +} + +@media (max-width: 820px) { + #app { + grid-template-columns: 76px 1fr; + } + + #sidebar { + padding: 12px 8px; + } + + .logo { + justify-content: center; + padding: 6px 0 16px; + } + + .logo .logo-mark { + width: 34px; + height: 34px; + } + + .logo { + font-size: 0; + } + + .nav-item { + justify-content: center; + padding: 10px; + } + + .nav-item span, + .section-label, + .pl-list, + .side-footer { + display: none; + } + + .hero { + flex-direction: column; + align-items: flex-start; + gap: 22px; + padding: 24px; + } + + .hero-art { + width: min(55vw, 240px); + transform: none; + } + + .hero-info { + max-width: 100%; + } + + .now-inner { + grid-template-columns: 1fr; + gap: 30px; + padding: 80px 24px 40px; + } + + .now-art-wrap { + max-width: 340px; + margin: 0 auto; + } + + #view { + padding: 16px 16px 40px; + } + + .song-row.chart { + grid-template-columns: 26px 40px minmax(0, 1fr) 48px; + } + + .song-row.chart .row-album { + display: none; + } +} + +@media (max-width: 560px) { + .song-row.num { + grid-template-columns: 26px minmax(0, 1fr) 46px; + } + + .song-row.num .row-time { + display: none; + } + + .song-row.art { + grid-template-columns: 40px minmax(0, 1fr) 46px; + } + + .song-row.art .row-time { + display: none; + } + + .row-art { + width: 40px; + height: 40px; + } + + .pb-meta { + max-width: 120px; + } +}