UNPKG

story-az-card-kit

Version:

A flexible and customizable story card component with multiple layouts

669 lines (556 loc) 14.3 kB
/* Story Card Component - Main Styles */ /* CSS Custom Properties for theming */ :root { /* Colors */ --story-card-primary: #3b82f6; --story-card-secondary: #64748b; --story-card-success: #10b981; --story-card-warning: #f59e0b; --story-card-error: #ef4444; /* Neutral colors */ --story-card-white: #ffffff; --story-card-gray-50: #f8fafc; --story-card-gray-100: #f1f5f9; --story-card-gray-200: #e2e8f0; --story-card-gray-300: #cbd5e1; --story-card-gray-400: #94a3b8; --story-card-gray-500: #64748b; --story-card-gray-600: #475569; --story-card-gray-700: #334155; --story-card-gray-800: #1e293b; --story-card-gray-900: #0f172a; /* Typography */ --story-card-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --story-card-font-size-xs: 0.75rem; --story-card-font-size-sm: 0.875rem; --story-card-font-size-base: 1rem; --story-card-font-size-lg: 1.125rem; --story-card-font-size-xl: 1.25rem; --story-card-font-size-2xl: 1.5rem; --story-card-font-size-3xl: 1.875rem; /* Spacing */ --story-card-spacing-xs: 0.25rem; --story-card-spacing-sm: 0.5rem; --story-card-spacing-md: 1rem; --story-card-spacing-lg: 1.5rem; --story-card-spacing-xl: 2rem; --story-card-spacing-2xl: 3rem; /* Border radius */ --story-card-radius-sm: 0.25rem; --story-card-radius-md: 0.5rem; --story-card-radius-lg: 0.75rem; --story-card-radius-xl: 1rem; /* Shadows */ --story-card-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --story-card-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --story-card-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --story-card-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); /* Transitions */ --story-card-transition-fast: 150ms ease-in-out; --story-card-transition-normal: 250ms ease-in-out; --story-card-transition-slow: 350ms ease-in-out; } /* Base Story Card Styles */ .story-card { position: relative; background: var(--story-card-white); border-radius: var(--story-card-radius-lg); box-shadow: var(--story-card-shadow-md); overflow: hidden; transition: all var(--story-card-transition-normal); font-family: var(--story-card-font-family); cursor: pointer; } .story-card:hover { transform: translateY(-4px); box-shadow: var(--story-card-shadow-lg); } .story-card:focus { outline: 2px solid var(--story-card-primary); outline-offset: 2px; } /* Image Styles */ .story-card__image { position: relative; overflow: hidden; background: var(--story-card-gray-100); } .story-card__image img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--story-card-transition-normal); } .story-card:hover .story-card__image img { transform: scale(1.05); } /* Content Styles */ .story-card__content { padding: var(--story-card-spacing-lg); } .story-card__title { margin: 0 0 var(--story-card-spacing-sm) 0; font-size: var(--story-card-font-size-xl); font-weight: 600; line-height: 1.4; color: var(--story-card-gray-900); } .story-card__description { margin: 0 0 var(--story-card-spacing-md) 0; font-size: var(--story-card-font-size-base); line-height: 1.6; color: var(--story-card-gray-600); } .story-card__meta { display: flex; align-items: center; gap: var(--story-card-spacing-md); margin-bottom: var(--story-card-spacing-md); font-size: var(--story-card-font-size-sm); color: var(--story-card-gray-500); } .story-card__author { font-weight: 500; color: var(--story-card-primary); } .story-card__date { color: var(--story-card-gray-400); } .story-card__tags { display: flex; flex-wrap: wrap; gap: var(--story-card-spacing-xs); } .story-card__tag { padding: var(--story-card-spacing-xs) var(--story-card-spacing-sm); background: var(--story-card-gray-100); color: var(--story-card-gray-600); border-radius: var(--story-card-radius-sm); font-size: var(--story-card-font-size-xs); font-weight: 500; text-transform: uppercase; letter-spacing: 0.025em; } /* Layout Variations */ /* Vertical Layout (Default) */ .story-card--vertical { display: flex; flex-direction: column; } .story-card--vertical .story-card__image { height: 200px; } .story-card--vertical-small .story-card__image { height: 150px; } .story-card--vertical-medium .story-card__image { height: 250px; } .story-card--vertical-large .story-card__image { height: 300px; } /* Horizontal Layout */ .story-card--horizontal { display: flex; flex-direction: row; align-items: stretch; } .story-card--horizontal .story-card__image { flex: 0 0 200px; height: auto; } .story-card--horizontal .story-card__content { flex: 1; display: flex; flex-direction: column; justify-content: center; } .story-card--horizontal-right { flex-direction: row-reverse; } /* Grid Layout */ .story-card-grid { display: grid; gap: var(--story-card-spacing-lg); } .story-card-grid--1-cols { grid-template-columns: 1fr; } .story-card-grid--2-cols { grid-template-columns: repeat(2, 1fr); } .story-card-grid--3-cols { grid-template-columns: repeat(3, 1fr); } .story-card-grid--4-cols { grid-template-columns: repeat(4, 1fr); } .story-card-grid--5-cols { grid-template-columns: repeat(5, 1fr); } .story-card-grid--6-cols { grid-template-columns: repeat(6, 1fr); } .story-card-grid--gap-small { gap: var(--story-card-spacing-md); } .story-card-grid--gap-medium { gap: var(--story-card-spacing-lg); } .story-card-grid--gap-large { gap: var(--story-card-spacing-xl); } /* Responsive Grid */ .story-card-grid--responsive { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } /* Masonry Layout */ .story-card-masonry { columns: 3; column-gap: var(--story-card-spacing-lg); } .story-card-masonry--2-cols { columns: 2; } .story-card-masonry--3-cols { columns: 3; } .story-card-masonry--4-cols { columns: 4; } .story-card-masonry--5-cols { columns: 5; } .story-card-masonry--gap-small { column-gap: var(--story-card-spacing-md); } .story-card-masonry--gap-medium { column-gap: var(--story-card-spacing-lg); } .story-card-masonry--gap-large { column-gap: var(--story-card-spacing-xl); } .story-card-masonry__item { break-inside: avoid; margin-bottom: var(--story-card-spacing-lg); } /* Carousel Layout */ .story-card-carousel { position: relative; overflow: hidden; border-radius: var(--story-card-radius-lg); } .story-card-carousel__container { overflow: hidden; } .story-card-carousel__track { display: flex; transition: transform var(--story-card-transition-normal); } .story-card-carousel__slide { flex: 0 0 100%; padding: 0 var(--story-card-spacing-md); } .story-card-carousel__arrow { position: absolute; top: 50%; transform: translateY(-50%); width: 48px; height: 48px; background: rgba(255, 255, 255, 0.9); border: none; border-radius: 50%; font-size: var(--story-card-font-size-2xl); color: var(--story-card-gray-700); cursor: pointer; transition: all var(--story-card-transition-fast); z-index: 10; } .story-card-carousel__arrow:hover { background: var(--story-card-white); color: var(--story-card-primary); box-shadow: var(--story-card-shadow-lg); } .story-card-carousel__arrow--prev { left: var(--story-card-spacing-md); } .story-card-carousel__arrow--next { right: var(--story-card-spacing-md); } .story-card-carousel__dots { display: flex; justify-content: center; gap: var(--story-card-spacing-sm); padding: var(--story-card-spacing-md); } .story-card-carousel__dot { width: 12px; height: 12px; border: none; border-radius: 50%; background: var(--story-card-gray-300); cursor: pointer; transition: background var(--story-card-transition-fast); } .story-card-carousel__dot:hover { background: var(--story-card-gray-400); } .story-card-carousel__dot--active { background: var(--story-card-primary); } /* Flip Card Layout */ .story-card-flip { perspective: 1000px; height: 400px; } .story-card-flip__inner { position: relative; width: 100%; height: 100%; text-align: center; transition: transform var(--story-card-transition-slow); transform-style: preserve-3d; } .story-card-flip--flipped .story-card-flip__inner { transform: rotateY(180deg); } .story-card-flip--vertical .story-card-flip__inner { transform-style: preserve-3d; } .story-card-flip--vertical.story-card-flip--flipped .story-card-flip__inner { transform: rotateX(180deg); } .story-card-flip__front, .story-card-flip__back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: var(--story-card-radius-lg); overflow: hidden; } .story-card-flip__back { transform: rotateY(180deg); } .story-card-flip--vertical .story-card-flip__back { transform: rotateX(180deg); } /* Theme Variations */ /* Default Theme */ .story-card--default { background: var(--story-card-white); color: var(--story-card-gray-900); } /* Dark Theme */ .story-card--dark { background: var(--story-card-gray-800); color: var(--story-card-white); } .story-card--dark .story-card__title { color: var(--story-card-white); } .story-card--dark .story-card__description { color: var(--story-card-gray-300); } .story-card--dark .story-card__tag { background: var(--story-card-gray-700); color: var(--story-card-gray-300); } /* Minimal Theme */ .story-card--minimal { background: transparent; box-shadow: none; border: 1px solid var(--story-card-gray-200); } .story-card--minimal:hover { transform: none; box-shadow: var(--story-card-shadow-sm); } .story-card--minimal .story-card__content { padding: var(--story-card-spacing-md); } /* Elegant Theme */ .story-card--elegant { background: linear-gradient(135deg, var(--story-card-white) 0%, var(--story-card-gray-50) 100%); border: 1px solid var(--story-card-gray-200); } .story-card--elegant .story-card__title { font-family: 'Georgia', serif; font-weight: 400; } .story-card--elegant .story-card__tag { background: var(--story-card-primary); color: var(--story-card-white); } /* Modern Theme */ .story-card--modern { background: var(--story-card-white); border-radius: var(--story-card-radius-xl); box-shadow: var(--story-card-shadow-lg); } .story-card--modern .story-card__content { padding: var(--story-card-spacing-xl); } .story-card--modern .story-card__title { font-weight: 700; letter-spacing: -0.025em; } /* Pagination Styles */ .story-card-pagination { display: flex; justify-content: center; align-items: center; gap: var(--story-card-spacing-sm); margin-top: var(--story-card-spacing-xl); padding: var(--story-card-spacing-lg); } .story-card-pagination__btn { padding: var(--story-card-spacing-sm) var(--story-card-spacing-md); background: var(--story-card-white); border: 1px solid var(--story-card-gray-300); border-radius: var(--story-card-radius-md); color: var(--story-card-gray-700); font-size: var(--story-card-font-size-sm); cursor: pointer; transition: all var(--story-card-transition-fast); } .story-card-pagination__btn:hover { background: var(--story-card-gray-50); border-color: var(--story-card-gray-400); } .story-card-pagination__btn--active { background: var(--story-card-primary); border-color: var(--story-card-primary); color: var(--story-card-white); } /* Info Styles */ .story-card-info { text-align: center; padding: var(--story-card-spacing-md); color: var(--story-card-gray-600); font-size: var(--story-card-font-size-sm); } /* Responsive Design */ @media (max-width: 1024px) { .story-card-grid--4-cols, .story-card-grid--5-cols, .story-card-grid--6-cols { grid-template-columns: repeat(3, 1fr); } .story-card-masonry--4-cols, .story-card-masonry--5-cols { columns: 3; } } @media (max-width: 768px) { .story-card-grid--3-cols, .story-card-grid--4-cols, .story-card-grid--5-cols, .story-card-grid--6-cols { grid-template-columns: repeat(2, 1fr); } .story-card-masonry--3-cols, .story-card-masonry--4-cols, .story-card-masonry--5-cols { columns: 2; } .story-card--horizontal { flex-direction: column; } .story-card--horizontal .story-card__image { flex: none; height: 200px; } .story-card-carousel__arrow { width: 40px; height: 40px; font-size: var(--story-card-font-size-xl); } } @media (max-width: 480px) { .story-card-grid--2-cols, .story-card-grid--3-cols, .story-card-grid--4-cols, .story-card-grid--5-cols, .story-card-grid--6-cols { grid-template-columns: 1fr; } .story-card-masonry--2-cols, .story-card-masonry--3-cols, .story-card-masonry--4-cols, .story-card-masonry--5-cols { columns: 1; } .story-card__content { padding: var(--story-card-spacing-md); } .story-card__title { font-size: var(--story-card-font-size-lg); } .story-card-carousel__arrow { width: 36px; height: 36px; font-size: var(--story-card-font-size-lg); } } /* Animation Classes */ .story-card--fade-in { animation: fadeIn 0.5s ease-in-out; } .story-card--slide-up { animation: slideUp 0.5s ease-out; } .story-card--scale-in { animation: scaleIn 0.3s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } /* Loading States */ .story-card--loading { pointer-events: none; } .story-card--loading .story-card__image { background: linear-gradient(90deg, var(--story-card-gray-200) 25%, var(--story-card-gray-100) 50%, var(--story-card-gray-200) 75%); background-size: 200% 100%; animation: loading 1.5s infinite; } .story-card--loading .story-card__title, .story-card--loading .story-card__description { background: var(--story-card-gray-200); border-radius: var(--story-card-radius-sm); color: transparent; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }