/* === 基础 === */
:root {
    --bg: #f5f6fa;
    --card: #ffffff;
    --border: #e2e5ee;
    --text: #2d3436;
    --muted: #636e72;
    --primary: #4a6cf7;
    --warn: #f0a020;
    --danger: #e74c3c;
    --success: #27ae60;
    --radius: 8px;
    --shadow: 0 1px 3px rgba(0,0,0,.08);
    --ai-bg: linear-gradient(135deg, #f8f9ff, #f0f2ff);
    --dup-bg: #fffdf0;
    --dup-border: #f0d060;
    --code-bg: #1e1e2e;
    --code-fg: #cdd6f4;
    --mark-bg: #fff37a;
    --mark-fg: #333;
    --hover-bg: #f8f9ff;
    --editor-bg: #1e1e2e;
}

@media (prefers-color-scheme: dark) {
    :root {
        --bg: #1a1b2e;
        --card: #252740;
        --border: #353758;
        --text: #e4e6f0;
        --muted: #9498b8;
        --primary: #7b8cff;
        --warn: #f5c842;
        --danger: #ff6b6b;
        --success: #4ecb71;
        --shadow: 0 1px 3px rgba(0,0,0,.3);
        --ai-bg: linear-gradient(135deg, #2a2d4a, #252740);
        --dup-bg: #3d3520;
        --dup-border: #5a4e30;
        --code-bg: #0d1117;
        --code-fg: #c9d1d9;
        --mark-bg: #5a4a00;
        --mark-fg: #ffd866;
        --hover-bg: #2a2d48;
        --editor-bg: #0d1117;
    }
    .navbar { background: var(--card); border-color: var(--border); }
    .cm-editor { background: var(--editor-bg); }
    .preview-box, .preview-md pre { background: var(--code-bg) !important; color: var(--code-fg) !important; }
    .tag { background: var(--border); }
    .ft-header { background: var(--border); }
    input, select, textarea { background: var(--card); color: var(--text); border-color: var(--border); }
}

/* 手动暗色模式（.dark class 覆盖系统偏好） */
html.dark {
    --bg: #1a1b2e;
    --card: #252740;
    --border: #353758;
    --text: #e4e6f0;
    --muted: #9498b8;
    --primary: #7b8cff;
    --warn: #f5c842;
    --danger: #ff6b6b;
    --success: #4ecb71;
    --shadow: 0 1px 3px rgba(0,0,0,.3);
    --ai-bg: linear-gradient(135deg, #2a2d4a, #252740);
    --dup-bg: #3d3520;
    --dup-border: #5a4e30;
    --code-bg: #0d1117;
    --code-fg: #c9d1d9;
    --mark-bg: #5a4a00;
    --mark-fg: #ffd866;
    --hover-bg: #2a2d48;
    --editor-bg: #0d1117;
}
html.dark .navbar { background: var(--card); border-color: var(--border); }
html.dark .cm-editor { background: var(--editor-bg); }
html.dark .preview-box, html.dark .preview-md pre { background: var(--code-bg) !important; color: var(--code-fg) !important; }
html.dark .tag { background: var(--border); }
html.dark .ft-header { background: var(--border); }
html.dark input, html.dark select, html.dark textarea { background: var(--card); color: var(--text); border-color: var(--border); }

/* === 主题切换按钮 === */
.theme-toggle { background:none; border:none; cursor:pointer; font-size:1rem; padding:.2rem .35rem; border-radius:4px; }
.theme-toggle:hover { background:var(--bg); }

* { margin: 0; padding: 0; box-sizing: border-box; }

body {
    font-family: -apple-system, "Microsoft YaHei", "PingFang SC", sans-serif;
    background: var(--bg);
    color: var(--text);
    line-height: 1.6;
    min-height: 100vh;
    transition: background .3s, color .3s;
}

/* === 动效 === */
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.stat-card, .file-item, .search-item, .web-item, .action-card, .settings-section {
    animation: fadeIn .4s ease;
    transition: box-shadow .2s, transform .15s, border-color .2s;
}
.file-item:hover, .search-item:hover, .web-item:hover, .action-card:hover {
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(0,0,0,.1);
}

/* === 滚动条 === */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--muted); }

a { color: var(--primary); text-decoration: none; }
a:hover { text-decoration: underline; }

.container {
    max-width: 1100px;
    margin: 0 auto;
    padding: 1.5rem 1rem 3rem;
}

/* === 导航栏 === */
.navbar {
    background: var(--card);
    border-bottom: 1px solid var(--border);
    padding: 0 1rem;
    position: sticky;
    top: 0;
    z-index: 100;
}
.nav-inner {
    max-width: 1100px;
    margin: 0 auto;
    display: flex;
    align-items: center;
    gap: 1.5rem;
    height: 52px;
}
.nav-brand {
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--text) !important;
    text-decoration: none !important;
}
.nav-links { display: flex; gap: 1rem; }
.nav-links a {
    color: var(--muted);
    font-size: .9rem;
    padding: .25rem .5rem;
    border-radius: 4px;
}
.nav-links a:hover { background: var(--bg); color: var(--text); text-decoration: none; }
/* === 用户导航 === */
.nav-user { display:flex; align-items:center; gap:.5rem; font-size:.85rem; }
.nav-username { font-weight:600; color:var(--text); }
.nav-user a { color:var(--muted); }

/* === 用户管理 === */
.user-add { display:flex; gap:.35rem; margin-bottom:.75rem; flex-wrap:wrap; }
.user-add input,.user-add select { padding:.3rem .5rem; border:1px solid var(--border); border-radius:4px; font-size:.8rem; outline:none; }
.user-list { display:flex; flex-direction:column; gap:.25rem; }
.user-row { display:flex; align-items:center; gap:.75rem; padding:.4rem .6rem; background:var(--bg); border-radius:4px; font-size:.85rem; }
.u-name { font-weight:600; min-width:80px; }
.u-role { font-size:.7rem; padding:.1rem .4rem; border-radius:3px; }
.u-role.admin { background:var(--primary); color:#fff; }
.u-role.user { background:var(--border); color:var(--muted); }
.u-time { color:var(--muted); font-size:.75rem; margin-left:auto; }

.nav-search {
    margin-left: auto;
    display: flex;
    gap: 0;
}
.nav-search input {
    padding: .4rem .8rem;
    border: 1px solid var(--border);
    border-right: none;
    border-radius: var(--radius) 0 0 var(--radius);
    font-size: .85rem;
    width: 200px;
    outline: none;
}
.nav-search input:focus { border-color: var(--primary); }
.nav-search button {
    padding: .4rem .8rem;
    border: 1px solid var(--border);
    border-left: none;
    border-radius: 0 var(--radius) var(--radius) 0;
    background: var(--bg);
    cursor: pointer;
}

/* === 按钮 === */
.btn {
    display: inline-block;
    padding: .5rem 1rem;
    font-size: .9rem;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    background: var(--primary);
    color: #fff;
    cursor: pointer;
    text-decoration: none;
}
.btn:hover { opacity: .9; text-decoration: none; }
.btn-ghost { background: transparent; color: var(--text); }
.btn-ghost:hover { background: var(--bg); }
.btn-danger { background: var(--danger); }
.btn-sm { padding: .25rem .6rem; font-size: .8rem; }

/* === 仪表盘 === */
.stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 1rem;
    margin: 1.5rem 0;
}
.stat-card {
    background: linear-gradient(135deg, #667eea11, #764ba211);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 1.5rem;
    text-align: center;
}
.stat-card:hover { border-color: var(--primary); }
.stat-num { font-size: 2.2rem; font-weight: 700; color: var(--primary); }
.stat-warn .stat-num { color: var(--warn); }
.stat-label { color: var(--muted); font-size: .85rem; margin-top: .25rem; }

.section { margin: 2rem 0; }
.section h2 { font-size: 1.1rem; margin-bottom: .75rem; }

.file-list { display: flex; flex-direction: column; gap: .25rem; }
.file-item {
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .6rem .8rem;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    color: var(--text);
    text-decoration: none;
    transition: box-shadow .15s;
}
.file-item:hover { box-shadow: var(--shadow); text-decoration: none; }
.file-icon { font-size: 1.2rem; }
.file-name { flex: 1; font-size: .9rem; }
.file-meta { color: var(--muted); font-size: .8rem; }

.empty { color: var(--muted); font-size: .9rem; padding: 1rem 0; }

/* === 浏览页 === */
.browse-layout { display: flex; gap: 1.5rem; margin-top: 1rem; }
.browse-sidebar {
    width: 180px;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    gap: .25rem;
}
.browse-sidebar h3 { font-size: .85rem; color: var(--muted); margin-bottom: .5rem; }
.browse-sidebar a {
    padding: .4rem .6rem;
    border-radius: 4px;
    font-size: .85rem;
    color: var(--text);
    text-decoration: none;
}
.browse-sidebar a.active { background: var(--primary); color: #fff; }
.browse-sidebar a:hover:not(.active) { background: var(--bg); }
.browse-main { flex: 1; }

.file-table { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.ft-header, .ft-row {
    display: grid;
    grid-template-columns: 1fr 90px 140px 110px;
    gap: .5rem;
    padding: .6rem 1rem;
    font-size: .85rem;
    align-items: center;
}
.ft-folder { font-size: .8rem; }
.folder-select {
    padding: .2rem .4rem; border: 1px solid var(--border); border-radius: 4px;
    font-size: .75rem; background: var(--card); color: var(--text);
    max-width: 130px;
}
.ft-name-link { color: var(--text); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ft-name-link:hover { color: var(--primary); text-decoration: none; }
.ft-check { width: 30px; flex-shrink: 0; }
.ft-check input { cursor: pointer; }
.batch-bar {
    display: flex; align-items: center; gap: .75rem;
    padding: .5rem 1rem; background: var(--primary); color: #fff;
    border-radius: var(--radius); margin-bottom: .5rem; font-size: .85rem;
}
.batch-bar .btn { background: rgba(255,255,255,.2); border-color: rgba(255,255,255,.3); }
.batch-bar .btn:hover { background: rgba(255,255,255,.3); }
.batch-bar .btn-danger { background: var(--danger); }
.ft-header { background: var(--bg); color: var(--muted); font-weight: 600; border-bottom: 1px solid var(--border); }
.ft-row {
    border-bottom: 1px solid var(--border);
    color: var(--text);
    transition: background .1s;
}
.ft-row:last-child { border-bottom: none; }
.ft-row:hover { background: var(--hover-bg); }

.tag {
    display: inline-block;
    padding: .1rem .4rem;
    background: var(--bg);
    border-radius: 3px;
    font-size: .75rem;
    color: var(--muted);
}

/* === 详情页 === */
.detail-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: .5rem;
    margin-bottom: .75rem;
}
.breadcrumb { font-size: .9rem; color: var(--muted); }
.detail-actions { display: flex; gap: .5rem; }
.detail-meta {
    display: flex;
    gap: 1.5rem;
    flex-wrap: wrap;
    font-size: .85rem;
    color: var(--muted);
    margin-bottom: .75rem;
}
.detail-tags { display: flex; gap: .35rem; flex-wrap: wrap; margin-bottom: 1rem; }

.detail-tabs {
    display: flex;
    gap: .25rem;
    border-bottom: 2px solid var(--border);
    margin-bottom: 1rem;
}
.detail-tabs button {
    padding: .5rem 1rem;
    border: none;
    background: none;
    cursor: pointer;
    font-size: .85rem;
    color: var(--muted);
    border-bottom: 2px solid transparent;
    margin-bottom: -2px;
}
.detail-tabs button.active { color: var(--primary); border-bottom-color: var(--primary); }

.preview-box {
    background: #1e1e2e;
    color: #cdd6f4;
    border-radius: var(--radius);
    padding: 1.5rem;
    overflow: auto;
    max-height: 60vh;
    font-size: .85rem;
    line-height: 1.7;
    white-space: pre-wrap;
    font-family: "Cascadia Code", "Fira Code", "JetBrains Mono", "Consolas", monospace;
}
.preview-notext {
    background: var(--card);
    border: 1px dashed var(--border);
    color: var(--muted);
    text-align: center;
    padding: 3rem;
}

.refs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
.refs-col h3 { font-size: .9rem; margin-bottom: .5rem; }
.ref-link {
    display: block;
    padding: .4rem .6rem;
    background: var(--bg);
    border-radius: 4px;
    margin-bottom: .25rem;
    font-size: .85rem;
}

.dup-card {
    background: var(--dup-bg);
    border: 1px solid var(--dup-border);
    border-radius: var(--radius);
    padding: .8rem 1rem;
    margin-bottom: .75rem;
}
.dup-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: .5rem; font-size: .85rem; }
.dup-snippet {
    background: var(--bg);
    border-radius: 4px;
    padding: .6rem;
    font-size: .8rem;
    max-height: 120px;
    overflow: auto;
    white-space: pre-wrap;
}

/* === 编辑器 === */
/* === 编辑器页面（全屏） === */
.editor-page {
    position: fixed; top: 52px; left: 0; right: 0; bottom: 0;
    display: flex; flex-direction: column;
    background: #1e1e2e; z-index: 10;
}
.editor-header {
    display: flex; justify-content: space-between; align-items: center;
    flex-wrap: wrap; gap: .5rem;
    padding: .6rem 1.2rem;
    background: var(--card); border-bottom: 1px solid var(--border);
    flex-shrink: 0;
}
.editor-header .breadcrumb { font-size: .85rem; }
.editor-tip { font-size: .75rem; color: var(--muted); }
.editor-tip code { background: var(--bg); padding: .1rem .3rem; border-radius: 3px; }
.editor-container {
    flex: 1; overflow: hidden; position: relative;
}
.editor-container .CodeMirror {
    height: 100% !important; font-size: 15px;
    font-family: "Cascadia Code","Fira Code","JetBrains Mono","Consolas",monospace;
}
.editor-container .cm-editor { height: 100%; }
.editor-container .cm-editor .cm-scroller { font-family: "Cascadia Code","Fira Code","JetBrains Mono","Consolas",monospace; }
.CodeMirror-gutters { border-right: 1px solid #333 !important; }

.autocomplete {
    position: absolute;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    box-shadow: 0 4px 12px rgba(0,0,0,.1);
    max-height: 200px;
    overflow-y: auto;
    z-index: 10;
    min-width: 200px;
}
.ac-item {
    padding: .4rem .8rem;
    font-size: .85rem;
    cursor: pointer;
}
.ac-item.active, .ac-item:hover { background: var(--primary); color: #fff; }

#save-status { margin-top: .75rem; font-size: .85rem; }
.save-ok { color: #27ae60; }
.save-warn { color: var(--warn); }

/* === 搜索页 === */
.search-bar {
    display: flex;
    margin: 1rem 0 1.5rem;
}
.search-bar input {
    flex: 1;
    padding: .6rem 1rem;
    border: 1px solid var(--border);
    border-radius: var(--radius) 0 0 var(--radius);
    font-size: 1rem;
    outline: none;
}
.search-bar input:focus { border-color: var(--primary); }
.search-bar button {
    padding: .6rem 1.2rem;
    border: 1px solid var(--primary);
    background: var(--primary);
    color: #fff;
    border-radius: 0 var(--radius) var(--radius) 0;
    cursor: pointer;
    font-size: 1rem;
}
.search-info { color: var(--muted); margin-bottom: 1rem; font-size: .85rem; }

.search-item {
    display: block;
    padding: 1rem;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    margin-bottom: .5rem;
    color: var(--text);
    text-decoration: none;
}
.search-item:hover { box-shadow: var(--shadow); text-decoration: none; }
.si-title { display: flex; align-items: center; gap: .5rem; margin-bottom: .35rem; }
.si-snippet { font-size: .85rem; color: var(--muted); margin-bottom: .25rem; }
.si-snippet mark { background: var(--mark-bg); padding: 0 .1rem; border-radius: 2px; color: var(--mark-fg); }
.si-meta { font-size: .75rem; color: var(--muted); }

/* === 上传页 === */
.upload-zone {
    border: 2px dashed var(--border);
    border-radius: var(--radius);
    padding: 3rem 2rem;
    text-align: center;
    transition: border-color .2s, background .2s;
    margin: 1.5rem 0;
}
.upload-zone.dragover { border-color: var(--primary); background: #f0f2ff; }
.upload-icon { font-size: 2.5rem; margin-bottom: .5rem; }
.upload-zone p { color: var(--muted); margin-bottom: 1rem; }

.upload-queue { margin-top: 1.5rem; }
.queue-item {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: .5rem .8rem;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 4px;
    margin-bottom: .25rem;
    font-size: .85rem;
}
.qi-name { flex: 1; }
.qi-status.uploading { color: var(--primary); }
.qi-status.ok { color: #27ae60; }
.qi-status.error { color: var(--danger); }
.qi-result { color: var(--warn); }

.inbox-info {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 1rem 1.5rem;
}
.inbox-info h3 { font-size: .9rem; margin-bottom: .35rem; }
.inbox-info p { font-size: .85rem; color: var(--muted); }
.inbox-info code { background: var(--bg); padding: .15rem .4rem; border-radius: 3px; font-size: .85rem; }

/* === 底部 === */
.footer {
    text-align: center;
    padding: 1.5rem;
    border-top: 1px solid var(--border);
    color: var(--muted);
    font-size: .8rem;
    margin-top: 2rem;
}

/* === save-status === */
#save-status {
    position: fixed; bottom: 0; left: 0; right: 0;
    padding: .5rem 1.2rem; font-size: .85rem; text-align: center; z-index: 20;
    pointer-events: none;
}
.save-ok { background: #d4edda; color: #155724; }
.save-warn { background: #fff3cd; color: #856404; }

/* === 自动补全下拉 === */
.ac-dropdown {
    position: absolute; background: var(--card); border: 1px solid var(--border);
    border-radius: var(--radius); box-shadow: 0 8px 24px rgba(0,0,0,.15);
    max-height: 260px; overflow-y: auto; z-index: 50; min-width: 220px;
}
.ac-item { display: flex; align-items: center; gap: .5rem; padding: .45rem .75rem; cursor: pointer; font-size: .85rem; }
.ac-item.active, .ac-item:hover { background: var(--primary); color: #fff; }
.ac-icon { font-size: 1rem; width: 1.5rem; }
.ac-type { margin-left: auto; font-size: .7rem; opacity: .6; }
.ac-hint { display: flex; gap: .75rem; padding: .35rem .75rem; font-size: .7rem; color: var(--muted); border-top: 1px solid var(--border); background: var(--bg); }

/* === 标签管理 === */
.tag-x {
    margin-left: .25rem; cursor: pointer; background: none; border: none;
    color: var(--muted); font-size: .85rem; padding: 0 .1rem; line-height: 1;
}
.tag-x:hover { color: var(--danger); }
.tag-add input {
    border: 1px dashed var(--border); border-radius: 3px; padding: .1rem .3rem;
    font-size: .75rem; outline: none; background: transparent;
}
.tag-add input:focus { border-color: var(--primary); }

/* === 快捷操作 === */
.quick-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: .75rem; }
.action-card {
    display: flex; align-items: center; justify-content: center; gap: .5rem;
    padding: 1.25rem; background: var(--card); border: 1px solid var(--border);
    border-radius: var(--radius); font-size: .9rem; color: var(--text);
    text-decoration: none; transition: box-shadow .15s, border-color .15s;
}
.action-card:hover { box-shadow: var(--shadow); border-color: var(--primary); text-decoration: none; }

/* === 文件广场 === */
.plaza-hero { text-align:center; margin-bottom:1.5rem; }
.plaza-hero p { color:var(--muted); font-size:.9rem; }
.plaza-feed { display:flex; flex-direction:column; gap:.75rem; max-width:800px; margin:0 auto; }
.plaza-msg { display:flex; gap:.75rem; }
.plaza-avatar { width:36px; height:36px; border-radius:50%; background:var(--border); display:flex; align-items:center; justify-content:center; font-size:1.1rem; flex-shrink:0; color:#fff; font-weight:700; }
.owner-link { color:var(--text); font-weight:600; text-decoration:none; }
.owner-link:hover { color:var(--primary); text-decoration:underline; }
.plaza-bubble { flex:1; }
.plaza-sender { font-size:.8rem; color:var(--muted); margin-bottom:.25rem; }
.plaza-time { font-size:.75rem; margin-left:.5rem; }
.plaza-card { display:flex; align-items:center; gap:.75rem; padding:.75rem 1rem; background:var(--card); border:1px solid var(--border); border-radius:var(--radius); }
.plaza-fileicon { font-size:1.5rem; }
.plaza-filebody { flex:1; min-width:0; }
.plaza-filename { font-weight:600; color:var(--text); text-decoration:none; }
.plaza-filename:hover { color:var(--primary); }
.plaza-meta { font-size:.75rem; color:var(--muted); }
.plaza-tags { display:flex; gap:.25rem; margin-top:.25rem; flex-wrap:wrap; }
.plaza-dl { flex-shrink:0; }
.plaza-send { text-align:center; margin-top:1.5rem; padding:1rem; background:var(--card); border:1px solid var(--border); border-radius:var(--radius); position:sticky; bottom:0; }

/* 广场底部发布栏 */
.plaza-bar { display:flex; align-items:center; gap:.5rem; padding:.75rem 1rem; background:var(--card); border:1px solid var(--border); border-radius:var(--radius); position:sticky; bottom:0; margin-top:1rem; }
.plaza-input { flex:1; padding:.5rem .75rem; border:1px solid var(--border); border-radius:20px; font-size:.85rem; outline:none; background:var(--bg); }
.plaza-input:focus { border-color:var(--primary); }
.plaza-btn { display:flex; align-items:center; gap:.25rem; padding:.45rem .75rem; border:1px solid var(--border); border-radius:20px; cursor:pointer; font-size:.85rem; background:var(--bg); color:var(--text); white-space:nowrap; }
.plaza-btn:hover { background:var(--primary); color:#fff; border-color:var(--primary); }
.plaza-btn-text { font-size:.8rem; }

/* 资料库选择弹窗 */
.plaza-modal { position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:200; display:flex; align-items:center; justify-content:center; }
.plaza-modal-card { background:var(--card); border-radius:12px; width:90%; max-width:550px; max-height:80vh; display:flex; flex-direction:column; box-shadow:0 8px 40px rgba(0,0,0,.2); }
.plaza-modal-head { display:flex; align-items:center; gap:.5rem; padding:1rem 1.25rem; border-bottom:1px solid var(--border); }
.plaza-modal-head h3 { font-size:1rem; margin:0; white-space:nowrap; }
.plaza-modal-search { flex:1; padding:.35rem .6rem; border:1px solid var(--border); border-radius:6px; font-size:.85rem; outline:none; }
.plaza-modal-close { background:none; border:none; font-size:1.4rem; cursor:pointer; color:var(--muted); padding:0 .25rem; }
.plaza-modal-body { flex:1; overflow-y:auto; padding:.5rem; }
.plaza-modal-foot { display:flex; justify-content:space-between; align-items:center; padding:.75rem 1.25rem; border-top:1px solid var(--border); font-size:.85rem; }
.plaza-pick-item { display:flex; align-items:center; gap:.5rem; padding:.5rem .75rem; border-radius:6px; cursor:pointer; }
.plaza-pick-item:hover,.plaza-pick-item.picked { background:var(--hover-bg); }
.plaza-pick-icon { font-size:1.1rem; }
.plaza-pick-name { flex:1; font-size:.85rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.plaza-pick-size { font-size:.75rem; color:var(--muted); }
.plaza-pick-check { font-size:.85rem; }

/* === 评论区 === */
.comments-section { margin-top:2rem; padding-top:1.5rem; border-top:1px solid var(--border); }
.comments-section h3 { font-size:.95rem; margin-bottom:.75rem; }
.comment-list { display:flex; flex-direction:column; gap:.5rem; margin-bottom:.75rem; }
.comment-item { padding:.5rem .75rem; background:var(--bg); border-radius:var(--radius); }
.cmt-user { font-weight:600; font-size:.8rem; }
.cmt-time { font-size:.7rem; color:var(--muted); margin-left:.5rem; }
.cmt-content { font-size:.85rem; margin-top:.25rem; }
.comment-form { display:flex; gap:.5rem; }
.comment-form input { flex:1; padding:.4rem .6rem; border:1px solid var(--border); border-radius:var(--radius); font-size:.85rem; outline:none; }
.comment-form input:focus { border-color:var(--primary); }

/* === 浏览页 tab === */
.browse-tabs { display:flex; gap:.5rem; margin-bottom:1rem; }
.browse-tabs a { padding:.35rem .75rem; border-radius:var(--radius); font-size:.85rem; background:var(--card); border:1px solid var(--border); color:var(--text); text-decoration:none; }
.browse-tabs a.active { background:var(--primary); color:#fff; border-color:var(--primary); }

/* === 上传可见范围 === */
.upload-vis { display:flex; gap:1rem; align-items:center; justify-content:center; margin:.5rem 0; font-size:.85rem; }
.upload-vis label { cursor:pointer; }

/* === 分页 === */
.pagination { display: flex; align-items: center; justify-content: center; gap: 1rem; padding: 1rem 0; }
.pagination a { padding: .35rem .75rem; border: 1px solid var(--border); border-radius: 4px; font-size: .85rem; }
.pagination a:hover { background: var(--bg); text-decoration: none; }
.pagination span { font-size: .85rem; color: var(--muted); }

/* === 排序按钮 === */
.sort-btns { display: flex; gap: .35rem; align-items: center; font-size: .8rem; }
.sort-btns a { padding: .2rem .45rem; border-radius: 3px; color: var(--muted); }
.sort-btns a.active { background: var(--primary); color: #fff; }
.sort-btns a:hover:not(.active) { background: var(--bg); text-decoration: none; }

/* === 搜索筛选 === */
.search-filters { display: flex; gap: .35rem; align-items: center; flex-wrap: wrap; margin: .75rem 0; font-size: .8rem; }
.search-filters a { padding: .2rem .5rem; border-radius: 3px; color: var(--muted); }
.search-filters a.active { background: var(--primary); color: #fff; }
.search-filters a:hover:not(.active) { background: var(--bg); text-decoration: none; }
.search-filters span { color: var(--muted); margin-right: .25rem; }

/* === 上传进度 === */
.qi-progress { flex: 1; max-width: 150px; height: 4px; background: var(--border); border-radius: 2px; overflow: hidden; }
.qi-bar { height: 100%; background: var(--primary); border-radius: 2px; transition: width .3s; }
.qi-clear { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 1rem; padding: 0 .2rem; }
.qi-clear:hover { color: var(--danger); }

/* === 软件元数据 === */
.software-meta {
    display: flex; gap: 1.5rem; flex-wrap: wrap; font-size: .85rem;
    padding: .6rem 1rem; background: var(--bg); border-radius: var(--radius);
    margin-bottom: .5rem;
}
.software-meta a { font-size: .8rem; }

/* === 版本历史 === */
.version-list { display: flex; flex-direction: column; gap: .35rem; margin: 1rem 0; }
.version-item { display: flex; gap: 1rem; padding: .5rem .8rem; background: var(--bg); border-radius: 4px; font-size: .85rem; }
.v-time { color: var(--text); min-width: 120px; }
.v-size { color: var(--muted); min-width: 70px; }
.v-name { color: var(--muted); }

/* === 仪表盘增强 === */
.stat-warn a { display: inline-block; margin-top: .25rem; color: var(--warn); }

/* === Markdown 预览 === */
.preview-md {
    background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
    padding: 1.5rem 2rem; line-height: 1.8; font-size: .92rem;
}
.preview-md h1,.preview-md h2,.preview-md h3 { margin-top: 1.5rem; margin-bottom: .5rem; }
.preview-md h1 { font-size: 1.5rem; border-bottom: 1px solid var(--border); padding-bottom: .5rem; }
.preview-md h2 { font-size: 1.25rem; }
.preview-md h3 { font-size: 1.1rem; }
.preview-md code { background: var(--bg); padding: .15rem .4rem; border-radius: 3px; font-size: .85em; }
.preview-md pre { background: #1e1e2e; color: #cdd6f4; padding: 1rem; border-radius: var(--radius); overflow-x: auto; }
.preview-md pre code { background: none; padding: 0; }
.preview-md ul,.preview-md ol { padding-left: 1.5rem; }
.preview-md table { border-collapse: collapse; width: 100%; }
.preview-md th,.preview-md td { border: 1px solid var(--border); padding: .4rem .7rem; font-size: .85rem; }
.preview-md blockquote { border-left: 3px solid var(--primary); padding-left: 1rem; color: var(--muted); margin: .5rem 0; }

/* === 空状态 === */
.empty-state { text-align: center; padding: 2rem; }
.empty-state p { margin-bottom: .5rem; }
.hint { color: var(--muted); font-size: .85rem; }

/* === 文件夹添加 === */
.folder-add { margin-top: .35rem; }
.folder-add input {
    width: 100%; padding: .3rem .5rem; border: 1px dashed var(--border);
    border-radius: 4px; font-size: .8rem; outline: none; background: transparent;
}
.folder-add input:focus { border-color: var(--primary); }

/* === 统一搜索分栏 === */
.search-split { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-top: 1rem; }
.search-col { min-width: 0; }
.col-header { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; margin-bottom: .75rem; }
.col-header h2 { font-size: 1rem; margin: 0; }
.col-count { font-size: .8rem; color: var(--muted); }
.col-filters { display: flex; gap: .25rem; flex-wrap: wrap; }
.col-filters a { padding: .15rem .4rem; border-radius: 3px; font-size: .75rem; color: var(--muted); }
.col-filters a.active, .col-filters a:hover { background: var(--primary); color: #fff; text-decoration: none; }
.col-results { max-height: 65vh; overflow-y: auto; }

/* 全网结果项 */
.web-item { padding: .8rem 1rem; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: .5rem; }
.web-item:hover { box-shadow: var(--shadow); }
.wi-header { display: flex; align-items: center; gap: .5rem; margin-bottom: .35rem; }
.wi-trust { font-size: .85rem; flex-shrink: 0; }
.wi-title { font-size: .9rem; font-weight: 600; color: var(--primary); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wi-title:hover { text-decoration: underline; }
.wi-type { font-size: .7rem; background: var(--bg); padding: .1rem .35rem; border-radius: 3px; color: var(--muted); flex-shrink: 0; }
.wi-engine { font-size: .65rem; background: var(--primary); color: #fff; padding: .1rem .4rem; border-radius: 3px; font-weight: 600; flex-shrink: 0; margin-left: auto; }
.wi-snippet { font-size: .8rem; color: var(--muted); margin-bottom: .35rem; line-height: 1.5; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
.wi-footer { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.wi-domain { font-size: .7rem; color: var(--muted); }
.wi-save { font-size: .7rem !important; padding: .2rem .5rem !important; }

/* AI 分析 */
.ai-bar { display: flex; align-items: center; gap: .75rem; margin: .75rem 0; }
.ai-btn { background: linear-gradient(135deg, #667eea, #764ba2); border: none; font-size: .9rem; }
.ai-btn:hover { opacity: .9; }
.ai-btn:disabled { opacity: .5; cursor: not-allowed; }
.ai-hint { font-size: .8rem; color: var(--muted); }
.ai-card { background: linear-gradient(135deg, #f8f9ff, #f0f2ff); border: 1px solid #c4c8f0; border-radius: var(--radius); padding: 1rem 1.25rem; margin-bottom: 1rem; animation: fadeIn .3s; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } }
.ai-error { color: var(--danger); font-size: .85rem; }
.ai-section { margin-bottom: .75rem; }
.ai-section h4 { font-size: .85rem; margin-bottom: .2rem; }
.ai-section p { font-size: .85rem; color: var(--text); line-height: 1.6; }

/* === 设置页 === */
.settings-section { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem 1.5rem; margin-bottom: 1rem; }
.settings-section h2 { font-size: 1rem; margin-bottom: 1rem; }
.setting-row { display: flex; align-items: center; gap: .75rem; margin-bottom: .75rem; flex-wrap: wrap; }
.setting-row label { min-width: 100px; font-size: .85rem; font-weight: 600; }
.setting-row input[type="text"], .setting-row input[type="password"], .setting-row select, .setting-row textarea {
    padding: .4rem .6rem; border: 1px solid var(--border); border-radius: 4px; font-size: .85rem; outline: none;
}
.setting-row input:focus, .setting-row select:focus, .setting-row textarea:focus { border-color: var(--primary); }
.setting-row textarea { min-width: 350px; font-family: monospace; }
.setting-hint { font-size: .75rem; color: var(--muted); }
.checkbox-group { display: flex; gap: 1rem; }
.checkbox-group label { font-weight: 400; font-size: .85rem; cursor: pointer; }
.proxy-status { font-size: .85rem; }
.proxy-status.on { color: #27ae60; }
.proxy-status.off { color: var(--warn); }
.settings-actions { display: flex; align-items: center; gap: 1rem; margin: 1rem 0; }
.save-msg { font-size: .85rem; }
.save-ok { color: #27ae60; }
.save-err { color: var(--danger); }
.auto-save-hint { font-size: .75rem; color: var(--muted); }
.info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
.info-item { display: flex; justify-content: space-between; padding: .4rem .6rem; background: var(--bg); border-radius: 4px; font-size: .85rem; }
.info-label { color: var(--muted); }

/* === RSS 页 === */
.rss-form { display: flex; gap: .5rem; margin: 1rem 0; flex-wrap: wrap; }
.rss-form input { padding: .4rem .6rem; border: 1px solid var(--border); border-radius: 4px; font-size: .85rem; outline: none; }
.rss-list { display: flex; flex-direction: column; gap: .25rem; margin: 1rem 0; }
.rss-item { display: flex; align-items: center; gap: .75rem; padding: .5rem .75rem; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); font-size: .85rem; }
.rss-name { font-weight: 600; min-width: 100px; }
.rss-url { color: var(--muted); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rss-last { color: var(--muted); font-size: .75rem; }

/* === 对话搜索 === */
.chat-search-form { display: flex; gap: .5rem; margin: .5rem 0; }
.chat-search-form input { flex: 1; padding: .5rem .75rem; border: 1px solid var(--border); border-radius: var(--radius); font-size: .9rem; outline: none; }

/* === 下载页 === */
.dl-form { display: flex; flex-direction: column; gap: .75rem; margin: 1.25rem 0; }
.dl-form input[type="text"] { padding: .6rem 1rem; border: 1px solid var(--border); border-radius: var(--radius); font-size: .95rem; outline: none; width: 100%; }
.dl-form input:focus { border-color: var(--primary); }
.dl-opts { display: flex; align-items: center; gap: 1rem; }
.dl-opts select { padding: .35rem .5rem; border: 1px solid var(--border); border-radius: 4px; }
.dl-filename { font-weight: 600; margin-bottom: .5rem; }
.dl-bar-wrap { height: 10px; background: var(--border); border-radius: 5px; overflow: hidden; margin-bottom: .35rem; }
.dl-bar { height: 100%; background: var(--primary); border-radius: 5px; transition: width .3s; }
.dl-stats { font-size: .85rem; color: var(--muted); margin-bottom: .75rem; }
.dl-threads { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: .25rem; margin-bottom: 1rem; }
.dl-thread { display: flex; align-items: center; gap: .35rem; font-size: .7rem; }
.dt-idx { color: var(--muted); min-width: 1.5rem; }
.dt-bar-wrap { flex: 1; height: 4px; background: var(--border); border-radius: 2px; overflow: hidden; }
.dt-bar { height: 100%; background: var(--success); border-radius: 2px; transition: width .3s; }
.dl-info { margin-top: 2rem; padding: 1rem 1.25rem; background: var(--bg); border-radius: var(--radius); }
.dl-info h3 { font-size: .9rem; margin-bottom: .35rem; }
.dl-info p { font-size: .85rem; color: var(--muted); }

/* === 搜索引擎切换栏 === */
.engine-bar { display: flex; align-items: center; gap: .35rem; margin: .5rem 0 .75rem; font-size: .8rem; }
.engine-bar a { padding: .2rem .5rem; border-radius: 3px; color: var(--muted); }
.engine-bar a.active { background: var(--primary); color: #fff; }
.engine-bar a:hover:not(.active) { background: var(--bg); text-decoration: none; }
.engine-hint { margin-left: auto; font-size: .75rem; color: var(--muted); }

/* === 响应式 === */
/* === 错误页 === */
.error-page { text-align:center; padding:4rem 2rem; }
.error-icon { font-size:4rem; margin-bottom:1rem; }
.error-page h1 { font-size:3rem; color:var(--muted); margin-bottom:.5rem; }
.error-page p { color:var(--muted); margin-bottom:1.5rem; }

/* === 通知红点 === */
.notify-btn { position:relative; background:none; border:none; cursor:pointer; font-size:1rem; padding:.2rem; }
.notify-badge { display:none; position:absolute; top:-2px; right:-4px; min-width:16px; height:16px; background:var(--danger); color:#fff; border-radius:8px; font-size:.65rem; line-height:16px; text-align:center; padding:0 4px; }
.notify-dropdown { position:absolute; top:48px; right:120px; width:320px; max-height:400px; background:var(--card); border:1px solid var(--border); border-radius:var(--radius); box-shadow:0 8px 32px rgba(0,0,0,.15); z-index:200; overflow:hidden; }
.notify-list { max-height:340px; overflow-y:auto; }
.notify-item { display:flex; justify-content:space-between; align-items:center; padding:.6rem .8rem; border-bottom:1px solid var(--border); font-size:.82rem; }
.notify-item:hover { background:var(--hover-bg); }
.notify-item a { color:var(--text); text-decoration:none; flex:1; }
.notify-item a:hover { color:var(--primary); }
.notify-time { color:var(--muted); font-size:.7rem; margin-left:.5rem; white-space:nowrap; }
.notify-empty { padding:1.5rem; text-align:center; color:var(--muted); font-size:.85rem; }
.notify-read-all { width:100%; padding:.4rem; border:none; background:var(--bg); color:var(--primary); cursor:pointer; font-size:.8rem; border-top:1px solid var(--border); }
.notify-read-all:hover { background:var(--hover-bg); }

/* === admin badge === */
.admin-badge { display:inline-block; background:var(--primary); color:#fff; font-size:.6rem; padding:.1rem .35rem; border-radius:3px; margin-left:.3rem; vertical-align:middle; text-transform:uppercase; font-weight:700; letter-spacing:.5px; }

/* === 注册按钮 === */
.nav-register { background:var(--primary); color:#fff !important; padding:.3rem .7rem !important; border-radius:var(--radius); font-weight:600; }
.nav-register:hover { opacity:.9; }

/* === 可见性标识 === */
.vis-badge { display:inline-block; font-size:.7rem; padding:.15rem .4rem; border-radius:3px; font-weight:600; }
.vis-badge.private { background:var(--warn); color:#fff; }
.vis-badge.public { background:var(--success); color:#fff; }

/* === 文件所有者 === */
.owner-info { display:flex; align-items:center; gap:.3rem; font-size:.8rem; color:var(--muted); }
.owner-info .owner-name { font-weight:600; color:var(--text); }

@media (max-width: 700px) {
    /* 导航栏折叠 */
    .nav-inner { gap: .35rem; flex-wrap:wrap; height:auto; padding:.4rem 0; }
    .nav-brand { font-size:1rem; }
    .nav-links { gap:.35rem; overflow-x:auto; width:100%; order:3; }
    .nav-links a { font-size:.75rem; padding:.15rem .3rem; white-space:nowrap; }
    .nav-search { order:2; flex-basis:auto; margin:0; }
    .nav-search input { width: 100px; padding:.3rem .5rem; }
    .nav-user { order:1; margin-left:auto; }
    .nav-username { display:none; }
    .nav-register { font-size:.75rem; padding:.2rem .5rem !important; }
    .admin-badge { display:none; }

    /* 布局 */
    .container { padding: .75rem .5rem 2rem; }
    .browse-layout { flex-direction: column; }
    .browse-sidebar { flex-direction: row; width: auto; flex-wrap: wrap; overflow-x:auto; }
    .browse-sidebar h3 { display:none; }
    .browse-sidebar a { font-size:.75rem; padding:.3rem .5rem; white-space:nowrap; }
    .refs-grid { grid-template-columns: 1fr; }
    .search-split { grid-template-columns: 1fr; gap:.75rem; }
    .plaza-feed { max-width:100%; }
    .quick-actions { grid-template-columns: 1fr 1fr; }
    .info-grid { grid-template-columns: 1fr; }

    /* 表格 */
    .ft-header, .ft-row { grid-template-columns: 1fr 50px 50px 80px; font-size:.7rem; gap:.25rem; padding:.4rem .5rem; }
    .ft-header span:nth-child(4), .ft-row span:nth-child(4) { display:none; }

    /* 详情 */
    .detail-meta { gap: .35rem; font-size:.8rem; }
    .detail-actions { gap:.25rem; }
    .detail-actions .btn { padding:.3rem .5rem; font-size:.8rem; }

    /* 设置 */
    .settings-section { padding:.75rem; }
    .setting-row { flex-direction:column; align-items:flex-start; gap:.3rem; }
    .setting-row label { min-width:auto; }
    .setting-row input, .setting-row select, .setting-row textarea { width:100%; }
    .user-row { font-size:.75rem; gap:.35rem; flex-wrap:wrap; }

    /* 搜索 */
    .search-bar input { font-size:.85rem; padding:.5rem; }
    .col-header { flex-wrap:wrap; gap:.25rem; }
    .web-item { padding:.5rem .7rem; }

    /* 广场 */
    .plaza-card { padding:.5rem .7rem; gap:.5rem; }
    .plaza-fileicon { font-size:1.2rem; }
    .plaza-bar { flex-wrap:wrap; gap:.35rem; }
    .plaza-btn-text { display:none; }

    /* 编缉器 */
    .editor-page { top:auto; }
    .editor-header { gap:.25rem; padding:.4rem .6rem; }

    /* 表单 */
    .dl-form input[type="text"] { font-size:.85rem; }
    .dl-opts { flex-direction:column; gap:.5rem; }

    /* 通知下拉 */
    .notify-dropdown { right:0; width:280px; }
}
