Faaz
Session 5: Rebuild frontend as Vite+React 3-panel website builder IDE
4386567
/* =============================================================
MINDI 1.5 — AI Website Builder
Design System — Premium dark IDE theme
============================================================= */
/* ============ TOKENS ============ */
:root {
/* Surfaces */
--bg-0: #07070c;
--bg-1: #0a0a12;
--bg-2: #0d0d16;
--panel: #111120;
--panel-2: #16162a;
--panel-3: #1c1c36;
--elevated: #1f1f38;
--hover: rgba(255, 255, 255, .04);
--hover-2: rgba(255, 255, 255, .07);
/* Lines */
--border: rgba(255, 255, 255, .06);
--border-2: rgba(255, 255, 255, .10);
--border-3: rgba(255, 255, 255, .16);
/* Text */
--text: #ececf1;
--text-2: #b4b4c4;
--text-mute: #7a7a8c;
--text-dim: #565669;
/* Brand */
--purple: #7c3aed;
--purple-light: #a78bfa;
--blue: #2563eb;
--blue-light: #60a5fa;
--grad: linear-gradient(135deg, #7c3aed 0%, #2563eb 100%);
--grad-soft: linear-gradient(135deg, rgba(124, 58, 237, .15) 0%, rgba(37, 99, 235, .15) 100%);
--grad-glow: linear-gradient(135deg, rgba(124, 58, 237, .55) 0%, rgba(37, 99, 235, .55) 100%);
/* Status */
--ok: #10b981;
--warn: #f59e0b;
--err: #ef4444;
--info: #3b82f6;
/* Code colors */
--c-keyword: #a78bfa;
--c-string: #34d399;
--c-number: #fbbf24;
--c-comment: #6a6a85;
--c-function: #60a5fa;
--c-tag: #f87171;
--c-attr: #fbbf24;
--c-operator: #5eead4;
/* Geometry */
--r-xs: 4px;
--r-sm: 6px;
--r-md: 10px;
--r-lg: 14px;
--r-xl: 18px;
--r-2xl: 24px;
--sidebar-w: 260px;
--header-h: 48px;
/* Motion */
--ease: cubic-bezier(.16, 1, .3, 1);
--ease-2: cubic-bezier(.4, 0, .2, 1);
--ease-spring: cubic-bezier(.34, 1.56, .64, 1);
/* Fonts */
--sans: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
--mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
}
/* ============ RESET ============ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body, #root { height: 100%; }
body {
font-family: var(--sans);
font-size: 13px;
line-height: 1.5;
color: var(--text);
background: var(--bg-0);
overflow: hidden;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
button, input, textarea, select {
font: inherit;
color: inherit;
background: none;
border: 0;
outline: 0;
}
button { cursor: pointer; }
a { color: inherit; text-decoration: none; }
img, svg { display: block; }
/* Scrollbars */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, .06);
border-radius: 999px;
border: 2px solid transparent;
background-clip: content-box;
}
::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, .12); background-clip: content-box; }
* { scrollbar-width: thin; scrollbar-color: rgba(255, 255, 255, .08) transparent; }
::selection { background: rgba(124, 58, 237, .35); color: #fff; }
/* ============ UTILITY CLASSES ============ */
.grad-text {
background: var(--grad);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
/* ============ ANIMATIONS ============ */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInLeft {
from { opacity: 0; transform: translateX(-8px); }
to { opacity: 1; transform: translateX(0); }
}
@keyframes fadeInScale {
from { opacity: 0; transform: scale(.96); }
to { opacity: 1; transform: scale(1); }
}
@keyframes slideUp {
from { opacity: 0; transform: translateY(16px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: .4; }
}
@keyframes spin {
to { transform: rotate(360deg); }
}
@keyframes shimmer {
0% { background-position: -200% 0; }
100% { background-position: 200% 0; }
}
@keyframes typewriter-cursor {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
@keyframes glow-pulse {
0%, 100% { box-shadow: 0 0 20px rgba(124, 58, 237, .2); }
50% { box-shadow: 0 0 40px rgba(124, 58, 237, .4); }
}
@keyframes line-appear {
from { opacity: 0; transform: translateX(-4px); }
to { opacity: 1; transform: translateX(0); }
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-8px); }
}
@keyframes drift-1 {
to { transform: translate(80px, 60px) scale(1.1); }
}
@keyframes drift-2 {
to { transform: translate(-60px, -80px) scale(1.15); }
}
@keyframes pop-in {
from { opacity: 0; transform: scale(.92) translateY(8px); }
to { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes toast-in {
from { opacity: 0; transform: translateX(20px); }
to { opacity: 1; transform: translateX(0); }
}
@keyframes toast-out {
to { opacity: 0; transform: translateX(20px); }
}
/* ============ REDUCE MOTION ============ */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
transition-duration: .01ms !important;
}
}