*,:before,:after{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;padding:0;overflow:hidden}body{color:#e0e0e0;-webkit-font-smoothing:antialiased;background:#0d0d0d;font-family:Segoe UI,system-ui,sans-serif}#root{flex-direction:column;display:flex}*{scrollbar-width:thin;scrollbar-color:#333 transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#333;border-radius:3px}.app{color:#e0e0e0;background:#0d0d0d;flex-direction:column;height:100vh;font-family:Segoe UI,system-ui,sans-serif;display:flex}.app-header{background:#141414;border-bottom:1px solid #2a2a2a;flex-shrink:0;align-items:center;gap:24px;padding:12px 20px;display:flex}.app-title{color:#1db954;white-space:nowrap;margin:0;font-size:18px;font-weight:700}.app-main{flex:1;display:flex;overflow:hidden}.sidebar{border-right:1px solid #2a2a2a;flex-shrink:0;width:320px;min-width:280px;padding:12px;overflow-y:auto}.log-section{flex-direction:column;flex:1;display:flex;overflow:hidden}.app-selector{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.app-selector-tabs{gap:6px;display:flex}.app-tab{color:#aaa;cursor:pointer;background:#1a1a1a;border:1px solid #333;border-radius:20px;align-items:center;gap:6px;padding:5px 14px;font-size:13px;transition:all .15s;display:flex}.app-tab:hover{color:#ddd;background:#222}.app-tab.active{color:#000;background:#1db954;border-color:#1db954;font-weight:600}.app-tab.unauthed .auth-dot{color:#555}.app-tab.authed .auth-dot{color:#1db954}.app-tab.active .auth-dot{color:#000}.auth-dot{font-size:10px}.user-info{color:#888;font-size:13px}.auth-link{color:#1db954;font-size:13px;text-decoration:none}.auth-link:hover{text-decoration:underline}.function-panel{flex-direction:column;gap:6px;display:flex}.fn-card{background:#141414;border:1px solid #2a2a2a;border-radius:8px;overflow:hidden}.fn-card.expanded{border-color:#333}.fn-header{cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:10px 14px;transition:background .1s;display:flex}.fn-header:hover{background:#1c1c1c}.fn-label{font-size:14px;font-weight:500}.fn-toggle{color:#555;font-size:11px}.fn-body{border-top:1px solid #2a2a2a;padding:10px 14px 14px}.fn-params{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}.fn-param{flex-direction:column;gap:4px;font-size:13px;display:flex}.param-name{color:#888;font-size:12px}.fn-param input{color:#e0e0e0;box-sizing:border-box;background:#0d0d0d;border:1px solid #333;border-radius:5px;width:100%;padding:5px 8px;font-size:13px}.fn-param input:focus{border-color:#1db954;outline:none}.boolean-toggle{color:#aaa;cursor:pointer;background:#111;border:1px solid #333;border-radius:999px;align-items:center;gap:8px;width:fit-content;min-width:76px;min-height:32px;padding:5px 10px 5px 6px;font-size:13px;transition:border-color .15s,color .15s,background .15s;display:inline-flex}.boolean-toggle:hover{border-color:#555}.boolean-toggle.enabled{color:#e8fff0;background:#1db9541f;border-color:#1db954}.boolean-toggle-knob{background:#555;border-radius:50%;width:18px;height:18px;transition:background .15s}.boolean-toggle.enabled .boolean-toggle-knob{background:#1db954}.fn-run-btn{color:#000;cursor:pointer;background:#1db954;border:none;border-radius:6px;width:100%;padding:8px;font-size:13px;font-weight:600;transition:background .15s}.fn-run-btn:hover:not(:disabled){background:#1ed760}.fn-run-btn:disabled{color:#666;cursor:not-allowed;background:#333}.log-panel{flex-direction:column;height:100%;display:flex}.log-header{color:#888;border-bottom:1px solid #2a2a2a;flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 16px;font-size:13px;font-weight:600;display:flex}.log-spinner{color:#1db954;font-size:12px;animation:1s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.progress-shell{background:#101010;border-bottom:1px solid #2a2a2a;flex-shrink:0;padding:10px 16px 12px}.progress-meta{color:#888;justify-content:space-between;gap:12px;margin-bottom:6px;font-size:12px;display:flex}.progress-track{background:#202020;border:1px solid #333;border-radius:999px;height:8px;position:relative;overflow:hidden}.progress-fill{border-radius:inherit;background:#1db954;width:0;height:100%;transition:width .25s}.progress-shell.complete .progress-fill{background:#1ed760}.progress-shell.error .progress-fill{background:#e74c3c}.progress-track.indeterminate .progress-fill{width:38%;min-width:80px;animation:1.2s ease-in-out infinite progress-slide;position:absolute}@keyframes progress-slide{0%{transform:translate(-120%)}to{transform:translate(280%)}}.log-body{flex:1;padding:8px 0;font-family:Consolas,Menlo,monospace;font-size:13px;overflow-y:auto}.log-empty{color:#444;padding:24px 16px;font-style:italic;display:block}.log-line{gap:10px;padding:2px 16px;line-height:1.5;display:flex}.log-line:hover{background:#141414}.log-time{color:#555;flex-shrink:0}.log-level{flex-shrink:0;width:56px;font-weight:600}.log-msg{word-break:break-word}.log-debug .log-level{color:#555}.log-debug .log-msg{color:#777}.log-info .log-level{color:#4a9eff}.log-info .log-msg{color:#ccc}.log-warning .log-level{color:#f0ad4e}.log-warning .log-msg{color:#e8c97a}.log-error .log-level{color:#e74c3c}.log-error .log-msg{color:#e88080}.auth-prompt{text-align:center;color:#888;padding:24px 16px;font-size:14px}.auth-btn{color:#000;background:#1db954;border-radius:24px;margin-top:12px;padding:10px 24px;font-size:14px;font-weight:600;text-decoration:none;display:inline-block}.auth-btn:hover{background:#1ed760}.toast{cursor:pointer;z-index:1000;border-radius:8px;align-items:center;gap:10px;padding:12px 18px;font-size:14px;font-weight:500;animation:.2s toast-in;display:flex;position:fixed;bottom:24px;right:24px;box-shadow:0 4px 20px #00000080}.toast-success{color:#000;background:#1db954}.toast-error{color:#fff;background:#e74c3c}.toast-icon{font-size:16px;font-weight:700}@keyframes toast-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.loading-screen,.error-screen{color:#888;background:#0d0d0d;justify-content:center;align-items:center;height:100vh;font-size:16px;display:flex}.error-screen{color:#e74c3c}
