:root{--background-dark:#121212;--surface-dark:#1c1c1c;--accent-blue:#1db954;--text-main:#fff;--text-muted:#b3b3b3;--sidebar-width:60px}body{background-color:var(--background-dark);color:var(--text-main);-webkit-user-select:none;user-select:none;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.titlebar-drag{-webkit-app-region:drag;background-color:var(--surface-dark);align-items:center;height:32px;padding:0 16px;display:flex}.titlebar-button{-webkit-app-region:no-drag;cursor:pointer}.titlebar-brand{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.app-shell{flex-direction:column;height:100vh;display:flex}.app-body{flex:1;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-width);background-color:var(--surface-dark);flex-direction:column;align-items:center;gap:12px;padding-top:12px;display:flex}.sidebar ul{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.friend-item{cursor:pointer;background:0 0;border:none;border-radius:50%;padding:4px;position:relative}.friend-item.selected{outline:2px solid var(--accent-blue)}.friend-avatar{object-fit:cover;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;display:flex}.friend-avatar-fallback{color:var(--text-main);background-color:#333;font-weight:600}.status-dot{background-color:#555;border-radius:50%;width:10px;height:10px;position:absolute;bottom:0;right:0}.status-dot.playing{background-color:var(--accent-blue)}.app-main{flex:1;padding:32px;overflow-y:auto}.empty-state{color:var(--text-muted)}.player-card{flex-direction:column;gap:8px;max-width:480px;display:flex}.player-art{object-fit:cover;border-radius:8px;width:240px;height:240px;box-shadow:0 8px 24px #0009}.player-song a,.player-artists a,.player-album a{color:inherit;text-decoration:none}.player-song a:hover,.player-artists a:hover,.player-album a:hover{text-decoration:underline}.player-artists{color:var(--text-muted);margin:0}.player-artists a:not(:last-child):after{content:","}.player-album{margin:0;font-size:13px}.player-progress{color:var(--text-muted);align-items:center;gap:8px;max-width:320px;font-size:12px;display:flex}.player-progress-track{background-color:#444;border-radius:2px;flex:1;height:4px;overflow:hidden}.player-progress-fill{background-color:var(--accent-blue);height:100%}.listen-button{background-color:var(--accent-blue);color:#000;cursor:pointer;border:none;border-radius:999px;align-self:flex-start;align-items:center;gap:8px;margin-top:16px;padding:10px 20px;font-weight:700;display:inline-flex}.listen-button.active{background-color:#fff}.login-screen{flex-direction:column;justify-content:center;align-items:center;gap:12px;height:calc(100vh - 32px);display:flex}.login-screen input{background-color:var(--surface-dark);width:280px;color:var(--text-main);border:1px solid #333;border-radius:6px;padding:10px 14px}.login-screen button{background-color:var(--accent-blue);color:#000;cursor:pointer;border:none;border-radius:999px;padding:10px 24px;font-weight:700}.login-screen button:disabled{opacity:.5;cursor:not-allowed}.main-nav{border-bottom:1px solid #2a2a2a;gap:4px;margin-bottom:24px;display:flex}.nav-tab{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:10px 16px;font-size:14px;font-weight:600}.nav-tab.active{color:var(--text-main);border-bottom-color:var(--accent-blue)}.nav-tab:hover{color:var(--text-main)}.page{padding-bottom:16px}.back-button{color:var(--accent-blue);cursor:pointer;background:0 0;border:none;padding:0 0 16px;font-size:14px}.own-status{background-color:var(--surface-dark);border-radius:10px;margin-bottom:24px;padding:20px}.own-status-header{align-items:center;gap:12px;margin-bottom:12px;display:flex}.own-status-header h2{margin:0;font-size:16px}.listener-badge{color:var(--accent-blue);background-color:#1db95426;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:600}.own-status-body{align-items:center;gap:16px;display:flex}.own-status-art{object-fit:cover;border-radius:6px;width:88px;height:88px}.own-status-meta{flex-direction:column;gap:2px;display:flex}.own-status-title{font-size:15px;font-weight:600}.own-status-artists{color:var(--text-muted);font-size:13px}.own-status-album,.play-indicator{color:var(--text-muted);font-size:12px}.play-indicator.playing{color:var(--accent-blue)}.own-status-empty{color:var(--text-muted);align-items:center;gap:8px;margin:0;display:flex}.friends-section h2{margin:0 0 12px;font-size:15px}.friends-empty{color:var(--text-muted)}.friend-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.friend-card{list-style:none}.friend-card-main{text-align:left;background-color:var(--surface-dark);cursor:pointer;width:100%;color:var(--text-main);border:none;border-radius:8px;align-items:center;gap:12px;padding:12px;display:flex}.friend-card-main:hover{background-color:#242424}.friend-card-main:disabled{cursor:default;opacity:.9}.friend-avatar{object-fit:cover;border-radius:50%;flex-shrink:0;width:40px;height:40px}.friend-avatar.placeholder{color:var(--text-main);background-color:#333;justify-content:center;align-items:center;font-weight:600;display:flex}.friend-avatar.large{width:56px;height:56px;font-size:22px}.friend-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.friend-name{font-size:14px;font-weight:600}.friend-song{white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.friend-song.muted{color:var(--text-muted);font-style:italic}.friend-artist{color:var(--text-muted);font-size:12px}.friend-progress{background-color:#333;border-radius:3px;height:6px;margin-top:6px;position:relative;overflow:hidden}.friend-progress-fill{background-color:var(--accent-blue);height:100%}.friend-progress-time{color:var(--text-muted);margin-top:4px;font-size:11px;display:block}.friend-album-art{object-fit:cover;border-radius:4px;flex-shrink:0;width:40px;height:40px}.past-card{background-color:var(--surface-dark);border-radius:8px;align-items:center;gap:12px;padding:12px;display:flex}.past-art{object-fit:cover;border-radius:4px;flex-shrink:0;width:40px;height:40px}.past-meta{flex-direction:column;gap:2px;display:flex}.past-time{color:var(--text-muted);font-size:11px}.friend-detail-head{align-items:center;gap:16px;margin-bottom:20px;display:flex}.friend-detail-head h2{margin:0}.friend-code{color:var(--text-muted);font-size:13px}.settings-section h2{margin:0 0 16px}.setting-row{border-bottom:1px solid #2a2a2a;justify-content:space-between;align-items:center;padding:14px 0;display:flex}.setting-label{color:var(--text-muted);font-size:14px}.setting-value{font-size:14px}.setting-value.online{color:var(--accent-blue)}.setting-value.offline{color:#f5a623}.setting-row.buttons{border-bottom:none}.settings-button{color:var(--text-main);cursor:pointer;background:0 0;border:1px solid #555;border-radius:999px;padding:8px 20px}.settings-button:hover{border-color:var(--accent-blue);color:var(--accent-blue)}.player-bar{background-color:var(--surface-dark);border-top:1px solid #2a2a2a;grid-template-columns:1fr 2fr 1fr;align-items:center;gap:16px;height:88px;padding:0 16px;display:grid}.player-bar-now{align-items:center;gap:12px;min-width:0;display:flex}.player-bar-art{object-fit:cover;border-radius:4px;width:56px;height:56px}.player-bar-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.player-bar-title{white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;overflow:hidden}.player-bar-artists{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.player-bar-transport{flex-direction:column;align-items:center;gap:6px;display:flex}.transport-row{align-items:center;gap:12px;display:flex}.transport-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:4px;display:flex}.transport-btn:hover{color:var(--text-main)}.transport-btn.active{color:var(--accent-blue)}.transport-btn.danger:hover{color:#f15e5e}.transport-btn.play-toggle{color:var(--text-main)}.seek-row{align-items:center;gap:10px;width:100%;display:flex}.time-label{color:var(--text-muted);text-align:center;min-width:34px;font-size:11px}.seek-slider,.volume-slider{appearance:none;background:linear-gradient(to right, var(--accent-blue) var(--fill,0%), #4d4d4d var(--fill,0%));border-radius:2px;outline:none;height:4px}.seek-slider{flex:1}.seek-slider::-webkit-slider-thumb{appearance:none;background:var(--text-main);cursor:pointer;border-radius:50%;width:12px;height:12px}.volume-slider::-webkit-slider-thumb{appearance:none;background:var(--text-main);cursor:pointer;border-radius:50%;width:12px;height:12px}.player-bar-tools{justify-content:flex-end;align-items:center;gap:12px;display:flex}.volume-slider{width:100px}.player-bar.connect-bar{justify-content:center;display:flex}.connect-player{text-align:center}.connect-title{margin:0 0 4px;font-size:15px;font-weight:600}.connect-hint{color:var(--text-muted);margin:0 0 12px;font-size:13px}.connect-hint code{background:#2a2a2a;border-radius:4px;padding:1px 5px}.connect-row{justify-content:center;gap:8px;display:flex}.connect-row input{width:280px;color:var(--text-main);background-color:#2a2a2a;border:1px solid #333;border-radius:6px;padding:8px 12px}.connect-row button{background-color:var(--accent-blue);color:#000;cursor:pointer;border:none;border-radius:999px;padding:8px 20px;font-weight:700}.connect-row button:disabled{opacity:.5;cursor:not-allowed}.device-overlay{z-index:100;background:#0006;position:fixed;inset:0}.device-popover{background-color:#282828;border-radius:10px;width:280px;padding:16px;position:absolute;bottom:100px;right:24px;box-shadow:0 8px 24px #0009}.device-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.device-header h4{margin:0}.device-refresh{color:var(--accent-blue);cursor:pointer;background:0 0;border:none;font-size:12px}.device-list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.device-item{text-align:left;width:100%;color:var(--text-main);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.device-item:hover{background-color:#3a3a3a}.device-item.active{color:var(--accent-blue)}.device-active-badge{color:var(--accent-blue);font-size:11px}.device-empty{color:var(--text-muted);padding:8px;font-size:13px}.dialog-overlay{z-index:200;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog{background-color:#282828;border-radius:12px;width:360px;padding:20px;box-shadow:0 12px 32px #0009}.dialog-header{align-items:center;gap:10px;display:flex}.dialog-header h3{margin:0;font-size:16px}.dialog-icon{color:var(--accent-blue)}.dialog-icon.danger{color:#f15e5e}.dialog-description{color:var(--text-muted);margin:12px 0;font-size:13px}.dialog-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.dialog-button{color:var(--text-main);cursor:pointer;background:0 0;border:1px solid #555;border-radius:999px;padding:8px 16px}.dialog-button.primary{border-color:var(--accent-blue);background-color:var(--accent-blue);color:#000;font-weight:700}.dialog-button.primary.danger{background-color:#f15e5e;border-color:#f15e5e}.tooltip-host{display:inline-flex;position:relative}.tooltip{color:var(--text-main);white-space:nowrap;pointer-events:none;z-index:300;background-color:#282828;border-radius:4px;padding:4px 8px;font-size:12px;position:fixed;transform:translate(-50%);box-shadow:0 4px 12px #0006}.tooltip-top{margin-top:-34px;transform:translate(-50%)}.snackbar{color:var(--text-main);z-index:400;background-color:#282828;border-radius:8px;max-width:80vw;padding:12px 20px;font-size:14px;position:fixed;bottom:104px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0009}.snackbar-success{border-left:3px solid var(--accent-blue)}.snackbar-error{border-left:3px solid #f15e5e}.disconnect-banner{z-index:300;background-color:#282828;border-radius:8px;align-items:center;gap:10px;padding:10px 16px;display:flex;position:fixed;top:40px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0009}.disconnect-banner p{margin:0;font-size:13px}.disconnect-spinner{border:2px solid #0000;border-top-color:var(--accent-blue);border-radius:50%;width:14px;height:14px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}
