mirror of
https://github.com/LukeHagar/website.git
synced 2025-12-09 12:57:48 +00:00
430 lines
13 KiB
CSS
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);
|
|
}
|