:root{
  --bg:#fbfafd;--panel:#fff;--ink:#28272d;--muted:#737278;--line:#dcdcde;--soft:#f0f0f2;
  --brand:#6b4fbb;--brand-ink:#fff;--link:#1f75cb;
  --add-bg:#ecfdf0;--add-hl:#c7f0d2;--del-bg:#fbe9eb;--del-hl:#fac5cd;--hot:#fff4d6;
  --open:#c17d10;--fixed:#1f75cb;--reopened:#dd2b0e;--resolved:#108548;
  --must:#dd2b0e;--should:#c17d10;--question:#6b4fbb;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#18171d;--panel:#1f1e24;--ink:#ececef;--muted:#a4a3a8;--line:#3a383f;--soft:#28272d;
  --brand:#9475db;--link:#63a6e9;
  --add-bg:#0d2b1a;--add-hl:#145c33;--del-bg:#3a1418;--del-hl:#6b1f27;--hot:#3a3215;
  --open:#e9be74;--fixed:#63a6e9;--reopened:#f57f6c;--resolved:#52b87a;
  --must:#f57f6c;--should:#e9be74;--question:#ac93e6;color-scheme:dark;
}}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",sans-serif}
a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}
code{font-family:var(--mono);font-size:12.5px;background:var(--soft);padding:1px 4px;border-radius:4px}
h1{font-size:22px;margin:8px 0 6px}h2{font-size:16px;margin:0 0 4px}
.muted{color:var(--muted)}.small{font-size:12.5px}.inline{display:inline}.pad{padding:12px 16px;margin:0}
.top{position:sticky;top:0;z-index:10;display:flex;gap:16px;align-items:center;padding:8px 16px;
  padding-top:calc(8px + env(safe-area-inset-top,0px));background:var(--panel);border-bottom:1px solid var(--line)}
.brand{font-weight:700;color:var(--ink)}.crumbs{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.crumbs .sep{margin:0 6px;color:var(--muted)}.right{display:flex;gap:8px;align-items:center}
.who{display:flex;gap:6px;align-items:center}
main{max-width:1500px;margin:0 auto;padding:16px}
.avatar{--h:260;display:inline-flex;align-items:center;justify-content:center;flex:none;width:28px;height:28px;border-radius:50%;
  background:hsl(var(--h) 55% 88%);color:hsl(var(--h) 45% 30%);font-size:11px;font-weight:700}
@media (prefers-color-scheme:dark){.avatar{background:hsl(var(--h) 35% 30%);color:hsl(var(--h) 60% 88%)}}
.btn{border:1px solid var(--line);background:var(--panel);color:var(--ink);border-radius:6px;padding:5px 12px;font:inherit;cursor:pointer}
.btn:hover{background:var(--soft)}.btn.small{padding:2px 8px;font-size:12.5px}.btn.ghost{border-color:transparent}
.btn.primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}
.btn.ok{background:var(--resolved);border-color:var(--resolved);color:#fff}
.btn.warn{color:var(--reopened);border-color:var(--reopened)}
.btn:disabled{opacity:.5;cursor:wait}
.tag{display:inline-block;border:1px solid var(--line);border-radius:12px;padding:0 8px;font-size:12px;color:var(--muted)}
.tag.ok{color:var(--resolved);border-color:var(--resolved)}
.st{display:inline-block;border-radius:12px;padding:0 8px;font-size:12px;font-weight:600;color:#fff}
.st-open{background:var(--open)}.st-fixed{background:var(--fixed)}.st-reopened{background:var(--reopened)}.st-resolved{background:var(--resolved)}
.cat{display:inline-block;border-radius:4px;padding:0 6px;font-size:12px;font-weight:600;border:1px solid currentColor}
.cat-must-fix{color:var(--must)}.cat-should-fix{color:var(--should)}.cat-question{color:var(--question)}.cat-note{color:var(--muted)}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.card{display:block;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px;color:var(--ink)}
.card:hover{border-color:var(--brand);text-decoration:none}
.stats{display:flex;gap:16px;flex-wrap:wrap;margin:8px 0}
.pg{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--soft);min-width:120px;margin:4px 0}
.pg i{display:block}.pg-open{background:var(--open)}.pg-fixed{background:var(--fixed)}.pg-reopened{background:var(--reopened)}.pg-resolved{background:var(--resolved)}
.pg-txt{font-size:12px;color:var(--muted)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:16px 0 12px;flex-wrap:wrap}
.tabs a{padding:8px 12px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs a.on{color:var(--ink);border-color:var(--brand);font-weight:600}.tabs a:hover{text-decoration:none;color:var(--ink)}
.cnt{display:inline-block;background:var(--soft);border-radius:10px;padding:0 6px;font-size:12px;color:var(--muted)}
.filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0 12px;font-size:13px;color:var(--muted)}
.filters a{padding:2px 8px;border-radius:12px;border:1px solid var(--line)}.filters a.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.filters .btn{margin-left:auto}
.scroll{overflow-x:auto}
table.list{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);border-radius:8px}
.list th,.list td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.list th{font-size:12px;color:var(--muted);font-weight:600}.br{font-family:var(--mono);font-weight:600}.pgc{min-width:220px}
.mr-head{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:12px 16px}
.mr-meta{display:flex;gap:8px;flex-wrap:wrap;align-items:center;font-size:13px}.mr-progress{margin-top:8px;max-width:520px}
.note{display:flex;gap:10px;padding:10px 12px;border-top:1px solid var(--line)}
.note.first{border-top:0}.note .nb{min-width:0;flex:1}.note p{margin:4px 0}
.note.sys{background:var(--soft)}.note.sync{background:var(--soft);font-size:13px}
.note.big{background:var(--panel);border:1px solid var(--line);border-radius:8px;margin-bottom:16px}
.meta{font-size:13px}
.thread{background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--open);border-radius:8px;margin:0 0 12px;overflow:hidden}
.thread.s-fixed{border-left-color:var(--fixed)}.thread.s-reopened{border-left-color:var(--reopened)}.thread.s-resolved{border-left-color:var(--resolved)}
.th-head{display:flex;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--soft);flex-wrap:wrap}
.th-title{font-weight:600;flex:1;min-width:0}.loc{font-family:var(--mono);font-size:12.5px}
.tgl{border:0;background:none;color:var(--muted);cursor:pointer;display:inline-flex;padding:2px;transition:transform .15s}
.thread.collapsed .th-body{display:none}.thread.collapsed .tgl{transform:rotate(-90deg)}
.also{font-size:12.5px;color:var(--muted);margin-top:6px}
.reply{padding:10px 12px;border-top:1px solid var(--line)}
.reply textarea{width:100%;font:inherit;border:1px solid var(--line);border-radius:6px;padding:6px 8px;background:var(--bg);color:var(--ink);resize:vertical}
.reply .row{display:flex;gap:8px;justify-content:flex-end;margin-top:6px;flex-wrap:wrap}
.reply .msg{color:var(--reopened);font-size:12.5px;margin-right:auto}
.changes{display:grid;grid-template-columns:260px minmax(0,1fr);gap:16px;align-items:start}
.ftree{position:sticky;top:56px;max-height:calc(100vh - 72px);overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:8px}
.fl{display:block;padding:4px 6px;border-radius:4px;color:var(--ink);font-size:13px}
.fmeta{display:flex;gap:8px;justify-content:flex-end;align-items:center}
.fl:hover{background:var(--soft);text-decoration:none}.fname{display:block;font-family:var(--mono);font-size:12px;word-break:break-all}
.fl-U .fname{color:var(--muted);font-style:italic}
.file{background:var(--panel);border:1px solid var(--line);border-radius:8px;margin-bottom:16px;overflow:hidden}
.fh{display:flex;gap:8px;align-items:center;padding:8px 12px;background:var(--soft);border-bottom:1px solid var(--line);flex-wrap:wrap;position:sticky;top:45px;z-index:2}
.fh code{background:none;word-break:break-all}.file.collapsed .fb{display:none}.file.collapsed .tgl{transform:rotate(-90deg)}
.fst{font-size:11px;text-transform:uppercase;font-weight:700;color:var(--muted)}.fst-A{color:var(--resolved)}.fst-D{color:var(--reopened)}
.add{color:var(--resolved);font-size:12.5px}.del{color:var(--reopened);font-size:12.5px}
.side-cap{display:grid;grid-template-columns:1fr 1fr;font-size:12px;color:var(--muted);border-bottom:1px solid var(--line)}
.side-cap span{padding:4px 12px}.side-cap span+span{border-left:1px solid var(--line)}.side-cap.one{grid-template-columns:1fr}
table.diff{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:12px;table-layout:fixed;min-width:900px}
.diff td{padding:0 8px;vertical-align:top;white-space:pre-wrap;word-break:break-all;line-height:1.55}
.diff td.ln{text-align:right;color:var(--muted);user-select:none;background:var(--soft)}
.diff td.code+td.ln{border-left:1px solid var(--line)}
.diff td.d{background:var(--del-bg)}.diff td.a{background:var(--add-bg)}
.diff tr.chg td.d{background:var(--del-hl)}.diff tr.chg td.a{background:var(--add-hl)}
.diff tr.hot td.code:last-child{box-shadow:inset 3px 0 var(--brand)}.diff tr.hot td.ln{color:var(--brand);font-weight:700}
.diff tr.gap td{background:var(--soft);color:var(--muted);text-align:center;font-family:inherit;padding:2px}
.diff tr.inl>td{padding:8px 12px;white-space:normal;word-break:normal;background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:14px}
.diff tr.inl .thread{margin:0;max-width:980px}
.login{max-width:360px;margin:12vh auto;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:24px;display:grid;gap:12px}
.login label{display:grid;gap:4px;font-size:13px;color:var(--muted)}
.login input{font:inherit;padding:8px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink)}
.err{color:var(--reopened);margin:0}.empty{padding:24px;text-align:center}
@media (max-width:900px){.changes{grid-template-columns:1fr}.ftree{position:static;max-height:220px}.fh{position:static}}
.diff col.c-ln{width:52px}.diff col.c-code{width:auto}
.ic{width:12px;height:12px;vertical-align:-1px}
