.item-detail-container { max-width: 1200px; margin: 0 auto; padding: 20px; } .loading, .error { text-align: center; padding: 60px 20px; } .spinner { width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid var(--primary-color); border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 20px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .back-link { display: inline-block; margin-top: 20px; padding: 10px 24px; background: var(--primary-color); color: white; text-decoration: none; border-radius: 6px; &:hover { background: var(--primary-hover); } } .item-content { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; margin-bottom: 40px; } .item-gallery { .main-photo { width: 100%; aspect-ratio: 1; background: #f5f5f5; border-radius: 12px; overflow: hidden; margin-bottom: 16px; img, video { width: 100%; height: 100%; object-fit: contain; background: white; } } .photo-thumbnails { display: grid; grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); gap: 12px; } .thumbnail { aspect-ratio: 1; background: #f5f5f5; border-radius: 8px; overflow: hidden; cursor: pointer; border: 2px solid transparent; transition: border-color 0.2s; position: relative; &:hover { border-color: var(--primary-color); } &.active { border-color: var(--primary-color); } img { width: 100%; height: 100%; object-fit: contain; background: white; } .video-indicator { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 0, 0, 0.6); color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; } } } .item-info { h1 { font-size: 2rem; margin: 0 0 16px 0; color: #333; } } .rating-section { display: flex; align-items: center; gap: 12px; margin-bottom: 24px; .rating { color: #ffa502; font-size: 1.1rem; font-weight: 600; } .reviews-count { color: #333; } } .price-section { margin-bottom: 16px; .discount-info { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; } .original-price { text-decoration: line-through; color: #555; font-size: 1.2rem; } .discount-badge { background: #ff4757; color: white; padding: 4px 12px; border-radius: 20px; font-weight: 600; font-size: 0.9rem; } .current-price { font-size: 2.5rem; font-weight: 700; color: var(--primary-color); } } .stock-info { margin-bottom: 24px; .stock-bar { display: flex; gap: 6px; align-items: center; .bar-segment { width: 40px; height: 8px; background: #e0e0e0; border-radius: 4px; transition: background 0.2s; &.filled.high { background: #2ed573; } &.filled.medium { background: #ffa502; } &.filled.low { background: #ff4757; } } } } .add-to-cart-btn { width: 100%; padding: 16px; background: var(--primary-color); color: white; border: none; border-radius: 8px; font-size: 1.2rem; font-weight: 600; cursor: pointer; transition: background 0.2s; margin-bottom: 32px; &:hover { background: var(--primary-hover); } &:active { transform: scale(0.98); } } .description-section { h2 { font-size: 1.5rem; margin-bottom: 16px; color: #333; } .description { color: #333; line-height: 1.6; } } .reviews-section, .questions-section { margin-bottom: 40px; h2 { font-size: 1.8rem; margin-bottom: 24px; color: #333; } } .reviews-list { display: grid; gap: 16px; } .reviews-list { display: grid; gap: 16px; } .review-form { background: #f8f9fa; padding: 24px; border-radius: 12px; margin-bottom: 24px; h3 { margin: 0 0 20px 0; color: #333; font-size: 1.2rem; } .rating-input { margin-bottom: 16px; label { display: block; margin-bottom: 8px; color: #333; font-weight: 500; } .star-selector { display: flex; gap: 8px; .star { font-size: 2rem; cursor: pointer; opacity: 0.3; transition: opacity 0.2s; &.selected { opacity: 1; } &:hover { opacity: 0.7; } } } } textarea { width: 100%; padding: 12px; border: 2px solid #e0e0e0; border-radius: 8px; font-size: 1rem; font-family: inherit; resize: vertical; margin-bottom: 16px; transition: border-color 0.2s; &:focus { outline: none; border-color: var(--primary-color); } } .form-actions { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; .anonymous-toggle { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: 0.95rem; color: #333; input[type="checkbox"] { width: 18px; height: 18px; cursor: pointer; } } .username-preview { color: var(--primary-color); font-size: 0.9rem; font-style: italic; } .submit-review-btn { margin-left: auto; background: var(--primary-color); color: white; border: none; padding: 12px 24px; border-radius: 8px; font-weight: 600; cursor: pointer; transition: background 0.2s; display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-width: 160px; white-space: nowrap; &:hover:not(:disabled) { background: var(--primary-hover); } &:disabled { background: #bbb; cursor: not-allowed; } &.submitting { background: #9ca3af; } } } .status-message { margin-top: 16px; padding: 12px 16px; border-radius: 8px; display: flex; align-items: center; gap: 10px; font-weight: 500; animation: slideDown 0.3s ease-out; .icon { font-size: 1.2rem; font-weight: bold; } &.success { background: #d1fae5; color: #065f46; border: 1px solid #6ee7b7; .icon { color: #10b981; } } &.error { background: #fee2e2; color: #991b1b; border: 1px solid #fca5a5; .icon { color: #ef4444; } } } @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .spinner-small { width: 16px; height: 16px; border: 2px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: spin 0.8s linear infinite; } } .review-card { background: white; padding: 20px; border-radius: 12px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); .review-header { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; .review-author { font-weight: 600; color: #333; font-size: 0.95rem; } .review-rating { color: #ffa502; font-size: 1rem; } .review-date { color: #999; font-size: 0.85rem; margin-left: auto; } } .review-text { color: #555; line-height: 1.6; margin: 0; } } .questions-list { display: grid; gap: 16px; } .question-card { background: white; padding: 20px; border-radius: 12px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); .question-text, .answer-text { margin-bottom: 12px; line-height: 1.6; color: #333; } .question-votes { display: flex; gap: 16px; font-size: 0.95rem; .vote-up { color: #2ed573; } .vote-down { color: #ff4757; } } } .no-reviews, .no-questions { text-align: center; color: #555; padding: 40px; } @media (max-width: 768px) { .item-content { grid-template-columns: 1fr; gap: 24px; } .item-info h1 { font-size: 1.5rem; } .price-section .current-price { font-size: 2rem; } } // ========== novo ITEM DETAIL STYLES ========== .novo-item-container { max-width: 1400px; margin: 0 auto; padding: 2rem; } .novo-loading, .novo-error { text-align: center; padding: 4rem 1rem; } .novo-spinner { width: 48px; height: 48px; border: 3px solid var(--border-color); border-top-color: var(--primary-color); border-radius: 50%; animation: spin 0.8s linear infinite; margin: 0 auto 1.5rem; } .novo-back-link { display: inline-block; margin-top: 1.5rem; padding: 0.75rem 2rem; background: var(--primary-color); color: white; text-decoration: none; border-radius: var(--radius-lg); font-weight: 600; transition: all 0.3s; &:hover { background: var(--primary-hover); transform: translateY(-2px); box-shadow: var(--shadow-lg); } } .novo-item-content { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; margin-bottom: 3rem; } .novo-gallery { .novo-main-photo { width: 100%; aspect-ratio: 1; background: var(--bg-secondary); border-radius: var(--radius-xl); overflow: hidden; margin-bottom: 1rem; border: 1px solid var(--border-color); img, video { width: 100%; height: 100%; object-fit: contain; background: white; } &.novo-no-image { display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--text-tertiary); svg { margin-bottom: 1rem; stroke-width: 1; } p { font-size: 0.9rem; } } } .novo-thumbnails { display: grid; grid-template-columns: repeat(auto-fill, minmax(70px, 1fr)); gap: 0.75rem; } .novo-thumb { aspect-ratio: 1; background: var(--bg-secondary); border-radius: var(--radius-md); overflow: hidden; cursor: pointer; border: 2px solid transparent; transition: all 0.2s; position: relative; &:hover { border-color: var(--primary-color); transform: scale(1.05); } &.active { border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } img { width: 100%; height: 100%; object-fit: contain; background: white; } .video-indicator { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 0, 0, 0.7); color: white; width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 10px; padding-left: 2px; } } } .novo-info { .novo-title { font-size: 2rem; font-weight: 700; color: var(--text-primary); margin: 0 0 1rem 0; line-height: 1.3; } .novo-rating { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 1.5rem; .stars { color: #fbbf24; font-size: 1.1rem; } .value { font-weight: 700; color: var(--text-primary); } .reviews { color: var(--text-secondary); font-size: 0.9rem; } } .novo-price-block { background: var(--bg-secondary); padding: 1.5rem; border-radius: var(--radius-lg); margin-bottom: 1.5rem; .price-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.5rem; } .old-price { text-decoration: line-through; color: var(--text-tertiary); font-size: 1.1rem; } .discount-badge { background: #ef4444; color: white; padding: 0.25rem 0.75rem; border-radius: var(--radius-md); font-weight: 700; font-size: 0.85rem; } .current-price { font-size: 2.5rem; font-weight: 800; color: var(--primary-color); line-height: 1; } } .novo-stock { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; padding: 1rem; background: white; border: 1px solid var(--border-color); border-radius: var(--radius-md); .stock-label { font-weight: 600; color: var(--text-secondary); } .stock-indicator { display: flex; align-items: center; gap: 0.5rem; font-weight: 600; .dot { width: 10px; height: 10px; border-radius: 50%; display: block; } &.high { color: #10b981; .dot { background: #10b981; } } &.medium { color: #f59e0b; .dot { background: #f59e0b; } } &.low { color: #ef4444; .dot { background: #ef4444; } } } } .novo-add-cart { width: 100%; padding: 1.25rem 2rem; background: var(--primary-color); color: white; border: none; border-radius: var(--radius-lg); font-size: 1.1rem; font-weight: 700; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.75rem; transition: all 0.3s; margin-bottom: 2rem; &:hover { background: var(--primary-hover); transform: translateY(-2px); box-shadow: var(--shadow-lg); } &:active { transform: translateY(0); } } .novo-description { h3 { font-size: 1.25rem; font-weight: 600; color: var(--text-primary); margin: 0 0 1rem 0; } ::ng-deep { p { color: var(--text-secondary); line-height: 1.7; margin-bottom: 1rem; } ul, ol { padding-left: 1.5rem; margin-bottom: 1rem; } li { margin-bottom: 0.5rem; color: var(--text-secondary); } strong { color: var(--text-primary); } } } } .novo-reviews { margin-top: 3rem; padding-top: 3rem; border-top: 1px solid var(--border-color); h2 { font-size: 1.75rem; font-weight: 700; color: var(--text-primary); margin: 0 0 2rem 0; } .novo-reviews-list { display: grid; gap: 1.5rem; } .novo-review-card { background: white; border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 1.5rem; transition: all 0.3s; &:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); border-color: #10b981; } .review-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1rem; gap: 1rem; .reviewer-info { display: flex; flex-direction: column; gap: 0.25rem; .reviewer-name { font-weight: 600; font-size: 1rem; color: var(--text-primary); } .review-date { font-size: 0.8rem; color: var(--text-secondary); } } .review-stars { color: #fbbf24; font-size: 1.125rem; flex-shrink: 0; } } .review-text { color: var(--text-secondary); line-height: 1.7; margin: 0; font-size: 0.95rem; } } .novo-no-reviews { text-align: center; padding: 3rem 2rem; color: var(--text-secondary); font-size: 1rem; background: var(--bg-secondary); border-radius: var(--radius-lg); } } /* novo Review Form */ .novo-review-form { background: var(--bg-secondary); border: 1px solid var(--border-color); border-radius: var(--radius-lg); padding: 2rem; margin-bottom: 2rem; h3 { font-size: 1.25rem; font-weight: 700; color: var(--text-primary); margin: 0 0 1.5rem 0; } .novo-rating-input { margin-bottom: 1.5rem; label { display: block; font-size: 0.95rem; font-weight: 600; color: var(--text-primary); margin-bottom: 0.75rem; } .novo-star-selector { display: flex; gap: 0.5rem; .novo-star { font-size: 2rem; color: #d1d5db; cursor: pointer; transition: all 0.2s ease; user-select: none; &:hover, &.selected { color: #fbbf24; transform: scale(1.1); } &.selected { text-shadow: 0 0 10px rgba(251, 191, 36, 0.5); } } } } .novo-textarea { width: 100%; padding: 1rem; border: 1px solid var(--border-color); border-radius: var(--radius-md); font-size: 0.95rem; font-family: inherit; color: var(--text-primary); background: white; resize: vertical; min-height: 100px; transition: all 0.2s ease; &:focus { outline: none; border-color: #10b981; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } &::placeholder { color: var(--text-secondary); opacity: 0.6; } } .novo-form-actions { display: flex; align-items: center; gap: 1rem; margin-top: 1rem; flex-wrap: wrap; .novo-anonymous-toggle { display: flex; align-items: center; gap: 0.5rem; font-size: 0.9rem; color: var(--text-secondary); cursor: pointer; input[type="checkbox"] { cursor: pointer; width: 18px; height: 18px; } span { user-select: none; } } .novo-username-preview { font-size: 0.875rem; color: var(--text-secondary); font-style: italic; } .novo-submit-review-btn { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1.5rem; margin-left: auto; background: linear-gradient(135deg, #10b981, #14b8a6, #06b6d4); color: white; border: none; border-radius: var(--radius-md); font-size: 0.95rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; svg { width: 18px; height: 18px; } &:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(16, 185, 129, 0.3); } &:disabled { opacity: 0.5; cursor: not-allowed; transform: none; } &.submitting { pointer-events: none; } .novo-spinner-small { width: 16px; height: 16px; border: 2px solid rgba(255, 255, 255, 0.3); border-top-color: white; border-radius: 50%; animation: spin 0.8s linear infinite; } } } .novo-status-message { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; margin-top: 1rem; border-radius: var(--radius-md); font-size: 0.95rem; font-weight: 500; animation: slideDown 0.3s ease; svg { flex-shrink: 0; width: 20px; height: 20px; } &.success { background: rgba(16, 185, 129, 0.1); color: #059669; border: 1px solid rgba(16, 185, 129, 0.3); svg { stroke: #059669; } } &.error { background: rgba(239, 68, 68, 0.1); color: #dc2626; border: 1px solid rgba(239, 68, 68, 0.3); svg { stroke: #dc2626; } } } } @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 968px) { .novo-item-content { grid-template-columns: 1fr; gap: 2rem; } .novo-info .novo-title { font-size: 1.5rem; } .novo-info .novo-price-block .current-price { font-size: 2rem; } .novo-review-form { padding: 1.5rem; .novo-form-actions { flex-direction: column; align-items: stretch; .novo-submit-review-btn { margin-left: 0; justify-content: center; } } } }