Files
my-protfolio/src/styles/globals.css
Amirhossein Khalili 7fb58ff718
Some checks failed
Test and deploy / Verify production build (push) Has been cancelled
Test and deploy / Deploy production (push) Has been cancelled
feat(loading): preload portfolio assets before reveal
2026-09-07 00:20:06 +03:30

271 lines
6.0 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=Pacifico&display=swap');
@import './tokens.css';
@font-face {
font-family: 'IRANYekanXVF';
src: url('/fonts/IRANYekanXVF.ttf') format('truetype-variations');
font-style: normal;
font-weight: 100 1000;
font-display: swap;
}
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 100%;
scroll-behavior: smooth;
color-scheme: light;
}
html[data-theme="dark"] {
color-scheme: dark;
}
html[data-site-loading='true'] {
overflow: hidden;
}
body {
width: 100%;
min-width: 320px;
background-color: var(--bg-page);
color: var(--text-primary);
font-family: 'IRANYekanXVF', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-synthesis: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
transition: background-color 0.25s ease, color 0.25s ease;
}
/* Master 1440px Fixed Canvas */
.desktop-canvas {
width: 100%;
max-width: var(--layout-frame);
min-width: 0;
margin: 0 auto;
position: relative;
background-color: var(--bg-page);
overflow: hidden;
}
/* On ultra-wide viewports let decorative bleed elements escape the
canvas. body { overflow-x: hidden } prevents horizontal scrollbars. */
@media (min-width: 1441px) {
.desktop-canvas {
overflow: visible;
}
}
/* 1320px Inner Content Container with Page Gutters */
.content-container {
width: calc(100% - (2 * var(--layout-page-gutter)));
max-width: var(--layout-container);
margin: 0 auto;
position: relative;
}
@media (max-width: 650px) {
.section-header {
margin-bottom: var(--space-6);
}
.section-title {
font-size: 1.75rem;
line-height: 2.375rem;
}
.section-underline {
width: 5.5rem;
}
}
/* Common Section Header Component Styles */
.section-header {
display: flex;
flex-direction: column;
align-items: flex-start;
margin-bottom: 2.5rem;
}
.section-eyebrow {
font-size: var(--font-size-label-small);
line-height: var(--line-height-label-small);
letter-spacing: var(--letter-spacing-eyebrow);
text-transform: uppercase;
font-weight: 700;
color: var(--text-secondary);
margin-bottom: 0.5rem;
}
.section-title-wrap {
position: relative;
display: inline-flex;
flex-direction: column;
}
.section-title {
max-width: 24ch;
font-size: clamp(1.875rem, 3vw, 2.5rem);
line-height: 1.15;
font-weight: 760;
letter-spacing: -0.035em;
color: var(--text-primary);
margin-bottom: 0.75rem;
}
.section-underline {
width: 7.5rem;
height: 3px;
background-color: var(--accent-default);
border-radius: var(--radius-pill);
transform-origin: left center;
}
/* One-time viewport reveals. Content remains visible when JavaScript is unavailable. */
html[data-motion-ready='true'] [data-reveal] {
opacity: 0;
transform: translateY(1rem);
transition:
opacity var(--motion-duration-reveal) var(--motion-ease-out),
transform var(--motion-duration-reveal) var(--motion-ease-out);
transition-delay: var(--reveal-delay, 0ms);
will-change: opacity, transform;
}
html[data-motion-ready='true'] [data-reveal='soft'] {
transform: translateY(0.625rem);
}
html[data-motion-ready='true'] [data-reveal='scale'] {
transform: translateY(0.5rem) scale(0.97);
}
html[data-motion-ready='true'] [data-reveal='image'] {
transform: translateY(0.5rem) scale(0.985);
}
html[data-motion-ready='true'] [data-reveal][data-visible='true'] {
opacity: 1;
transform: translateY(0) scale(1);
will-change: auto;
}
html[data-motion-ready='true'] [data-visible='true'] .section-underline {
animation: motionUnderline 500ms var(--motion-ease-out) 120ms both;
}
@keyframes motionUnderline {
from {
opacity: 0;
transform: scaleX(0.25);
}
to {
opacity: 1;
transform: scaleX(1);
}
}
/* Pacifico Display Font Class */
.font-display {
font-family: 'Pacifico', cursive;
font-weight: 400;
}
/* Pill Button */
.pill-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
height: var(--size-button-height);
padding: 0 1.5rem;
border-radius: var(--radius-pill);
font-size: var(--font-size-button);
line-height: var(--line-height-button);
font-weight: 600;
cursor: pointer;
text-decoration: none;
transition:
color var(--motion-duration-fast) ease,
background-color var(--motion-duration-fast) ease,
border-color var(--motion-duration-fast) ease,
box-shadow var(--motion-duration-default) ease,
transform var(--motion-duration-fast) var(--motion-ease-out);
border: 1px solid transparent;
white-space: nowrap;
}
.pill-btn:focus-visible,
a:focus-visible,
button:focus-visible,
input:focus-visible {
outline: 3px solid var(--focus-ring);
outline-offset: 3px;
}
.pill-btn:active,
button:active:not(:disabled) {
transform: translateY(1px) scale(0.99);
}
.pill-btn-outline {
background: rgba(255, 255, 255, 0.4);
backdrop-filter: blur(10px);
border-color: var(--border-default);
color: var(--text-primary);
}
[data-theme="dark"] .pill-btn-outline {
background: rgba(9, 28, 63, 0.6);
border-color: var(--border-default);
color: var(--text-primary);
}
.pill-btn-primary {
background-color: var(--action-primary-bg);
color: var(--action-primary-fg);
border-color: transparent;
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*, *::before, *::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}
a {
color: inherit;
text-decoration: none;
}
@media (hover: hover) and (pointer: fine) {
.pill-btn-outline:hover {
border-color: var(--accent-default);
background: rgba(255, 255, 255, 0.7);
transform: translateY(-1px);
}
[data-theme="dark"] .pill-btn-outline:hover {
border-color: var(--accent-default);
background: rgba(16, 63, 127, 0.8);
}
.pill-btn-primary:hover {
background-color: var(--action-primary-hover);
box-shadow: 0 4px 12px var(--shadow-color);
transform: translateY(-1px);
}
}