*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;background:#faf8f6;color:#222}
a{color:#c81623;text-decoration:none}.wrap{max-width:1200px;margin:0 auto;padding:0 16px}
header{background:#fff;border-bottom:1px solid #eee;position:sticky;top:0;z-index:10}
.head{display:flex;align-items:center;gap:28px;height:64px}
.logo{font-family:"Songti SC","STSong","SimSun",serif;font-size:26px;font-weight:700;color:#111;letter-spacing:2px}
.head-search{flex:1;display:flex;gap:8px;justify-content:center;align-items:center}
.head-search input{padding:8px 14px;border:1px solid #eee;border-radius:20px;width:320px;max-width:60vw;outline:none;background:#f5f5f5;font-size:14px}
.search-btn{padding:8px 20px;border:none;background:#111;color:#fff;border-radius:20px;cursor:pointer;font-size:14px}
.head-right{margin-left:auto;display:flex;gap:10px;align-items:center}
.head-right input{padding:7px 10px;border:1px solid #ddd;border-radius:20px;width:200px;outline:none}
.guest{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:14px;color:#333}
.guest-avatar{width:36px;height:36px;border-radius:50%;background:#c81623;color:#fff;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:700}
.navrow{display:flex;align-items:center;gap:6px;height:48px;border-top:1px solid #f5f5f5}
nav a{margin-right:4px;color:#333;font-size:15px;padding:6px 16px;border-radius:20px}
nav a.active{background:#111;color:#fff}
.publish-btn{margin-left:auto;padding:7px 18px;border:none;background:#c81623;color:#fff;border-radius:20px;cursor:pointer;font-size:14px}
main{display:flex;gap:28px;padding:20px 16px 40px}
.main-col{flex:1;min-width:0}
#view{flex:1;min-width:0}
#side{width:300px;flex-shrink:0}
.card{background:#fff;border:1px solid #eee;border-radius:10px;padding:16px;margin-bottom:14px}
.card h3{margin:0 0 8px;font-size:16px}
.muted{color:#888;font-size:13px}
.post{display:flex;gap:14px;padding:18px 0;border-bottom:1px solid #eee;cursor:pointer}
.post:first-child{padding-top:6px}
.avatar{width:44px;height:44px;border-radius:50%;background:#0f766e;color:#fff;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;flex-shrink:0}
.post-body{flex:1;min-width:0}
.post h2{margin:0 0 6px;font-size:16px;font-weight:600;color:#111}
.post .meta{color:#999;font-size:12px;margin-top:6px}
.post .excerpt{color:#444;font-size:14px;line-height:1.6;word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fav-star{background:none;border:none;font-size:19px;color:#aaa;cursor:pointer;flex-shrink:0;padding:0;line-height:1;margin-top:2px}
.fav-star:hover{color:#c81623}
.post-detail{display:block;padding:6px 0 18px;border-bottom:1px solid #eee;cursor:default}
.post-detail h2{font-size:20px;margin:0 0 8px;color:#111}
.post-detail .excerpt{color:#333;font-size:15px;line-height:1.8;white-space:pre-wrap;word-break:break-word;display:block;-webkit-line-clamp:unset;overflow:visible}
.post-detail .meta{color:#999;font-size:12px;margin-top:10px}
.redpacket-card{background:#fdf0ef;border:1px solid #f3c1bd;border-radius:10px;padding:14px;margin-bottom:14px;display:flex;gap:12px;align-items:flex-start;cursor:pointer}
.rp-icon{width:40px;height:40px;background:#c81623;border-radius:6px;position:relative;flex-shrink:0}
.rp-icon:before{content:"";position:absolute;left:6px;right:6px;top:6px;height:4px;background:#f5c542;border-radius:2px}
.rp-dot{position:absolute;width:12px;height:12px;background:#f5c542;border-radius:50%;top:16px;left:14px}
.rp-text{flex:1;min-width:0}
.rp-text h3{margin:0 0 4px;font-size:15px;color:#c81623}
.rp-text p{margin:0;font-size:12px;line-height:1.6;color:#8a5a55}
.rp-arrow{color:#c81623;font-size:18px;flex-shrink:0;line-height:1.4}
.hotcard h3{font-size:16px}
.hot-sub{font-size:12px;color:#999;font-weight:400;margin-left:6px}
#hotList{list-style:none;margin:10px 0 0;padding:0}
#hotList li{display:flex;gap:8px;align-items:baseline;padding:7px 0;border-bottom:1px solid #f5f5f5;font-size:14px}
#hotList li:last-child{border-bottom:none}
#hotList .rank{font-weight:700;color:#999;width:16px;flex-shrink:0}
#hotList .rank.top{color:#c81623}
#hotList a{color:#333;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#hotList a:hover{color:#c81623}
#hotList .hcount{color:#999;font-size:12px;flex-shrink:0}
.btn{padding:8px 16px;border:1px solid #ddd;background:#fff;border-radius:6px;cursor:pointer;font-size:14px}
.btn.primary{background:#c81623;color:#fff;border-color:#c81623}
.btn:disabled{opacity:.5;cursor:not-allowed}
input,textarea,select{padding:8px 10px;border:1px solid #ddd;border-radius:6px;font-size:14px;width:100%}
textarea{min-height:120px;resize:vertical}
label{display:block;font-size:13px;color:#666;margin:12px 0 4px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.qrtabs button{margin:0 4px 8px 0;padding:5px 12px;border:1px solid #ddd;background:#fff;border-radius:16px;cursor:pointer;font-size:13px}
.qrtabs button.active{background:#111;color:#fff;border-color:#111}
#qrBox img{max-width:180px;display:block;margin:6px auto}
.qr-name{text-align:center;font-weight:700;margin:8px 0 2px}
.qr-desc{text-align:center;color:#888;font-size:13px;margin:0 0 4px}
.qr-empty{text-align:center;padding:10px 0}
#refreshBar{color:#999;font-size:12px;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.pause-btn{padding:2px 10px;border:1px solid #ddd;background:#fff;border-radius:12px;cursor:pointer;font-size:12px;color:#666}
#modal .mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:50}
#modal .box{background:#fff;border-radius:10px;padding:20px;width:420px;max-width:92vw;max-height:90vh;overflow:auto}
.toggle{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid #f0f0f0}
.toggle .desc{color:#888;font-size:12px}
.switch{position:relative;width:44px;height:24px;flex-shrink:0}
.switch input{opacity:0;width:0;height:0}
.slider{position:absolute;inset:0;background:#ccc;border-radius:24px;cursor:pointer;transition:.2s}
.slider:before{content:"";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:.2s}
.switch input:checked + .slider{background:#c81623}
.switch input:checked + .slider:before{transform:translateX(20px)}
.tag{display:inline-block;background:#fff2f2;color:#c81623;border:1px solid #ffd0d0;border-radius:4px;padding:1px 6px;font-size:12px;margin-right:6px}
.stat{display:inline-block;background:#fff;border:1px solid #eee;border-radius:8px;padding:10px 16px;margin:0 8px 8px 0}
.stat b{font-size:20px;display:block}
.shopcard{background:#fff;border:1px solid #eee;border-radius:8px;padding:14px;margin-bottom:10px}
.shopcard .price{color:#c81623;font-weight:700;font-size:18px}
.shopcard .old{color:#999;text-decoration:line-through;font-size:13px;margin-left:8px}
@media(max-width:800px){main{flex-direction:column}#side{width:100%}.head-search input{width:120px}.head{gap:12px}.logo{font-size:22px}}

/* ---- 后台独立页面（#/admin）---- */
body.admin-mode #side{display:none}
body.admin-mode #refreshBar{display:none}
body.admin-mode main{display:block}
.admin-page{padding:8px 0 32px}
.admin-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.admin-head h2{margin:0;font-size:22px;color:#111}
.admin-head p{margin:4px 0 0}
.admin-head-btns{display:flex;gap:8px;flex-shrink:0}
.admin-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}
.admin-tabs button{padding:7px 16px;border:1px solid #ddd;background:#fff;border-radius:20px;cursor:pointer;font-size:14px;color:#333}
.admin-tabs button.active{background:#111;color:#fff;border-color:#111}
.admin-body{max-width:860px}
.admin-card{background:#fff;border:1px solid #eee;border-radius:10px;padding:20px;margin-bottom:16px}
.admin-card h4{margin:0 0 10px;font-size:16px;color:#111}
.admin-card h4:first-child{margin-top:0}
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.stat-card{background:#fff;border:1px solid #eee;border-radius:10px;padding:18px 16px}
.stat-card b{display:block;font-size:28px;color:#111;line-height:1.2}
.stat-card span{color:#888;font-size:13px}
.src-line{display:flex;flex-direction:column;gap:2px;padding:8px 0;border-bottom:1px solid #f5f5f5;font-size:14px}
.src-line:last-child{border-bottom:none}
.admin-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:14px}
.log-list{max-height:320px;overflow-y:auto;border:1px solid #f0f0f0;border-radius:8px}
.log-row{display:flex;gap:10px;align-items:baseline;padding:9px 12px;border-bottom:1px solid #f5f5f5;font-size:13px;line-height:1.5;word-break:break-word}
.log-row:last-child{border-bottom:none}
.log-time{color:#999;white-space:nowrap;flex-shrink:0}
.log-src{color:#b91c1c;white-space:nowrap;flex-shrink:0;font-weight:600}
.admin-table{width:100%;border-collapse:collapse;font-size:14px}
.admin-table th{text-align:left;color:#888;font-weight:500;font-size:13px;padding:8px 10px;border-bottom:1px solid #eee}
.admin-table td{padding:10px;border-bottom:1px solid #f5f5f5;vertical-align:top;word-break:break-word}
.admin-table tr:last-child td{border-bottom:none}
.admin-page .btn.primary{background:#111;border-color:#111;border-radius:20px}
.btn.danger{color:#c81623;border-color:#f3c1bd;background:#fff}
.btn.danger:hover{background:#fdf0ef}
.admin-page label{margin:14px 0 4px}
.admin-page input,.admin-page select,.admin-page textarea{max-width:640px}
.admin-page .grid input{max-width:none}
@media(max-width:800px){.stat-grid{grid-template-columns:repeat(2,1fr)}.admin-head{flex-direction:column}}

/* ---- 文章正文里的链接 ---- */
.post .excerpt a,.post-detail .excerpt a,#comments a{color:#c81623;text-decoration:underline;word-break:break-all}
.post .excerpt a:hover,.post-detail .excerpt a:hover{text-decoration:underline}


/* ---- 前台打磨：统一间距、圆角与悬停 ---- */
header{box-shadow:0 1px 4px rgba(0,0,0,.05)}
nav a:hover{background:#f5f5f5}
nav a.active:hover{background:#111}
.post{transition:background .15s}
.post:hover{background:#fffdfb}
.post h2:hover{color:#c81623}
.btn:hover{border-color:#b5b5b5}
.btn.primary:hover{background:#a8121c;border-color:#a8121c}
.publish-btn:hover{background:#a8121c}
.search-btn:hover{background:#333}
.card{box-shadow:0 1px 3px rgba(0,0,0,.03)}
input:focus,textarea:focus,select:focus{border-color:#c81623;outline:none}
#modal .box{box-shadow:0 20px 50px rgba(0,0,0,.22);border-radius:12px}
.redpacket-card:hover{border-color:#e8a49f}
#hotList li:hover{background:#faf8f6}
#hotList li{border-radius:6px;padding:7px 6px}
.guest:hover{color:#c81623}
.shopcard{box-shadow:0 1px 3px rgba(0,0,0,.03)}

/* ---- 用户下拉菜单 ---- */
.user-menu{position:relative}
.user-chip{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #eee;border-radius:22px;padding:4px 12px 4px 4px;cursor:pointer;font-size:14px;color:#333}
.user-chip:hover{border-color:#ccc;box-shadow:0 1px 4px rgba(0,0,0,.06)}
.user-chip .caret{font-size:11px;color:#999}
.role-tag{background:#fff2f2;color:#c81623;border:1px solid #ffd0d0;border-radius:4px;padding:1px 6px;font-size:12px}
.user-drop{position:absolute;right:0;top:48px;width:236px;background:#fff;border:1px solid #eee;border-radius:12px;box-shadow:0 12px 32px rgba(0,0,0,.14);padding:6px;z-index:60}
.ud-head{padding:10px 12px;border-bottom:1px solid #f0f0f0;margin-bottom:6px}
.ud-head b{display:block;font-size:14px}
.user-drop>button{display:block;width:100%;text-align:left;background:none;border:none;padding:9px 12px;border-radius:8px;cursor:pointer;font-size:14px;color:#333}
.user-drop>button:hover{background:#f7f5f3}
.ud-theme{border-top:1px solid #f0f0f0;margin-top:6px;padding:10px 12px 6px}
.ud-theme>span{font-size:13px;color:#888}
.theme-btns{display:flex;gap:6px;margin-top:8px}
.theme-btns button{flex:1;padding:5px 0;border:1px solid #ddd;background:#fff;border-radius:14px;cursor:pointer;font-size:12px;color:#333}
.theme-btns button.active{background:#111;color:#fff;border-color:#111}
.fav-row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid #f5f5f5;cursor:pointer;font-size:14px}
.fav-row:last-child{border-bottom:none}
.fav-row b{font-weight:500;color:#111}
.fav-row:hover b{color:#c81623}

/* ---- 后台侧边栏布局 ---- */
.admin-page{padding:8px 0 32px}
.admin-shell{display:flex;align-items:flex-start}
.admin-side{width:232px;flex-shrink:0;background:#fff;border:1px solid #eee;border-radius:12px;padding:14px;position:sticky;top:130px;box-shadow:0 1px 3px rgba(0,0,0,.03)}
.admin-brand{display:flex;gap:10px;align-items:center;padding:4px 6px 14px;border-bottom:1px solid #f0f0f0;margin-bottom:10px}
.admin-logo{width:38px;height:38px;border-radius:10px;background:#c81623;color:#fff;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;flex-shrink:0}
.admin-brand b{display:block;font-size:16px;color:#111}
.admin-brand span{font-size:12px;color:#999}
.admin-nav button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:none;padding:10px 12px;border-radius:8px;cursor:pointer;font-size:14px;color:#444;margin-bottom:2px}
.admin-nav button:hover{background:#f7f5f3}
.admin-nav button.active{background:#e8f5e9;color:#15803d;font-weight:700}
.admin-nav .ic{width:20px;text-align:center;flex-shrink:0}
.admin-side-foot{border-top:1px solid #f0f0f0;margin-top:12px;padding-top:12px}
.admin-side-foot .btn{width:100%}
.admin-user{display:flex;gap:10px;align-items:center;margin-bottom:10px}
.admin-user b{display:block;font-size:14px;color:#111}
.admin-main{flex:1;min-width:0;padding:0 0 0 22px}
.admin-topbar{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px}
.admin-topbar h2{margin:0;font-size:22px;color:#111}
.admin-topbar p{margin:4px 0 0}
.admin-shell .admin-body{max-width:none}
.admin-tabs{display:none}
.stat-ic{font-size:18px}
.admin-table th{background:#faf8f6}
@media(max-width:900px){.admin-shell{flex-direction:column}.admin-side{width:100%;position:static}.admin-main{padding:16px 0 0}}

/* ---- 深色主题 ---- */
body.dark{background:#161718;color:#e4e4e4}
body.dark header,body.dark .card,body.dark .admin-card,body.dark .stat-card,body.dark .admin-side,body.dark #modal .box,body.dark .user-drop,body.dark .shopcard{background:#1f2023;border-color:#333}
body.dark .logo,body.dark .post h2,body.dark .post-detail h2,body.dark .admin-topbar h2,body.dark .admin-card h4,body.dark .card h3,body.dark .admin-brand b,body.dark .admin-user b,body.dark .fav-row b{color:#f0f0f0}
body.dark nav a{color:#ddd}
body.dark nav a:hover{background:#2a2b2e}
body.dark .post .excerpt{color:#bbb}
body.dark .head-search input,body.dark input,body.dark textarea,body.dark select{background:#2a2b2e;border-color:#444;color:#eee}
body.dark .post{border-color:#2c2d30}
body.dark .post:hover{background:#232427}
body.dark #hotList a{color:#ddd}
body.dark #hotList li:hover{background:#232427}
body.dark .btn{background:#2a2b2e;border-color:#444;color:#eee}
body.dark .admin-table th{background:#232427;color:#999;border-color:#333}
body.dark .admin-table td{border-color:#2c2d30}
body.dark .admin-nav button{color:#ddd}
body.dark .admin-nav button:hover{background:#2a2b2e}
body.dark .admin-nav button.active{background:#14532d;color:#86efac}
body.dark .user-drop>button{color:#ddd}
body.dark .user-drop>button:hover{background:#2a2b2e}
body.dark .user-chip{background:#1f2023;border-color:#333;color:#eee}
body.dark .theme-btns button{background:#2a2b2e;border-color:#444;color:#eee}
body.dark .redpacket-card{background:#2a1f1e;border-color:#4a2c2a}
body.dark .rp-text p{color:#c9a39e}
body.dark .fav-row{border-color:#2c2d30}

/* ---- 采集源管理 ---- */
.src-form{display:grid;grid-template-columns:1fr 2fr 150px;gap:12px;align-items:end}
.src-form label{margin:0 0 4px}
.src-row{display:flex;gap:14px;justify-content:space-between;align-items:flex-start;padding:14px 0;border-bottom:1px solid #f0f0f0}
.src-row:last-child{border-bottom:none}
.src-info{flex:1;min-width:0}
.src-title{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:14px}
.src-url{color:#888;font-size:12px;word-break:break-all;margin:4px 0}
.src-actions{display:flex;gap:8px;align-items:center;flex-shrink:0}
.src-actions .btn{padding:6px 12px;font-size:13px}
@media(max-width:800px){.src-form{grid-template-columns:1fr}.src-row{flex-direction:column}.src-actions{flex-wrap:wrap}}
.pin-badge{display:inline-block;background:#b91c1c;color:#fff;border-radius:4px;padding:1px 6px;font-size:12px;font-weight:700;line-height:1.5;vertical-align:2px;margin-right:6px}
