:root { --char-max: 200; } /* Base */ * { box-sizing: border-box; } html, body { height: 100%; } body { font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"; } /* Buttons with ripple */ .ripple-button { position: relative; isolation: isolate; } .ripple-button .ripple { position: absolute; inset: 0; background: radial-gradient(circle at var(--x, 50%) var(--y, 50%), rgba(255,255,255,0.65) 0%, rgba(255,255,255,0.45) 15%, rgba(255,255,255,0.15) 35%, transparent 55%); transform: scale(0); opacity: 0; transition: transform .6s ease, opacity .8s ease; pointer-events: none; mix-blend-mode: overlay; } .ripple-button:active .ripple { transform: scale(2.2); opacity: 1; } /* Magnetic effect */ .magnetic-button { transition: transform .2s ease; } /* 3D Tilt Card */ .tilt-card { transform-style: preserve-3d; perspective: 800px; transition: transform .2s ease, box-shadow .2s ease; } .tilt-card::after { content: ""; position: absolute; inset: 0; background: radial-gradient(600px 200px at var(--mx, 50%) var(--my, 50%), rgba(2,6,23,0.08), transparent 60%); opacity: 0; transition: opacity .25s ease; pointer-events: none; } .tilt-card:hover::after { opacity: 1; } /* Activity ring */ .ring-progress { --progress: 0; background: conic-gradient(slate 0 calc(var(--progress) * 3.6deg), #e2e8f0 0); transition: background .25s ease; } .ring-progress::before { content: ""; position: absolute; inset: -4px; border-radius: 50%; background: conic-gradient(from -90deg, rgba(148,163,184,0.45), rgba(148,163,184,0.15) 30%, transparent 60%); filter: blur(6px); z-index: -1; } /* Animated form labels */ .animated-label { position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: #64748b; /* slate-500 */ pointer-events: none; transition: all .2s ease; background: transparent; padding: 0 .25rem; } .animated-label:has(+ input:focus), .animated-label:has(+ textarea:focus), .animated-label:has(+ input:not(:placeholder-shown)), .animated-label:has(+ textarea:not(:placeholder-shown)) { top: 0.25rem; transform: none; font-size: 0.75rem; color: #0f172a; /* slate-900 */ background: white; } /* Hide default spinner on number-like inputs */ input[type="text"]::-webkit-outer-spin-button, input[type="text"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }