*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:#f5f6f8;color:#1f2329}a{color:inherit;text-decoration:none}.top-warning{position:sticky;top:0;z-index:900;background:#fff7e8;color:#d25f00;border-bottom:1px solid #ffcf8b;font-size:13px;padding:8px 24px;text-align:center;font-weight:500}.app-header{height:56px;display:flex;align-items:center;padding:0 24px;background:#fff;border-bottom:1px solid #e5e6eb}.user-box{display:flex;align-items:center;gap:10px;margin-left:20px;padding-left:16px;border-left:1px solid #e5e6eb;font-size:13px}.login-page{min-height:70vh;display:flex;align-items:center;justify-content:center}.login-card{width:360px;background:#fff;border:1px solid #e5e6eb;border-radius:12px;padding:28px 28px 24px;box-shadow:0 8px 24px #0000000f}.login-title{font-size:20px;margin:0 0 4px}.login-label{display:block;font-size:13px;color:#4e5969;margin:14px 0 6px}.login-input{width:100%;padding:9px 12px;border:1px solid #d9d9d9;border-radius:6px;font-size:14px}.login-input:focus{outline:2px solid #bedaff;border-color:#165dff}.login-remember{display:flex;align-items:center;gap:6px;margin:14px 0 18px;font-size:13px;color:#4e5969;cursor:pointer}.login-btn{width:100%;margin-right:0;padding:10px;font-size:15px}.app-nav{margin-left:auto;display:flex;gap:4px;font-size:14px}.app-nav a{color:#4e5969;padding:6px 12px;border-radius:6px}.app-nav a:hover{background:#f2f3f5}.app-nav a.router-link-active{color:#165dff;background:#e8f3ff}.page-header{display:flex;align-items:center;gap:12px;margin-bottom:4px}.page-header .spacer{flex:1}.back-btn{margin-right:0;padding:4px 12px;font-size:13px}.breadcrumb{font-size:13px;color:#86909c}.breadcrumb a{color:#4e5969}.breadcrumb a:hover{color:#165dff}.breadcrumb .sep{margin:0 6px}.page-title{font-size:20px;margin:8px 0 12px}.detail-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.detail-head .btn{margin-right:0;padding:2px 10px;font-size:12px}.loading-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#ffffffa6;display:flex;align-items:center;justify-content:center;cursor:wait}.loading-box{background:#fff;border:1px solid #e5e6eb;border-radius:10px;padding:24px 32px;text-align:center;box-shadow:0 8px 24px #0000001f;max-width:420px}.spinner{width:36px;height:36px;margin:0 auto 12px;border:3px solid #e5e6eb;border-top-color:#165dff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner{animation-duration:2.4s}}.loading-text{font-size:14px;color:#1f2329}.loading-sub{font-size:12px;color:#86909c;margin-top:6px}.poll-info{font-size:12px;color:#86909c;display:inline-flex;align-items:center;gap:6px}.poll-dot{width:8px;height:8px;border-radius:50%;background:#00b42a;animation:pulse 1.2s ease-in-out infinite}.poll-dot.off{background:#c9cdd4;animation:none}@keyframes pulse{50%{opacity:.3}}.btn.danger{color:#cb2634;border-color:#ffccc7}.trace-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:#4e5969;margin:-8px 0 12px}.trace-bar code{background:#f2f3f5;padding:1px 6px;border-radius:4px;color:#1f2329}.trace-tabs{display:flex;gap:8px;margin-bottom:12px}.trace-tabs .btn.active{border-color:#165dff;color:#165dff}.trace-code{font-family:Consolas,monospace;font-size:11px}.task-bar{display:flex;align-items:center;gap:10px;font-size:13px;color:#4e5969;margin-bottom:12px}.task-bar .spacer{flex:1}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:950;background:#00000059;display:flex;justify-content:flex-end}.drawer{width:min(1100px,92vw);height:100%;background:#fff;display:flex;flex-direction:column;box-shadow:-8px 0 24px #00000026}.drawer-head{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid #e5e6eb}.drawer-head h2{font-size:16px;margin:0}.drawer-head .spacer{flex:1}.drawer-head .btn{margin-right:0}.drawer-body{flex:1;overflow:auto;padding:16px 20px}.log-page h1{font-size:20px}.log-table{width:100%;border-collapse:collapse;font-size:12px}.log-table th,.log-table td{border-bottom:1px solid #f0f1f3;padding:6px 8px;text-align:left;vertical-align:top}.log-table th{color:#86909c;font-weight:500}.log-table tr.fail td{background:#fff1f0}.log-table tr.row{cursor:pointer}.log-table tr.row:hover td{background:#f7f8fa}.log-table .err{color:#cb2634;word-break:break-all}.tag{display:inline-block;padding:0 6px;border-radius:4px;font-size:11px}.tag.in{background:#e8f3ff;color:#165dff}.tag.out{background:#fff7e8;color:#d25f00}.log-detail pre{background:#0d1117;color:#c9d1d9;padding:10px;border-radius:6px;font-size:11px;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-all}.log-detail h3{font-size:13px;margin:12px 0 6px}.pager{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px}.filter-row input{padding:6px 8px;border:1px solid #d9d9d9;border-radius:6px;width:120px}.brand{font-weight:600;font-size:16px}.app-main{max-width:980px;margin:24px auto;padding:0 16px}.app-main.wide{max-width:1560px}.tool-grid{display:flex;flex-wrap:wrap;gap:16px;margin-top:16px}.tool-card{width:220px;padding:20px;background:#fff;border:1px solid #e5e6eb;border-radius:10px;transition:box-shadow .2s}.tool-card:hover{box-shadow:0 4px 16px #00000014}.tool-icon{font-size:32px}.tool-name{font-weight:600;margin-top:8px}.tool-desc{color:#86909c;font-size:13px;margin-top:4px}.wizard h1{font-size:20px}.steps{list-style:none;display:flex;gap:8px;padding:0;margin:16px 0 20px;flex-wrap:wrap}.steps li{display:flex;align-items:center;gap:6px;padding:6px 12px;background:#fff;border:1px solid #e5e6eb;border-radius:20px;color:#86909c;font-size:13px}.steps li .dot{width:20px;height:20px;border-radius:50%;background:#e5e6eb;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:12px}.steps li.active{color:#165dff;border-color:#165dff}.steps li.active .dot{background:#165dff}.steps li.done .dot{background:#00b42a}.panel{background:#fff;border:1px solid #e5e6eb;border-radius:10px;padding:20px;margin-bottom:16px}.hint{color:#86909c;font-size:13px}.hint code{background:#f2f3f5;padding:2px 6px;border-radius:4px}.btn{padding:8px 16px;border:1px solid #d9d9d9;background:#fff;border-radius:6px;cursor:pointer;font-size:14px;margin-right:10px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:#165dff;color:#fff;border-color:#165dff}.progress{margin:12px 0;color:#165dff}.book-stats{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;font-size:13px;color:#4e5969}.book-stats .stat-item{background:#f2f3f5;border-radius:4px;padding:4px 10px}.book-stats .stat-item b{color:#1d2129;margin:0 2px}.book-stats .stat-item.ok{background:#e8ffea;color:#00b42a}.book-stats .stat-item.ok b{color:#00b42a}.book-stats .stat-item.bad{background:#ffece8;color:#f53f3f}.book-stats .stat-item.bad b{color:#f53f3f}.book-stats .stat-sep{width:1px;height:16px;background:#e5e6eb;margin:0 4px}.book-table{width:100%;border-collapse:collapse;font-size:13px}.book-table th,.book-table td{border-bottom:1px solid #f0f1f3;padding:8px 10px;text-align:left}.book-table th{color:#86909c;font-weight:500}.book-table tr.bad td{background:#fff1f0}.book-table tr.pending td{background:#fffbe6}.book-table tr.pending td:first-child{box-shadow:inset 4px 0 #ff9a2e}.status{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600;white-space:nowrap;border:1px solid transparent}.status.st-ok{background:#e8ffea;color:#00a028;border-color:#aff0b5}.status.st-bad{background:#ffece8;color:#cb2634;border-color:#ffccc7}.status.st-wait{background:#ff9a2e;color:#fff;animation:blink 1.6s ease-in-out infinite}.status.st-info{background:#e8f3ff;color:#165dff;border-color:#bedaff}.status.st-gray{background:#f2f3f5;color:#86909c}@keyframes blink{50%{opacity:.55}}@media (prefers-reduced-motion: reduce){.status.st-wait{animation:none}}.book-stats .stat-item.wait{background:#ff9a2e;color:#fff;font-weight:600}.book-stats .stat-item.wait b{color:#fff}.warn-box{width:100%;background:#fff1f0;border:1px solid #f53f3f;border-left-width:4px;color:#cb2634;border-radius:6px;padding:10px 14px;font-size:14px;line-height:1.7}.warn-box b{color:#a1151e}.wait-box{width:100%;background:#fff7e8;border:1px solid #ffcf8b;border-left:4px solid #ff9a2e;color:#b54b00;border-radius:6px;padding:10px 14px;font-size:14px;line-height:1.7}.wait-box b{color:#8f3c00}.wait-box-sub{display:block;font-size:12.5px;color:#86592a}.muted-red{display:block;margin-top:4px;font-size:12.5px;color:#cb2634}.intro{position:relative;margin-top:4px;max-width:320px;outline:none}.intro-short{font-size:12px;color:#4e5969;line-height:1.5;cursor:help;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.intro:hover .intro-short,.intro:focus .intro-short{color:#165dff}.intro-full{display:none;position:absolute;left:0;top:100%;z-index:20;margin-top:4px;width:420px;max-height:320px;overflow:auto;background:#fff;border:1px solid #e5e6eb;border-radius:8px;box-shadow:0 8px 24px #00000026;padding:10px 12px;font-size:13px;line-height:1.7;color:#1f2329;white-space:normal}.intro:hover .intro-full,.intro:focus .intro-full,.intro:focus-within .intro-full{display:block}.intro-full-title{font-weight:600;margin-bottom:4px}.intro-full-meta{margin-top:6px;font-size:12px;color:#86909c}.small-text{font-size:11.5px}.book-table th,.book-table td{white-space:nowrap}.book-table td:nth-child(2){white-space:normal;min-width:200px}.book-table td.note{white-space:normal}.book-table tr.wait-row td{padding:0 10px 10px;background:#fffbe6;white-space:normal;border-bottom:1px solid #ffe4ba}.book-table tr.wait-row td:first-child{box-shadow:inset 4px 0 #ff9a2e}.wait-strip{display:flex;gap:10px;align-items:flex-start;background:#fff7e8;border:1px solid #ffcf8b;border-radius:6px;padding:10px 12px}.wait-icon{font-size:18px;line-height:1.4}.wait-title{font-size:13.5px;font-weight:600;color:#d25f00}.wait-title b{color:#b54b00}.wait-desc{margin-top:2px;font-size:12.5px;color:#86592a;line-height:1.6}.wait-strip.overdue{background:#fff1f0;border-color:#f53f3f}.wait-strip.overdue .wait-title,.wait-strip.overdue .wait-desc{color:#cb2634}.wait-strip.overdue .wait-desc b{color:#a1151e}.task-table td{vertical-align:middle;padding:10px 8px}.task-table th,.task-table td{white-space:nowrap}.task-table td.todo-cell{white-space:normal;width:100%}.task-table .btn{white-space:nowrap}.progress-tags{display:flex;flex-wrap:wrap;gap:4px}.task-table tr.row-authorize td,.task-table tr.row-submit td{background:#fff1f0}.task-table tr.row-authorize td:first-child,.task-table tr.row-submit td:first-child{box-shadow:inset 4px 0 #f53f3f}.task-table tr.row-wait td{background:#fffbe6}.task-table tr.row-wait td:first-child{box-shadow:inset 4px 0 #ff9a2e}.todo-cell{min-width:280px}.red-text{color:#cb2634}.orange-text{color:#d25f00}.todo-text{font-weight:600;font-size:13px}.todo-text.act-authorize,.todo-text.act-submit{color:#cb2634}.todo-text.act-wait{color:#d25f00}.pending-list{margin:4px 0 0;padding-left:16px;font-size:12px;color:#86592a;line-height:1.7}.pending-list b{color:#b54b00}.pending-list .pending-tip{color:#d25f00}.pending-list li.overdue,.pending-list li.overdue b,.pending-list li.overdue .pending-tip{color:#cb2634;font-weight:600}.btn.small-btn{display:inline-block;padding:4px 12px;font-size:12px;margin-right:0}.confirm-check{display:flex;align-items:center;gap:6px;margin-top:6px;color:#1f2329;font-weight:600;cursor:pointer}.notice-list{margin:10px 0 0;padding-left:18px;font-size:12.5px;color:#4e5969;line-height:1.8}.notice-list .important{color:#f53f3f;font-weight:600}.danger-zone{margin-top:32px;padding:14px 16px;border:1px dashed #f53f3f;border-radius:8px;background:snow}.danger-title{color:#cb2634;font-weight:700;font-size:14px}.danger-desc{margin:6px 0 10px;font-size:13px;color:#4e5969}.danger-desc b{color:#cb2634}.btn.danger-solid{background:#fff;color:#cb2634;border-color:#f53f3f}.btn.danger-solid:hover:not(:disabled){background:#f53f3f;color:#fff}.book-table td.note{color:#f53f3f}.book-table .cover-cell{width:56px}.book-table .source{font-size:11px;margin-top:2px;word-break:break-all}.book-table .cover-cell img{display:block;width:45px;height:60px;object-fit:cover;border-radius:4px;border:1px solid #f0f1f3;background:#f7f8fa}.book-table .no-cover{display:flex;align-items:center;justify-content:center;width:45px;height:60px;border-radius:4px;background:#f7f8fa;color:#c9cdd4;font-size:11px}.muted{color:#86909c}.actions{margin-top:16px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.alert{padding:10px 14px;border-radius:6px;margin:12px 0;font-size:14px}.alert.error{background:#fff1f0;color:#cb2634;border:1px solid #ffccc7}.alert.success{background:#e8ffea;color:#009a29;border:1px solid #aff0b5}.step1{display:flex;gap:24px;align-items:flex-start}.step1-op{flex:1 1 46%;min-width:260px}.step1-guide{flex:1 1 54%;min-width:300px}.op-title{font-size:14px;font-weight:600;margin-bottom:10px}.dropzone{border:2px dashed #c9ccd1;border-radius:10px;padding:32px 16px;text-align:center;cursor:pointer;background:#fafbfc;transition:all .15s;-webkit-user-select:none;user-select:none}.dropzone:hover{border-color:#165dff;background:#f4f8ff}.dropzone.dragover{border-color:#165dff;background:#e8f1ff}.dropzone.has-file{border-style:solid;border-color:#00b42a;background:#f6ffed}.hidden-input{display:none}.dz-icon{font-size:34px;line-height:1}.dz-main{margin-top:10px;font-size:15px;color:#1f2329;font-weight:500}.dz-name{margin-top:10px;font-size:14px;color:#1f2329;font-weight:600;word-break:break-all}.dz-size{margin-top:2px;font-size:12px;color:#86909c}.dz-hint{margin-top:6px;font-size:12px;color:#86909c}.dz-btn{margin-top:16px;width:100%}@media (max-width: 720px){.step1{flex-direction:column}}.guide{margin-bottom:0}.guide-title{font-size:12px;font-weight:600;color:#4e5969;margin:10px 0 4px}.guide-title:first-child{margin-top:0}.guide-tree,.guide-txt{margin:0;padding:8px 10px;background:#0d1117;color:#c9d1d9;border-radius:6px;font-size:11px;line-height:1.55;font-family:Cascadia Code,Consolas,Courier New,monospace;white-space:pre;overflow-x:auto}.guide-tree .c{color:#6a9955}.guide-notes{margin:10px 0 0;padding-left:18px;color:#86909c;font-size:11.5px;line-height:1.7}.guide-notes code{background:#f2f3f5;color:#cb2634;padding:0 4px;border-radius:3px;font-size:11px}.guide-notes b{color:#4e5969}.guide-notes .limit-note,.guide-notes .limit-note b{color:#cb2634}.cover-page h1{font-size:20px}.up-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.up-row label{font-size:13px;color:#4e5969}.up-row select{padding:6px 8px;border:1px solid #d9d9d9;border-radius:6px}.small{font-size:12px;margin-top:8px}.filter-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}.filter-row label{font-size:13px;color:#4e5969}.filter-row select{padding:6px 8px;border:1px solid #d9d9d9;border-radius:6px}.filter-row .stat{font-size:13px;color:#1f2329;background:#f2f3f5;padding:4px 10px;border-radius:12px}.filter-row .spacer{flex:1}.empty{color:#86909c;padding:24px;text-align:center}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:14px}.cover-card{border:1px solid #e5e6eb;border-radius:8px;overflow:hidden;background:#fff}.cover-card.deleted{opacity:.6}.cover-card.off .thumb img{filter:grayscale(1)}.thumb{position:relative;aspect-ratio:3/4;background:#f2f3f5}.thumb img{width:100%;height:100%;object-fit:cover;display:block}.badge{position:absolute;font-size:11px;padding:1px 6px;border-radius:4px;color:#fff}.badge.channel{top:6px;left:6px;background:#165dffd9}.badge.del{top:6px;right:6px;background:#cb2634e6}.badge.off{top:6px;right:6px;background:#86909ce6}.meta{padding:8px}.meta .name{font-size:12px;color:#1f2329;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.meta .ops{margin-top:6px;display:flex;gap:10px}.link{background:none;border:none;color:#165dff;cursor:pointer;font-size:12px;padding:0}.link.danger{color:#cb2634}.status-summary{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px;font-size:13px}.status-summary .spacer{flex:1}.status-summary .stat{background:#f2f3f5;border-radius:4px;padding:3px 10px}.status-summary .stat.ok{background:#e8ffea;color:#00a028}.status-summary .stat.bad{background:#ffece8;color:#cb2634}.status-summary .btn{margin-right:0}.tab-badge{display:inline-block;min-width:16px;margin-left:6px;padding:0 5px;background:#f53f3f;color:#fff;border-radius:9px;font-size:11px;line-height:16px;text-align:center}.status-list{display:flex;flex-direction:column;gap:8px}.status-card{border:1px solid #e5e6eb;border-left:3px solid #00b42a;border-radius:8px;padding:8px 12px;background:#fff}.status-card.bad{border-color:#ffccc7;border-left-color:#f53f3f;background:snow}.status-card.gray{border-left-color:#c9cdd4}.sc-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px}.sc-head .spacer{flex:1}.sc-name{font-size:13.5px}.sc-url{display:flex;align-items:center;gap:8px;margin-top:4px}.sc-url code{flex:1;background:#f2f3f5;padding:3px 8px;border-radius:4px;font-size:11.5px;word-break:break-all}.app-row{gap:8px}.app-select{position:relative;display:inline-block}.app-select-input{width:420px;padding-right:46px}.app-select-btn{position:absolute;top:50%;transform:translateY(-50%);border:none;background:none;cursor:pointer;color:#86909c;line-height:1;padding:2px 4px}.app-select-btn.clear{right:24px;font-size:16px}.app-select-btn.caret{right:6px;font-size:12px}.app-select-btn:hover{color:#165dff}.app-select.open .app-select-btn.caret{transform:translateY(-50%) rotate(180deg)}.app-select-list{position:absolute;left:0;top:100%;z-index:60;margin:4px 0 0;padding:4px 0;width:460px;max-height:380px;overflow-y:auto;list-style:none;background:#fff;border:1px solid #e5e6eb;border-radius:8px;box-shadow:0 8px 24px #0000002e}.app-select-list li{padding:6px 12px;cursor:pointer;font-size:13px}.app-select-list li.active{background:#f2f3f5}.app-select-list li.picked{color:#165dff;font-weight:600}.app-select-list li.as-empty{color:#86909c;cursor:default}.app-select-list .as-name{display:block}.app-select-list .as-sub{display:block;font-size:11px;color:#86909c}.kw-input{padding:6px 8px;border:1px solid #d9d9d9;border-radius:6px;width:200px}.inline-check{display:inline-flex;align-items:center;gap:4px;cursor:pointer}.select-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}.select-bar .spacer{flex:1}.select-bar .btn.primary{margin-right:0}.select-bar .stat{font-size:13px;color:#4e5969}.select-bar .sel-num{color:#165dff}.table-wrap{overflow-x:auto}.feed-table{table-layout:fixed;width:100%}.feed-table tr{cursor:pointer}.feed-table tr:hover td{background:#f7f8fa}.feed-table tr.checked td{background:#e8f3ff}.feed-table th,.feed-table td{white-space:normal;vertical-align:top;overflow:hidden}.feed-table .col-check{width:34px}.feed-table .col-cover{width:60px}.feed-table .col-name{width:auto;min-width:260px}.feed-table .col-id{width:64px}.feed-table .col-cat{width:82px}.feed-table .col-num{width:84px}.feed-table .col-time{width:92px}.feed-table .col-audit{width:100px}.feed-table .col-time,.feed-table .col-audit{font-size:11.5px;line-height:1.5}.feed-table td:nth-child(2),.feed-table td:nth-child(3){min-width:0;white-space:normal}.feed-table .col-cover img{display:block;width:45px;height:60px;object-fit:cover;border-radius:4px;border:1px solid #f0f1f3;background:#f7f8fa}.feed-table .col-cover .no-cover{display:flex;align-items:center;justify-content:center;width:45px;height:60px;border-radius:4px;background:#f7f8fa;color:#c9cdd4;font-size:11px}.feed-table .book-name{font-weight:600;line-height:1.4}.feed-table .desc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-table .status{white-space:nowrap}.ops-cell{display:flex;gap:12px}.link:disabled{color:#c9cdd4;cursor:not-allowed}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:960;background:#0006;display:flex;align-items:center;justify-content:center;padding:24px}.modal{width:min(1100px,96vw);max-height:90vh;background:#fff;border-radius:10px;display:flex;flex-direction:column;box-shadow:0 12px 32px #0003;outline:none}.modal-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid #e5e6eb}.modal-head h2{font-size:15px;margin:0;word-break:break-all}.modal-head .spacer{flex:1}.modal-head .btn{margin-right:0}.modal-body{flex:1;overflow:auto;padding:14px 18px}.code-box{margin:0;background:#0d1117;color:#c9d1d9;padding:12px 14px;border-radius:6px;font-family:Cascadia Code,Consolas,Courier New,monospace;font-size:12px;line-height:1.6;white-space:pre;overflow:auto;max-height:70vh}.code-box .x-tag{color:#7ee787}.code-box .x-cdata{color:#8b949e}.code-box .x-val{color:#e3b341}.code-box .x-decl{color:#79c0ff}
