:root{--bg:#fff;--surface:#fbf8f6;--surface-2:#f5f0ec;--ink:#2a1e1a;--ink-2:#3e302b;--dim:#857770;--faint:#a89b94;--line:#ede6e1;--line-2:#ddd3cb;--accent:#d9480f;--accent-deep:#9a3412;--accent-soft:#fff0e6;--accent-line:#f6c2a3;--ok:#1f9d6a;--ok-bg:#e9f7f0;--ok-line:#bee6d2;--warn:#9a6710;--warn-bg:#fff6e6;--warn-line:#f0d9a8;--bad:#b4232c;--bad-bg:#fbe9ea;--bad-line:#f0bcc0;--serif:"Songti SC", "STSong", "Noto Serif CJK SC", "Source Han Serif SC", "SimSun", serif;--sans:-apple-system, BlinkMacSystemFont, "PingFang SC", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--r:12px;--r-sm:8px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--surface);color:var(--ink);font:15px/1.6 var(--sans);-webkit-font-smoothing:antialiased;margin:0}button,input,select{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--accent-deep)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}h1,h2{font-family:var(--serif);margin:0;font-weight:700;line-height:1.3}h1{font-size:24px}h2{margin-bottom:10px;font-size:18px}.topbar{z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);background:#fbf8f6f2;align-items:center;gap:16px;height:56px;padding:0 16px;display:flex;position:sticky;top:0}.brand{font-family:var(--serif);color:var(--ink);font-size:17px;text-decoration:none}.brand span{font-family:var(--sans);color:var(--dim);margin-left:6px;font-size:12px}.nav{align-items:center;gap:4px;margin-left:auto;display:flex}.nav a,.nav button{border-radius:var(--r-sm);color:var(--ink-2);background:0 0;border:0;padding:6px 10px;font-size:14px;text-decoration:none}.nav a:hover,.nav button:hover{background:var(--surface-2)}.nav a[aria-current=page]{color:var(--accent-deep);background:var(--accent-soft);font-weight:600}.user{position:relative}.user-btn{color:var(--ink-2);background:0 0;border:0;border-radius:999px;align-items:center;gap:6px;padding:4px 6px;font-size:14px;display:flex}.user-btn:hover{background:var(--surface-2)}.avatar{background:var(--accent);color:#fff;border-radius:50%;place-items:center;width:28px;height:28px;font-size:13px;display:grid}.caret{color:var(--dim);font-size:10px}.menu{z-index:20;background:var(--bg);border:1px solid var(--line);border-radius:var(--r-sm);min-width:168px;padding:6px;display:grid;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 28px #2a1e1a24}.menu a,.menu button{color:var(--ink-2);text-align:left;background:0 0;border:0;border-radius:6px;padding:10px 12px;font-size:14px;text-decoration:none}.menu a:hover,.menu button:hover{background:var(--surface-2)}.menu-who{border-bottom:1px solid var(--line);margin-bottom:4px;padding:6px 12px 8px;font-weight:600;display:grid}main{max-width:1120px;margin:0 auto;padding:20px 16px 60px}.card{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);margin-bottom:16px;padding:18px}.hint{color:var(--dim);font-size:13px}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.grow{flex:1;min-width:0}.btn{border-radius:var(--r-sm);border:1px solid var(--line-2);background:var(--bg);padding:8px 14px;font-size:14px}.btn:hover{border-color:var(--accent-line)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-deep)}.btn.small{padding:4px 10px;font-size:13px}.btn:disabled{opacity:.5;cursor:default}.input{border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--bg);min-width:0;padding:8px 10px}.input:focus{border-color:var(--accent);outline:none}.drop{border:2px dashed var(--line-2);border-radius:var(--r);text-align:center;background:var(--bg);padding:28px 16px;transition:border-color .15s,background .15s}.drop.over{border-color:var(--accent);background:var(--accent-soft)}.drop p{margin:6px 0}.pick{justify-content:center;margin:10px 0}.batch-note{color:var(--ink-2);gap:4px;margin-top:14px;font-size:14px;display:grid}.queue{margin:14px 0 0;padding:0;list-style:none}.queue li{border-top:1px solid var(--line);padding:12px 0}.q-head{align-items:center;gap:8px;display:flex}.q-size{white-space:nowrap;font-variant-numeric:tabular-nums}.queue .name{word-break:break-all;font-weight:600}.queue .path{color:var(--faint);word-break:break-all;font-size:12px}.queue .input{width:100%;margin-top:6px;padding:6px 8px;font-size:13px}.q-note{color:var(--ink-2);word-break:break-all;margin-top:2px;font-size:13px}.q-actions{margin-top:6px}.btn.plain-btn{color:var(--dim);border-color:#0000}.progress{margin-top:8px}.bar{background:var(--surface-2);border-radius:4px;height:8px;position:relative;overflow:hidden}.bar i{background:var(--accent);border-radius:4px;height:100%;transition:width .3s ease-out;display:block}.bar.hashing i{background:var(--accent-line)}.bar.uploading i,.bar.finishing i,.batch-bar.running .bar i{background-image:linear-gradient(45deg,#ffffff40 25%,#0000 25% 50%,#ffffff40 50% 75%,#0000 75%);background-size:16px 16px;animation:.8s linear infinite stripes}.bar.done i,.bar.duplicate i,.batch-bar.ok .bar i{background-color:var(--ok)}.bar.error i,.batch-bar.bad .bar i{background-color:var(--bad)}@keyframes stripes{0%{background-position:0 0}to{background-position:16px 0}}.progress-text{color:var(--dim);font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:center;gap:2px 12px;margin-top:5px;font-size:13px;display:flex}.progress-text b{color:var(--ink);font-weight:600}.batch-bar{z-index:4;padding:10px 18px calc(10px + env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-top:1px solid var(--line);background:#fffffff5;margin:12px -18px 0;position:sticky;bottom:0;box-shadow:0 -4px 14px #2a1e1a0f}.batch-bar .bar{border-radius:5px;height:10px}.batch-bar .progress-text{font-size:14px}@media (prefers-reduced-motion:reduce){.bar i{transition:none;animation:none!important}}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:8px 6px}th{color:var(--dim);font-size:13px;font-weight:500}td.num{white-space:nowrap;color:var(--dim);font-size:13px}.table-wrap{overflow-x:auto}.badge{border:1px solid var(--line-2);background:var(--surface);white-space:nowrap;border-radius:10px;padding:1px 8px;font-size:12px;display:inline-block}.badge.ok{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-line)}.badge.warn{color:var(--warn);background:var(--warn-bg);border-color:var(--warn-line)}.badge.bad{color:var(--bad);background:var(--bad-bg);border-color:var(--bad-line)}.badge.run{color:var(--accent-deep);background:var(--accent-soft);border-color:var(--accent-line)}.error{color:var(--bad);font-size:13px}.meta{grid-template-columns:max-content 1fr;gap:4px 16px;margin:12px 0;font-size:14px;display:grid}.meta dt{color:var(--dim)}.meta dd{word-break:break-all;margin:0}.mono{font-family:var(--mono);font-size:12px}.passages{margin:0;padding:0;list-style:none}.passages li{border-top:1px solid var(--line);grid-template-columns:110px 1fr;gap:12px;padding:8px 0;display:grid}.passages .loc{font-family:var(--mono);color:var(--dim);font-size:12px}.passages .h{font-weight:700}.passages .table{white-space:pre-wrap;font-family:var(--mono);font-size:12px}.tabs{border-bottom:1px solid var(--line);scrollbar-width:none;gap:4px;margin-bottom:16px;display:flex;overflow-x:auto}.tabs button{color:var(--dim);white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;flex:none;padding:8px 14px}.tabs button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}.login{max-width:360px;margin:12vh auto 0}.login form{gap:12px;display:grid}.login label{color:var(--ink-2);gap:4px;font-size:14px;display:grid}@media (max-width:640px){.passages li{grid-template-columns:1fr;gap:2px}.hide-phone{display:none}}.filters{margin-top:10px}.filters .input{font-size:14px}.date,.check{color:var(--ink-2);align-items:center;gap:6px;font-size:14px;display:inline-flex}.library{margin:0;padding:0;list-style:none}.library>li{border-top:1px solid var(--line);padding:14px 0}.lib-title{word-break:break-all;flex-wrap:wrap;align-items:center;gap:6px 8px;font-weight:600;display:flex}.lib-note{color:var(--ink-2);word-break:break-all;margin-top:2px;font-size:14px}.snippets{margin:8px 0 0;padding:0;list-style:none}.snippets a{border-radius:var(--r-sm);color:var(--ink-2);grid-template-columns:96px 1fr;gap:10px;padding:6px 8px;font-size:14px;text-decoration:none;display:grid}.snippets a:hover{background:var(--surface-2)}.snippets .loc{font-family:var(--mono);color:var(--dim);padding-top:2px;font-size:12px}.pager{justify-content:center;margin-top:14px}mark{background:var(--accent-soft);color:var(--accent-deep);border-radius:2px;padding:0 1px}.passages li.hit{background:var(--accent-soft);border-radius:var(--r-sm)}.held{color:var(--warn);margin:8px 0 0;font-size:14px}button.link{color:var(--accent-deep);font-size:inherit;background:0 0;border:0;padding:0;text-decoration:underline}@media (max-width:640px){.snippets a{grid-template-columns:1fr;gap:0}.filters>*{flex:calc(50% - 8px)}.date .input{flex:1;min-width:0}.brand span{display:none}.nav a,.nav button{padding:6px 7px}}.watermark{pointer-events:none;z-index:2;background-repeat:repeat;position:absolute;inset:0}.pdf-view{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);overflow:hidden}.pdf-view:fullscreen{border-radius:0;flex-direction:column;display:flex}.pdf-bar{background:var(--bg);border-bottom:1px solid var(--line);gap:6px;padding:6px 8px;font-size:14px}.pdf-bar form{gap:4px}.pdf-goto{text-align:center;width:52px;padding:2px 6px}.pdf-scroll{height:72vh;padding:12px;position:relative;overflow:auto}.pdf-view:fullscreen .pdf-scroll{flex:1;height:auto}.pdf-page{background:#fff;margin:0 auto 12px;position:relative;box-shadow:0 1px 3px #00000026}.pdf-page canvas{width:100%;height:100%;display:block}.pdf-no{color:var(--faint);font-size:11px;position:absolute;bottom:2px;right:6px}.image-box,.video-box,.sheet-box{position:relative}.image-scroll{text-align:center;background:var(--surface-2);border-radius:var(--r-sm);max-height:75vh;overflow:auto}.image-scroll img{cursor:zoom-in;vertical-align:top;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;max-width:100%;max-height:75vh}.image-scroll.zoomed img{cursor:zoom-out;max-width:none;max-height:none}.video-box video{border-radius:var(--r-sm);background:#000;width:100%;max-height:70vh;display:block}.audio-bar{z-index:5;background:var(--bg);padding:4px 0;position:sticky;top:56px}.audio-bar audio{width:100%;display:block}.follow-bar{justify-content:space-between;margin:10px 0 4px}.passages.follow{border-bottom:1px solid var(--line);max-height:55vh;position:relative;overflow:auto}.passages li.playing{background:var(--ok-bg);border-radius:var(--r-sm)}.passages .link-loc{text-align:left;cursor:pointer;color:var(--accent-deep);background:0 0;border:0;align-self:start;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.sheet-tabs{margin-bottom:8px;overflow-x:auto}.sheet-tabs button{white-space:nowrap}.sheet-scroll{border:1px solid var(--line);border-radius:var(--r-sm);max-height:72vh;overflow:auto}table.sheet{width:auto;font-size:13px}table.sheet th,table.sheet td{border:1px solid var(--line);white-space:pre-wrap;min-width:36px;max-width:360px;padding:3px 8px}table.sheet thead th{z-index:1;background:var(--surface-2);text-align:center;padding:2px 6px;font-size:12px;position:sticky;top:0}table.sheet tbody th{background:var(--surface-2);color:var(--dim);text-align:right;font-size:12px;font-weight:400;position:sticky;left:0}@media (max-width:640px){.pdf-scroll{height:70vh;padding:6px}.pdf-page{margin-bottom:6px}.card{padding:14px}}.plain{margin:0;padding:0;list-style:none}.plain>li{padding:6px 0}.pending-line{border-bottom:1px solid var(--line);align-items:center;gap:10px;display:flex}.pending-n{text-align:center;font-variant-numeric:tabular-nums;min-width:2.2em;color:var(--dim)}.pending-n.on{color:var(--accent-deep);font-weight:600}.count{background:var(--accent);color:#fff;text-align:center;vertical-align:1px;border-radius:9px;min-width:18px;margin-left:3px;padding:0 5px;font-size:11px;line-height:18px;display:inline-block}.stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:4px 0 12px;display:grid}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 12px}.stat b{font-variant-numeric:tabular-nums;font-size:20px;display:block}.stat span{color:var(--dim);font-size:13px}.settings{gap:16px;max-width:640px;display:grid}.settings label{color:var(--ink-2);gap:4px;font-size:14px;display:grid}.settings textarea{font:inherit;resize:vertical;min-height:72px}.break{word-break:break-all}td.money{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}h3.sub{margin:16px 0 6px;font-size:15px}.notice{white-space:pre-line;color:var(--warn);background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:var(--r-sm);margin:0 0 12px;padding:8px 12px;font-size:14px}td .note,td.note{color:var(--ink-2);word-break:break-all;font-size:13px}.source-note{color:var(--ink-2);word-break:break-all;margin:6px 0 0}.filter-toggle{display:none}.wechat-lead{margin:4px 0 8px;font-size:16px}.wechat-steps{margin:0 0 12px;padding-left:22px;font-size:15px;line-height:2}.dots{background:var(--surface-2);letter-spacing:1px;border-radius:10px;padding:0 8px;display:inline-block}@media (hover:none) and (pointer:coarse){.drag-only{display:none!important}.drop{border-style:solid;border-width:1px;padding:18px 14px}.pick-file{background:var(--accent);border-color:var(--accent);color:#fff;padding:12px 32px;font-size:16px}}@media (max-width:640px){.topbar{gap:8px;padding:0 12px}.nav{gap:2px}.nav a{padding:8px}.user-name{display:none}.btn.small{padding:7px 12px}.batch-bar{padding:10px 14px calc(10px + env(safe-area-inset-bottom));margin:12px -14px 0}.filter-toggle{align-items:center;display:inline-flex}.lib-filters{display:none}.lib-filters.open{display:flex}.input,.queue .input,.filters .input,.pdf-goto,.settings textarea{font-size:16px}table.stack thead{display:none}table.stack,table.stack tbody,table.stack tr{width:100%;display:block}table.stack tr{border-bottom:1px solid var(--line);padding:10px 0}table.stack td{border:0;padding:2px 0;display:block}table.stack td:empty{display:none}table.stack td.title{font-weight:600}table.stack td.title .note,table.stack td.title .hint,table.stack td.title .error{font-weight:400}table.stack td.inline{vertical-align:middle;margin:4px 10px 0 0;display:inline-block}table.stack td.inline .hint{margin-left:4px;display:inline}table.stack td.inline .row{display:inline-flex}table.stack td.act{font-weight:600}}
