:root{--primary: #6366f1;--primary-hover: #818cf8;--primary-dark: #4f46e5;--bg: #0f0f11;--bg-surface: #1a1a2e;--bg-card: #24243e;--bg-elevated: #2a2a45;--bg-hover: #33335a;--text: #f1f1f7;--text-secondary: #a1a1b5;--text-muted: #6b6b80;--border: #2a2a45;--success: #22c55e;--warning: #f59e0b;--danger: #ef4444;--info: #3b82f6;--radius: 12px;--radius-sm: 8px;--radius-lg: 16px;--shadow: 0 4px 24px rgba(0,0,0,.3);--transition: .2s ease;--max-width: 1200px;--player-height: 80px}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}#root{min-height:100%;display:flex;flex-direction:column}a{color:var(--primary);text-decoration:none}button{cursor:pointer;border:none;font-family:inherit;font-size:inherit}input,select,textarea{font-family:inherit;font-size:inherit}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.app-layout{display:flex;min-height:100vh;padding-bottom:var(--player-height)}.sidebar{width:240px;background:var(--bg-surface);border-right:1px solid var(--border);padding:20px 0;position:fixed;top:0;left:0;bottom:0;z-index:100;overflow-y:auto}.sidebar-logo{padding:0 20px 20px;font-size:18px;font-weight:700;color:var(--primary);display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--border);margin-bottom:12px}.sidebar-logo svg{width:28px;height:28px}.sidebar-nav{display:flex;flex-direction:column;gap:2px;padding:0 8px}.sidebar-link{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:14px;font-weight:500;transition:all var(--transition);background:none;width:100%;text-align:left}.sidebar-link:hover{background:var(--bg-hover);color:var(--text)}.sidebar-link.active,.sidebar-link.router-link-active{background:var(--primary);color:#fff}.sidebar-link svg{width:20px;height:20px;flex-shrink:0}.sidebar-footer{margin-top:auto;padding:20px;border-top:1px solid var(--border)}.main-content{flex:1;margin-left:240px;padding:24px 32px;min-height:100vh}.header-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border)}.header-title{font-size:24px;font-weight:700}.header-actions{display:flex;align-items:center;gap:12px}.user-badge{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--bg-card);border-radius:var(--radius);font-size:13px;color:var(--text-secondary)}.user-badge .role-tag{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:600;text-transform:uppercase}.role-tag.admin{background:var(--primary);color:#fff}.role-tag.member{background:var(--info);color:#fff}.role-tag.child{background:var(--warning);color:#000}.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;border-radius:var(--radius-sm);font-size:14px;font-weight:600;transition:all var(--transition);border:none;cursor:pointer}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover);transform:translateY(-1px)}.btn-secondary{background:var(--bg-card);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover{background:var(--bg-hover);border-color:var(--text-muted)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{background:#dc2626}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--bg-hover);color:var(--text)}.btn-sm{padding:6px 12px;font-size:12px}.btn-icon{padding:8px;border-radius:50%;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);padding:20px;transition:all var(--transition)}.card:hover{border-color:var(--text-muted)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px}.stat-card{text-align:center;padding:24px}.stat-value{font-size:36px;font-weight:800;color:var(--primary);margin-bottom:4px}.stat-label{font-size:13px;color:var(--text-secondary);font-weight:500}.form-group{margin-bottom:16px}.form-label{display:block;font-size:13px;font-weight:600;color:var(--text-secondary);margin-bottom:6px}.form-input,.form-select{width:100%;padding:10px 14px;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:14px;transition:border-color var(--transition);outline:none}.form-input:focus,.form-select:focus{border-color:var(--primary);box-shadow:0 0 0 3px #6366f126}.form-input::placeholder{color:var(--text-muted)}.form-checkbox{display:flex;align-items:center;gap:10px;padding:8px 0;cursor:pointer;font-size:14px;color:var(--text)}.form-checkbox input[type=checkbox]{width:18px;height:18px;accent-color:var(--primary);cursor:pointer}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.table-container{overflow-x:auto;border-radius:var(--radius);border:1px solid var(--border)}table{width:100%;border-collapse:collapse;background:var(--bg-card)}th{text-align:left;padding:12px 16px;font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;background:var(--bg-surface);border-bottom:1px solid var(--border)}td{padding:12px 16px;font-size:14px;border-bottom:1px solid var(--border);color:var(--text)}tr:last-child td{border-bottom:none}tr:hover td{background:var(--bg-hover)}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600;text-transform:uppercase}.badge-active{background:#22c55e26;color:var(--success)}.badge-inactive{background:#ef444426;color:var(--danger)}.badge-admin{background:#6366f126;color:var(--primary)}.badge-member{background:#3b82f626;color:var(--info)}.badge-child{background:#f59e0b26;color:var(--warning)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .15s ease}.modal{background:var(--bg-card);border-radius:var(--radius-lg);border:1px solid var(--border);padding:28px;width:90%;max-width:480px;max-height:85vh;overflow-y:auto;animation:slideUp .2s ease;box-shadow:var(--shadow)}.modal-title{font-size:20px;font-weight:700;margin-bottom:20px}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:24px}.audio-player-bar{position:fixed;bottom:0;left:0;right:0;height:var(--player-height);background:var(--bg-surface);border-top:1px solid var(--border);display:flex;align-items:center;padding:0 32px;gap:20px;z-index:200;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.player-info{flex:0 0 240px;min-width:0}.player-info .song-title{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-info .song-artist{font-size:12px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-controls{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;max-width:600px;margin:0 auto}.player-buttons{display:flex;align-items:center;gap:16px}.player-btn{background:none;color:var(--text-secondary);font-size:20px;padding:6px;display:flex;align-items:center;justify-content:center;transition:all var(--transition);border-radius:50%;width:36px;height:36px}.player-btn:hover{color:var(--text);background:var(--bg-hover)}.player-btn.play-btn{background:var(--primary);color:#fff;width:44px;height:44px;font-size:22px}.player-btn.play-btn:hover{background:var(--primary-hover);transform:scale(1.05)}.player-progress{width:100%;display:flex;align-items:center;gap:10px}.progress-bar{flex:1;height:4px;background:var(--bg-elevated);border-radius:2px;cursor:pointer;position:relative;transition:height .1s ease}.progress-bar:hover{height:6px}.progress-fill{height:100%;background:var(--primary);border-radius:2px;position:relative;transition:width .1s linear}.progress-time{font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums;min-width:40px}.player-btn-active{color:var(--primary)!important}.player-btn-active:hover{background:#6366f126!important}.player-volume{flex:0 0 120px;display:flex;align-items:center;gap:8px}.volume-slider{width:80px;height:4px;background:var(--bg-elevated);border-radius:2px;cursor:pointer;position:relative}.volume-fill{height:100%;background:var(--text-secondary);border-radius:2px}.song-list{display:flex;flex-direction:column;gap:0}.song-item{display:flex;align-items:center;gap:16px;padding:12px 16px;border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition)}.song-item:hover{background:var(--bg-hover)}.song-item.active{background:#6366f11a;color:var(--primary)}.song-number{width:24px;text-align:center;font-size:12px;color:var(--text-muted);flex-shrink:0}.song-cover{width:44px;height:44px;border-radius:var(--radius-sm);background:var(--bg-elevated);display:flex;align-items:center;justify-content:center;color:var(--text-muted);flex-shrink:0;overflow:hidden}.song-info{flex:1;min-width:0;overflow:hidden}.song-info .song-title{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-info .song-artist{font-size:12px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.song-duration{font-size:12px;color:var(--text-muted);font-variant-numeric:tabular-nums}.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.page-title{font-size:28px;font-weight:800}.page-subtitle{font-size:14px;color:var(--text-secondary);margin-top:4px}.empty-state{text-align:center;padding:60px 20px;color:var(--text-muted)}.empty-state svg{width:64px;height:64px;margin-bottom:16px;opacity:.5}.empty-state h3{font-size:18px;color:var(--text-secondary);margin-bottom:8px}.empty-state p{font-size:14px}.alert{padding:12px 16px;border-radius:var(--radius-sm);font-size:14px;margin-bottom:16px;display:flex;align-items:center;gap:10px}.alert-error{background:#ef44441a;color:var(--danger);border:1px solid rgba(239,68,68,.2)}.alert-success{background:#22c55e1a;color:var(--success);border:1px solid rgba(34,197,94,.2)}.alert-info{background:#3b82f61a;color:var(--info);border:1px solid rgba(59,130,246,.2)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--bg) 0%,#1a1a3e 100%);padding:20px;position:relative;overflow:hidden}.login-page:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle at 30% 40%,rgba(99,102,241,.03) 0%,transparent 50%),radial-gradient(circle at 70% 60%,rgba(129,140,248,.02) 0%,transparent 50%);animation:loginBgDrift 20s ease-in-out infinite alternate;pointer-events:none}@keyframes loginBgDrift{0%{transform:translate(0) rotate(0)}to{transform:translate(2%,1%) rotate(3deg)}}.login-card{background:var(--bg-card);border-radius:var(--radius-lg);border:1px solid var(--border);padding:40px;width:100%;max-width:400px;box-shadow:0 8px 40px #0006,0 0 80px #6366f10d;animation:cardAppear .6s ease-out;position:relative;z-index:1}@keyframes cardAppear{0%{opacity:0;transform:translateY(30px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.login-logo{text-align:center;margin-bottom:32px}.login-logo svg.animated-logo{width:120px;height:120px;margin-bottom:16px;filter:drop-shadow(0 4px 20px rgba(99,102,241,.2))}.login-logo h1{font-size:28px;font-weight:800;color:var(--text);letter-spacing:3px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-hover) 50%,#a5b4fc 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;animation:titleFadeIn .8s ease-out .2s both}.login-logo p{font-size:13px;color:var(--text-muted);margin-top:6px;letter-spacing:.5px;animation:titleFadeIn .8s ease-out .4s both}@keyframes titleFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.logo-glow{animation:logoGlow 3s ease-in-out infinite alternate;transform-origin:center}@keyframes logoGlow{0%{opacity:.15;transform:scale(1)}50%{opacity:.25;transform:scale(1.05)}to{opacity:.15;transform:scale(1)}}.logo-ring{animation:ringExpand 3s ease-out infinite;transform-origin:center;opacity:0}.logo-ring-2{animation-delay:1s}.logo-ring-3{animation-delay:2s}@keyframes ringExpand{0%{transform:scale(.3);opacity:.4}60%{opacity:.1}to{transform:scale(1.8);opacity:0}}.eq-bar{animation:eqWave .8s ease-in-out infinite alternate;transform-origin:bottom;transform-box:fill-box}.eq-bar-1{animation-delay:0s}.eq-bar-2{animation-delay:.15s}.eq-bar-3{animation-delay:.3s}@keyframes eqWave{0%{transform:scaleY(.4)}to{transform:scaleY(1)}}.music-note{animation:noteBob 4s ease-in-out infinite;transform-origin:center bottom}@keyframes noteBob{0%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-3px) rotate(1deg)}50%{transform:translateY(0) rotate(0)}75%{transform:translateY(-2px) rotate(-1deg)}}.animated-logo{animation:logoScaleIn .6s cubic-bezier(.34,1.56,.64,1) both}@keyframes logoScaleIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.setup-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--bg) 0%,#1a1a3e 100%);padding:20px}.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh}.spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite}.upload-progress-container{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);padding:20px;margin-top:20px;animation:slideUp .3s ease}.upload-progress-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.upload-progress-title{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px;color:var(--text)}.upload-progress-title svg{color:var(--primary);animation:pulse 1.5s ease-in-out infinite}.upload-progress-percent{font-size:20px;font-weight:800;color:var(--primary);font-variant-numeric:tabular-nums}.upload-progress-bar{width:100%;height:8px;background:var(--bg-elevated);border-radius:4px;overflow:hidden;position:relative}.upload-progress-bar-sm{height:4px;margin-top:8px}.upload-progress-fill{height:100%;background:linear-gradient(90deg,var(--primary),var(--primary-hover));border-radius:4px;transition:width .2s ease;position:relative}.upload-progress-fill:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.15) 50%,transparent 100%);animation:shimmer 1.5s ease-in-out infinite}.upload-progress-fill-current{background:linear-gradient(90deg,var(--info),var(--primary-hover))}.upload-progress-details{display:flex;align-items:center;justify-content:space-between;margin-top:8px}.upload-progress-file{font-size:12px;color:var(--text-secondary)}.upload-progress-filename{color:var(--text-muted)}.upload-progress-file-percent{font-size:12px;font-weight:600;color:var(--text-secondary);font-variant-numeric:tabular-nums}.upload-progress-status{margin-top:8px;font-size:12px;font-weight:600}.upload-progress-status-ok{color:var(--success)}.upload-progress-status-err{color:var(--danger)}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.file-input-wrapper{position:relative;overflow:hidden}.file-input-overlay{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:2;font-size:0}.file-input-overlay::file-selector-button{display:none}.file-input-overlay::-webkit-file-upload-button{display:none}.file-input-visual{position:relative;z-index:1;padding:40px;text-align:center;pointer-events:none;-webkit-user-select:none;user-select:none}.stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media(max-width:768px){.stats-grid{grid-template-columns:1fr}}.stats-section{padding:20px}.stats-section-title{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:700;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border)}.stats-section-title svg{color:var(--primary);flex-shrink:0}.stats-empty{color:var(--text-muted);font-size:13px;text-align:center;padding:20px}.stat-bar-row{display:flex;align-items:center;gap:10px;padding:6px 0}.stat-bar-label{flex:1;min-width:0;font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-bar-track{flex:0 0 120px;height:8px;background:var(--bg-elevated);border-radius:4px;overflow:hidden}.stat-bar-fill{height:100%;border-radius:4px;transition:width .4s ease}.stat-bar-count{flex-shrink:0;font-size:13px;font-weight:700;color:var(--text-secondary);font-variant-numeric:tabular-nums;min-width:28px;text-align:right}.stat-rank{color:var(--text-muted);font-size:11px;margin-right:6px;font-weight:600}.fullplayer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:500;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px 24px;animation:fullplayerSlideUp .35s cubic-bezier(.16,1,.3,1);overflow:hidden}@keyframes fullplayerSlideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.fullplayer-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.fullplayer-handle{position:absolute;top:8px;left:50%;transform:translate(-50%);padding:8px}.fullplayer-handle-bar{width:40px;height:4px;background:#ffffff4d;border-radius:2px}.fullplayer-close{position:absolute;top:calc(8px + env(safe-area-inset-top,0px));left:12px;background:none;border:none;color:#ffffffb3;width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:50%;transition:all .2s ease;z-index:10}.fullplayer-close:hover{background:#ffffff1a;color:#fff}.fullplayer-close svg{width:28px;height:28px}.fullplayer-cover-wrap{position:relative;width:min(280px,60vw);height:min(280px,60vw);margin-bottom:24px;flex-shrink:0}.fullplayer-cover{width:100%;height:100%;border-radius:16px;background:var(--bg-elevated);display:flex;align-items:center;justify-content:center;color:#ffffff80;box-shadow:0 8px 48px #0006;overflow:hidden;animation:fullplayerCoverIn .5s cubic-bezier(.16,1,.3,1) .1s both}@keyframes fullplayerCoverIn{0%{transform:scale(.7) translateY(20px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}.fullplayer-equalizer{position:absolute;bottom:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:3px;height:24px}.fullplayer-equalizer span{width:3px;background:#fff;border-radius:2px;animation:fullplayerEq .8s ease-in-out infinite alternate}.fullplayer-equalizer span:nth-child(1){height:12px;animation-delay:0s}.fullplayer-equalizer span:nth-child(2){height:20px;animation-delay:.15s}.fullplayer-equalizer span:nth-child(3){height:8px;animation-delay:.3s}.fullplayer-equalizer span:nth-child(4){height:16px;animation-delay:.45s}@keyframes fullplayerEq{0%{height:4px}to{height:24px}}.fullplayer-info{text-align:center;margin-bottom:20px;width:100%;max-width:320px;animation:fullplayerFadeIn .4s ease .2s both}@keyframes fullplayerFadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.fullplayer-title{font-size:20px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.fullplayer-artist{font-size:14px;color:#fff9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fullplayer-progress-wrap{width:100%;max-width:360px;margin-bottom:24px;animation:fullplayerFadeIn .4s ease .3s both}.fullplayer-progress-bar{width:100%;height:5px;background:#ffffff26;border-radius:3px;cursor:pointer;position:relative;transition:height .15s ease}.fullplayer-progress-bar:hover,.fullplayer-progress-bar:active{height:8px}.fullplayer-progress-fill{height:100%;background:#fff;border-radius:3px;transition:width .1s linear;position:relative}.fullplayer-progress-thumb{position:absolute;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;background:#fff;border-radius:50%;box-shadow:0 2px 6px #0000004d;opacity:0;transition:opacity .15s ease;pointer-events:none}.fullplayer-progress-bar:hover .fullplayer-progress-thumb,.fullplayer-progress-bar:active .fullplayer-progress-thumb{opacity:1}.fullplayer-progress-time{display:flex;justify-content:space-between;margin-top:6px;font-size:11px;color:#ffffff80;font-variant-numeric:tabular-nums}.fullplayer-controls{display:flex;align-items:center;justify-content:center;gap:20px;margin-bottom:24px;animation:fullplayerFadeIn .4s ease .35s both}.fullplayer-ctrl-btn{background:none;border:none;color:#ffffffb3;width:40px;height:40px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:50%;transition:all .2s ease}.fullplayer-ctrl-btn:hover{color:#fff;background:#ffffff1a}.fullplayer-ctrl-btn svg{width:24px;height:24px}.fullplayer-ctrl-active{color:var(--primary)!important}.fullplayer-ctrl-active:hover{background:#6366f126!important}.fullplayer-play-btn{background:#fff;border:none;color:#1a1a2e;width:60px;height:60px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:50%;transition:all .2s ease;box-shadow:0 4px 20px #0000004d}.fullplayer-play-btn:hover{transform:scale(1.05);box-shadow:0 6px 28px #0006}.fullplayer-play-btn:active{transform:scale(.95)}.fullplayer-play-btn svg{width:28px;height:28px;margin-left:3px}.fullplayer-volume-wrap{display:flex;align-items:center;gap:10px;width:100%;max-width:200px;animation:fullplayerFadeIn .4s ease .4s both}.fullplayer-volume-bar{flex:1;height:4px;background:#ffffff26;border-radius:2px;cursor:pointer;position:relative;transition:height .15s ease}.fullplayer-volume-bar:hover,.fullplayer-volume-bar:active{height:6px}.fullplayer-volume-fill{height:100%;background:#fff9;border-radius:2px;transition:width .1s ease;position:relative}.fullplayer-volume-thumb{position:absolute;top:50%;transform:translate(-50%,-50%);width:12px;height:12px;background:#fff;border-radius:50%;box-shadow:0 2px 6px #0000004d;opacity:0;transition:opacity .15s ease;pointer-events:none}.fullplayer-volume-bar:hover .fullplayer-volume-thumb,.fullplayer-volume-bar:active .fullplayer-volume-thumb{opacity:1}.marquee-wrap{overflow:hidden;position:relative;white-space:nowrap}.marquee-wrap.marquee-active{mask-image:linear-gradient(to right,transparent 0%,black 5%,black 90%,transparent 100%);-webkit-mask-image:linear-gradient(to right,transparent 0%,black 5%,black 90%,transparent 100%)}.marquee-text{display:inline-block;white-space:nowrap}.marquee-active .marquee-text{animation:marqueeScroll linear infinite alternate}.marquee-active .marquee-text:hover{animation-play-state:paused}@keyframes marqueeScroll{0%{transform:translate(0)}8%{transform:translate(0)}80%{transform:translate(calc(-100% + 60px))}92%{transform:translate(calc(-100% + 60px))}to{transform:translate(calc(-100% + 60px))}}.toast-container{position:fixed;bottom:calc(var(--player-height) + 16px);right:16px;z-index:3000;display:flex;flex-direction:column;gap:8px}.toast{padding:12px 20px;border-radius:var(--radius-sm);background:var(--bg-elevated);border:1px solid var(--border);color:var(--text);font-size:14px;box-shadow:var(--shadow);animation:slideIn .2s ease;max-width:360px}.toast.success{border-color:var(--success)}.toast.error{border-color:var(--danger)}.toast.info{border-color:var(--info)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes spin{to{transform:rotate(360deg)}}.filter-badge{display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 10px;background:#6366f11f;border:1px solid rgba(99,102,241,.25);border-radius:var(--radius);font-size:13px;color:var(--primary-hover);margin-bottom:12px;animation:fadeIn .2s ease}.filter-badge strong{font-weight:600}.filter-badge-clear{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:none;border:none;color:var(--primary-hover);cursor:pointer;border-radius:50%;transition:all .15s ease;opacity:.7;margin-left:auto;padding:0}.filter-badge-clear:hover{opacity:1;background:#6366f133}.search-input{width:100%;padding:10px 14px 10px 40px;background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font-size:14px;outline:none;transition:border-color var(--transition)}.search-input:focus{border-color:var(--primary)}.search-wrapper{position:relative}.search-wrapper svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:var(--text-muted)}.tabs{display:flex;gap:0;border-bottom:1px solid var(--border);margin-bottom:20px}.tab{padding:10px 20px;font-size:14px;font-weight:500;color:var(--text-secondary);background:none;border:none;border-bottom:2px solid transparent;transition:all var(--transition);cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--primary);border-bottom-color:var(--primary)}.page-actions{display:flex;align-items:center;gap:12px}.view-toggle{display:flex;background:var(--bg-surface);border-radius:var(--radius-sm);border:1px solid var(--border);overflow:hidden;flex-shrink:0}.view-toggle-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:none;border:none;color:var(--text-muted);cursor:pointer;transition:all var(--transition)}.view-toggle-btn:hover{color:var(--text);background:var(--bg-hover)}.view-toggle-btn.active{color:var(--primary);background:#6366f126}.artist-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.artist-card{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:all var(--transition)}.artist-card:hover{background:var(--bg-hover);border-color:var(--text-muted);transform:translateY(-2px);box-shadow:0 8px 24px #0000004d}.artist-avatar{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;color:#fff;flex-shrink:0;box-shadow:0 2px 8px #0000004d}.artist-info{flex:1;min-width:0;overflow:hidden}.artist-name{font-size:15px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.artist-count{font-size:12px;color:var(--text-muted);margin-top:2px}@media(max-width:768px){.artist-grid{grid-template-columns:1fr}.artist-card{padding:12px 14px}.artist-avatar{width:40px;height:40px;font-size:16px}.artist-name{font-size:14px}}.song-grid{display:grid;grid-template-columns:1fr;gap:10px;width:100%;min-width:0}@media(min-width:641px){.song-grid{grid-template-columns:repeat(2,1fr);gap:16px}}.song-card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);cursor:pointer;transition:all var(--transition);position:relative}.song-card:hover{border-color:var(--text-muted);transform:translateY(-2px);box-shadow:0 8px 24px #0000004d}.song-card.active{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}.song-card-cover{width:100%;aspect-ratio:1;display:flex;align-items:center;justify-content:center;color:#ffffffb3;transition:transform .3s ease;overflow:hidden;position:relative;border-radius:var(--radius) var(--radius) 0 0}.song-card:hover .song-card-cover{transform:scale(1.05)}.song-card-cover svg{opacity:.6}.song-card-body{padding:12px 14px 10px;border-radius:0 0 var(--radius) var(--radius)}.song-card-title{font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px}.song-card-artist{font-size:12px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px}.song-card-meta{display:flex;align-items:center;justify-content:space-between;gap:8px}.song-card-album{font-size:11px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.song-card-duration{font-size:11px;color:var(--text-muted);font-variant-numeric:tabular-nums;flex-shrink:0}.song-card-actions{position:absolute;top:8px;right:8px;z-index:10}.song-card-actions .btn-kebab{background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;transition:opacity .15s ease}.song-card:hover .song-card-actions .btn-kebab,.song-card-actions .btn-kebab:focus-visible{opacity:1}@media(max-width:768px){.song-card-actions .btn-kebab{opacity:1;background:#0000004d}.page-header{flex-wrap:wrap;gap:8px;margin-bottom:12px}.page-header>div:first-child{min-width:0;overflow:hidden}.page-title{font-size:18px}.page-subtitle{display:none}.view-toggle-btn{width:32px;height:32px}.view-toggle-btn svg{width:16px;height:16px}.song-card-body{padding:10px 10px 8px}.song-card-title{font-size:12px}.song-card-artist{font-size:11px}.song-card-cover svg{width:24px;height:24px}}.song-card-fav-badge{position:absolute;top:8px;left:8px;z-index:5;font-size:14px;line-height:1;color:var(--danger);filter:drop-shadow(0 1px 3px rgba(0,0,0,.5));animation:favPop .3s ease;pointer-events:none}@keyframes favPop{0%{transform:scale(0)}60%{transform:scale(1.3)}to{transform:scale(1)}}.song-card-now-badge{position:absolute;bottom:8px;left:50%;transform:translate(-50%);background:#000000a6;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:#fff;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;padding:3px 8px;border-radius:4px;white-space:nowrap}.song-card-equalizer{display:flex;align-items:center;gap:3px;height:24px}.song-card-equalizer span{width:3px;background:#fffc;border-radius:2px;animation:equalizer .8s ease-in-out infinite alternate}.song-card-equalizer span:nth-child(1){height:12px;animation-delay:0s}.song-card-equalizer span:nth-child(2){height:20px;animation-delay:.15s}.song-card-equalizer span:nth-child(3){height:8px;animation-delay:.3s}.song-card-equalizer span:nth-child(4){height:16px;animation-delay:.45s}@keyframes equalizer{0%{height:4px}to{height:24px}}.song-actions{position:relative}.btn-kebab{padding:4px!important;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease}.song-item:hover .btn-kebab,.btn-kebab:focus-visible{opacity:1}@media(max-width:768px){.btn-kebab{opacity:1}}.context-menu{position:absolute;right:0;bottom:100%;margin-bottom:4px;min-width:220px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 32px #0006;z-index:500;padding:6px;animation:fadeIn .1s ease;overflow:hidden}.context-menu-sub{bottom:auto;top:0}.context-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;color:var(--text);font-size:13px;font-weight:500;text-align:left;cursor:pointer;border-radius:var(--radius-sm);transition:background var(--transition)}.context-menu-item:hover{background:var(--bg-hover)}.context-menu-item svg{flex-shrink:0;color:var(--text-muted)}.context-menu-item:hover svg{color:var(--text-secondary)}.context-menu-danger{color:var(--danger)}.context-menu-danger svg{color:var(--danger)}.context-menu-danger:hover{background:#ef44441a}.context-menu-back{color:var(--text-secondary);border-bottom:1px solid var(--border);margin-bottom:4px;padding-bottom:10px}.context-menu-back:hover{color:var(--text)}.context-menu-loading{display:flex;align-items:center;gap:10px;padding:16px 12px;color:var(--text-muted);font-size:13px;justify-content:center}.context-menu-empty{padding:16px 12px;color:var(--text-muted);font-size:13px;text-align:center}.context-menu-count{margin-left:auto;font-size:11px;color:var(--text-muted);background:var(--bg-surface);padding:1px 7px;border-radius:10px}.spinner-sm{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite}.breadcrumb{display:flex;align-items:center;gap:6px;margin-bottom:12px;padding:8px 0;font-size:13px}.breadcrumb-link{color:var(--text-muted);text-decoration:none;transition:color var(--transition);font-weight:500}.breadcrumb-link:hover{color:var(--primary)}.breadcrumb-sep{color:var(--text-muted);font-size:16px;line-height:1;opacity:.5}.breadcrumb-current{color:var(--text-secondary);font-weight:600}.mobile-topbar{display:none}.hamburger-btn{display:none;background:none;border:none;color:var(--text);padding:8px;cursor:pointer}.sidebar-close-btn{display:none;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;margin-left:auto}.sidebar-overlay{display:none}@media(max-width:768px){:root{--player-height: 56px}.app-layout{padding-top:56px}.mobile-topbar{display:flex;align-items:center;justify-content:space-between;position:fixed;top:0;left:0;right:0;height:56px;background:var(--bg-surface);border-bottom:1px solid var(--border);padding:0 12px;z-index:150}.hamburger-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px}.mobile-title{font-size:16px;font-weight:700;color:var(--text);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-topbar-actions{display:flex;align-items:center;flex-shrink:0}.view-toggle-topbar.view-toggle{height:32px;border:none;background:transparent}.view-toggle-topbar .view-toggle-btn{width:32px;height:32px}.view-toggle-topbar .view-toggle-btn svg{width:16px;height:16px}.page-actions .view-toggle{display:none}.sidebar{display:flex;flex-direction:column;transform:translate(-100%);transition:transform .25s ease;z-index:250}.sidebar.sidebar-open{transform:translate(0)}.sidebar-close-btn{display:flex;align-items:center;justify-content:center}.sidebar-overlay{display:block;position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;z-index:200;animation:fadeIn .2s ease}.main-content{margin-left:0;padding:16px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}.form-row{grid-template-columns:1fr}.card-grid{grid-template-columns:repeat(2,1fr)}.audio-player-bar{padding:0 8px;gap:8px;height:56px;transition:height .25s ease,padding .25s ease,gap .25s ease}.audio-player-bar.player-scrolled{height:40px;padding:0 12px;gap:10px}.audio-player-bar.player-scrolled .player-info{flex:1;min-width:0}.audio-player-bar.player-scrolled .player-info .song-title{font-size:13px}.audio-player-bar.player-scrolled .player-controls{display:flex;flex-direction:row;flex:0 0 auto;gap:0}.audio-player-bar.player-scrolled .player-buttons{gap:0}.audio-player-bar.player-scrolled .player-btn{width:32px;height:32px}.audio-player-bar.player-scrolled .player-btn svg{width:18px;height:18px}.audio-player-bar.player-scrolled .player-btn.play-btn{width:32px;height:32px;font-size:16px}.audio-player-bar.player-scrolled .player-btn.play-btn svg{width:18px;height:18px}.audio-player-bar.player-scrolled .player-btn:not(.play-btn){display:none}.audio-player-bar.player-scrolled .player-progress{display:none}.player-info{flex:0 0 100px}.player-info .song-title{font-size:12px}.player-info .song-artist{display:none}.player-controls{gap:2px}.player-buttons{gap:4px}.player-btn{width:28px;height:28px;font-size:14px;padding:4px}.player-btn svg{width:16px;height:16px}.player-btn.play-btn{width:34px;height:34px;font-size:16px}.player-btn.play-btn svg{width:18px;height:18px}.player-progress{gap:6px}.progress-bar{height:3px}.progress-bar:hover{height:4px}.progress-time{font-size:10px;min-width:32px}.player-volume{display:none}.song-item{gap:8px;padding:10px 8px}.song-number{width:18px;font-size:11px}.song-cover{width:36px;height:36px}.song-cover svg{width:16px;height:16px}.song-info .song-title{font-size:13px}.song-info .song-artist{font-size:11px}.song-actions{gap:2px}.song-actions .btn-ghost{padding:4px;width:30px;height:30px}.song-actions .btn-ghost svg{width:14px;height:14px}.song-duration{font-size:10px;min-width:28px}}@media screen and (max-width:767px){.song-grid{grid-template-columns:1fr!important;width:100%!important;overflow-x:hidden!important}.song-card{width:100%!important;min-width:0!important}}
