/* ═══ BookShelf Shared CSS — 温暖杂志风 ═══ */
:root {
  --cream: #FAF7F2; --warm-white: #FFFDF9; --terracotta: #C4715B;
  --terracotta-light: #E8A090; --deep-brown: #3D2B1F; --medium-brown: #6B4C3B;
  --light-brown: #A0785A; --sage: #8B9E7C; --sage-light: #C5D4B8;
  --sand: #E8DDD0; --sand-light: #F2EAE1; --muted-text: #8C7B6E;
  --shadow-warm: rgba(61,43,31,0.08); --shadow-md: rgba(61,43,31,0.13);
}

/* ── Dark Mode (Beta) ── */
body.dark-mode{
  --cream:#1c1c1e;--warm-white:#2c2c2e;--deep-brown:#f2efe9;
  --medium-brown:#b8a898;--light-brown:#9a8878;--muted-text:#7a7068;
  --sand:#3a3632;--sand-light:#45413d;
  --shadow-warm:rgba(0,0,0,0.35);--shadow-md:rgba(0,0,0,0.5);
}
body.dark-mode .navbar-book{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .footer-book{background:#1a1715;}
body.dark-mode .book-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .settings-pane,
body.dark-mode .settings-sidebar{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .settings-sidebar-header{border-color:var(--sand);}
body.dark-mode .settings-sidebar-footer{border-color:var(--sand);}
body.dark-mode .settings-pane-row{border-color:var(--sand);}
body.dark-mode .settings-pane-input,
body.dark-mode .settings-pane-textarea{background:#3a3632;border-color:var(--sand);color:var(--deep-brown);}
body.dark-mode .form-check-input{background-color:#555;border-color:#777;}
body.dark-mode .dropdown-menu{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .alert-success{background:rgba(139,158,124,0.15);border-color:rgba(139,158,124,0.3);color:#c5d4b8;}
body.dark-mode .alert-danger{background:rgba(196,113,91,0.15);border-color:rgba(196,113,91,0.3);color:var(--terracotta-light);}
body.dark-mode .alert-warning{background:rgba(212,184,150,0.15);border-color:rgba(212,184,150,0.3);color:#d4b896;}

/* ── Dark mode: Hero search ── */
body.dark-mode .hero-section{background:linear-gradient(135deg,#2c2c2e 0%,#3a3632 100%);border-color:var(--sand);}
body.dark-mode .hero-search .form-control{background:#3a3632;color:var(--deep-brown);border-color:#555;}
body.dark-mode .hero-search .form-control::placeholder{color:var(--muted-text);}
body.dark-mode .hero-search .form-control:focus{border-color:var(--terracotta);}

/* ── Dark mode: Book cards in grid ── */
body.dark-mode .home-book-row .book-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .no-cover{background:#3a3632;color:var(--deep-brown);}
body.dark-mode .book-footer-tag{border-color:var(--sand);}

/* ── Dark mode: Cat pills ── */
body.dark-mode .cat-pill{background:#3a3632;color:#e8e0d8;border-color:#555;}
body.dark-mode .cat-pill:hover{background:var(--terracotta);border-color:var(--terracotta);color:white;}
body.dark-mode .cat-pill.active{background:var(--terracotta);border-color:var(--terracotta);color:white;}

/* ── Dark mode: Subcat pills ── */
body.dark-mode .subcat-pills{background:#3a3632;}
body.dark-mode .subcat-pill{color:var(--muted-text);}
body.dark-mode .subcat-pill:hover{background:var(--sand);color:var(--terracotta);}
body.dark-mode .subcat-pill.active{background:var(--terracotta);color:white;}

/* ── Dark mode: Books search ── */
body.dark-mode .books-search-form{background:#3a3632;border-color:#555;}
body.dark-mode .books-search-form:focus-within{border-color:var(--terracotta);}
body.dark-mode .books-search-input{color:var(--deep-brown);}
body.dark-mode .books-search-input::placeholder{color:var(--muted-text);}
body.dark-mode .books-search-icon{color:var(--muted-text);}

/* ── Dark mode: Books toolbar ── */
body.dark-mode .books-result-info{color:var(--muted-text);}
body.dark-mode .books-result-info strong{color:var(--terracotta);}
body.dark-mode .books-sort-btn{background:#3a3632;border-color:#555;color:var(--muted-text);}
body.dark-mode .books-sort-btn:hover{border-color:var(--terracotta);color:var(--terracotta);}
body.dark-mode .books-sort-menu{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .books-sort-item{color:var(--medium-brown);}
body.dark-mode .books-sort-item:hover{background:var(--sand-light);}
body.dark-mode .books-sort-item.active{color:var(--terracotta);background:var(--sand-light);}
body.dark-mode .books-divider{border-color:var(--sand);}

/* ── Dark mode: Pagination ── */
body.dark-mode .page-warm{background:#3a3632;color:var(--medium-brown);border-color:#555;}
body.dark-mode .page-warm:hover{border-color:var(--terracotta);color:var(--terracotta);}
body.dark-mode .page-warm.active{background:var(--terracotta);color:white;border-color:var(--terracotta);}
body.dark-mode .page-warm.disabled{opacity:0.35;}
body.dark-mode .page-warm-ellipsis{color:var(--muted-text);}
body.dark-mode .pagination-warm-info{color:var(--muted-text);}

/* ── Dark mode: Rank gold/silver/bronze ── */
body.dark-mode .profile-list-item.rank-gold{background:linear-gradient(90deg,#3d3620 0%,#332d1a 100%);border-bottom-color:#5a4a20;}
body.dark-mode .profile-list-item.rank-gold:hover{background:linear-gradient(90deg,#4a4030 0%,#403525 100%);}
body.dark-mode .profile-list-item.rank-silver{background:linear-gradient(90deg,#2d2f35 0%,#25272d 100%);border-bottom-color:#3d4048;}
body.dark-mode .profile-list-item.rank-silver:hover{background:linear-gradient(90deg,#36383e 0%,#2e3036 100%);}
body.dark-mode .profile-list-item.rank-bronze{background:linear-gradient(90deg,#352520 0%,#2d1f1a 100%);border-bottom-color:#5a3020;}
body.dark-mode .profile-list-item.rank-bronze:hover{background:linear-gradient(90deg,#403028 0%,#382822 100%);}
body.dark-mode .profile-list-item{border-bottom-color:var(--sand);}
body.dark-mode .profile-list-item:hover{background:var(--sand-light);}

/* ── Dark mode: Detail page ── */
body.dark-mode .detail-hero{background:linear-gradient(160deg,#2c2c2e 60%,#3a3632 100%);border-color:var(--sand);}
body.dark-mode .detail-tag{background:#3a3632;color:var(--medium-brown);}
body.dark-mode .detail-tag:hover{background:var(--terracotta);color:white;}
body.dark-mode .detail-meta-grid{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .detail-action-primary{background:#3a3632;}
body.dark-mode .excerpt-block{background:#3a3632;}
body.dark-mode .btn-fav{background:#3a3632;color:var(--medium-brown);border-color:#555;}
body.dark-mode .btn-fav:hover{border-color:var(--terracotta);color:var(--terracotta);}
body.dark-mode .btn-dl{background:#3a3632;color:var(--medium-brown);border-color:#555;}

/* ── Dark mode: Comments & form controls ── */
body.dark-mode .comment-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .comment-body{color:var(--medium-brown);}
body.dark-mode .form-control,body.dark-mode textarea.form-control{background:#3a3632;color:var(--deep-brown);border-color:#555;}
body.dark-mode .form-control::placeholder,body.dark-mode textarea.form-control::placeholder{color:var(--muted-text);}
body.dark-mode .form-control:focus,body.dark-mode textarea.form-control:focus{border-color:var(--terracotta);box-shadow:0 0 0 3px rgba(196,113,91,0.15);}

/* ── Dark mode: Divider / Sections ── */
body.dark-mode .divider{background:var(--sand);}
body.dark-mode .section-link:hover{color:var(--terracotta-light);}
body.dark-mode .warm-tabs{border-color:var(--sand);}

/* ── Dark mode: Reading grid ── */
body.dark-mode .reading-card-h{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .reading-card-h:hover{border-color:var(--terracotta-light);}

/* ── Dark mode: Hero subtitle ── */
body.dark-mode .hero-sub{color:var(--muted-text);}

/* ── Dark mode: Rating list ── */
body.dark-mode .rating-list-item{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .rating-list-item:hover{background:var(--sand-light);border-color:var(--terracotta-light);}

/* ── Dark mode: Nav link hover ── */
body.dark-mode .navbar-book .nav-link:hover,
body.dark-mode .navbar-book .nav-link.active{background:#3a3632;}

/* ── Dark mode: Rank metrics ── */
body.dark-mode .rank-metric{background:#3a3632;color:var(--muted-text);}
body.dark-mode .rank-metric-score{color:var(--terracotta);background:rgba(196,113,91,0.12);}
body.dark-mode .rank-metric-views{color:var(--medium-brown);background:rgba(139,115,85,0.1);}
body.dark-mode .rank-metric-favs{color:var(--sage);background:rgba(139,168,131,0.12);}

/* ── Dark mode: Profile page ── */
body.dark-mode .profile-hero{background:linear-gradient(160deg,#2c2c2e 0%,#3a3632 60%,rgba(196,113,91,0.06) 100%);border-color:var(--sand);}
body.dark-mode .reading-dashboard{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .reading-summary-col{border-color:var(--sand);}
body.dark-mode .reading-tag{background:#3a3632;color:var(--medium-brown);}
body.dark-mode .reading-tag:hover{background:var(--terracotta);color:white;}
body.dark-mode .profile-entry-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .profile-entry-card:hover{border-color:var(--terracotta-light);}
body.dark-mode .profile-hero-meta{border-color:var(--sand);}
body.dark-mode .reading-banner{background:linear-gradient(135deg,rgba(139,158,124,0.08),rgba(196,113,91,0.04));border-color:var(--sand);}
body.dark-mode .reading-banner:hover{border-color:var(--terracotta-light);}

/* ── Dark mode: Admin ── */
body.dark-mode .admin-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .admin-table th{background:#3a3632;color:var(--medium-brown);}
body.dark-mode .admin-table td{border-color:var(--sand);color:var(--medium-brown);}
body.dark-mode .admin-table tbody tr:hover{background:rgba(58,54,50,0.5);}
body.dark-mode .admin-card .form-control,
body.dark-mode .admin-card .form-select{background:#3a3632;color:var(--deep-brown);border-color:#555;}
body.dark-mode .btn-sm-st{background:#3a3632;color:var(--medium-brown);border-color:#555;}
body.dark-mode .btn-sm-st:hover{border-color:var(--terracotta);color:var(--terracotta);}
body.dark-mode .badge-gray{background:#3a3632;color:var(--muted-text);}
body.dark-mode .admin-list{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .admin-list-header{background:#3a3632;border-color:var(--sand);}
body.dark-mode .admin-list-item{border-color:var(--sand);color:var(--medium-brown);}
body.dark-mode .admin-list-item:hover{background:rgba(58,54,50,0.5);}
body.dark-mode .badge-green{background:rgba(139,158,124,0.2);color:#a0b890;}
body.dark-mode .badge-orange{background:rgba(196,113,91,0.2);color:var(--terracotta-light);}
body.dark-mode .admin-cover-placeholder{background:#3a3632;color:var(--muted-text);}

/* ── Dark mode: Auth pages ── */
body.dark-mode .auth-page{background:linear-gradient(160deg,#2c2c2e 0%,#3a3632 50%,#1c1c1e 100%);}
body.dark-mode .auth-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .form-input{background:#3a3632;color:var(--deep-brown);border-color:#555;}
body.dark-mode .form-input::placeholder{color:var(--muted-text);}
body.dark-mode .form-input:focus{border-color:var(--terracotta);}
body.dark-mode .auth-footer{color:var(--muted-text);}
body.dark-mode .oauth-icon-link{background:var(--warm-white);border-color:var(--sand);color:var(--deep-brown);}
body.dark-mode .oauth-icon-link:hover{border-color:#12B7F5;}
body.dark-mode .oauth-divider::before,
body.dark-mode .oauth-divider::after{background:var(--sand);}

/* ── Dark mode: Ranking tab desc ── */
body.dark-mode .ranking-tab-desc{color:var(--muted-text);}

/* ── Comment textarea ── */
.comment-textarea{border:1.5px solid var(--sand);border-radius:14px;padding:1rem;font-size:0.9rem;resize:vertical;}
body.dark-mode .comment-textarea{border-color:#555;background:#3a3632;color:var(--deep-brown);}
body.dark-mode .comment-textarea::placeholder{color:var(--muted-text);}
body.dark-mode .comment-textarea:focus{border-color:var(--terracotta);box-shadow:0 0 0 3px rgba(196,113,91,0.15);}

/* ── Dark mode: Detail page extra ── */
body.dark-mode .detail-progress{background:rgba(0,0,0,0.8);}
body.dark-mode .stat-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .report-chart-card{background:var(--warm-white);border-color:var(--sand);}
body.dark-mode .bar{background:#3a3632;}
body.dark-mode .report-timeline-item{border-color:var(--sand);}
body.dark-mode .timeline-content{color:var(--medium-brown);}
body.dark-mode .detail-breadcrumb a{color:var(--muted-text);}
body.dark-mode .detail-breadcrumb a:hover{color:var(--terracotta);}
body.dark-mode .detail-breadcrumb [aria-current="page"]{color:var(--deep-brown);}
body.dark-mode .empty-state .empty-icon{color:var(--sand);}
body.dark-mode .empty-state .empty-text{color:var(--muted-text);}
body.dark-mode .settings-breadcrumb a{color:var(--muted-text);}
body.dark-mode .settings-breadcrumb a:hover{color:var(--terracotta);}
body.dark-mode .settings-nav-item{color:var(--medium-brown);}
body.dark-mode .settings-nav-item:hover{background:var(--sand-light);color:var(--deep-brown);}
body.dark-mode .settings-nav-item.active{background:var(--terracotta);color:white;}
body.dark-mode .settings-panel-header{color:var(--deep-brown);}
body.dark-mode .settings-pane-label{color:var(--deep-brown);}
body.dark-mode .settings-pane-desc{color:var(--muted-text);}
body.dark-mode .settings-pane-placeholder{color:var(--muted-text);}
body.dark-mode .settings-pane-row:hover{background:rgba(255,255,255,0.02);}
body.dark-mode .settings-sidebar-name{color:var(--deep-brown);}
body.dark-mode .settings-sidebar-email{color:var(--muted-text);}
body.dark-mode .settings-beta-badge{background:#3a3632;color:var(--muted-text);}
body.dark-mode .settings-nav-logout:hover{background:rgba(196,113,91,0.12);}

*{box-sizing:border-box;margin:0;padding:0;}
body{background:var(--cream);font-family:'Noto Sans SC',sans-serif;color:var(--deep-brown);line-height:1.7;}
h1,h2,h3,h4,.serif{font-family:'Noto Serif SC',serif;}
a{text-decoration:none;}
.container-narrow{max-width:1140px;margin:0 auto;padding:0 1.5rem;}

/* ── Skip Link (无障碍) ── */
.skip-link{position:absolute;top:-100%;left:50%;transform:translateX(-50%);background:var(--terracotta);color:white;padding:0.6rem 1.5rem;border-radius:0 0 10px 10px;font-size:0.9rem;font-weight:500;z-index:9999;transition:top 0.2s;}
.skip-link:focus{top:0;color:white;text-decoration:none;}

/* ── Focus Visible (无障碍) ── */
:focus-visible{outline:2px solid var(--terracotta);outline-offset:2px;border-radius:4px;}

/* ── Touch Optimization ── */
.btn-warm, .nav-link, .cat-pill, .status-btn, .action-btn, .book-card,
.btn-login, .btn-register, .btn-sm-st, .mobile-nav-link{touch-action:manipulation;-webkit-tap-highlight-color:transparent;}

/* ── Navbar ── */
.navbar-book{background:var(--warm-white);border-bottom:1px solid var(--sand);box-shadow:0 2px 12px var(--shadow-warm);padding:0.75rem 0;position:sticky;top:0;z-index:100;}
.navbar-book .nav-inner{display:flex;align-items:center;}
.navbar-book .nav-left{flex:0 0 auto;}
.navbar-book .nav-center{flex:1;display:flex;justify-content:center;align-items:center;}
.navbar-book .nav-right{flex:0 0 auto;display:flex;align-items:center;gap:0.5rem;}
.navbar-book .nav-links{display:flex;align-items:center;gap:0.15rem;}
.navbar-book .nav-link{color:var(--medium-brown);font-weight:500;font-size:0.92rem;padding:0.45rem 0.9rem;border-radius:20px;transition:all 0.25s;text-decoration:none;min-height:44px;display:inline-flex;align-items:center;}
.navbar-book .nav-link:hover,.navbar-book .nav-link.active{color:var(--terracotta);background:var(--sand-light);}
.navbar-book .brand{font-family:'Noto Serif SC',serif;font-size:1.35rem;font-weight:700;color:var(--terracotta)!important;letter-spacing:2px;text-decoration:none;}
/* ── 汉堡按钮 ── */
.navbar-book .navbar-toggler{border:none;background:transparent;color:var(--medium-brown);font-size:1.6rem;padding:0.4rem 0.6rem;border-radius:10px;transition:all 0.2s;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center;}
.navbar-book .navbar-toggler:hover{background:var(--sand-light);color:var(--terracotta);}

/* ── Offcanvas 移动端侧边栏 ── */
.mobile-offcanvas{background:var(--warm-white);border-left:1px solid var(--sand);max-width:280px;}
.mobile-offcanvas .offcanvas-header{border-bottom:1px solid var(--sand);padding:1.2rem 1.5rem;}
.mobile-offcanvas .offcanvas-body{padding:1rem 0;}
.mobile-nav-links{display:flex;flex-direction:column;gap:0.15rem;padding:0 0.5rem;}
.mobile-nav-link{display:flex;align-items:center;gap:0.7rem;padding:0.8rem 1.2rem;border-radius:14px;color:var(--medium-brown);font-size:0.95rem;font-weight:500;transition:all 0.2s;min-height:44px;text-decoration:none;}
.mobile-nav-link:hover,.mobile-nav-link.active{background:var(--sand-light);color:var(--terracotta);}
.mobile-nav-link i{font-size:1.1rem;width:20px;text-align:center;}

.avatar-circle{width:36px;height:36px;border-radius:50%;background:var(--terracotta-light);color:white;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:0.85rem;flex-shrink:0;overflow:hidden;}
.avatar-circle .avatar-img{width:100%;height:100%;object-fit:cover;border-radius:50%;}
.avatar-upload-btn{
  position:absolute;bottom:0;right:0;width:26px;height:26px;
  border-radius:50%;background:var(--terracotta);color:white;
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;border:2px solid white;transition:background 0.2s;
}
.avatar-upload-btn:hover{background:var(--deep-brown);}

/* ── Avatar Dropdown (Bootstrap Dropdown click-triggered) ── */
.avatar-dropdown .avatar-circle[data-bs-toggle="dropdown"]{cursor:pointer;}
.avatar-dropdown .avatar-circle[data-bs-toggle="dropdown"]:hover{opacity:0.85;}
.avatar-menu{
  min-width:220px;
  background:var(--warm-white);border:1px solid var(--sand);
  border-radius:14px;box-shadow:0 8px 28px var(--shadow-md);
  padding:0.5rem 0;z-index:200;overflow:hidden;
  animation:avatarMenuIn 0.15s ease;
}
@keyframes avatarMenuIn{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:translateY(0);}}
.dropdown-header-avatar{
  display:flex;align-items:center;gap:0.75rem;
  padding:0.75rem 1.1rem;text-decoration:none;
  transition:background 0.15s;border-radius:8px;margin:0 0.4rem;
}
.dropdown-header-avatar:hover{background:var(--sand-light);}
.dropdown-header-info{flex:1;min-width:0;}
.dropdown-header-name{font-weight:600;font-size:0.9rem;color:var(--deep-brown);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dropdown-header-email{font-size:0.78rem;color:var(--muted-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.avatar-divider{margin:0.3rem 0;border:none;border-top:1px solid var(--sand);}
.avatar-menu-item{
  display:flex;align-items:center;gap:0.5rem;
  padding:0.55rem 1.1rem;font-size:0.85rem;
  color:var(--medium-brown);text-decoration:none;
  transition:background 0.15s;white-space:nowrap;
}
.avatar-menu-item:hover,.avatar-menu-item:focus{background:var(--sand-light);color:var(--terracotta);}

/* ── Hero ── */
.hero-section{background:linear-gradient(135deg,var(--warm-white) 0%,var(--sand-light) 100%);border-bottom:1px solid var(--sand);padding:5rem 0 4.5rem;position:relative;overflow:hidden;}
.hero-section::before{content:'';position:absolute;top:-70px;right:-70px;width:450px;height:450px;border-radius:50%;background:radial-gradient(circle,var(--terracotta-light) 0%,transparent 70%);opacity:0.12;}
.hero-title{font-family:'Noto Serif SC',serif;font-size:3rem;font-weight:700;line-height:1.25;}
.hero-title em{font-style:normal;color:var(--terracotta);}
.hero-sub{font-size:1.1rem;color:var(--muted-text);max-width:480px;margin-top:1rem;}
.hero-search{margin-top:2.2rem;max-width:480px;}
.hero-search form{align-items:center;}
.hero-search .form-control{flex:1;border:2px solid var(--sand);border-radius:30px;padding:0.55rem 1.2rem;font-size:0.95rem;background:var(--warm-white);transition:border-color 0.25s;}
.hero-search .form-control:focus{border-color:var(--terracotta);box-shadow:0 0 0 3px rgba(196,113,91,0.15);outline:none;}
.hero-search .btn-warm{padding:0.55rem 1.6rem;font-size:0.95rem;white-space:nowrap;flex-shrink:0;}
.btn-warm{border-radius:30px;background:var(--terracotta);color:white;border:none;padding:0.9rem 2rem;font-weight:500;transition:all 0.25s;cursor:pointer;display:inline-block;text-decoration:none;font-size:0.95rem;min-height:44px;}
.btn-warm:hover{background:var(--deep-brown);color:white;}
.btn-warm:active{transform:scale(0.97);}
.cat-pills{margin-top:2rem;display:flex;flex-wrap:wrap;gap:0.5rem;}
.cat-pill{border-radius:20px;border:1.5px solid var(--sand);background:white;color:var(--medium-brown);padding:0.4rem 1.1rem;font-size:0.85rem;font-weight:500;cursor:pointer;transition:all 0.2s;min-height:44px;display:inline-flex;align-items:center;}
.cat-pill:hover,.cat-pill.active{background:var(--terracotta);border-color:var(--terracotta);color:white;}
.cat-pill:active{transform:scale(0.95);}

/* ── Subcategory pills ── */
.subcat-pills{display:flex;flex-wrap:wrap;gap:0.4rem;margin-top:0.8rem;margin-bottom:1rem;padding:0.6rem 0.8rem;background:var(--sand-light);border-radius:12px;}
.subcat-pill{
  padding:0.25rem 0.75rem;border-radius:16px;
  font-size:0.78rem;font-weight:500;color:var(--medium-brown);
  text-decoration:none;transition:all 0.2s;
  display:inline-flex;align-items:center;
}
.subcat-pill:hover{background:white;color:var(--terracotta);}
.subcat-pill.active{background:var(--terracotta);color:white;}

/* ── Books Search Section ── */
.books-search-section{margin-bottom:1.2rem;}
.books-search-form{
  display:flex;align-items:center;gap:0;
  background:var(--warm-white);border:2px solid var(--sand);
  border-radius:30px;overflow:hidden;
  transition:all 0.25s;flex:1;
}
.books-search-wrap{
  display:flex;align-items:center;gap:0.6rem;max-width:600px;margin:0 auto;
}
.books-search-form:focus-within{
  border-color:var(--terracotta);
  box-shadow:0 0 0 4px rgba(196,113,91,0.08);
}
.books-search-icon{
  color:var(--muted-text);font-size:1rem;
  padding-left:1.2rem;flex-shrink:0;
}
.books-search-input{
  flex:1;border:none;outline:none;padding:0.55rem 0.8rem;
  font-size:1rem;color:var(--deep-brown);background:transparent;
  font-family:'Noto Sans SC',sans-serif;
}
.books-search-input::placeholder{color:var(--muted-text);}

/* ── Books Toolbar ── */
.books-toolbar{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:0.6rem;
}
.books-toolbar-left{flex:1;}
.books-toolbar-right{flex-shrink:0;}
.books-result-info{font-size:0.85rem;color:var(--muted-text);}
.books-result-info strong{color:var(--terracotta);font-weight:700;}
.books-divider{border-color:var(--sand);margin:0.6rem 0 1.5rem;}

.books-sort-dropdown{position:relative;}
.books-sort-btn{
  display:inline-flex;align-items:center;gap:0.4rem;
  padding:0.45rem 1rem;border-radius:20px;
  border:1.5px solid var(--sand);background:var(--warm-white);
  color:var(--medium-brown);font-size:0.85rem;font-weight:500;
  cursor:pointer;transition:all 0.2s;
  font-family:'Noto Sans SC',sans-serif;
}
.books-sort-btn:hover{border-color:var(--terracotta);color:var(--terracotta);}
.books-sort-menu{
  display:none;position:absolute;right:0;top:100%;
  margin-top:0.4rem;background:var(--warm-white);
  border:1px solid var(--sand);border-radius:12px;
  box-shadow:0 8px 28px var(--shadow-md);
  min-width:140px;z-index:100;overflow:hidden;
}
.books-sort-menu.active{display:block;}
.books-sort-item{
  display:block;padding:0.6rem 1.2rem;font-size:0.85rem;
  color:var(--medium-brown);text-decoration:none;
  transition:background 0.15s;
}
.books-sort-item:hover{background:var(--sand-light);}
.books-sort-item.active{color:var(--terracotta);font-weight:600;background:var(--sand-light);}

/* ── Books Empty State ── */
.books-empty-state{text-align:center;padding:4rem 1rem;}
.books-empty-icon{font-size:3.5rem;color:var(--sand);margin-bottom:1rem;}
.books-empty-title{font-family:'Noto Serif SC',serif;font-size:1.2rem;color:var(--deep-brown);margin-bottom:0.5rem;}
.books-empty-text{font-size:0.9rem;color:var(--muted-text);margin-bottom:1.5rem;line-height:1.7;}
.books-empty-text strong{color:var(--terracotta);}

/* ── Ranking Tab Description ── */
.ranking-tab-desc{
  font-size:0.8rem;color:var(--muted-text);
  margin-top:-0.5rem;margin-bottom:1.5rem;
  padding-left:0.2rem;
}

/* ── Rank top-3 list row backgrounds ── */
.profile-list-item.rank-gold{
  background:linear-gradient(90deg,#FFF9E6 0%,#FFF5D6 100%);
  border-bottom-color:#E8D5A3;
}
.profile-list-item.rank-gold:hover{background:linear-gradient(90deg,#FFF3D0 0%,#FFECB8 100%);}
.profile-list-item.rank-silver{
  background:linear-gradient(90deg,#F5F7FA 0%,#ECEFF4 100%);
  border-bottom-color:#C5CBD6;
}
.profile-list-item.rank-silver:hover{background:linear-gradient(90deg,#EAEEF5 0%,#E0E6F0 100%);}
.profile-list-item.rank-bronze{
  background:linear-gradient(90deg,#FDF3F0 0%,#FAE8E2 100%);
  border-bottom-color:#E0C0B3;
}
.profile-list-item.rank-bronze:hover{background:linear-gradient(90deg,#F9E4DC 0%,#F5D5CA 100%);}

/* ── Sections ── */
.page-section2{padding:3.5rem 0;}
.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:2rem;}
.section-title{font-family:'Noto Serif SC',serif;font-size:1.45rem;font-weight:600;color:var(--deep-brown);}
.section-title::before{content:'';display:inline-block;width:4px;height:1.1em;background:var(--terracotta);border-radius:2px;margin-right:0.55rem;vertical-align:middle;}
.section-link{color:var(--terracotta);text-decoration:none;font-size:0.88rem;font-weight:500;}
.section-link:hover{color:var(--deep-brown);}
.divider{height:1px;background:var(--sand);margin:3rem 0;}

/* ── Book Cards (Home style) ── */
.book-card{background:var(--warm-white);border-radius:12px;overflow:hidden;border:1px solid var(--sand);box-shadow:0 3px 12px var(--shadow-warm);transition:all 0.3s;cursor:pointer;height:100%;-webkit-tap-highlight-color:transparent;}
.book-card:hover{transform:translateY(-5px);box-shadow:0 12px 32px var(--shadow-md);border-color:var(--terracotta-light);}
.book-card:active{transform:translateY(-2px) scale(0.98);}
.cover-wrap{position:relative;aspect-ratio:3/4;overflow:hidden;background:var(--warm-white);padding:14px 14px 0 14px;}
.cover-img{width:80%;height:80%;margin:auto;display:block;object-fit:cover;transition:transform 0.4s;border-radius:4px;}
.book-card:hover .cover-img{transform:scale(1.05);}
.cover-badge{position:absolute;top:20px;left:20px;background:var(--terracotta);color:white;font-size:0.6rem;font-weight:600;padding:2px 6px;border-radius:8px;z-index:1;}
.cover-fav{position:absolute;top:20px;right:20px;width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,0.92);border:none;display:flex;align-items:center;justify-content:center;color:var(--muted-text);font-size:0.8rem;transition:all 0.2s;opacity:0;cursor:pointer;z-index:1;}
.book-card:hover .cover-fav{opacity:1;}
.cover-fav:hover{color:var(--terracotta);background:white;}
.card-body-pad{padding:0.6rem 0.7rem 0.7rem;}
.book-title{font-family:'Noto Serif SC',serif;font-size:0.78rem;font-weight:600;color:var(--deep-brown);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.2em;}
.book-author{font-size:0.68rem;color:var(--muted-text);margin-top:0.2rem;}
.book-meta{display:flex;align-items:center;justify-content:space-between;margin-top:0.4rem;}
.stars{color:var(--terracotta);font-size:0.65rem;letter-spacing:1px;}
.stars .empty{color:var(--sand);}
.book-views{font-size:0.65rem;color:var(--muted-text);}
.douban-badge{display:inline-flex;align-items:center;gap:3px;background:linear-gradient(135deg,#0a3d0a,#1a6b1a);color:#81c784;font-size:0.6rem;font-weight:600;padding:1px 5px;border-radius:3px;}
.no-cover{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--sand-light);color:var(--light-brown);font-family:'Noto Serif SC',serif;font-size:0.85rem;padding:0.6rem;text-align:center;}
.book-footer-tag{font-size:0.68rem;color:var(--muted-text);margin-top:0.35rem;padding-top:0.35rem;border-top:1px solid var(--sand);}

/* ── Book Cards (List simple style) ── */
.book-card-simple{background:white;border:none;box-shadow:none;}
.book-card-simple:hover{transform:none;box-shadow:0 4px 16px var(--shadow-warm);border-color:transparent;}
.book-card-simple .cover-wrap{border-radius:0;aspect-ratio:auto;padding:1rem 0;background:transparent;}
.book-card-simple .cover-img{width:75%;height:auto;margin:0 auto;display:block;border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,0.1);}
.book-card-simple .card-body-pad{padding:0.8rem 0.5rem;text-align:center;}
.book-card-simple .book-title{font-family:'Noto Sans SC',sans-serif;font-size:0.9rem;}
.book-card-simple .book-author{font-size:0.78rem;margin-top:0.2rem;}

/* ── 5-column grid ── */
.col-lg-2-4{position:relative;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);}
@media(min-width:992px){.col-lg-2-4{flex:0 0 auto;width:20%;}}

/* ── Home Book Row (larger gap) ── */
.home-book-row{--bs-gutter-x:1.2rem;--bs-gutter-y:1.5rem;}

/* ── Detail ── */
.detail-hero{background:linear-gradient(160deg,var(--warm-white) 60%,var(--sand-light) 100%);padding:3.5rem 0 3rem;border-bottom:1px solid var(--sand);}
.detail-cover{border-radius:16px;box-shadow:0 10px 40px rgba(61,43,31,0.2);aspect-ratio:2/3;object-fit:cover;width:100%;}
.detail-progress{position:absolute;bottom:0;left:0;right:0;background:rgba(61,43,31,0.75);color:white;font-size:0.78rem;padding:5px 10px;border-radius:0 0 16px 16px;}
.detail-title{font-family:'Noto Serif SC',serif;font-size:2.1rem;font-weight:700;line-height:1.3;margin-bottom:0.4rem;}
.detail-author{font-size:1.05rem;color:var(--muted-text);}
.detail-stats{display:flex;gap:2.5rem;margin:1.5rem 0;}
.detail-stat{text-align:center;}
.detail-stat .num{font-family:'Noto Serif SC',serif;font-size:1.7rem;font-weight:700;color:var(--terracotta);}
.detail-stat .label{font-size:0.75rem;color:var(--muted-text);margin-top:2px;}
.rating-row{display:flex;align-items:center;gap:0.6rem;margin:1.2rem 0;flex-wrap:wrap;}
.rating-big{font-family:'Noto Serif SC',serif;font-size:1.5rem;font-weight:700;color:var(--terracotta);}
.rating-stars-big{color:var(--terracotta);font-size:1.1rem;}
.rating-count{font-size:0.82rem;color:var(--muted-text);}
.detail-tags{display:flex;flex-wrap:wrap;gap:0.4rem;margin-top:1rem;}
.detail-tag{background:var(--sand-light);color:var(--medium-brown);border-radius:12px;padding:4px 12px;font-size:0.78rem;}
.detail-tag:hover{background:var(--terracotta);color:white;}
.status-btn{
  background:white;border:1.5px solid var(--sand);color:var(--muted-text);
  border-radius:20px;padding:0.4rem 1.1rem;font-size:0.82rem;font-weight:500;
  cursor:pointer;transition:all 0.25s;display:inline-flex;align-items:center;gap:0.35rem;
  min-height:44px;
}
.status-btn:hover{border-color:var(--terracotta);color:var(--terracotta);}
.status-btn.active{background:var(--terracotta);border-color:var(--terracotta);color:white;}
.status-btn:active{transform:scale(0.95);}
.detail-meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:0.7rem;margin-top:1.5rem;background:var(--warm-white);border-radius:14px;padding:1.3rem;border:1px solid var(--sand);}
.detail-meta-item .mlabel{font-size:0.73rem;color:var(--muted-text);}
.detail-meta-item .mvalue{font-size:0.87rem;font-weight:500;color:var(--deep-brown);}
.action-btn{border-radius:30px;padding:0.75rem 2rem;font-weight:500;border:2px solid transparent;transition:all 0.25s;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:0.5rem;min-height:44px;}
.btn-read{background:var(--terracotta);color:white;}
.btn-read:hover{background:var(--deep-brown);color:white;}
.btn-read:active{transform:scale(0.97);}
.btn-fav{background:white;border-color:var(--sand);color:var(--medium-brown);}
.btn-fav:hover{border-color:var(--terracotta);color:var(--terracotta);}
.btn-fav:active{transform:scale(0.97);}
.btn-dl{background:white;border-color:var(--sand);color:var(--medium-brown);}
.btn-dl:hover{border-color:var(--sage);color:var(--sage);}
.excerpt-block{background:var(--sand-light);border-left:4px solid var(--terracotta-light);border-radius:0 14px 14px 0;padding:1.2rem 1.5rem;font-family:'Noto Serif SC',serif;font-style:italic;color:var(--medium-brown);line-height:1.9;margin:1.5rem 0;}
.excerpt-block .attribution{text-align:right;font-size:0.8rem;font-style:normal;margin-top:0.5rem;color:var(--muted-text);}

/* ── Comments ── */
.comment-card{background:var(--warm-white);border-radius:14px;border:1px solid var(--sand);padding:1.2rem;margin-bottom:0.9rem;}
.comment-avatar{width:38px;height:38px;border-radius:50%;background:var(--terracotta-light);color:white;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:0.85rem;flex-shrink:0;}
.comment-name{font-weight:600;font-size:0.88rem;color:var(--deep-brown);}
.comment-time{font-size:0.75rem;color:var(--muted-text);}
.comment-body{font-size:0.9rem;color:var(--medium-brown);margin-top:0.4rem;line-height:1.7;}
.comment-del-btn{cursor:pointer;font-size:1.1rem;color:var(--sand);transition:all 0.2s;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;}
.comment-del-btn:hover{color:var(--terracotta);background:rgba(196,113,91,0.1);}
.comment-del-btn:active{transform:scale(0.95);}
.profile-list-item.deleted{opacity:0.35;pointer-events:none;}

/* ── Stat Cards ── */
.stat-card{background:var(--warm-white);border-radius:18px;border:1px solid var(--sand);padding:1.8rem 1.5rem;text-align:center;box-shadow:0 4px 14px var(--shadow-warm);}
.stat-card .snum{font-family:'Noto Serif SC',serif;font-size:2.2rem;font-weight:700;color:var(--terracotta);}
.stat-card .slab{font-size:0.83rem;color:var(--muted-text);margin-top:4px;}

/* ── Tabs ── */
.warm-tabs{border-bottom:2px solid var(--sand);display:flex;gap:0;margin-bottom:2rem;}
.warm-tabs .nav-link{border:none;color:var(--muted-text);font-weight:500;padding:0.75rem 1.5rem;border-bottom:2px solid transparent;margin-bottom:-2px;border-radius:0;transition:all 0.2s;cursor:pointer;background:transparent;display:inline-flex;align-items:center;gap:0.4rem;font-size:0.9rem;min-height:44px;}
.warm-tabs .nav-link:hover{color:var(--terracotta);}
.warm-tabs .nav-link.active{color:var(--terracotta);border-bottom-color:var(--terracotta);}

/* ── Admin ── */
.admin-header-bar{background:var(--deep-brown);padding:2rem 0 1rem;}
body.dark-mode .admin-header-bar{background:#2c1f17;}
.admin-card{background:var(--warm-white);border-radius:18px;border:1px solid var(--sand);box-shadow:0 4px 18px var(--shadow-warm);overflow:hidden;}
.admin-card .card-header{background:linear-gradient(135deg,#3D2B1F,#6B4C3B);color:white;padding:1rem 1.5rem;font-family:'Noto Serif SC',serif;font-size:1.05rem;border:none;}
.admin-card .card-body{padding:1.5rem;}
.admin-table th{background:var(--sand-light);color:var(--medium-brown);font-size:0.8rem;font-weight:600;border:none;padding:0.75rem 1rem;}
.admin-table td{border-color:var(--sand);padding:0.8rem 1rem;font-size:0.87rem;vertical-align:middle;}
.admin-table tbody tr:hover{background:rgba(232,221,208,0.4);}
.badge-st{border-radius:20px;padding:3px 12px;font-size:0.75rem;font-weight:500;}
.badge-green{background:var(--sage-light);color:#3D5A2B;}
.badge-orange{background:var(--terracotta-light);color:white;}
.badge-gray{background:var(--sand);color:var(--muted-text);}
.btn-sm-st{border-radius:8px;padding:4px 11px;font-size:0.76rem;border:1px solid var(--sand);background:white;color:var(--medium-brown);transition:all 0.2s;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:4px;min-height:36px;min-width:36px;}
.btn-sm-st:hover{border-color:var(--terracotta);color:var(--terracotta);}

/* ── Auth Pages ── */
.auth-page { min-height:100vh; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(160deg,var(--warm-white) 0%,var(--sand-light) 50%,var(--cream) 100%);
  position:relative; overflow:hidden; padding:2rem 0; margin:-1px 0; }
.auth-page::before { content:''; position:absolute; top:-120px; right:-80px; width:500px; height:500px;
  border-radius:50%; background:radial-gradient(circle,var(--terracotta-light) 0%,transparent 70%); opacity:0.1; }
.auth-page::after { content:''; position:absolute; bottom:-100px; left:-60px; width:400px; height:400px;
  border-radius:50%; background:radial-gradient(circle,var(--sage-light) 0%,transparent 70%); opacity:0.15; }
.auth-card { background:var(--warm-white); border-radius:24px; border:1px solid var(--sand);
  box-shadow:0 12px 48px var(--shadow-md); padding:2.8rem; width:100%; max-width:430px;
  position:relative; z-index:1; }
.auth-logo { text-align:center; margin-bottom:1.8rem; }
.auth-logo .logo-icon { font-size:2.8rem; display:block; margin-bottom:0.6rem; }
.auth-logo .logo-text { font-family:'Noto Serif SC',serif; font-size:1.6rem; font-weight:700;
  color:var(--terracotta); letter-spacing:3px; }
.auth-logo .logo-sub { font-size:0.85rem; color:var(--muted-text); margin-top:0.3rem; }
.auth-title { font-family:'Noto Serif SC',serif; font-size:1.35rem; font-weight:600;
  color:var(--deep-brown); text-align:center; margin-bottom:0.4rem; }
.auth-desc { font-size:0.85rem; color:var(--muted-text); text-align:center; margin-bottom:2rem; }
.form-group { margin-bottom:1.2rem; }
.form-group label { display:block; font-size:0.82rem; font-weight:500; color:var(--medium-brown); margin-bottom:0.4rem; }
.form-group .input-wrap { position:relative; }
.form-group .input-icon { position:absolute; left:14px; top:50%; transform:translateY(-50%);
  color:var(--muted-text); font-size:0.95rem; pointer-events:none; }
.form-input { width:100%; border:1.5px solid var(--sand); border-radius:14px;
  padding:0.8rem 1rem 0.8rem 2.7rem; font-size:0.93rem; color:var(--deep-brown);
  background:white; transition:all 0.25s; outline:none; font-family:'Noto Sans SC',sans-serif;
  min-height:44px; }
.form-input:focus { border-color:var(--terracotta); box-shadow:0 0 0 3px rgba(196,113,91,0.12); }
.form-input::placeholder { color:var(--sand); }
.form-row { display:flex; align-items:center; justify-content:space-between; margin-bottom:1.5rem; }
.form-check { display:flex; align-items:center; gap:0.4rem; cursor:pointer; }
.form-check input[type="checkbox"] { accent-color:var(--terracotta); width:16px; height:16px; cursor:pointer; }
.form-check span { font-size:0.82rem; color:var(--muted-text); }
.btn-login, .btn-register { width:100%; padding:0.85rem; font-size:1rem; font-weight:600; border:none;
  border-radius:14px; background:linear-gradient(135deg,var(--terracotta),#D4836B); color:white;
  cursor:pointer; transition:all 0.3s; font-family:'Noto Sans SC',sans-serif; letter-spacing:1px;
  min-height:44px; }
.btn-login:hover, .btn-register:hover { background:linear-gradient(135deg,var(--deep-brown),var(--terracotta));
  box-shadow:0 6px 20px rgba(196,113,91,0.35); transform:translateY(-1px); }
.btn-login:active, .btn-register:active { transform:translateY(0) scale(0.98); }
.auth-footer { text-align:center; margin-top:2rem; font-size:0.85rem; color:var(--muted-text); }
.auth-footer a { color:var(--terracotta); text-decoration:none; font-weight:500; }
.auth-footer a:hover { text-decoration:underline; }
.is-invalid { border-color: #E57373 !important; }
.invalid-feedback { font-size:0.78rem; color:#E57373; margin-top:0.3rem; }

/* ── OAuth Third-Party Login ── */
.oauth-section { margin-top:1.5rem; text-align:center; }
.oauth-divider {
  display:flex; align-items:center; gap:0.8rem;
  margin-bottom:1.2rem;
}
.oauth-divider::before,
.oauth-divider::after {
  content:''; flex:1; height:1px; background:var(--sand);
}
.oauth-divider-text {
  font-size:0.85rem; color:var(--muted-text);
  white-space:nowrap; font-weight:400;
}
.oauth-icons {
  display:flex; align-items:center; justify-content:center; gap:0.6rem;
}
.oauth-icon-link {
  display:inline-flex; align-items:center; justify-content:center;
  width:44px; height:44px; border-radius:50%;
  border:1.5px solid var(--sand); background:var(--warm-white);
  transition:all 0.25s; cursor:pointer; color:var(--deep-brown);
}
.oauth-icon-link:hover {
  transform:translateY(-1px);
  box-shadow:0 4px 14px var(--shadow-warm);
  border-color:#12B7F5;
}
.oauth-icon-link:active { transform:scale(0.95); }
.oauth-icon-link .oauth-icon { width:24px; height:24px; color:#12B7F5; flex-shrink:0; display:block; }

/* ── OAuth Icon (small, for settings pane) ── */
.oauth-icon-small {
  width:18px; height:18px; color:#12B7F5;
  vertical-align:text-bottom; margin-right:0.3rem;
}

/* ── Toast Notification ── */
#toast-container{position:fixed;bottom:2rem;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:0.6rem;pointer-events:none;align-items:center;}
.toast-item{padding:0.8rem 1.4rem;border-radius:14px;color:white;font-size:0.9rem;font-weight:500;box-shadow:0 6px 24px rgba(0,0,0,0.15);pointer-events:auto;animation:toastIn 0.3s ease,toastOut 0.3s ease 2.7s forwards;display:flex;align-items:center;gap:0.6rem;max-width:380px;width:max-content;}
.toast-item.success{background:var(--sage);}
.toast-item.error{background:#D45B5B;}
.toast-item.info{background:var(--medium-brown);}
.toast-item.warning{background:var(--terracotta);}
@keyframes toastIn{from{opacity:0;transform:translateY(20px);}to{opacity:1;transform:translateY(0);}}
@keyframes toastOut{from{opacity:1;transform:translateY(0);}to{opacity:0;transform:translateY(20px);}}

/* ── Scroll Top Button ── */
.scroll-top-btn{position:fixed;bottom:2rem;right:2rem;width:48px;height:48px;border-radius:50%;background:var(--terracotta);color:white;border:none;box-shadow:0 4px 16px rgba(196,113,91,0.35);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.2rem;opacity:0;visibility:hidden;transition:all 0.3s;z-index:999;}
.scroll-top-btn.visible{opacity:1;visibility:visible;}
.scroll-top-btn:hover{background:var(--deep-brown);transform:translateY(-3px);}
.scroll-top-btn:active{transform:scale(0.92);}

/* ── Loading State ── */
.btn-loading{position:relative;color:transparent !important;pointer-events:none;}
.btn-loading::after{content:'';position:absolute;top:50%;left:50%;width:18px;height:18px;margin:-9px 0 0 -9px;border:2px solid rgba(255,255,255,0.4);border-top-color:white;border-radius:50%;animation:btnSpin 0.6s linear infinite;}
@keyframes btnSpin{to{transform:rotate(360deg);}}

/* ── Rating List (my_ratings) ── */
.rating-list-item{background:var(--warm-white);border-radius:14px;border:1px solid var(--sand);padding:1.2rem 1.5rem;margin-bottom:0.8rem;transition:all 0.2s;display:flex;justify-content:space-between;align-items:center;gap:1rem;}
.rating-list-item:hover{box-shadow:0 4px 16px var(--shadow-warm);border-color:var(--terracotta-light);}
.rating-list-item .book-info{flex:1;min-width:0;}
.rating-list-item .book-info h5{font-family:'Noto Serif SC',serif;font-size:1rem;font-weight:600;color:var(--deep-brown);margin-bottom:0.2rem;}
.rating-list-item .book-info h5 a{color:var(--deep-brown);text-decoration:none;transition:color 0.2s;}
.rating-list-item .book-info h5 a:hover{color:var(--terracotta);}
.rating-list-item .book-info p{font-size:0.82rem;color:var(--muted-text);margin:0;}
.rating-list-item .rating-side{text-align:center;flex-shrink:0;}
.rating-list-item .star-rating{color:var(--terracotta);font-size:0.95rem;letter-spacing:2px;}
.rating-list-item .rating-date{font-size:0.75rem;color:var(--muted-text);margin-top:4px;}

/* ── Empty State ── */
.empty-state{text-align:center;padding:4rem 1rem;}
.empty-state .empty-icon{font-size:4rem;color:var(--sand);display:block;margin-bottom:1rem;}
.empty-state .empty-text{color:var(--muted-text);font-size:0.95rem;margin-bottom:1.5rem;}
.empty-state .btn-warm{display:inline-block;}

/* ── Breadcrumb (Admin) ── */
.admin-breadcrumb{margin-bottom:1.2rem;}
.admin-breadcrumb .breadcrumb{background:transparent;padding:0;margin:0;font-size:0.85rem;}
.admin-breadcrumb .breadcrumb-item a{color:var(--terracotta);text-decoration:none;}
.admin-breadcrumb .breadcrumb-item a:hover{text-decoration:underline;}
.admin-breadcrumb .breadcrumb-item.active{color:var(--muted-text);}
.admin-breadcrumb .breadcrumb-item + .breadcrumb-item::before{color:var(--sand);content:"›";}

/* ── Admin Form Styles ── */
.admin-card .form-label{font-size:0.88rem;font-weight:500;color:var(--medium-brown);margin-bottom:0.4rem;}
.admin-card .form-control, .admin-card .form-select{border:1.5px solid var(--sand);border-radius:12px;padding:0.65rem 1rem;font-size:0.9rem;color:var(--deep-brown);transition:border-color 0.25s;background:white;}
.admin-card .form-control:focus, .admin-card .form-select:focus{border-color:var(--terracotta);box-shadow:0 0 0 3px rgba(196,113,91,0.1);}
.admin-card .form-text{font-size:0.78rem;color:var(--muted-text);margin-top:0.3rem;}
.admin-card .btn-primary{background:var(--terracotta);border-color:var(--terracotta);border-radius:12px;padding:0.6rem 1.5rem;font-weight:500;transition:all 0.25s;}
.admin-card .btn-primary:hover{background:var(--deep-brown);border-color:var(--deep-brown);}
.admin-card .btn-secondary{background:white;border:1.5px solid var(--sand);color:var(--medium-brown);border-radius:12px;padding:0.6rem 1.5rem;font-weight:500;transition:all 0.25s;}
.admin-card .btn-secondary:hover{border-color:var(--terracotta);color:var(--terracotta);}

/* ── Mobile User Info (Offcanvas) ── */
.mobile-user-info{display:flex;align-items:center;gap:0.8rem;padding:0 0.5rem;}
.mobile-guest-area{padding:0 0.5rem;}

/* ── Pagination Warm ── */
.pagination-warm-wrap{display:flex;flex-direction:column;align-items:center;margin-top:2.5rem;gap:0.6rem;}
.pagination-warm{display:flex;gap:0.4rem;align-items:center;flex-wrap:wrap;justify-content:center;}
.page-warm{display:inline-flex;align-items:center;justify-content:center;min-width:38px;min-height:38px;padding:0.4rem 0.9rem;border-radius:20px;border:1.5px solid var(--sand);background:white;color:var(--medium-brown);font-size:0.88rem;font-weight:500;text-decoration:none;transition:all 0.2s;cursor:pointer;}
.page-warm:hover{border-color:var(--terracotta);color:var(--terracotta);}
.page-warm.active{background:var(--terracotta);color:white;border-color:var(--terracotta);}
.page-warm-arrow{padding:0.4rem 0.7rem;font-size:1.1rem;}
.page-warm.disabled{opacity:0.4;cursor:default;pointer-events:none;}
.page-warm-ellipsis{color:var(--sand);padding:0 0.3rem;font-size:0.9rem;}
.pagination-warm-info{font-size:0.8rem;color:var(--muted-text);}

/* Bootstrap Pagination 暖色覆盖 */
.pagination .page-link{border:1.5px solid var(--sand);color:var(--medium-brown);background:var(--warm-white);border-radius:10px;padding:0.4rem 0.75rem;font-size:0.82rem;margin:0 2px;transition:all 0.2s;}
.pagination .page-link:hover{border-color:var(--terracotta-light);color:var(--terracotta);background:var(--sand-light);}
.pagination .page-item.active .page-link{border-color:var(--terracotta);background:var(--terracotta);color:white;}
.pagination .page-item.disabled .page-link{border-color:var(--sand);color:var(--sand);background:var(--warm-white);}

/* ── Nav Layout ── */
.navbar-book .nav-left{display:flex;align-items:center;gap:0.5rem;}
.navbar-book .nav-right{display:flex;align-items:center;gap:0.3rem;}
.navbar-book .brand{margin-right:0.5rem;}
.admin-nav-link{display:inline-flex;align-items:center;gap:0.3rem;font-size:0.75rem;font-weight:500;color:var(--terracotta);background:rgba(196,113,91,0.08);padding:0.3rem 0.7rem;border-radius:8px;text-decoration:none;transition:all 0.2s;border:1px solid rgba(196,113,91,0.2);white-space:nowrap;}
.admin-nav-link:hover{background:var(--terracotta);color:white;}
body.dark-mode .admin-nav-link{color:var(--terracotta-light);background:rgba(196,113,91,0.12);border-color:rgba(196,113,91,0.25);}
body.dark-mode .admin-nav-link:hover{background:var(--terracotta);color:white;}

/* ── Nav Dropdown (Categories) ── */
.nav-dropdown{position:relative;padding-bottom:10px;margin-bottom:-10px;}
.nav-dropdown-toggle{display:inline-flex;align-items:center;gap:0.25rem;}
.nav-dropdown-menu{display:none;position:absolute;top:calc(100% - 4px);left:0;background:var(--warm-white);border:1px solid var(--sand);border-radius:14px;box-shadow:0 8px 28px var(--shadow-md);min-width:420px;z-index:300;padding:0;overflow:hidden;animation:avatarMenuIn 0.15s ease;}
/* 透明桥接区域，防止光标离开触发区导致菜单消失 */
.nav-dropdown-menu::before{content:'';position:absolute;top:-12px;left:0;right:0;height:12px;background:transparent;}
.nav-dropdown:hover .nav-dropdown-menu{display:block;}
.nav-dropdown-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0;padding:0.75rem;}
.nav-dropdown-item{display:block;padding:0.55rem 0.9rem;font-size:0.85rem;color:var(--medium-brown);border-radius:10px;text-decoration:none;transition:all 0.15s;white-space:nowrap;}
.nav-dropdown-item:hover{background:var(--sand-light);color:var(--terracotta);}
.nav-dropdown-footer{border-top:1px solid var(--sand);padding:0.65rem 0.9rem;text-align:center;}
.nav-dropdown-footer a{font-size:0.82rem;color:var(--terracotta);text-decoration:none;font-weight:500;}
.nav-dropdown-footer a:hover{color:var(--deep-brown);}


/* ── Detail Breadcrumb ── */
.detail-breadcrumb{margin-bottom:0.8rem;}
.detail-breadcrumb ol{display:flex;list-style:none;padding:0;margin:0;font-size:0.82rem;flex-wrap:wrap;gap:0;}
.detail-breadcrumb li{display:flex;align-items:center;}
.detail-breadcrumb li::after{content:'›';margin:0 0.4rem;color:var(--sand);}
.detail-breadcrumb li:last-child::after{display:none;}
.detail-breadcrumb a{color:var(--muted-text);text-decoration:none;transition:color 0.15s;}
.detail-breadcrumb a:hover{color:var(--terracotta);}
.detail-breadcrumb [aria-current="page"]{color:var(--deep-brown);font-weight:500;}

/* ── Settings Breadcrumb ── */
.settings-breadcrumb{display:flex;list-style:none;padding:0;margin:0 0 0.3rem 0;font-size:0.82rem;}
.settings-breadcrumb li{display:flex;align-items:center;}
.settings-breadcrumb li::after{content:'›';margin:0 0.4rem;color:var(--sand);}
.settings-breadcrumb li:last-child::after{display:none;}
.settings-breadcrumb a{color:var(--muted-text);text-decoration:none;}
.settings-breadcrumb a:hover{color:var(--terracotta);}
.settings-breadcrumb [aria-current="page"]{color:var(--deep-brown);font-weight:500;}

/* ── Detail Action Buttons ── */
.detail-action-group{display:flex;gap:0;}
.detail-action-primary{background:var(--sand-light);border-radius:24px;padding:3px;}
.detail-action-primary .detail-action-btn{background:transparent;border:none;color:var(--medium-brown);padding:0.5rem 1.1rem;border-radius:22px;font-size:0.85rem;font-weight:500;cursor:pointer;transition:all 0.2s;white-space:nowrap;font-family:'Noto Sans SC',sans-serif;min-height:40px;}
.detail-action-primary .detail-action-btn:hover{color:var(--terracotta);}
.detail-action-primary .detail-action-btn.active{background:var(--terracotta);color:white;box-shadow:0 2px 8px rgba(196,113,91,0.3);}
.detail-action-primary .detail-action-btn:active{transform:scale(0.95);}
.detail-action-secondary{display:flex;gap:0.5rem;align-items:center;margin-left:0.3rem;}

/* ── Profile Hero Section ── */
.profile-hero{
  background:linear-gradient(160deg,var(--warm-white) 0%,var(--sand-light) 60%,rgba(196,113,91,0.06) 100%);
  border-bottom:1px solid var(--sand);
  padding:2.5rem 0 2rem;
}
.profile-hero-inner{
  display:flex;align-items:flex-start;gap:1.8rem;
}
.profile-hero-avatar-col{flex-shrink:0;}
.profile-hero-avatar-wrap{position:relative;display:inline-block;}
.profile-hero-avatar{
  width:88px;height:88px;border-radius:50%;
  background:linear-gradient(135deg,var(--terracotta-light),var(--terracotta));
  color:white;display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:2rem;overflow:hidden;
  box-shadow:0 4px 16px rgba(196,113,91,0.25);
  font-family:'Noto Serif SC',serif;
}
.profile-hero-avatar .avatar-img{width:100%;height:100%;object-fit:cover;border-radius:50%;}
.profile-hero-avatar span{line-height:1;}

.profile-hero-info{flex:1;min-width:0;padding-top:0.4rem;}

.profile-hero-name{
  font-family:'Noto Serif SC',serif;font-size:1.65rem;font-weight:700;
  color:var(--deep-brown);margin:0 0 0.5rem;line-height:1.25;
}

.profile-hero-signature-wrap{margin-bottom:0.6rem;}
.profile-hero-signature{
  font-family:'Noto Serif SC',serif;font-size:0.92rem;color:var(--medium-brown);
  line-height:1.65;font-style:italic;max-width:520px;
}
.profile-hero-signature-tag{
  margin-top:0.3rem;font-size:0.72rem;color:var(--muted-text);
  display:flex;align-items:center;gap:0.4rem;
}

.profile-hero-meta{
  display:flex;align-items:center;gap:1.2rem;flex-wrap:wrap;
  margin-top:0.5rem;padding-top:0.6rem;
  border-top:1px dashed var(--sand);
}
.profile-hero-joined{font-size:0.78rem;color:var(--muted-text);display:flex;align-items:center;gap:0.3rem;}
.profile-hero-edit{
  display:inline-flex;align-items:center;gap:0.35rem;
  font-size:0.82rem;color:var(--terracotta);text-decoration:none;
  font-weight:500;transition:all 0.2s;
  padding:0.2rem 0.6rem;border-radius:6px;
}
.profile-hero-edit:hover{color:var(--deep-brown);background:var(--sand-light);}

@media(max-width:767.98px){
  .profile-hero{padding:1.5rem 0 1.2rem;}
  .profile-hero-inner{flex-direction:column;align-items:center;text-align:center;gap:1rem;}
  .profile-hero-avatar{width:72px;height:72px;font-size:1.5rem;}
  .profile-hero-name{font-size:1.35rem;}
  .profile-hero-signature{max-width:100%;}
  .profile-hero-meta{justify-content:center;border-top:none;padding-top:0;margin-top:0.3rem;}
}

/* ── Profile Edit Link (legacy, kept for compatibility) ── */
.profile-edit-link{display:inline-flex;align-items:center;gap:0.3rem;margin-top:0.5rem;font-size:0.8rem;color:var(--terracotta);text-decoration:none;font-weight:500;transition:color 0.2s;}
.profile-edit-link:hover{color:var(--deep-brown);}

/* ── Reading Banner (正在阅读) ── */
.reading-banner{
  display:flex;align-items:center;gap:1rem;
  background:linear-gradient(135deg,rgba(139,158,124,0.12),rgba(196,113,91,0.06));
  border:1px solid var(--sand);border-radius:16px;
  padding:1rem 1.2rem;margin-bottom:1.5rem;
  transition:all 0.25s;cursor:pointer;color:var(--deep-brown);
}
.reading-banner:hover{box-shadow:0 4px 16px var(--shadow-warm);border-color:var(--terracotta-light);}
.reading-banner-cover{
  width:52px;height:68px;border-radius:6px;overflow:hidden;
  background:var(--sand);flex-shrink:0;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
}
.reading-banner-cover img{width:100%;height:100%;object-fit:cover;}
.reading-banner-no-cover{
  width:100%;height:100%;display:flex;align-items:center;justify-content:center;
  font-size:1.2rem;color:var(--muted-text);font-weight:600;
}
.reading-banner-info{flex:1;min-width:0;}
.reading-banner-label{font-size:0.72rem;color:var(--sage);font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:0.2rem;}
.reading-banner-title{font-family:'Noto Serif SC',serif;font-size:1rem;font-weight:700;color:var(--deep-brown);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.reading-banner-author{font-size:0.78rem;color:var(--muted-text);margin-top:0.15rem;}
.reading-banner-arrow{color:var(--muted-text);font-size:1.1rem;flex-shrink:0;}

/* ── Reading Dashboard ── */
.reading-dashboard{
  display:flex;gap:1.5rem;align-items:stretch;margin-bottom:1.5rem;
  background:var(--warm-white);border:1px solid var(--sand);
  border-radius:16px;padding:1.2rem 1.5rem;
}
.reading-rings-row{display:flex;gap:1.2rem;flex-shrink:0;}
.reading-ring-card{
  display:flex;flex-direction:column;align-items:center;gap:0.3rem;
  text-decoration:none;color:var(--deep-brown);position:relative;
  transition:transform 0.2s;
}
.reading-ring-card:hover{transform:translateY(-2px);}
.reading-ring-svg{width:80px;height:80px;}
.reading-ring-label{text-align:center;margin-top:-8px;}
.reading-ring-num{font-family:'Noto Serif SC',serif;font-size:1.25rem;font-weight:700;color:var(--deep-brown);}
.reading-ring-text{font-size:0.72rem;color:var(--muted-text);}

.reading-summary-col{
  flex:1;display:flex;flex-direction:column;justify-content:center;
  padding-left:1rem;border-left:1px solid var(--sand);gap:0.6rem;
}
.reading-summary-text{font-size:0.85rem;color:var(--medium-brown);line-height:1.6;}
.reading-summary-text strong{color:var(--terracotta);font-weight:700;}

.reading-tags-row{display:flex;flex-wrap:wrap;gap:0.45rem;}
.reading-tag{
  display:inline-block;padding:0.25rem 0.75rem;
  background:var(--sand-light);color:var(--medium-brown);
  border-radius:20px;font-size:0.78rem;font-weight:500;
  text-decoration:none;transition:all 0.2s;
}
.reading-tag:hover{background:var(--terracotta);color:white;}

@media(max-width:767.98px){
  .reading-dashboard{flex-direction:column;align-items:center;gap:1rem;}
  .reading-summary-col{border-left:none;border-top:1px solid var(--sand);padding-left:0;padding-top:0.8rem;align-items:center;text-align:center;}
  .reading-tags-row{justify-content:center;}
  .reading-rings-row{gap:0.8rem;}
  .reading-ring-svg{width:64px;height:64px;}
}

/* ── Profile Entry Grid (2×2 卡片) ── */
.profile-entry-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:0.75rem;margin-bottom:1.5rem;
}
.profile-entry-card{
  display:flex;align-items:center;gap:0.9rem;
  padding:1rem 1.1rem;background:var(--warm-white);
  border:1px solid var(--sand);border-radius:14px;
  text-decoration:none;color:var(--deep-brown);
  transition:all 0.25s;
}
.profile-entry-card:hover{
  border-color:var(--terracotta-light);
  box-shadow:0 4px 16px var(--shadow-warm);
  transform:translateY(-1px);
}
.profile-entry-icon{
  width:42px;height:42px;border-radius:12px;
  display:flex;align-items:center;justify-content:center;
  font-size:1.15rem;flex-shrink:0;
}
.profile-entry-body{flex:1;min-width:0;}
.profile-entry-title{
  font-weight:600;font-size:0.9rem;color:var(--deep-brown);
  display:flex;align-items:center;gap:0.4rem;
}
.profile-entry-count{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:18px;height:18px;padding:0 5px;border-radius:10px;
  font-size:0.68rem;font-weight:600;background:var(--sand);color:var(--muted-text);
}
.profile-entry-desc{
  font-size:0.75rem;color:var(--muted-text);margin-top:0.2rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.profile-entry-arrow{color:var(--muted-text);font-size:0.9rem;flex-shrink:0;}

@media(max-width:575.98px){
  .profile-entry-grid{grid-template-columns:1fr;}
}

/* ── Tab Count Badge ── */
.tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:10px;font-size:0.7rem;font-weight:600;background:var(--sand);color:var(--muted-text);margin-left:0.25rem;line-height:1;}
.warm-tabs .nav-link.active .tab-count{background:var(--terracotta-light);color:white;}
/* Profile Tab Buttons (button-based, no Bootstrap interference) */
.profile-tabs-row{display:flex;gap:0;border-bottom:2px solid var(--sand);margin-bottom:2rem;overflow-x:auto;-webkit-overflow-scrolling:touch;}
.profile-tab-btn{background:none;border:none;color:var(--muted-text);font-weight:500;padding:0.75rem 1.5rem;border-bottom:2px solid transparent;margin-bottom:-2px;cursor:pointer;transition:all 0.2s;font-size:0.9rem;font-family:'Noto Sans SC',sans-serif;white-space:nowrap;display:inline-flex;align-items:center;gap:0.4rem;min-height:44px;}
.profile-tab-btn:hover{color:var(--terracotta);}
.profile-tab-btn.active{color:var(--terracotta);border-bottom-color:var(--terracotta);}
.profile-tab-btn.active .tab-count{background:var(--terracotta-light);color:white;}

/* ── Profile List (收藏/评分/历史/评论 通用列表) ── */
.profile-list{display:flex;flex-direction:column;gap:0;}
.profile-list-item{display:flex;align-items:center;gap:1rem;padding:0.9rem 1rem;border-bottom:1px solid var(--sand);text-decoration:none;color:var(--deep-brown);transition:background 0.15s;border-radius:0;}
.profile-list-item:first-child{padding-top:0.3rem;}
.profile-list-item:last-child{border-bottom:none;}
.profile-list-item:hover{background:var(--sand-light);}
.profile-list-cover{width:48px;height:66px;border-radius:5px;overflow:hidden;flex-shrink:0;background:var(--sand);display:flex;align-items:center;justify-content:center;}
.profile-list-cover img{width:100%;height:100%;object-fit:cover;}
.profile-list-no-cover{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:1.2rem;font-weight:700;color:var(--muted-text);font-family:'Noto Serif SC',serif;}
.profile-list-body{flex:1;min-width:0;}
.profile-list-title{font-size:0.96rem;font-weight:600;color:var(--deep-brown);font-family:'Noto Serif SC',serif;margin-bottom:0.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.profile-list-author{font-size:0.8rem;color:var(--muted-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:0.15rem;}
.profile-list-stars{color:var(--terracotta);font-size:0.8rem;letter-spacing:1px;margin-top:0.2rem;}
.profile-list-stars .bi-star{color:var(--sand);}
.profile-list-comment{font-size:0.8rem;color:var(--medium-brown);margin-top:0.2rem;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;}
.profile-list-main{display:flex;align-items:center;gap:1rem;flex:1;min-width:0;text-decoration:none;color:var(--deep-brown);}
.profile-list-actions{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:0.35rem;padding-left:0.5rem;}
.profile-list-time{font-size:0.74rem;color:var(--muted-text);white-space:nowrap;}

/* 收藏心形按钮 */
.fav-toggle-btn{cursor:pointer;font-size:1.4rem;color:var(--terracotta-light);transition:all 0.2s;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;}
.fav-toggle-btn:hover{background:rgba(196,113,91,0.1);transform:scale(1.1);}
.fav-toggle-btn:active{transform:scale(0.95);}
.fav-toggle-btn.faved{color:var(--terracotta);}

/* 评分交互星星 */
.rating-stars-inline{display:flex;gap:2px;align-items:center;}
.rating-star{cursor:pointer;font-size:0.95rem;color:var(--sand);transition:all 0.15s;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:4px;}
.rating-star.active{color:var(--terracotta-light);}
.rating-star:hover{background:rgba(196,113,91,0.08);transform:scale(1.15);}
.rating-star:active{transform:scale(0.95);}

/* ── Settings Page ── */
.settings-card{background:var(--warm-white);border-radius:18px;border:1px solid var(--sand);box-shadow:0 4px 16px var(--shadow-warm);margin-bottom:1.5rem;overflow:hidden;}
.settings-card-header{background:var(--sand-light);padding:0.9rem 1.5rem;font-family:'Noto Serif SC',serif;font-size:1rem;font-weight:600;color:var(--deep-brown);display:flex;align-items:center;gap:0.5rem;}
.settings-card-header i{color:var(--terracotta);}
.settings-card-body{padding:1.5rem;}
.settings-label{display:block;font-size:0.82rem;font-weight:500;color:var(--medium-brown);margin-bottom:0.35rem;}
.settings-input{width:100%;border:1.5px solid var(--sand);border-radius:12px;padding:0.65rem 1rem;font-size:0.9rem;color:var(--deep-brown);background:white;transition:all 0.2s;outline:none;font-family:'Noto Sans SC',sans-serif;min-height:44px;}
.settings-input:focus{border-color:var(--terracotta);box-shadow:0 0 0 3px rgba(196,113,91,0.1);}
.settings-input::placeholder{color:var(--sand);}
.settings-field{margin-bottom:1rem;}

/* ── Empty State Enhanced ── */
.empty-hint{font-size:0.82rem;color:var(--sand);margin-top:0.3rem;margin-bottom:1.5rem;}

/* ── Comment Book Link ── */
.comment-book-link{font-size:0.82rem;color:var(--terracotta);text-decoration:none;font-weight:500;display:inline-flex;align-items:center;gap:0.3rem;}
.comment-book-link:hover{color:var(--deep-brown);text-decoration:underline;}

/* ── Mobile User Card ── */
.mobile-user-card{display:flex;align-items:center;gap:0.8rem;padding:0.3rem 0.5rem;text-decoration:none;border-radius:14px;transition:background 0.2s;}
.mobile-user-card:hover{background:var(--sand-light);}
.mobile-user-detail{flex:1;min-width:0;}

/* ── Mobile Section Label ── */
.mobile-nav-section-label{font-size:0.72rem;font-weight:600;color:var(--muted-text);text-transform:uppercase;letter-spacing:0.5px;padding:1rem 0.8rem 0.4rem;}
.mobile-nav-section-label:first-of-type{padding-top:0;}

/* ── Mobile Search ── */
.mobile-search-form{display:flex;gap:0.5rem;padding:0 0.5rem;margin-bottom:0.6rem;}
.mobile-search-input{flex:1;border:1.5px solid var(--sand);border-radius:12px;padding:0.6rem 1rem;font-size:0.88rem;color:var(--deep-brown);background:white;outline:none;min-height:42px;font-family:'Noto Sans SC',sans-serif;}
.mobile-search-input:focus{border-color:var(--terracotta);}
.mobile-search-btn{background:var(--terracotta);color:white;border:none;border-radius:10px;padding:0.6rem 0.9rem;cursor:pointer;min-width:42px;min-height:42px;display:flex;align-items:center;justify-content:center;font-size:1rem;}

/* ── Search Autocomplete Dropdown ── */
.autocomplete-wrapper {
  position: relative;
}
.autocomplete-dropdown {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  margin-top: 4px;
  background: var(--warm-white);
  border: 1.5px solid var(--sand);
  border-radius: 12px;
  box-shadow: 0 8px 30px rgba(0,0,0,0.1);
  max-height: 400px;
  overflow-y: auto;
  z-index: 1050;
  padding: 4px 0;
}
.autocomplete-dropdown.visible {
  display: block;
}
.ac-item {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.6rem 1rem;
  text-decoration: none;
  color: var(--deep-brown);
  transition: background 0.15s;
  cursor: pointer;
}
.ac-item:hover,
.ac-item.ac-highlighted {
  background: rgba(196,113,91,0.08);
}
.ac-cover {
  width: 36px;
  height: 50px;
  object-fit: cover;
  border-radius: 4px;
  flex-shrink: 0;
  box-shadow: 0 1px 4px rgba(0,0,0,0.1);
}
.ac-no-cover {
  width: 36px;
  height: 50px;
  border-radius: 4px;
  flex-shrink: 0;
  background: var(--sand);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.8rem;
  color: var(--muted-text);
  font-weight: 600;
}
.ac-info {
  min-width: 0;
  flex: 1;
}
.ac-title {
  font-size: 0.9rem;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.4;
}
.ac-author {
  font-size: 0.78rem;
  color: var(--muted-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.3;
}
.ac-highlight {
  background: rgba(196,113,91,0.18);
  color: var(--terracotta);
  font-weight: 600;
  padding: 0 1px;
  border-radius: 2px;
}
.ac-empty {
  padding: 1rem;
  text-align: center;
  font-size: 0.85rem;
  color: var(--muted-text);
}

/* Dark mode */
body.dark-mode .autocomplete-dropdown {
  background: #3a3632;
  border-color: #555;
}
body.dark-mode .ac-item {
  color: var(--deep-brown);
}
body.dark-mode .ac-item:hover,
body.dark-mode .ac-item.ac-highlighted {
  background: rgba(196,113,91,0.15);
}
body.dark-mode .ac-author {
  color: var(--muted-text);
}
body.dark-mode .ac-highlight {
  background: rgba(196,113,91,0.25);
}
body.dark-mode .ac-empty {
  color: var(--muted-text);
}
body.dark-mode .ac-no-cover {
  background: #555;
}

/* ── Footer 4-col ── */
@media(max-width:767.98px){
  .footer-book .row .col-6.col-md-3{text-align:center;margin-bottom:1rem;}
}
@media(min-width:768px){
  .footer-book .row .col-6.col-md-3{text-align:left;}
}
.footer-book{background:var(--deep-brown);color:rgba(255,255,255,0.55);padding:3rem 0 2rem;margin-top:4rem;}
.footer-book .fbrand{font-family:'Noto Serif SC',serif;font-size:1.25rem;color:var(--terracotta-light);margin-bottom:0.4rem;}
.footer-book a{color:rgba(255,255,255,0.55);text-decoration:none;transition:color 0.2s;min-height:44px;display:inline-flex;align-items:center;}
.footer-book a:hover{color:white;}

/* ── Rank Page ── */
.rank-num-inline{font-family:'Noto Serif SC',serif;font-size:1.1rem;font-weight:700;width:28px;text-align:center;flex-shrink:0;}
.rank-num-inline.top1{color:#D4A843;}
.rank-num-inline.top2{color:#9EA3AD;}
.rank-num-inline.top3{color:#B87333;}
.rank-num-inline.normal{color:var(--sand);}
.rank-metrics{display:flex;align-items:center;gap:0.8rem;}
.rank-metric{font-size:0.82rem;color:var(--muted-text);display:inline-flex;align-items:center;gap:0.35rem;background:var(--sand-light);padding:0.25rem 0.55rem;border-radius:8px;font-weight:500;}
.rank-metric i{font-size:0.75rem;}
.rank-metric-score{color:var(--terracotta);background:rgba(196,113,91,0.08);}
.rank-metric-views{color:var(--medium-brown);background:rgba(139,115,85,0.08);}
.rank-metric-favs{color:var(--sage);background:rgba(139,168,131,0.1);}

/* ── Reading Grid Cards (继续看) ── */
.reading-grid{margin-bottom:0.5rem;}
.reading-grid .col-6,.reading-grid .col-md-3{padding-bottom:1.2rem;}
/* 横向卡片：左图右文，宽度填满网格单元格 */
.reading-card-h{display:flex;align-items:center;gap:0.8rem;background:var(--warm-white);border-radius:12px;border:1px solid var(--sand);padding:0.8rem;text-decoration:none;transition:all 0.25s;box-shadow:0 2px 8px var(--shadow-warm);height:100%;max-width:360px;}
.reading-card-h:hover{transform:translateY(-3px);box-shadow:0 6px 18px var(--shadow-md);border-color:var(--terracotta-light);}
.reading-cover-h{width:70px;height:95px;border-radius:6px;overflow:hidden;background:var(--sand);flex-shrink:0;box-shadow:0 2px 6px rgba(0,0,0,0.08);}
.reading-cover-h img{width:100%;height:100%;object-fit:cover;}
.reading-no-cover-h{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-family:'Noto Serif SC',serif;font-size:1rem;font-weight:700;color:var(--muted-text);background:var(--sand-light);}
.reading-info-h{flex:1;min-width:0;}
.reading-title-h{font-family:'Noto Serif SC',serif;font-size:0.88rem;font-weight:600;color:var(--deep-brown);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.reading-author-h{font-size:0.75rem;color:var(--muted-text);margin-top:0.3rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* ── Report Page ── */
.report-chart-card{background:var(--warm-white);border-radius:18px;border:1px solid var(--sand);padding:1.5rem;box-shadow:0 4px 14px var(--shadow-warm);}
.report-chart-title{font-family:'Noto Serif SC',serif;font-size:1.05rem;font-weight:600;color:var(--deep-brown);margin-bottom:1rem;}
.bar{height:24px;border-radius:12px;background:var(--sand-light);overflow:hidden;position:relative;}
.bar-fill{height:100%;border-radius:12px;transition:width 0.6s ease;}
.cat-bar-item{display:flex;align-items:center;gap:1rem;margin-bottom:0.8rem;}
.cat-bar-label{font-size:0.85rem;color:var(--medium-brown);width:80px;flex-shrink:0;text-align:right;}
.cat-bar-value{font-size:0.82rem;color:var(--deep-brown);font-weight:600;width:30px;flex-shrink:0;}
.report-timeline-item{display:flex;gap:1rem;padding:0.8rem 0;border-bottom:1px solid var(--sand);}
.report-timeline-item:last-child{border-bottom:none;}
.timeline-date{font-size:0.78rem;color:var(--muted-text);width:70px;flex-shrink:0;padding-top:2px;}
.timeline-dot{width:10px;height:10px;border-radius:50%;background:var(--terracotta-light);flex-shrink:0;margin-top:6px;}
.timeline-content{flex:1;font-size:0.88rem;color:var(--medium-brown);}
.timeline-content strong{color:var(--deep-brown);}

/* ── Admin List (manage_books 列表替代 table) ── */
.admin-list{background:var(--warm-white);border-radius:14px;border:1px solid var(--sand);overflow:hidden;}
.admin-list-header{display:flex;align-items:center;padding:0.65rem 1.2rem;background:var(--sand-light);border-bottom:1px solid var(--sand);font-size:0.78rem;font-weight:600;color:var(--medium-brown);}
.admin-list-header > div{white-space:nowrap;}
.admin-list-header .col-id{width:56px;flex-shrink:0;}
.admin-list-header .col-cover{width:56px;flex-shrink:0;}
.admin-list-header .col-title{flex:1;min-width:0;padding-right:1rem;}
.admin-list-header .col-author{width:160px;flex-shrink:0;padding-right:1rem;}
.admin-list-header .col-category{width:80px;flex-shrink:0;}
.admin-list-header .col-views{width:80px;flex-shrink:0;text-align:center;}
.admin-list-header .col-actions{width:120px;flex-shrink:0;text-align:right;}
.admin-list-item{display:flex;align-items:center;padding:0.9rem 1.2rem;border-bottom:1px solid var(--sand);text-decoration:none;color:var(--deep-brown);transition:background 0.15s;}
.admin-list-item:last-child{border-bottom:none;}
.admin-list-item:hover{background:rgba(232,221,208,0.4);}
.admin-list-item .col-id{width:56px;flex-shrink:0;font-size:0.82rem;color:var(--muted-text);}
.admin-list-item .col-cover{width:56px;flex-shrink:0;}
.admin-list-item .col-cover img{width:42px;height:56px;border-radius:5px;object-fit:cover;}
.admin-list-item .col-cover .no-cover-img{width:42px;height:56px;border-radius:5px;background:var(--sand-light);display:flex;align-items:center;justify-content:center;color:var(--muted-text);font-size:0.8rem;}
.admin-list-item .col-title{flex:1;min-width:0;padding-right:1rem;}
.admin-list-item .col-title .title-main{font-family:'Noto Serif SC',serif;font-size:0.92rem;font-weight:600;color:var(--deep-brown);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.admin-list-item .col-title .title-sub{font-size:0.76rem;color:var(--muted-text);margin-top:3px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;}
.admin-list-item .col-author{width:160px;flex-shrink:0;padding-right:1rem;font-size:0.82rem;color:var(--medium-brown);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.admin-list-item .col-category{width:80px;flex-shrink:0;}
.admin-list-item .col-views{width:80px;flex-shrink:0;text-align:center;font-size:0.82rem;color:var(--muted-text);}
.admin-list-item .col-actions{width:120px;flex-shrink:0;display:flex;justify-content:flex-end;gap:0.35rem;}
.admin-list-item .col-actions a,.admin-list-item .col-actions button{font-size:0.8rem;}
@media(max-width:991.98px){
  .admin-list-header .col-author{width:120px;}
  .admin-list-item .col-author{width:120px;}
}
@media(max-width:767.98px){
  .admin-list-header{display:none;}
  .admin-list-item{flex-wrap:wrap;gap:0.5rem;padding:0.8rem 1rem;}
  .admin-list-item .col-id{width:40px;order:1;}
  .admin-list-item .col-cover{width:48px;order:2;}
  .admin-list-item .col-cover img,.admin-list-item .col-cover .no-cover-img{width:48px;height:64px;}
  .admin-list-item .col-title{flex:1 0 calc(100% - 100px);order:3;padding-right:0;}
  .admin-list-item .col-author{order:4;width:auto;flex:1;padding-right:0;}
  .admin-list-item .col-category{order:5;width:auto;}
  .admin-list-item .col-views{order:6;width:auto;text-align:left;}
  .admin-list-item .col-actions{order:7;width:100%;justify-content:flex-start;margin-top:0.3rem;}
}

/* ── Page Nav (demo) ── */
.page-nav{background:var(--deep-brown);padding:0.5rem 0;text-align:center;position:sticky;top:0;z-index:200;}
.page-nav a{color:rgba(255,255,255,0.5);font-size:0.78rem;padding:4px 10px;border-radius:6px;transition:all 0.2s;margin:0 2px;display:inline-block;}
.page-nav a:hover,.page-nav a.active{color:white;background:var(--terracotta);}

/* ══════════════════════════════════════════════════════════
   Responsive Breakpoints
   ══════════════════════════════════════════════════════════ */

/* ── 576px: Small phones ── */
@media(max-width:575.98px){
  .hero-title{font-size:1.6rem;}
  .hero-sub{font-size:0.95rem;}
  .hero-section{padding:3rem 0 2.5rem;}
  .card-body-pad{padding:0.8rem 0.9rem 0.9rem;}
  .book-title{font-size:0.85rem;min-height:2.3em;}
  .book-author{font-size:0.72rem;}
  .cat-pills{gap:0.35rem;}
  .cat-pill{padding:0.35rem 0.9rem;font-size:0.8rem;}
  .detail-title{font-size:1.4rem;}
  .detail-stats{gap:1.2rem;}
  .detail-stat .num{font-size:1.3rem;}
  .section-title{font-size:1.2rem;}
  .auth-card{padding:2rem 1.5rem;margin:0 1rem;}
  .empty-state{padding:3rem 0.5rem;}
  .empty-state .empty-icon{font-size:3rem;}
  .scroll-top-btn{bottom:1.5rem;right:1.5rem;width:42px;height:42px;font-size:1rem;}
  #toast-container{right:1rem;left:1rem;}
  .toast-item{max-width:100%;}
}

/* ── 768px: Large phones / small tablets ── */
@media(max-width:767.98px){
  .hero-title{font-size:2rem;}
  .hero-section{padding:3.5rem 0 3rem;}
  .book-card .book-title{font-size:0.88rem;}
  .comment-card{padding:1rem;}
  .admin-card .card-body{padding:1rem;}
  .admin-card .table-responsive{margin:-1rem;overflow-x:auto;}
  .admin-card .table-responsive .admin-table{min-width:600px;}
  .detail-hero{padding:2rem 0 1.5rem;}
  .detail-cover{max-width:180px;margin:0 auto;display:block;}
  .detail-title{font-size:1.6rem;}
  .detail-stats{gap:1.5rem;}
  .page-section2{padding:2rem 0;}
  .rank-item{gap:0.8rem;padding:1rem;}
  .rank-num{font-size:1.3rem;width:30px;}
  .rank-cover{width:44px;height:59px;}
  .rating-list-item{flex-direction:column;align-items:flex-start;gap:0.6rem;}
  .rating-list-item .rating-side{text-align:left;}
}

/* ── 992px: Tablets ── */
@media(max-width:991.98px){
  .detail-hero .row{flex-direction:column;}
  .detail-hero .col-lg-3, .detail-hero .col-lg-9{width:100%;}
  .footer-book .row > div{text-align:center;margin-bottom:1.5rem;}
  .footer-book .row > div:last-child{margin-bottom:0;}
  .footer-book a{justify-content:center;}
}

/* ── 1200px: Small desktops ── */
@media(max-width:1199.98px){
  .hero-title{font-size:2.6rem;}
  .container-narrow{padding:0 1.2rem;}
}
