:root{--bg:#f6f7f9;--panel:#fff;--ink:#1d2433;--muted:#5d6779;--line:#dfe3ea;--accent:#2f5bea;--accent-ink:#fff;--ok:#1f8a4c;--warn:#b7791f;--bad:#c53030;--radius:8px;color:var(--ink);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{margin:0;font-size:15px;line-height:1.45}a{color:var(--accent)}header.top{background:var(--ink);color:#fff;align-items:center;gap:1rem;padding:.6rem 1.2rem;display:flex}header.top a{color:#fff;text-decoration:none}header.top .brand{font-weight:700}header.top .spacer{flex:1}main{max-width:1280px;margin:0 auto;padding:1.2rem}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:1rem;padding:1rem 1.2rem}h1{margin:0 0 .8rem;font-size:1.45rem}h2{margin:0 0 .6rem;font-size:1.15rem}h3{margin:.6rem 0 .4rem;font-size:1rem}table{border-collapse:collapse;width:100%;font-size:.92rem}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:.45rem .5rem}th{color:var(--muted);white-space:nowrap;font-weight:600}button,.btn{border:1px solid var(--line);color:var(--ink);font:inherit;cursor:pointer;background:#fff;border-radius:6px;align-items:center;gap:.3rem;padding:.4rem .8rem;text-decoration:none;display:inline-flex}button.primary,.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}button.danger{color:var(--bad);border-color:#f0c4c4}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font:inherit;border:1px solid var(--line);background:#fff;border-radius:6px;max-width:100%;padding:.4rem .5rem}textarea{width:100%}label{margin-bottom:.6rem;display:block}label>span{color:var(--muted);margin-bottom:.15rem;font-size:.85rem;display:block}.row{flex-wrap:wrap;align-items:flex-end;gap:.8rem;display:flex}.grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.8rem;display:grid}.muted{color:var(--muted)}.small{font-size:.85rem}.badge{color:var(--muted);white-space:nowrap;background:#eef1f6;border-radius:999px;padding:.05rem .45rem;font-size:.78rem;display:inline-block}.badge.ok{color:var(--ok);background:#e3f5ea}.badge.warn{color:var(--warn);background:#fdf3e1}.badge.bad{color:var(--bad);background:#fde8e8}.flash{background:#e8eefc;border-radius:6px;margin-bottom:1rem;padding:.6rem .9rem}.flash.error{color:var(--bad);background:#fde8e8}.card{border:1px solid var(--line);border-radius:var(--radius);background:#fff;flex-direction:column;display:flex;overflow:hidden}.card img{aspect-ratio:16/10;object-fit:contain;background:#f0f2f5;width:100%}.card .body{padding:.6rem .75rem;font-size:.88rem}.thumb{object-fit:contain;background:#f0f2f5;border-radius:4px;width:56px;height:56px}.portrait{object-fit:cover;border-radius:50%;width:40px;height:40px}dl.kv{grid-template-columns:max-content 1fr;gap:.2rem .8rem;margin:0;display:grid}dl.kv dt{color:var(--muted)}dl.kv dd{word-break:break-word;margin:0}.copy{align-items:center;gap:.4rem;display:flex}.copy input{flex:1;font-family:ui-monospace,monospace;font-size:.82rem}.tabs{flex-wrap:wrap;gap:.3rem;margin-bottom:1rem;display:flex}.tabs a{color:var(--ink);border:1px solid var(--line);background:#fff;border-radius:6px;padding:.35rem .8rem;text-decoration:none}.tabs a.active{background:var(--ink);color:#fff;border-color:var(--ink)}.missing{color:var(--warn);font-style:italic}.err{color:var(--bad)}progress{width:100%}pre.log{color:#d6dbe5;white-space:pre-wrap;background:#10151f;border-radius:6px;max-height:220px;padding:.6rem;font-size:.78rem;overflow:auto}
