Spaces:
Running
Running
| @import "tailwindcss"; | |
| :root { | |
| --color-primary: #1e3a5f; | |
| --color-primary-light: #2d5a87; | |
| --color-accent: #fbbf24; | |
| --color-success: #059669; | |
| --color-warning: #d97706; | |
| --color-background: #f5f6f8; | |
| --color-surface: #ffffff; | |
| --color-text: #111827; | |
| --color-text-muted: #6b7280; | |
| --color-border: #e5e7eb; | |
| --glass-bg: #ffffff; | |
| --glass-border: #e5e7eb; | |
| color-scheme: light; | |
| } | |
| @theme inline { | |
| --color-background: var(--color-background); | |
| --color-foreground: var(--color-text); | |
| --font-sans: 'Inter', system-ui, sans-serif; | |
| --font-display: 'Lora', Georgia, serif; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| } | |
| html { | |
| scroll-behavior: smooth; | |
| } | |
| body { | |
| margin: 0; | |
| padding: 0; | |
| background: var(--color-background); | |
| color: var(--color-text); | |
| font-family: var(--font-sans); | |
| font-size: 16px; | |
| line-height: 1.6; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| /* Typography | |
| Wrapped in @layer base so Tailwind utility classes (e.g. font-sans), | |
| which Tailwind puts in @layer utilities, can actually override this — | |
| unlayered CSS always beats layered CSS regardless of specificity, so | |
| without this @layer wrapper a `font-sans` class on an <h3> had no effect | |
| at all against this rule. */ | |
| @layer base { | |
| h1, h2, h3, h4, h5, h6 { | |
| font-family: var(--font-display); | |
| font-weight: 600; | |
| line-height: 1.2; | |
| margin: 0; | |
| } | |
| } | |
| /* Custom scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: transparent; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: var(--color-border); | |
| border-radius: 3px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: var(--color-text-muted); | |
| } | |
| /* Button styles */ | |
| .btn { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 0.5rem; | |
| padding: 0.625rem 1.25rem; | |
| font-family: var(--font-sans); | |
| font-weight: 500; | |
| font-size: 0.875rem; | |
| border-radius: 8px; | |
| border: none; | |
| cursor: pointer; | |
| transition: all 0.15s ease; | |
| text-decoration: none; | |
| } | |
| .btn-primary { | |
| background: var(--color-primary); | |
| color: white; | |
| } | |
| .btn-primary:hover { | |
| background: var(--color-primary-light); | |
| } | |
| .btn-accent { | |
| background: var(--color-accent); | |
| color: #1a2332; | |
| font-weight: 600; | |
| } | |
| .btn-accent:hover { | |
| background: #f59e0b; | |
| } | |
| /* Sparkle particle (spawned programmatically on button click) */ | |
| @keyframes sparkle-fly { | |
| 0% { transform: translate(0, 0) scale(1); opacity: 1; } | |
| 100% { transform: translate(var(--dx), var(--dy)) scale(0); opacity: 0; } | |
| } | |
| .sparkle-particle { | |
| position: absolute; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| background: var(--color-accent, #fbbf24); | |
| box-shadow: 0 0 6px 1px rgba(251, 191, 36, 0.6); | |
| pointer-events: none; | |
| animation: sparkle-fly 0.75s ease-out forwards; | |
| z-index: 10; | |
| } | |
| .btn-outline { | |
| background: var(--color-surface); | |
| color: var(--color-text); | |
| border: 1px solid var(--color-border); | |
| } | |
| .btn-outline:hover { | |
| border-color: var(--color-primary); | |
| color: var(--color-primary); | |
| } | |
| /* Card styles */ | |
| .card { | |
| background: var(--color-surface); | |
| border: 1px solid var(--color-border); | |
| border-radius: 12px; | |
| box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05); | |
| } | |
| /* Input styles */ | |
| .input { | |
| width: 100%; | |
| padding: 0.75rem 1rem; | |
| font-family: var(--font-sans); | |
| font-size: 0.9375rem; | |
| color: var(--color-text); | |
| background: var(--color-surface); | |
| border: 1px solid var(--color-border); | |
| border-radius: 8px; | |
| outline: none; | |
| transition: border-color 0.15s ease, box-shadow 0.15s ease; | |
| } | |
| .input:focus { | |
| outline: none; | |
| border-color: var(--color-primary); | |
| box-shadow: 0 0 0 3px rgba(30, 58, 95, 0.14); | |
| } | |
| .input:-webkit-autofill { | |
| -webkit-box-shadow: 0 0 0px 1000px var(--color-surface) inset; | |
| -webkit-text-fill-color: var(--color-text); | |
| border: 1px solid var(--color-border); | |
| } | |
| .input:-webkit-autofill:focus { | |
| -webkit-box-shadow: 0 0 0px 1000px var(--color-surface) inset, 0 0 0 3px rgba(30, 58, 95, 0.14); | |
| -webkit-text-fill-color: var(--color-text); | |
| border: 1px solid var(--color-primary); | |
| } | |
| .input::placeholder { | |
| color: var(--color-text-muted); | |
| } | |
| /* Badge styles */ | |
| .badge { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.25rem; | |
| padding: 0.2rem 0.625rem; | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| border-radius: 9999px; | |
| } | |
| .badge-success { | |
| background: rgba(5, 150, 105, 0.1); | |
| color: var(--color-success); | |
| } | |
| .badge-warning { | |
| background: rgba(217, 119, 6, 0.1); | |
| color: var(--color-warning); | |
| } | |
| /* Candy-stripe progress bar */ | |
| @keyframes stripe-slide { | |
| 0% { background-position: 0 0; } | |
| 100% { background-position: 40px 0; } | |
| } | |
| @keyframes stripe-breathe { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.75; } | |
| } | |
| .progress-stripe { | |
| background: repeating-linear-gradient( | |
| -45deg, | |
| var(--color-primary) 0px, | |
| var(--color-primary) 14px, | |
| var(--color-primary-light) 14px, | |
| var(--color-primary-light) 28px | |
| ); | |
| background-size: 40px 40px; | |
| animation: | |
| stripe-slide 0.6s linear infinite, | |
| stripe-breathe 2s ease-in-out infinite; | |
| } | |
| /* Paper plane floating animation */ | |
| @keyframes plane-float { | |
| 0%, 100% { transform: translateY(0px) rotate(0deg); } | |
| 50% { transform: translateY(-14px) rotate(-2deg); } | |
| } | |
| .plane-float { animation: plane-float 3.2s ease-in-out infinite; } | |
| @keyframes arrow-nudge { | |
| 0%, 100% { transform: translateX(0); opacity: 0.85; } | |
| 50% { transform: translateX(-4px); opacity: 1; } | |
| } | |
| .arrow-nudge { animation: arrow-nudge 1.4s ease-in-out infinite; } | |
| /* Upload dropzone icon bounce — draws the eye to where a click is expected */ | |
| @keyframes upload-bounce { | |
| 0%, 100% { transform: translateY(0); } | |
| 50% { transform: translateY(-6px); } | |
| } | |
| .upload-bounce { animation: upload-bounce 1.8s ease-in-out infinite; } | |
| /* Coffee steam animation */ | |
| @keyframes steam-rise { | |
| 0% { transform: translateY(0) scaleX(1); opacity: 0.7; } | |
| 50% { transform: translateY(-8px) scaleX(1.2); opacity: 0.4; } | |
| 100% { transform: translateY(-16px) scaleX(0.8); opacity: 0; } | |
| } | |
| .steam-line { | |
| animation: steam-rise 1.6s ease-in-out infinite; | |
| transform-origin: bottom center; | |
| } | |
| .steam-line:nth-child(1) { animation-delay: 0s; } | |
| .steam-line:nth-child(2) { animation-delay: 0.4s; } | |
| .steam-line:nth-child(3) { animation-delay: 0.8s; } | |
| /* Animations */ | |
| @keyframes fadeInUp { | |
| from { | |
| opacity: 0; | |
| transform: translateY(16px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.5; } | |
| } | |
| .animate-fade-in-up { | |
| animation: fadeInUp 0.4s ease-out forwards; | |
| } | |
| .animate-pulse { | |
| animation: pulse 2s ease-in-out infinite; | |
| } | |
| .stagger-1 { animation-delay: 0.05s; } | |
| .stagger-2 { animation-delay: 0.1s; } | |
| .stagger-3 { animation-delay: 0.15s; } | |
| .stagger-4 { animation-delay: 0.2s; } | |
| .stagger-5 { animation-delay: 0.25s; } | |