:root{--bg: #f6f3ec;--card: #fffdf8;--border: #e8e0d0;--text: #333;--muted: #999;--accent: #b5762a}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,PingFang SC,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text)}.center{display:flex;align-items:center;justify-content:center;min-height:60vh;flex-direction:column;gap:12px}.muted{color:var(--muted)}.tiny{font-size:12px}.err{color:#c0392b}.msg{color:var(--accent)}.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:28px}.login{width:320px;text-align:center}.login.wide{width:380px;text-align:left}.login h2{margin:0 0 8px}.login.wide h2,.login.wide .muted{text-align:center}.lbl{display:flex;flex-direction:column;font-size:13px;gap:2px;margin:4px 0;text-align:left}.input{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:7px;font-size:14px;margin:6px 0;background:#fff}.input.search{width:220px}.btn{padding:9px 16px;border:1px solid var(--border);border-radius:7px;background:var(--card);cursor:pointer;font-size:14px}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn:disabled{opacity:.6}.link{background:none;border:none;color:var(--accent);cursor:pointer;font-size:14px;text-decoration:none;padding:0 6px}.link.danger{color:#c0392b}.app header{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;background:var(--card);border-bottom:1px solid var(--border);position:sticky;top:0}.app nav button{background:none;border:none;padding:8px 12px;cursor:pointer;font-size:14px;color:var(--muted)}.app nav button.on{color:var(--text);font-weight:600}main{max-width:900px;margin:0 auto;padding:20px}.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:12px;flex-wrap:wrap}.crumbs{flex:1;min-width:200px}.crumb{cursor:pointer;color:var(--accent)}.progress{height:6px;background:var(--border);border-radius:3px;overflow:hidden;margin-bottom:12px}.progress div{height:100%;background:var(--accent);transition:width .2s}.filelist{background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden}.filerow{display:grid;grid-template-columns:1fr 90px 130px;gap:8px;padding:12px 16px;border-bottom:1px solid var(--border);align-items:center}.filerow:last-child{border-bottom:none}.filerow .fname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.filerow[onClick]{cursor:pointer}div.filerow[onClick]:hover{background:#faf6ec}.acts{text-align:right}.settings{display:flex;flex-direction:column;gap:8px}.settings label{display:flex;flex-direction:column;font-size:14px;gap:2px}.row{display:flex;gap:10px;align-items:center}.batchbar{display:flex;gap:10px;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:8px 16px;margin-bottom:12px}.btn-sm{padding:6px 12px;font-size:13px}.btn.danger,.link.danger{color:#c0392b}.filerow.head{font-size:13px;color:var(--muted);background:#faf6ec}.filerow input[type=checkbox]{margin-right:6px;vertical-align:middle}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}.modal{background:var(--card);border-radius:12px;padding:24px;width:420px;max-width:100%}.modal.large{width:760px}.modal-head{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-bottom:12px}.modal-head b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preview-body img,.preview-body video{max-width:100%;max-height:70vh;border-radius:8px;display:block;margin:0 auto}.preview-body iframe{width:100%;height:70vh;border:none;border-radius:8px;background:#fff}.preview-body pre{background:#fff;border:1px solid var(--border);border-radius:8px;padding:16px;max-height:70vh;overflow:auto;white-space:pre-wrap;word-break:break-all;font-size:13px}.share-url{word-break:break-all;background:#faf6ec;border:1px solid var(--border);border-radius:7px;padding:10px 12px;font-size:13px}@media(max-width:600px){.filerow{grid-template-columns:1fr 70px 110px}.input.search{width:140px}.input,.preview-body pre{font-size:16px}}.pdfviewer .pdfbar{display:flex;align-items:center;gap:12px;margin-bottom:10px;flex-wrap:wrap}.pdfviewer .pdfzoom{margin-left:auto;display:flex;gap:8px}.pdfviewer .pdfpage{background:#fff;border:1px solid var(--border);border-radius:8px;max-height:62vh;overflow:auto;display:flex;justify-content:center;padding:8px}.mdview{background:#fff;border:1px solid var(--border);border-radius:8px;padding:16px 20px;max-height:70vh;overflow:auto;line-height:1.7;word-break:break-word}.mdview h1,.mdview h2,.mdview h3{margin:.8em 0 .4em}.mdview pre{background:#f6f3ec;padding:12px;border-radius:7px;overflow:auto}.mdview code{background:#f6f3ec;padding:2px 5px;border-radius:4px;font-size:.9em}.mdview pre code{background:none;padding:0}.mdview table{border-collapse:collapse;margin:12px 0}.mdview th,.mdview td{border:1px solid var(--border);padding:6px 10px}.mdview img{max-width:100%}.csvview{max-height:70vh;overflow:auto;background:#fff;border:1px solid var(--border);border-radius:8px}.csvview table{border-collapse:collapse;width:100%;font-size:13px}.csvview th,.csvview td{border:1px solid var(--border);padding:6px 10px;text-align:left;white-space:nowrap;max-width:320px;overflow:hidden;text-overflow:ellipsis}.csvview thead th{background:#f6f3ec;position:sticky;top:0}.cattabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.cattab{padding:6px 14px;border:1px solid var(--border);border-radius:20px;background:#fffdf8;font-size:13px;color:#666;cursor:pointer}.cattab .n{margin-left:6px;font-size:11px;color:#999;background:#f6f3ec;border-radius:10px;padding:1px 7px}.cattab.on{background:#b5762a;border-color:#b5762a;color:#fff}.cattab.on .n{background:#ffffff40;color:#fff}.storagebar{background:#fffdf8;border:1px solid var(--border);border-radius:10px;padding:12px 16px;margin-bottom:12px}.storage-top{display:flex;justify-content:space-between;align-items:center;font-size:13px;margin-bottom:8px}.storage-segs{display:flex;height:8px;border-radius:4px;overflow:hidden;background:#f0ebe0}.storage-segs .seg.image{background:#4a90d9}.storage-segs .seg.video{background:#9b59b6}.storage-segs .seg.audio{background:#2ecc71}.storage-segs .seg.doc{background:#e67e22}.storage-segs .seg.archive{background:#95a5a6}.storage-segs .seg.other{background:#d5cdbf}.storage-legend{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:#666}.storage-legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}.storage-legend .dot.image{background:#4a90d9}.storage-legend .dot.video{background:#9b59b6}.storage-legend .dot.audio{background:#2ecc71}.storage-legend .dot.doc{background:#e67e22}.storage-legend .dot.archive{background:#95a5a6}.storage-legend .dot.other{background:#d5cdbf}.statcards{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}.statcard{background:#fffdf8;border:1px solid var(--border);border-radius:12px;padding:14px 16px;display:flex;align-items:center;gap:12px}.sicon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.slabel{font-size:12px;color:#999}.snum{font-size:20px;font-weight:700;margin-top:2px}@media(max-width:600px){.statcards{grid-template-columns:repeat(2,1fr)}}.dropzone{border:2px dashed #d8cdb8;border-radius:12px;background:#fffdf8;padding:22px;display:flex;align-items:center;justify-content:center;gap:16px;cursor:pointer;margin-bottom:14px;transition:border-color .15s,background .15s}.dropzone:hover,.dropzone.over{border-color:#b5762a;background:#fdf8ef}.dropzone.over{transform:scale(1.005)}.dzicon{color:#b5762a;flex-shrink:0}.dztext{display:flex;flex-direction:column;gap:4px}.dztext b{font-size:16px}.dztext .muted{font-size:12px}.viewtoggle{display:flex;border:1px solid var(--border);border-radius:7px;overflow:hidden;margin-left:auto}.viewtoggle button{padding:7px 10px;background:#fffdf8;border:none;cursor:pointer;color:#999;display:flex}.viewtoggle button.on{background:#b5762a;color:#fff}.uploadingbar{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:13px}.uploadingbar .progress{flex:1}.filegrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.griditem{background:#fffdf8;border:1px solid var(--border);border-radius:10px;overflow:hidden;cursor:pointer;transition:box-shadow .15s}.griditem:hover{box-shadow:0 2px 10px #00000014}.griditem .thumb{aspect-ratio:1.2;display:flex;align-items:center;justify-content:center;background:#f6f3ec;overflow:hidden}.griditem .thumb img{width:100%;height:100%;object-fit:cover}.griditem .gname{padding:8px 10px 0;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.griditem .gmeta{padding:2px 10px 8px;font-size:11px;display:flex;justify-content:space-between;gap:6px}.griditem .gmeta span:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal h3{word-break:break-all;overflow-wrap:anywhere;line-height:1.5}.epubviewer .epubpage{background:#fff;border:1px solid var(--border);border-radius:8px;max-height:62vh;overflow:auto}.docview{background:#fff;border:1px solid var(--border);border-radius:8px;padding:20px 24px;max-height:70vh;overflow:auto;line-height:1.8;word-break:break-word}.docview table{border-collapse:collapse;margin:12px 0}.docview td,.docview th{border:1px solid var(--border);padding:6px 10px}.docview img{max-width:100%}.xlsxview .sheetabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}.xlsxview .sheetabs button{padding:5px 12px;border:1px solid var(--border);border-radius:6px;background:#fffdf8;font-size:12px;cursor:pointer}.xlsxview .sheetabs button.on{background:#b5762a;border-color:#b5762a;color:#fff}.xlsxview .csvview table{font-size:12px}.setgroup{border:1px solid var(--border);border-radius:10px;margin-bottom:12px;background:var(--card);overflow:hidden}.setgroup summary{padding:14px 16px;font-weight:700;font-size:15px;cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between}.setgroup summary::-webkit-details-marker{display:none}.setgroup summary:after{content:"›";font-size:20px;color:var(--muted);transform:rotate(90deg);transition:transform .15s}.setgroup:not([open]) summary:after{transform:rotate(0)}.setgroup[open] summary{border-bottom:1px solid var(--border)}.setgroup label,.setgroup p{margin-left:16px;margin-right:16px}.setgroup p:last-child{margin-bottom:16px}
