init project files
This commit is contained in:
24
styles/_animations.scss
Normal file
24
styles/_animations.scss
Normal 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
61
styles/_mixins.scss
Normal 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
9
styles/_typography.scss
Normal 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
24
styles/_variables.scss
Normal 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
69
styles/globals.scss
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user