Skip to content

Commit b28d194

Browse files
committed
feat: add gradient hover/shine/outline/aura card variants
1 parent 97f5eed commit b28d194

3 files changed

Lines changed: 181 additions & 2 deletions

File tree

css/_cards.css

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,3 +458,182 @@
458458
border-color: rgba(0,0,0,0.09);
459459
--_glow-color: rgba(100,140,255,0.12);
460460
}
461+
462+
/* ============================================================
463+
GRADIENT EFFECT CARDS — hover/shine/outline/aura
464+
Pattern: .card-gradient-hover .card-gradient-hover-{color}
465+
============================================================ */
466+
467+
/* ── Gradient Hover — gradient washes in on hover ── */
468+
.card-gradient-hover {
469+
position: relative;
470+
border-radius: var(--radius-lg);
471+
border: 1px solid color-mix(in srgb, var(--card-gc1, var(--color-primary)) 20%, transparent);
472+
background: var(--bg-secondary);
473+
overflow: hidden;
474+
transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
475+
}
476+
.card-gradient-hover::before {
477+
content: "";
478+
position: absolute;
479+
inset: 0;
480+
background: linear-gradient(135deg, var(--card-gc1, var(--color-primary)), var(--card-gc2, var(--color-accent)));
481+
opacity: 0;
482+
transition: opacity 0.35s ease;
483+
z-index: 0;
484+
}
485+
.card-gradient-hover > * { position: relative; z-index: 1; }
486+
.card-gradient-hover:hover::before { opacity: 0.13; }
487+
.card-gradient-hover:hover {
488+
transform: translateY(-6px);
489+
border-color: color-mix(in srgb, var(--card-gc1, var(--color-primary)) 55%, transparent);
490+
box-shadow: 0 14px 40px color-mix(in srgb, var(--card-gc1, var(--color-primary)) 22%, transparent);
491+
}
492+
493+
.card-gradient-hover-primary {
494+
--card-gc1: var(--color-primary);
495+
--card-gc2: color-mix(in oklch, var(--color-primary) 65%, #fff);
496+
}
497+
.card-gradient-hover-accent {
498+
--card-gc1: var(--color-accent);
499+
--card-gc2: var(--color-primary);
500+
}
501+
.card-gradient-hover-success {
502+
--card-gc1: var(--color-success);
503+
--card-gc2: var(--color-primary);
504+
}
505+
.card-gradient-hover-error {
506+
--card-gc1: var(--color-error);
507+
--card-gc2: var(--color-accent);
508+
}
509+
.card-gradient-hover-fire {
510+
--card-gc1: var(--color-error);
511+
--card-gc2: var(--color-warning);
512+
}
513+
.card-gradient-hover-ocean {
514+
--card-gc1: var(--color-primary);
515+
--card-gc2: var(--color-accent);
516+
}
517+
.card-gradient-hover-sunset {
518+
--card-gc1: #ff6b35;
519+
--card-gc2: #ff2d7c;
520+
}
521+
.card-gradient-hover-aurora {
522+
--card-gc1: #00c6ff;
523+
--card-gc2: #a855f7;
524+
}
525+
526+
/* ── Shine Cards — gradient + sweep animation ── */
527+
.card-shine {
528+
position: relative;
529+
border-radius: var(--radius-lg);
530+
background: linear-gradient(to right, var(--card-gc1, var(--color-primary)), var(--card-gc2, var(--color-accent)));
531+
border: none;
532+
overflow: hidden;
533+
color: #fff;
534+
transition: transform 0.3s ease, box-shadow 0.3s ease, filter 0.3s ease;
535+
}
536+
.card-shine::after {
537+
content: "";
538+
position: absolute;
539+
top: -50%; left: -75%;
540+
width: 50%; height: 200%;
541+
background: linear-gradient(120deg, transparent 0%, color-mix(in srgb, #fff 22%, transparent) 50%, transparent 100%);
542+
transform: skewX(-20deg);
543+
animation: shineSweep 4.5s ease-in-out infinite;
544+
}
545+
.card-shine:hover {
546+
transform: translateY(-5px) scale(1.01);
547+
box-shadow: 0 16px 40px color-mix(in srgb, var(--card-gc1, var(--color-primary)) 32%, transparent);
548+
filter: brightness(1.1) saturate(1.1);
549+
}
550+
551+
.card-shine-primary { --card-gc1: var(--color-primary); --card-gc2: color-mix(in oklch, var(--color-primary) 65%, #fff); }
552+
.card-shine-accent { --card-gc1: var(--color-accent); --card-gc2: var(--color-primary); }
553+
.card-shine-fire { --card-gc1: var(--color-error); --card-gc2: var(--color-warning); }
554+
.card-shine-ocean { --card-gc1: var(--color-primary); --card-gc2: var(--color-accent); }
555+
.card-shine-sunset { --card-gc1: #ff6b35; --card-gc2: #ff2d7c; }
556+
.card-shine-aurora { --card-gc1: #00c6ff; --card-gc2: #a855f7; }
557+
.card-shine-cosmic { --card-gc1: #7c3aed; --card-gc2: #c026d3; }
558+
559+
/* ── Outline Gradient Cards — animated gradient border ── */
560+
.card-outline-gradient {
561+
position: relative;
562+
border-radius: var(--radius-lg);
563+
background: var(--bg-secondary);
564+
border: none;
565+
transition: transform 0.3s ease, box-shadow 0.3s ease;
566+
}
567+
.card-outline-gradient::before {
568+
content: "";
569+
position: absolute;
570+
inset: 0;
571+
border-radius: inherit;
572+
padding: 2px;
573+
background: linear-gradient(135deg, var(--card-og1, var(--color-primary)), var(--card-og2, var(--color-accent)), var(--card-og1, var(--color-primary)));
574+
background-size: 200% 200%;
575+
animation: shineShift 3.5s ease infinite;
576+
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
577+
-webkit-mask-composite: destination-out;
578+
mask-composite: exclude;
579+
}
580+
.card-outline-gradient:hover {
581+
transform: translateY(-5px);
582+
box-shadow: 0 14px 36px color-mix(in srgb, var(--card-og1, var(--color-primary)) 20%, transparent);
583+
}
584+
585+
.card-outline-gradient-primary { --card-og1: var(--color-primary); --card-og2: color-mix(in oklch, var(--color-primary) 65%, #fff); }
586+
.card-outline-gradient-accent { --card-og1: var(--color-accent); --card-og2: var(--color-primary); }
587+
.card-outline-gradient-fire { --card-og1: var(--color-error); --card-og2: var(--color-warning); }
588+
.card-outline-gradient-ocean { --card-og1: var(--color-primary); --card-og2: var(--color-accent); }
589+
.card-outline-gradient-sunset { --card-og1: #ff6b35; --card-og2: #ff2d7c; }
590+
.card-outline-gradient-aurora { --card-og1: #00c6ff; --card-og2: #a855f7; }
591+
.card-outline-gradient-cosmic { --card-og1: #7c3aed; --card-og2: #c026d3; }
592+
593+
/* ── Aura Cards — glow halo blooms on hover ── */
594+
.card-aura {
595+
position: relative;
596+
border: none;
597+
border-radius: var(--radius-lg);
598+
background: var(--card-aura-bg, var(--bg-secondary));
599+
z-index: 1;
600+
transition: transform 0.35s ease, filter 0.35s ease;
601+
}
602+
.card-aura::before {
603+
content: "";
604+
position: absolute;
605+
inset: -10px;
606+
border-radius: calc(var(--radius-lg) + 10px);
607+
background: var(--card-aura-glow, linear-gradient(135deg, var(--color-primary), var(--color-accent)));
608+
filter: blur(20px);
609+
opacity: 0;
610+
z-index: -1;
611+
transition: opacity 0.4s ease;
612+
}
613+
.card-aura:hover::before { opacity: 0.65; }
614+
.card-aura:hover { transform: translateY(-6px); filter: brightness(1.06); }
615+
616+
.card-aura-primary {
617+
--card-aura-bg: var(--bg-secondary);
618+
--card-aura-glow: linear-gradient(135deg, var(--color-primary), var(--color-accent));
619+
}
620+
.card-aura-sunset {
621+
--card-aura-bg: linear-gradient(160deg, #1a0800, #2a0e00);
622+
--card-aura-glow: linear-gradient(135deg, #ff6b35, #ff2d7c);
623+
}
624+
.card-aura-aurora {
625+
--card-aura-bg: linear-gradient(160deg, #000d1a, #0a1626);
626+
--card-aura-glow: linear-gradient(135deg, #00c6ff, #a855f7);
627+
}
628+
.card-aura-cosmic {
629+
--card-aura-bg: linear-gradient(160deg, #0d0014, #160024);
630+
--card-aura-glow: linear-gradient(135deg, #7c3aed, #c026d3);
631+
}
632+
.card-aura-gold {
633+
--card-aura-bg: linear-gradient(160deg, #110e00, #1e1800);
634+
--card-aura-glow: linear-gradient(135deg, #f59e0b, #fbbf24);
635+
}
636+
.card-aura-ocean {
637+
--card-aura-bg: linear-gradient(160deg, #00101a, #001c2e);
638+
--card-aura-glow: linear-gradient(135deg, var(--color-primary), var(--color-accent));
639+
}

css/style.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/css/style.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)