:root{--bg:#0f1115;--panel:#181b22;--line:#2a2f3a;--text:#eef0f4;--muted:#a9b0bd;--brand:#7cc4ff;--pri:#2f6fed;--pri-text:#fff;--ok:#5ad27c;--warn:#ff9b9b;--free:#1f5f36;--paid:#5c3d10}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
a{color:var(--brand)}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #ffd166;outline-offset:2px}
.wrap{max-width:960px;margin:0 auto;padding:0 16px}.skip{position:absolute;left:-999px}.skip:focus{left:8px;top:8px;background:#fff;color:#000;padding:8px;z-index:9}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.top{border-bottom:1px solid var(--line);background:var(--panel)}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:12px;padding-bottom:12px;flex-wrap:wrap}
.brand{font-weight:700;font-size:1.15rem;color:var(--text);text-decoration:none}nav a{margin-left:12px}
.btn{display:inline-block;padding:8px 14px;border-radius:8px;border:1px solid var(--line);background:#222733;color:var(--text);text-decoration:none;font:inherit;cursor:pointer;min-height:40px}
.btn:hover{border-color:var(--brand)}.btn-primary{background:var(--pri);border-color:var(--pri);color:var(--pri-text)}.btn.small{padding:4px 10px;min-height:32px;font-size:.9rem}.btn.danger{border-color:#a33;color:#ffb3b3}
.hero h1{margin:24px 0 4px;font-size:1.7rem}.hero p{color:var(--muted);margin:0 0 16px}
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.filters input[type=search]{flex:1 1 220px}
input,select,textarea{font:inherit;color:var(--text);background:#0b0d11;border:1px solid #4a5263;border-radius:8px;padding:8px 10px;min-height:40px;max-width:100%}
.check{display:inline-flex;gap:6px;align-items:center;cursor:pointer}.check input{min-height:auto}
.tagbar{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 16px}.tag{display:inline-block;padding:2px 10px;border-radius:999px;border:1px solid var(--line);background:#1d2230;color:var(--text);text-decoration:none;font-size:.9rem}.tag.on{background:var(--pri);border-color:var(--pri)}
.tags{list-style:none;padding:0;margin:6px 0;display:flex;flex-wrap:wrap;gap:6px}
.cards{list-style:none;padding:0;margin:0;display:grid;gap:12px}.card{display:flex;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px}
.card-body{min-width:0;flex:1}.card-title{font-size:1.1rem;margin:0}.card-title a{color:var(--text)}.desc{margin:4px 0;color:#d7dbe3;overflow-wrap:anywhere}
.meta{color:var(--muted);font-size:.9rem;margin:4px 0}.muted{color:var(--muted)}.small{font-size:.85rem}.stars{color:#ffd166}
.badge{font-size:.75rem;padding:2px 8px;border-radius:999px;vertical-align:middle;font-weight:600}.badge.free{background:var(--free);color:#d6ffe2}.badge.paid{background:var(--paid);color:#ffe7c2}
.vote{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:48px}.vbtn{width:40px;height:36px;border-radius:8px;border:1px solid var(--line);background:#222733;color:var(--muted);cursor:pointer;font-size:1rem}
.vbtn.up[aria-pressed=true]{background:#1f5f36;color:#d6ffe2;border-color:#2f8f50}.vbtn.down[aria-pressed=true]{background:#6b2222;color:#ffd6d6;border-color:#a33}.score{font-weight:700}
.detail{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:24px}.detail-head{display:flex;gap:16px}.detail h1{margin:0;font-size:1.5rem;overflow-wrap:anywhere}.desc-lg{font-size:1.05rem;overflow-wrap:anywhere;white-space:pre-wrap}
.break{overflow-wrap:anywhere;word-break:break-all}code{background:#0b0d11;padding:1px 4px;border-radius:4px}
.reviews{list-style:none;padding:0;display:grid;gap:10px}.review{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px}.review .body{margin:4px 0;white-space:pre-wrap;overflow-wrap:anywhere}
.stack{display:flex;flex-direction:column;gap:6px;max-width:560px}.stack button{align-self:flex-start;margin-top:8px}.narrow{max-width:360px}
fieldset{border:1px solid var(--line);border-radius:8px;padding:8px 12px;display:flex;flex-wrap:wrap;gap:12px}.starpick label{cursor:pointer;display:inline-flex;gap:4px;align-items:center;white-space:nowrap}.req{color:var(--muted);font-weight:400;font-size:.85rem}
.hp{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
.errors{border:1px solid #a33;background:#2a1414;color:#ffd6d6;border-radius:8px;padding:8px 12px;margin:8px 0}.flash{border:1px solid #2f8f50;background:#12291a;color:#d6ffe2;border-radius:8px;padding:8px 12px;margin-top:16px}
.empty{text-align:center;padding:32px;border:1px dashed var(--line);border-radius:12px}.pager{display:flex;gap:8px;justify-content:center;margin:16px 0}
.tablewrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{border-bottom:1px solid var(--line);padding:6px;text-align:left;vertical-align:top}.inline{display:inline-flex;gap:4px;margin:0}
.foot{border-top:1px solid var(--line);margin-top:40px;color:var(--muted);font-size:.85rem;padding:12px 0}
@media (max-width:560px){nav a{margin-left:8px}.hero h1{font-size:1.4rem}.detail-head{flex-direction:column-reverse}.detail-head .vote{flex-direction:row}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}