mycostack-website/app/globals.css

250 lines
5.6 KiB
CSS

@import "tailwindcss";
@import "tw-animate-css";
@custom-variant dark (&:is(.dark *));
:root {
/* Scroll-driven dynamic colors (set by JS) */
--scroll-bg: oklch(0.20 0.03 140);
--scroll-fg: oklch(0.93 0.02 130);
--scroll-accent: oklch(0.58 0.12 145);
--scroll-depth: 0;
/* Static palette tokens */
--soil-black: oklch(0.08 0.02 30);
--earth-brown: oklch(0.12 0.04 40);
--compost-amber: oklch(0.55 0.15 45);
--forest-deep: oklch(0.16 0.05 150);
--mycelium-green: oklch(0.55 0.18 155);
--mycelium-glow: oklch(0.72 0.20 135);
--undernet-dark: oklch(0.26 0.03 230);
--undernet-teal: oklch(0.55 0.10 225);
--emergence-gold: oklch(0.60 0.16 90);
--canopy-light: oklch(0.94 0.02 110);
--mycopunk-orange: oklch(0.60 0.16 55);
--mycopunk-warm: oklch(0.50 0.13 40);
/* shadcn-compatible tokens */
--background: var(--scroll-bg);
--foreground: var(--scroll-fg);
--primary: var(--scroll-accent);
--primary-foreground: oklch(0.98 0.01 80);
--muted: oklch(0.20 0.02 30);
--muted-foreground: oklch(0.60 0.02 80);
--border: oklch(0.25 0.03 30);
--input: oklch(0.25 0.03 30);
--ring: var(--scroll-accent);
--radius: 0.5rem;
}
@theme inline {
--font-sans: var(--font-geist-sans), system-ui, sans-serif;
--font-serif: var(--font-crimson-pro), Georgia, serif;
--font-mono: var(--font-geist-mono), monospace;
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
--color-border: var(--border);
--color-input: var(--input);
--color-ring: var(--ring);
--color-soil-black: var(--soil-black);
--color-earth-brown: var(--earth-brown);
--color-compost-amber: var(--compost-amber);
--color-forest-deep: var(--forest-deep);
--color-mycelium-green: var(--mycelium-green);
--color-mycelium-glow: var(--mycelium-glow);
--color-undernet-dark: var(--undernet-dark);
--color-undernet-teal: var(--undernet-teal);
--color-emergence-gold: var(--emergence-gold);
--color-canopy-light: var(--canopy-light);
--color-mycopunk-orange: var(--mycopunk-orange);
--color-mycopunk-warm: var(--mycopunk-warm);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
background-color: var(--scroll-bg, oklch(0.08 0.02 30));
color: var(--scroll-fg, oklch(0.85 0.03 80));
transition: background-color 0.05s linear, color 0.05s linear;
overflow-x: hidden;
}
html {
scroll-behavior: smooth;
}
}
/* Section scroll-reveal */
.section-reveal {
opacity: 0;
transform: translateY(24px);
transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),
transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}
.section-reveal.visible {
opacity: 1;
transform: translateY(0);
}
/* Noise texture overlay */
.noise-overlay {
position: relative;
}
.noise-overlay::after {
content: "";
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
opacity: 0.03;
pointer-events: none;
mix-blend-mode: overlay;
z-index: 1;
}
/* Hero title emergence animation */
@keyframes emerge-letter {
from {
opacity: 0;
transform: translateY(24px);
filter: blur(6px);
}
to {
opacity: 1;
transform: translateY(0);
filter: blur(0);
}
}
.emerge-letter {
animation: emerge-letter 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
opacity: 0;
}
/* Scroll indicator pulse */
@keyframes scroll-hint {
0%,
100% {
opacity: 0.3;
transform: translateY(0);
}
50% {
opacity: 0.7;
transform: translateY(10px);
}
}
.scroll-hint {
animation: scroll-hint 2.5s ease-in-out infinite;
}
/* Mycelial divider between sections */
.mycelial-divider {
width: 2px;
height: 80px;
margin: 0 auto;
background: linear-gradient(
to bottom,
transparent,
var(--scroll-accent),
transparent
);
opacity: 0.35;
}
/* Anastomosis SVG line drawing */
.draw-line {
stroke-dasharray: 600;
stroke-dashoffset: 600;
}
.draw-line.animate {
animation: draw-path 2.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
@keyframes draw-path {
to {
stroke-dashoffset: 0;
}
}
/* Merge pulse */
@keyframes merge-pulse {
0%,
40% {
opacity: 0;
r: 0;
}
60% {
opacity: 1;
r: 10;
}
100% {
opacity: 0.7;
r: 7;
}
}
.merge-pulse {
animation: merge-pulse 3s cubic-bezier(0.16, 1, 0.3, 1) forwards;
animation-delay: 2s;
}
/* Network node hover glow */
.network-node {
transition: all 0.3s ease;
}
.network-node:hover {
filter: drop-shadow(0 0 12px var(--scroll-accent));
transform: scale(1.05);
}
/* Terminal cursor blink */
@keyframes blink {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.cursor-blink {
animation: blink 1s step-end infinite;
}
/* Card glass effect */
.glass-card {
background: oklch(0.5 0 0 / 0.12);
backdrop-filter: blur(8px);
border: 1px solid oklch(0.5 0 0 / 0.16);
border-radius: var(--radius-lg);
}
/* Link style for domain easter eggs */
a.domain-link {
text-decoration: underline;
text-decoration-style: dotted;
text-underline-offset: 3px;
transition: all 0.2s ease;
}
a.domain-link:hover {
text-decoration-style: solid;
color: var(--scroll-accent);
}