I’ll build this as a production-ready cards.css for RX Theme: reusable card variables, medical/SEO content cards, post cards, service cards, doctor/profile cards, responsive grids, hover states, accessibility, RTL support, and dark-mode compatibility.
Dear friend, create this file:
assets/static/static-css/components/cards.css
Then paste this full advanced cards.css code.
/*!
* RX Theme - Cards Component
* File: assets/static/static-css/components/cards.css
* Description: Advanced reusable card system for posts, medical articles,
* services, doctors, categories, pricing, author boxes, CTA cards, and widgets.
* Author: RX Theme
*/
/* ==========================================================================
1. Card Design Tokens
========================================================================== */
:root {
/* Card spacing */
--rx-card-padding-xs: 0.75rem;
--rx-card-padding-sm: 1rem;
--rx-card-padding-md: 1.25rem;
--rx-card-padding-lg: 1.5rem;
--rx-card-padding-xl: 2rem;
/* Card radius */
--rx-card-radius-xs: 0.375rem;
--rx-card-radius-sm: 0.5rem;
--rx-card-radius-md: 0.75rem;
--rx-card-radius-lg: 1rem;
--rx-card-radius-xl: 1.25rem;
--rx-card-radius-pill: 999px;
/* Card colors */
--rx-card-bg: var(--rx-color-surface, #ffffff);
--rx-card-bg-soft: var(--rx-color-surface-soft, #f8fafc);
--rx-card-bg-muted: var(--rx-color-muted, #f1f5f9);
--rx-card-text: var(--rx-color-text, #0f172a);
--rx-card-text-muted: var(--rx-color-text-muted, #64748b);
--rx-card-border: var(--rx-color-border, #e2e8f0);
--rx-card-border-strong: var(--rx-color-border-strong, #cbd5e1);
/* Brand and status */
--rx-card-primary: var(--rx-color-primary, #0f766e);
--rx-card-primary-hover: var(--rx-color-primary-hover, #115e59);
--rx-card-primary-soft: var(--rx-color-primary-soft, #ccfbf1);
--rx-card-success: var(--rx-color-success, #16a34a);
--rx-card-warning: var(--rx-color-warning, #f59e0b);
--rx-card-danger: var(--rx-color-danger, #dc2626);
--rx-card-info: var(--rx-color-info, #0284c7);
/* Shadows */
--rx-card-shadow-xs: 0 1px 2px rgb(15 23 42 / 0.06);
--rx-card-shadow-sm: 0 4px 12px rgb(15 23 42 / 0.08);
--rx-card-shadow-md: 0 10px 25px rgb(15 23 42 / 0.1);
--rx-card-shadow-lg: 0 18px 45px rgb(15 23 42 / 0.13);
--rx-card-shadow-xl: 0 24px 70px rgb(15 23 42 / 0.16);
/* Transitions */
--rx-card-transition-fast: 150ms ease;
--rx-card-transition: 250ms ease;
--rx-card-transition-slow: 350ms ease;
/* Layout */
--rx-card-gap: 1.25rem;
--rx-card-grid-min: 17rem;
--rx-card-image-height: 14rem;
/* Focus */
--rx-card-focus-ring: 0 0 0 3px rgb(15 118 110 / 0.22);
}
/* ==========================================================================
2. Base Card
========================================================================== */
.rx-card {
position: relative;
display: flex;
flex-direction: column;
min-width: 0;
overflow: hidden;
color: var(--rx-card-text);
background: var(--rx-card-bg);
border: 1px solid var(--rx-card-border);
border-radius: var(--rx-card-radius-lg);
box-shadow: var(--rx-card-shadow-xs);
transition:
transform var(--rx-card-transition),
box-shadow var(--rx-card-transition),
border-color var(--rx-card-transition),
background-color var(--rx-card-transition);
}
.rx-card,
.rx-card *,
.rx-card *::before,
.rx-card *::after {
box-sizing: border-box;
}
.rx-card:hover {
border-color: var(--rx-card-border-strong);
box-shadow: var(--rx-card-shadow-sm);
}
.rx-card:focus-within {
border-color: var(--rx-card-primary);
box-shadow: var(--rx-card-focus-ring), var(--rx-card-shadow-sm);
}
.rx-card__inner {
display: flex;
flex: 1 1 auto;
flex-direction: column;
min-width: 0;
padding: var(--rx-card-padding-lg);
}
.rx-card__header,
.rx-card__body,
.rx-card__footer {
position: relative;
min-width: 0;
}
.rx-card__header {
margin-bottom: 0.85rem;
}
.rx-card__body {
flex: 1 1 auto;
}
.rx-card__footer {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
align-items: center;
justify-content: space-between;
margin-top: 1.25rem;
padding-top: 1rem;
border-top: 1px solid var(--rx-card-border);
}
/* Remove margin from first/last content */
.rx-card__header > :first-child,
.rx-card__body > :first-child,
.rx-card__footer > :first-child {
margin-top: 0;
}
.rx-card__header > :last-child,
.rx-card__body > :last-child,
.rx-card__footer > :last-child {
margin-bottom: 0;
}
/* ==========================================================================
3. Card Typography
========================================================================== */
.rx-card__eyebrow {
display: inline-flex;
gap: 0.35rem;
align-items: center;
margin-bottom: 0.5rem;
color: var(--rx-card-primary);
font-size: 0.75rem;
font-weight: 700;
line-height: 1.3;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.rx-card__title {
margin: 0;
color: var(--rx-card-text);
font-size: clamp(1.05rem, 1rem + 0.35vw, 1.35rem);
font-weight: 800;
line-height: 1.25;
text-wrap: balance;
}
.rx-card__title a {
color: inherit;
text-decoration: none;
}
.rx-card__title a:hover,
.rx-card__title a:focus-visible {
color: var(--rx-card-primary);
text-decoration: underline;
text-underline-offset: 0.18em;
}
.rx-card__subtitle {
margin: 0.35rem 0 0;
color: var(--rx-card-text-muted);
font-size: 0.95rem;
line-height: 1.55;
}
.rx-card__text,
.rx-card__excerpt {
margin: 0.75rem 0 0;
color: var(--rx-card-text-muted);
font-size: 0.96rem;
line-height: 1.7;
}
.rx-card__meta {
display: flex;
flex-wrap: wrap;
gap: 0.45rem 0.85rem;
align-items: center;
margin-top: 0.75rem;
color: var(--rx-card-text-muted);
font-size: 0.82rem;
line-height: 1.45;
}
.rx-card__meta-item {
display: inline-flex;
gap: 0.35rem;
align-items: center;
}
.rx-card__meta a {
color: inherit;
text-decoration: none;
}
.rx-card__meta a:hover,
.rx-card__meta a:focus-visible {
color: var(--rx-card-primary);
text-decoration: underline;
text-underline-offset: 0.15em;
}
/* ==========================================================================
4. Card Media
========================================================================== */
.rx-card__media {
position: relative;
display: block;
overflow: hidden;
background: var(--rx-card-bg-muted);
aspect-ratio: 16 / 9;
}
.rx-card__media img,
.rx-card__media picture,
.rx-card__media video,
.rx-card__media iframe {
display: block;
width: 100%;
}
.rx-card__media img,
.rx-card__media video {
height: 100%;
object-fit: cover;
transition:
transform var(--rx-card-transition-slow),
filter var(--rx-card-transition);
}
.rx-card:hover .rx-card__media img,
.rx-card:hover .rx-card__media video {
transform: scale(1.035);
}
.rx-card__media--square {
aspect-ratio: 1 / 1;
}
.rx-card__media--portrait {
aspect-ratio: 4 / 5;
}
.rx-card__media--wide {
aspect-ratio: 21 / 9;
}
.rx-card__media--fixed {
height: var(--rx-card-image-height);
aspect-ratio: auto;
}
.rx-card__media-overlay {
position: absolute;
inset: 0;
pointer-events: none;
background:
linear-gradient(
to top,
rgb(15 23 42 / 0.58),
rgb(15 23 42 / 0.1) 55%,
transparent
);
}
.rx-card__media-badge {
position: absolute;
z-index: 2;
top: 0.85rem;
left: 0.85rem;
}
.rx-card__media-badge--right {
right: 0.85rem;
left: auto;
}
.rx-card__media-content {
position: absolute;
z-index: 2;
right: 1rem;
bottom: 1rem;
left: 1rem;
color: #ffffff;
}
/* ==========================================================================
5. Card Links, Buttons, and Clickable Area
========================================================================== */
.rx-card__link {
display: inline-flex;
gap: 0.4rem;
align-items: center;
color: var(--rx-card-primary);
font-weight: 700;
text-decoration: none;
}
.rx-card__link:hover,
.rx-card__link:focus-visible {
color: var(--rx-card-primary-hover);
text-decoration: underline;
text-underline-offset: 0.18em;
}
.rx-card__link-icon {
transition: transform var(--rx-card-transition-fast);
}
.rx-card__link:hover .rx-card__link-icon,
.rx-card__link:focus-visible .rx-card__link-icon {
transform: translateX(0.2rem);
}
.rx-card__button {
display: inline-flex;
gap: 0.45rem;
align-items: center;
justify-content: center;
min-height: 2.6rem;
padding: 0.65rem 1rem;
color: #ffffff;
font-size: 0.92rem;
font-weight: 800;
line-height: 1.2;
text-align: center;
text-decoration: none;
background: var(--rx-card-primary);
border: 1px solid var(--rx-card-primary);
border-radius: var(--rx-card-radius-md);
cursor: pointer;
transition:
transform var(--rx-card-transition-fast),
background-color var(--rx-card-transition-fast),
border-color var(--rx-card-transition-fast),
box-shadow var(--rx-card-transition-fast);
}
.rx-card__button:hover,
.rx-card__button:focus-visible {
color: #ffffff;
background: var(--rx-card-primary-hover);
border-color: var(--rx-card-primary-hover);
box-shadow: var(--rx-card-shadow-sm);
transform: translateY(-1px);
}
.rx-card__button--outline {
color: var(--rx-card-primary);
background: transparent;
border-color: currentColor;
}
.rx-card__button--outline:hover,
.rx-card__button--outline:focus-visible {
color: #ffffff;
background: var(--rx-card-primary);
}
.rx-card__button--ghost {
color: var(--rx-card-primary);
background: transparent;
border-color: transparent;
}
.rx-card__button--ghost:hover,
.rx-card__button--ghost:focus-visible {
color: var(--rx-card-primary-hover);
background: var(--rx-card-primary-soft);
border-color: transparent;
}
.rx-card__full-link {
position: absolute;
z-index: 1;
inset: 0;
border-radius: inherit;
}
.rx-card__full-link:focus-visible {
outline: 3px solid var(--rx-card-primary);
outline-offset: 4px;
}
.rx-card__full-link ~ * {
position: relative;
z-index: 2;
}
/* ==========================================================================
6. Badges and Labels
========================================================================== */
.rx-card__badge {
display: inline-flex;
gap: 0.35rem;
align-items: center;
width: fit-content;
max-width: 100%;
padding: 0.28rem 0.6rem;
color: var(--rx-card-primary);
font-size: 0.72rem;
font-weight: 800;
line-height: 1.25;
white-space: nowrap;
text-decoration: none;
background: var(--rx-card-primary-soft);
border: 1px solid rgb(15 118 110 / 0.18);
border-radius: var(--rx-card-radius-pill);
}
.rx-card__badge--success {
color: var(--rx-card-success);
background: rgb(22 163 74 / 0.12);
border-color: rgb(22 163 74 / 0.2);
}
.rx-card__badge--warning {
color: #92400e;
background: rgb(245 158 11 / 0.16);
border-color: rgb(245 158 11 / 0.24);
}
.rx-card__badge--danger {
color: var(--rx-card-danger);
background: rgb(220 38 38 / 0.1);
border-color: rgb(220 38 38 / 0.2);
}
.rx-card__badge--info {
color: var(--rx-card-info);
background: rgb(2 132 199 / 0.1);
border-color: rgb(2 132 199 / 0.2);
}
.rx-card__badge--dark {
color: #ffffff;
background: #0f172a;
border-color: #0f172a;
}
/* ==========================================================================
7. Card Grid System
========================================================================== */
.rx-card-grid {
display: grid;
gap: var(--rx-card-gap);
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--rx-card-grid-min)), 1fr));
}
.rx-card-grid--2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.rx-card-grid--3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.rx-card-grid--4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.rx-card-grid--compact {
--rx-card-gap: 0.85rem;
}
.rx-card-grid--comfortable {
--rx-card-gap: 1.5rem;
}
.rx-card-grid--spacious {
--rx-card-gap: 2rem;
}
@media (max-width: 991.98px) {
.rx-card-grid--3,
.rx-card-grid--4 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 639.98px) {
.rx-card-grid--2,
.rx-card-grid--3,
.rx-card-grid--4 {
grid-template-columns: 1fr;
}
}
/* ==========================================================================
8. Card Size Modifiers
========================================================================== */
.rx-card--xs .rx-card__inner {
padding: var(--rx-card-padding-xs);
}
.rx-card--sm .rx-card__inner {
padding: var(--rx-card-padding-sm);
}
.rx-card--md .rx-card__inner {
padding: var(--rx-card-padding-md);
}
.rx-card--lg .rx-card__inner {
padding: var(--rx-card-padding-lg);
}
.rx-card--xl .rx-card__inner {
padding: var(--rx-card-padding-xl);
}
/* ==========================================================================
9. Card Visual Variants
========================================================================== */
.rx-card--flat {
box-shadow: none;
}
.rx-card--flat:hover {
box-shadow: none;
}
.rx-card--raised {
box-shadow: var(--rx-card-shadow-sm);
}
.rx-card--raised:hover {
box-shadow: var(--rx-card-shadow-md);
}
.rx-card--elevated {
border-color: transparent;
box-shadow: var(--rx-card-shadow-md);
}
.rx-card--elevated:hover {
box-shadow: var(--rx-card-shadow-lg);
}
.rx-card--borderless {
border-color: transparent;
}
.rx-card--outlined {
border-width: 2px;
box-shadow: none;
}
.rx-card--soft {
background: var(--rx-card-bg-soft);
}
.rx-card--muted {
background: var(--rx-card-bg-muted);
}
.rx-card--glass {
background: rgb(255 255 255 / 0.72);
border-color: rgb(255 255 255 / 0.42);
box-shadow: var(--rx-card-shadow-sm);
backdrop-filter: blur(16px);
}
.rx-card--gradient {
color: #ffffff;
background:
radial-gradient(circle at top left, rgb(20 184 166 / 0.95), transparent 36%),
linear-gradient(135deg, #0f766e, #0f172a);
border-color: transparent;
}
.rx-card--gradient .rx-card__title,
.rx-card--gradient .rx-card__text,
.rx-card--gradient .rx-card__excerpt,
.rx-card--gradient .rx-card__subtitle,
.rx-card--gradient .rx-card__meta,
.rx-card--gradient .rx-card__eyebrow {
color: inherit;
}
.rx-card--gradient .rx-card__footer {
border-color: rgb(255 255 255 / 0.22);
}
.rx-card--primary {
border-color: rgb(15 118 110 / 0.25);
background: linear-gradient(180deg, rgb(204 251 241 / 0.45), #ffffff 42%);
}
.rx-card--success {
border-color: rgb(22 163 74 / 0.24);
background: linear-gradient(180deg, rgb(22 163 74 / 0.08), #ffffff 44%);
}
.rx-card--warning {
border-color: rgb(245 158 11 / 0.26);
background: linear-gradient(180deg, rgb(245 158 11 / 0.1), #ffffff 44%);
}
.rx-card--danger {
border-color: rgb(220 38 38 / 0.22);
background: linear-gradient(180deg, rgb(220 38 38 / 0.08), #ffffff 44%);
}
.rx-card--info {
border-color: rgb(2 132 199 / 0.22);
background: linear-gradient(180deg, rgb(2 132 199 / 0.08), #ffffff 44%);
}
/* ==========================================================================
10. Card Hover Effects
========================================================================== */
.rx-card--hover-lift:hover {
transform: translateY(-4px);
}
.rx-card--hover-lift-sm:hover {
transform: translateY(-2px);
}
.rx-card--hover-zoom:hover {
transform: scale(1.015);
}
.rx-card--hover-border:hover {
border-color: var(--rx-card-primary);
}
.rx-card--hover-glow:hover {
box-shadow:
0 0 0 1px rgb(15 118 110 / 0.15),
0 18px 45px rgb(15 118 110 / 0.16);
}
.rx-card--hover-muted:hover {
background: var(--rx-card-bg-soft);
}
/* ==========================================================================
11. Horizontal Card
========================================================================== */
.rx-card--horizontal {
display: grid;
grid-template-columns: minmax(12rem, 34%) minmax(0, 1fr);
align-items: stretch;
}
.rx-card--horizontal .rx-card__media {
height: 100%;
min-height: 12rem;
aspect-ratio: auto;
}
.rx-card--horizontal .rx-card__inner {
min-width: 0;
}
@media (max-width: 767.98px) {
.rx-card--horizontal {
display: flex;
flex-direction: column;
}
.rx-card--horizontal .rx-card__media {
min-height: 0;
aspect-ratio: 16 / 9;
}
}
/* ==========================================================================
12. Compact List Card
========================================================================== */
.rx-card--list {
flex-direction: row;
gap: 1rem;
align-items: center;
padding: 0.85rem;
}
.rx-card--list .rx-card__media {
flex: 0 0 5rem;
width: 5rem;
height: 5rem;
border-radius: var(--rx-card-radius-md);
aspect-ratio: 1 / 1;
}
.rx-card--list .rx-card__inner {
padding: 0;
}
.rx-card--list .rx-card__title {
font-size: 1rem;
}
.rx-card--list .rx-card__excerpt {
margin-top: 0.35rem;
font-size: 0.88rem;
line-height: 1.55;
}
.rx-card--list .rx-card__footer {
margin-top: 0.65rem;
padding-top: 0;
border-top: 0;
}
/* ==========================================================================
13. Blog / Post Card
========================================================================== */
.rx-post-card {
height: 100%;
}
.rx-post-card .rx-card__title {
font-size: clamp(1.1rem, 1rem + 0.45vw, 1.45rem);
}
.rx-post-card__category {
display: inline-flex;
gap: 0.35rem;
align-items: center;
color: var(--rx-card-primary);
font-size: 0.78rem;
font-weight: 800;
letter-spacing: 0.04em;
text-decoration: none;
text-transform: uppercase;
}
.rx-post-card__category:hover,
.rx-post-card__category:focus-visible {
color: var(--rx-card-primary-hover);
text-decoration: underline;
text-underline-offset: 0.16em;
}
.rx-post-card__author {
display: inline-flex;
gap: 0.5rem;
align-items: center;
}
.rx-post-card__avatar {
width: 2rem;
height: 2rem;
overflow: hidden;
border-radius: 50%;
background: var(--rx-card-bg-muted);
}
.rx-post-card__avatar img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
/* ==========================================================================
14. Medical Article Card
========================================================================== */
.rx-medical-card {
border-top: 4px solid var(--rx-card-primary);
}
.rx-medical-card__condition {
display: inline-flex;
gap: 0.4rem;
align-items: center;
color: var(--rx-card-primary);
font-size: 0.8rem;
font-weight: 800;
}
.rx-medical-card__summary {
margin-top: 0.85rem;
color: var(--rx-card-text-muted);
font-size: 0.95rem;
line-height: 1.75;
}
.rx-medical-card__stats {
display: grid;
gap: 0.65rem;
grid-template-columns: repeat(3, minmax(0, 1fr));
margin-top: 1rem;
}
.rx-medical-card__stat {
padding: 0.75rem;
text-align: center;
background: var(--rx-card-bg-soft);
border: 1px solid var(--rx-card-border);
border-radius: var(--rx-card-radius-md);
}
.rx-medical-card__stat-number {
display: block;
color: var(--rx-card-primary);
font-size: 1.1rem;
font-weight: 900;
line-height: 1.1;
}
.rx-medical-card__stat-label {
display: block;
margin-top: 0.25rem;
color: var(--rx-card-text-muted);
font-size: 0.72rem;
font-weight: 700;
line-height: 1.25;
text-transform: uppercase;
}
@media (max-width: 479.98px) {
.rx-medical-card__stats {
grid-template-columns: 1fr;
}
}
/* ==========================================================================
15. Doctor / Author / Expert Card
========================================================================== */
.rx-profile-card {
align-items: center;
text-align: center;
}
.rx-profile-card .rx-card__inner {
align-items: center;
}
.rx-profile-card__avatar {
position: relative;
width: 7rem;
height: 7rem;
margin-bottom: 1rem;
overflow: hidden;
border: 4px solid #ffffff;
border-radius: 50%;
background: var(--rx-card-bg-muted);
box-shadow: var(--rx-card-shadow-sm);
}
.rx-profile-card__avatar img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.rx-profile-card__status {
position: absolute;
right: 0.45rem;
bottom: 0.55rem;
width: 1rem;
height: 1rem;
background: var(--rx-card-success);
border: 2px solid #ffffff;
border-radius: 50%;
}
.rx-profile-card__name {
margin: 0;
color: var(--rx-card-text);
font-size: 1.25rem;
font-weight: 900;
line-height: 1.2;
}
.rx-profile-card__role {
margin: 0.35rem 0 0;
color: var(--rx-card-primary);
font-size: 0.92rem;
font-weight: 800;
}
.rx-profile-card__bio {
margin: 0.85rem 0 0;
color: var(--rx-card-text-muted);
font-size: 0.95rem;
line-height: 1.7;
}
.rx-profile-card__social {
display: flex;
flex-wrap: wrap;
gap: 0.55rem;
justify-content: center;
margin-top: 1rem;
}
.rx-profile-card__social a {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.35rem;
height: 2.35rem;
color: var(--rx-card-primary);
text-decoration: none;
background: var(--rx-card-primary-soft);
border-radius: 50%;
transition:
color var(--rx-card-transition-fast),
background-color var(--rx-card-transition-fast),
transform var(--rx-card-transition-fast);
}
.rx-profile-card__social a:hover,
.rx-profile-card__social a:focus-visible {
color: #ffffff;
background: var(--rx-card-primary);
transform: translateY(-2px);
}
/* ==========================================================================
16. Service Card
========================================================================== */
.rx-service-card {
text-align: left;
}
.rx-service-card__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 3.25rem;
height: 3.25rem;
margin-bottom: 1rem;
color: var(--rx-card-primary);
background: var(--rx-card-primary-soft);
border-radius: var(--rx-card-radius-lg);
}
.rx-service-card__icon svg {
width: 1.55rem;
height: 1.55rem;
}
.rx-service-card__features {
display: grid;
gap: 0.5rem;
margin: 1rem 0 0;
padding: 0;
list-style: none;
}
.rx-service-card__features li {
display: flex;
gap: 0.5rem;
align-items: flex-start;
color: var(--rx-card-text-muted);
font-size: 0.92rem;
line-height: 1.55;
}
.rx-service-card__features li::before {
flex: 0 0 auto;
width: 0.45rem;
height: 0.45rem;
margin-top: 0.55rem;
content: "";
background: var(--rx-card-primary);
border-radius: 50%;
}
/* ==========================================================================
17. Category Card
========================================================================== */
.rx-category-card {
min-height: 11rem;
}
.rx-category-card__count {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 2rem;
min-height: 2rem;
padding: 0.25rem 0.55rem;
color: var(--rx-card-primary);
font-size: 0.78rem;
font-weight: 900;
background: var(--rx-card-primary-soft);
border-radius: var(--rx-card-radius-pill);
}
.rx-category-card__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 3rem;
height: 3rem;
margin-bottom: 1rem;
color: var(--rx-card-primary);
background: var(--rx-card-primary-soft);
border-radius: var(--rx-card-radius-lg);
}
/* ==========================================================================
18. CTA Card
========================================================================== */
.rx-cta-card {
overflow: hidden;
color: #ffffff;
background:
radial-gradient(circle at 10% 10%, rgb(45 212 191 / 0.5), transparent 28%),
radial-gradient(circle at 90% 20%, rgb(14 165 233 / 0.35), transparent 28%),
linear-gradient(135deg, #0f766e, #0f172a);
border-color: transparent;
}
.rx-cta-card::before {
position: absolute;
top: -6rem;
right: -6rem;
width: 14rem;
height: 14rem;
content: "";
background: rgb(255 255 255 / 0.08);
border-radius: 50%;
}
.rx-cta-card::after {
position: absolute;
bottom: -5rem;
left: -5rem;
width: 12rem;
height: 12rem;
content: "";
background: rgb(255 255 255 / 0.06);
border-radius: 50%;
}
.rx-cta-card .rx-card__inner {
position: relative;
z-index: 1;
}
.rx-cta-card .rx-card__title,
.rx-cta-card .rx-card__subtitle,
.rx-cta-card .rx-card__text,
.rx-cta-card .rx-card__excerpt,
.rx-cta-card .rx-card__meta {
color: inherit;
}
.rx-cta-card .rx-card__button {
color: #0f172a;
background: #ffffff;
border-color: #ffffff;
}
.rx-cta-card .rx-card__button:hover,
.rx-cta-card .rx-card__button:focus-visible {
color: #0f172a;
background: #f8fafc;
border-color: #f8fafc;
}
.rx-cta-card .rx-card__button--outline {
color: #ffffff;
background: transparent;
border-color: rgb(255 255 255 / 0.75);
}
.rx-cta-card .rx-card__button--outline:hover,
.rx-cta-card .rx-card__button--outline:focus-visible {
color: #0f172a;
background: #ffffff;
border-color: #ffffff;
}
/* ==========================================================================
19. Pricing Card
========================================================================== */
.rx-pricing-card {
overflow: visible;
}
.rx-pricing-card--featured {
border-color: var(--rx-card-primary);
box-shadow:
0 0 0 1px rgb(15 118 110 / 0.22),
var(--rx-card-shadow-md);
}
.rx-pricing-card__ribbon {
position: absolute;
z-index: 3;
top: -0.85rem;
left: 50%;
padding: 0.35rem 0.8rem;
color: #ffffff;
font-size: 0.75rem;
font-weight: 900;
line-height: 1.2;
white-space: nowrap;
background: var(--rx-card-primary);
border-radius: var(--rx-card-radius-pill);
box-shadow: var(--rx-card-shadow-sm);
transform: translateX(-50%);
}
.rx-pricing-card__price {
display: flex;
gap: 0.25rem;
align-items: flex-start;
margin-top: 1rem;
}
.rx-pricing-card__currency {
margin-top: 0.45rem;
color: var(--rx-card-text-muted);
font-size: 1rem;
font-weight: 800;
}
.rx-pricing-card__amount {
color: var(--rx-card-text);
font-size: clamp(2rem, 1.5rem + 2vw, 3rem);
font-weight: 950;
line-height: 1;
}
.rx-pricing-card__period {
align-self: flex-end;
margin-bottom: 0.25rem;
color: var(--rx-card-text-muted);
font-size: 0.9rem;
}
.rx-pricing-card__features {
display: grid;
gap: 0.65rem;
margin: 1.25rem 0 0;
padding: 0;
list-style: none;
}
.rx-pricing-card__features li {
display: flex;
gap: 0.55rem;
align-items: flex-start;
color: var(--rx-card-text-muted);
font-size: 0.94rem;
line-height: 1.55;
}
.rx-pricing-card__features li::before {
flex: 0 0 auto;
width: 1.1rem;
height: 1.1rem;
margin-top: 0.15rem;
content: "✓";
color: #ffffff;
font-size: 0.75rem;
font-weight: 900;
line-height: 1.1rem;
text-align: center;
background: var(--rx-card-success);
border-radius: 50%;
}
/* ==========================================================================
20. Testimonial Card
========================================================================== */
.rx-testimonial-card__quote {
position: relative;
margin: 0;
color: var(--rx-card-text);
font-size: 1rem;
font-style: italic;
line-height: 1.8;
}
.rx-testimonial-card__quote::before {
display: block;
margin-bottom: 0.5rem;
color: var(--rx-card-primary);
font-size: 3rem;
font-style: normal;
font-weight: 900;
line-height: 0.8;
content: "“";
}
.rx-testimonial-card__author {
display: flex;
gap: 0.75rem;
align-items: center;
margin-top: 1.25rem;
}
.rx-testimonial-card__avatar {
flex: 0 0 auto;
width: 3rem;
height: 3rem;
overflow: hidden;
border-radius: 50%;
background: var(--rx-card-bg-muted);
}
.rx-testimonial-card__avatar img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.rx-testimonial-card__name {
margin: 0;
color: var(--rx-card-text);
font-size: 0.98rem;
font-weight: 900;
line-height: 1.2;
}
.rx-testimonial-card__meta {
margin: 0.2rem 0 0;
color: var(--rx-card-text-muted);
font-size: 0.82rem;
line-height: 1.35;
}
/* ==========================================================================
21. Feature Card
========================================================================== */
.rx-feature-card {
isolation: isolate;
}
.rx-feature-card::before {
position: absolute;
z-index: -1;
inset: 0;
content: "";
opacity: 0;
background:
radial-gradient(circle at top right, rgb(20 184 166 / 0.16), transparent 36%),
radial-gradient(circle at bottom left, rgb(14 165 233 / 0.1), transparent 30%);
transition: opacity var(--rx-card-transition);
}
.rx-feature-card:hover::before {
opacity: 1;
}
.rx-feature-card__number {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.4rem;
height: 2.4rem;
margin-bottom: 1rem;
color: #ffffff;
font-size: 0.9rem;
font-weight: 900;
background: var(--rx-card-primary);
border-radius: 50%;
}
/* ==========================================================================
22. Stats Card
========================================================================== */
.rx-stats-card {
text-align: center;
}
.rx-stats-card__value {
display: block;
color: var(--rx-card-primary);
font-size: clamp(2rem, 1.4rem + 2vw, 3.25rem);
font-weight: 950;
line-height: 1;
}
.rx-stats-card__label {
display: block;
margin-top: 0.5rem;
color: var(--rx-card-text);
font-size: 1rem;
font-weight: 800;
line-height: 1.35;
}
.rx-stats-card__description {
margin: 0.65rem 0 0;
color: var(--rx-card-text-muted);
font-size: 0.9rem;
line-height: 1.6;
}
/* ==========================================================================
23. Widget Card
========================================================================== */
.rx-widget-card {
padding: var(--rx-card-padding-lg);
}
.rx-widget-card .rx-card__inner {
padding: 0;
}
.rx-widget-card__title {
display: flex;
gap: 0.6rem;
align-items: center;
margin: 0 0 1rem;
color: var(--rx-card-text);
font-size: 1rem;
font-weight: 900;
line-height: 1.25;
}
.rx-widget-card__title::before {
flex: 0 0 auto;
width: 0.35rem;
height: 1.2rem;
content: "";
background: var(--rx-card-primary);
border-radius: var(--rx-card-radius-pill);
}
.rx-widget-card ul {
margin: 0;
padding: 0;
list-style: none;
}
.rx-widget-card li + li {
margin-top: 0.75rem;
padding-top: 0.75rem;
border-top: 1px solid var(--rx-card-border);
}
.rx-widget-card a {
color: var(--rx-card-text);
font-weight: 700;
text-decoration: none;
}
.rx-widget-card a:hover,
.rx-widget-card a:focus-visible {
color: var(--rx-card-primary);
text-decoration: underline;
text-underline-offset: 0.16em;
}
/* ==========================================================================
24. Search Result Card
========================================================================== */
.rx-search-card mark {
color: inherit;
background: rgb(250 204 21 / 0.38);
border-radius: 0.2rem;
}
.rx-search-card__type {
display: inline-flex;
width: fit-content;
margin-bottom: 0.55rem;
padding: 0.2rem 0.5rem;
color: var(--rx-card-primary);
font-size: 0.72rem;
font-weight: 900;
background: var(--rx-card-primary-soft);
border-radius: var(--rx-card-radius-pill);
}
/* ==========================================================================
25. Related Post Card
========================================================================== */
.rx-related-card {
flex-direction: row;
gap: 0.9rem;
padding: 0.85rem;
}
.rx-related-card .rx-card__media {
flex: 0 0 6rem;
width: 6rem;
height: 5rem;
border-radius: var(--rx-card-radius-md);
aspect-ratio: auto;
}
.rx-related-card .rx-card__inner {
padding: 0;
}
.rx-related-card .rx-card__title {
display: -webkit-box;
overflow: hidden;
font-size: 0.98rem;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.rx-related-card .rx-card__meta {
margin-top: 0.45rem;
}
/* ==========================================================================
26. Content Clamp Helpers
========================================================================== */
.rx-card__clamp-1,
.rx-card__clamp-2,
.rx-card__clamp-3,
.rx-card__clamp-4 {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
}
.rx-card__clamp-1 {
-webkit-line-clamp: 1;
}
.rx-card__clamp-2 {
-webkit-line-clamp: 2;
}
.rx-card__clamp-3 {
-webkit-line-clamp: 3;
}
.rx-card__clamp-4 {
-webkit-line-clamp: 4;
}
/* ==========================================================================
27. Skeleton Loading Card
========================================================================== */
.rx-card--skeleton {
pointer-events: none;
}
.rx-skeleton {
position: relative;
overflow: hidden;
color: transparent;
background: var(--rx-card-bg-muted);
border-radius: var(--rx-card-radius-sm);
}
.rx-skeleton::after {
position: absolute;
inset: 0;
content: "";
background: linear-gradient(
90deg,
transparent,
rgb(255 255 255 / 0.6),
transparent
);
transform: translateX(-100%);
animation: rx-card-skeleton 1.4s infinite;
}
.rx-skeleton--title {
width: 75%;
height: 1.25rem;
}
.rx-skeleton--text {
width: 100%;
height: 0.9rem;
margin-top: 0.65rem;
}
.rx-skeleton--text-short {
width: 58%;
height: 0.9rem;
margin-top: 0.65rem;
}
.rx-skeleton--avatar {
width: 3rem;
height: 3rem;
border-radius: 50%;
}
@keyframes rx-card-skeleton {
100% {
transform: translateX(100%);
}
}
/* ==========================================================================
28. Empty State Card
========================================================================== */
.rx-empty-card {
align-items: center;
justify-content: center;
min-height: 18rem;
padding: var(--rx-card-padding-xl);
text-align: center;
background:
radial-gradient(circle at center, rgb(15 118 110 / 0.08), transparent 36%),
var(--rx-card-bg);
}
.rx-empty-card__icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 4rem;
height: 4rem;
margin-bottom: 1rem;
color: var(--rx-card-primary);
background: var(--rx-card-primary-soft);
border-radius: 50%;
}
.rx-empty-card__title {
margin: 0;
color: var(--rx-card-text);
font-size: 1.25rem;
font-weight: 900;
}
.rx-empty-card__text {
max-width: 34rem;
margin: 0.6rem auto 0;
color: var(--rx-card-text-muted);
font-size: 0.96rem;
line-height: 1.7;
}
/* ==========================================================================
29. Card Groups
========================================================================== */
.rx-card-group {
display: flex;
flex-direction: column;
}
.rx-card-group .rx-card {
border-radius: 0;
}
.rx-card-group .rx-card:first-child {
border-top-left-radius: var(--rx-card-radius-lg);
border-top-right-radius: var(--rx-card-radius-lg);
}
.rx-card-group .rx-card:last-child {
border-bottom-right-radius: var(--rx-card-radius-lg);
border-bottom-left-radius: var(--rx-card-radius-lg);
}
.rx-card-group .rx-card + .rx-card {
margin-top: -1px;
}
.rx-card-group .rx-card:hover,
.rx-card-group .rx-card:focus-within {
z-index: 2;
}
/* ==========================================================================
30. Overlay Card
========================================================================== */
.rx-overlay-card {
justify-content: flex-end;
min-height: 24rem;
color: #ffffff;
background: #0f172a;
}
.rx-overlay-card .rx-card__media {
position: absolute;
inset: 0;
height: 100%;
aspect-ratio: auto;
}
.rx-overlay-card .rx-card__media::after {
position: absolute;
inset: 0;
content: "";
background:
linear-gradient(to top, rgb(15 23 42 / 0.88), rgb(15 23 42 / 0.38), transparent),
linear-gradient(to right, rgb(15 23 42 / 0.35), transparent);
}
.rx-overlay-card .rx-card__inner {
position: relative;
z-index: 2;
justify-content: flex-end;
color: inherit;
}
.rx-overlay-card .rx-card__title,
.rx-overlay-card .rx-card__subtitle,
.rx-overlay-card .rx-card__text,
.rx-overlay-card .rx-card__excerpt,
.rx-overlay-card .rx-card__meta,
.rx-overlay-card .rx-card__eyebrow {
color: inherit;
}
.rx-overlay-card .rx-card__footer {
border-color: rgb(255 255 255 / 0.2);
}
/* ==========================================================================
31. Minimal Card
========================================================================== */
.rx-minimal-card {
background: transparent;
border-color: transparent;
box-shadow: none;
}
.rx-minimal-card:hover {
background: var(--rx-card-bg-soft);
border-color: var(--rx-card-border);
box-shadow: none;
}
/* ==========================================================================
32. Timeline Card
========================================================================== */
.rx-timeline-card {
overflow: visible;
margin-left: 1.5rem;
}
.rx-timeline-card::before {
position: absolute;
top: 1.5rem;
left: -1.5rem;
width: 0.85rem;
height: 0.85rem;
content: "";
background: var(--rx-card-primary);
border: 3px solid var(--rx-card-bg);
border-radius: 50%;
box-shadow: 0 0 0 3px var(--rx-card-primary-soft);
}
.rx-timeline-card::after {
position: absolute;
top: 2.35rem;
bottom: -1.5rem;
left: -1.1rem;
width: 1px;
content: "";
background: var(--rx-card-border);
}
.rx-timeline-card:last-child::after {
display: none;
}
/* ==========================================================================
33. Accordion-like Card
========================================================================== */
.rx-card details {
display: block;
}
.rx-card summary {
cursor: pointer;
}
.rx-card summary::marker {
color: var(--rx-card-primary);
}
.rx-card__summary {
display: flex;
gap: 0.75rem;
align-items: center;
justify-content: space-between;
padding: var(--rx-card-padding-md);
font-weight: 900;
}
.rx-card__summary::-webkit-details-marker {
display: none;
}
.rx-card__summary::after {
flex: 0 0 auto;
width: 0.65rem;
height: 0.65rem;
content: "";
border-right: 2px solid currentColor;
border-bottom: 2px solid currentColor;
transform: rotate(45deg);
transition: transform var(--rx-card-transition-fast);
}
details[open] > .rx-card__summary::after {
transform: rotate(-135deg);
}
.rx-card__details {
padding: 0 var(--rx-card-padding-md) var(--rx-card-padding-md);
color: var(--rx-card-text-muted);
line-height: 1.7;
}
/* ==========================================================================
34. Card Utility Modifiers
========================================================================== */
.rx-card--center {
align-items: center;
text-align: center;
}
.rx-card--start {
align-items: flex-start;
text-align: left;
}
.rx-card--end {
align-items: flex-end;
text-align: right;
}
.rx-card--full-height {
height: 100%;
}
.rx-card--overflow-visible {
overflow: visible;
}
.rx-card--no-overflow {
overflow: hidden;
}
.rx-card--no-border {
border: 0;
}
.rx-card--no-shadow {
box-shadow: none;
}
.rx-card--rounded-sm {
border-radius: var(--rx-card-radius-sm);
}
.rx-card--rounded-md {
border-radius: var(--rx-card-radius-md);
}
.rx-card--rounded-lg {
border-radius: var(--rx-card-radius-lg);
}
.rx-card--rounded-xl {
border-radius: var(--rx-card-radius-xl);
}
.rx-card--rounded-none {
border-radius: 0;
}
.rx-card--interactive {
cursor: pointer;
}
.rx-card--disabled {
pointer-events: none;
opacity: 0.58;
filter: grayscale(0.35);
}
/* ==========================================================================
35. WordPress Compatibility
========================================================================== */
.wp-block-group .rx-card,
.entry-content .rx-card,
.widget .rx-card {
margin-top: 0;
margin-bottom: 1.25rem;
}
.entry-content .rx-card p {
margin-top: 0;
}
.entry-content .rx-card p:last-child {
margin-bottom: 0;
}
.rx-card .wp-post-image {
display: block;
width: 100%;
height: auto;
}
.rx-card .avatar {
border-radius: 50%;
}
.rx-card .post-categories {
display: flex;
flex-wrap: wrap;
gap: 0.45rem;
margin: 0;
padding: 0;
list-style: none;
}
.rx-card .post-categories a {
display: inline-flex;
padding: 0.25rem 0.55rem;
color: var(--rx-card-primary);
font-size: 0.75rem;
font-weight: 800;
text-decoration: none;
background: var(--rx-card-primary-soft);
border-radius: var(--rx-card-radius-pill);
}
.rx-card .post-categories a:hover,
.rx-card .post-categories a:focus-visible {
color: #ffffff;
background: var(--rx-card-primary);
}
/* ==========================================================================
36. Accessibility
========================================================================== */
.rx-card a:focus-visible,
.rx-card button:focus-visible,
.rx-card [tabindex]:focus-visible {
outline: 3px solid var(--rx-card-primary);
outline-offset: 3px;
}
.rx-card [aria-disabled="true"] {
pointer-events: none;
opacity: 0.6;
}
.rx-card [hidden] {
display: none !important;
}
/* Better tap targets */
.rx-card a,
.rx-card button {
touch-action: manipulation;
}
/* ==========================================================================
37. RTL Support
========================================================================== */
[dir="rtl"] .rx-card__link:hover .rx-card__link-icon,
[dir="rtl"] .rx-card__link:focus-visible .rx-card__link-icon {
transform: translateX(-0.2rem);
}
[dir="rtl"] .rx-card__media-badge {
right: 0.85rem;
left: auto;
}
[dir="rtl"] .rx-card__media-badge--right {
right: auto;
left: 0.85rem;
}
[dir="rtl"] .rx-widget-card__title::before {
order: 2;
}
[dir="rtl"] .rx-timeline-card {
margin-right: 1.5rem;
margin-left: 0;
}
[dir="rtl"] .rx-timeline-card::before {
right: -1.5rem;
left: auto;
}
[dir="rtl"] .rx-timeline-card::after {
right: -1.1rem;
left: auto;
}
/* ==========================================================================
38. Dark Mode
========================================================================== */
@media (prefers-color-scheme: dark) {
:root {
--rx-card-bg: var(--rx-color-surface-dark, #0f172a);
--rx-card-bg-soft: var(--rx-color-surface-soft-dark, #111827);
--rx-card-bg-muted: var(--rx-color-muted-dark, #1e293b);
--rx-card-text: var(--rx-color-text-dark, #f8fafc);
--rx-card-text-muted: var(--rx-color-text-muted-dark, #cbd5e1);
--rx-card-border: var(--rx-color-border-dark, #334155);
--rx-card-border-strong: var(--rx-color-border-strong-dark, #475569);
--rx-card-primary-soft: rgb(20 184 166 / 0.18);
--rx-card-shadow-xs: 0 1px 2px rgb(0 0 0 / 0.22);
--rx-card-shadow-sm: 0 8px 22px rgb(0 0 0 / 0.28);
--rx-card-shadow-md: 0 16px 38px rgb(0 0 0 / 0.34);
--rx-card-shadow-lg: 0 24px 58px rgb(0 0 0 / 0.42);
}
.rx-card--glass {
background: rgb(15 23 42 / 0.72);
border-color: rgb(148 163 184 / 0.22);
}
.rx-card--primary,
.rx-card--success,
.rx-card--warning,
.rx-card--danger,
.rx-card--info {
background: var(--rx-card-bg);
}
.rx-profile-card__avatar,
.rx-profile-card__status {
border-color: var(--rx-card-bg);
}
.rx-skeleton::after {
background: linear-gradient(
90deg,
transparent,
rgb(255 255 255 / 0.12),
transparent
);
}
}
/* Manual dark mode class support */
.rx-theme-dark .rx-card,
[data-theme="dark"] .rx-card {
--rx-card-bg: var(--rx-color-surface-dark, #0f172a);
--rx-card-bg-soft: var(--rx-color-surface-soft-dark, #111827);
--rx-card-bg-muted: var(--rx-color-muted-dark, #1e293b);
--rx-card-text: var(--rx-color-text-dark, #f8fafc);
--rx-card-text-muted: var(--rx-color-text-muted-dark, #cbd5e1);
--rx-card-border: var(--rx-color-border-dark, #334155);
--rx-card-border-strong: var(--rx-color-border-strong-dark, #475569);
--rx-card-primary-soft: rgb(20 184 166 / 0.18);
}
/* ==========================================================================
39. Reduced Motion
========================================================================== */
@media (prefers-reduced-motion: reduce) {
.rx-card,
.rx-card *,
.rx-card *::before,
.rx-card *::after {
animation-duration: 0.001ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
transition-duration: 0.001ms !important;
}
.rx-card:hover,
.rx-card--hover-lift:hover,
.rx-card--hover-lift-sm:hover,
.rx-card--hover-zoom:hover {
transform: none;
}
.rx-card:hover .rx-card__media img,
.rx-card:hover .rx-card__media video {
transform: none;
}
}
/* ==========================================================================
40. High Contrast / Forced Colors
========================================================================== */
@media (forced-colors: active) {
.rx-card {
border: 1px solid CanvasText;
box-shadow: none;
}
.rx-card__button,
.rx-card__badge,
.rx-card__full-link:focus-visible {
border: 1px solid CanvasText;
}
.rx-card__button {
color: ButtonText;
background: ButtonFace;
}
}
/* ==========================================================================
41. Print Support
========================================================================== */
@media print {
.rx-card {
break-inside: avoid;
color: #000000;
background: #ffffff;
border: 1px solid #cccccc;
box-shadow: none;
}
.rx-card__media,
.rx-card__button,
.rx-card__full-link,
.rx-profile-card__social {
display: none !important;
}
.rx-card__inner {
padding: 1rem;
}
.rx-card__title,
.rx-card__text,
.rx-card__excerpt,
.rx-card__meta {
color: #000000;
}
}
/* ==========================================================================
42. Container Query Enhancement
========================================================================== */
@supports (container-type: inline-size) {
.rx-card {
container-type: inline-size;
}
@container (max-width: 320px) {
.rx-card__inner {
padding: var(--rx-card-padding-sm);
}
.rx-card__title {
font-size: 1rem;
}
.rx-card__footer {
flex-direction: column;
align-items: flex-start;
}
.rx-medical-card__stats {
grid-template-columns: 1fr;
}
}
@container (min-width: 560px) {
.rx-card--auto-horizontal {
display: grid;
grid-template-columns: minmax(12rem, 34%) minmax(0, 1fr);
}
.rx-card--auto-horizontal .rx-card__media {
height: 100%;
aspect-ratio: auto;
}
}
}
/* ==========================================================================
43. Example HTML Classes Supported
========================================================================== */
/*
Basic card:
<article class="rx-card rx-post-card rx-card--hover-lift">
<a class="rx-card__media" href="#">
<img src="image.jpg" alt="">
</a>
<div class="rx-card__inner">
<header class="rx-card__header">
<a class="rx-post-card__category" href="#">Orthopedics</a>
<h2 class="rx-card__title">
<a href="#">Back Pain Treatment Guide</a>
</h2>
<div class="rx-card__meta">
<span class="rx-card__meta-item">By Dr. Harun</span>
<span class="rx-card__meta-item">5 min read</span>
</div>
</header>
<div class="rx-card__body">
<p class="rx-card__excerpt rx-card__clamp-3">
Simple evidence-based explanation for patients.
</p>
</div>
<footer class="rx-card__footer">
<a class="rx-card__link" href="#">Read more</a>
</footer>
</div>
</article>
*/
Also make sure this file is loaded from your theme enqueue file, for example:
wp_enqueue_style(
'rx-theme-cards',
get_template_directory_uri() . '/assets/static/static-css/components/cards.css',
array(),
wp_get_theme()->get('Version')
);
Best folder placement:
rx-theme/
└── assets/
└── static/
└── static-css/
└── components/
└── cards.css