/* 服务测试台 · 正式页样式（提取自 docs/ui.html v3 定稿，暖纸 token + 明暗跟随系统） */
:root{color-scheme:light;
--bg:#FBF5F1;--card:#FFFFFF;--ink:#3B2E27;--muted:#71645C;--fill:#E9E0DA;--ribbon:#A94636;--line:#E5DAD3;
--danger:#C32922;
--ok:#27753C;--ok-bg:rgba(39,117,60,.12);--err-bg:rgba(195,41,34,.10);
--code-bg:#F8F1EB;--j-s:#4E6E45;--j-n:#8A5A2B;--ribbon-tint:rgba(169,70,54,.09);
--btn:#A94636;--btn-hi:#8F3D2E;--sel-ink:#A94636;
--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Segoe UI",sans-serif;
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}
@media(prefers-color-scheme:dark){:root{color-scheme:dark;
--bg:#1A1512;--card:#2B221D;--ink:#F2EAE4;--muted:#C0AEA2;--fill:#241E19;--ribbon:#D1735E;--line:#514239;
--danger:#FF8278;
--ok:#63C174;--ok-bg:rgba(99,193,116,.16);--err-bg:rgba(255,130,120,.14);
--code-bg:#221B16;--j-s:#A3C98E;--j-n:#E0B483;--ribbon-tint:rgba(209,115,94,.16);
--btn:#B0584A;--btn-hi:#9E4D40;--sel-ink:#E8927E}}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.65 var(--sans);display:flex;flex-direction:column}
button,select,input{font:inherit;color:inherit}button{cursor:pointer}
button:active{opacity:.75}button:disabled{cursor:default}
a{color:var(--ribbon)}a:hover{text-decoration:underline}
:focus-visible{outline:3px solid var(--ribbon);outline-offset:3px}
.skip{position:fixed;left:16px;top:-100px;z-index:30;background:var(--card);padding:12px}.skip:focus{top:12px}

/* ===== 页头 ===== */
.app-head{height:54px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 20px;border-bottom:1px solid var(--line);background:var(--card)}
.ah-title{font-size:16px;font-weight:650}
.ah-sub{font-size:12px;color:var(--muted);margin-left:10px}
.ah-right{display:flex;align-items:center;gap:14px;font-size:12.5px}
.auth{display:inline-flex;align-items:center;gap:6px}
.auth .dot{width:7px;height:7px;border-radius:50%;background:var(--ok)}
.auth.bad .dot{background:var(--danger)}
.link{color:var(--ribbon);text-decoration:none}

/* ===== 三栏 ===== */
.panes{flex:1;display:flex;min-height:0}
.pane-s{width:206px;background:var(--card);border-right:1px solid var(--line);padding:12px 10px;overflow:auto}
.pane-f{width:272px;background:var(--card);border-right:1px solid var(--line);padding:12px 10px;overflow:auto}
.pane-t{flex:1;overflow:auto;padding:18px 22px}
.pane-s,.pane-f,.pane-t{overscroll-behavior:contain}
.pane-title{font-size:11px;font-weight:650;letter-spacing:.08em;color:var(--muted);padding:2px 8px 8px}
.srow,.frow{display:block;width:100%;text-align:left;background:none;border:0;padding:9px 10px;border-radius:10px}
.srow:hover,.frow:hover{background:var(--fill)}
.srow.sel,.frow.sel{background:var(--ribbon-tint)}
.sname{font:600 13px var(--mono)}
.srow.sel .sname,.frow.sel .fname{color:var(--sel-ink)}
.sdesc{font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.45}
.fname{font-size:13.5px;font-weight:600}
.fpath{display:flex;align-items:center;gap:6px;margin-top:5px}
.m{font:600 10px/1 var(--mono);letter-spacing:.04em;padding:3px 6px;border-radius:5px;background:var(--fill);color:var(--ink);flex-shrink:0}
.fpath code{font:11px var(--mono);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fdesc{font-size:11.5px;color:var(--muted);margin-top:4px;line-height:1.45}
.pane-empty{margin-top:38%;text-align:center;color:var(--muted);font-size:12.5px;line-height:1.7;padding:0 12px}
.tp-empty{margin:110px auto;text-align:center;max-width:340px}
.tp-empty strong{font-size:14.5px;font-weight:650;display:block;margin-bottom:6px}
.tp-empty p{font-size:12.5px;color:var(--muted);margin:0}

/* ===== 测试区组件 ===== */
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:14px}
.fn-head{margin:2px 0 14px}
.fn-title-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.fn-title-row h4{margin:0;font-size:15.5px}
.auth-note{font-size:11.5px;color:var(--muted)}
.fn-head .fdesc{margin:7px 0 9px;font-size:12.5px;color:var(--muted)}
.req-line{display:flex;align-items:center;gap:8px}
.req-line code{font:12px var(--mono);color:var(--ink)}
.field{display:block;margin-bottom:13px}
.flabel{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;margin-bottom:6px}
.req{font-size:10.5px;font-weight:600;color:var(--ribbon);background:var(--ribbon-tint);padding:2px 6px;border-radius:5px}
.field input{width:100%;max-width:420px;font-size:13px;line-height:1.4;padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--card);color:var(--ink)}
.field input:focus-visible{outline:2px solid var(--ribbon);outline-offset:1px}
.no-param{font-size:12.5px;color:var(--muted);margin:0}
.form-foot{display:flex;align-items:center;gap:12px;margin-top:4px;flex-wrap:wrap}
.send{background:var(--btn);color:#fff;border:0;border-radius:9px;min-height:38px;padding:8px 18px;font-size:13.5px;font-weight:600}
.send:hover:not(:disabled){background:var(--btn-hi)}
.send:disabled{opacity:.45}
.form-hint{font-size:11.5px;color:var(--muted);margin:0}
.resp-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.chip{font:650 12px var(--mono);padding:4px 9px;border-radius:7px}
.chip.ok{color:var(--ok);background:var(--ok-bg)}
.chip.err{color:var(--danger);background:var(--err-bg)}
.ms{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.resp-tag{font-size:11.5px;color:var(--muted);margin-left:auto}
.resp-hint{font-size:12px;color:var(--muted);margin:0 0 10px;line-height:1.6;max-width:none}
.resp-hint.err-t{color:var(--danger)}
.resp-loading{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
pre.json{margin:0;background:var(--code-bg);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font:12px/1.6 var(--mono);overflow:auto;max-height:340px}
.j-k{color:var(--ink);font-weight:600}.j-s{color:var(--j-s)}.j-n{color:var(--j-n)}.j-b{color:var(--muted);font-style:italic}
.covers{display:flex;gap:16px;margin-top:12px;flex-wrap:wrap}
.cover img{display:block;width:96px;border-radius:4px;border:1px solid var(--line)}
.cover figcaption{margin-top:5px;font:10.5px/1.5 var(--mono);color:var(--muted);max-width:110px;word-break:break-all}
.task .t-top{display:flex;align-items:center;gap:9px;font-size:13.5px;flex-wrap:wrap}
.task .t-top strong{font-weight:650}
.task.success .t-top strong{color:var(--ok)}
.task.failed .t-top strong{color:var(--danger)}
.tid{font:11px var(--mono);color:var(--muted);background:var(--fill);padding:2px 7px;border-radius:5px}
.t-dur{margin-left:auto;font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.t-desc{font-size:12.5px;color:var(--muted);margin:8px 0 0;line-height:1.6}
.t-meta{font-size:11.5px;color:var(--muted);margin-top:8px;font-variant-numeric:tabular-nums}
.t-reason{font-size:12.5px;color:var(--danger);margin:8px 0 0;line-height:1.6}
.t-reason .m{margin-right:6px}
.task pre.json{margin-top:10px;max-height:260px}
.task .covers{margin-top:10px}
.btn-ghost{background:var(--card);border:1px solid var(--line);border-radius:9px;min-height:36px;padding:7px 14px;font-size:13px;color:var(--ribbon);margin-top:10px}
.btn-ghost:hover{border-color:var(--ribbon)}
.spinner{display:inline-block;width:15px;height:15px;border:2px solid var(--fill);border-top-color:var(--ribbon);border-radius:50%;animation:spin .8s linear infinite;flex-shrink:0}
.spinner.mini{width:12px;height:12px;border-color:rgba(255,255,255,.4);border-top-color:#fff;vertical-align:-1px;margin-right:7px}
@keyframes spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.spinner{animation:none}}
@media(forced-colors:active){.card,.chip{border:1px solid CanvasText}.srow.sel,.frow.sel{outline:2px solid CanvasText;outline-offset:-2px}}
@media(max-width:860px){.pane-s{width:150px}.pane-f{width:210px}.pane-t{padding:14px}}
