init project files

This commit is contained in:
!verity
2026-03-16 21:25:53 +01:00
commit 2045808f00
40 changed files with 3436 additions and 0 deletions

24
styles/_animations.scss Normal file
View File

@@ -0,0 +1,24 @@
@keyframes marquee-left {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
@keyframes marquee-right {
from { transform: translateX(-50%); }
to { transform: translateX(0); }
}
@keyframes pulse-dot {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.5; transform: scale(0.85); }
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-12px); }
}
@keyframes shimmer {
from { background-position: -200% 0; }
to { background-position: 200% 0; }
}

61
styles/_mixins.scss Normal file
View File

@@ -0,0 +1,61 @@
@use 'variables' as *;
// Responsive helper
@mixin respond($bp) {
@if $bp == sm { @media (max-width: #{$bp-sm}) { @content; } }
@if $bp == md { @media (max-width: #{$bp-md}) { @content; } }
@if $bp == lg { @media (max-width: #{$bp-lg}) { @content; } }
@if $bp == xl { @media (max-width: #{$bp-xl}) { @content; } }
}
// Accent underline on links / headings
@mixin accent-underline($height: 2px) {
position: relative;
&::after {
content: '';
position: absolute;
bottom: -3px; left: 0;
width: 100%; height: $height;
background: var(--accent);
transform: scaleX(0);
transform-origin: left;
transition: transform 0.3s ease;
border-radius: 999px;
}
&:hover::after, &.active::after { transform: scaleX(1); }
}
// Frosted glass (dark)
@mixin glass($alpha: 0.9) {
background: rgba(26, 29, 33, $alpha);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
// Container
@mixin container {
width: 100%;
max-width: 1100px;
margin-inline: auto;
padding-inline: clamp(1rem, 5vw, 2.5rem);
}
// Section spacing (responsive)
@mixin section {
padding-block: clamp(3rem, 8vw, 6rem);
}
// Flex center
@mixin flex-center {
display: flex;
align-items: center;
justify-content: center;
}
// Card base
@mixin card {
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
transition: border-color var(--transition), transform var(--transition);
}

9
styles/_typography.scss Normal file
View File

@@ -0,0 +1,9 @@
@use 'variables' as *;
// Global typography defaults — headings can be extended in components
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-display, $font-display);
font-weight: 600;
line-height: 1.2;
color: var(--text);
}

24
styles/_variables.scss Normal file
View File

@@ -0,0 +1,24 @@
// ─── Colors (Dark Theme) ──────────────────────────────────
$color-bg: #1a1d21;
$color-bg-2: #212529;
$color-bg-3: #262a2f;
$color-border: #343a40;
$color-border-light: #495057;
$color-text: #f8f9fa;
$color-text-2: #dee2e6;
$color-text-3: #adb5bd;
$color-accent: #22d3ee;
$color-accent-dark: #06b6d4;
$color-accent-alpha: rgba(34, 211, 238, 0.15);
// ─── Typography ────────────────────────────────────────────
$font-display: 'Syne', sans-serif;
$font-body: 'DM Sans', sans-serif;
$font-mono: 'JetBrains Mono', monospace;
// ─── Breakpoints ───────────────────────────────────────────
$bp-sm: 640px;
$bp-md: 768px;
$bp-lg: 1024px;
$bp-xl: 1280px;
$bp-2xl: 1536px;

69
styles/globals.scss Normal file
View File

@@ -0,0 +1,69 @@
@use 'variables' as v;
@use 'mixins';
@use 'typography';
@use 'animations';
:root {
--bg: #{v.$color-bg};
--bg-2: #{v.$color-bg-2};
--bg-3: #{v.$color-bg-3};
--border: #{v.$color-border};
--border-light: #{v.$color-border-light};
--text: #{v.$color-text};
--text-2: #{v.$color-text-2};
--text-3: #{v.$color-text-3};
--accent: #{v.$color-accent};
--accent-dark: #{v.$color-accent-dark};
--accent-alpha: #{v.$color-accent-alpha};
--radius: 8px;
--radius-lg: 14px;
--transition: 0.25s ease;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html {
scroll-behavior: smooth;
font-size: clamp(15px, 2vw, 16px);
overflow-x: hidden;
}
body {
font-family: var(--font-body, 'DM Sans', sans-serif);
background: var(--bg);
color: var(--text);
line-height: 1.7;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
min-width: 0;
}
::selection {
background: var(--accent-alpha);
color: var(--accent-dark);
}
a { color: inherit; text-decoration: none; }
img, video { max-width: 100%; display: block; }
button { cursor: pointer; font: inherit; }
.skipLink {
position: absolute;
top: -100px;
left: 0.5rem;
z-index: 9999;
padding: 0.5rem 1rem;
background: var(--accent);
color: #fff;
font-size: 0.875rem;
font-weight: 500;
border-radius: var(--radius);
transition: top 0.2s ease;
}
.skipLink:focus {
top: 0.5rem;
outline: 2px solid var(--text);
outline-offset: 2px;
}