.app{min-height:100vh;display:flex;background:radial-gradient(ellipse at 0% 0%,var(--gradient-a) 0%,transparent 50%),radial-gradient(ellipse at 100% 100%,var(--gradient-b) 0%,transparent 50%),var(--bg-primary)}.sidebar{width:220px;height:100vh;position:sticky;top:0;background:var(--bg-secondary);border-right:1px solid var(--border-color);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.sidebar-logo{padding:20px;font-size:20px;font-weight:700;letter-spacing:-1px;border-bottom:1px solid var(--border-color)}.sidebar-nav{flex:1;padding:12px;display:flex;flex-direction:column;gap:4px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px 14px;background:transparent;border:none;border-radius:8px;color:var(--text-secondary);font-family:inherit;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s;text-align:left;width:100%}.nav-item:hover,.nav-item.active{background:var(--bg-tertiary);color:var(--text-primary)}.nav-icon{font-size:14px;width:20px;text-align:center}.nav-label{flex:1}.nav-badge{padding:2px 8px;background:var(--bg-card);border-radius:10px;font-size:11px;font-weight:600;color:var(--text-muted)}.nav-item.active .nav-badge{background:var(--text-primary);color:var(--bg-primary)}.nav-status{width:8px;height:8px;border-radius:50%;background:var(--text-muted)}.nav-status.active{background:var(--success);box-shadow:0 0 6px var(--success)}.app-version{flex-shrink:0;padding:8px 16px 4px;font-family:JetBrains Mono,monospace;font-size:10px;font-weight:500;color:var(--text-muted);letter-spacing:.02em;text-align:center}.app-version-login{position:absolute;left:20px;bottom:20px;padding:0;border:none;text-align:left;color:#999}.sidebar-footer{padding:12px;border-top:1px solid var(--border-color)}.theme-toggle{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:8px;color:var(--text-secondary);font-family:inherit;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.theme-toggle:hover{background:var(--bg-card);border-color:var(--border-hover);color:var(--text-primary)}.theme-toggle-icon{font-size:14px}.theme-toggle-label{flex:1;text-align:left}.logout-btn{display:flex;align-items:center;gap:10px;width:100%;margin-top:6px;padding:10px 14px;background:transparent;border:1px solid var(--border-color);border-radius:8px;color:var(--text-muted);font-family:inherit;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.logout-btn:hover{background:var(--error-bg);border-color:var(--error-border);color:var(--error)}.logout-icon{font-size:14px}.logout-label{flex:1;text-align:left}.sidebar-stats{padding:16px;border-top:1px solid var(--border-color);display:flex;flex-direction:column;gap:8px}.sidebar-stat{display:flex;justify-content:space-between;align-items:center}.sidebar-stat-label{font-size:11px;font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.sidebar-stat-value{font-family:JetBrains Mono,monospace;font-size:12px;font-weight:600;color:var(--text-secondary)}.layout{flex:1;display:flex;flex-direction:column;min-width:0}.main-panel{flex:1;display:flex;flex-direction:column;overflow:hidden}.refresh-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border-color);border-radius:6px;color:var(--text-secondary);font-size:16px;cursor:pointer;transition:all .2s}.refresh-btn:hover{background:var(--bg-tertiary);border-color:var(--border-hover);color:var(--text-primary)}.refresh-btn:disabled{opacity:.55;cursor:not-allowed}.refresh-btn-loading{animation:spin .8s linear infinite}.save-btn{padding:8px 20px;background:var(--text-primary);border:none;border-radius:6px;color:var(--bg-primary);font-family:inherit;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.save-btn:hover:not(:disabled){opacity:.9}.save-btn:disabled{opacity:.4;cursor:not-allowed}.save-btn.success{background:var(--success)}.save-btn.error{background:var(--error)}.editor-error{display:flex;align-items:flex-start;gap:10px;padding:12px 18px;background:var(--error-bg);border-bottom:1px solid var(--error-border);font-size:14px;line-height:1.45;color:var(--error)}.editor-error .error-icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:var(--error);color:#fff;border-radius:50%;font-size:11px;font-weight:700;flex-shrink:0;margin-top:1px}.line-number{padding:0 12px;font-family:JetBrains Mono,monospace;font-size:13px;line-height:1.6;color:var(--text-muted);text-align:right;min-width:40px}.editor-highlight code{font-family:inherit;color:var(--editor-text)}.editor-textarea::selection{background:var(--selection-bg)}.hl-key{color:var(--hl-key, #7dd3fc)}.hl-key-first{color:var(--hl-key-first, #f87171)}.hl-key-apps{color:var(--hl-key-apps, #c4b5fd)}.hl-colon{color:var(--text-muted)}.hl-string{color:var(--hl-string, #86efac)}.hl-number{color:var(--hl-number, #fcd34d)}.hl-bool{color:var(--hl-bool, #f9a8d4)}.hl-null{color:var(--hl-null, #f87171)}.hl-dash{color:var(--text-muted)}.hl-comment{color:var(--text-muted);font-style:italic}.loading-screen,.error-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;width:100%;gap:24px}.login-screen{display:flex;min-height:100vh;width:100%}.login-left{width:38.2%;min-height:100vh;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-shrink:0;position:relative}.login-left-brand{position:absolute;top:24px;left:28px;font-size:18px;font-weight:700;letter-spacing:-1px}.login-brand-tiny{color:#999}.login-brand-ops{color:#111}.login-left-content{display:flex;flex-direction:column;align-items:center;gap:24px;width:280px;margin-top:-60px;animation:loginCardAppear .8s ease-out}.login-right{flex:1;position:relative;overflow:hidden;background:var(--bg-primary)}.login-bg{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.login-grid{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(var(--border-color) 1px,transparent 1px),linear-gradient(90deg,var(--border-color) 1px,transparent 1px);background-size:60px 60px;opacity:.3;animation:loginGridDrift 20s linear infinite}@keyframes loginGridDrift{0%{transform:translate(0)}to{transform:translate(60px,60px)}}.login-node{position:absolute;display:flex;align-items:center;justify-content:center;width:40px;height:40px;animation:loginNodeFloat 6s ease-in-out infinite}.node-icon{font-size:28px;color:var(--text-muted);opacity:.4;filter:drop-shadow(0 0 6px var(--text-muted));animation:loginNodePulse 3s ease-in-out infinite}.node-0{top:18%;left:12%;animation-delay:0s}.node-1{top:30%;left:38%;animation-delay:-1s}.node-2{top:22%;left:68%;animation-delay:-2s}.node-3{top:42%;left:83%;animation-delay:-.5s}.node-4{top:62%;left:58%;animation-delay:-3s}.node-5{top:52%;left:28%;animation-delay:-1.5s}.node-6{top:73%;left:13%;animation-delay:-4s}.node-7{top:82%;left:43%;animation-delay:-2.5s}.node-8{top:78%;left:73%;animation-delay:-3.5s}.node-9{top:10%;left:50%;animation-delay:-.8s}.node-10{top:55%;left:90%;animation-delay:-2.2s}.node-11{top:90%;left:25%;animation-delay:-4.5s}.node-0 .node-icon,.node-3 .node-icon,.node-7 .node-icon{color:var(--success);filter:drop-shadow(0 0 8px var(--success));opacity:.5}.node-2 .node-icon,.node-5 .node-icon,.node-10 .node-icon{color:var(--info);filter:drop-shadow(0 0 8px var(--info));opacity:.4}.node-8 .node-icon{color:var(--warning);filter:drop-shadow(0 0 8px var(--warning));opacity:.35}@keyframes loginNodeFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-12px)}}@keyframes loginNodePulse{0%,to{opacity:.3}50%{opacity:.6}}.login-lines{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.login-lines line{stroke:var(--border-hover);stroke-width:1;opacity:.25;stroke-dasharray:8 6;animation:loginLineDash 4s linear infinite}@keyframes loginLineDash{0%{stroke-dashoffset:0}to{stroke-dashoffset:-28}}.login-packet{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--text-primary);opacity:.6;box-shadow:0 0 8px var(--text-primary)}.packet-0{animation:packetPath0 5s linear infinite}.packet-1{animation:packetPath1 6s linear infinite;animation-delay:-1s}.packet-2{animation:packetPath2 7s linear infinite;animation-delay:-2s}.packet-3{animation:packetPath3 5.5s linear infinite;animation-delay:-3s}.packet-4{animation:packetPath4 6.5s linear infinite;animation-delay:-.5s}@keyframes packetPath0{0%{top:20%;left:15%;opacity:0}5%{opacity:.8}33%{top:35%;left:40%}66%{top:25%;left:70%}95%{opacity:.8}to{top:45%;left:85%;opacity:0}}@keyframes packetPath1{0%{top:45%;left:85%;opacity:0}5%{opacity:.8}50%{top:65%;left:60%}95%{opacity:.8}to{top:55%;left:30%;opacity:0}}@keyframes packetPath2{0%{top:55%;left:30%;opacity:0}5%{opacity:.8}50%{top:75%;left:15%}95%{opacity:.8}to{top:85%;left:45%;opacity:0}}@keyframes packetPath3{0%{top:35%;left:40%;opacity:0}5%{opacity:.8}95%{opacity:.8}to{top:55%;left:30%;opacity:0}}@keyframes packetPath4{0%{top:85%;left:45%;opacity:0}5%{opacity:.8}95%{opacity:.8}to{top:80%;left:75%;opacity:0}}@keyframes loginCardAppear{0%{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.login-logo-img{width:200px;height:200px;border-radius:32px;object-fit:cover}.login-subtitle{font-size:11px;font-weight:600;color:#999;text-transform:uppercase;letter-spacing:3px;margin-top:-8px}.login-form{display:flex;flex-direction:column;align-items:center;gap:12px;width:100%;margin-top:8px}.login-input{width:100%;padding:14px 16px;background:#fff;border:1px solid #d4d4d4;border-radius:10px;color:#111;font-family:JetBrains Mono,monospace;font-size:13px;text-align:center;outline:none;transition:all .3s}.login-input:focus{border-color:#999;box-shadow:0 0 0 3px #0000000a}.login-input::placeholder{color:#bbb}.login-btn{width:100%;padding:14px;background:#111;color:#fff;border:none;border-radius:10px;font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s}.login-btn:hover:not(:disabled){background:#222;transform:translateY(-1px);box-shadow:0 4px 16px #0003}.login-btn:disabled{opacity:.4;cursor:not-allowed}.login-btn-loading{display:flex;align-items:center;justify-content:center;gap:8px}.login-spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}.login-error{font-size:12px;color:var(--error);animation:loginShake .4s ease-out}@keyframes loginShake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}.loading-logo{font-size:48px;font-weight:700;letter-spacing:-2px}.logo-tiny{color:var(--text-secondary)}.logo-ops{color:var(--text-primary)}.loading-bar{width:200px;height:2px;background:var(--bg-tertiary);border-radius:1px;overflow:hidden}.loading-progress{width:40%;height:100%;background:var(--text-primary);animation:shimmer 1.5s infinite;background:linear-gradient(90deg,var(--text-primary),var(--text-secondary),var(--text-primary));background-size:200% 100%}.error-icon{width:64px;height:64px;border:2px solid var(--error);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:32px;font-weight:700;color:var(--error)}.error-screen h2{font-size:24px;font-weight:600}.error-screen p{color:var(--text-secondary)}.retry-btn{padding:12px 32px;background:var(--text-primary);color:var(--bg-primary);border:none;border-radius:8px;font-family:inherit;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.retry-btn:hover{transform:translateY(-2px);box-shadow:0 4px 20px var(--box-shadow-accent)}.header{position:sticky;top:0;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:16px 32px;background:var(--header-bg);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-bottom:1px solid var(--border-color)}.logo{font-size:24px;font-weight:700;letter-spacing:-1px}.header-stats{display:flex;gap:8px}.stat-pill{display:flex;align-items:center;gap:8px;padding:8px 16px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:100px}.stat-label{font-size:11px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.stat-value{font-family:JetBrains Mono,monospace;font-size:13px;font-weight:600}.main{flex:1;padding:32px;overflow:auto}.main.no-scroll{overflow:hidden}.section{margin-bottom:48px;animation:fadeIn .5s ease-out}.section-header{display:flex;align-items:center;gap:12px;margin-bottom:24px}.section-header h2{font-size:20px;font-weight:600;letter-spacing:-.5px}.section-badge{padding:4px 12px;background:var(--bg-tertiary);border-radius:100px;font-size:12px;font-weight:600;color:var(--text-secondary)}.system-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}.system-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:16px;padding:24px;transition:all .3s ease}.system-card:hover{border-color:var(--border-hover);transform:translateY(-2px)}.system-card-header{display:flex;align-items:center;gap:10px;margin-bottom:16px;font-size:13px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.system-icon{font-size:16px;color:var(--text-primary)}.system-value{font-family:JetBrains Mono,monospace;font-size:32px;font-weight:700;margin-bottom:16px;letter-spacing:-1px}.progress-bar{height:4px;background:var(--bg-tertiary);border-radius:2px;overflow:hidden;margin-bottom:12px}.progress-fill{height:100%;background:linear-gradient(90deg,var(--text-secondary),var(--text-primary));border-radius:2px;transition:width .5s ease}.system-detail{font-size:13px;color:var(--text-muted)}.network-list{display:flex;flex-direction:column;gap:8px;margin-top:8px}.network-item{display:flex;align-items:center;gap:8px;font-size:13px;font-family:JetBrains Mono,monospace;color:var(--text-secondary)}.network-dot{width:6px;height:6px;background:var(--success);border-radius:50%;box-shadow:0 0 8px var(--success)}.apps-grid{display:flex;flex-direction:column;gap:20px}.app-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;transition:all .2s ease;animation:fadeIn .5s ease-out backwards}.app-card:hover,.app-card.expanded{border-color:var(--border-hover)}.app-card-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;cursor:pointer;transition:background .2s}.app-card-header:hover{background:var(--bg-secondary)}.app-header-left{display:flex;align-items:center;gap:12px}.app-status-wrap{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.app-status-label{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary)}.app-status-wrap-healthy .app-status-label{color:var(--success)}.app-status-wrap-creating .app-status-label{color:var(--warning)}.app-status-wrap-offline .app-status-label{color:var(--error)}.app-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.app-status-dot.healthy{background:var(--success);box-shadow:0 0 6px var(--success)}.app-status-dot.creating{background:var(--warning);box-shadow:0 0 6px var(--warning);animation:pulse 1.5s infinite}.app-status-dot.offline{background:var(--error);box-shadow:0 0 6px var(--error)}.app-expand-icon{color:var(--text-muted);font-size:12px;transition:transform .2s}.app-expand-icon.rotated{transform:rotate(90deg)}.app-card-header h3{font-size:15px;font-weight:600;letter-spacing:-.3px}.app-image-badge{font-family:JetBrains Mono,monospace;font-size:10px;font-weight:500;color:var(--info);padding:2px 8px;background:var(--info-bg);border-radius:4px}.gateway-badge{padding:2px 6px;background:var(--text-primary);color:var(--bg-primary);font-size:9px;font-weight:700;border-radius:3px;letter-spacing:.5px}.app-header-right{display:flex;align-items:center;gap:16px}.app-image{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted);padding:4px 10px;background:var(--bg-secondary);border-radius:4px}.app-created{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted)}.app-domain{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary)}.app-domain-link{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary);text-decoration:none;padding:4px 10px;background:var(--bg-secondary);border-radius:4px;transition:all .2s}.app-domain-link:hover{color:var(--info);background:var(--info-bg)}.app-replicas{display:flex;align-items:center}.app-replicas-value{font-family:JetBrains Mono,monospace;font-size:14px;font-weight:600;color:var(--text-secondary);padding:4px 10px;background:var(--bg-tertiary);border-radius:4px}.apps-search{padding:8px 14px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-primary);font-family:inherit;font-size:13px;outline:none;transition:all .2s;width:200px}.apps-search:focus{border-color:var(--border-hover);background:var(--bg-tertiary)}.apps-search::placeholder{color:var(--text-muted)}.app-card-body{padding:16px 20px;border-top:1px solid var(--border-color);background:var(--bg-secondary);animation:slideDown .2s ease-out}.app-meta-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.meta-tag{display:flex;align-items:center;gap:6px;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary);padding:4px 10px;background:var(--bg-tertiary);border-radius:4px}.meta-tag-label{color:var(--text-muted);font-size:9px;text-transform:uppercase}.meta-tag.ssl-enabled{background:var(--success-bg);color:var(--success)}.meta-tag.ssl-disabled{background:var(--error-bg);color:var(--text-muted)}.volumes-grid{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.volume-item{display:flex;align-items:center;gap:6px;padding:4px 10px;background:var(--bg-tertiary);border-radius:4px;font-family:JetBrains Mono,monospace;font-size:10px}.volume-icon{color:var(--text-muted);font-size:10px}.volume-path{color:var(--text-secondary)}.env-grid{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.env-item{display:flex;align-items:center;gap:6px;padding:4px 10px;background:var(--bg-tertiary);border-radius:4px;font-family:JetBrains Mono,monospace;font-size:10px}.env-key{color:var(--text-secondary)}.env-value{color:var(--text-muted)}.containers-list{display:flex;flex-direction:column;gap:6px}.container-item{display:flex;flex-direction:column;background:var(--bg-card);border:1px solid var(--border-color);border-radius:8px;transition:all .2s;overflow:hidden}.container-item:hover,.container-item.expanded{border-color:var(--border-hover)}.container-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;cursor:pointer;transition:background .2s}.container-header:hover{background:var(--bg-secondary)}.expand-icon{color:var(--text-muted);font-size:14px;transition:transform .2s}.expand-icon.rotated{transform:rotate(180deg)}.container-info{display:flex;align-items:center;gap:20px;flex:1}.container-status{display:flex;align-items:center;gap:10px}.container-metrics{display:flex;gap:16px}.container-metric{display:flex;align-items:center;gap:6px}.metric-label{font-size:9px;font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.metric-value{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary)}.metric-bar{width:50px;height:3px;background:var(--bg-tertiary);border-radius:2px;overflow:hidden}.metric-fill{height:100%;border-radius:2px;transition:width .3s ease}.metric-fill.cpu{background:linear-gradient(90deg,var(--text-muted),var(--text-secondary))}.metric-fill.memory{background:linear-gradient(90deg,var(--info),#60a5fa)}.container-logs{border-top:1px solid var(--border-color);max-height:250px;overflow:auto;animation:fadeIn .2s ease-out}.logs-loading-inline{display:flex;align-items:center;justify-content:center;gap:12px;padding:24px;color:var(--text-secondary);font-size:13px}.logs-inline{font-family:JetBrains Mono,monospace;font-size:11px;line-height:1.5}.logs-inline .log-line{padding:2px 12px;border-bottom:none}.logs-inline .log-line:hover{background:var(--bg-tertiary)}.logs-inline .log-number{width:36px;font-size:10px}.status-dot{width:8px;height:8px;border-radius:50%}.status-dot.running{background:var(--success);box-shadow:0 0 6px var(--success);animation:pulse 2s infinite}.status-dot.creating{background:var(--info);box-shadow:0 0 6px var(--info);animation:pulse 1s infinite}.status-dot.deleting{background:var(--error);box-shadow:0 0 6px var(--error);animation:pulse 1s infinite}.status-badge{padding:2px 6px;font-size:9px;font-weight:600;border-radius:3px;text-transform:uppercase;letter-spacing:.5px}.status-badge.creating{background:var(--info-bg);color:var(--info)}.status-badge.deleting{background:var(--error-bg);color:var(--error)}.container-item.pending-creation{border-color:var(--info-border);background:var(--info-subtle)}.container-item.pending-deletion{border-color:var(--error-border);background:var(--error-subtle);opacity:.7}.container-name{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary)}.container-ssl-badge{padding:2px 5px;background:var(--success-bg);color:var(--success);font-size:8px;font-weight:600;border-radius:3px;letter-spacing:.5px}.container-link-badge{padding:2px 5px;background:var(--bg-tertiary);color:var(--text-muted);font-size:10px;border-radius:3px}.container-ports{display:flex;gap:4px}.port-badge{padding:2px 6px;background:var(--bg-tertiary);color:var(--text-muted);font-family:JetBrains Mono,monospace;font-size:9px;border-radius:3px}.loading-spinner{width:32px;height:32px;border:2px solid var(--border-color);border-top-color:var(--text-primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.logs-container{font-family:JetBrains Mono,monospace;font-size:12px;line-height:1.6}.log-line{display:flex;padding:4px 24px;border-bottom:1px solid var(--border-color);transition:background .2s}.log-line:hover{background:var(--bg-secondary)}.log-line.log-error,.log-line.log-error:hover{background:var(--error-bg)}.log-line.log-warn{background:var(--warning-bg)}.log-number{width:48px;flex-shrink:0;color:var(--text-muted);text-align:right;padding-right:16px;-webkit-user-select:none;user-select:none}.log-text{color:var(--text-secondary);word-break:break-all}.log-error .log-text{color:var(--error)}.gateway-section{display:flex;flex-direction:column;height:calc(100vh - 88px);overflow:hidden;margin-bottom:0}.gateway-header-actions{display:flex;align-items:center;gap:12px}.gateway-view-new{display:flex;flex-direction:column;flex:1;gap:16px;min-height:0}.gateway-stats-bar{display:flex;flex-wrap:wrap;gap:16px;padding:16px 20px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px}.gateway-stat-item{display:flex;align-items:center;gap:8px}.gateway-stat-icon{font-size:16px;color:var(--success)}.gateway-stat-label{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.gateway-stat-value{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--text-secondary);padding:3px 8px;background:var(--bg-tertiary);border-radius:4px}.gateway-stat-value.ssl-on{background:var(--success-bg);color:var(--success)}.gateway-stat-value.ssl-off{color:var(--text-muted)}.gateway-stat-link{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--text-secondary);text-decoration:none;padding:3px 8px;background:var(--bg-tertiary);border-radius:4px;transition:all .2s}.gateway-stat-link:hover{color:var(--info);background:var(--bg-secondary)}.gateway-logs-section{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.gateway-logs-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-secondary)}.gateway-logs-title{font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.gateway-logs-count{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted)}.gateway-logs-container{flex:1;overflow:auto;font-family:JetBrains Mono,monospace;font-size:12px}.gateway-logs-container .log-line{display:flex;padding:4px 16px;border-bottom:1px solid var(--border-color);transition:background .2s}.gateway-logs-container .log-line:last-child{border-bottom:none}.gateway-logs-container .log-line:hover{background:var(--bg-secondary)}.gateway-logs-container .log-number{width:48px;flex-shrink:0;color:var(--text-muted);text-align:right;padding-right:16px;-webkit-user-select:none;user-select:none}.gateway-logs-container .log-text{color:var(--text-secondary);word-break:break-all}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 40px;text-align:center}.empty-icon{font-size:48px;color:var(--text-muted);margin-bottom:16px}.empty-state p{font-size:16px;color:var(--text-secondary);margin-bottom:8px}.empty-hint{font-size:13px;color:var(--text-muted)}.section-badge.active{background:var(--success-bg);color:var(--success)}.logs-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 40px;gap:16px;color:var(--text-secondary)}.settings-panels{display:flex;flex-direction:column;gap:16px}.settings-block{background:var(--bg-card);border:1px solid var(--border-color);border-radius:16px;padding:20px 24px}.settings-block-title{font-size:13px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px}.settings-ssh-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.settings-ssh-header .settings-block-title{margin-bottom:0}.settings-ssh-copy{width:36px;height:36px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border-color);border-radius:6px;color:var(--text-secondary);cursor:pointer;transition:color .2s,background .2s,border-color .2s}.settings-ssh-copy:hover:not(:disabled){background:var(--bg-tertiary);border-color:var(--border-hover);color:var(--text-primary)}.settings-ssh-copy:disabled{opacity:.45;cursor:not-allowed}.settings-ssh-copy-done{border-color:var(--success);color:var(--success)}.settings-ssh-copy-icon{font-size:15px;line-height:1}.settings-ssh-hint{margin:0 0 16px;font-size:14px;line-height:1.5;color:var(--text-secondary)}.settings-db-block{padding:0;overflow:hidden}.settings-db-toolbar{display:flex;align-items:stretch;gap:0;border-bottom:1px solid transparent}.settings-db-block-expanded .settings-db-toolbar{border-bottom-color:var(--border-color)}.settings-db-toggle{flex:1;display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:18px 20px;margin:0;text-align:left;font:inherit;color:inherit;background:transparent;border:none;cursor:pointer;transition:background .2s}.settings-db-toggle:hover{background:var(--bg-tertiary)}.settings-db-chevron{font-size:10px;color:var(--text-muted);width:14px}.settings-db-toggle-label{font-size:13px;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px}.settings-db-toggle-hint{flex-basis:100%;margin-left:22px;font-size:12px;color:var(--text-muted)}.settings-db-download{width:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-left:1px solid var(--border-color);color:var(--text-secondary);cursor:pointer;transition:color .2s,background .2s}.settings-db-download:hover{background:var(--bg-tertiary);color:var(--text-primary)}.settings-db-download-icon{font-size:18px;line-height:1}.settings-pre-db{margin:0;padding:16px 20px 20px;border-radius:0;max-height:min(520px,60vh)}.settings-pre{margin:0;font-family:JetBrains Mono,monospace;font-size:12px;line-height:1.55;color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:min(480px,55vh);overflow:auto}.settings-empty{display:flex;flex-direction:column;align-items:center;gap:16px;padding:48px 24px;color:var(--text-secondary)}.system-logs-grid{display:flex;flex-direction:column;gap:16px}.system-log-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.system-log-header{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-secondary)}.system-log-name{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--text-primary);flex:1}.system-log-app{font-size:11px;color:var(--text-muted);padding:2px 8px;background:var(--bg-tertiary);border-radius:4px}.system-log-content{max-height:300px;overflow:auto;font-family:JetBrains Mono,monospace;font-size:11px}.system-log-content .log-line{padding:3px 16px;border-bottom:none}.system-log-content .log-line:hover{background:var(--bg-secondary)}.system-logs-container{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;overflow:auto;max-height:calc(100vh - 180px);font-family:JetBrains Mono,monospace;font-size:12px}.system-logs-container .log-line{display:flex;padding:6px 16px;border-bottom:1px solid var(--border-color);transition:background .2s}.system-logs-container .log-line:last-child{border-bottom:none}.system-logs-container .log-line:hover{background:var(--bg-secondary)}.system-logs-container .log-number{width:48px;flex-shrink:0;color:var(--text-muted);text-align:right;padding-right:16px;-webkit-user-select:none;user-select:none}.system-logs-container .log-text{color:var(--text-secondary);word-break:break-all}.system-logs-container .log-line.log-warn .log-text{color:var(--warning)}.system-logs-container .log-line.log-error{background:var(--error-bg)}.system-logs-container .log-line.log-error .log-text{color:var(--error)}.logs-header-actions{display:flex;align-items:center;gap:12px}.scroll-indicator{font-size:11px;color:var(--warning);padding:4px 10px;background:var(--warning-bg);border-radius:4px}.updating-indicator{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-muted);padding:4px 10px;background:var(--bg-tertiary);border-radius:4px}.updating-spinner{width:12px;height:12px;border:2px solid var(--border-color);border-top-color:var(--text-secondary);border-radius:50%;animation:spin 1s linear infinite}.blueprint-section{display:flex;flex-direction:column;height:calc(100vh - 88px);overflow:hidden;margin-bottom:0}.blueprint-actions{display:flex;align-items:center;gap:8px}.blueprint-editor{flex:1;display:flex;background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.blueprint-editor .line-numbers{padding:16px 0;background:var(--bg-secondary);border-right:1px solid var(--border-color);overflow:hidden;-webkit-user-select:none;user-select:none}.blueprint-editor .line-number.line-number-changed{background:var(--warning-bg);color:var(--warning);font-weight:600;box-shadow:inset 3px 0 0 var(--warning)}.blueprint-dirty-hint{font-size:12px;font-weight:500;color:var(--warning);margin-right:8px;align-self:center}.blueprint-editor .editor-content{flex:1;position:relative;overflow:hidden}.blueprint-editor .editor-highlight{position:absolute;top:0;left:0;right:0;bottom:0;padding:16px 20px;margin:0;background:transparent;font-family:JetBrains Mono,monospace;font-size:13px;line-height:1.6;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;overflow-x:auto;overflow-y:scroll;scrollbar-gutter:stable;box-sizing:border-box;-moz-tab-size:2;tab-size:2;pointer-events:none}.blueprint-editor .editor-highlight code{display:block;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;font-family:inherit;font-size:inherit;line-height:inherit}.blueprint-editor .editor-textarea{position:absolute;top:0;left:0;width:100%;height:100%;padding:16px 20px;margin:0;background:transparent;border:none;color:transparent;caret-color:var(--text-primary);font-family:JetBrains Mono,monospace;font-size:13px;line-height:1.6;resize:none;outline:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;overflow-x:auto;overflow-y:scroll;scrollbar-gutter:stable;box-sizing:border-box;-moz-tab-size:2;tab-size:2}.blueprint-section .editor-error,.blueprint-section .blueprint-save-error{margin-bottom:12px;border-radius:8px}.blueprint-save-error-text{white-space:pre-wrap;word-break:break-word;font-size:14px;line-height:1.5}.domains-search{padding:8px 14px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-primary);font-family:inherit;font-size:13px;outline:none;transition:all .2s;width:200px}.domains-search:focus{border-color:var(--border-hover);background:var(--bg-tertiary)}.domains-search::placeholder{color:var(--text-muted)}.domains-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.domain-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;padding:20px;transition:all .2s}.domain-card:hover{border-color:var(--border-hover)}.domain-card.ssl-failed{border-color:var(--error-border);background:var(--error-subtle)}.domain-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border-color)}.domain-name{display:flex;align-items:center;gap:6px;font-family:JetBrains Mono,monospace;font-size:14px;font-weight:600;color:var(--text-primary);text-decoration:none;transition:color .2s}.domain-name:hover{color:var(--info)}.domain-link-icon{font-size:12px;opacity:.5;transition:opacity .2s}.domain-name:hover .domain-link-icon{opacity:1}.domain-app{font-size:11px;color:var(--text-muted);padding:3px 8px;background:var(--bg-tertiary);border-radius:4px}.domain-status{display:flex;flex-direction:column;gap:10px}.domain-status-item{display:flex;align-items:center;justify-content:space-between}.status-label{font-size:12px;color:var(--text-muted)}.status-value{font-size:12px;font-weight:500;padding:3px 8px;border-radius:4px}.status-value.enabled{background:var(--success-bg);color:var(--success)}.status-value.disabled{background:var(--bg-tertiary);color:var(--text-muted)}.status-value.ready{background:var(--success-bg);color:var(--success)}.status-value.not-ready{background:var(--error-bg);color:var(--error)}.status-value.pending{background:var(--warning-bg);color:var(--warning)}.retry-ssl-btn{padding:4px 12px;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:4px;color:var(--text-secondary);font-family:inherit;font-size:11px;font-weight:500;cursor:pointer;transition:all .2s}.retry-ssl-btn:hover:not(:disabled){background:var(--border-color);color:var(--text-primary)}.retry-ssl-btn:disabled{opacity:.6;cursor:not-allowed}.pipelines-search{padding:8px 14px;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;color:var(--text-primary);font-family:inherit;font-size:13px;outline:none;transition:all .2s;width:200px}.pipelines-search:focus{border-color:var(--border-hover);background:var(--bg-tertiary)}.pipelines-search::placeholder{color:var(--text-muted)}.pipelines-list{display:flex;flex-direction:column;gap:12px}.pipeline-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:12px;overflow:hidden;transition:all .2s ease;animation:fadeIn .5s ease-out backwards}.pipeline-card:hover,.pipeline-card.expanded{border-color:var(--border-hover)}.pipeline-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;cursor:pointer;transition:background .2s}.pipeline-header:hover{background:var(--bg-secondary)}.pipeline-header-left{display:flex;align-items:center;gap:10px}.pipeline-status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.pipeline-status-dot.success{background:var(--success);box-shadow:0 0 6px var(--success)}.pipeline-status-dot.pending{background:var(--warning);box-shadow:0 0 6px var(--warning);animation:pulse 1.5s infinite}.pipeline-status-dot.failed{background:var(--error);box-shadow:0 0 6px var(--error)}.pipeline-repo{font-size:15px;font-weight:600;color:var(--text-primary);letter-spacing:-.3px}.pipeline-branch{font-family:JetBrains Mono,monospace;font-size:10px;font-weight:500;color:var(--info);padding:2px 8px;background:var(--info-bg);border-radius:4px}.pipeline-status-badge{padding:2px 8px;font-size:10px;font-weight:600;border-radius:4px;text-transform:uppercase;letter-spacing:.5px}.pipeline-status-badge.success{background:var(--success-bg);color:var(--success)}.pipeline-status-badge.pending{background:var(--warning-bg);color:var(--warning)}.pipeline-status-badge.failed{background:var(--error-bg);color:var(--error)}.pipeline-header-right{display:flex;align-items:center;gap:10px}.pipeline-expand-icon{color:var(--text-muted);font-size:12px;transition:transform .2s}.pipeline-expand-icon.rotated{transform:rotate(90deg)}.pipeline-created{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-muted)}.pipeline-duration{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary);padding:3px 8px;background:var(--bg-tertiary);border-radius:4px}.pipeline-id{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--text-muted);padding:3px 8px;background:var(--bg-tertiary);border-radius:4px}.pipeline-body{padding:16px 20px;border-top:1px solid var(--border-color);background:var(--bg-secondary);animation:slideDown .2s ease-out}.pipeline-details{display:flex;flex-direction:column;gap:6px}.pipeline-log{margin-top:12px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:8px;overflow:hidden}.pipeline-log-header{padding:8px 12px;font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border-color);background:var(--bg-tertiary)}.pipeline-log-content{max-height:250px;overflow:auto;font-family:JetBrains Mono,monospace;font-size:11px}.pipeline-log-content .log-line{padding:3px 12px;border-bottom:none}.pipeline-log-content .log-line:hover{background:var(--bg-tertiary)}.pipeline-log-content .log-number{width:28px;font-size:10px}.pipeline-detail{display:flex;align-items:center;gap:10px}.pipeline-detail-label{font-size:10px;font-weight:500;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;min-width:70px}.pipeline-detail-value{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--text-secondary);word-break:break-all}@media (max-width: 1024px){#root{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;max-width:100%}#root .app{flex:1 1 0;min-height:0;max-width:100%;display:flex}.login-screen{flex-direction:column}.login-left{width:100%;min-height:auto;padding:60px 20px}.login-right{display:none}.app{flex-direction:column;min-height:100vh;min-height:100dvh}.sidebar{order:2;width:100%;max-width:100%;height:auto;max-height:none;min-height:0;position:fixed;top:auto;bottom:0;left:0;right:0;border-right:none;border-top:1px solid var(--border-color);z-index:100;background:var(--bg-secondary);box-shadow:0 -8px 32px #00000059;flex:none;align-self:stretch;overflow:visible;padding-bottom:env(safe-area-inset-bottom,0px)}.sidebar-logo{display:none}.sidebar-nav{flex:none;flex-grow:0;flex-shrink:0;flex-basis:auto;flex-direction:row;justify-content:space-around;align-items:center;padding:8px 0;gap:0;min-height:0;width:100%}.nav-item{flex:1;flex-direction:column;gap:4px;padding:8px 4px;border-radius:0}.nav-icon{font-size:18px}.nav-label{font-size:10px;text-align:center}.nav-badge{position:absolute;top:4px;right:50%;transform:translate(14px);padding:1px 5px;font-size:9px;min-width:16px}.nav-item{position:relative}.nav-status{position:absolute;top:6px;right:50%;transform:translate(10px)}.sidebar-footer,.sidebar-stats{display:none}.layout{flex:1 1 0;min-height:0;width:100%;max-width:100%;padding-bottom:calc(80px + env(safe-area-inset-bottom,0px));overflow:visible}.main-panel,.main{flex:1 1 0;min-height:0;overflow:auto;max-width:100%}.main.no-scroll{overflow:hidden}.blueprint-section{height:auto}.blueprint-editor{min-height:400px}.gateway-section{height:auto}.gateway-logs-container{max-height:400px}.system-logs-container{max-height:calc(100vh - 250px)}}@media (max-width: 768px){.main{padding:16px}.app-header-right{flex-wrap:wrap;gap:8px}.app-image,.app-domain{display:none}.gateway-stats-bar{flex-direction:column;gap:8px}.domains-search,.apps-search,.pipelines-search{width:140px}.section-header{flex-wrap:wrap;gap:10px}.section-header h2{font-size:18px}}*{margin:0;padding:0;box-sizing:border-box}:root,[data-theme=dark]{--bg-primary: #0a0a0a;--bg-secondary: #111111;--bg-tertiary: #1a1a1a;--bg-card: #0f0f0f;--border-color: #222222;--border-hover: #333333;--text-primary: #ffffff;--text-secondary: #888888;--text-muted: #555555;--accent: #ffffff;--accent-dim: #cccccc;--success: #22c55e;--warning: #f59e0b;--error: #ef4444;--info: #3b82f6;--success-bg: rgba(34, 197, 94, .15);--warning-bg: rgba(245, 158, 11, .15);--error-bg: rgba(239, 68, 68, .1);--info-bg: rgba(59, 130, 246, .2);--header-bg: rgba(10, 10, 10, .8);--editor-text: #d4d4d4;--selection-bg: rgba(255, 255, 255, .2);--error-border: rgba(239, 68, 68, .3);--error-subtle: rgba(239, 68, 68, .05);--info-border: rgba(59, 130, 246, .3);--info-subtle: rgba(59, 130, 246, .05);--gradient-a: rgba(255, 255, 255, .03);--gradient-b: rgba(255, 255, 255, .02);--box-shadow-accent: rgba(255, 255, 255, .2);--hl-key: #7dd3fc;--hl-string: #a8e6a3;--hl-number: #fcd34d;--hl-bool: #f9a8d4;--hl-null: #f87171;--hl-key-first: #f87171;--hl-key-apps: #a78bfa}[data-theme=light]{--bg-primary: #f5f5f5;--bg-secondary: #ebebeb;--bg-tertiary: #e0e0e0;--bg-card: #ffffff;--border-color: #d4d4d4;--border-hover: #b0b0b0;--text-primary: #111111;--text-secondary: #555555;--text-muted: #999999;--accent: #111111;--accent-dim: #333333;--success: #16a34a;--warning: #d97706;--error: #dc2626;--info: #2563eb;--success-bg: rgba(22, 163, 74, .12);--warning-bg: rgba(217, 119, 6, .12);--error-bg: rgba(220, 38, 38, .08);--info-bg: rgba(37, 99, 235, .1);--header-bg: rgba(245, 245, 245, .8);--editor-text: #1e1e1e;--selection-bg: rgba(0, 0, 0, .15);--error-border: rgba(220, 38, 38, .25);--error-subtle: rgba(220, 38, 38, .04);--info-border: rgba(37, 99, 235, .25);--info-subtle: rgba(37, 99, 235, .04);--gradient-a: rgba(0, 0, 0, .02);--gradient-b: rgba(0, 0, 0, .01);--box-shadow-accent: rgba(0, 0, 0, .15);--hl-key: #0369a1;--hl-string: #15803d;--hl-number: #b45309;--hl-bool: #c026d3;--hl-null: #dc2626;--hl-key-first: #be123c;--hl-key-apps: #6d28d9}body{font-family:Outfit,-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-secondary)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}
