:root{--bg:#ffffff;--bg2:#f8f9fa;--bg3:#f0f1f3;--border:#e0e2e6;--text:#1a1a2e;--text2:#5f6368;--text3:#9aa0a6;--accent:#1a73e8;--accent2:#1557b0;--green:#1e8e3e;--yellow:#f9ab00;--red:#d93025;--card:#ffffff;--shadow:0 1px 3px rgba(0,0,0,.08);--code-bg:#f1f3f4;--code-text:#37474f}
[data-theme="dark"]{--bg:#1a1a2e;--bg2:#222240;--bg3:#2a2a4a;--border:#3a3a5c;--text:#e4e4f0;--text2:#a0a0b8;--text3:#6a6a88;--accent:#5b9aff;--accent2:#4080e0;--green:#4cda7c;--yellow:#ffc940;--red:#ff6b6b;--card:#222240;--shadow:0 1px 3px rgba(0,0,0,.3);--code-bg:#16162a;--code-text:#b0b0cc}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text);transition:background .2s,color .2s;min-height:100vh}
.app{max-width:920px;margin:0 auto;padding:24px 16px}
.header{margin-bottom:20px}
.header-row{display:flex;justify-content:space-between;align-items:center}
.brand{font-size:20px;font-weight:700;letter-spacing:-.5px}
.header-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.site-nav{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.site-nav .btn.is-active{border-color:var(--accent);color:var(--accent);background:var(--bg2)}
.site-footer{margin-top:28px;padding-top:14px;border-top:1px solid var(--border);display:flex;flex-wrap:wrap;gap:12px 16px;font-size:12px}
.site-footer a{color:var(--text3);text-decoration:none}
.site-footer a:hover{color:var(--accent)}
.privacy-banner{position:relative;margin:0;padding:14px 40px 14px 16px;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow)}
.privacy-banner .faq-heading{margin-bottom:8px;font-size:15px}
.privacy-banner p{font-size:13px;line-height:1.7;color:var(--text2);margin:0 0 8px}
.privacy-banner-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px !important;margin-bottom:0 !important}
.privacy-close{position:absolute;top:8px;right:10px;width:28px;height:28px;border:0;background:transparent;color:var(--text3);font-size:20px;line-height:1;cursor:pointer;border-radius:6px}
.privacy-close:hover{color:var(--text);background:var(--bg2)}
.privacy-faq{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.privacy-faq details.faq-item{border:1px solid var(--border);border-radius:8px;background:var(--bg2);padding:0}
.privacy-faq summary{cursor:pointer;padding:12px 14px;font-weight:600;font-size:14px;list-style:none}
.privacy-faq summary::-webkit-details-marker{display:none}
.privacy-faq-body{padding:0 14px 12px;font-size:13px;line-height:1.7;color:var(--text2)}
.privacy-faq-body p{margin:0 0 8px}
.version{font-size:11px;color:var(--text3);font-family:monospace}
.icon-btn{background:none;border:1px solid var(--border);border-radius:6px;cursor:pointer;width:32px;height:32px;display:flex;align-items:center;justify-content:center;color:var(--text2);transition:all .15s;padding:0;flex-shrink:0}
.icon-btn:hover{border-color:var(--accent);color:var(--accent)}
.flag-icon{width:20px;height:13px;display:block;border-radius:1px}
.theme-icon{font-size:16px;line-height:1}
.tagline{font-size:12px;color:var(--text3);margin-top:4px}
.main{display:flex;flex-direction:column;gap:14px}
.drop-zone{background:var(--card);border:2px dashed var(--border);border-radius:12px;padding:32px 20px;text-align:center;transition:all .2s;box-shadow:var(--shadow)}
.drop-zone:hover,.drop-zone.drag-over{border-color:var(--accent);background:var(--bg2)}
.drop-icon{font-size:28px;margin-bottom:8px;color:var(--accent);font-weight:600}
.drop-text{font-size:14px;color:var(--text2);margin-bottom:4px}
.drop-hint{font-size:12px;color:var(--text3);margin-bottom:14px}
.input-row{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border:1px solid var(--border);border-radius:6px;cursor:pointer;font-size:13px;background:var(--card);color:var(--text);transition:all .15s;box-shadow:var(--shadow);text-decoration:none}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn-accent{background:var(--accent);color:#fff;border-color:var(--accent)}
.btn-accent:hover{background:var(--accent2);color:#fff}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-sm{padding:4px 10px;font-size:12px}
.job-section{background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);overflow:hidden}
.job-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid var(--border);background:var(--bg2);flex-wrap:wrap}
.job-toolbar-main{display:flex;flex-direction:column;gap:8px;min-width:0;flex:1}
.job-count{font-size:13px;color:var(--text2)}
.job-overall{display:flex;align-items:center;gap:10px;max-width:420px}
.job-overall .progress-track{flex:1;min-width:120px}
.job-overall-text{font-size:12px;color:var(--accent);font-weight:600;white-space:nowrap}
.job-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.progress-track{height:5px;background:var(--bg3);border-radius:3px;overflow:hidden}
.progress-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .25s;width:0}
.summary-box{font-family:'SF Mono',Menlo,Consolas,monospace;font-size:12px;line-height:1.7;background:var(--bg2);border-bottom:1px solid var(--border);padding:12px 14px;color:var(--text)}
.summary-title{font-weight:700;margin-bottom:2px}
.summary-line{color:var(--text3);margin-bottom:4px}
.summary-row{display:flex;gap:12px}
.summary-row span:first-child{min-width:92px;color:var(--text2)}
.summary-row span:last-child{color:var(--green);font-weight:600}
.job-table-wrap{overflow:auto;max-height:480px}
.job-table{width:100%;border-collapse:collapse;font-size:13px}
.job-table th{text-align:left;font-size:11px;color:var(--text3);text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;border-bottom:1px solid var(--border);background:var(--bg2);position:sticky;top:0;z-index:1}
.job-table td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
.job-table tr:last-child td{border-bottom:none}
.col-file{font-family:'SF Mono',Menlo,Consolas,monospace;font-size:12px;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.col-size{white-space:nowrap;color:var(--text2);width:90px}
.col-progress{min-width:140px;width:160px}
.col-result{font-size:12px;color:var(--text3);min-width:200px}
.col-result.is-ok{color:var(--green);font-weight:600}
.col-result.is-fail{color:var(--red)}
.col-action{width:88px;text-align:right}
.row-progress-label{font-size:12px;color:var(--text2);margin-bottom:4px}
.row-track{height:4px}
.status-uploading .row-progress-label,.status-compressing .row-progress-label{color:var(--accent);font-weight:600}
.status-done .row-progress-label,.status-processed .row-progress-label{color:var(--green)}
.status-error .row-progress-label{color:var(--red)}
.action-placeholder{color:var(--text3)}
.result-badge{font-size:12px;color:var(--red)}
.recent-section{margin-top:8px}
.recent-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.recent-list{list-style:none;display:flex;flex-direction:column;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 14px;box-shadow:var(--shadow)}
.recent-list li{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:13px;padding:6px 0;border-bottom:1px solid var(--border)}
.recent-list li:last-child{border-bottom:none}
.recent-list a{color:var(--accent);text-decoration:none;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.recent-list a:hover{text-decoration:underline}
.recent-list span{color:var(--text3);font-size:12px;white-space:nowrap}
.recent-detail{display:grid;gap:10px;margin-top:12px}
.recent-detail div{display:flex;gap:12px;padding:8px 0;border-bottom:1px solid var(--border)}
.recent-detail dt{min-width:96px;color:var(--text3);font-size:12px}
.recent-detail dd{font-weight:600}
.recent-pager{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px;margin-top:14px;font-size:13px;color:var(--text2)}
.recent-pager .is-disabled{opacity:.4;pointer-events:none}
.page-nums{display:flex;align-items:center;gap:4px}
.page-link,.page-current{min-width:28px;height:28px;padding:0 8px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;text-decoration:none;border:0;background:transparent;cursor:pointer;font:inherit}
.page-link{color:var(--text);background:var(--surface2,transparent)}
.page-link:hover{background:var(--border)}
.page-current{background:var(--accent,#2563eb);color:#fff;font-weight:600}
.page-meta{white-space:nowrap}
.about-page p{font-size:14px;line-height:1.8;color:var(--text2);margin:0 0 12px}
.about-lead{font-size:16px;font-weight:600;color:var(--text);line-height:1.6}
.about-h2{font-size:16px;font-weight:700;margin:22px 0 10px;color:var(--text)}
.about-h3{font-size:14px;font-weight:700;margin:16px 0 6px;color:var(--text)}
.about-list{margin:0 0 14px;padding-left:1.2em;color:var(--text2);font-size:14px;line-height:1.8}
.about-list li{margin-bottom:6px}
.about-contact{margin-top:20px;padding:14px;border:1px solid var(--border);border-radius:8px;background:var(--bg2)}
.about-contact p{margin-bottom:6px;color:var(--text)}
.feedback-section{margin-top:8px}
.feedback-form{display:flex;flex-direction:column;gap:10px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px;box-shadow:var(--shadow)}
.feedback-row{display:flex;gap:8px;flex-wrap:wrap}
.feedback-row input,.feedback-form textarea{flex:1;min-width:160px;padding:8px 10px;border:1px solid var(--border);border-radius:6px;background:var(--bg2);color:var(--text);font-size:13px;font-family:inherit}
.feedback-form textarea{resize:vertical;width:100%}
.feedback-actions-row{display:flex;align-items:center;gap:10px}
.feedback-msg{font-size:12px;color:var(--green)}
.feedback-msg.is-error{color:var(--red)}
.admin-app{max-width:960px}
.admin-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:16px;box-shadow:var(--shadow);margin-bottom:14px}
.admin-card label{display:block;font-size:12px;color:var(--text3);margin-bottom:6px}
.admin-card input[type="password"]{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;background:var(--bg2);color:var(--text);margin-bottom:10px}
.admin-hint{font-size:12px;color:var(--text3);margin-top:10px;line-height:1.5}
.admin-hint code{font-family:'SF Mono',Menlo,Consolas,monospace}
.admin-error{color:var(--red);font-size:12px;margin-top:8px;min-height:16px}
.admin-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.admin-card-head h2{font-size:15px}
.admin-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin-bottom:14px}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px;box-shadow:var(--shadow)}
.stat-value{font-size:20px;font-weight:700;color:var(--accent)}
.stat-label{font-size:12px;color:var(--text3);margin-top:4px}
.feedback-admin-list{display:flex;flex-direction:column;gap:10px}
.feedback-item{border:1px solid var(--border);border-radius:8px;padding:12px;background:var(--bg2)}
.feedback-item.is-new{border-color:var(--accent)}
.feedback-meta{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--text3);margin-bottom:8px}
.feedback-status{color:var(--accent);font-weight:600}
.feedback-content{font-size:13px;line-height:1.6;white-space:pre-wrap;margin-bottom:8px}
.feedback-actions{display:flex;gap:8px}
.admin-dbpath{font-size:11px;color:var(--text3);font-family:monospace;word-break:break-all}
.faq-section{margin-top:10px;padding-top:8px}
.faq-heading{font-size:18px;font-weight:700;margin-bottom:12px}
.faq-nav ul{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.faq-nav button{border:1px solid var(--border);background:var(--card);color:var(--text2);border-radius:999px;padding:6px 12px;font-size:12px;cursor:pointer;transition:all .15s}
.faq-nav button:hover{border-color:var(--accent);color:var(--accent)}
.faq-nav button.active{background:var(--accent);border-color:var(--accent);color:#fff}
.faq-panel-title{font-size:14px;color:var(--text3);margin-bottom:10px;font-weight:600}
.faq-list{display:flex;flex-direction:column;gap:8px}
.faq-item{border:1px solid var(--border);border-radius:8px;background:var(--card);overflow:hidden}
.faq-item dt button{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left;background:none;border:0;padding:12px 14px;cursor:pointer;color:var(--text);font-size:14px;font-weight:600}
.faq-item dt button:hover{background:var(--bg2)}
.faq-toggle{flex-shrink:0;width:22px;height:22px;border-radius:4px;border:1px solid var(--border);display:inline-flex;align-items:center;justify-content:center;color:var(--text2);font-size:14px;line-height:1}
.faq-item.is-open .faq-toggle{border-color:var(--accent);color:var(--accent)}
.faq-item dd{padding:0 14px 12px;color:var(--text2);font-size:13px;line-height:1.7}
.faq-item dd a{color:var(--accent);text-decoration:none}
.faq-item dd a:hover{text-decoration:underline}
.faq-item dd p+p{margin-top:8px}
@media(max-width:700px){.app{padding:12px 8px}.header-row{align-items:flex-start;flex-direction:column;gap:10px}.header-right{justify-content:flex-start;width:100%}.job-toolbar{align-items:stretch}.col-file{max-width:140px}.job-table th:nth-child(4),.job-table td.col-result{min-width:160px}.faq-nav ul{gap:6px}}
