mirror of
https://github.com/barkeser2002/just-music-premium.git
synced 2026-09-25 02:19:58 +03:00
- Paralel indirme: tek tek yerine MAX_DL_CONCURRENT=3 escanli indirme havuzu.
active_downloads {thread: yuzde}, download_done sayaci, _pump_downloads havuzu
doldurur, _emit_dl_progress toplam ilerleme + "X/Y (N etkin)" pill. THREAD-GUVENLI:
sinyaller QObject-bagli slotlara gider (self.sender() ile thread bulunur) -> tum
kuyruk/havuz mutasyonu + QThread olusturma ana thread'de; 0 Qt cross-thread uyarisi.
Dogrulandi: sahte-thread testi peak=3, dogru sayac + reset.
- Responsive player bar: ikincil kontroller (klip/karaoke/ambiyans/kuyruk/soz) varsayilan
olarak ⋯ tasma menusune katlanir (>=1500px satir ici acilir). Kontrol GIZLENMEZ.
Boylece bar her genislikte sigar, tasip sayfayi yatay kaydirip sol kenar cubugunu
ekrandan itmez ("sapitmaz"). Dogrulandi: 1600/1100/820px'te overflowX=0, sidebarX=8,
⋯ toggle, 0 JS hatasi. #pHeroBtn eklenince (v1.5.0) bar tasmisti; bu onu cozer.
650 lines
46 KiB
CSS
650 lines
46 KiB
CSS
/* ===== Just Music — premium tasarım ===== */
|
||
@font-face{font-family:'Manrope';font-style:normal;font-weight:200 900;font-display:swap;
|
||
src:url('fonts/manrope-latin.woff2') format('woff2');
|
||
unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
|
||
@font-face{font-family:'Manrope';font-style:normal;font-weight:200 900;font-display:swap;
|
||
src:url('fonts/manrope-latinext.woff2') format('woff2');
|
||
unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
|
||
@font-face{font-family:'Sora';font-style:normal;font-weight:100 800;font-display:swap;
|
||
src:url('fonts/sora-latin.woff2') format('woff2');
|
||
unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
|
||
@font-face{font-family:'Sora';font-style:normal;font-weight:100 800;font-display:swap;
|
||
src:url('fonts/sora-latinext.woff2') format('woff2');
|
||
unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;}
|
||
:root{
|
||
--bg:#0a0a0b; --panel:#131315; --panel2:#191a1d; --card:#1a1b1e; --card-h:#28292e;
|
||
--text:#fff; --muted:#a7a7ad; --muted2:#6a6a72;
|
||
--accent:#1db954; --accent2:#1ed760; --accent-rgb:29,185,84;
|
||
--font-display:'Sora','Manrope',sans-serif;
|
||
--radius:12px; --shadow:0 10px 34px rgba(0,0,0,.55);
|
||
--topbar-h:60px; --player-h:92px;
|
||
}
|
||
*{box-sizing:border-box;margin:0;padding:0}
|
||
html,body{height:100%;overflow-x:hidden}
|
||
body{
|
||
background:var(--bg); color:var(--text);
|
||
font-family:'Segoe UI','Inter',system-ui,-apple-system,sans-serif;
|
||
font-size:14px; overflow:hidden; user-select:none;
|
||
}
|
||
button{font-family:inherit;cursor:pointer;color:inherit;background:none;border:none}
|
||
img{display:block}
|
||
::-webkit-scrollbar{width:10px;height:10px}
|
||
::-webkit-scrollbar-thumb{background:#3a3a3a;border-radius:6px;border:2px solid transparent;background-clip:content-box}
|
||
::-webkit-scrollbar-thumb:hover{background:#5a5a5a;background-clip:content-box}
|
||
::-webkit-scrollbar-track{background:transparent}
|
||
|
||
#app{display:flex;flex-direction:column;height:100vh;overflow-x:hidden}
|
||
|
||
/* ---------- ÜST BAR ---------- */
|
||
.topbar{height:var(--topbar-h);display:flex;align-items:center;gap:16px;padding:0 16px;background:var(--bg);flex:0 0 auto}
|
||
.topbar-left{display:flex;gap:8px}
|
||
.round-btn{width:34px;height:34px;border-radius:50%;background:rgba(0,0,0,.6);color:#e8e8e8;font-size:20px;display:flex;align-items:center;justify-content:center;transition:.15s}
|
||
.round-btn:hover{background:#1f1f1f;transform:scale(1.05)}
|
||
.round-btn.nav-off{opacity:.3;pointer-events:none} /* geçmiş yoksa geri/ileri pasif */
|
||
.search-wrap{display:flex;align-items:center;gap:10px;flex:1;max-width:560px}
|
||
.home-btn{width:44px;height:44px;border-radius:50%;background:var(--panel2);font-size:18px;display:flex;align-items:center;justify-content:center;transition:.15s}
|
||
.home-btn:hover{background:var(--card-h);transform:scale(1.04)}
|
||
.search-box{flex:1;display:flex;align-items:center;gap:10px;background:var(--panel2);border:2px solid transparent;border-radius:24px;padding:0 16px;height:44px;transition:.15s}
|
||
.search-box:focus-within{border-color:#666;background:#242424}
|
||
.search-ic{font-size:16px;opacity:.8}
|
||
.search-box input{flex:1;background:none;border:none;outline:none;color:#fff;font-size:14px}
|
||
.topbar-right{display:flex;align-items:center;gap:8px;margin-left:auto}
|
||
.chip-btn{background:rgba(0,0,0,.5);border:1px solid #333;border-radius:20px;padding:8px 14px;font-size:12px;color:#eee;transition:.15s;white-space:nowrap}
|
||
.chip-btn:hover{border-color:var(--accent);background:#1f1f1f}
|
||
/* Native <select> → tamamen özel görünüm (varsayılan tarayıcı oku kaldırıldı,
|
||
kendi chevron'umuz + hover/focus + option renkleri). */
|
||
.mini-sel{appearance:none;-webkit-appearance:none;-moz-appearance:none;
|
||
background-color:var(--panel2);color:#fff;border:1px solid transparent;border-radius:16px;
|
||
padding:6px 26px 6px 12px;font-size:12px;font-weight:600;font-family:inherit;outline:none;cursor:pointer;
|
||
transition:.15s;
|
||
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23a7a7ad' stroke-width='1.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
||
background-repeat:no-repeat;background-position:right 10px center}
|
||
.mini-sel:hover{background-color:var(--card-h);border-color:#3a3a3a}
|
||
.mini-sel:focus-visible{border-color:var(--accent);box-shadow:0 0 0 2px rgba(var(--accent-rgb),.35)}
|
||
.mini-sel option{background:#1a1b1e;color:#fff;font-weight:600}
|
||
.mini-sel::-ms-expand{display:none}
|
||
.mini-input{width:100%;background:var(--panel2);color:#fff;border:1px solid transparent;border-radius:12px;
|
||
padding:8px 12px;font-size:12px;font-family:inherit;outline:none;transition:.15s;box-sizing:border-box}
|
||
.mini-input::placeholder{color:var(--muted2)}
|
||
.mini-input:focus-visible{border-color:var(--accent);box-shadow:0 0 0 2px rgba(var(--accent-rgb),.3)}
|
||
.toggle input:disabled+*,.toggle input:disabled{opacity:.5}
|
||
|
||
/* ---------- GÖVDE ---------- */
|
||
.body{flex:1;display:flex;gap:8px;padding:0 8px 8px;min-height:0}
|
||
.sidebar{width:300px;flex:0 0 auto;display:flex;flex-direction:column;gap:8px;min-height:0}
|
||
.nav-links{background:var(--panel);border-radius:var(--radius);padding:8px;display:flex;flex-direction:column;gap:2px}
|
||
.nav-link{display:flex;align-items:center;gap:16px;padding:11px 14px;border-radius:8px;font-size:15px;font-weight:700;color:var(--muted);transition:.15s}
|
||
.nav-link span{font-size:15px}
|
||
.nav-link:hover{color:#fff}
|
||
.nav-link.active{color:#fff;background:#1c1c1c}
|
||
.library{background:var(--panel);border-radius:var(--radius);flex:1;display:flex;flex-direction:column;min-height:0;padding:8px 4px 8px 8px}
|
||
.library-head{display:flex;align-items:center;justify-content:space-between;padding:6px 8px 8px}
|
||
.lib-title{font-size:14px;font-weight:800;color:#e8e8e8;letter-spacing:.3px}
|
||
.lib-actions{display:flex;gap:6px}
|
||
.plus-btn{background:#232323;color:#cfcfcf;border-radius:16px;padding:6px 12px;font-size:12px;font-weight:700;transition:.15s}
|
||
.plus-btn:hover{background:#333;color:#fff;transform:scale(1.03)}
|
||
.lib-search{margin:0 8px 8px;background:#242424;border:1px solid transparent;border-radius:8px;padding:8px 12px;color:#fff;outline:none;font-size:13px}
|
||
.lib-search:focus{border-color:#555;background:#2a2a2a}
|
||
.playlist-list{flex:1;overflow-y:auto;padding-right:4px}
|
||
.pl-row{display:flex;align-items:center;gap:12px;padding:8px;border-radius:8px;cursor:pointer;transition:.12s}
|
||
.pl-row:hover{background:#1c1c1c}
|
||
.pl-row.active{background:#282828}
|
||
.pl-cover{width:48px;height:48px;border-radius:6px;object-fit:cover;flex:0 0 auto;background:#333}
|
||
.pl-info{min-width:0;flex:1}
|
||
.pl-name{font-size:14px;font-weight:600;color:#eee;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.pl-row.active .pl-name{color:var(--accent)}
|
||
.pl-sub{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
|
||
|
||
/* Daraltılabilir kenar çubuğu — tam ↔ ikon rayı (A/B/C yönlerinin ortak zemini) */
|
||
.sidebar{transition:width .28s cubic-bezier(.2,.7,.2,1)}
|
||
.sidebar-rail .sidebar{width:64px}
|
||
.sidebar-rail .nav-link{gap:0;justify-content:center;padding:11px 0}
|
||
.sidebar-rail .nav-link span,
|
||
.sidebar-rail .lib-title,
|
||
.sidebar-rail .lib-search,
|
||
.sidebar-rail .lib-actions,
|
||
.sidebar-rail .library-head,
|
||
.sidebar-rail .pl-info{display:none}
|
||
.sidebar-rail .library{padding:8px 4px}
|
||
.sidebar-rail .playlist-list{padding-right:0}
|
||
.sidebar-rail .pl-row{justify-content:center;gap:0;padding:5px 0}
|
||
.sidebar-rail .pl-cover,.sidebar-rail .mosaic.pl-cover{width:42px;height:42px}
|
||
#sidebarToggle i{transition:transform .28s cubic-bezier(.2,.7,.2,1)}
|
||
.sidebar-rail #sidebarToggle i{transform:rotate(90deg)}
|
||
|
||
/* ---------- ANA İÇERİK ---------- */
|
||
.main{flex:1;min-width:0;background:linear-gradient(180deg,#1c1c1c 0,var(--panel) 260px);border-radius:var(--radius);overflow-y:auto;position:relative}
|
||
.view-pad{padding:24px 28px 40px}
|
||
.section-title{font-size:24px;font-weight:800;margin:26px 0 16px}
|
||
.section-title:first-child{margin-top:8px}
|
||
|
||
/* home */
|
||
.quick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
|
||
.quick-card{display:flex;align-items:center;gap:14px;background:#232323;border-radius:8px;overflow:hidden;cursor:pointer;transition:.15s;height:64px}
|
||
.quick-card:hover{background:#333}
|
||
.quick-card img{width:64px;height:64px;object-fit:cover;background:#333;flex:0 0 auto}
|
||
.quick-card .qc-name{font-weight:700;font-size:14px;padding-right:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.card-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:18px}
|
||
.card{background:var(--card);border-radius:10px;padding:16px;cursor:pointer;transition:.2s;position:relative}
|
||
.card:hover{background:var(--card-h)}
|
||
.card .card-cover{width:100%;aspect-ratio:1;border-radius:8px;object-fit:cover;box-shadow:var(--shadow);background:#333;margin-bottom:14px}
|
||
.card .card-name{font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.card .card-sub{color:var(--muted);font-size:13px;margin-top:6px;line-height:1.4;height:36px;overflow:hidden}
|
||
.card .card-play{position:absolute;right:24px;top:150px;width:48px;height:48px;border-radius:50%;background:var(--accent);color:#000;display:flex;align-items:center;justify-content:center;font-size:20px;opacity:0;transform:translateY(8px);transition:.2s;box-shadow:0 8px 16px rgba(0,0,0,.4)}
|
||
.card:hover .card-play{opacity:1;transform:translateY(0)}
|
||
.card .card-play:hover{transform:scale(1.06)}
|
||
|
||
/* playlist header */
|
||
.pl-header{display:flex;align-items:flex-end;gap:24px;padding:64px 28px 24px;background:linear-gradient(180deg,var(--hdr,#333) 0%,rgba(0,0,0,.35) 100%)}
|
||
.pl-header .hdr-cover{width:200px;height:200px;border-radius:8px;object-fit:cover;box-shadow:0 16px 40px rgba(0,0,0,.6);flex:0 0 auto;background:#333}
|
||
.pl-header .hdr-meta{min-width:0}
|
||
.hdr-kind{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:1px}
|
||
.hdr-name{font-size:clamp(32px,5vw,72px);font-weight:900;line-height:1.05;margin:8px 0 14px;word-break:break-word}
|
||
.hdr-sub{font-size:14px;color:#dcdcdc;font-weight:500}
|
||
.hdr-sub b{color:#fff}
|
||
.pl-actions{display:flex;align-items:center;gap:22px;padding:20px 28px}
|
||
.big-play{width:56px;height:56px;border-radius:50%;background:var(--accent);color:#000;font-size:24px;display:flex;align-items:center;justify-content:center;transition:.15s;box-shadow:0 8px 20px rgba(0,0,0,.4)}
|
||
.big-play:hover{transform:scale(1.06);background:var(--accent2)}
|
||
.act-icon{font-size:26px;color:var(--muted);transition:.15s}
|
||
.act-icon:hover{color:#fff;transform:scale(1.06)}
|
||
.act-icon.on{color:var(--accent)}
|
||
|
||
/* track table */
|
||
.tracks{padding:0 28px 20px}
|
||
.track-head{display:grid;grid-template-columns:36px 1fr 120px 48px 92px;gap:12px;padding:6px 12px;border-bottom:1px solid #2a2a2a;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px;position:sticky;top:0;background:var(--panel);z-index:1}
|
||
.track{display:grid;grid-template-columns:36px 1fr 120px 48px 92px;gap:12px;align-items:center;padding:8px 12px;border-radius:6px;cursor:pointer;transition:.1s}
|
||
.track:hover{background:#2a2a2a}
|
||
.track.active .t-title{color:var(--accent)}
|
||
.t-index{color:var(--muted);text-align:center;font-size:14px;font-variant-numeric:tabular-nums}
|
||
.track:hover .t-index .num{display:none}
|
||
.t-index .ic{display:none;color:#fff}
|
||
.track:hover .t-index .ic{display:inline}
|
||
.t-main{display:flex;align-items:center;gap:12px;min-width:0}
|
||
.t-cover{width:40px;height:40px;border-radius:4px;object-fit:cover;background:#333;flex:0 0 auto}
|
||
.t-txt{min-width:0}
|
||
.t-title{font-size:14px;font-weight:600;color:#eee;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.t-artist{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
|
||
.t-artist:hover{color:#fff;text-decoration:underline}
|
||
.t-album{color:var(--muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.t-fav{font-size:16px;color:var(--muted2);opacity:0;transition:.12s;text-align:center}
|
||
.track:hover .t-fav{opacity:1}
|
||
.t-fav.on{color:var(--accent);opacity:1}
|
||
.t-dur{color:var(--muted);text-align:right;font-size:13px;display:flex;align-items:center;justify-content:flex-end;gap:10px}
|
||
.t-menu{opacity:0;font-size:18px;color:var(--muted)}
|
||
.track:hover .t-menu{opacity:1}
|
||
.t-menu:hover{color:#fff}
|
||
.empty-hint{color:var(--muted);padding:40px 28px;font-size:15px;text-align:center}
|
||
|
||
/* search */
|
||
.search-results{padding:8px 28px 30px}
|
||
.sr-toolbar{display:flex;align-items:center;gap:14px;margin:8px 0 16px}
|
||
.sr-toolbar .count{color:var(--muted);font-size:13px}
|
||
.sr-row{display:grid;grid-template-columns:28px 56px 1fr 64px 40px;gap:12px;align-items:center;padding:8px;border-radius:8px;cursor:pointer;transition:.12s}
|
||
.sr-row:hover{background:#242424}
|
||
.sr-row:hover .sr-dlbtn{background:var(--accent);color:#000}
|
||
.sr-row img{width:56px;height:42px;border-radius:4px;object-fit:cover;background:#333}
|
||
.sr-check{width:20px;height:20px;accent-color:var(--accent);cursor:pointer}
|
||
.sr-dlbtn{width:34px;height:34px;border:none;border-radius:50%;background:var(--card-h);color:#fff;font-size:13px;
|
||
cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:.15s;justify-self:center}
|
||
.sr-dlbtn:hover{transform:scale(1.12)}
|
||
.sr-row.done{opacity:.6}
|
||
.sr-row.done .sr-dlbtn{background:var(--accent);color:#000}
|
||
@media(max-width:640px){.sr-row{grid-template-columns:24px 46px 1fr 40px;gap:8px}.sr-dur{display:none}}
|
||
.sr-title{font-size:14px;font-weight:600;color:#eee;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.sr-sub{font-size:12px;color:var(--muted);margin-top:2px}
|
||
.sr-dur{color:var(--muted);font-size:12px;text-align:right}
|
||
|
||
/* effects */
|
||
.fx-wrap{padding:22px 28px 40px;display:flex;gap:26px;flex-wrap:wrap}
|
||
.fx-card{background:#141414;border:1px solid #262626;border-radius:14px;padding:22px}
|
||
.fx-card h3{font-size:16px;margin-bottom:16px;display:flex;align-items:center;gap:10px}
|
||
.eq-top{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}
|
||
.toggle{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;cursor:pointer}
|
||
.toggle input{width:16px;height:16px;accent-color:var(--accent)}
|
||
.eq-bands{display:flex;gap:10px}
|
||
.eq-band{display:flex;flex-direction:column;align-items:center;gap:8px;width:34px}
|
||
.eq-band .db{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}
|
||
.eq-band .lbl{font-size:10px;color:#cfcfcf;font-weight:600}
|
||
.vslider{position:relative;width:6px;height:150px;background:#3a3a3a;border-radius:4px;cursor:pointer}
|
||
.vslider .vfill{position:absolute;left:0;right:0;bottom:50%;background:var(--accent);border-radius:4px}
|
||
.vslider .vknob{position:absolute;left:50%;width:14px;height:14px;border-radius:50%;background:#fff;transform:translate(-50%,50%);box-shadow:0 2px 6px rgba(0,0,0,.5)}
|
||
.fx-rows{display:flex;flex-direction:column;gap:16px;min-width:320px}
|
||
.fx-row .fx-head{display:flex;justify-content:space-between;font-size:13px;font-weight:600;margin-bottom:6px}
|
||
.fx-row .fx-val{color:var(--accent);font-weight:700}
|
||
.hslider{position:relative;height:6px;background:#3a3a3a;border-radius:4px;cursor:pointer}
|
||
.hslider .hfill{position:absolute;left:0;top:0;bottom:0;background:var(--accent);border-radius:4px}
|
||
.hslider .hknob{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;background:#fff;transform:translate(-50%,-50%);box-shadow:0 2px 6px rgba(0,0,0,.5)}
|
||
.btn{background:#232323;border-radius:20px;padding:8px 16px;font-size:13px;font-weight:700;transition:.15s}
|
||
.btn:hover{background:#333;transform:scale(1.03)}
|
||
.btn.accent{background:var(--accent);color:#000}
|
||
.btn.accent:hover{background:var(--accent2)}
|
||
|
||
/* right panel (now playing) */
|
||
.right-panel{width:340px;flex:0 0 auto;background:var(--panel);border-radius:var(--radius);overflow-y:auto;overflow-x:hidden;display:none}
|
||
.right-panel.show{display:block;animation:npDrawerIn .32s cubic-bezier(.2,.7,.2,1)}
|
||
@keyframes npDrawerIn{from{opacity:0;transform:translateX(26px)}to{opacity:1;transform:none}}
|
||
@media (prefers-reduced-motion:reduce){.right-panel.show{animation:none}}
|
||
.np-pad{padding:16px}
|
||
.np-cover{width:100%;aspect-ratio:1;border-radius:10px;object-fit:cover;box-shadow:var(--shadow);background:#333}
|
||
.np-title{font-size:22px;font-weight:800;margin:16px 0 4px}
|
||
.np-artist{color:var(--muted);font-size:14px}
|
||
.np-viz{width:100%;height:90px;margin:16px 0;border-radius:10px;background:#0d0d0d;display:block}
|
||
.np-lyrics-card{background:#181818;border-radius:10px;padding:16px;margin-top:14px}
|
||
.np-lyrics-card .lh{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:8px}
|
||
.lh-btns{display:flex;gap:6px;flex:0 0 auto}
|
||
.lh-btns .btn{padding:6px 10px;font-size:11px}
|
||
.np-lyrics-card .lh b{font-size:14px}
|
||
.np-lyrics{white-space:pre-wrap;color:#cfcfcf;font-size:13px;line-height:1.7;max-height:260px;overflow-y:auto}
|
||
.np-lyrics-edit{width:100%;min-height:180px;background:#0f0f0f;border:1px solid #2a2a2a;border-radius:8px;color:#fff;padding:10px;font-size:13px;line-height:1.6;resize:vertical;outline:none;font-family:inherit}
|
||
|
||
/* lyrics full view */
|
||
.lyrics-view{padding:40px 60px}
|
||
.lyrics-view .lv-line{font-size:30px;font-weight:800;color:#cfcfcf;margin:14px 0;line-height:1.2}
|
||
|
||
/* ---------- PLAYER ---------- */
|
||
.player{height:var(--player-h);flex:0 0 auto;background:var(--panel2);display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:16px;padding:0 16px;border-top:1px solid #000}
|
||
.p-left{display:flex;align-items:center;gap:12px;min-width:0}
|
||
.p-cover{width:56px;height:56px;border-radius:6px;object-fit:cover;background:#333;flex:0 0 auto}
|
||
.p-meta{min-width:0}
|
||
.p-title{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.p-artist{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
|
||
.icon-btn{font-size:18px;color:var(--muted);transition:.12s;padding:4px}
|
||
.icon-btn:hover{color:#fff;transform:scale(1.08)}
|
||
.icon-btn.on,.icon-btn.active{color:var(--accent)}
|
||
.icon-btn.fav.on{color:var(--accent)}
|
||
.p-center{display:flex;flex-direction:column;align-items:center;gap:8px;width:min(46vw,560px);justify-self:center}
|
||
.p-controls{display:flex;align-items:center;gap:22px}
|
||
.play-btn{width:40px;height:40px;border-radius:50%;background:#fff;color:#000;font-size:16px;display:flex;align-items:center;justify-content:center;transition:.12s}
|
||
.play-btn:hover{transform:scale(1.07);background:var(--accent2);color:#000}
|
||
.p-seek{display:flex;align-items:center;gap:10px;width:100%}
|
||
.time{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:36px;text-align:center}
|
||
.bar{position:relative;flex:1;height:5px;background:#4d4d4d;border-radius:3px;cursor:pointer}
|
||
.bar-fill{position:absolute;left:0;top:0;bottom:0;width:0;background:#b3b3b3;border-radius:3px}
|
||
.bar:hover .bar-fill{background:var(--accent)}
|
||
.bar-knob{position:absolute;top:50%;left:0;width:12px;height:12px;border-radius:50%;background:#fff;transform:translate(-50%,-50%);opacity:0;transition:opacity .1s}
|
||
.bar:hover .bar-knob{opacity:1}
|
||
.p-right{display:flex;align-items:center;gap:12px;justify-self:end;min-width:0;position:relative}
|
||
/* İkincil kontroller (klip/karaoke/ambiyans/kuyruk/söz) VARSAYILAN olarak ⋯ menüsünde:
|
||
böylece player bar her genişlikte sığar, taşıp sayfayı yatay kaydırıp (sol kenar çubuğunu
|
||
ekrandan iterek) "sapıtmaz". Kontroller GİZLENMEZ — tek tıkla menüde. */
|
||
.p-more-btn{display:flex}
|
||
.p-extra{position:absolute;bottom:calc(100% + 12px);right:0;display:none;gap:16px;
|
||
background:var(--panel);border:1px solid #2b2b2b;border-radius:14px;padding:10px 14px;
|
||
box-shadow:0 14px 40px rgba(0,0,0,.6);z-index:60;animation:viewIn .18s var(--ease-out)}
|
||
.p-right.more-open .p-extra{display:flex}
|
||
.p-extra .icon-btn{font-size:19px;padding:5px}
|
||
/* Çok geniş ekran: yer bol → ikincilleri satır içine aç (⋯ gizlenir) */
|
||
@media(min-width:1500px){
|
||
.p-more-btn{display:none}
|
||
.p-extra{position:static;display:flex;gap:12px;background:none;border:none;padding:0;box-shadow:none;animation:none}
|
||
}
|
||
@media(max-width:1240px){
|
||
.p-center{width:min(42vw,480px)}
|
||
.p-left{gap:9px}
|
||
.p-controls{gap:16px}
|
||
}
|
||
@media(max-width:1040px){
|
||
.p-right .mini-sel{padding:5px 22px 5px 9px;font-size:11px}
|
||
.p-center{width:min(40vw,400px)}
|
||
.vol{width:80px}
|
||
#sleepSel{display:none} /* uyku zamanlayıcı → niş, gizle */
|
||
}
|
||
@media(max-width:880px){
|
||
#speedSel{display:none} /* hız → niş */
|
||
.p-cover{width:46px;height:46px}
|
||
.p-center{width:min(44vw,340px)}
|
||
.p-controls{gap:12px}
|
||
.vol{width:64px}
|
||
.topbar-right #backupBtn,.topbar-right #helpBtn,.topbar-right #compactBtn{display:none}
|
||
.chip-btn{padding:7px 10px}
|
||
}
|
||
.vol{position:relative;width:100px;height:5px;background:#4d4d4d;border-radius:3px;cursor:pointer}
|
||
.vol-fill{position:absolute;left:0;top:0;bottom:0;width:70%;background:#b3b3b3;border-radius:3px}
|
||
.vol:hover .vol-fill{background:var(--accent)}
|
||
|
||
/* toast + menu + modal */
|
||
.toast{position:fixed;left:50%;bottom:110px;transform:translateX(-50%) translateY(20px);background:#2a2a2a;color:#fff;padding:12px 22px;border-radius:8px;border-left:4px solid var(--accent);font-size:13px;font-weight:600;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.25s;z-index:9999}
|
||
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
|
||
.ctx-menu{position:fixed;background:#282828;border:1px solid #3e3e3e;border-radius:6px;padding:5px 0;min-width:200px;box-shadow:0 12px 30px rgba(0,0,0,.6);z-index:9998}
|
||
.ctx-menu a{display:block;padding:10px 16px;font-size:13px;color:#eaeaea;cursor:pointer;white-space:nowrap}
|
||
.ctx-menu a:hover{background:var(--accent);color:#000}
|
||
.ctx-menu .sep{height:1px;background:#3e3e3e;margin:4px 8px}
|
||
.ctx-menu .lab{font-size:10px;color:#888;padding:8px 16px 4px;text-transform:uppercase;font-weight:700}
|
||
.modal-back{position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:9997}
|
||
.modal{background:#1e1e1e;border:1px solid #333;border-radius:12px;padding:26px;width:420px;box-shadow:var(--shadow)}
|
||
.modal h3{margin-bottom:16px;font-size:18px}
|
||
.modal input{width:100%;background:#2a2a2a;border:1px solid #444;border-radius:8px;padding:10px 14px;color:#fff;font-size:14px;outline:none;margin-bottom:12px}
|
||
.modal input:focus{border-color:var(--accent)}
|
||
.modal .m-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}
|
||
|
||
/* ================= POLISH ================= */
|
||
body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
|
||
::selection{background:rgba(var(--accent-rgb),.35)}
|
||
.main{background:linear-gradient(180deg, rgba(var(--accent-rgb),.11) 0, #191919 220px, var(--panel) 440px)}
|
||
.right-panel{background:linear-gradient(180deg, rgba(var(--accent-rgb),.09) 0, var(--panel) 220px)}
|
||
.view-pad{padding:28px 32px 48px}
|
||
.section-title{letter-spacing:-.6px;font-size:26px}
|
||
.card{transition:background .25s, transform .25s, box-shadow .25s}
|
||
.card:hover{transform:translateY(-4px);box-shadow:0 14px 34px rgba(0,0,0,.55)}
|
||
.card .card-play{box-shadow:0 10px 22px rgba(0,0,0,.5)}
|
||
.quick-card{position:relative;transition:background .2s, transform .18s}
|
||
.quick-card:hover{transform:translateY(-2px)}
|
||
.qc-play{position:absolute;right:14px;top:12px;width:40px;height:40px;border-radius:50%;background:var(--accent);color:#000;display:flex;align-items:center;justify-content:center;font-size:15px;opacity:0;transform:translateY(6px);transition:.2s;box-shadow:0 8px 18px rgba(0,0,0,.55)}
|
||
.quick-card:hover .qc-play{opacity:1;transform:translateY(0)}
|
||
.qc-play:hover{transform:scale(1.08)}
|
||
.pl-header{min-height:340px;padding-top:96px;
|
||
background:linear-gradient(180deg, var(--hdr,#333) 0%, color-mix(in srgb, var(--hdr,#333) 30%, #121212) 62%, var(--panel) 100%)}
|
||
.pl-header .hdr-cover{width:224px;height:224px;box-shadow:0 26px 62px rgba(0,0,0,.72)}
|
||
.hdr-name{letter-spacing:-1.5px}
|
||
.pl-actions{background:linear-gradient(180deg, rgba(0,0,0,.28), transparent)}
|
||
.nav-link{position:relative;transition:.15s}
|
||
.nav-link.active::before{content:'';position:absolute;left:2px;top:10px;bottom:10px;width:4px;border-radius:2px;background:var(--accent)}
|
||
.big-play{box-shadow:0 12px 28px rgba(var(--accent-rgb),.45)}
|
||
.big-play:hover{box-shadow:0 14px 34px rgba(var(--accent-rgb),.6)}
|
||
.p-cover{box-shadow:0 6px 18px rgba(0,0,0,.55);transition:transform .2s}
|
||
.p-left:hover .p-cover{transform:scale(1.04)}
|
||
.play-btn{box-shadow:0 4px 14px rgba(0,0,0,.4)}
|
||
.np-cover{box-shadow:0 20px 48px rgba(0,0,0,.6)}
|
||
.track:hover{background:rgba(255,255,255,.07)}
|
||
.track.active{background:rgba(var(--accent-rgb),.12)}
|
||
.pl-row.active{background:linear-gradient(90deg, rgba(var(--accent-rgb),.16), #232323)}
|
||
.chip-btn,.btn,.plus-btn{transition:.15s}
|
||
.empty-hint{opacity:.85;line-height:1.6}
|
||
.topbar{background:linear-gradient(180deg, #0a0a0a, #060606)}
|
||
|
||
/* ================= FONT + YENİ ÖZELLİKLER ================= */
|
||
body,input,select,textarea,button{font-family:'Manrope','Segoe UI',system-ui,sans-serif}
|
||
.appName,.lib-title,.section-title,.hdr-name,.np-title,.modal h3,.hdr-kind{font-family:var(--font-display)}
|
||
.appName{letter-spacing:-.4px;font-weight:800}
|
||
.hdr-name{font-weight:800}
|
||
.main .view-pad{animation:viewIn .34s cubic-bezier(.2,.7,.2,1)}
|
||
@keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
|
||
.home-hero{margin-bottom:6px}
|
||
.greet{margin-top:6px!important}
|
||
|
||
/* accent picker */
|
||
.accent-wrap{width:30px;height:30px;border-radius:50%;overflow:hidden;border:2px solid #3a3a3a;cursor:pointer;flex:0 0 auto;position:relative;transition:.15s}
|
||
.accent-wrap:hover{border-color:var(--accent);transform:scale(1.06)}
|
||
.accent-wrap input[type=color]{position:absolute;inset:-8px;width:48px;height:48px;border:none;padding:0;background:none;cursor:pointer}
|
||
|
||
/* cover mosaic */
|
||
.mosaic{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;overflow:hidden;background:#333}
|
||
.mosaic img{width:100%;height:100%;object-fit:cover;border-radius:0!important}
|
||
.mosaic.card-cover{aspect-ratio:1;width:100%;border-radius:8px;box-shadow:var(--shadow);margin-bottom:14px}
|
||
.mosaic.pl-cover{width:48px;height:48px;border-radius:6px;flex:0 0 auto}
|
||
.mosaic.hdr-cover{border-radius:8px}
|
||
.quick-card .qc-img{width:64px;height:64px;object-fit:cover;background:#333;flex:0 0 auto}
|
||
|
||
/* drag-drop hedefi */
|
||
.pl-row.drop-hover{background:rgba(var(--accent-rgb),.22);box-shadow:inset 0 0 0 2px var(--accent)}
|
||
.track{cursor:grab}
|
||
|
||
/* istatistik */
|
||
.stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:8px}
|
||
.stat-card{background:linear-gradient(135deg,rgba(var(--accent-rgb),.16),var(--card));border:1px solid #262626;border-radius:16px;padding:22px 24px}
|
||
.sc-ic{font-size:24px}.sc-v{font-size:30px;font-weight:800;font-family:var(--font-display);margin:10px 0 2px}
|
||
.sc-l{color:var(--muted);font-size:13px}
|
||
.top-row{display:grid;grid-template-columns:34px 48px 1fr 80px;gap:14px;align-items:center;padding:10px 8px;border-radius:10px;transition:.12s}
|
||
.top-row:hover{background:#1f1f1f}
|
||
.top-rank{font-family:var(--font-display);font-size:18px;font-weight:800;color:var(--muted);text-align:center}
|
||
.top-cover{width:48px;height:48px;border-radius:6px;object-fit:cover;background:#333}
|
||
.top-name{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:7px}
|
||
.top-bar{height:6px;background:#2a2a2a;border-radius:4px;overflow:hidden}
|
||
.top-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent2));border-radius:4px}
|
||
.top-count{color:var(--muted);font-size:13px;text-align:right}
|
||
|
||
/* kuyruk */
|
||
.qhead{display:flex;align-items:center;justify-content:space-between;gap:14px}
|
||
.q-label{color:var(--muted);font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;margin:20px 0 8px}
|
||
|
||
/* tam ekran şimdi çalıyor */
|
||
.fs-now{position:fixed;inset:0;z-index:9990;display:flex;align-items:center;justify-content:center;animation:fsIn .3s ease}
|
||
@keyframes fsIn{from{opacity:0}to{opacity:1}}
|
||
.fs-bg{position:absolute;inset:0;background:radial-gradient(1200px 700px at 30% 20%, #1e3a2a, #0a0a0b 70%);z-index:0}
|
||
.fs-bg::after{content:'';position:absolute;inset:0;background:rgba(0,0,0,.28)}
|
||
.fs-close{position:absolute;top:24px;right:28px;z-index:2;font-size:20px;width:44px;height:44px;border-radius:50%;background:rgba(0,0,0,.45);color:#fff}
|
||
.fs-close:hover{background:rgba(0,0,0,.75);transform:scale(1.05)}
|
||
.fs-inner{position:relative;z-index:1;display:flex;gap:56px;align-items:center;max-width:1120px;padding:40px;flex-wrap:wrap;justify-content:center}
|
||
.fs-cover{width:min(46vh,440px);height:min(46vh,440px);border-radius:18px;object-fit:cover;box-shadow:0 44px 110px rgba(0,0,0,.72)}
|
||
.fs-info{max-width:480px}
|
||
.fs-title{font-family:var(--font-display);font-size:clamp(34px,4.4vw,58px);font-weight:800;line-height:1.04;letter-spacing:-1.5px}
|
||
.fs-artist{color:#dcdcdc;font-size:18px;margin-top:12px}
|
||
.fs-viz{width:100%;height:78px;margin:26px 0}
|
||
.fs-lyrics{white-space:pre-wrap;color:#dcdcdc;font-size:15px;line-height:1.85;max-height:32vh;overflow-y:auto}
|
||
|
||
/* kısayol penceresi */
|
||
.sc-list{display:flex;flex-direction:column;gap:9px}
|
||
.sc-row{display:flex;align-items:center;gap:14px}
|
||
.sc-row kbd{background:#2a2a2a;border:1px solid #444;border-bottom-width:2px;border-radius:6px;padding:4px 10px;font-family:var(--font-display);font-size:12px;min-width:58px;text-align:center;color:#fff}
|
||
.sc-row span{color:#ccc;font-size:14px}
|
||
|
||
/* indirme / ayırma pill'leri — SOL-alt (mini-klip sağ-altta, çakışmasın).
|
||
İki pill aynı anda çıkabilir: #sepPill, #dlPill'in üstüne yığılır. */
|
||
.dl-pill{position:fixed;left:20px;right:auto;bottom:calc(var(--player-h) + 18px);background:#1c1c20;border:1px solid #333;border-radius:14px;padding:12px 16px;min-width:250px;box-shadow:var(--shadow);opacity:0;transform:translateY(14px);transition:.25s;z-index:9995;pointer-events:none}
|
||
.dl-pill.show{opacity:1;transform:translateY(0)}
|
||
#sepPill{bottom:calc(var(--player-h) + 78px)} /* indirme pill'inin üstünde */
|
||
.dl-txt{font-size:12px;font-weight:700;display:block;margin-bottom:8px}
|
||
.dl-bar{height:5px;background:#333;border-radius:3px;overflow:hidden}
|
||
.dl-fill{height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent2));border-radius:3px;transition:width .2s}
|
||
|
||
/* alt bar mini görselleştirici */
|
||
.player-viz{width:52px;height:30px;margin-left:8px;opacity:.9;flex:0 0 auto}
|
||
|
||
/* dokunuş: derinlik */
|
||
.card,.quick-card,.stat-card{background-image:linear-gradient(180deg,rgba(255,255,255,.02),transparent)}
|
||
|
||
/* ================= ÇAĞ AÇICI ÖZELLİKLER ================= */
|
||
/* ambiyans ışığı */
|
||
.ambient{position:fixed;inset:0;pointer-events:none;z-index:8000;transition:box-shadow .1s linear}
|
||
/* ruh hali rozeti */
|
||
.p-sub-row{display:flex;align-items:center;gap:8px;min-width:0}
|
||
.mood-chip{display:none;align-items:center;font-size:10px;font-weight:800;padding:2px 9px;border-radius:20px;cursor:pointer;white-space:nowrap;flex:0 0 auto}
|
||
/* şarkı DNA'sı (dalga formu) */
|
||
.np-wlabel{color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;margin:18px 0 6px}
|
||
.wave-canvas{width:100%;height:66px;cursor:pointer;display:block;border-radius:6px}
|
||
.abloop{display:flex;align-items:center;gap:6px;margin-top:12px;flex-wrap:wrap}
|
||
.ab-label{font-size:11px;font-weight:800;color:var(--muted)}
|
||
.ab-btn{width:28px;height:26px;border-radius:7px;background:#242424;color:#e0e0e0;font-weight:800;font-size:12px;transition:.12s}
|
||
.ab-btn:hover{background:var(--accent);color:#000;transform:scale(1.06)}
|
||
.abloop-status{font-size:11px;color:var(--muted);margin-left:2px;width:100%}
|
||
/* odak sesleri */
|
||
.sc-btns{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
|
||
.panelHint2{color:var(--muted2);font-size:11px;margin-top:12px;line-height:1.5}
|
||
/* kompakt mod */
|
||
body.compact .sidebar,body.compact .right-panel{display:none}
|
||
.icon-btn.fav.burst{animation:burst .45s ease}
|
||
@keyframes burst{0%{transform:scale(1)}40%{transform:scale(1.5)}100%{transform:scale(1)}}
|
||
|
||
/* ================= 20 ÖZELLİK v8 ================= */
|
||
.np-badges{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
|
||
.np-badge{font-size:11px;font-weight:800;padding:5px 11px;border-radius:20px;background:#232326;color:#ddd}
|
||
.np-spec{width:100%;height:124px;border-radius:8px;background:#0b0b0c;display:block}
|
||
.lrc-line{color:var(--muted);font-size:14px;line-height:1.95;cursor:pointer;transition:.15s;opacity:.55}
|
||
.lrc-line:hover{color:#fff}
|
||
.lrc-line.active{color:var(--accent);font-weight:800;opacity:1;transform:translateX(2px)}
|
||
.pl-section-label{color:var(--muted2);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;padding:16px 8px 6px}
|
||
.smart-cover{display:flex;align-items:center;justify-content:center;font-size:22px;background:linear-gradient(135deg,rgba(var(--accent-rgb),.32),#2a2a2e)}
|
||
.pl-actions2{padding:12px 0 6px}
|
||
.track.drag-over{box-shadow:inset 0 2px 0 var(--accent)}
|
||
.palette-back{position:fixed;inset:0;background:rgba(0,0,0,.62);z-index:11000;display:flex;justify-content:center;padding-top:13vh;animation:fsIn .18s ease}
|
||
.palette{width:min(620px,90vw);max-height:62vh;background:#1c1c20;border:1px solid #333;border-radius:16px;box-shadow:0 34px 90px rgba(0,0,0,.72);overflow:hidden;display:flex;flex-direction:column;height:fit-content}
|
||
.palette-input{background:#141416;border:none;border-bottom:1px solid #2a2a2a;padding:18px 22px;font-size:16px;color:#fff;outline:none;font-family:var(--font-display)}
|
||
.palette-list{overflow-y:auto;padding:8px}
|
||
.palette-item{padding:11px 15px;border-radius:9px;font-size:14px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.palette-item:hover{background:var(--accent);color:#000}
|
||
|
||
/* ===== KLİP MODU — ekranı kaplamaz, ana alana gömülür (Spotify tarzı) ===== */
|
||
.clip-view{display:flex;flex-direction:column;height:100%;min-height:0;padding:16px 18px 18px;gap:12px;animation:viewIn .22s ease}
|
||
.clip-head{display:flex;align-items:center;gap:12px;flex:0 0 auto}
|
||
.clip-title{font-family:var(--font-display);font-weight:800;font-size:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.clip-hint{color:var(--muted2);font-size:11px;font-weight:700;border:1px solid var(--card-h);border-radius:20px;padding:3px 10px;flex:0 0 auto;white-space:nowrap}
|
||
.clip-btns{display:flex;align-items:center;gap:8px;margin-left:auto;flex:0 0 auto}
|
||
.clip-btn{height:34px;min-width:34px;padding:0 11px;border:none;border-radius:20px;background:var(--card);color:var(--muted);
|
||
font-size:13px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;gap:7px;transition:.15s}
|
||
.clip-btn:hover{background:var(--card-h);color:#fff;transform:scale(1.04)}
|
||
.clip-btn.on{color:var(--accent)}
|
||
.clip-btn.primary{background:#fff;color:#000}
|
||
.clip-btn.primary:hover{background:var(--accent);color:#000}
|
||
.clip-stage{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center}
|
||
/* clip-host: video+ses+söz katmanı. Sekme değişiminde YOK EDİLMEZ, taşınır.
|
||
Genişlik esas, yükseklik orandan gelir. (height:100% + max-width:100% verilirse
|
||
iki boyut da kesinleşir ve aspect-ratio yok sayılır -> siyah bant kalır.) */
|
||
.clip-host{position:relative;width:100%;aspect-ratio:var(--ar,16/9);max-height:100%;border-radius:12px;overflow:hidden;
|
||
background:#000;box-shadow:0 14px 46px rgba(0,0,0,.6)}
|
||
.clip-video{display:block;width:100%;height:100%;background:#000;cursor:pointer;outline:none}
|
||
/* sözler klibin üstünde */
|
||
.clip-lyrics{position:absolute;left:0;right:0;bottom:0;padding:26px 22px 20px;display:flex;flex-direction:column;
|
||
align-items:center;gap:5px;pointer-events:none;text-align:center;
|
||
background:linear-gradient(transparent,rgba(0,0,0,.72))}
|
||
.clip-line{font-family:var(--font-display);font-weight:800;line-height:1.25;text-shadow:0 2px 12px rgba(0,0,0,.9)}
|
||
.clip-line.cur{font-size:26px;color:#fff}
|
||
.clip-line.next{font-size:16px;color:rgba(255,255,255,.5)}
|
||
.clip-stage:fullscreen{background:#000;padding:0}
|
||
.clip-stage:fullscreen .clip-host{border-radius:0;box-shadow:none;max-height:100%}
|
||
.clip-stage:fullscreen .clip-line.cur{font-size:40px}
|
||
.clip-stage:fullscreen .clip-line.next{font-size:24px}
|
||
/* MİNİ OYNATICI (picture-in-picture) — sekme değişince klip buraya iner, akış sürer */
|
||
.clip-mini{position:fixed;right:20px;bottom:calc(var(--player-h) + 16px);width:300px;z-index:900;
|
||
border-radius:12px;overflow:hidden;box-shadow:0 18px 50px rgba(0,0,0,.75);background:#000;animation:viewIn .2s ease;cursor:pointer}
|
||
.clip-mini .clip-host{border-radius:0;box-shadow:none;max-height:none;aspect-ratio:var(--ar,16/9)}
|
||
.clip-host.mini .clip-lyrics{display:none}
|
||
.clip-mini-bar{position:absolute;top:7px;right:7px;display:flex;gap:6px;opacity:0;transition:opacity .15s}
|
||
.clip-mini:hover .clip-mini-bar{opacity:1}
|
||
.clip-mini-btn{width:30px;height:30px;border:none;border-radius:8px;background:rgba(0,0,0,.62);color:#fff;
|
||
cursor:pointer;font-size:13px;display:inline-flex;align-items:center;justify-content:center;transition:.15s}
|
||
.clip-mini-btn:hover{background:var(--accent);color:#000}
|
||
/* ===== Otomatik güncelleme çubuğu ===== */
|
||
.update-bar{position:fixed;left:50%;top:14px;transform:translateX(-50%) translateY(-160%);z-index:11000;
|
||
display:flex;align-items:center;gap:12px;max-width:calc(100% - 40px);
|
||
padding:11px 12px 11px 16px;border-radius:14px;
|
||
background:linear-gradient(135deg,#12331f,#0d2417);border:1px solid rgba(29,185,84,.5);
|
||
box-shadow:0 16px 44px rgba(0,0,0,.6);opacity:0;
|
||
transition:transform .32s cubic-bezier(.2,.7,.2,1),opacity .32s}
|
||
.update-bar.show{transform:translateX(-50%) translateY(0);opacity:1}
|
||
.upd-ic{color:var(--accent2);font-size:18px;flex:0 0 auto}
|
||
.upd-text{font-size:13px;color:#dfeee5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||
.upd-text b{color:#fff}
|
||
.upd-btn{flex:0 0 auto;height:32px;padding:0 13px;border:none;border-radius:20px;background:var(--accent);
|
||
color:#062b16;font-weight:800;font-size:12.5px;cursor:pointer;display:inline-flex;align-items:center;gap:7px;transition:.15s}
|
||
.upd-btn:hover{background:var(--accent2);transform:scale(1.04)}
|
||
.upd-x{flex:0 0 auto;width:30px;height:30px;border:none;border-radius:8px;background:transparent;color:var(--muted);cursor:pointer;font-size:14px}
|
||
.upd-x:hover{background:rgba(255,255,255,.08);color:#fff}
|
||
@media(max-width:640px){.upd-text{white-space:normal}}
|
||
.hdr-desc{color:#d8d8d8;font-size:13px;margin:0 0 10px;max-width:520px;line-height:1.4}
|
||
.nextup{display:flex;align-items:center;gap:12px;background:#181818;border-radius:10px;padding:10px;margin-top:8px;cursor:pointer;transition:.15s}
|
||
.nextup:hover{background:#232323}
|
||
.nextup-cover{width:44px;height:44px;border-radius:6px;object-fit:cover;background:#333}
|
||
.nextup-title{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
|
||
|
||
/* FontAwesome ikon uyumu */
|
||
.icon-btn i,.play-btn i,.round-btn i,.home-btn i,.chip-btn i,.plus-btn i,.big-play i,.card-play i,.qc-play i{pointer-events:none}
|
||
.nav-link i{width:22px;text-align:center;font-size:16px}
|
||
.play-btn i{font-size:15px}
|
||
.play-btn .fa-play{margin-left:2px}
|
||
.rep1{font-size:9px;font-weight:800;vertical-align:super;margin-left:-3px}
|
||
.chip-btn i{margin-right:3px}
|
||
.big-play i{font-size:22px}.big-play .fa-play{margin-left:3px}
|
||
.card-play i,.qc-play i{font-size:14px;margin-left:2px}
|
||
.search-ic i{font-size:15px}
|
||
|
||
/* ===== v1.2 modern görünüm: cam (glassmorphism) + hareket ===== */
|
||
:root{ --ease-spring:cubic-bezier(.34,1.56,.64,1); --ease-out:cubic-bezier(.2,.7,.2,1); }
|
||
|
||
/* Transient overlay'ler = en ucuz + en etkili cam (yakın-durağan içeriğin üstünde) */
|
||
.ctx-menu,.modal,.palette,.dl-pill,.clip-mini{
|
||
background:color-mix(in srgb, rgba(var(--accent-rgb),.10), rgba(20,20,24,.66)) !important;
|
||
-webkit-backdrop-filter:blur(24px) saturate(150%); backdrop-filter:blur(24px) saturate(150%);
|
||
border:1px solid rgba(255,255,255,.10);
|
||
box-shadow:0 16px 48px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.10);
|
||
}
|
||
.toast{ -webkit-backdrop-filter:blur(18px) saturate(140%); backdrop-filter:blur(18px) saturate(140%); }
|
||
|
||
/* Alt player bar: cam — arkasından kayan içerik hafifçe görünür */
|
||
.player{
|
||
background:rgba(17,17,21,.72);
|
||
-webkit-backdrop-filter:blur(22px) saturate(150%); backdrop-filter:blur(22px) saturate(150%);
|
||
border-top:1px solid rgba(255,255,255,.07);
|
||
}
|
||
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
|
||
.ctx-menu,.modal,.palette,.dl-pill,.clip-mini{ background:var(--panel2) !important; }
|
||
.player{ background:var(--panel2); } /* solid fallback */
|
||
}
|
||
|
||
/* Kart / parça giriş animasyonu (kademeli, --i ile) */
|
||
.quick-card,.card,.track{ animation:cardIn .42s var(--ease-out) both; animation-delay:calc(var(--i,0)*28ms); }
|
||
@keyframes cardIn{ from{opacity:0;transform:translateY(12px) scale(.985)} to{opacity:1;transform:none} }
|
||
|
||
/* Buton press "spring" */
|
||
.play-btn{ transition:transform .18s var(--ease-spring), background .15s; }
|
||
.icon-btn:active,.chip-btn:active,.btn:active,.play-btn:active,.card-play:active,.qc-play:active{ transform:scale(.92); }
|
||
|
||
@media (prefers-reduced-motion:reduce){
|
||
.quick-card,.card,.track{ animation:none; }
|
||
}
|
||
|
||
/* Now-playing hero: blurlu kapak arka planı (Apple Music tarzı) */
|
||
.right-panel{ position:relative; isolation:isolate; }
|
||
.right-panel::before{ content:''; position:absolute; inset:0; z-index:0; pointer-events:none;
|
||
background:var(--np-cover,none) center/cover no-repeat;
|
||
filter:blur(54px) saturate(1.7) brightness(.6); transform:scale(1.3);
|
||
opacity:0; transition:opacity .6s ease; }
|
||
.right-panel.has-np::before{ opacity:.32; }
|
||
.right-panel .np-pad{ position:relative; z-index:1; }
|
||
/* tam ekran arka plan: kapak blur */
|
||
.fs-bg{ background-size:cover; background-position:center; filter:blur(66px) saturate(1.7) brightness(.6); transform:scale(1.2); }
|
||
|
||
/* Dinamik söz adası (word-by-word, yüzen cam) */
|
||
.lyric-island{ position:fixed; left:50%; bottom:calc(var(--player-h) + 20px); transform:translateX(-50%);
|
||
min-width:320px; max-width:62vw; padding:16px 24px; border-radius:20px; z-index:9990; cursor:grab; user-select:none;
|
||
background:color-mix(in srgb, rgba(var(--accent-rgb),.15), rgba(18,18,22,.72));
|
||
-webkit-backdrop-filter:blur(26px) saturate(160%); backdrop-filter:blur(26px) saturate(160%);
|
||
border:1px solid rgba(255,255,255,.12); box-shadow:0 18px 54px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.12);
|
||
text-align:center; animation:viewIn .25s ease; }
|
||
.lyric-island:active{ cursor:grabbing; }
|
||
.li-cur{ font-family:var(--font-display); font-weight:800; font-size:22px; line-height:1.3; color:#fff; }
|
||
.li-next{ margin-top:6px; font-size:14px; color:rgba(255,255,255,.42); }
|
||
.li-cur .kw{ color:rgba(255,255,255,.4); transition:color .18s ease, text-shadow .18s ease; }
|
||
.li-cur .kw.done{ color:#fff; text-shadow:0 0 14px rgba(var(--accent-rgb),.6); }
|
||
|
||
/* Theater modu: tam ekranda senkron sözler kapağın yanında */
|
||
.fs-now.theater .fs-info{ max-width:540px; }
|
||
.fs-now.theater .fs-lyrics{ max-height:58vh; -webkit-mask-image:linear-gradient(transparent,#000 12%,#000 86%,transparent);
|
||
mask-image:linear-gradient(transparent,#000 12%,#000 86%,transparent); }
|
||
.fs-now.theater .fs-lyrics .lrc-line{ font-size:18px; line-height:2.05; }
|
||
.fs-now.theater .fs-lyrics .lrc-line.active{ font-size:24px; text-shadow:0 0 20px rgba(var(--accent-rgb),.4); }
|
||
|
||
/* ===== B: Merkez "Şimdi çalıyor" hero (opt-in; #view içi, sabit overlay DEĞİL) ===== */
|
||
.hero-now{position:relative;min-height:100%;min-height:calc(100vh - var(--topbar-h) - var(--player-h) - 16px);display:flex;align-items:center;justify-content:center;padding:48px 40px;isolation:isolate;overflow:hidden;border-radius:var(--radius)}
|
||
.hero-bg{position:absolute;inset:-2px;z-index:0;pointer-events:none;background:var(--np-cover,none) center/cover no-repeat;filter:blur(72px) saturate(1.8) brightness(.55);transform:scale(1.25);opacity:0;transition:opacity .6s ease}
|
||
.hero-now.has-np .hero-bg{opacity:.5}
|
||
.hero-bg::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,10,11,.35),rgba(10,10,11,.72)),radial-gradient(1200px 700px at 50% 18%,rgba(var(--accent-rgb),.28),transparent 60%)}
|
||
.hero-inner{position:relative;z-index:1;display:flex;align-items:center;gap:56px;max-width:1080px;width:100%;flex-wrap:wrap;justify-content:center;animation:viewIn .4s var(--ease-out) both}
|
||
.hero-cover{width:min(42vh,420px);height:min(42vh,420px);border-radius:20px;object-fit:cover;cursor:pointer;box-shadow:0 44px 120px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.06);view-transition-name:np-cover;transition:transform .25s var(--ease-out)}
|
||
.hero-cover:hover{transform:scale(1.02)}
|
||
.hero-body{flex:1;min-width:300px;max-width:520px}
|
||
.hero-eyebrow{text-transform:uppercase;letter-spacing:2px;font-size:12px;font-weight:700;color:var(--accent2);margin-bottom:10px}
|
||
.hero-title{font-family:var(--font-display);font-size:clamp(32px,4vw,56px);font-weight:800;line-height:1.03;letter-spacing:-1.4px}
|
||
.hero-artist{color:#e6e6e6;font-size:clamp(16px,1.6vw,20px);margin-top:10px}
|
||
.hero-lyric{min-height:22px;margin-top:14px;color:#fff;opacity:0;font-size:16px;font-weight:600;transition:opacity .3s;text-shadow:0 0 16px rgba(var(--accent-rgb),.4)}
|
||
.hero-lyric.on{opacity:.9}
|
||
.hero-seek{display:flex;align-items:center;gap:12px;margin:26px 0 18px}
|
||
.hero-seek .bar{height:6px}
|
||
.hero-seek .bar-fill{background:linear-gradient(90deg,var(--accent),var(--accent2))}
|
||
.hero-seek .bar-knob{width:14px;height:14px;opacity:1}
|
||
.hero-controls{display:flex;align-items:center;gap:26px}
|
||
.hero-ic{font-size:22px;color:#e0e0e0;transition:.15s;padding:4px}
|
||
.hero-ic:hover{color:#fff;transform:scale(1.08)}
|
||
.hero-ic.on{color:var(--accent)}
|
||
.hero-play{width:64px;height:64px;border-radius:50%;background:#fff;color:#000;font-size:24px;display:flex;align-items:center;justify-content:center;box-shadow:0 12px 30px rgba(0,0,0,.5);transition:transform .18s var(--ease-spring),background .15s}
|
||
.hero-play:hover{transform:scale(1.06);background:var(--accent2)}
|
||
.hero-play:active{transform:scale(.93)}
|
||
.hero-actions{display:flex;gap:20px;margin-top:26px}
|
||
.hero-ic2{font-size:18px;color:var(--muted);transition:.15s;padding:4px}
|
||
.hero-ic2:hover{color:#fff}
|
||
.hero-ic2.on{color:var(--accent)}
|
||
.hero-empty{position:relative;z-index:1;color:var(--muted);font-size:16px;text-align:center}
|
||
@media (prefers-reduced-motion:reduce){.hero-bg{transition:none}.hero-inner{animation:none}.hero-cover{transition:none}}
|
||
@media (max-width:820px){.hero-inner{flex-direction:column;text-align:center}.hero-body{min-width:0}.hero-controls,.hero-seek,.hero-actions{justify-content:center}}
|
||
::view-transition-old(np-cover),::view-transition-new(np-cover){animation-duration:.35s}
|
||
@media (prefers-reduced-motion:reduce){::view-transition-group(np-cover){animation:none}}
|