*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#0a0a0a;min-height:100vh;color:#e0e0e0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.app{max-width:1200px;margin:0 auto;padding:2rem;min-height:100vh}.header{text-align:center;margin-bottom:3rem;color:#0f0;border-bottom:2px solid #00ff00;padding-bottom:1.5rem}.header h1{font-size:2.5rem;margin-bottom:.5rem;font-weight:700;letter-spacing:-1px}.header p{font-size:1rem;color:#888;font-weight:400}.main-content{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin-bottom:2rem}@media (max-width: 968px){.main-content{grid-template-columns:1fr}}.card{background:#1a1a1a;border:1px solid #333;border-radius:4px;padding:1.5rem;box-shadow:none}.card h2{margin-bottom:1.5rem;color:#0f0;font-size:1.2rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid #333;padding-bottom:.5rem}.form-group{margin-bottom:1.5rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:500;color:#aaa;font-size:.9rem}.form-group input[type=text],.form-group input[type=file],.form-group select{width:100%;padding:.75rem;border:1px solid #333;border-radius:2px;font-size:.95rem;background:#0a0a0a;color:#e0e0e0;transition:border-color .2s}.form-group input[type=text]:focus,.form-group select:focus{outline:none;border-color:#0f0;background:#000}.form-group input[type=file]{padding:.5rem}.checkbox-group{display:flex;align-items:center;gap:.5rem}.checkbox-group input[type=checkbox]{width:20px;height:20px;cursor:pointer}.btn{padding:.75rem 1.5rem;border:1px solid #00ff00;border-radius:2px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:.5rem;text-transform:uppercase;letter-spacing:.5px}.btn-primary{background:#0f0;color:#000;border-color:#0f0}.btn-primary:hover:not(:disabled){background:#0c0;border-color:#0c0}.btn-danger{background:transparent;color:#f33;border-color:#f33}.btn-danger:hover:not(:disabled){background:#f33;color:#000}.btn-secondary{background:transparent;color:#888;border-color:#444}.btn-secondary:hover:not(:disabled){background:#222;color:#aaa;border-color:#666}.btn:disabled{opacity:.5;cursor:not-allowed}.file-list{max-height:300px;overflow-y:auto}.file-item{display:flex;justify-content:space-between;align-items:center;padding:.75rem;background:#0a0a0a;border:1px solid #222;border-radius:2px;margin-bottom:.5rem;transition:all .2s}.file-item:hover{background:#111;border-color:#444}.file-item.selected{background:#001a00;border:1px solid #00ff00}.file-info{flex:1;cursor:pointer}.file-info h4{margin-bottom:.25rem;color:#e0e0e0;font-weight:500}.file-info p{font-size:.875rem;color:#666}.file-actions{display:flex;gap:.5rem}.btn-small{padding:.5rem 1rem;font-size:.875rem}.stream-item{display:flex;justify-content:space-between;align-items:flex-start;padding:1rem;background:#0a0a0a;border:1px solid #333;border-radius:2px;margin-bottom:1rem;border-left:3px solid #00ff00}.stream-info{flex:1}.stream-info h4{margin-bottom:.5rem;color:#e0e0e0;font-weight:500}.stream-info p{font-size:.875rem;color:#888;margin-bottom:.25rem}.stream-status{display:inline-block;padding:.25rem .75rem;background:transparent;color:#0f0;border:1px solid #00ff00;border-radius:2px;font-size:.75rem;font-weight:500;margin-top:.5rem;text-transform:uppercase}.progress-bar{width:100%;height:4px;background:#222;border-radius:0;overflow:hidden;margin-top:.5rem;border:1px solid #333}.progress-fill{height:100%;background:#0f0;transition:width .3s}.empty-state{text-align:center;padding:2rem;color:#555}.empty-state svg{width:64px;height:64px;margin-bottom:1rem;opacity:.3;color:#333}.notification{position:fixed;top:2rem;right:2rem;background:#0a0a0a;border:1px solid #333;padding:1rem 1.5rem;border-radius:2px;box-shadow:0 4px 12px #00000080;z-index:1000;animation:slideIn .3s ease-out;color:#e0e0e0}@keyframes slideIn{0%{transform:translate(400px);opacity:0}to{transform:translate(0);opacity:1}}.notification.success{border-left:3px solid #00ff00}.notification.error{border-left:3px solid #ff3333}.upload-zone{border:2px dashed #333;border-radius:2px;padding:2rem;text-align:center;transition:all .2s;cursor:pointer;margin-bottom:1rem;background:#0a0a0a}.upload-zone:hover{border-color:#0f0;background:#001a00}.upload-zone.dragover{border-color:#0f0;background:#001a00;border-style:solid}.upload-zone svg{width:48px;height:48px;margin-bottom:1rem;color:#0f0}.upload-zone p{color:#aaa}.streaming-indicator{display:inline-block;width:8px;height:8px;background:#0f0;border-radius:0;margin-right:.5rem;animation:pulse 2s infinite;box-shadow:0 0 8px #0f0}@keyframes pulse{0%,to{opacity:1;box-shadow:0 0 8px #0f0}50%{opacity:.5;box-shadow:0 0 4px #0f0}}.draggable-item{cursor:move;transition:all .2s}.draggable-item:hover{background:#111!important;border-color:#0f0!important}.draggable-item.dragging{opacity:.5}.drag-handle{display:inline-block;cursor:move;padding:.25rem .5rem;color:#444;font-size:1.2rem;-webkit-user-select:none;user-select:none}.drag-handle:hover{color:#0f0}.mode-toggle{display:inline-flex;background:#1a1a1a;border:1px solid #333;border-radius:2px;padding:.25rem;gap:.5rem}.tab-button{padding:.75rem 1.5rem;border:1px solid transparent;background:transparent;border-radius:2px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s;color:#888;text-transform:uppercase;letter-spacing:.5px}.tab-button.active{background:#0f0;color:#000;border-color:#0f0}.scrollable{scrollbar-width:thin;scrollbar-color:#667eea #f1f1f1}.scrollable::-webkit-scrollbar{width:8px}.scrollable::-webkit-scrollbar-track{background:#0a0a0a;border-radius:0}.scrollable::-webkit-scrollbar-thumb{background:#0f0;border-radius:0}.scrollable::-webkit-scrollbar-thumb:hover{background:#0c0}.playlist-file-badge{display:inline-block;background:transparent;color:#0f0;border:1px solid #00ff00;padding:.25rem .5rem;border-radius:2px;font-size:.75rem;font-weight:500;text-transform:uppercase}.settings-panel{background:#0a0a0a;border:1px solid #333;border-radius:2px;padding:1rem;margin-top:1rem;border-left:3px solid #00ff00}.settings-panel h4{margin-bottom:.75rem;color:#0f0;font-size:.875rem;text-transform:uppercase;letter-spacing:.5px}.topbar{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid #00ff00;padding-bottom:1rem;margin-bottom:1.5rem}.topbar h1{color:#0f0;font-size:1.75rem;letter-spacing:-1px}.topbar p{color:#888;font-size:.85rem}.dashboard{display:grid;grid-template-columns:380px 1fr;gap:1.5rem;align-items:start}@media (max-width: 968px){.dashboard{grid-template-columns:1fr}}.sidebar,.content{display:flex;flex-direction:column;gap:1.25rem}.sidebar{max-height:calc(100vh - 140px);overflow-y:auto;padding-right:4px}.card .card h2,.card-head h2{text-transform:uppercase}.card-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #333;padding-bottom:.5rem;margin-bottom:1rem}.row{display:flex;gap:.5rem;align-items:center;margin-bottom:.75rem}.row input[type=text]{flex:1;padding:.6rem;background:#0a0a0a;color:#e0e0e0;border:1px solid #333;border-radius:2px}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.grid-2 .form-group{margin-bottom:.75rem}.muted{color:#888;font-size:.85rem}.checkbox-group{margin-bottom:.5rem;color:#aaa;font-size:.85rem}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem}.login-card{width:100%;max-width:380px}.login-title{color:#0f0;font-size:1.75rem;text-align:center;margin-bottom:.25rem}.login-sub{color:#888;text-align:center;margin-bottom:1.5rem;font-size:.9rem}.login-error{color:#f55;font-size:.85rem;margin-bottom:.75rem}.login-card input[type=password]{width:100%;padding:.75rem;background:#0a0a0a;color:#e0e0e0;border:1px solid #333;border-radius:2px}.live-panel{background:#001a00;border:2px solid #00ff00;border-radius:4px;padding:1.5rem}.live-panel.is-standby{background:#0a1018;border-color:#557}.live-panel.is-reconnecting{background:#1a1000;border-color:#fa0}.live-header{display:flex;justify-content:space-between;align-items:flex-start}.live-title{color:#0f0;font-size:1.2rem;display:flex;align-items:center;gap:.5rem}.is-standby .live-title{color:#99a}.is-reconnecting .live-title{color:#fb3}.live-file{color:#cfc;font-size:.9rem;margin-top:.4rem;word-break:break-word}.is-standby .live-file{color:#aab}.live-target{color:#666;font-size:.8rem;margin-top:.2rem}.live-stats{text-align:right;white-space:nowrap}.live-time{font-family:monospace;font-size:1.6rem;color:#0f0;font-weight:700}.is-standby .live-time{color:#99a}.live-sub{color:#888;font-size:.75rem}.live-bar{height:4px;background:#022;border-radius:2px;overflow:hidden;margin-top:1rem}.live-bar-pulse{height:100%;width:30%;background:#0f0;animation:live-slide 2s linear infinite}.is-standby .live-bar-pulse{background:#668}.playlist-files{max-height:50vh;overflow-y:auto;display:flex;flex-direction:column;gap:.35rem}.playlist-row{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:#0a0a0a;border:1px solid #222;border-radius:2px;cursor:move;transition:border-color .2s}.playlist-row:hover{border-color:#0f0}.playlist-row.playing{background:#001a00;border-color:#0f0}.row-index{color:#666;font-size:.8rem;min-width:24px}.row-name{flex:1;font-size:.85rem;color:#e0e0e0;word-break:break-word}.icon-btn{background:none;border:none;color:#666;cursor:pointer;font-size:1rem;padding:0 .4rem}.icon-btn:hover{color:#0f0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000e6;display:flex;align-items:center;justify-content:center;z-index:2000}.modal{width:90%;max-width:700px;max-height:80vh;display:flex;flex-direction:column}.path-bar{background:#0a0a0a;border:1px solid #333;border-radius:2px;padding:.75rem;font-family:monospace;color:#0f0;font-size:.85rem;word-break:break-all;margin-bottom:1rem}.dir-list{flex:1;border:1px solid #333;border-radius:2px;background:#0a0a0a;overflow-y:auto}.dir-row{display:flex;align-items:center;gap:.5rem;padding:.6rem .9rem;border-bottom:1px solid #1c1c1c}.dir-name{flex:1;color:#e0e0e0}.notification{display:flex;align-items:center;gap:1rem}.notification-close{background:none;border:none;color:#888;cursor:pointer;font-size:.9rem}.notification-close:hover{color:#fff}.player-shell{max-width:880px;margin:0 auto}.player-shell.wide{max-width:1180px}.player-grid{display:grid;grid-template-columns:1fr 340px;gap:1.5rem;align-items:start}@media (max-width: 900px){.player-grid{grid-template-columns:1fr}}.library-panel{background:#0f0f0f;border:1px solid #242424;border-radius:8px;padding:1rem;position:sticky;top:80px;display:flex;flex-direction:column;max-height:calc(100vh - 110px)}.lib-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.6rem}.lib-search{width:100%;max-width:none;margin-bottom:.4rem}.lib-list{margin-top:.5rem;overflow-y:auto}.lib-row{display:flex;align-items:center;gap:.5rem;padding:.45rem .5rem;border-radius:5px;cursor:grab;border:1px solid transparent}.lib-row:hover{background:#181818;border-color:#2a2a2a}.lib-row:active{cursor:grabbing}.lib-handle{color:#555;font-size:.9rem;-webkit-user-select:none;user-select:none}.lib-name{flex:1;min-width:0;color:#cfcfcf;font-size:.85rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.queue{min-height:120px}.appbar{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;padding:.9rem 0;margin-bottom:1.25rem;border-bottom:2px solid #00ff00;background:#0a0a0a}.brand{color:#0f0;font-size:1.25rem;font-weight:700;letter-spacing:-.5px}.appbar-actions{display:flex;gap:.5rem;align-items:center}.pl-select{background:#0a0a0a;color:#e0e0e0;border:1px solid #333;border-radius:2px;padding:.45rem .6rem;font-size:.85rem;max-width:240px}.pl-select:focus{outline:none;border-color:#0f0}.nowplaying{display:flex;gap:1rem;align-items:center;background:#001a00;border:1px solid #00ff00;border-radius:8px;padding:1rem 1.25rem;margin-bottom:1.5rem}.nowplaying.is-standby{background:#0a1018;border-color:#557}.nowplaying.is-reconnecting{background:#1a1000;border-color:#fa0}.np-art{width:64px;height:64px;flex:none;display:flex;align-items:center;justify-content:center;font-size:2rem;background:#0a0a0a;border:1px solid #114011;border-radius:6px}.np-main{flex:1;min-width:0}.np-badge{display:flex;align-items:center;gap:.4rem;color:#0f0;font-size:.7rem;font-weight:700;letter-spacing:1px;text-transform:uppercase}.is-standby .np-badge{color:#99a}.is-reconnecting .np-badge{color:#fb3}.np-title{font-size:1.15rem;font-weight:600;color:#fff;margin:.15rem 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.np-meta{color:#8a8;font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.is-standby .np-meta{color:#889}.np-bar{height:3px;background:#042204;border-radius:2px;overflow:hidden;margin-top:.6rem}.np-bar-pulse{height:100%;width:30%;background:#0f0;animation:live-slide 2.2s linear infinite}.is-standby .np-bar-pulse{background:#668}@keyframes live-slide{0%{margin-left:-30%}to{margin-left:100%}}.np-side{text-align:right;flex:none}.np-time{font-family:monospace;font-size:1.3rem;color:#0f0;font-weight:700;margin-bottom:.5rem}.is-standby .np-time{color:#99a}.queue-head{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:.5rem}.queue-title{color:#fff;font-size:1.4rem;font-weight:700}.search{background:#141414;color:#e0e0e0;border:1px solid #333;border-radius:20px;padding:.55rem 1rem;font-size:.9rem;width:260px;max-width:45vw}.search:focus{outline:none;border-color:#0f0;background:#000}.hint{color:#777;font-size:.8rem;margin-bottom:.5rem}.queue-list{display:flex;flex-direction:column}.next-divider{color:#0f0;font-size:.7rem;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;padding:.75rem 0 .35rem;border-top:1px solid #1c2a1c;margin-top:.25rem}.track{display:flex;align-items:center;gap:.75rem;padding:.6rem .75rem;border-radius:6px;border:1px solid transparent;transition:background .15s,border-color .15s}.track:hover{background:#161616}.track:hover .track-handle,.track:hover .track-actions{opacity:1}.track.playing{background:#04220a}.track.playing .track-name{color:#0f0;font-weight:600}.track.dragging{opacity:.4}.track.drop-target{border-top-color:#0f0;box-shadow:0 -2px 0 -1px #0f0}.track-handle{color:#555;cursor:grab;opacity:0;-webkit-user-select:none;user-select:none;font-size:1rem}.track-handle:active{cursor:grabbing}.track-num{width:22px;text-align:center;color:#777;font-size:.85rem;flex:none}.track.playing .track-num{color:#0f0}.track-name{flex:1;min-width:0;color:#ddd;font-size:.92rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.up-next-tag{color:#4a4;font-size:.62rem;text-transform:uppercase;letter-spacing:1px;border:1px solid #2a4a2a;padding:.1rem .4rem;border-radius:10px;flex:none}.track-actions{display:flex;gap:.25rem;opacity:0;flex:none}.icon-btn{background:none;border:none;color:#888;cursor:pointer;font-size:1rem;padding:.15rem .45rem;border-radius:4px}.icon-btn:hover{color:#0f0;background:#0a0a0a}.icon-btn.danger:hover{color:#f55}.empty-create{text-align:center;padding:4rem 1rem;color:#888}.empty-create .empty-art{font-size:3rem;margin-bottom:.5rem}.empty-create h2{color:#fff;margin-bottom:.4rem}.empty-create p{margin-bottom:1.25rem}.drawer-scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:1500}.drawer{position:fixed;top:0;right:0;bottom:0;width:380px;max-width:92vw;z-index:1600;background:#121212;border-left:1px solid #2a2a2a;padding:1.25rem;overflow-y:auto;box-shadow:-8px 0 24px #00000080}.drawer-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.drawer-head h2{color:#0f0}.drawer-section{padding:1rem 0;border-top:1px solid #222}.drawer-section:first-of-type{border-top:none}.drawer-section h3{color:#0f0;font-size:.78rem;text-transform:uppercase;letter-spacing:1px;margin-bottom:.75rem}.drawer-section select,.drawer-section input[type=text],.drawer-section input[type=password]{width:100%;background:#0a0a0a;color:#e0e0e0;border:1px solid #333;border-radius:2px;padding:.55rem}.drawer .row{display:flex;gap:.5rem;margin-bottom:.75rem}.drawer .row input[type=text]{flex:1}.field{display:block;color:#aaa;font-size:.8rem;margin-bottom:.75rem}.field select,.field input{margin-top:.3rem}.btn-full{width:100%}
