Files
website/src/app.css
2025-06-03 14:40:02 -04:00

430 lines
13 KiB
CSS

@import 'tailwindcss';
@import './styles/typography.css';
@custom-variant dark (&:where(.dark, .dark *));
@theme {
/* Colors */
--color-*: initial;
/* base */
--color-black: #000;
--color-white: #fff;
--color-transparent: transparent;
/* theme */
--color-primary: var(--color-primary);
--color-secondary: var(--color-secondary);
--color-accent: var(--color-secondary);
--color-smooth: var(--color-smooth);
--color-subtle: var(--color-subtle);
--color-tertiary: var(--color-tertiary);
--color-card: var(--color-card);
/* pink */
--color-pink-200: hsl(var(--color-pink-hue) 98% 84%);
--color-pink-500: hsl(var(--color-pink-hue) 98% 60%);
--color-pink-600: hsl(var(--color-pink-hue) 65% 48%);
--color-pink-700: hsl(var(--color-pink-hue) 65% 36%);
/* red */
--color-red-200: hsl(calc(var(--color-red-hue) - 2) 100% 92%);
--color-red-500: hsl(var(--color-red-hue) 100% 61%);
--color-red-700: hsl(calc(var(--color-red-hue) - 3) 82% 39%);
/* orange */
--color-orange-200: hsl(var(--color-orange-hue) 100% 88%);
--color-orange-500: hsl(var(--color-orange-hue) 99% 70%);
--color-orange-700: hsl(var(--color-orange-hue) 42% 42%);
/* mint */
--color-mint-200: hsl(var(--color-mint-hue) 56% 88%);
--color-mint-500: hsl(calc(var(--color-mint-hue) + 1) 54% 69%);
--color-mint-700: hsl(calc(var(--color-mint-hue) + 2) 24% 41%);
/* purple */
--color-purple-200: hsl(var(--color-purple-hue) 100% 88%);
--color-purple-500: hsl(calc(var(--color-purple-hue) - 1) 99% 70%);
--color-purple-700: hsl(calc(var(--color-purple-hue) - 1) 42% 42%);
/* yellow */
--color-yellow-200: hsl(var(--color-yellow-hue) 100% 88%);
--color-yellow-500: hsl(var(--color-yellow-hue) 99% 70%);
--color-yellow-700: hsl(calc(var(--color-yellow-hue) + 1) 42% 42%);
/* blue */
--color-blue-200: hsl(var(--color-blue-hue) 100% 88%);
--color-blue-500: hsl(calc(var(--color-blue-hue) - 1) 99% 70%);
--color-blue-700: hsl(calc(var(--color-blue-hue) - 1) 42% 42%);
/* green */
--color-green-700: #0a714f;
/* secondary */
--color-secondary-100: hsl(var(--color-secondary-hue) 99% 66%);
--color-accent-200: hsl(var(--color-secondary-hue) 78% 60% / 0.32);
/* greyscale */
--color-offset: hsl(var(--color-greyscale-hue) 2% 11% / 0.94);
--color-greyscale-25: hsl(var(--color-greyscale-hue) 11% 98%);
--color-greyscale-50: hsl(var(--color-greyscale-hue) 11% 94%);
--color-greyscale-100: hsl(var(--color-greyscale-hue) 6% 90%);
--color-greyscale-200: hsl(var(--color-greyscale-hue) 4% 85%);
--color-greyscale-250: hsl(var(--color-greyscale-hue) 3% 77%);
--color-greyscale-300: hsl(var(--color-greyscale-hue) 2% 68%);
--color-greyscale-400: hsl(var(--color-greyscale-hue) 2% 60%);
--color-greyscale-500: hsl(var(--color-greyscale-hue) 2% 52%);
--color-greyscale-600: hsl(var(--color-greyscale-hue) 2% 43%);
--color-greyscale-700: hsl(var(--color-greyscale-hue) 3% 35%);
--color-greyscale-750: hsl(var(--color-greyscale-hue) 4% 26%);
--color-greyscale-800: hsl(var(--color-greyscale-hue) 4% 18%);
--color-greyscale-850: hsl(var(--color-greyscale-hue) 3% 14%);
--color-greyscale-900: hsl(var(--color-greyscale-hue) 5.7% 10.4%);
/* Easings */
--easing-bounce: linear(0, 0.063, 0.25 18.2%, 1 36.4%, 0.813, 0.75, 0.813, 1, 0.938, 1, 1);
--easing-spring: linear(0, 0.938 16.7%, 1.149 24.3%, 1.154 29.9%, 0.977 51%, 1);
/* Animations */
--animate-scale-in: scale-in 200ms ease-out forwards;
--animate-scale-out: scale-out 200ms ease-out forwards;
--animate-caret-blink: caret-blink 1s ease-in-out infinite;
--animate-enter:
fade-in 0.75s ease-in-out both, blur 0.75s ease-in-out both, up 0.75s ease-in-out both;
--animate-scroll: scroll 60s linear infinite;
--animate-scroll-x: scroll-x var(--speed, 30s) linear infinite var(--direction, forwards);
--animate-scroll-y: scroll-y 30s linear infinite forwards;
--animate-fade-in: fade-in 0.5s ease-in-out both;
--animate-fade-out: fade-out 0.5s ease-in-out both;
--animate-lighting: lighting 1.25s ease-out forwards;
--animate-menu-in: menu-in 0.25s ease-out forwards;
--animate-menu-out: menu-out 0.25s ease-out forwards;
--animate-enter-from-left: enter-from-left 0.2s ease;
--animate-enter-from-right: enter-from-right 0.2s ease;
--animate-exit-to-left: exit-to-left 0.2s ease;
--animate-exit-to-right: exit-to-right 0.2s ease;
--animate-wipe-in: wipe-in 2s ease-in-out;
/* Keyframes */
@keyframes scale-in {
0% {
transform: rotateX(-10deg) scale(0.9);
}
100% {
transform: rotateX(0) scale(1);
}
}
@keyframes scale-out {
0% {
transform: rotateX(0) scale(1);
}
100% {
transform: rotateX(-10deg) scale(0.9);
}
}
@keyframes caret-blink {
0%,
70%,
100% {
opacity: 1;
}
20%,
50% {
opacity: 0;
}
}
@keyframes blur {
0% {
filter: blur(5px);
}
100% {
filter: blur(0);
}
}
@keyframes up {
0% {
transform: translateY(36px);
}
100% {
transform: translateY(0px);
}
}
@keyframes fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes scroll-deprecate {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
@keyframes scroll-x {
to {
transform: translateX(-100%);
}
}
@keyframes scroll-y {
to {
transform: translateY(-100%);
}
}
@keyframes lighting {
0% {
opacity: 0;
clip-path: inset(5%);
transform: scale(111.11%);
}
100% {
opacity: 1;
clip-path: inset(0);
transform: scale(1);
}
}
@keyframes menu-in {
0% {
opacity: 0;
filter: blur(2px);
transform: translateY(8px);
}
100% {
opacity: 1;
filter: blur(0px);
transform: translateY(0px);
}
}
@keyframes menu-out {
0% {
opacity: 1;
filter: blur(0px);
transform: translateY(0px);
}
100% {
opacity: 0;
filter: blur(2px);
transform: translateY(8px);
}
}
@keyframes enter-from-right {
from {
opacity: 0;
transform: translateX(200px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes enter-from-left {
from {
opacity: 0;
transform: translateX(-200px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes exit-to-right {
from {
opacity: 1;
transform: translateX(0);
}
to {
opacity: 0;
transform: translateX(200px);
}
}
@keyframes exit-to-left {
from {
opacity: 1;
transform: translateX(0);
}
to {
opacity: 0;
transform: translateX(-200px);
}
}
@keyframes wipe-in {
0% {
clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
}
100% {
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
}
/* Fonts */
--font-sans: 'Inter', arial, sans-serif;
--font-mono: 'Fira Code', monospace;
--font-aeonik-fono: 'Aenoik Fono', monospace;
--font-aeonik-pro: 'Aeonik Pro', var(--font-sans);
--font-archia: 'Archia', arial, sans-serif;
/* Font sizes */
--text-x-micro: 0.625rem;
--text-x-micro--line-height: 0.875rem;
--text-x-micro--letter-spacing: var(--tracking-tighter);
--text-micro: 0.75rem;
--text-micro--line-height: 1rem;
--text-micro--letter-spacing: var(--tracking-tighter);
--text-caption: 0.875rem;
--text-caption--line-height: 1.375rem;
--text-caption--letter-spacing: var(--tracking-tight);
--text-sub-body: clamp(0.875rem, 2vw, 1rem);
--text-sub-body--line-height: 1.375rem;
--text-sub-body--letter-spacing: var(--tracking-tight);
--text-body: clamp(1rem, 2.5vw, 1.125rem);
--text-body--line-height: clamp(1.375rem, 3vw, 1.625rem);
--text-body--letter-spacing: var(--tracking-tight);
--text-paragraph-md: 1rem;
--text-paragraph-md--line-height: 1.625rem;
--text-paragraph-md--letter-spacing: var(--tracking-tight);
--text-paragraph-lg: 1.125rem;
--text-paragraph-lg--line-height: 1.75rem;
--text-paragraph-lg--letter-spacing: var(--tracking-tight);
--text-description: clamp(1.125rem, 3vw, 1.25rem);
--text-description--line-height: clamp(1.625rem, 3.5vw, 1.75rem);
--text-description--letter-spacing: var(--tracking-tighter);
--text-label: 1.5rem;
--text-label--line-height: 1.75rem;
--text-title: clamp(2rem, 5vw, 2.5rem);
--text-title--line-height: clamp(2.125rem, 5.5vw, 2.75rem);
--text-title--letter-spacing: var(--tracking-squeezed);
--text-title-lg: clamp(2.85rem, 5vw, 3rem);
--text-title-lg--line-height: clamp(2.75rem, 5.5vw, 3.5rem);
--text-title-lg--letter-spacing: var(--tracking-squeezed);
--text-display: clamp(3rem, 7vw, 4rem);
--text-display--line-height: clamp(3.125rem, 7.5vw, 4.25rem);
--text-display--letter-spacing: var(--tracking-compressed);
--text-hero: clamp(3.2rem, 7vw, 4.5rem);
--text-hero--line-height: clamp(3.125rem, 7.5vw, 4.25rem);
--text-hero--letter-spacing: var(--tracking-compressed);
--text-headline: clamp(3.5rem, 8vw, 5.5rem);
--text-headline--line-height: clamp(3.5rem, 8.5vw, 5.75rem);
--text-headline--letter-spacing: var(--tracking-compressed);
/* Letter spacing */
--tracking-*: initial;
--tracking-compressed: -0.022em;
--tracking-squeezed: -0.01em;
--tracking-tighter: -0.018em;
--tracking-tight: -0.0045em;
--tracking-none: 0em;
--tracking-loose: 0.08em;
}
@utility container {
max-width: 75rem;
margin-inline: auto;
padding-inline: 1.25rem;
}
@utility border-gradient {
--border-gradient-before: linear-gradient(
var(--to, 180deg),
rgba(255, 255, 255, 0.16) 0%,
rgba(255, 255, 255, 0) 100%
);
--border-gradient-after: linear-gradient(
var(--to, 180deg),
rgba(255, 255, 255, 0.12) 0%,
rgba(255, 255, 255, 0) 125.11%
);
--border-radius: 0.5rem;
&::before,
&::after {
content: '';
position: absolute;
inset: 0;
border-radius: var(--border-radius);
border: 1px solid transparent;
mask:
linear-gradient(#fff 0 0) padding-box,
linear-gradient(#fff 0 0);
mask-composite: exclude;
pointer-events: none;
}
&::before {
background: var(--border-gradient-before) border-box;
}
&::after {
background: var(--border-gradient-after) border-box;
}
}
:root,
.light {
/* pink polyfills */
--transition: 0.2s;
/* color hues */
--color-pink-hue: 343;
--color-secondary-hue: 351;
--color-red-hue: 3;
--color-orange-hue: 18;
--color-mint-hue: 177;
--color-purple-hue: 249;
--color-yellow-hue: 42;
--color-blue-hue: 217;
--color-greyscale-hue: 240;
--color-primary-bg: var(--color-greyscale-25);
/* base */
--color-primary: var(--color-greyscale-900);
--color-secondary: var(--color-greyscale-700);
--color-accent: var(--color-pink-500);
--carousel-gradient: transparent;
--color-badge-bg: var(--color-badge-bg-light);
--color-badge-border: var(--color-badge-border-light);
--color-smooth: hsl(var(--color-greyscale-hue) 6% 10% / 0.04);
--color-card: var(--color-greyscale-850);
--color-tertiary: hsl(var(--color-greyscale-600));
--color-offset: hsl(var(--color-greyscale-hue) 2% 11% / 0.94);
--color-subtle: var(--color-greyscale-850);
}
.dark {
--color-primary: var(--color-greyscale-100);
--color-secondary: var(--color-greyscale-300);
--carousel-gradient: 23, 23, 26;
--color-primary-bg: var(--color-greyscale-900);
--color-smooth: hsl(0 0% 100% / 0.06);
--color-tertiary: hsl(var(--color-greyscale-600));
--color-offset: hsl(0 0% 100% / 0.1);
}