:root{--bg: #f6f6f6;--surface: #ffffff;--surface-muted: #fafafa;--surface-hover: #f5f5f5;--line: #e5e5e5;--line-strong: #d4d4d4;--ink: #171717;--ink-strong: #111111;--muted: #737373;--muted-strong: #525252;--danger: #b42318;--text-ui: 14px;--text-control: 13px;--text-caption: 12px;--control-h: 34px;--control-radius: 4px;--shell-bar-h: 54px;font-family:Inter,Microsoft YaHei,PingFang SC,Arial,sans-serif;font-size:var(--text-ui);color:var(--ink);background:var(--bg);font-synthesis:none;letter-spacing:0}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background:var(--bg);line-height:1.4}button,input,select,textarea{font:inherit;font-size:var(--text-control)}input,select,textarea{color:var(--ink)}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}.admin-shell{display:grid;grid-template-columns:170px minmax(0,1fr);min-height:100vh}.sidebar{grid-column:1;grid-row:1;display:flex;flex-direction:column;min-height:100vh;background:var(--surface);color:#1f1f1f;border-right:1px solid #e3e3e3;padding:0}.brand{display:flex;gap:8px;align-items:center;justify-content:center;height:var(--shell-bar-h);flex:0 0 auto;padding:0 10px;border-bottom:1px solid var(--line)}.brand img{width:28px;height:28px;display:block;object-fit:contain}.brand strong{color:var(--ink-strong);font-size:15px;font-weight:700;line-height:1;white-space:nowrap}.sidebar nav{display:grid;align-content:start;gap:4px;padding:16px 8px;margin:0}.sidebar a{display:flex;align-items:center;gap:9px;min-height:34px;padding:0 14px;border-radius:4px;color:#2d2d2d;text-decoration:none;font-size:var(--text-ui);font-weight:500;line-height:1}.sidebar a svg{flex:0 0 auto}.sidebar a.active,.sidebar a:hover{background:#1f1f1f;color:var(--surface)}.main{grid-column:2;grid-row:1;min-width:0;background:var(--bg)}.page-head .btn{height:var(--control-h)}.sidebar-footer{display:grid;gap:8px;margin-top:auto;padding:10px 8px 14px;border-top:1px solid var(--line)}.sidebar-footer .auth-user,.sidebar-footer .btn{width:100%;justify-content:center}.auth-user,.btn svg,.icon-btn svg,.search-box svg{flex:0 0 auto;display:block}.auth-user{display:inline-flex;align-items:center;gap:7px;min-height:var(--control-h);padding:0 10px;color:var(--muted-strong);font-size:var(--text-control);font-weight:600}input::placeholder,textarea::placeholder{color:#666}.content{min-width:0;padding:0 18px 22px;overflow:auto}.page{display:grid;gap:14px}.login-screen{min-height:100vh;display:grid;place-items:center;padding:24px;background:var(--bg)}.login-shell{display:grid;grid-template-columns:minmax(240px,300px) minmax(300px,380px);width:min(100%,680px);border:1px solid var(--line);border-radius:6px;background:var(--surface)}.login-context{display:flex;flex-direction:column;justify-content:space-between;min-height:330px;padding:24px;border-right:1px solid var(--line);background:var(--surface-muted)}.login-panel{width:min(100%,360px);display:grid;gap:14px;padding:22px;border:1px solid var(--line);border-radius:6px;background:var(--surface)}.login-shell .login-panel{width:auto;border:0;border-radius:0;padding:24px}.login-brand{display:flex;align-items:center;gap:11px;margin-bottom:2px}.login-brand img{width:38px;height:38px;object-fit:contain}.login-brand-large{align-items:flex-start}.login-brand-large img{width:40px;height:40px}.login-brand strong,.login-brand span{display:block}.login-brand strong{color:var(--ink-strong);font-size:18px;line-height:1.2}.login-brand span{margin-top:4px;color:var(--muted);font-size:var(--text-control)}.login-form-head{display:grid;gap:5px;margin-bottom:2px}.login-form-head h1{margin:0;color:var(--ink-strong);font-size:19px;line-height:1.2;text-wrap:balance}.login-form-head p{margin:0;color:var(--muted-strong);font-size:var(--text-control)}.login-facts{display:grid;gap:0;margin:18px 0 0}.login-facts div{display:grid;grid-template-columns:1fr auto;align-items:center;gap:12px;min-height:42px;border-top:1px solid var(--line)}.login-facts dt,.login-facts dd{margin:0;min-width:0;font-size:var(--text-control)}.login-facts dt{display:inline-flex;align-items:center;gap:7px;color:var(--muted-strong);font-weight:600}.login-facts dd{overflow:hidden;color:var(--ink);font-weight:700;text-align:right;text-overflow:ellipsis;white-space:nowrap}.login-submit{width:100%}.page-loading,.alert,.metric,.info-grid>div{border:1px solid var(--line);border-radius:4px;background:var(--surface)}.page-head{display:flex;align-items:center;justify-content:space-between;min-height:var(--shell-bar-h);gap:12px;border-bottom:1px solid var(--line)}.page-head h1{margin:0;font-size:15px;font-weight:700;line-height:1;color:var(--ink-strong)}.page-head p{display:none}.btn,.icon-btn,.link-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:4px;white-space:nowrap}.btn{min-height:var(--control-h);padding:0 12px;border:1px solid var(--ink);font-weight:600;font-size:var(--text-control);line-height:1}.btn.compact{min-height:var(--control-h);padding:0 11px;font-size:var(--text-control)}.btn.primary{background:var(--ink);color:var(--surface)}.btn.secondary{border-color:var(--line-strong);background:var(--surface);color:var(--ink)}.icon-btn{width:32px;height:32px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink)}.icon-btn:hover,.btn.secondary:hover{background:var(--surface-hover)}.btn.primary:hover{background:#2b2b2b}.icon-btn.danger{color:var(--danger)}.link-btn{height:30px;padding:0 3px;border:0;background:transparent;color:var(--ink);font-size:var(--text-control);line-height:1;text-decoration:none}.link-btn:hover{color:var(--ink-strong);text-decoration:underline;text-underline-offset:3px}.link-btn.danger-link{color:var(--danger)}.link-btn.danger-link:hover{color:#8f1d14}.action-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:62px;height:28px;padding:0 10px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);color:var(--ink);font-size:var(--text-control);font-weight:600;line-height:1;white-space:nowrap}.action-btn:hover{background:var(--surface-hover);border-color:#bdbdbd}.action-btn:disabled{opacity:.58;cursor:not-allowed}.action-btn.danger{border-color:#f1c4c0;background:snow;color:var(--danger)}.action-btn.danger:hover{border-color:#e5a7a1;background:#fff4f3;color:#8f1d14}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.metric{padding:18px}.metric span,.metric small,.info-grid span{display:block;color:var(--muted);font-size:var(--text-control)}.metric strong{display:block;margin:9px 0 5px;font-size:28px;line-height:1;color:var(--ink)}.info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.info-grid>div{min-width:0;padding:15px}.info-grid strong{display:block;margin-top:6px;overflow-wrap:anywhere;font-size:var(--text-ui)}.filters{display:flex;justify-content:space-between;align-items:center;gap:12px}.filter-controls{display:flex;flex:1 1 auto;align-items:center;gap:8px;min-width:0}.search-box,.filters select,.filter-input{height:var(--control-h);border:1px solid var(--line-strong);border-radius:4px;background:var(--surface);color:var(--ink);font-size:var(--text-control)}.search-box{display:flex;align-items:center;gap:8px;min-width:260px;padding:0 10px;color:var(--muted)}.search-box input{min-width:0;width:100%;height:100%;border:0;outline:0}.filters select,.filter-input,.pagination select{line-height:var(--control-h)}.filters select,.filter-input,.pagination select{padding:0 10px}.bulk-actions{display:flex;flex:0 0 auto;align-items:center;min-height:var(--control-h);gap:8px}.bulk-count{min-width:72px;color:var(--muted);font-size:var(--text-control)}.danger-action{color:var(--danger)}.table-wrap{min-width:0;border:0;border-radius:0;background:transparent;overflow-x:hidden}.data-table{width:100%;min-width:0;table-layout:fixed;border-collapse:collapse}.data-table th,.data-table td{padding:9px 12px;border-bottom:1px solid #ededed;overflow:hidden;text-align:left;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;font-size:var(--text-control);line-height:1.25}.data-table th.align-center,.data-table td.align-center{padding-right:8px;padding-left:8px}.data-table th{color:var(--muted-strong);background:var(--surface-hover);font-size:var(--text-caption);font-weight:700}.data-table th:last-child,.data-table td:last-child{padding-right:10px;padding-left:8px}.data-table .align-center{text-align:center}.data-table .align-right{text-align:right}.truncate-cell{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.data-table tbody tr:hover{background:var(--surface-muted)}.table-checkbox{position:relative;display:inline-grid;place-content:center;width:14px;height:14px;margin:0;border:1px solid var(--line-strong);border-radius:3px;background:var(--surface);color:var(--surface);-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle}.table-checkbox:hover{border-color:#bdbdbd}.table-checkbox:focus{outline:1px solid var(--ink);outline-offset:2px}.table-checkbox:checked,.table-checkbox.is-indeterminate{border-color:var(--ink);background:var(--ink)}.table-checkbox:checked:after{width:4px;height:8px;border-right:1.5px solid var(--surface);border-bottom:1.5px solid var(--surface);content:"";transform:translateY(-1px) rotate(45deg)}.table-checkbox.is-indeterminate:after{width:8px;height:1.5px;border-radius:999px;background:var(--surface);content:""}.empty-cell{height:72px;color:var(--muted);text-align:center!important}.tag-list{display:flex;flex-wrap:nowrap;gap:5px;max-width:100%;min-width:0;overflow:hidden}.tag{display:inline-flex;align-items:center;flex:0 0 auto;max-width:min(132px,100%);min-width:0;min-height:22px;padding:0 7px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface-hover);color:#404040;font-size:var(--text-caption);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tag.success{background:var(--surface);color:var(--ink)}.status-tag{display:inline-flex;align-items:center;justify-content:center;min-width:42px;min-height:22px;padding:0 8px;border:1px solid transparent;border-radius:999px;font-size:var(--text-caption);font-weight:700;line-height:1;white-space:nowrap}.status-enabled{border-color:#b7e2c4;background:#edf8f0;color:#1d7f37}.status-disabled{border-color:#efd79b;background:#fff8e8;color:#9a5b00}.channel-test-status-success{border-color:#b7e2c4;background:#edf8f0;color:#1d7f37}.channel-test-status-failed{border-color:#f0b8b2;background:#fff5f4;color:#9f1f13}.channel-test-status-idle{border-color:var(--line-strong);background:var(--surface);color:var(--muted-strong)}.tag-more{flex:0 0 auto;max-width:none;border-style:dashed;background:var(--surface);color:var(--muted-strong);font-weight:700;cursor:help}.tag.muted,.muted-text{color:var(--muted)}.row-actions{display:flex;align-items:center;flex-wrap:nowrap;gap:6px;width:100%;min-width:0}.data-table td.align-right .row-actions{justify-content:flex-end}.channel-test-grid{align-content:start}.channel-test-grid .table-wrap{overflow-x:auto}.channel-test-table{min-width:720px}.channel-test-table td{vertical-align:middle}.pagination{display:flex;justify-content:flex-end;align-items:center;gap:8px;color:var(--muted);font-size:var(--text-control)}.pagination select{height:var(--control-h);border:1px solid var(--line-strong);border-radius:4px;background:var(--surface);color:var(--ink);font-size:var(--text-control)}.drawer-shell{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50}.drawer-mask{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;border:0;background:#00000057}.drawer{position:absolute;top:0;right:0;width:min(100vw,640px);height:100%;max-width:100vw;display:flex;flex-direction:column;background:var(--surface);border-left:1px solid var(--line)}.drawer-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:var(--shell-bar-h);padding:0 18px;border-bottom:1px solid var(--line)}.drawer-header h2{margin:0;font-size:16px;line-height:1.2}.drawer-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:var(--shell-bar-h);padding:0 18px;border-top:1px solid var(--line)}.drawer-body{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:100%}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;gap:12px;flex:1 1 auto;min-height:0;padding:16px 18px;overflow:auto}.field{display:grid;gap:6px}.field-row-label{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:var(--control-h)}.field>span{color:var(--muted-strong);font-size:var(--text-control);font-weight:600}.field-row-label>span{color:var(--muted-strong);font-size:var(--text-control);font-weight:600}.field input,.field select,.field textarea,.binding-row input,.binding-row select,.binding-row textarea{width:100%;min-width:0;border:1px solid #d4d4d4;border-radius:4px;background:#fff;color:#171717}.field input,.field select,.binding-row input,.binding-row select{height:var(--control-h);padding:0 10px}.field textarea,.binding-row textarea{padding:10px;resize:vertical}.models-textarea{min-height:150px;line-height:1.5}.inline-code{margin:0;min-height:var(--control-h);padding:8px 10px;overflow:auto;border:1px solid var(--line-strong);border-radius:4px;background:var(--surface-muted);color:var(--ink);font-size:var(--text-control);line-height:1.4}.span-2{grid-column:1 / -1}.advanced-json{min-width:0;padding-top:2px}.advanced-json summary{display:flex;align-items:center;min-height:34px;color:var(--ink);font-size:var(--text-control);font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.advanced-json summary::marker{color:var(--muted)}.advanced-json-grid{display:grid;gap:12px;padding-top:8px}.advanced-json:not([open]) .advanced-json-grid{display:none}.advanced-json-grid .field{grid-column:1 / -1}.check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}.model-check-grid{max-height:280px;overflow:auto;padding-right:2px}.model-mapping-grid{display:grid;gap:8px;min-width:0}.model-mapping-head,.model-mapping-row{display:grid;grid-template-columns:minmax(180px,1fr) minmax(0,1fr);align-items:center;gap:10px}.model-mapping-head{min-height:28px;color:var(--text-muted);font-size:12px}.model-mapping-row input{min-width:0;height:34px}.model-mapping-row code{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:7px 9px;border:1px solid var(--line);border-radius:6px;background:var(--surface-muted);color:var(--text)}.check-field{display:grid;grid-template-columns:16px minmax(0,1fr);align-items:center;gap:9px;min-width:0;min-height:34px;padding:0 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface-muted);cursor:pointer}.check-field:hover{border-color:var(--line-strong);background:var(--surface-hover)}.check-field:has(input:checked){border-color:#bdbdbd;background:#fff}.check-field input{width:16px;height:16px;min-width:16px;margin:0;accent-color:var(--ink)}.check-field span{min-width:0;overflow:hidden;color:var(--ink);font-size:var(--text-control);line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.binding-list{display:grid;gap:12px}.binding-row{display:grid;grid-template-columns:repeat(6,minmax(0,1fr)) 38px;gap:8px;padding:12px;border:1px solid var(--line);border-radius:4px;background:var(--surface-muted)}.alert{padding:12px 14px}.alert.error{border-color:#f0b8b2;background:#fff5f4;color:#9f1f13}.alert.success{border-color:#b7e2c4;background:#edf8f0;color:#176f31}.settings-layout{display:grid;grid-template-columns:minmax(360px,560px) minmax(260px,360px);align-items:start;gap:14px}.settings-main-column{display:grid;gap:14px;min-width:0}.settings-panel{display:grid;gap:14px;min-width:0;padding:16px;border:1px solid var(--line);border-radius:4px;background:var(--surface)}.settings-panel-head{display:flex;align-items:flex-start;gap:10px;min-width:0}.settings-panel-head>div{min-width:0}.settings-panel-head svg{flex:0 0 auto;margin-top:2px}.settings-panel-head h2{margin:0;color:var(--ink-strong);font-size:15px;line-height:1.25}.settings-panel-head span{display:block;margin-top:4px;color:var(--muted);font-size:var(--text-control)}.settings-panel-head .settings-status{display:inline-flex;flex:0 0 auto;margin:1px 0 0 auto;font-size:var(--text-caption)}.settings-panel-head .settings-status.status-enabled{color:#1d7f37}.settings-panel-head .settings-status.status-disabled{color:#9a5b00}.settings-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.settings-form-grid .field:first-child{grid-column:1 / -1}.settings-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:2px}.settings-actions-split{justify-content:space-between}.settings-key-row{display:grid;grid-template-columns:minmax(0,1fr) 32px;align-items:center;gap:8px;min-width:0}.settings-key-row input{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,monospace}.settings-key-row .icon-btn{width:34px;height:var(--control-h)}.btn.danger-btn{border-color:#f1c4c0;background:snow;color:var(--danger)}.btn.danger-btn:hover{border-color:#e5a7a1;background:#fff4f3;color:#8f1d14}.settings-note{gap:13px}.settings-meta-list{display:grid;gap:0;margin:0}.settings-meta-list div{display:grid;grid-template-columns:minmax(92px,120px) minmax(0,1fr);gap:12px;min-height:36px;align-items:center;border-top:1px solid var(--line)}.settings-meta-list dt,.settings-meta-list dd{margin:0;min-width:0;font-size:var(--text-control)}.settings-meta-list dt{color:var(--muted)}.settings-meta-list dd{overflow-wrap:anywhere;color:var(--ink);font-weight:600}.code-block{margin:0;padding:14px;overflow:auto;border:1px solid var(--line);border-radius:4px;background:var(--ink);color:var(--surface-hover)}.image-result-field{min-height:0}.image-result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;min-height:220px}.image-result-card{display:grid;grid-template-rows:minmax(220px,1fr) auto;min-height:260px;margin:0;overflow:hidden;border:1px solid var(--line);border-radius:4px;background:#fff}.image-result-card img{width:100%;height:100%;min-height:220px;display:block;object-fit:contain;background:linear-gradient(45deg,#f5f5f5 25%,transparent 25%),linear-gradient(-45deg,#f5f5f5 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#f5f5f5 75%),linear-gradient(-45deg,transparent 75%,#f5f5f5 75%);background-color:#fff;background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.image-result-card figcaption{min-height:30px;padding:8px 10px;border-top:1px solid var(--line);color:var(--muted-strong);font-size:var(--text-caption);font-weight:600;line-height:1.2}.page-loading{padding:18px;color:var(--muted)}a:focus-visible,button:focus-visible{outline:2px solid #171717;outline-offset:2px}input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--ink);outline:0;box-shadow:none}input:focus,select:focus,textarea:focus{border-color:var(--ink);outline:0;box-shadow:none}.filters select:hover,.filter-input:hover,.pagination select:hover,.field input:hover,.field select:hover,.field textarea:hover,.binding-row input:hover,.binding-row select:hover,.binding-row textarea:hover{border-color:#bdbdbd}.filters select:focus,.filter-input:focus,.pagination select:focus,.field input:focus,.field select:focus,.field textarea:focus,.binding-row input:focus,.binding-row select:focus,.binding-row textarea:focus{border-color:var(--ink);outline:0;box-shadow:none}.search-box:focus-within{border-color:var(--ink)}.search-box input:focus-visible{outline:0}@media(max-width:980px){:root{--shell-bar-h: 48px}.admin-shell{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}.sidebar{grid-column:1;grid-row:1;position:sticky;top:0;z-index:20;display:flex;min-height:auto;padding:0}.sidebar nav{display:flex;overflow-x:auto;padding:10px 8px;margin:0}.main{grid-column:1;grid-row:2}.sidebar a{flex:0 0 auto}.sidebar-footer{display:none}.metric-grid,.info-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.login-shell,.settings-layout{grid-template-columns:1fr}.login-shell{width:min(100%,420px)}.login-context{min-height:auto;border-right:0;border-bottom:1px solid var(--line)}.binding-row{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.page-head{align-items:stretch;flex-direction:column}.search-box,.filters select,.filter-input{width:100%}.content{padding:0 16px 16px}.metric-grid,.info-grid,.form-grid,.check-grid,.settings-form-grid{grid-template-columns:1fr}.settings-actions{justify-content:stretch}.settings-actions-split{display:grid;grid-template-columns:1fr}.settings-actions .btn{width:100%}.pagination{justify-content:flex-start;flex-wrap:wrap}}
