:root{--brand:#9e0000;--brand-2:#c41616;--accent:#9e0000;--bg:#f3f4f6;--panel:#fff;--text:#15171c;--muted:#636a76;--line:#e1e4e9;--ok:#18a058;--warn:#e0a100;--bad:#e53935;--radius:12px;--shadow:0 1px 3px #00000014, 0 4px 14px #0000000d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#0f1115;--panel:#181b21;--text:#e9ebef;--muted:#9aa1ad;--line:#2a2f38;--accent:#ff7b7b;--shadow:0 1px 3px #00000080;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-tap-highlight-color:transparent;overscroll-behavior:none;font:15px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}[hidden]{display:none!important}button{font:inherit;color:inherit}#app{flex-direction:column;min-height:100%;display:flex}main{flex-direction:column;flex:1;width:100%;max-width:1100px;min-height:0;margin:0 auto;display:flex}.top{z-index:20;padding:6px 8px;padding-top:max(6px, env(safe-area-inset-top));background:var(--brand);color:#fff;align-items:center;gap:6px;display:flex;position:sticky;top:0}.brand{color:#fff;flex:1;align-items:center;gap:8px;min-width:0;font-weight:700;text-decoration:none;display:flex}.brand img{border-radius:7px;width:28px;height:28px}.top .icon-btn{color:#fff}.sync{color:#fff;cursor:pointer;white-space:nowrap;background:#ffffff2e;border:0;border-radius:16px;align-items:center;gap:4px;padding:4px 10px;font-size:13px;font-weight:600;display:flex}.sync.pending{color:#111;background:#e0a100}.sync.offline{background:#3a3f48}.sync.error{color:var(--bad);background:#fff}.sync.syncing span:first-child{animation:1s linear infinite spin;display:inline-flex}@keyframes spin{to{transform:rotate(360deg)}}.btn{border:1px solid var(--line);background:var(--panel);min-height:42px;color:var(--text);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-weight:500;text-decoration:none;display:inline-flex}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.danger{color:var(--bad);border-color:color-mix(in srgb, var(--bad) 40%, var(--line))}.btn.small{min-height:34px;padding:4px 10px;font-size:14px}.btn.big{min-height:52px;padding:12px 22px;font-size:17px;font-weight:700}.btn.on{background:color-mix(in srgb, var(--brand) 14%, var(--panel));border-color:var(--brand)}.icon-btn{cursor:pointer;width:42px;height:42px;color:var(--text);background:0 0;border:0;border-radius:10px;flex:none;place-items:center;display:inline-grid}.icon-btn:hover{background:color-mix(in srgb, var(--text) 8%, transparent)}.icon-btn.on{background:var(--brand);color:#fff}.icon-btn:disabled{opacity:.35}.fab{right:max(16px, env(safe-area-inset-right));bottom:max(18px, env(safe-area-inset-bottom));background:var(--brand);color:#fff;cursor:pointer;z-index:15;border:0;border-radius:50%;place-items:center;width:58px;height:58px;display:grid;position:fixed;box-shadow:0 6px 18px #00000040}.view{flex-direction:column;gap:8px;min-height:0;padding:10px;display:flex}.vh{margin:6px 4px;font-size:18px}.empty{color:var(--muted);text-align:center;padding:24px 12px}.hint{color:var(--muted);font-size:13px}.warn{color:var(--bad);margin:4px 0;font-size:14px}.grow{flex:1;min-width:0}.row{align-items:center;gap:8px;display:flex}.row>.inp{flex:1}.row-end{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:10px;display:flex}.stack{flex-direction:column;gap:8px;margin:10px 0;display:flex}.inp{border:1px solid var(--line);background:var(--panel);width:100%;color:var(--text);font:inherit;border-radius:10px;min-height:42px;padding:10px 12px}.inp.small{width:auto;min-height:34px;padding:4px 8px}textarea.inp{resize:vertical}.f-label{color:var(--muted);margin:12px 0 4px;font-size:13px;font-weight:600;display:block}.f-help{color:var(--muted);margin-bottom:4px;font-size:12px}.req{color:var(--bad)}.check-row{align-items:center;gap:8px;margin:8px 0;display:flex}.cards{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px;display:grid}.card{text-align:left;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);box-shadow:var(--shadow);cursor:pointer;padding:14px}.card-title{font-size:16px;font-weight:700}.card-sub{color:var(--muted);margin-top:2px;font-size:13px}.line-title{align-items:center;gap:2px;display:flex}.lt-code{text-overflow:ellipsis;white-space:nowrap;font-size:18px;font-weight:800;overflow:hidden}.lt-name{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.lt-meta{color:var(--muted);font-size:12px}.progress{background:var(--line);border-radius:4px;height:8px;display:flex;overflow:hidden}.progress span{height:100%;display:block}.filters{scrollbar-width:none;align-items:center;gap:6px;padding-bottom:2px;display:flex;overflow-x:auto}.filters::-webkit-scrollbar{display:none}.fchip{border:1px solid var(--line);background:var(--panel);cursor:pointer;white-space:nowrap;border-radius:16px;flex:none;align-items:center;gap:5px;padding:5px 11px;font-size:13px;display:inline-flex}.fchip.on{background:var(--text);color:var(--panel);border-color:var(--text)}.fchip .dot{background:var(--c);border-radius:50%;width:9px;height:9px}.fchip:disabled{opacity:.45}.search{border:1px solid var(--line);background:var(--panel);min-width:90px;color:var(--text);font:inherit;border-radius:16px;flex:1 0 90px;padding:6px 10px;font-size:13px}.lines{flex-direction:column;gap:6px;padding-bottom:80px;display:flex}.line-card{text-align:left;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);cursor:pointer;flex-direction:column;gap:6px;padding:10px 12px;display:flex}.line-card.mine{border-left:5px solid var(--brand)}.line-card.pending{border-style:dashed}.lc-top{align-items:baseline;gap:8px;display:flex}.lc-code{font-weight:800}.lc-name{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.lc-count{font-variant-numeric:tabular-nums;margin-left:auto;font-size:14px;font-weight:600}.line-view{padding-bottom:0}.pts{background:var(--panel);border-radius:var(--radius);border:1px solid var(--line);-webkit-user-select:none;user-select:none;flex-direction:column;margin-bottom:120px;display:flex;overflow:hidden}.pt{border-bottom:1px solid var(--line);cursor:pointer;touch-action:pan-y;align-items:center;gap:8px;min-height:52px;padding:6px 8px 6px 12px;display:flex}.pt:last-child{border-bottom:0}.pt.sel{background:color-mix(in srgb, var(--brand) 12%, var(--panel))}.pt.pending .pt-name:after{content:" •";color:var(--warn)}.check{border:2px solid var(--muted);border-radius:6px;flex:none;place-items:center;width:24px;height:24px;display:grid}.check.on{background:var(--brand);border-color:var(--brand);color:#fff}.pt-main{flex:1;min-width:0}.pt-name{font-variant-numeric:tabular-nums;font-weight:700}.pt-sub{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.pt-icons{color:var(--muted);align-items:center;gap:4px;font-size:12px;display:flex}.mini{align-items:center;gap:1px;display:inline-flex}.mini.pend{color:var(--warn)}.pt-status{border:1px solid var(--line);cursor:pointer;background:var(--c);min-width:78px;max-width:42%;min-height:36px;color:var(--fg);text-overflow:ellipsis;white-space:nowrap;border-radius:18px;flex:none;padding:4px 10px;font-size:13px;font-weight:700;overflow:hidden}.pt-wrap{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--text) 4%, var(--panel))}.pt-wrap>.pt{border-bottom:0}.pt-wrap .status-row{padding:0 8px 8px}.status-row{grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:6px;display:grid}.status-row.big .status-btn{min-height:54px;font-size:16px}.status-btn{border:2px solid var(--c);background:color-mix(in srgb, var(--c) 18%, var(--panel));min-height:44px;color:var(--text);cursor:pointer;border-radius:10px;padding:4px 6px;font-weight:700}.status-btn.on{background:var(--c);color:var(--fg)}.selbar{z-index:18;background:var(--panel);border-top:1px solid var(--line);padding:8px 10px max(8px, env(safe-area-inset-bottom));flex-direction:column;gap:8px;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -6px 20px #0000001f}.selbar-top{flex-wrap:wrap;align-items:center;gap:6px;font-weight:700;display:flex}.selbar .row-end{margin-top:0}.selbar .btn.primary{flex:1}.fields,.f-row{flex-direction:column;display:flex}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:20px;min-height:40px;padding:6px 14px}.chip.on{background:var(--brand);border-color:var(--brand);color:#fff}.thumbs{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.thumb{object-fit:cover;border:1px solid var(--line);cursor:pointer;border-radius:8px;width:72px;height:72px}.pmeta{color:var(--muted);margin-bottom:8px;font-size:13px}.lastnote{background:color-mix(in srgb, var(--warn) 14%, var(--panel));border-radius:8px;margin-top:10px;padding:8px 10px;font-size:14px}.history{flex-direction:column;gap:6px;margin-top:10px;display:flex}.hrow{border:1px solid var(--line);border-radius:8px;padding:8px;font-size:13px}.hrow-top{color:var(--muted);margin-bottom:2px}.hv{margin-right:10px}.hc{margin-top:3px;font-style:italic}.sheet-wrap{z-index:40;background:#0006;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{background:var(--panel);border-radius:16px 16px 0 0;flex-direction:column;width:100%;max-width:640px;max-height:92vh;display:flex;box-shadow:0 -8px 30px #00000040}.sheet.wide{max-width:900px}.sheet-head{align-items:center;gap:8px;padding:8px 8px 0 14px;display:flex}.sheet-title{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:17px;font-weight:800;overflow:hidden}.sheet-body{padding:6px 14px max(14px, env(safe-area-inset-bottom));overflow:auto}.sticky-bottom{background:var(--panel);border-top:1px solid var(--line);margin-top:12px;padding:8px 0;position:sticky;bottom:0}@media (min-width:900px){.sheet-wrap{justify-content:flex-end;align-items:stretch}.sheet{border-radius:0;max-width:460px;height:100%;max-height:none}}.map-view{flex:1;padding:0;position:relative}.map-view .line-title{background:var(--panel);border-bottom:1px solid var(--line);padding:6px 8px}.map{flex:1;min-height:60vh}.map-tools{gap:2px;display:flex}.map-banner{background:var(--text);color:var(--panel);text-align:center;padding:8px 12px;font-size:14px}.tabs{scrollbar-width:none;border-bottom:1px solid var(--line);gap:4px;display:flex;overflow-x:auto}.tab{cursor:pointer;color:var(--muted);background:0 0;border:0;border-bottom:3px solid #0000;flex:none;padding:10px 12px;font-weight:600}.tab.on{color:var(--accent);border-bottom-color:var(--accent)}.admin-body{padding-bottom:60px}.form{flex-direction:column;gap:6px;display:flex}.mlist,.ltable{border:1px solid var(--line);background:var(--panel);border-radius:10px;flex-direction:column;max-height:50vh;display:flex;overflow:hidden auto}.mrow,.lrow{border-bottom:1px solid var(--line);align-items:center;gap:8px;min-height:44px;padding:6px 10px;display:flex}.fb-list{flex-direction:column;gap:8px;display:flex}.fb-field{border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:8px}.fb-row{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.fb-row .inp.grow{flex:140px}.fb-opts{border-left:3px solid var(--line);flex-direction:column;gap:4px;margin-top:6px;padding-left:8px;display:flex}.fb-opt{align-items:center;gap:4px;display:flex}.fb-opt input[type=color]{background:0 0;border:0;width:40px;height:36px;padding:0}.drop{border:2px dashed var(--line);text-align:center;color:var(--muted);border-radius:12px;padding:18px}.drop.over{border-color:var(--brand);color:var(--brand)}.summary{margin:8px 0;font-weight:700}.login{flex:1;place-items:center;min-height:100%;padding:16px;display:grid}.login-card{background:var(--panel);box-shadow:var(--shadow);text-align:center;border-radius:18px;width:100%;max-width:380px;padding:28px 22px}.login-logo{border-radius:16px;width:72px;height:72px}.login-card p{color:var(--muted)}.toast{left:50%;bottom:max(90px, env(safe-area-inset-bottom));z-index:60;color:#fff;background:#222;border-radius:10px;max-width:calc(100% - 24px);padding:10px 16px;position:fixed;transform:translate(-50%);box-shadow:0 6px 20px #0000004d}.toast.undo{align-items:center;gap:12px;display:flex}.toast.undo .btn{color:#111;background:#fff}@media (max-width:340px){.brand span{display:none}.view{padding:6px}.pt{gap:6px;padding-left:8px}.pt-status{min-width:64px;font-size:12px}.status-row{grid-template-columns:repeat(2,1fr)}}
