:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{text-decoration:inherit}body{margin:0;min-width:320px;min-height:100vh}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;justify-content:center;align-items:center;z-index:1000}.upload-modal{background:var(--modal-background);border-radius:12px;padding:24px;width:90%;max-width:600px;position:relative;max-height:90vh;overflow-y:auto;color:var(--text-primary)}.close-button{position:absolute;top:16px;right:16px;background:none;border:none;font-size:24px;cursor:pointer;color:var(--text-secondary);padding:4px 8px}.close-button:hover:not(:disabled){color:var(--text-primary)}.close-button:disabled{cursor:not-allowed;opacity:.5}.upload-modal h2{margin:0 0 24px;font-size:24px;color:var(--text-primary)}.drop-zone{border:2px dashed var(--border-color);border-radius:8px;padding:40px 20px;text-align:center;transition:all .2s ease;background:var(--background-elevated)}.drop-zone.dragging{border-color:var(--accent-color);background:var(--background-secondary)}.drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--text-secondary)}.upload-icon{width:48px;height:48px;margin-bottom:8px;opacity:.7}.select-files-button{background:var(--accent-color);color:var(--text-primary);border:none;padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px;transition:background-color .2s ease}.select-files-button:hover:not(:disabled){background:var(--accent-hover)}.select-files-button:disabled{background:var(--border-color);cursor:not-allowed}.upload-progress{margin-top:24px}.upload-progress h3{margin-bottom:12px;font-size:18px;color:var(--text-primary)}.progress-item{padding:12px 0;border-bottom:1px solid var(--border-color)}.progress-info{display:flex;flex-direction:column;margin-bottom:8px}.filename{font-size:14px;color:var(--text-primary);margin-bottom:4px}.error-message{font-size:12px;color:var(--error-color);margin-top:2px}.progress-bar-container{width:100%;height:4px;background-color:var(--border-color);border-radius:2px;overflow:hidden;margin:8px 0}.progress-bar{height:100%;background-color:var(--accent-color);transition:width .3s ease}.status{font-size:12px;font-weight:500;text-transform:capitalize;color:var(--text-secondary)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:var(--modal-background);border-radius:8px;box-shadow:0 4px 12px #0000004d;width:100%;max-width:500px;max-height:90vh;overflow-y:auto}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:24px;border-bottom:1px solid var(--border-color)}.modal-header h2{margin:0;font-size:24px;font-weight:600}.modal-nav{display:flex;align-items:center;gap:8px}.nav-button{background:none;border:none;padding:8px;cursor:pointer;opacity:.7;transition:all .2s ease;border-radius:50%;display:flex;align-items:center;justify-content:center}.nav-button:hover{opacity:1;background:var(--hover-background)}.nav-button:disabled{opacity:.3;cursor:not-allowed}.nav-button img{width:20px;height:20px}.close-button{background:none;border:none;font-size:24px;cursor:pointer;padding:0;color:var(--text-secondary)}.close-button:hover{color:var(--text-primary)}.modal-content{padding:24px}.modal-footer{padding:16px 24px;border-top:1px solid var(--border-color);display:flex;justify-content:flex-end;gap:12px}.form-group{margin-bottom:20px}.form-group label{display:block;margin-bottom:8px;font-weight:500;color:var(--text-primary)}.form-group input[type=text]{width:100%;padding:8px 12px;border:1px solid var(--border-color);border-radius:4px;font-size:14px;background-color:var(--background-elevated);color:var(--text-primary)}.form-group input[type=text]:focus{outline:none;border-color:var(--accent-color)}.artwork-preview{width:120px;height:120px;border-radius:4px;overflow:hidden;background-color:var(--background-secondary);margin-bottom:12px}.artwork-preview img{width:100%;height:100%;object-fit:cover}.artwork-preview .default-art{padding:24px;opacity:.5}.error-message{color:var(--error-color);margin-top:16px;font-size:14px}.primary-button{background:var(--accent-color);color:var(--text-primary);border:none;padding:8px 16px;border-radius:4px;font-size:14px;cursor:pointer}.primary-button:disabled{opacity:.6;cursor:not-allowed}.primary-button:not(:disabled):hover{background:var(--accent-hover)}.secondary-button{background:none;border:1px solid var(--border-color);padding:8px 16px;border-radius:4px;font-size:14px;cursor:pointer;color:var(--text-primary)}.secondary-button:hover{background:var(--hover-background)}.playlists-list{overflow-y:auto;margin:0;padding:0}.playlist-option{display:flex;align-items:center;gap:12px;padding:8px 12px;cursor:pointer;border-radius:8px;transition:background-color .2s ease}.playlist-option:hover{background-color:var(--hover-background)}.playlist-option input[type=radio]{margin:0;width:18px;height:18px;accent-color:var(--accent-color);flex-shrink:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:50%;background-color:#ffffff0d;border:1px solid var(--border-color);transition:all .2s ease}.playlist-option input[type=radio]:checked{background-color:var(--accent-color);border-color:var(--accent-color);position:relative}.playlist-option input[type=radio]:checked:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:6px;height:6px;background-color:#fff;border-radius:50%}.playlist-option .playlist-art{width:40px;height:40px;border-radius:4px;overflow:hidden;background-color:var(--background-elevated);display:flex;align-items:center;justify-content:center;flex-shrink:0}.playlist-option .playlist-art img{width:100%;height:100%;object-fit:cover}.playlist-option .playlist-info{flex:1;min-width:0}.playlist-option .playlist-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-primary);margin-bottom:2px}.playlist-option .playlist-songs{font-size:13px;color:var(--text-secondary)}.typeahead-container{position:relative;width:100%}.suggestions-list{position:absolute;top:calc(100% + 4px);left:0;right:0;max-height:200px;overflow-y:auto;background:var(--background-elevated);border:1px solid var(--border-color);border-radius:4px;margin:0;padding:4px 0;list-style:none;z-index:1000;box-shadow:0 4px 12px #00000026}.suggestion-item{padding:8px 12px;cursor:pointer;transition:background-color .2s;color:var(--text-primary);font-size:14px}.suggestion-item:hover,.suggestion-item.selected{background-color:var(--hover-background)}.suggestion-item.selected{color:var(--accent-color)}.add-to-playlist-modal{width:90%;max-width:600px;max-height:90vh;background:var(--background-elevated);border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:20px;position:relative}.add-to-playlist-modal h2{margin:0;color:var(--text-primary);font-size:20px;font-weight:600}.close-button{position:absolute;right:24px;top:24px;background:none;border:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;opacity:.7;transition:opacity .2s ease}.close-button:hover{opacity:1}.close-button img{width:24px;height:24px}.search-container{position:relative;width:100%}.search-input{width:100%;padding:12px;border-radius:8px;border:1px solid var(--border-color);background:var(--background-primary);color:var(--text-primary);font-size:14px}.search-input:focus{outline:none;border-color:var(--accent-color)}.songs-checklist{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:8px;min-height:200px;max-height:400px;padding-right:8px}.songs-checklist::-webkit-scrollbar{width:8px}.songs-checklist::-webkit-scrollbar-track{background:var(--background-primary);border-radius:4px}.songs-checklist::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}.songs-checklist::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.song-checkbox{display:flex;align-items:center;gap:12px;padding:8px;border-radius:6px;cursor:pointer;transition:background-color .2s ease;-webkit-user-select:none;user-select:none;width:100%}.song-checkbox:hover{background-color:var(--hover-background)}.song-checkbox input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent-color);cursor:pointer;margin:0;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:#ffffff12;border:1px solid var(--border-color);border-radius:4px}.song-checkbox input[type=checkbox]:checked{background-color:var(--accent-color);border-color:var(--accent-color);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E");background-size:14px;background-position:center;background-repeat:no-repeat}.song-art{width:40px;height:40px;border-radius:4px;background-color:var(--background-elevated);display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0}.song-art img.default-art{width:24px;height:24px;opacity:.7}.song-info{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.song-title{color:var(--text-primary);font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.song-artist{color:var(--text-secondary);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.modal-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:auto}.cancel-button,.save-button{padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.cancel-button{background:none;border:1px solid var(--border-color);color:var(--text-primary)}.cancel-button:hover:not(:disabled){background:var(--hover-background)}.save-button{background:var(--accent-color);border:none;color:#fff}.save-button:hover:not(:disabled){opacity:.9}.save-button:disabled,.cancel-button:disabled{opacity:.5;cursor:not-allowed}.modal-loading,.modal-error,.no-results{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px;color:var(--text-secondary);text-align:center;min-height:200px}.modal-error button{padding:8px 16px;background-color:var(--accent-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:14px}.no-results{display:flex;align-items:center;justify-content:center;padding:40px;color:var(--text-secondary);text-align:center}.songs-list{width:100%;padding:24px 40px;display:flex;flex-direction:column;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;flex:1;min-height:0;font-size:14px}.song-row{display:flex;align-items:center;padding:8px 16px;border-radius:8px;cursor:pointer;position:relative}.song-number{color:var(--text-secondary);text-align:center}.song-title-container{display:flex;align-items:center;gap:12px;min-width:0}.song-art{width:40px;height:40px;border-radius:4px;overflow:hidden;flex-shrink:0}.song-art .default-art{padding:8px;background:var(--background-light)}.song-info{min-width:0;flex:1}.song-title{font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-artist{color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-duration{color:var(--text-secondary);text-align:center}.song-album{color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-actions{position:relative;display:flex;align-items:center;opacity:0;transition:opacity .2s ease}.song-row:hover .song-actions,.song-row.menu-open .song-actions{opacity:1}.song-actions .action-button{border:none;background:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;border-radius:50%}.song-actions .action-button:hover{opacity:1;background:var(--hover-background)}.song-actions .action-button img{width:16px;height:16px}.songs-loading{text-align:center;padding:40px;color:var(--text-secondary)}.songs-error{text-align:center;padding:40px;color:var(--error-color)}.songs-error button{margin-top:16px;padding:8px 16px;background:var(--error-color);color:var(--text-primary);border:none;border-radius:4px;cursor:pointer}.songs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:40px;text-align:center;flex:1;gap:16px}.songs-empty h2{color:var(--text-secondary);font-size:20px;font-weight:500;margin:0}.outline-button{background:none;border:1px solid var(--accent-color);color:var(--accent-color);padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;opacity:.8;transition:all .2s ease}.outline-button:hover{opacity:1;background:rgba(var(--accent-color-rgb),.1)}.text-button{background:none;border:none;padding:0;color:var(--accent-color);font-size:inherit;font-weight:400;cursor:pointer;opacity:.8;transition:opacity .2s ease}.text-button:hover{opacity:1}@media (max-width: 768px){.songs-list{padding:0}.song-header{grid-template-columns:24px 30px 2fr 1fr 48px 48px;gap:12px;padding:12px 4px}.song-row{grid-template-columns:24px 30px 2fr 1fr 48px 48px;gap:12px;padding:12px 4px;border-radius:0}.song-art{width:32px;height:32px}h1.playlist-title{font-size:48px}.song-art .default-art{padding:6px}.song-title-container{gap:8px}.song-actions{opacity:1}.songs-empty{padding:24px 16px}.songs-empty h2{font-size:18px}.outline-button{width:100%;max-width:200px;padding:12px 24px}}.header-checkbox,.song-checkbox{width:100%;display:flex;align-items:center;justify-content:center}.header-checkbox input,.song-checkbox input{width:16px;height:16px;cursor:pointer;accent-color:var(--accent-color);-moz-appearance:none;appearance:none;-webkit-appearance:none;background-color:var(--background-elevated);border:1px solid var(--border-color);border-radius:4px;margin:0}.header-checkbox input:checked,.song-checkbox input:checked{background-color:var(--accent-color);border-color:var(--accent-color);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z'/%3E%3C/svg%3E");background-size:14px;background-position:center;background-repeat:no-repeat}.batch-edit-button{background:none;border:none;padding:4px 8px;border-radius:4px;color:var(--accent-color);font-size:12px;cursor:pointer;white-space:nowrap}.batch-edit-button:hover{background-color:var(--hover-background)}.batch-edit-info{color:var(--text-secondary);font-size:14px;margin-bottom:16px;padding:8px;background:var(--background-elevated);border-radius:4px}.dropdown-portal{position:fixed;z-index:1000;top:0;left:0;right:0;bottom:0;pointer-events:none}.dropdown-menu{position:fixed;background:var(--background-elevated);border-radius:8px;padding:4px;box-shadow:0 4px 12px #0003;z-index:1000;max-height:var(--max-height);overflow-y:auto;pointer-events:auto}.dropdown-item-container{position:relative}.dropdown-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:none;background:none;color:var(--text-primary);font-size:14px;text-align:left;cursor:pointer;border-radius:4px;transition:background-color .2s ease}.dropdown-item:hover{background-color:var(--hover-background)}.dropdown-item.danger{color:var(--danger-color)}.dropdown-item.danger:hover{background-color:var(--danger-background)}.dropdown-item.has-submenu{padding-right:32px}.dropdown-item-icon{width:16px;height:16px;object-fit:cover;border-radius:2px;opacity:.7}.dropdown-item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropdown-item-shortcut{color:var(--text-secondary);font-size:12px;margin-left:16px}.submenu-arrow{position:absolute;right:8px;width:16px;height:16px;opacity:.7}.dropdown-item:disabled{opacity:.5;cursor:not-allowed}.dropdown-menu::-webkit-scrollbar{width:8px}.dropdown-menu::-webkit-scrollbar-track{background:transparent}.dropdown-menu::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}.dropdown-menu::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}@media (max-width: 768px){.dropdown-menu{max-width:calc(100vw - 32px)}.dropdown-item{padding:12px 16px}}.playlists-list{display:flex;flex-direction:column;gap:4px}.playlists-list.sidebar{padding:0}.playlist-row{display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:8px;cursor:pointer;transition:background-color .2s ease}.playlist-row:hover{background-color:var(--hover-background)}.playlist-row.sidebar{padding:4px;display:flex;align-items:center;justify-content:space-between}.sidebar-playlist-info{display:flex;align-items:center;gap:8px}.playlist-art{width:48px;height:48px;border-radius:4px;overflow:hidden;background-color:var(--background-elevated);display:flex;align-items:center;justify-content:center;flex-shrink:0}.playlist-art img{width:100%;height:100%;object-fit:cover}.playlist-art img[src*="playlist.svg"]{width:24px;height:24px;opacity:.7}.playlist-info{flex:1;min-width:0;display:flex;flex-direction:column}.playlist-name{font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.playlist-stats,.playlist-row.sidebar .playlist-name{font-size:14px;color:var(--text-secondary)}.playlist-row.sidebar:hover .playlist-name{color:var(--text-primary)}.playlist-actions{position:relative;transition:opacity .2s ease}.playlist-row:hover .playlist-actions{opacity:1}.action-button{background:none;border:none;padding:8px;cursor:pointer;opacity:.6;transition:opacity .2s ease;width:32px;height:32px}.action-button:hover{opacity:1;background-color:transparent}.playlist-row.sidebar .action-button{padding:4px}.action-button:hover{opacity:1}.action-button img{width:24px;height:24px}.playlist-row.sidebar .action-button img{width:16px;height:16px}.playlists-loading,.playlists-error,.playlists-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:40px;color:var(--text-secondary);text-align:center}.playlists-loading.sidebar,.playlists-error.sidebar,.playlists-empty.sidebar{padding:12px;font-size:14px}.playlists-error button{padding:8px 16px;background-color:var(--accent-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:14px}.playlists-error button:hover{opacity:.9}.player{padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom));background:var(--background-elevated);border-top:1px solid var(--border-color);display:grid;grid-template-columns:1fr 2fr 1fr;gap:16px;align-items:center}.player-song-title{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-song-artist{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-secondary)}.player-left{display:flex;align-items:center;max-width:264px;min-width:0}.now-playing{display:flex;align-items:center;gap:12px;width:100%;min-width:0;transition:background-color .2s ease}.now-playing:hover{cursor:pointer;background-color:var(--hover-background);border-radius:8px}.song-art{width:56px;height:56px;border-radius:4px;overflow:hidden;background:linear-gradient(149deg,#924877,#574fb5);display:flex;align-items:center;justify-content:center}.song-art img{width:100%;height:100%;object-fit:cover}.song-art .default-art{width:24px;height:24px;padding:0;opacity:.7}.song-info{display:flex;flex-direction:column;min-width:0;flex:1;max-width:calc(100% - 68px)}.song-title,.player-song-title{color:var(--text-primary);font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.song-artist,.player-song-artist{color:var(--text-secondary);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.player-center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.playback-controls{display:flex;align-items:center;gap:16px}.control-button{background:none;border:none;cursor:pointer;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.control-button:hover{transform:scale(1.1);background-color:transparent}.control-button img{width:20px;height:20px;opacity:.7;transition:opacity .2s ease}.control-button:hover img{opacity:1}.play-button{width:40px;height:40px}.next-button,.previous-button{padding:0}.next-button img,.previous-button img{width:40px;height:40px}.play-button img{width:100%;height:100%;opacity:1;filter:brightness(0) saturate(100%) invert(76%) sepia(39%) saturate(7075%) hue-rotate(230deg) brightness(92%) contrast(84%)}.play-button:hover{transform:scale(1.05)}.control-button.active img{opacity:1;filter:brightness(0) saturate(100%) invert(76%) sepia(39%) saturate(7075%) hue-rotate(230deg) brightness(92%) contrast(84%)}.progress-container{width:100%;display:flex;align-items:center;gap:8px}.time-info{font-size:12px;color:var(--text-secondary);min-width:40px}.current-time{text-align:right}.duration{text-align:left}.progress-bar{flex:1;height:4px;background:var(--border-color);border-radius:2px;cursor:pointer;position:relative}.progress-bar-fill{position:absolute;top:0;left:0;height:100%;background:var(--text-secondary);border-radius:2px}.progress-handle{position:absolute;top:50%;width:12px;height:12px;background:var(--text-primary);border-radius:50%;transform:translate(-50%,-50%);opacity:0;transition:opacity .2s ease;cursor:grab}.progress-handle:active{cursor:grabbing}.progress-bar:hover .progress-bar-fill{background:var(--accent-color)}.progress-bar:hover .progress-handle{opacity:1}.player-right{display:flex;align-items:center;justify-content:flex-end}.volume-controls{display:flex;align-items:center;gap:8px;padding-right:16px}.volume-button{opacity:.7;transition:opacity .2s ease}.volume-button:hover{opacity:1}.volume-button img{width:24px;height:24px}.volume-slider{width:100px;height:4px;-webkit-appearance:none;background:var(--border-color);border-radius:2px;outline:none;opacity:.7;transition:opacity .2s ease}.volume-slider:hover{opacity:1}.volume-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:var(--text-primary);cursor:pointer;transition:all .2s ease}.volume-slider::-moz-range-thumb{width:12px;height:12px;border:none;border-radius:50%;background:var(--text-primary);cursor:pointer;transition:all .2s ease}.volume-slider::-webkit-slider-thumb:hover,.volume-slider::-moz-range-thumb:hover{transform:scale(1.2);background:var(--accent-color)}.control-button:disabled{cursor:not-allowed;opacity:.3}.control-button:disabled:hover{transform:none;background-color:transparent}.control-button:disabled img{opacity:1}.full-screen-player{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--background-base);z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;color:var(--text-primary)}.close-button{display:none}.full-screen-player .back-button,.full-screen-player .playlist-actions .action-button{z-index:998;border:none;padding:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:50%;width:72px;height:72px}.full-screen-player .back-button{position:absolute;top:16px;left:16px}.full-screen-player .playlist-actions{position:absolute;top:16px;right:16px;z-index:998;background:none}.full-screen-player .back-button:hover,.full-screen-player .playlist-actions .action-button:hover{transform:none;background:#0000001a}.full-screen-player .back-button img,.full-screen-player .playlist-actions .action-button img{width:32px;height:32px;opacity:.8}.full-screen-player .back-button:hover img,.full-screen-player .playlist-actions .action-button:hover img{opacity:1}.full-screen-content{display:flex;flex-direction:column;align-items:center;gap:32px;max-width:800px;width:100%}.full-screen-art{width:400px;height:400px;border-radius:8px;overflow:hidden;box-shadow:0 8px 24px #0003;background:linear-gradient(149deg,#924877,#574fb5);display:flex;align-items:center;justify-content:center}.full-screen-art img{width:100%;height:100%;object-fit:cover}.full-screen-art .default-art{width:96px;height:96px;padding:0;opacity:.7}.full-screen-info{text-align:center}.full-screen-title{font-size:32px;font-weight:700;margin:0 0 8px}.full-screen-artist{font-size:20px;font-weight:500;color:#ffffff80;margin:0}.full-screen-controls{display:flex;flex-direction:column;align-items:center;gap:24px;width:100%;max-width:600px}.full-screen-controls .playback-controls{gap:24px}.full-screen-controls .control-button{padding:12px}.full-screen-controls .control-button img{width:24px;height:24px}.full-screen-controls .play-button,.full-screen-controls .play-button img{width:64px;height:64px}.full-screen-controls .next-button,.full-screen-controls .previous-button{padding:0}.full-screen-controls .next-button img,.full-screen-controls .previous-button img{width:48px;height:48px}.full-screen-controls .progress-container{width:100%}.full-screen-controls .time-info{font-size:14px}.full-screen-controls .progress-bar{height:6px}.full-screen-controls .progress-handle{width:16px;height:16px}@media (max-width: 768px){.player{display:grid;grid-template-columns:1fr auto;height:64px;padding:0 16px;gap:16px;align-items:center}.player-left{max-width:none;grid-column:1}.song-art{width:40px;height:40px}.song-info{max-width:calc(100% - 52px)}.player-center{display:flex;grid-column:2;align-items:center;justify-content:flex-end;padding:0}.player-right{display:none}.player .playback-controls{display:flex;align-items:center;justify-content:center;margin:0;padding:0}.player .play-button{width:40px;height:40px;margin:0;padding:0;display:flex;align-items:center;justify-content:center}.player .play-button img{width:32px;height:32px;opacity:1}.player .next-button,.player .previous-button,.player .volume-controls,.player .progress-container{display:none}.now-playing{gap:8px;align-items:center}.song-title{font-size:14px;line-height:1.2}.song-artist{font-size:12px;line-height:1.2}.full-screen-content{padding:64px 24px 24px;gap:24px}.full-screen-art{width:100%;max-width:300px;height:auto;aspect-ratio:1}.full-screen-title{font-size:24px}.full-screen-artist{font-size:16px}.full-screen-controls .next-button,.full-screen-controls .previous-button,.full-screen-controls .progress-container{display:flex}.full-screen-controls .playback-controls{gap:16px}.full-screen-controls .play-button,.full-screen-controls .play-button img{width:56px;height:56px}.full-screen-controls .next-button img,.full-screen-controls .previous-button img{width:40px;height:40px}.full-screen-controls .progress-container{width:100%;padding:0}.full-screen-controls .time-info{font-size:12px}.full-screen-controls .progress-bar{height:4px}.full-screen-controls .progress-handle{width:12px;height:12px}.close-button{top:16px;left:16px;right:auto}.close-button img:first-child{display:none}.close-button img:last-child{display:block}.song-art .default-art{width:20px;height:20px}.full-screen-art .default-art{width:64px;height:64px}}.playlist-controls,.playlist-controls-main{display:flex;align-items:center;gap:4px;width:100%}.playlist-controls .playlist-stats{color:var(--text-secondary);font-size:14px;display:flex;align-items:center;gap:4px}.playlist-controls .playlist-actions{position:relative;margin-left:0}.playlist-controls .action-button{border:none;background:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;border-radius:50%}.playlist-controls .action-button:hover{opacity:1;background:var(--hover-background)}.playlist-controls .action-button img{width:16px;height:16px}.playlist-controls .selection-controls{display:flex;align-items:center;width:100%;background:#ffffff0d;border:1px solid var(--border-color);border-radius:8px;padding:8px;box-shadow:0 4px 12px #0003;justify-content:space-between;gap:4px}.playlist-controls .selection-controls span{color:var(--text-secondary);font-size:14px}.playlist-controls .selection-controls .batch-actions{display:flex;gap:4px;margin-left:auto}.playlist-controls .selection-controls button{padding:6px 12px;border:none;border-radius:4px;background:var(--background-light);color:var(--text-primary);font-size:14px;cursor:pointer;transition:all .2s ease}.playlist-controls .selection-controls button:hover{background:var(--hover-background)}.playlist-controls .selection-controls .delete-button{background:var(--background-light);color:var(--text-primary)}.playlist-controls .selection-controls .delete-button:hover{background:var(--error-color);color:#fff}.view-header{margin-bottom:24px;padding:48px;background:linear-gradient(149deg,#2d0a20,#090535);position:relative}.view-header-fixed{position:fixed;top:0;left:280px;right:0;height:64px;background:#30233ccc;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:0 48px;z-index:100;border-bottom:1px solid var(--border-color);transform:translateY(-100%);transition:transform .3s ease;display:flex;align-items:center;gap:16px;opacity:0;pointer-events:none}.view-header-fixed.visible{transform:translateY(0);opacity:1;pointer-events:auto}.view-header-fixed .playlist-title{font-size:20px!important;margin:0!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.view-header-fixed .playlist-controls{margin:0!important;display:flex;align-items:center;gap:16px;flex:1;min-width:0;justify-content:space-between}.view-header-fixed .play-button{order:-1;flex-shrink:0;width:32px;height:32px;transition:transform .2s ease;opacity:.8}.view-header-fixed .play-button:hover{background:none;transform:scale(1.1);opacity:1}.view-header-fixed .playlist-stats{font-size:14px;color:var(--text-secondary);display:flex;align-items:center;gap:16px;flex-shrink:0}.view-header .playlist-title{font-size:64px;font-weight:700;margin:0 0 24px;line-height:1}.view-header .playlist-controls{display:flex;align-items:center;gap:16px;width:100%;justify-content:space-between}.view-header .play-button{border:none;background:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;width:32px;height:32px}.view-header .play-button:hover{opacity:1}.view-header .play-button img{width:100%;height:100%}.view-header .playlist-stats{color:var(--text-secondary);font-size:14px;display:flex;align-items:center;gap:16px}.view-header .playlist-actions{position:relative}.view-header .action-button{border:none;background:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;border-radius:50%}.view-header .action-button:hover{opacity:1;background:var(--hover-background)}.view-header .action-button img{width:16px;height:16px}.playlist-actions{display:flex;align-items:center}.header-actions{display:flex;align-items:center;gap:8px;margin-left:auto;min-width:fit-content}.view-header .search-container,.view-header-fixed .search-container{position:relative;display:flex;align-items:center;width:32px;transition:all .3s ease;min-width:32px}.view-header .search-container.expanded,.view-header-fixed .search-container.expanded{width:300px;min-width:300px}.view-header .search-button,.view-header-fixed .search-button{position:absolute;right:0;border:none;background:none;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.8;transition:all .3s ease;border-radius:50%;z-index:2}.view-header .search-container.expanded .search-button,.view-header-fixed .search-container.expanded .search-button{right:auto;left:0}.view-header .search-button:hover,.view-header-fixed .search-button:hover{opacity:1;background:var(--hover-background)}.view-header .search-clear-button,.view-header-fixed .search-clear-button{position:absolute;right:0;border:none;background:none;padding:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;border-radius:50%;z-index:2}.view-header .search-clear-button:hover,.view-header-fixed .search-clear-button:hover{opacity:1;background:var(--hover-background)}.view-header .search-input,.view-header-fixed .search-input{position:absolute;right:0;width:100%;height:36px;background:#ffffff1a;border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:0 28px;color:var(--text-primary);font-size:14px;transition:all .3s ease;opacity:0;pointer-events:none;caret-color:#fff}.view-header .search-container.expanded .search-input,.view-header-fixed .search-container.expanded .search-input{opacity:1;pointer-events:auto}.view-header .search-input:focus,.view-header-fixed .search-input:focus{outline:none;background:#ffffff26;border-color:var(--accent-color)}.view-header .search-icon,.view-header-fixed .search-icon{width:16px;height:16px;opacity:.7}.view-header .search-input::placeholder,.view-header-fixed .search-input::placeholder{color:#ffffff80}.view-header-fixed .search-container{margin-left:auto}.view-header-fixed .search-container.expanded{width:280px;min-width:280px}.view-header .search-container.expanded .search-button:hover{background:none;opacity:1;pointer-events:none}@media (max-width: 768px){.view-header{padding:24px 16px;border-radius:0}.view-header .playlist-title{font-size:40px;margin-right:16px;margin-bottom:16px}.view-header-fixed{left:0}.search-container.expanded{width:220px;min-width:220px}}.mobile-menu-button{border-radius:50%}.mobile-menu-button,.sidebar-close-button{display:none}.library{display:flex;flex-direction:column;height:100vh;height:-webkit-fill-available;background-color:var(--background-primary);padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.library-main{display:flex;flex:1;min-height:0}.library-sidebar{width:280px;background-color:var(--background-secondary);border-right:1px solid var(--border-color);padding:16px;display:flex;flex-direction:column;gap:8px;overflow-y:auto}.library-content{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-width:0}@media (max-width: 768px){.library-content{width:100%}}.library-sidebar{width:280px;background-color:var(--background-secondary);border-right:1px solid var(--border-color);padding:16px;display:flex;flex-direction:column;gap:8px}.sidebar-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.songs-header{display:grid;grid-template-columns:48px 1.5fr 1fr 48px 48px;gap:12px;padding:24px 0 16px;border-bottom:1px solid var(--border-color);margin-bottom:16px}.sidebar-header h2{font-size:20px;font-weight:600;color:var(--text-primary);margin:0}.sidebar-nav{display:flex;flex-direction:column;gap:4px}.nav-item{display:flex;align-items:center;padding:4px;border-radius:6px;background:none;border:none;cursor:pointer;color:var(--text-secondary);font-size:14px;text-align:left;width:100%;transition:background-color .2s ease,color .2s ease}.nav-item:hover,.nav-item.active{background:var(--hover-background);color:var(--text-primary)}.nav-item-content{display:flex;align-items:center;gap:12px;min-width:0;flex:1}.nav-item-art{width:48px;height:48px;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:4px;background-color:var(--background-elevated)}.nav-item-art img{opacity:.7;transition:opacity .2s ease}.nav-item:hover .nav-item-art img,.nav-item.active .nav-item-art img{opacity:1}.playlists-section{display:flex;flex-direction:column;gap:4px}.playlists-section h3{font-size:14px;font-weight:600;color:var(--text-secondary);margin:0;padding:0 12px}.songs-view{flex:1;display:flex;flex-direction:column;min-height:0}.songs-view-header{margin-bottom:24px;padding:48px;background:linear-gradient(149deg,#2d0a20,#090535)}.songs-view-header .playlist-info{display:flex;flex-direction:column;width:100%}.songs-view-header .playlist-title{font-size:64px;font-weight:700;margin:0;line-height:1}.songs-view-header .playlist-controls{display:flex;align-items:center;gap:16px;width:100%}.songs-view-header .play-button{border:none;background:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;width:32px;height:32px}.songs-view-header .play-button:hover{opacity:1}.songs-view-header .play-button img{width:100%;height:100%}.songs-view-header .playlist-stats{color:var(--text-secondary);font-size:14px}.songs-view-header .playlist-actions{position:relative}.songs-view-header .action-button{border:none;background:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;border-radius:50%}.songs-view-header .action-button:hover{opacity:1;background:var(--hover-background)}.songs-view-header .action-button img{width:16px;height:16px}@media (max-width: 768px){.songs-view{padding:0}.songs-view-header{padding:32px 24px;margin-bottom:24px;border-radius:0}.songs-view-header .playlist-title{font-size:40px}.songs-header{grid-template-columns:48px 1fr 48px 48px;padding:24px 0 16px}.header-artist,.header-album{display:none}}.sidebar-actions{display:flex;gap:8px;align-items:center;position:relative}.sidebar-actions .add-button,.sidebar-actions .sidebar-close-button{align-items:center;justify-content:center;width:32px;height:32px;padding:8px;border:none;border-radius:50%;cursor:pointer;background:none}.sidebar-actions .add-button:hover,.sidebar-actions .sidebar-close-button:hover{background:var(--hover-background)}.sidebar-actions .add-button img,.sidebar-actions .sidebar-close-button img{width:16px;height:16px;opacity:.8}.sidebar-actions .add-button:hover img,.sidebar-actions .sidebar-close-button:hover img{opacity:1}.header-number,.header-title,.header-album,.header-duration{color:var(--text-secondary)}.header-number{text-align:center}.header-title{flex:2.5}.header-artist,.header-album{flex:1.5}.header-duration{text-align:center}.song-row{cursor:pointer}.song-row:hover{background-color:var(--hover-song-background)}.selection-controls{display:flex;align-items:center;width:100%;background:#ffffff0d;border:1px solid var(--border-color);border-radius:8px;padding:8px 16px;box-shadow:0 4px 12px #0003;justify-content:space-between;gap:16px}.selection-controls span{color:var(--text-secondary);margin-left:8px;font-size:14px}.selection-controls .batch-actions{display:flex;gap:16px;margin-left:auto}.selection-controls button{padding:8px 16px;border:none;border-radius:4px;background:var(--background-light);color:var(--text-primary);font-size:14px;cursor:pointer;transition:all .2s ease}.selection-controls button:hover{background:var(--hover-background)}.selection-controls .delete-button{background:var(--background-light);color:var(--text-primary)}.selection-controls .delete-button:hover{background:var(--error-color);color:#fff}.mobile-menu-button{display:none}@media (max-width: 768px){.mobile-menu-button{display:block;position:fixed;top:12px;right:12px;z-index:100;background:none;border:none;padding:8px;cursor:pointer}.mobile-menu-button img{width:24px;height:24px}.library-sidebar{position:fixed;top:0;right:-100vw;bottom:0;width:100vw;z-index:1000;transition:transform .3s ease}.sidebar-open .library-sidebar{transform:translate(-100vw)}.sidebar-close-button{display:block;background:none;border:none;padding:8px;cursor:pointer;border-radius:50%}.sidebar-close-button img{width:24px;height:24px}.library-content{width:100%;padding-right:0}}.song-row{display:grid;grid-template-columns:48px 1.5fr 1fr 48px 48px;gap:12px;padding:8px 0;align-items:center;cursor:pointer;border-radius:0}@media (max-width: 768px){.song-row{grid-template-columns:48px 1fr 48px 48px;padding:8px 0}.song-row .song-album{display:none}}.playlist-view{display:flex;flex-direction:column;gap:0;height:100%;position:relative}.playlist-header{display:flex;align-items:flex-start;justify-content:space-between;position:relative;padding:48px;background:linear-gradient(135deg,var(--accent-color),rgba(0,0,0,.4));background:linear-gradient(149deg,#2d0a20,#090535)}.playlist-header .playlist-info{display:flex;flex-direction:column;gap:8px;width:100%}.playlist-title{margin:0;font-size:64px;font-weight:700;color:var(--text-primary);line-height:1}.playlist-stats{font-size:12px;color:var(--text-tertiary)}.playlist-actions{position:relative}.playlist-actions .action-button{background:none;border:none;padding:8px;cursor:pointer;opacity:.6;transition:opacity .2s ease;display:flex;align-items:center;justify-content:center}.playlist-actions .action-button:hover{opacity:1}.playlist-actions .action-button img{width:24px;height:24px}.playlist-view-loading,.playlist-view-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;height:100%;color:var(--text-secondary)}.playlist-view-error button{padding:8px 16px;border:none;border-radius:8px;background:var(--accent-color);color:#fff;font-size:14px;cursor:pointer;transition:background-color .2s ease}.playlist-view-error button:hover{background:var(--accent-color-hover)}.playlist-controls{display:flex;align-items:center;gap:16px}.playlist-controls .play-button{border:none;background:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;opacity:.8;transition:opacity .2s ease;width:32px;height:32px}.playlist-controls .play-button:hover{opacity:1}.playlist-controls .play-button img{width:100%;height:100%}.playlist-controls .playlist-actions{position:relative}.playlist-controls .action-button{background:none;border:none;padding:0;cursor:pointer;opacity:.6;transition:opacity .2s ease;display:flex;align-items:center;justify-content:center}.playlist-controls .action-button:hover{opacity:1}.playlist-controls .action-button img{width:20px;height:20px}.batch-actions{display:flex;gap:8px;margin-left:auto}.batch-actions button{padding:8px 16px;border-radius:4px;border:none;background:var(--primary);color:#fff;cursor:pointer;transition:background-color .2s}.batch-actions button:hover{background:var(--background-light)}.batch-actions .delete-button{background:var(--error)}.batch-actions .delete-button:hover{background:var(--error-dark)}.song-checkbox{display:flex;align-items:center;justify-content:center;width:100%}.song-checkbox input[type=checkbox]{width:16px;height:16px;cursor:pointer}@media (max-width: 768px){.playlist-header{padding:32px 24px}}.artists-view{flex:1;display:flex;flex-direction:column;position:relative}.search-input{width:100%;height:36px;padding:0 12px;border-radius:6px;border:1px solid var(--border-color);background:var(--background-elevated);color:var(--text-primary);font-size:14px;transition:all .2s ease}.artists-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:24px;padding:24px;overflow-y:auto;flex:1}.artist-card{background:var(--background-elevated);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:12px;cursor:pointer;transition:background-color .2s ease}.artist-card:hover{background:var(--hover-background)}.artist-art{aspect-ratio:1;border-radius:4px;background:var(--background);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.artist-art .album-art{width:100%;height:100%;object-fit:cover}.artist-art .default-art{width:40%;height:40%;opacity:.7}.artist-card:hover .play-button-overlay{opacity:1}.artist-card .play-button{width:48px;height:48px;border-radius:50%;background:var(--accent-color);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .2s ease;box-shadow:0 2px 8px #0000004d}.artist-card .play-button:hover{transform:scale(1.05)}.artist-card .play-button img{width:20px;height:20px;opacity:1}.artist-info{display:flex;flex-direction:column;gap:4px}.artist-info h2{font-size:14px;font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-primary)}.artist-info p{font-size:12px;color:var(--text-secondary);margin:0}.artists-view-loading,.artists-view-error{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary)}@media (max-width: 768px){.artists-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));padding:16px;gap:16px}.artist-card{padding:8px}}.albums-view{flex:1;display:flex;flex-direction:column;position:relative}.search-input{width:100%;height:36px;padding:0 28px;border-radius:6px;border:1px solid var(--border-color);background:var(--background-elevated);color:var(--text-primary);font-size:14px;transition:all .2s ease}.search-input:focus{outline:none;border-color:var(--accent-color);background:var(--background)}.search-input::placeholder{color:var(--text-secondary)}.albums-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:24px;padding:24px;overflow-y:auto;flex:1}.album-card{background:var(--background-elevated);border-radius:8px;padding:12px;display:flex;flex-direction:column;gap:12px;cursor:pointer;transition:background-color .2s ease}.album-card:hover{background:var(--hover-background)}.album-art{aspect-ratio:1;border-radius:4px;background:var(--background);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.album-art .album-art-img{width:100%;height:100%;object-fit:cover}.album-art .default-art{width:40%;height:40%;opacity:.7}.play-button-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.album-card:hover .play-button-overlay{opacity:1}.album-card .play-button{width:48px;height:48px;border-radius:50%;background:var(--hover-background);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:transform .2s ease;box-shadow:0 2px 8px #0000004d;border:2px solid var(--border-color)}.album-card .play-button:hover{transform:scale(1.05)}.album-card .play-button img{width:100%;height:100%;opacity:1}.album-info{display:flex;flex-direction:column;gap:4px}.album-info h2{font-size:14px;font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-primary)}.album-info .album-artist{font-size:13px;color:var(--text-secondary);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.album-info .album-songs{font-size:12px;color:var(--text-tertiary);margin:0}.albums-view-loading,.albums-view-error{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text-secondary)}@media (max-width: 768px){.albums-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));padding:16px;gap:16px}.album-card{padding:8px}}*{margin:0;padding:0;box-sizing:border-box}:root{--primary-color: #000;--text-color: #333;--background-color: #fff;--border-color: rgba(255,255,255,.01);--hover-color: #f5f5f5}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;color:var(--text-color);background-color:var(--background-color);line-height:1.5}.app{min-height:100vh}button{font-family:inherit}:root{--background-primary: #121212;--background-secondary: #181818;--background-elevated: #282828;--text-primary: #ffffff;--text-secondary: #b3b3b3;--text-tertiary: #565555;--accent-color: #ED57FF;--accent-hover: #CA7FD3;--border-color: rgba(255,255,255,.07);--error-color: #ff4444;--danger-color: #ff4444;--danger-background: rgba(255, 68, 68, .1);--player-background: #181818;--modal-background: #282828;--dropdown-background: #282828;--hover-song-background: rgba(255, 255, 255, .05);--hover-background: rgba(255, 255, 255, .1)}body{background-color:var(--background-primary);color:var(--text-primary)}button{background-color:transparent;color:var(--text-primary);border:none;cursor:pointer;transition:all .2s ease}button:hover{color:var(--text-primary);background-color:var(--hover-background)}input,textarea{background-color:var(--background-elevated);color:var(--text-primary);border:1px solid var(--border-color)}input:focus,textarea:focus{border-color:var(--accent-color);outline:none}
