:root{--bg-primary: #0f0f1a;--bg-secondary: #1a1a2e;--bg-card: #16213e;--bg-input: #0f3460;--accent-primary: #a855f7;--accent-secondary: #6366f1;--accent-gradient: linear-gradient(135deg, #a855f7, #6366f1);--accent-gradient-hover: linear-gradient(135deg, #c084fc, #818cf8);--text-primary: #eaeaea;--text-secondary: #a0a0b8;--text-muted: #6c6c8a;--border-color: rgba(255, 255, 255, .08);--shadow-sm: 0 2px 8px rgba(0, 0, 0, .3);--shadow-md: 0 4px 20px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 40px rgba(0, 0, 0, .5);--shadow-glow: 0 0 30px rgba(168, 85, 247, .2);--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 24px;--transition: all .3s cubic-bezier(.4, 0, .2, 1)}[data-theme=light]{--bg-primary: #faf5ff;--bg-secondary: #ffffff;--bg-card: #f3eeff;--bg-input: #ece4ff;--text-primary: #1e1040;--text-secondary: #5a3f80;--text-muted: #9b80c4;--border-color: rgba(147, 97, 219, .18);--shadow-sm: 0 2px 8px rgba(147, 97, 219, .12);--shadow-md: 0 4px 20px rgba(147, 97, 219, .18);--shadow-lg: 0 8px 40px rgba(147, 97, 219, .22);--shadow-glow: 0 0 30px rgba(168, 85, 247, .25)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;scroll-behavior:smooth}body{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg-primary);color:var(--text-primary);height:100vh;height:100dvh;overflow:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body:before{content:"";position:fixed;top:0;left:0;width:100%;height:100%;background:radial-gradient(ellipse at 20% 50%,rgba(83,52,131,.15) 0%,transparent 50%),radial-gradient(ellipse at 80% 20%,rgba(233,69,96,.1) 0%,transparent 50%),radial-gradient(ellipse at 50% 80%,rgba(15,52,96,.2) 0%,transparent 50%);pointer-events:none;z-index:0;transition:opacity .4s ease}[data-theme=light] body:before{background:radial-gradient(ellipse at 20% 50%,rgba(168,85,247,.08) 0%,transparent 50%),radial-gradient(ellipse at 80% 20%,rgba(99,102,241,.06) 0%,transparent 50%),radial-gradient(ellipse at 50% 80%,rgba(168,85,247,.05) 0%,transparent 50%)}#root{position:relative;z-index:1;height:100vh;height:100dvh}.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}.login-container{text-align:center;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-xl);padding:60px 48px;box-shadow:var(--shadow-lg),var(--shadow-glow);max-width:420px;width:100%;animation:fadeInUp .6s ease-out}.login-icon{font-size:64px;margin-bottom:16px;animation:pulse 2s infinite}.login-container h1{font-size:2rem;font-weight:800;margin-bottom:8px;background:var(--accent-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.login-container p{color:var(--text-secondary);font-size:.95rem;margin-bottom:36px;line-height:1.5}.google-login-btn{display:inline-flex;align-items:center;gap:12px;padding:14px 32px;background:#fff;color:#333;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:600;font-family:Inter,sans-serif;cursor:pointer;transition:var(--transition);box-shadow:var(--shadow-sm)}.google-login-btn:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.google-login-btn:active{transform:translateY(0)}.google-login-btn svg{width:20px;height:20px}.app-container{max-width:640px;margin:0 auto;padding:24px 20px;height:100vh;height:100dvh;display:flex;flex-direction:column}.app-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border-color)}.header-left{display:flex;align-items:center;gap:14px}.header-icon{font-size:32px}.header-left h1{font-size:1.5rem;font-weight:700;background:var(--accent-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.header-right{display:flex;align-items:center;gap:8px}.user-avatar{width:36px;height:36px;border-radius:50%;border:2px solid var(--accent-primary);object-fit:cover;cursor:pointer;transition:var(--transition)}.user-avatar:hover{transform:scale(1.1);box-shadow:0 0 15px var(--accent-primary)}.theme-toggle-btn{width:36px;height:36px;border-radius:50%;border:1px solid var(--border-color);background:var(--bg-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;transition:var(--transition);position:relative;overflow:hidden;flex-shrink:0}.theme-toggle-btn:hover{border-color:var(--accent-primary);background:#e9456014;transform:rotate(20deg) scale(1.1)}.theme-toggle-btn .toggle-icon{transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .3s ease;display:inline-block;line-height:1}.theme-toggle-btn:active .toggle-icon{transform:rotate(360deg) scale(.8)}.view-mode-banner{background:var(--bg-card);border:1px solid var(--accent-primary);border-radius:var(--radius-md);padding:12px 16px;margin-bottom:24px;font-size:.9rem;color:var(--text-primary);display:flex;align-items:center;justify-content:space-between;gap:12px;animation:fadeIn .4s ease-out}.view-mode-banner button{background:var(--accent-gradient);color:#fff;border:none;padding:6px 12px;border-radius:var(--radius-sm);font-size:.8rem;font-weight:600;cursor:pointer;transition:var(--transition)}.view-mode-banner button:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}.tabs-container{display:flex;gap:4px;background:var(--bg-secondary);border-radius:var(--radius-md);padding:4px;margin-bottom:28px;border:1px solid var(--border-color)}.tab-btn{flex:1;padding:12px 20px;background:transparent;color:var(--text-secondary);border:none;border-radius:var(--radius-sm);font-size:.95rem;font-weight:600;font-family:Inter,sans-serif;cursor:pointer;transition:var(--transition);display:flex;align-items:center;justify-content:center;gap:8px}.tab-btn:hover{color:var(--text-primary);background:#ffffff0d}.tab-btn.active{background:var(--accent-gradient);color:#fff;box-shadow:var(--shadow-sm)}.save-tab{animation:fadeIn .3s ease-out;flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto}.form-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:32px;box-shadow:var(--shadow-md)}.form-group{margin-bottom:20px}.form-group label{display:block;font-size:.85rem;font-weight:600;color:var(--text-secondary);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.form-group label .required{color:var(--accent-primary);margin-left:4px}.form-group label .optional{color:var(--text-muted);font-weight:400;text-transform:none;font-size:.8rem}.form-input{width:100%;padding:14px 16px;background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary);font-size:1rem;font-family:Inter,sans-serif;transition:var(--transition);outline:none}.form-input::placeholder{color:var(--text-muted)}.form-input:focus{border-color:var(--accent-primary);box-shadow:0 0 0 3px #a855f726}.form-hint{margin-top:6px;font-size:.78rem;color:var(--text-muted);line-height:1.4}.save-btn{width:100%;padding:16px;background:var(--accent-gradient);color:#fff;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:700;font-family:Inter,sans-serif;cursor:pointer;transition:var(--transition);display:flex;align-items:center;justify-content:center;gap:8px;margin-top:28px;text-transform:uppercase;letter-spacing:.5px}.save-btn:hover:not(:disabled){background:var(--accent-gradient-hover);transform:translateY(-2px);box-shadow:var(--shadow-md),var(--shadow-glow)}.save-btn:active:not(:disabled){transform:translateY(0)}.save-btn:disabled{opacity:.5;cursor:not-allowed}.toast{position:fixed;bottom:30px;left:50%;transform:translate(-50%) translateY(100px);background:var(--bg-card);color:var(--text-primary);padding:14px 28px;border-radius:var(--radius-md);font-size:.95rem;font-weight:500;box-shadow:var(--shadow-lg);border:1px solid var(--border-color);z-index:1000;opacity:0;transition:all .4s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;gap:8px}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}.toast-action-btn{background:var(--accent-gradient);color:#fff;border:none;padding:6px 14px;border-radius:var(--radius-sm);font-size:.85rem;font-weight:700;cursor:pointer;transition:var(--transition);margin-left:8px;text-transform:uppercase;letter-spacing:.5px;box-shadow:var(--shadow-sm)}.toast-action-btn:hover{transform:translateY(-1px);box-shadow:var(--shadow-md);filter:brightness(1.1)}.toast-action-btn:active{transform:translateY(0)}.listen-tab{animation:fadeIn .3s ease-out;flex:1;display:flex;flex-direction:column;min-height:0}.playlist-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:16px;flex-wrap:wrap}.playlist-header-left{display:flex;align-items:center;gap:12px}.playlist-controls{display:flex;gap:10px}.control-btn{padding:8px 16px;border:1px solid var(--border-color);background:var(--bg-secondary);color:var(--text-primary);border-radius:var(--radius-sm);font-size:.9rem;font-weight:600;cursor:pointer;transition:var(--transition);display:flex;align-items:center;gap:6px}.control-btn:hover{border-color:var(--accent-primary);background:#e945601a}.control-btn.shuffle{background:var(--accent-gradient);border:none;color:#fff}.control-btn.shuffle:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}.artist-filter-wrap{display:flex;align-items:center;gap:6px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:0 10px;transition:var(--transition)}.artist-filter-wrap:focus-within{border-color:var(--accent-primary);box-shadow:0 0 0 2px #a855f726}.artist-filter-icon{font-size:14px;flex-shrink:0;pointer-events:none}.artist-filter-select{background:transparent;border:none;color:var(--text-primary);font-size:.85rem;font-weight:600;font-family:Inter,sans-serif;cursor:pointer;outline:none;padding:7px 0;max-width:130px;-moz-appearance:none;appearance:none;-webkit-appearance:none}.artist-filter-select option{background:var(--bg-card);color:var(--text-primary)}.play-btn.playing{color:var(--accent-primary);opacity:1}.playlist-list{display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1;min-height:0;padding-right:4px;padding-bottom:40px}.playlist-list::-webkit-scrollbar{width:6px}.playlist-list::-webkit-scrollbar-track{background:var(--bg-secondary);border-radius:4px}.playlist-list::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}.playlist-list::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.song-card{display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:var(--transition);animation:fadeInUp .4s ease-out backwards}.song-card:hover{border-color:#e945604d;background:var(--bg-card);transform:translate(4px)}.song-index{min-width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:#ffffff0d;border-radius:var(--radius-sm);font-size:.85rem;font-weight:700;color:var(--text-muted)}.song-card:hover .song-index{background:var(--accent-gradient);color:#fff}.song-info{flex:1;min-width:0}.song-name{font-size:1rem;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-artist{font-size:.85rem;color:var(--text-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-actions{display:flex;gap:8px;align-items:center}.play-btn,.delete-btn{background:transparent;border:none;color:var(--text-muted);cursor:pointer;opacity:0;transition:var(--transition);padding:8px;border-radius:50%;display:flex;align-items:center;justify-content:center}.play-btn svg,.delete-btn svg{width:20px;height:20px;display:block}.play-btn:hover{background:#a855f71a;color:var(--accent-primary);transform:scale(1.2)}.delete-btn:hover{background:#a855f726;color:var(--accent-primary);transform:scale(1.2)}.song-card:hover .play-btn,.song-card:hover .delete-btn{opacity:1}.music-player-card{margin-bottom:24px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-lg),var(--shadow-glow);animation:fadeInUp .5s ease-out}.player-main{display:flex;align-items:center;gap:20px;margin-bottom:16px}.player-art{width:60px;height:60px;background:var(--accent-gradient);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;box-shadow:0 4px 15px #e945604d;transition:transform .3s ease}.player-art.playing{animation:rotate 4s linear infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.player-info{flex:1;min-width:0}.player-song-name{font-size:1.1rem;font-weight:700;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.player-artist-name{font-size:.9rem;color:var(--text-secondary)}.player-controls-main{display:flex;align-items:center;gap:12px}.play-control-btn{background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:var(--transition)}.play-control-btn:disabled{opacity:.3;cursor:not-allowed}.play-control-btn.primary{width:48px;height:48px;background:var(--accent-gradient);border-radius:50%;box-shadow:0 4px 15px #a855f74d}.play-control-btn.primary:hover:not(:disabled){transform:scale(1.1);background:var(--accent-gradient-hover);box-shadow:0 6px 20px #a855f766}.play-control-btn.primary svg{width:28px;height:28px}.play-control-btn.secondary{color:var(--text-secondary)}.play-control-btn.secondary svg{width:24px;height:24px}.play-control-btn.secondary:hover:not(:disabled){color:var(--accent-primary)}.spinner-mini{width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}.player-progress-container{padding:4px 0}.progress-bar-bg{height:6px;background:var(--bg-input);border-radius:3px;cursor:pointer;position:relative;overflow:hidden}.progress-fill{height:100%;background:var(--accent-gradient);width:0%;transition:width .1s linear}.empty-state{text-align:center;padding:60px 20px;animation:fadeIn .4s ease-out}.empty-state-icon{font-size:64px;margin-bottom:16px;opacity:.6}.empty-state h3{font-size:1.2rem;font-weight:600;color:var(--text-secondary);margin-bottom:8px}.empty-state p{color:var(--text-muted);font-size:.9rem}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;gap:16px}.spinner{width:40px;height:40px;border:3px solid var(--border-color);border-top-color:var(--accent-primary);border-radius:50%;animation:spin .8s linear infinite}.loading-container p{color:var(--text-secondary);font-size:.9rem}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:480px){.app-container{padding:16px 14px 32px}.login-container{padding:40px 28px}.login-container h1{font-size:1.6rem}.form-card{padding:24px 20px}.header-left h1{font-size:1.2rem}.song-card{padding:14px 16px;gap:12px}.tab-btn{padding:10px 4px;font-size:.8rem;flex-direction:column;gap:4px;text-align:center;line-height:1.2}.tab-btn svg,.tab-btn span{font-size:1.2rem}.player-main{gap:10px}.player-art{width:44px;height:44px;font-size:18px;flex-shrink:0}.player-info{min-width:0}.player-song-name{font-size:.95rem;margin-bottom:2px;white-space:normal;display:-webkit-box;line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.2}.player-artist-name{font-size:.8rem}.player-controls-main{gap:8px}.play-control-btn.primary{width:48px;height:48px}.play-control-btn.primary svg{width:28px;height:28px}.play-control-btn.secondary{padding:8px}.play-control-btn.secondary svg{width:24px;height:24px}.play-btn,.delete-btn{max-width:0;padding:0;overflow:hidden;opacity:0;transition:max-width .2s ease,padding .2s ease,opacity .2s ease}.song-card:hover .play-btn,.song-card:hover .delete-btn,.play-btn.playing{max-width:60px;padding:10px;opacity:1;background:#a855f71a}.play-btn svg,.delete-btn svg{width:24px;height:24px;flex-shrink:0}.song-actions{gap:8px;flex-shrink:0}.song-info{overflow:hidden}.song-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.2;margin-bottom:2px}.song-artist{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000bf;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:2000;padding:20px;animation:fadeIn .3s ease-out}.modal-content{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-lg);width:100%;max-width:420px;padding:28px;box-shadow:var(--shadow-lg),var(--shadow-glow);animation:fadeInUp .4s cubic-bezier(.4,0,.2,1)}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.modal-header h3{font-size:1.25rem;font-weight:700;color:var(--text-primary)}.close-modal-btn{background:transparent;border:none;color:var(--text-muted);font-size:1.5rem;cursor:pointer;transition:var(--transition);line-height:1}.close-modal-btn:hover{color:var(--accent-primary);transform:scale(1.1)}.modal-actions{display:flex;align-items:center;justify-content:space-between;margin-top:32px;gap:12px}.modal-actions-right{display:flex;gap:10px}.modal-btn{padding:10px 18px;border-radius:var(--radius-sm);font-size:.9rem;font-weight:600;cursor:pointer;transition:var(--transition);border:none;font-family:inherit}.modal-btn.save{background:var(--accent-gradient);color:#fff}.modal-btn.save:hover:not(:disabled){background:var(--accent-gradient-hover);transform:translateY(-2px);box-shadow:var(--shadow-md)}.modal-btn.cancel{background:var(--bg-input);color:var(--text-primary)}.modal-btn.cancel:hover{filter:brightness(1.1)}.modal-btn.delete{background:transparent;color:#ff4d4d;opacity:.8;padding-left:0;padding-right:0}.modal-btn.delete:hover{opacity:1;text-decoration:underline}.modal-btn:disabled{opacity:.5;cursor:not-allowed}@media(max-width:480px){.modal-content{padding:20px}.modal-actions{flex-direction:column-reverse;align-items:stretch}.modal-actions-right{flex-direction:column}.modal-btn.delete{text-align:center;padding:10px}}
