:root{font-family:Inter,"Microsoft YaHei",system-ui,sans-serif;color:#1f2937;background:#f5f7fa}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;min-height:100vh;background:radial-gradient(circle at 50% -20%,#dff7ed 0,transparent 42%),#f5f7fa}.shell{min-height:100vh;display:grid;place-items:center;padding:36px 20px}.panel{width:min(680px,100%);border:1px solid rgba(228,234,231,.85)!important;border-radius:22px!important;box-shadow:0 24px 70px rgba(24,55,43,.11)!important;overflow:hidden}.panel>.el-card__body{padding:42px}.login-panel{width:min(480px,100%)}.brand-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:15px;background:linear-gradient(135deg,#04b966,#35d99a);color:#fff;font-weight:800;font-size:22px;box-shadow:0 10px 24px rgba(7,193,96,.27)}h1{font-size:27px;margin:8px 0 5px;color:#111827}.eyebrow{margin:18px 0 0;font-size:11px;letter-spacing:.17em;color:#07a957}.intro{margin:0 0 30px}.muted{color:#84909f;font-size:13px}.form-group{margin-top:19px}label{display:block;margin:0 0 9px;font-size:13px;font-weight:700;color:#334155}.form-control{display:block;width:100%;height:48px;padding:0 16px;border:1px solid #dbe3e0;border-radius:12px;background:#fff;color:#172033;font:inherit;font-size:14px;outline:none;box-shadow:0 1px 2px rgba(15,23,42,.025);transition:border-color .2s,box-shadow .2s,transform .2s}.form-control:hover{border-color:#aabbb5}.form-control:focus{border-color:#08b96a;box-shadow:0 0 0 4px rgba(7,193,96,.11)}.select-wrap{position:relative}.select-wrap:after{content:"";position:absolute;right:17px;top:18px;width:8px;height:8px;border-right:2px solid #718078;border-bottom:2px solid #718078;transform:rotate(45deg);pointer-events:none}.select-wrap select{appearance:none;padding-right:46px;cursor:pointer}.input-wrap{position:relative}.field-icon{position:absolute;left:17px;top:16px;color:#91a199;font-size:10px;z-index:1}.password-control{padding-left:41px}.wide{width:100%;margin-top:24px;height:50px}.primary-action{display:flex;align-items:center;justify-content:center;gap:12px;border:0;border-radius:13px;background:linear-gradient(135deg,#08b96a,#05a85e);color:#fff!important;font:inherit;font-weight:750;letter-spacing:.02em;cursor:pointer;box-shadow:0 10px 22px rgba(7,185,105,.2);transition:transform .18s,box-shadow .18s,filter .18s}.primary-action b{font-size:19px;font-weight:400;transition:transform .18s}.primary-action:hover{transform:translateY(-1px);box-shadow:0 13px 28px rgba(7,185,105,.27);filter:saturate(1.08)}.primary-action:hover b{transform:translateX(3px)}.primary-action:active{transform:translateY(0)}.form-error{min-height:20px;margin:10px 0 0;color:#f56c6c;font-size:13px}.top{display:flex;justify-content:space-between;gap:18px;align-items:start}.top .eyebrow{margin:0}.status-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:28px 0 4px}.status-box{padding:17px;background:#f8fafb;border:1px solid #edf0f3;border-radius:14px}.status-box span,.status-box strong{display:block}.status-value{margin-top:8px;font-size:16px}.online,.success{color:#07a957}.offline,.failed{color:#f56c6c}.running,.pending{color:#e6a23c}.release-button:disabled{background:#a9b6bf!important;box-shadow:none;cursor:not-allowed;transform:none}.progress-wrap{margin:14px 2px 0}.progress{height:9px;overflow:hidden;background:#e8edf0;border-radius:99px}.progress i{display:block;height:100%;width:25%;background:linear-gradient(90deg,#07b968,#67e8a7);border-radius:99px}.progress i.active{animation:travel 1.7s ease-in-out infinite}@keyframes travel{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}}#progressText{display:block;margin-top:8px;color:#84909f;font-size:12px}.section-title{display:flex;justify-content:space-between;align-items:end;margin-top:32px;padding-top:25px;border-top:1px solid #ebeef5}.section-title h2{margin:0;font-size:17px}.section-title p{margin:5px 0 0}.history.empty{color:#a2acb7;text-align:center;padding:28px}.history-item{padding:15px 2px;border-bottom:1px solid #ebeef5}.history-head{display:flex;justify-content:space-between;gap:12px}.history-meta{margin-top:6px;color:#909baa;font-size:12px}.log-button{margin-top:9px!important;padding:6px 0!important;border:0;background:none;color:#07a957;cursor:pointer}.log-panel{margin-top:18px}.log-head{display:flex;justify-content:space-between;align-items:center}.log-panel pre{white-space:pre-wrap;word-break:break-word;max-height:330px;overflow:auto;background:#111827;color:#d7e0ee;border-radius:12px;padding:17px;font-size:12px;line-height:1.6}.modal-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,23,42,.42);backdrop-filter:blur(5px);animation:fadeIn .18s}.confirm-dialog{width:min(410px,100%);padding:30px;background:#fff;border:1px solid rgba(226,232,240,.9);border-radius:20px;box-shadow:0 28px 80px rgba(15,23,42,.25);text-align:center;animation:popIn .2s}.confirm-icon{display:grid;place-items:center;width:52px;height:52px;margin:0 auto 15px;border-radius:16px;background:#e9fbf2;font-size:24px}.confirm-dialog h3{margin:0;color:#172033;font-size:20px}.confirm-dialog p{margin:11px 0 24px;color:#718096;font-size:13px;line-height:1.7}.dialog-actions{display:grid;grid-template-columns:1fr 1.35fr;gap:11px}.dialog-actions button{height:44px;margin:0}.secondary-action{border:1px solid #dbe3e0;border-radius:12px;background:#fff;color:#52615a;font:inherit;font-weight:650;cursor:pointer}.secondary-action:hover{background:#f5f8f7}.toast-area{position:fixed;right:24px;top:24px;z-index:1100;display:grid;gap:10px}.toast{display:flex;align-items:center;gap:11px;min-width:280px;max-width:390px;padding:15px 17px;border:1px solid #dce8e1;border-radius:14px;background:#fff;box-shadow:0 16px 45px rgba(15,23,42,.16);animation:toastIn .25s}.toast:before{display:grid;place-items:center;width:27px;height:27px;flex:none;border-radius:50%;font-weight:800}.toast.success-toast:before{content:"✓";background:#e7f9ef;color:#07a957}.toast.error-toast:before{content:"!";background:#fff0f0;color:#f56c6c}.toast strong{display:block;font-size:14px}.toast span{display:block;margin-top:2px;color:#84909f;font-size:12px}@keyframes fadeIn{from{opacity:0}}@keyframes popIn{from{opacity:0;transform:translateY(8px) scale(.98)}}@keyframes toastIn{from{opacity:0;transform:translateX(18px)}}@media(max-width:560px){.panel>.el-card__body{padding:27px}.status-grid{grid-template-columns:1fr}.top h1{font-size:23px}.toast-area{left:14px;right:14px;top:14px}.toast{min-width:0}}
