:root{--bg:#f4f1ea;--card:#fffdf8;--ink:#1d1b16;--mute:#7a7466;--line:#e2dccd;--acc:#0f766e;--up:#059669;--dn:#e11d48}
.dark{--bg:#0b0f0e;--card:#121816;--ink:#e7efe9;--mute:#7f918a;--line:#1f2a27;--acc:#2dd4bf;--up:#34d399;--dn:#fb7185}
body{font-family:Vazirmatn,sans-serif;background:var(--bg);color:var(--ink);
background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:40px 40px;background-attachment:fixed}
.card{background:var(--card);border:1px solid var(--line);border-radius:1rem}
.mono{font-family:'JetBrains Mono',monospace;direction:ltr;unicode-bidi:isolate}
.mute{color:var(--mute)}.up{color:var(--up)}.dn{color:var(--dn)}.acc{color:var(--acc)}
.inp{background:var(--bg);border:1px solid var(--line);border-radius:.6rem;padding:.45rem .7rem;width:100%;color:var(--ink)}
.inp:focus{outline:2px solid var(--acc)}
.btn{border-radius:.6rem;padding:.45rem .9rem;font-weight:700;border:1px solid var(--line);transition:.15s}
.btn:hover{transform:translateY(-1px)}.btn:disabled{opacity:.5}
.btn-acc{background:var(--acc);color:#04201c;border-color:transparent}
.btn-red{background:#dc2626;color:#fff;border-color:transparent}
th{font-weight:700;color:var(--mute);font-size:.75rem;padding:.6rem .5rem;text-align:right;white-space:nowrap}
td{padding:.55rem .5rem;border-top:1px solid var(--line);white-space:nowrap;font-size:.85rem}
.flash-up{animation:fu .7s}.flash-dn{animation:fd .7s}
@keyframes fu{0%{background:rgba(16,185,129,.35)}100%{background:transparent}}
@keyframes fd{0%{background:rgba(244,63,94,.35)}100%{background:transparent}}
.rise{animation:rise .5s both}@keyframes rise{from{opacity:0;transform:translateY(10px)}}
.skel{background:linear-gradient(90deg,var(--line),var(--card),var(--line));background-size:200%;animation:sk 1.2s infinite;border-radius:.5rem}
@keyframes sk{to{background-position:-200% 0}}
.spin{width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;display:inline-block;animation:sp .7s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
.pulse{animation:pl 1.2s infinite}@keyframes pl{50%{opacity:.6}}