:root{font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.55;font-synthesis:none;text-rendering:optimizeLegibility;--bg: #f6f7fa;--panel: #fff;--sidebar: #eef1f6;--text: #1e2026;--muted: #737780;--line: #e1e4eb;--blue: #0868e8;--onblue: #fff;--soft: #edf4ff;--field: #fff;--button: #fff;--green: #228344;--red: #c44738;--warn: #935d0a;--shadow: 0 2px 4px #1b2b4510;--glass: #ffffffb3;--log: #f0f2f6;color-scheme:light;background:var(--bg);color:var(--text)}:root[data-theme=dark]{--bg: #202125;--panel: #27292e;--sidebar: #292c33;--text: #f1f2f5;--muted: #a2a7b1;--line: #3a3d44;--blue: #3478f6;--onblue: #fff;--soft: #28384e;--field: #202126;--button: #3b3e45;--green: #7ccf94;--red: #ff988a;--warn: #eab76c;--shadow: 0 2px 4px #0003;--glass: #282b32b8;--log: #1b1d21;color-scheme:dark}*{box-sizing:border-box}body{margin:0}button,input,textarea,select{font:inherit}button,.button,.file-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:34px;padding:6px 12px;border:1px solid var(--line);border-radius:7px;background:var(--button);color:var(--text);box-shadow:var(--shadow);cursor:pointer;text-decoration:none;white-space:nowrap;font-weight:400}button:hover,.button:hover,.file-button:hover{filter:brightness(.97)}button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.primary{background:var(--blue);color:var(--onblue);border-color:transparent;box-shadow:inset 0 1px #ffffff24,0 2px 5px #0060d01f}.ghost,.text-button,.back{background:transparent;border-color:transparent;box-shadow:none}.ghost{color:var(--muted)}.icon-button{padding:7px}.text-button{justify-content:flex-start;padding:0;white-space:normal;text-align:left}.back{padding:0;margin-bottom:22px;color:var(--muted)}.danger{color:var(--red)}svg{width:17px;height:17px;flex-shrink:0}h1,h2,h3,p{margin:0}h1{font-size:25px;line-height:1.3;letter-spacing:-.6px;font-weight:600}h2{font-size:17px;font-weight:500}strong{font-weight:500}p,code,pre{overflow-wrap:anywhere}.muted{color:var(--muted)}.small{font-size:12px}.success{color:var(--green)}.warning-text,.error{color:var(--red)}code,pre{font-family:SF Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;white-space:pre-wrap;overflow-wrap:anywhere}pre{margin:0}label{display:grid;gap:8px;min-width:0}input:not([type=checkbox]),select,textarea{width:100%;min-width:0;border:1px solid var(--line);border-radius:7px;padding:9px 11px;background:var(--field);color:var(--text);box-shadow:inset 0 1px 2px #00000006}textarea{min-height:130px;resize:vertical;font-family:SF Mono,Menlo,monospace;font-size:13px}input[type=checkbox]{accent-color:var(--blue);width:16px;height:16px;flex-shrink:0;margin:0}.check{display:flex;gap:9px;align-items:center;cursor:pointer}.checklist{display:flex;gap:16px 24px;flex-wrap:wrap}.fields{display:grid;grid-template-columns:1fr 1fr;gap:22px}.wide{grid-column:1/-1}.input-action{display:flex;gap:8px;min-width:0}.input-action input{flex:1}.actions,.upload-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.stack{display:grid;gap:8px;min-width:0}.row{display:flex;justify-content:space-between;gap:16px;align-items:center;flex-wrap:wrap}.brand{display:flex;gap:11px;align-items:center;font-size:17px;letter-spacing:-.2px}.mark{height:35px;width:35px;display:flex;align-items:center;justify-content:center;border-radius:10px;color:#fff;background:linear-gradient(150deg,#64acff,#2765d9);box-shadow:inset 0 1px 1px #fff8,0 3px 8px #0763d625}.mark svg{width:22px;height:22px}.app-shell{display:grid;grid-template-columns:194px minmax(0,1fr);grid-template-rows:65px minmax(calc(100vh - 65px),auto)}.toolbar{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 26px;background:var(--glass);backdrop-filter:blur(24px) saturate(1.4);border-bottom:1px solid var(--line);box-shadow:inset 0 1px #ffffff24;z-index:3;position:sticky;top:0}.toolbar-right{display:flex;align-items:center;gap:12px}.separator{padding:0 6px}.sidebar{display:flex;flex-direction:column;padding:27px 12px 16px;background:linear-gradient(155deg,var(--sidebar),var(--bg));border-right:1px solid var(--line)}.nav-label{color:var(--muted);font-size:12px;margin:0 12px 10px}.sidebar nav{display:grid;gap:6px}.sidebar nav button{justify-content:flex-start;padding:10px 12px;border:1px solid transparent;background:transparent;box-shadow:none}.sidebar nav button svg{color:var(--blue)}.sidebar nav button.active{color:var(--onblue);background:var(--blue);border-color:#ffffff30;box-shadow:inset 0 1px #ffffff30,0 3px 8px #065cd019}.sidebar nav button.active svg{color:inherit}.nav-dot{width:5px;height:5px;border-radius:50%;background:currentColor;margin-left:auto}.sidebar-footer{display:grid;gap:10px;margin-top:auto;padding:18px 10px 2px;border-top:1px solid var(--line);color:var(--muted);font-size:12px}.sidebar-footer code{font-size:11px}.content{min-width:0;max-width:1600px;width:100%;padding:34px 34px 50px}.page-heading{display:flex;justify-content:space-between;align-items:center;gap:22px;flex-wrap:wrap;margin-bottom:30px}.page-heading p{color:var(--muted);margin-top:8px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:13px;margin-bottom:22px;overflow:hidden}.form-panel{padding:25px;display:grid;gap:24px}.form-panel .banner{margin:0}.panel-heading{display:flex;align-items:center;justify-content:space-between;padding:19px 22px;border-bottom:1px solid var(--line);gap:14px;flex-wrap:wrap}.record{display:grid;gap:12px;padding:22px;border-bottom:1px solid var(--line)}.record:last-child{border-bottom:0}.build-row{padding:24px}.project-list{--project-actions-width: 156px;background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden}.list-heading,.project-row{display:grid;grid-template-columns:minmax(180px,1.55fr) minmax(125px,1fr) minmax(100px,.75fr) minmax(145px,1fr) var(--project-actions-width);gap:22px;padding:18px 22px}.list-heading{color:var(--muted);font-size:12px;background:color-mix(in srgb,var(--sidebar) 42%,var(--panel))}.align-right{text-align:right}.project-row{align-items:center;min-height:110px;border-top:1px solid var(--line)}.project-identity{display:flex;align-items:center;gap:13px;min-width:0}.project-avatar{display:grid;place-items:center;width:36px;height:36px;border-radius:10px;background:var(--soft);color:var(--blue);flex-shrink:0}.project-name{min-height:24px;font-weight:600;overflow-wrap:anywhere}.project-name svg{width:13px;color:var(--muted)}.project-directory{font-size:11px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.environment-label{font-size:13px;overflow-wrap:anywhere}.state-pill{display:inline-flex;align-items:center;gap:7px;width:fit-content;padding:3px 9px;border-radius:6px;background:var(--sidebar);color:var(--muted);font-size:12px;white-space:nowrap}.state-pill.is-success{color:var(--green);background:color-mix(in srgb,var(--green) 9%,var(--panel))}.state-pill.is-failed{color:var(--red);background:color-mix(in srgb,var(--red) 9%,var(--panel))}.pid-label{font-size:12px}.port-chips{display:flex;flex-wrap:wrap;gap:5px}.port-chip{color:var(--muted);font-size:11px}.port-chip+.port-chip:before{content:"·";padding-right:5px}.mobile-label{display:none}.row-actions{display:flex;gap:7px;justify-content:flex-end;align-items:center}.row-actions .run-toggle{min-width:74px}.row-actions .icon-button{width:34px;flex-shrink:0}.row-actions svg{width:14px;height:14px}.status{display:inline-flex;align-items:center;gap:7px}.dot{width:6px;height:6px;border-radius:50%;background:var(--green);display:inline-block}.dot.gray{background:var(--muted)}.dot.red{background:var(--red)}.runtime-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.runtime-card{margin:0;padding:24px;display:grid;gap:20px}.path-block{display:grid;gap:8px;min-width:0}.copy-line{display:flex;align-items:start;gap:14px;min-width:0}.copy-line>code,.copy-line>.path-block{flex:1;min-width:0}.copy-line button{flex-shrink:0}.footer-note{display:flex;gap:12px;flex-wrap:wrap;padding-top:20px;margin-top:25px;border-top:1px solid var(--line);color:var(--muted)}.empty{padding:72px 25px;display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:13px}.empty h2{color:var(--text)}.empty p{max-width:450px}.empty-icon{width:52px;height:52px;border-radius:15px;background:var(--sidebar);display:grid;place-items:center;color:var(--blue)}.empty-icon svg{width:25px;height:25px}.empty.compact{padding:30px}.form-footer{display:flex;justify-content:flex-end;align-items:center;gap:10px;flex-wrap:wrap;padding-top:5px}.form-section,details{border-top:1px solid var(--line);padding-top:22px}.form-section{display:grid;gap:20px}summary{cursor:pointer;color:var(--muted)}details>.fields,details>pre,details>form{margin-top:22px}fieldset{margin:0;padding:0;border:0;min-width:0}legend{padding:0;margin-bottom:15px}.segments{display:flex;gap:3px;padding:3px;background:var(--sidebar);border-radius:9px;width:fit-content;margin-bottom:22px}.segments button{border-color:transparent;background:transparent;box-shadow:none}.segments button.selected{background:var(--button);box-shadow:var(--shadow)}.form-panel .segments{margin-bottom:0}.banner{display:flex;gap:10px;align-items:center;background:var(--soft);border:1px solid color-mix(in srgb,var(--blue) 22%,var(--line));padding:13px 16px;border-radius:9px;color:var(--blue);margin-bottom:22px;overflow-wrap:anywhere}.banner.warning{color:var(--warn);background:color-mix(in srgb,var(--warn) 9%,var(--panel));border-color:color-mix(in srgb,var(--warn) 25%,var(--line))}.banner>span{flex:1}.banner>svg{align-self:start;margin-top:3px}.banner>.icon-button{margin-left:auto}.log-toolbar{margin:18px 0 12px}.log-view{padding:20px;background:var(--log);border:1px solid var(--line);border-radius:10px;max-height:550px;min-height:260px;overflow:auto;white-space:pre-wrap;line-height:1.7;font-size:12px;overflow-wrap:anywhere}.execution{display:grid;gap:20px;margin-bottom:30px}.execution>.row>select{max-width:310px}.section-heading{display:flex;align-items:center;justify-content:space-between;margin:26px 0 16px}.file-button{width:fit-content;font-size:12px}.file-button input[type=file]{display:none}.modal-backdrop{position:fixed;inset:0;background:#11182755;backdrop-filter:blur(5px);z-index:20;display:flex;align-items:center;justify-content:center;padding:22px}.modal{background:var(--panel);border:1px solid var(--line);box-shadow:0 20px 70px #0003;border-radius:16px;max-width:610px;width:100%;padding:24px;display:grid;gap:22px;max-height:calc(100dvh - 44px);overflow:auto}.confirmation{max-width:430px}.directory-list{max-height:350px;overflow:auto;display:grid;gap:3px}.directory-list button{background:transparent;border:0;box-shadow:none;justify-content:flex-start}.directory-list button svg:last-child{margin-left:auto}.directory-list p{padding:15px}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:25px;background:radial-gradient(ellipse at 20% 10%,color-mix(in srgb,var(--blue) 12%,var(--bg)),var(--bg) 65%)}.login-card{width:100%;max-width:390px;padding:34px;display:grid;gap:20px;background:var(--glass);backdrop-filter:blur(30px);border:1px solid var(--line);box-shadow:0 12px 45px #1823430d;border-radius:18px}.login-card .brand{margin-bottom:15px}.boot{height:100vh;display:flex;align-items:center;justify-content:center;gap:10px;color:var(--muted)}progress{width:100%;height:5px;accent-color:var(--blue)}.spin{animation:spin 1.2s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}:root[data-reduced=true] .toolbar,:root[data-reduced=true] .login-card{backdrop-filter:none;background:var(--panel)}:root[data-reduced=true] .modal-backdrop{backdrop-filter:none}@media(prefers-reduced-motion:reduce){.spin{animation:none}*{scroll-behavior:auto!important}}@media(max-width:1100px){.app-shell{grid-template-columns:174px minmax(0,1fr)}.content{padding:28px 22px}.runtime-grid{grid-template-columns:1fr}}@media(max-width:850px){.fields{grid-template-columns:1fr}.host{display:none}.form-panel{padding:20px}.input-action{flex-wrap:wrap}.input-action input{flex-basis:200px}}@media(max-width:600px){.app-shell{display:block}.toolbar{padding:12px 18px}.sidebar{padding:10px 12px;border-right:0;border-bottom:1px solid var(--line)}.sidebar nav{display:flex;gap:3px;flex-wrap:wrap}.sidebar nav button{font-size:12px;padding:8px}.nav-label,.sidebar-footer{display:none}.content{padding:25px 16px 40px}h1{font-size:22px}.page-heading{gap:18px}.page-heading>button{min-height:38px}.runtime-card,.record{padding:20px}.modal-backdrop{padding:15px}.modal{padding:20px}.fields{gap:18px}.copy-line{gap:8px}.empty{padding:45px 20px}.form-footer button{flex:1}.log-toolbar>.actions{width:100%}.segments{max-width:100%;flex-wrap:wrap}.login-card{padding:25px}.banner{font-size:13px}.form-panel{gap:20px}}@media(pointer:coarse){button,.button,.file-button{min-height:44px}input:not([type=checkbox]),select,textarea{font-size:16px}.check{min-height:36px}}.content{margin-inline:auto}.heading-actions{display:flex;gap:10px;align-items:center}.activity-dot{width:6px;height:6px;border-radius:50%;background:var(--blue)}.install-activity{width:100%;justify-content:flex-start;margin-bottom:22px;padding:12px 16px;background:var(--soft);box-shadow:none;color:var(--blue)}.install-activity>span:first-of-type{flex:1;text-align:left;white-space:normal}.install-activity small{color:var(--muted);margin-left:12px}.runtime-card{align-content:start;grid-template-rows:auto auto 1fr auto}.runtime-card>.path-block{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:12px}.runtime-card>.row:last-child{border-top:1px solid var(--line);padding-top:16px;flex-wrap:nowrap}.runtime-card>.row:last-child>span{overflow-wrap:anywhere}.runtime-card>.row:last-child>button{flex-shrink:0}.runtime-dialog{padding:0;gap:0;overflow:hidden}.dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 24px;border-bottom:1px solid var(--line)}.dialog-heading h2{font-size:19px;font-weight:600}.dialog-heading p{margin-top:5px;font-size:12px;color:var(--muted)}.runtime-dialog>.banner{margin:12px 24px}.install-dialog{max-width:720px;display:flex;flex-direction:column}.install-dialog-body{min-height:0;padding:24px;overflow:auto;display:grid;gap:22px}.install-dialog-body .segments{margin:0}.history-dialog{max-width:1040px;display:flex;flex-direction:column;height:min(700px,calc(100dvh - 64px))}.history-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 24px;border-bottom:1px solid var(--line)}.history-layout{display:grid;grid-template-columns:270px minmax(0,1fr);flex:1;min-height:0}.history-list{background:var(--bg);border-right:1px solid var(--line);overflow:auto;padding:12px}.history-item{width:100%;display:flex;align-items:flex-start;gap:10px;text-align:left;padding:14px 12px;border:1px solid transparent;box-shadow:none;background:transparent;white-space:normal;margin-bottom:5px}.history-item.selected{border-color:color-mix(in srgb,var(--blue) 25%,var(--line));background:var(--soft)}.history-item>svg{margin-top:3px;color:var(--muted);width:15px}.history-item-text{display:grid;gap:6px;flex:1;min-width:0}.history-item-text strong{overflow-wrap:anywhere;font-size:13px}.history-item-text small{color:var(--muted);font-size:11px}.history-detail{padding:24px;overflow:auto;display:flex;flex-direction:column;gap:18px;min-width:0}.history-detail-heading{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.history-detail-heading h3{font-size:16px;overflow-wrap:anywhere;min-width:0}.history-meta{display:grid;grid-template-columns:1fr 1fr;gap:16px}.history-meta>div{display:grid;gap:4px;min-width:0}.history-meta span{font-size:11px;color:var(--muted)}.history-meta strong{font-size:12px;overflow-wrap:anywhere}.history-error{background:color-mix(in srgb,var(--red) 7%,var(--panel));color:var(--red);padding:12px;border-radius:8px;font-size:12px}.history-log{background:var(--log);border:1px solid var(--line);border-radius:8px;padding:16px;min-height:150px;max-height:280px;overflow:auto;flex:1 0 150px;font-size:11px;line-height:1.8}.history-detail-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:auto}.history-empty{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--muted);padding:30px;text-align:center}.history-empty>svg{width:32px;height:32px}button:focus-visible,pre:focus-visible{outline:2px solid var(--blue);outline-offset:3px}@media(max-width:1250px){.list-heading{display:none}.project-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px 24px;padding:22px}.project-row:first-of-type{border-top:0}.project-identity{grid-column:1 / -1}.mobile-label{display:block;color:var(--muted);font-size:11px}.row-actions{align-self:end}}@media(max-width:700px){.history-layout{grid-template-columns:minmax(0,1fr);grid-template-rows:150px minmax(0,1fr)}.history-list{border-right:0;border-bottom:1px solid var(--line);padding:8px 12px}.history-item{padding:9px 10px}.history-item-text{gap:3px}.history-detail{padding:18px}.history-dialog{height:calc(100dvh - 30px)}.dialog-heading{padding:18px}.history-toolbar{padding:8px 18px;flex-wrap:wrap}.install-dialog-body{min-height:0;padding:18px}.runtime-dialog{padding:0}}@media(max-width:600px){.heading-actions{width:100%}.heading-actions>button{flex:1}.project-row{padding:20px 16px;gap:18px}.project-row .process-summary{grid-column:1 / -1}.row-actions{grid-column:1 / -1;border-top:1px solid var(--line);padding-top:16px}.install-activity small{display:block;margin-left:0}}@media(pointer:coarse){.project-list{--project-actions-width: 178px}.row-actions .icon-button{width:44px}.list-heading,.project-row{column-gap:16px}.row-actions{min-width:178px}}.webhook-panel{gap:18px}.webhook-title{display:flex;align-items:center;gap:10px}.webhook-title>svg{color:var(--blue);width:20px;height:20px}.webhook-link{display:flex;align-items:center;gap:10px;min-width:0}.webhook-link input{flex:1;font-family:SF Mono,Menlo,monospace;font-size:12px}.method-badge{padding:5px 8px;border-radius:6px;font-size:11px;font-weight:600;background:var(--soft);color:var(--blue)}@media(max-width:600px){.webhook-link{flex-wrap:wrap}.webhook-link input{flex-basis:calc(100% - 65px)}.webhook-link>button{width:100%}}
