/* pages/bookshelf/bookshelf.wxss */ .container { min-height: 100vh; background: linear-gradient(180deg, #f8f9ff 0%, #f5f5f5 100%); padding: 30rpx 24rpx; } .bookshelf-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24rpx; } .bookshelf-item { background: #fff; border-radius: 16rpx; overflow: hidden; box-shadow: 0 4rpx 20rpx rgba(102, 126, 234, 0.08); transition: all 0.3s ease; position: relative; } .bookshelf-item::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118, 75, 162, 0.05) 100%); opacity: 0; transition: opacity 0.3s ease; pointer-events: none; } .bookshelf-item:active { transform: scale(0.98); box-shadow: 0 2rpx 12rpx rgba(102, 126, 234, 0.12); } .bookshelf-item:active::before { opacity: 1; } .cover-wrapper { width: 100%; height: 300rpx; position: relative; overflow: hidden; } .cover { width: 100%; height: 100%; transition: transform 0.3s ease; } .bookshelf-item:active .cover { transform: scale(1.05); } .cover-placeholder { width: 100%; height: 100%; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); display: flex; align-items: center; justify-content: center; padding: 12rpx; box-sizing: border-box; position: relative; } .cover-placeholder::after { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70%); animation: shine 3s infinite; } @keyframes shine { 0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); } 100% { transform: translateX(100%) translateY(100%) rotate(45deg); } } .cover-text { color: #fff; font-size: 20rpx; font-weight: 500; text-align: center; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; line-height: 1.4; position: relative; z-index: 1; } .book-info { padding: 24rpx 16rpx 20rpx; } .title { font-size: 28rpx; font-weight: 600; color: #1a1a1a; margin-bottom: 12rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 1.3; } .author { font-size: 22rpx; color: #8a8a8a; margin-bottom: 12rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .meta { display: flex; gap: 8rpx; flex-wrap: wrap; align-items: center; } .meta text { font-size: 20rpx; color: #667eea; padding: 4rpx 12rpx; background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%); border-radius: 12rpx; font-weight: 500; } .empty { text-align: center; padding: 240rpx 40rpx; display: flex; flex-direction: column; align-items: center; } .empty::before { content: '📚'; font-size: 120rpx; margin-bottom: 30rpx; opacity: 0.3; } .empty text { font-size: 28rpx; color: #999; line-height: 1.6; } .loading { text-align: center; padding: 60rpx 40rpx; display: flex; flex-direction: column; align-items: center; } .loading text { font-size: 26rpx; color: #999; margin-top: 20rpx; } .loading::before { content: ''; width: 40rpx; height: 40rpx; border: 4rpx solid #f0f0f0; border-top-color: #667eea; border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }