:root{
  --red:#A32D2D; --red-d:#7A1F1F; --gold:#C9A24B;
  --c-common:#2F6FED; --c-contrib:#D99A2B; --c-neg:#D85A30;
  --ink:#1a1a1a; --mut:#6a6a6a; --line:#e4e0d6; --bg:#faf8f3; --card:#fff;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);
  font:14px/1.6 -apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
.app-header{background:linear-gradient(135deg,var(--red),var(--red-d));color:#fff;
  padding:calc(env(safe-area-inset-top) + 16px) 18px 14px}
.brand{font-size:22px;font-weight:800;letter-spacing:2px}
.sub{font-size:11px;opacity:.85;margin-top:2px}

main{padding:14px 14px 90px;max-width:680px;margin:0 auto}
.tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;background:#fff;
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:30}
.tabbar button{flex:1;background:none;border:0;padding:12px 0;font-size:13px;color:var(--mut)}
.tabbar button.active{color:var(--red);font-weight:700}
#fab{position:fixed;right:18px;bottom:calc(env(safe-area-inset-bottom) + 64px);
  width:52px;height:52px;border-radius:50%;border:0;background:var(--red);color:#fff;
  font-size:26px;line-height:1;box-shadow:0 4px 14px rgba(163,45,45,.4);z-index:31}

.sec-title{font-size:13px;color:var(--mut);margin:4px 2px 10px;font-weight:600}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.chip{border:1px solid var(--line);background:#fff;border-radius:20px;padding:5px 13px;font-size:12px;color:var(--ink)}
.chip.active{background:var(--red);color:#fff;border-color:var(--red)}

.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px;margin-bottom:11px;
  box-shadow:0 1px 3px rgba(0,0,0,.04)}
.card h3{margin:0 0 6px;font-size:15px;line-height:1.4}
.meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:8px}
.pill{font-size:11px;padding:2px 9px;border-radius:20px;color:#fff;font-weight:600}
.pill.common{background:var(--c-common)} .pill.contribution{background:var(--c-contrib)} .pill.negative{background:var(--c-neg)}
.st{font-size:11px;padding:2px 9px;border-radius:6px;border:1px solid}
.loc{font-size:11px;color:var(--mut)}
.desc{font-size:13px;color:#333;margin:6px 0 0}

.theory-list .card{display:flex;justify-content:space-between;align-items:center}
.theory-list .card a{color:var(--red);text-decoration:none;font-size:13px;font-weight:600}

.empty{text-align:center;color:var(--mut);padding:40px 0;font-size:13px}

/* modal */
.mask{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:40;display:flex;align-items:flex-end;justify-content:center}
.sheet{background:#fff;width:100%;max-width:680px;border-radius:16px 16px 0 0;max-height:88vh;overflow:auto;
  padding:18px 18px calc(env(safe-area-inset-bottom) + 18px)}
.sheet h2{margin:0 0 10px;font-size:18px}
.field{margin-bottom:12px}
.field label{display:block;font-size:12px;color:var(--mut);margin-bottom:4px}
.field input,.field textarea,.field select{width:100%;border:1px solid var(--line);border-radius:8px;
  padding:9px 10px;font:14px/1.4 inherit;background:#fff}
.field textarea{min-height:84px;resize:vertical}
.btn{background:var(--red);color:#fff;border:0;border-radius:9px;padding:11px 16px;font-size:14px;font-weight:700;width:100%}
.btn.ghost{background:#fff;color:var(--red);border:1px solid var(--red)}
.row{display:flex;gap:10px}.row .btn{flex:1}
.hash{font:12px/1.5 ui-monospace,monospace;background:#f3f0e8;border:1px dashed var(--line);
  border-radius:8px;padding:9px;word-break:break-all;color:#444;margin-top:6px}
.info{font-size:13px;color:#333;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:11px}
.info b{color:var(--red)}
.mono{font:12px/1.5 ui-monospace,monospace;word-break:break-all}
.close{float:right;font-size:22px;color:var(--mut);background:none;border:0;line-height:1}
