UNPKG

refunjs

Version:

Modern React-based framework for building scalable web applications with enhanced developer experience

299 lines (263 loc) 5.4 kB
.error-container { min-height: 100dvh; display: flex; align-items: center; justify-content: center; background: var(--color-background); position: relative; overflow: hidden; padding: var(--spacing-2xl); } .particles { position: absolute; width: 100%; height: 100%; overflow: hidden; } .particle { position: absolute; background: rgba(255, 255, 255, 0.6); border-radius: 50%; animation: float-particle infinite ease-in-out; pointer-events: none; } @keyframes float-particle { 0%, 100% { transform: translateY(0) translateX(0) scale(1); opacity: 0.6; } 50% { transform: translateY(-30px) translateX(15px) scale(1.2); opacity: 0.8; } } .content { background: var(--color-surface); backdrop-filter: blur(10px); border-radius: var(--radius-xl); padding: var(--spacing-3xl) var(--spacing-2xl); max-width: 600px; width: 100%; box-shadow: var(--shadow-xl); text-align: center; position: relative; z-index: 1; animation: slide-up 0.6s ease-out; } @keyframes slide-up { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .icon-wrapper { position: relative; display: inline-block; margin-bottom: var(--spacing-2xl); } .icon-circle { width: 120px; height: 120px; border-radius: 50%; background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); display: flex; align-items: center; justify-content: center; position: relative; z-index: 2; } .pulse { animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } .icon-glow { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 140px; height: 140px; border-radius: 50%; background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); opacity: 0.3; filter: blur(20px); animation: glow 2s ease-in-out infinite; } @keyframes glow { 0%, 100% { opacity: 0.3; transform: translate(-50%, -50%) scale(1); } 50% { opacity: 0.5; transform: translate(-50%, -50%) scale(1.1); } } .icon { width: 60px; height: 60px; color: var(--color-surface); filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.1)); } .status-wrapper { margin-bottom: var(--spacing-md); } .status { font-size: 6rem; font-weight: var(--font-weight-bold); background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; line-height: 1; margin: 0; position: relative; } .glitch { animation: glitch 3s infinite; } @keyframes glitch { 0%, 90%, 100% { transform: translate(0); } 92% { transform: translate(-2px, 2px); } 94% { transform: translate(2px, -2px); } 96% { transform: translate(-2px, -2px); } 98% { transform: translate(2px, 2px); } } .status-text { font-size: 2.5rem; font-weight: var(--font-weight-semibold); color: var(--color-text-primary); margin: 0; } .message { font-size: 1.5rem; color: var(--color-text-secondary); margin: 0 0 var(--spacing-md) 0; font-weight: var(--font-weight-semibold); } .fade-in { animation: fade-in 0.6s ease-out 0.2s both; } .fade-in-delay { animation: fade-in 0.6s ease-out 0.4s both; } @keyframes fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .info { margin-bottom: var(--spacing-2xl); } .info-text { color: var(--color-text-muted); font-size: 1.125rem; margin: 0; } .actions { display: flex; gap: var(--spacing-md); justify-content: center; flex-wrap: wrap; animation: fade-in 0.6s ease-out 0.6s both; } .btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 1rem 2rem; border-radius: var(--radius-xl); font-size: 1.125rem; font-weight: var(--font-weight-semibold); text-decoration: none; border: none; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; } .btn::before { content: ""; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transform: translate(-50%, -50%); transition: width 0.6s, height 0.6s; } .btn:hover::before { width: 300px; height: 300px; } .btn > * { position: relative; z-index: 1; } .btn-primary { background: var(--color-primary); color: var(--color-surface); box-shadow: 0 4px 15px rgba(255, 107, 53, 0.4); } .btn-primary:hover { background: var(--color-primary-hover); transform: translateY(-2px); box-shadow: 0 6px 25px rgba(255, 107, 53, 0.6); } .btn-primary:active { transform: translateY(0); } .btn-secondary { background: var(--color-surface); color: var(--color-primary); border: 2px solid var(--color-primary); box-shadow: 0 4px 15px rgba(26, 26, 26, 0.1); } .btn-secondary:hover { background: var(--color-surface-hover); color: var(--color-primary-hover); transform: translateY(-2px); box-shadow: 0 6px 25px rgba(26, 26, 26, 0.15); } .btn-secondary:active { transform: translateY(0); } .btn-secondary:disabled { opacity: 0.7; cursor: not-allowed; }