:root{--bg:#f4f6f5;--panel:#fff;--text:#17211d;--muted:#66726c;--line:#e1e6e3;--line-soft:#edf0ee;--tint:#f8faf9;--brand:#0f6a56;--brand-dark:#0b5242;--brand-tint:#e7f1ee;--ok:#0f7a4f;--warn:#a8610a;--bad:#b42318;--radius:10px;--radius-sm:6px;--gap:16px;color:var(--text);font-family:-apple-system,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.55}h1{letter-spacing:.01em;margin:0;font-size:22px;font-weight:650}h2{margin:0 0 12px;font-size:16px;font-weight:650}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:12.5px}.muted{color:var(--muted)}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.spacer{flex:1}.mt{margin-top:var(--gap)}.grid{gap:var(--gap);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.col-12{grid-column:span 12}.col-8{grid-column:span 8}.col-6{grid-column:span 6}.col-5{grid-column:span 5}.col-4{grid-column:span 4}.col-3{grid-column:span 3}.col-2{grid-column:span 2}@media (width<=1100px){.col-2{grid-column:span 4}.col-3,.col-4,.col-5{grid-column:span 6}}@media (width<=760px){.col-8,.col-6,.col-5,.col-4,.col-3{grid-column:span 12}.col-2{grid-column:span 6}}input,select,textarea{font:inherit;color:inherit;border-radius:var(--radius-sm);background:#fff;border:1px solid #cdd5d1;min-width:0;padding:7px 10px;transition:border-color .12s,box-shadow .12s}input:hover,select:hover,textarea:hover{border-color:#b4bfb9}input:focus,select:focus,textarea:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px #0f6a5626}input[type=checkbox],input[type=radio]{accent-color:var(--brand);padding:0}textarea{resize:vertical;width:100%;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:12.5px}label.field{margin-bottom:14px;display:block}label.field>span{color:var(--muted);margin-bottom:5px;font-size:13px;display:block}label.field input,label.field select{width:100%}.grid>label.field{margin-bottom:0}small.hint{color:var(--muted);margin-top:5px;font-size:12px;line-height:1.4;display:block}.check{align-items:center;gap:6px;display:inline-flex}button{font:inherit;cursor:pointer;border-radius:var(--radius-sm);color:var(--text);background:#fff;border:1px solid #cdd5d1;padding:7px 14px;transition:background .12s,border-color .12s}button:hover:not(:disabled){background:var(--tint);border-color:#b4bfb9}button:focus-visible,a:focus-visible,[role=button]:focus-visible{outline:2px solid var(--brand);outline-offset:2px}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:500}button.primary:hover:not(:disabled){background:var(--brand-dark);border-color:var(--brand-dark)}button.danger{color:var(--bad);border-color:#e8b4af}button.danger:hover:not(:disabled){background:#fdf2f1;border-color:#d98f88}button.link{color:var(--brand);background:0 0;border:0;padding:2px 6px}button.small{padding:3px 10px;font-size:13px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px}.card+.card{margin-top:var(--gap)}.stats{gap:var(--gap);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);grid-column:span 2;min-width:0;padding:14px 18px}.stat.lead{background:var(--brand-tint);border-color:#b9d6cd;grid-column:span 4}.stat b{font-variant-numeric:tabular-nums;font-size:24px;font-weight:650;line-height:1.25;display:block}.stat.lead b{color:var(--brand-dark);font-size:30px}.stat span{color:var(--muted);font-size:13px}.stat[style*=cursor]{transition:border-color .12s,background .12s}.stat[style*=cursor]:hover{background:var(--tint);border-color:#b9d6cd}@media (width<=1100px){.stat{grid-column:span 4}.stat.lead{grid-column:span 8}}@media (width<=760px){.stat,.stat.lead{grid-column:span 6}}.table-wrap{overflow-x:auto}table{border-collapse:collapse;background:var(--panel);font-variant-numeric:tabular-nums;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line-soft);white-space:nowrap;padding:10px 12px}td.wrap{white-space:normal;word-break:break-word;min-width:120px;max-width:420px}th{color:var(--muted);background:var(--tint);border-bottom:1px solid var(--line);font-size:13px;font-weight:500}tbody tr:last-child td{border-bottom:0}tr:hover td{background:var(--tint)}th.act,td.act{background:var(--panel);position:sticky;right:0;box-shadow:-8px 0 8px -8px #17211d2e}th.act,tr:hover td.act{background:var(--tint)}td.num,th.num{text-align:right}.empty{text-align:center;color:var(--muted);padding:36px 16px}.tag{color:#3d4944;background:#e9edeb;border-radius:4px;padding:1px 8px;font-size:12px;font-weight:500;display:inline-block}.tag.ok,.tag.healthy,.tag.created,.tag.done,.tag.active{color:#0b5c3b;background:#dcf1e6}.tag.warn,.tag.suspect,.tag.running,.tag.dry_run,.tag.skipped,.tag.ack{color:#7d4a07;background:#fbefd5}.tag.bad,.tag.dead,.tag.failed,.tag.error,.tag.critical,.tag.deleted{color:#8c1d14;background:#fbe3e0}.tag.disabled,.tag.unknown,.tag.closed,.tag.rolled_back{color:#55615b;background:#e9edeb}.tag.need_manual{color:#4b3a99;background:#e8e5f7}.notice{border-radius:var(--radius-sm);background:var(--brand-tint);color:#0b4a3b;border:1px solid #cfe4dd;margin-bottom:14px;padding:10px 14px}.notice.bad{color:#8c1d14;background:#fdf2f1;border-color:#f2cdc9}.notice.warn{color:#7d4a07;background:#fdf6e7;border-color:#f1ddb0}.tabs{border-bottom:1px solid var(--line);margin-bottom:var(--gap);gap:4px;display:flex}.tabs button{background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-1px;padding:8px 14px}.tabs button:hover:not(:disabled){color:var(--brand);background:0 0}.tabs button.on{border-bottom-color:var(--brand);color:var(--brand);font-weight:600}.pager{color:var(--muted);justify-content:flex-end;align-items:center;gap:10px;padding-top:12px;display:flex}.mask{z-index:50;background:#0f1c186b;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{border:1px solid var(--line);background:#fff;border-radius:12px;width:min(480px,100%);max-height:90vh;padding:24px;overflow:auto}.modal h2{margin-bottom:16px;font-size:17px}.modal .actions{justify-content:flex-end;gap:8px;margin-top:20px;display:flex}.toasts{z-index:100;gap:8px;width:min(360px,100vw - 32px);display:grid;position:fixed;top:16px;right:16px}.toast{border-radius:var(--radius-sm);color:#fff;word-break:break-word;background:#26332e;border-left:3px solid #7d8b85;padding:10px 14px}.toast.ok{background:#0b4a3b;border-left-color:#4fc29c}.toast.error{background:#7a1a12;border-left-color:#f08a80}.layout{grid-template-columns:216px 1fr;height:100%;display:grid}.side{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;padding:18px 12px;display:flex}.side .brand{letter-spacing:.01em;align-items:center;gap:9px;padding:2px 10px 22px;font-size:17px;font-weight:700;display:flex}.side .brand:before{content:"";background:var(--brand);border-radius:3px;width:12px;height:12px;margin-right:4px;box-shadow:5px 5px 0 -1px #8cc3b4}.side a{color:#3d4944;border-radius:var(--radius-sm);margin-bottom:2px;padding:8px 12px;display:block;position:relative}.side a:hover{background:var(--tint);text-decoration:none}.side a.router-link-active{background:var(--brand-tint);color:var(--brand-dark);font-weight:600}.side a.router-link-active:before{content:"";background:var(--brand);border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:-12px}.side .sep{background:var(--line);height:1px;margin:12px 4px}.main{flex-direction:column;min-width:0;height:100%;display:flex}.topbar{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:12px;min-height:54px;padding:0 28px;display:flex}.content{flex:1;padding:28px;overflow:auto}.page{max-width:1360px;margin:0 auto}.page>.row:first-child{min-height:36px;margin-bottom:6px}.page>p.muted{max-width:76ch;margin:0 0 20px}.page>h1{margin-bottom:6px}.login-wrap{background:#11302a;place-items:center;min-height:100%;padding:16px;display:grid}.login-card{background:#fff;border-radius:14px;width:min(380px,100%);padding:34px 30px}.login-card h1{text-align:center;margin-bottom:4px;font-size:24px}.login-card .sub{text-align:center;color:var(--muted);margin-bottom:24px}.login-card button.primary{width:100%;margin-top:4px;padding:10px}@media (width<=760px){.layout{grid-template-rows:auto 1fr;grid-template-columns:1fr}.side{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;align-items:center;gap:4px;padding:8px;overflow-x:auto}.side .brand{padding:0 10px}.side .sep{display:none}.side a{white-space:nowrap;margin:0}.side a.router-link-active:before{display:none}.topbar{flex-wrap:wrap;padding:8px 14px}.content{padding:16px}}.model-list{border:1px solid var(--line);border-radius:var(--radius-sm);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:4px 12px;max-height:260px;margin-top:8px;padding:10px 12px;display:grid;overflow:auto}.group{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.group-head{cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--tint);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 18px;display:flex}.group-head:hover{background:#f1f5f3}.group-head:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}.group-body{border-top:1px solid var(--line);padding:4px 18px 14px}.caret{width:14px;color:var(--muted);transition:transform .12s;display:inline-block}.caret.open{transform:rotate(90deg)}.selbar{z-index:5;margin-top:var(--gap);background:var(--brand-tint);border-radius:var(--radius);border:1px solid #b9d6cd;align-items:center;gap:10px;padding:10px 16px;display:flex;position:sticky;top:0}.group-tools{gap:10px;padding:8px 12px}.edit-sec{border:1px solid var(--line);border-radius:var(--radius);margin:0 0 14px;padding:10px 16px 16px}.edit-sec legend{color:var(--muted);padding:0 6px;font-size:13px}@media (prefers-reduced-motion:reduce){*{transition:none!important}}select{appearance:none;border-radius:var(--radius);cursor:pointer;background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5 6 8l3.5-3.5' fill='none' stroke='%2366726c' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 11px center;background-repeat:no-repeat;padding-right:32px}select:disabled{cursor:not-allowed;background-color:var(--tint)}@supports (appearance:base-select){select{appearance:base-select}select::picker(select){appearance:base-select}select::picker-icon{display:none}select::picker(select){border:1px solid var(--line);border-radius:var(--radius);background:#fff;margin-top:4px;padding:4px;box-shadow:0 8px 24px #17211d24}select option{border-radius:var(--radius-sm);cursor:pointer;padding:7px 10px}select option:hover,select option:focus-visible{background:var(--tint)}select option:checked{background:var(--brand-tint);color:var(--brand-dark);font-weight:500}select option::checkmark{display:none}}small.field-error{color:var(--bad);margin-top:5px;font-size:12px;line-height:1.4;display:block}input.invalid,select.invalid,textarea.invalid{border-color:var(--bad)}input.invalid:focus,select.invalid:focus,textarea.invalid:focus{border-color:var(--bad);box-shadow:0 0 0 3px #b4231824}.ops{align-items:center;gap:2px;display:inline-flex}td button.small,.group-head button.small{color:var(--brand);border-radius:var(--radius-sm);background:0 0;border-color:#0000;padding:3px 9px;font-weight:500}td button.small:hover:not(:disabled),.group-head button.small:hover:not(:disabled){background:var(--brand-tint);border-color:#0000}td button.small.danger,.group-head button.small.danger{color:var(--bad);border-color:#0000}td button.small.danger:hover:not(:disabled),.group-head button.small.danger:hover:not(:disabled){background:#fbe3e0;border-color:#0000}td button.small:disabled{color:var(--muted);opacity:.7}td button.small+button.small{position:relative}td button.small+button.small:before{content:"";background:var(--line);width:1px;position:absolute;top:7px;bottom:7px;left:-2px}td button.small:hover+button.small:before,td button.small+button.small:hover:before{display:none}.card>.row>button,.card>.row>button.small{border-radius:999px;padding:4px 14px}.card>.row>button.danger{background:#fff}button{white-space:nowrap}.page-enter-active{transition:opacity .18s ease-out,transform .18s ease-out}.page-leave-active{transition:opacity .1s ease-in}.page-enter-from{opacity:0;transform:translateY(8px)}.page-leave-to{opacity:0}.modal-enter-active,.modal-leave-active{transition:opacity .18s}.modal-enter-active .modal{transition:transform .22s cubic-bezier(.2,.9,.3,1.15),opacity .18s}.modal-leave-active .modal{transition:transform .15s ease-in,opacity .15s ease-in}.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-from .modal{opacity:0;transform:translateY(14px)scale(.95)}.modal-leave-to .modal{opacity:0;transform:translateY(6px)scale(.97)}.toast-enter-active,.toast-leave-active{transition:opacity .2s,transform .2s}.toast-leave-active{width:100%;position:absolute;right:0}.toast-enter-from,.toast-leave-to{opacity:0;transform:translate(24px)}.toast-move{transition:transform .2s}.group-body{animation:.16s ease-out reveal}@keyframes reveal{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
