:root{--bg:#0B1326;--pn:#131D35;--pn2:#1A2643;--ln:#2A3655;--tx:#EEF2F8;--mu:#97A3BA;--g:#8FB647;--o:#FF8A3D;--r:#FF6B6B;--b:#4EA8FF}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:var(--bg);color:var(--tx);font:15px/1.5 -apple-system,"PingFang SC","Noto Sans CJK SC","Microsoft YaHei",sans-serif}
body.noscroll{overflow:hidden}
button{font:inherit;color:inherit;cursor:pointer}
a{color:var(--g)}
.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:10px;padding:10px 12px;padding-top:max(10px,env(safe-area-inset-top));background:rgba(11,19,38,.96);border-bottom:1px solid var(--ln);backdrop-filter:blur(6px)}
.top img{width:38px;height:38px}
.top .tt{flex:1;min-width:0;display:flex;flex-direction:column}
.top .tt b{font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .tt small{color:var(--g);font-size:11px;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.back{background:none;border:0;font-size:30px;line-height:1;padding:0 8px 4px 0;color:var(--g)}
.sync{border:1px solid var(--ln);background:var(--pn);border-radius:16px;padding:5px 10px;font-size:12px;white-space:nowrap;max-width:46vw;overflow:hidden;text-overflow:ellipsis}
.sync.ok{color:var(--g);border-color:#3c5226}.sync.busy{color:#ffd28a}.sync.err{color:var(--r);border-color:#5a2b2b}.sync.local{color:var(--mu)}
.wrap{max-width:760px;margin:0 auto;padding:12px 12px 90px}
.hint{color:var(--mu);font-size:13px;margin:4px 2px 12px}
h2{font-size:16px;margin:20px 2px 8px;color:var(--g)}h2 small{color:var(--mu);font-weight:400;font-size:12px;margin-left:6px}
.card{background:var(--pn);border:1px solid var(--ln);border-radius:14px;padding:12px;margin-bottom:10px}
.card.empty{color:var(--mu);text-align:center;padding:22px}
.cards{display:grid;gap:10px}
@media(min-width:700px){.cards{grid-template-columns:1fr 1fr}}
.card.app{display:flex;align-items:center;gap:12px;width:100%;text-align:left;margin:0}
.card.app .ic{font-size:30px;width:52px;height:52px;display:flex;align-items:center;justify-content:center;background:var(--pn2);border-radius:12px;flex:none}
.card.app .bd{flex:1;min-width:0;display:flex;flex-direction:column}
.card.app b{font-size:17px}.card.app b small{color:var(--mu);font-weight:400;font-size:12px}
.card.app .url{color:var(--mu);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card.app .cnt{font-size:13px}.chev{color:var(--mu);font-size:24px}
em.pend{color:var(--o);font-style:normal;font-weight:700}em.ok{color:var(--g);font-style:normal}
.btn{background:var(--pn2);border:1px solid var(--ln);border-radius:12px;padding:11px 14px;font-size:15px}
.btn.p{background:var(--g);border-color:var(--g);color:#0B1326;font-weight:700}
.btn.d{background:#3a1d22;border-color:#6a2c33;color:#ffb3b3}
.btn.w{width:100%;margin-top:10px;display:block}
.btn.dash{border-style:dashed;color:var(--g);background:transparent}
.btn.sm{padding:7px 10px;font-size:13px}
.btn.pend{border-color:var(--o);color:var(--o)}
.btn:disabled{opacity:.4}
.row,.row2{display:flex;gap:8px;margin-top:12px}.row .btn{flex:1}.row2 .btn.w{flex:1;margin-top:0}.row2{margin-top:10px}
.ver{color:#5d6a84;font-size:11px;text-align:center;margin-top:24px}
.info a{word-break:break-all;font-size:13px}.info p{margin:6px 0 0;color:#c9d2e2;font-size:14px}
.legend{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12px;color:var(--mu);margin:2px 2px 0}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.legend i.dash{width:16px;height:0;border-top:2px dashed;border-radius:0;vertical-align:3px}.legend i.o{border-color:var(--o)}.legend i.b{border-color:var(--b)}
.chart{background:#0E1730;border:1px solid var(--ln);border-radius:14px;padding:6px 0;overflow:hidden}
.chart svg{display:block;width:100%;height:auto}
.node:active rect:first-child{fill:#1d2a4a}
.step{position:relative;cursor:pointer;transition:box-shadow .3s}
.step.pending{border-color:var(--o);box-shadow:inset 3px 0 0 var(--o)}
.step.flash{animation:fl 1.2s}@keyframes fl{0%,40%{box-shadow:0 0 0 3px var(--g)}100%{box-shadow:none}}
.step.dragging{opacity:.85;z-index:3;box-shadow:0 8px 24px rgba(0,0,0,.5)}
.step.dropline{outline:2px dashed var(--g)}
.step .sh{display:flex;align-items:center;gap:8px}
.step .num{width:26px;height:26px;border-radius:50%;color:#0B1326;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:13px;flex:none}
.step .sh b{flex:1;font-size:16px}
.tag{font-size:11px;border-radius:9px;padding:1px 8px;font-weight:700;white-space:nowrap}.tag.pend{background:var(--o);color:#1a0f05}.tag.ok{background:#24361a;color:var(--g)}
.drag{font-size:22px;color:var(--mu);padding:0 4px 0 10px;touch-action:none;cursor:grab;user-select:none}
.meta{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px 34px;font-size:12px}
.who{border:1px solid;border-radius:10px;padding:0 8px}.pg{color:#c9d2e2}
.what{white-space:pre-line;margin:6px 0 0 34px;font-size:14px;color:#dfe5ef}
.note{white-space:pre-line;margin:6px 0 0 34px;font-size:13px;color:#ffd28a}
.lnk{margin:4px 0 0 34px;font-size:13px;color:var(--o)}
.chg{margin:6px 0 0 34px;font-size:12px;color:var(--o)}
.shots{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0 34px}
.shots button{padding:0;border:1px solid var(--ln);border-radius:8px;overflow:hidden;background:#000;width:64px;height:64px}
.shots img{width:100%;height:100%;object-fit:cover;display:block}
.shots.ed{margin:4px 0 8px}.shots.ed span{position:relative;width:72px;height:72px;border-radius:8px;overflow:hidden;border:1px solid var(--ln)}
.shots.ed span button{position:absolute;top:2px;right:2px;width:22px;height:22px;border-radius:50%;background:rgba(0,0,0,.7);border:0;font-size:12px}
.shots.ed .add{width:72px;height:72px;border:1px dashed var(--g);border-radius:8px;background:none;color:var(--g);font-size:13px}
img.miss{background:repeating-linear-gradient(45deg,#222 0 6px,#333 6px 12px)}
.act{display:flex;gap:6px;margin:10px 0 0 34px}
.act button{background:var(--pn2);border:1px solid var(--ln);border-radius:10px;padding:6px 10px;font-size:13px}
.act button.p{margin-left:auto;border-color:var(--g);color:var(--g)}
.act button:disabled{opacity:.3}
.sheet{position:fixed;inset:0;z-index:20}
.sheet .bg{position:absolute;inset:0;background:rgba(0,0,0,.55)}
.sheet .pn{position:absolute;left:0;right:0;bottom:0;max-height:92vh;overflow:auto;background:var(--pn);border-radius:18px 18px 0 0;padding:14px 14px max(16px,env(safe-area-inset-bottom));max-width:760px;margin:0 auto;animation:up .18s}
@keyframes up{from{transform:translateY(40px);opacity:.4}}
.sheet h3{display:flex;align-items:center;justify-content:space-between;margin:0 0 10px;font-size:17px}
.sheet .x{background:none;border:0;font-size:20px;color:var(--mu);padding:4px 8px}
.sheet label{display:block;font-size:13px;color:var(--mu);margin-top:10px}
.sheet .lbl{font-size:13px;color:var(--mu);margin-top:12px}.lbl small{color:#5d6a84}
input,textarea,select{width:100%;margin-top:4px;background:#0E1730;border:1px solid var(--ln);border-radius:10px;color:var(--tx);font:inherit;font-size:16px;padding:10px}
textarea{resize:vertical}
input:focus,textarea:focus,select:focus{outline:2px solid var(--g);border-color:transparent}
.two{display:flex;gap:8px}.two label{flex:1}
.chk{display:flex!important;align-items:center;gap:8px;color:var(--tx)!important}.chk input{width:auto;margin:0}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.chips button{background:var(--pn2);border:1px solid var(--ln);border-radius:16px;padding:6px 12px;font-size:14px}
.chips button.on{background:var(--g);color:#0B1326;border-color:var(--g);font-weight:700}
.lk{display:flex;gap:6px;align-items:center;margin-top:6px}.lk select{flex:2}.lk input{flex:1;min-width:0}.lk button{background:none;border:0;color:var(--r);font-size:18px;padding:6px}
.big{width:100%;border-radius:10px}
.sum{display:flex;gap:16px;align-items:baseline}.sum b{font-size:20px}.sum b.pend{color:var(--o)}.sum b.ok{color:var(--g)}.sum span{color:var(--mu)}
.grp h3{font-size:15px;margin:16px 2px 6px;color:var(--tx)}
.chgi{background:var(--pn);border:1px solid var(--ln);border-left:3px solid var(--o);border-radius:10px;padding:10px;margin-bottom:8px}
.chgi.isdone{border-left-color:var(--g);opacity:.85}
.chgi .h{display:flex;justify-content:space-between;gap:8px}.chgi .h span{color:var(--mu);font-size:12px;white-space:nowrap}
.chgi .mu,.mu{color:var(--mu);font-size:13px}
.old,.new{white-space:pre-line;font-size:13px;border-radius:8px;padding:6px 8px 6px 30px;margin-top:6px;position:relative}
.old{background:#2a1619;color:#f2b8b8;text-decoration:line-through;text-decoration-color:rgba(242,184,184,.5)}
.new{background:#17271a;color:#cde8b4}
.old i,.new i{position:absolute;left:8px;top:6px;font-style:normal;font-size:11px;font-weight:700;text-decoration:none}
.dn{color:var(--g);font-size:12px;margin-top:6px}
details.done{margin-top:18px}details.done summary{color:var(--g);cursor:pointer;padding:8px 2px}
#expT{font-family:ui-monospace,Menlo,monospace;font-size:12px;line-height:1.45}
.login{max-width:360px;margin:0 auto;padding:60px 24px;text-align:center}
.login img{width:110px}.login h1{margin:10px 0 0;font-size:26px}.login .co{color:var(--g);font-size:12px;letter-spacing:.5px;margin:4px 0 18px}
.login input{text-align:center;font-size:24px;letter-spacing:8px;margin:14px 0 4px}
.login .err{color:var(--r);min-height:22px}
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(20px);background:#22314f;color:#fff;border:1px solid var(--ln);padding:10px 16px;border-radius:20px;font-size:14px;opacity:0;pointer-events:none;transition:.2s;z-index:30;max-width:90vw}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
