Files
web-page/src/index.css

245 lines
9.8 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap');
/* ── Reset ───────────────────────────────────────────────────────────── */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
/* ── Design Tokens ───────────────────────────────────────────────────── */
:root {
/* ── Background Surfaces ─────────────────────────────────────────── */
--bg: #070b19;
--bg-secondary: #0a0f23;
--bg-tertiary: #0d1530;
/* ── Glass Surfaces ──────────────────────────────────────────────── */
--surface: rgba(10, 18, 45, 0.8);
--surface-raised: rgba(14, 24, 58, 0.9);
--surface-card: rgba(255, 255, 255, 0.03);
/* ── Neon Cyan ───────────────────────────────────────────────────── */
--neon-cyan: #00d4ff;
--neon-cyan-dim: rgba(0, 212, 255, 0.6);
--neon-cyan-muted: rgba(0, 212, 255, 0.12);
/* ── Neon Purple ─────────────────────────────────────────────────── */
--neon-purple: #8b5cf6;
--neon-purple-dim: rgba(139, 92, 246, 0.6);
--neon-purple-muted: rgba(139, 92, 246, 0.12);
/* ── Gradients ───────────────────────────────────────────────────── */
--grad-accent: linear-gradient(135deg, #00d4ff 0%, #8b5cf6 100%);
--grad-accent-subtle: linear-gradient(135deg, rgba(0, 212, 255, 0.12) 0%, rgba(139, 92, 246, 0.12) 100%);
--grad-bg-radial: radial-gradient(ellipse 120% 80% at 20% 0%, rgba(0, 212, 255, 0.06) 0%, transparent 60%),
radial-gradient(ellipse 100% 70% at 80% 10%, rgba(139, 92, 246, 0.05) 0%, transparent 60%),
radial-gradient(ellipse 80% 60% at 50% 80%, rgba(0, 100, 180, 0.04) 0%, transparent 70%);
/* ── Text ────────────────────────────────────────────────────────── */
--text: #ccd6f6;
--text-bright: #e8f0fe;
--text-dim: #8892b0;
--text-muted: #4a5572;
/* ── Borders ─────────────────────────────────────────────────────── */
--line: rgba(255, 255, 255, 0.07);
--line-bright: rgba(0, 212, 255, 0.25);
--line-subtle: rgba(255, 255, 255, 0.04);
/* ── Glow Effects ────────────────────────────────────────────────── */
--glow-cyan: 0 0 20px rgba(0, 212, 255, 0.25), 0 0 60px rgba(0, 212, 255, 0.08);
--glow-purple: 0 0 20px rgba(139, 92, 246, 0.25), 0 0 60px rgba(139, 92, 246, 0.08);
--glow-active: 0 0 30px rgba(0, 212, 255, 0.2), 0 2px 0 rgba(0, 212, 255, 0.4);
/* ── Shadows ─────────────────────────────────────────────────────── */
--shadow-sm: 0 2px 12px rgba(0, 0, 0, 0.4);
--shadow-md: 0 8px 32px rgba(0, 0, 0, 0.5);
--shadow-lg: 0 24px 64px rgba(0, 0, 0, 0.65);
--shadow-card: 0 4px 24px rgba(0, 0, 0, 0.45), 0 1px 0 rgba(255, 255, 255, 0.04) inset;
/* ── Border Radii ────────────────────────────────────────────────── */
--radius-xs: 6px;
--radius-sm: 10px;
--radius-md: 14px;
--radius-lg: 20px;
--radius-xl: 28px;
/* ── Layout ──────────────────────────────────────────────────────── */
--sidebar-w: 240px;
--topbar-h: 56px;
/* ── Typography ──────────────────────────────────────────────────── */
--font-display: 'Space Grotesk', 'Noto Sans KR', system-ui, serif;
--font-body: 'Inter', 'Noto Sans KR', system-ui, sans-serif;
/* ── Easing ──────────────────────────────────────────────────────── */
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
/* ── Page Accent Colors ──────────────────────────────────────────── */
--accent-home: #00d4ff;
--accent-blog: #c084fc;
--accent-lotto: #34d399;
--accent-stock: #38bdf8;
--accent-realestate: #f43f5e;
--accent-subscription: #f43f5e;
--accent-todo: #f472b6;
--accent-travel: #fb923c;
--accent-lab: #fbbf24;
/* ── Convenience alias ───────────────────────────────────────────── */
--accent: var(--neon-cyan);
/* ── Legacy / Backward-compat aliases ───────────────────────────── */
--muted: var(--text-dim);
--fg: var(--text-bright);
--surface-hover: var(--surface-raised);
--line-strong: var(--line-bright);
--accent-strong: var(--neon-purple);
--shadow-inset: 0 1px 0 rgba(255, 255, 255, 0.04) inset;
}
/* ── Base Document ───────────────────────────────────────────────────── */
html {
height: 100%;
scroll-behavior: smooth;
text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
height: 100%;
overflow: hidden;
background-color: var(--bg);
background-image: var(--grad-bg-radial);
background-attachment: fixed;
color: var(--text);
font-family: var(--font-body);
font-size: 15px;
line-height: 1.65;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* ── Scrollbar ───────────────────────────────────────────────────────── */
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgba(0, 212, 255, 0.22);
border-radius: 999px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(0, 212, 255, 0.45);
}
/* Firefox */
* {
scrollbar-width: thin;
scrollbar-color: rgba(0, 212, 255, 0.22) transparent;
}
/* ── Selection ───────────────────────────────────────────────────────── */
::selection {
background: rgba(0, 212, 255, 0.2);
color: var(--text-bright);
}
/* ── Focus ───────────────────────────────────────────────────────────── */
:focus-visible {
outline: 1.5px solid rgba(0, 212, 255, 0.8);
outline-offset: 3px;
border-radius: var(--radius-xs);
}
/* ── Typography ──────────────────────────────────────────────────────── */
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: var(--font-display);
font-weight: 600;
color: var(--text-bright);
line-height: 1.25;
letter-spacing: -0.02em;
}
p {
line-height: 1.75;
color: var(--text);
}
a {
color: inherit;
text-decoration: none;
}
a:hover {
color: var(--neon-cyan);
}
/* ── Images ──────────────────────────────────────────────────────────── */
img {
max-width: 100%;
display: block;
}
/* ── Form Elements ───────────────────────────────────────────────────── */
button {
font-family: var(--font-body);
}
input,
textarea,
select {
font-family: var(--font-body);
background: var(--surface-card);
border: 1px solid var(--line);
color: var(--text);
border-radius: var(--radius-sm);
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
input:focus,
textarea:focus,
select:focus {
border-color: var(--neon-cyan-dim);
box-shadow: 0 0 0 3px var(--neon-cyan-muted);
outline: none;
}
select option {
background: var(--bg-secondary);
color: var(--text);
}
/* ── Responsive Mobile Override ──────────────────────────────────────── */
@media (max-width: 768px) {
body {
overflow: auto;
background-attachment: scroll;
}
}