@import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@100..900&family=DM+Sans:opsz,wght@9..40,100..900&display=swap"); @tailwind base; @tailwind components; @tailwind utilities; /* ── MicProtocol Design Tokens (Studio Desk) ── */ /* Same CSS custom properties as the web app so the admin matches exactly. */ :root { /* ── Brand ── */ --color-primary: #E8A64A; --color-primary-light: #F2C477; --color-primary-dark: #BD7828; --color-primary-glow: rgba(232, 166, 74, 0.10); --color-primary-glow-strong: rgba(232, 166, 74, 0.18); --color-secondary: #8B80C7; --color-accent: #5BC49A; /* ── Semantic ── */ --color-success: #5BC49A; --color-warning: #E6AB55; --color-error: #E57373; --color-info: #78A6E8; /* ── Backgrounds ── */ --bg-primary: #141516; --bg-secondary: #1B1D1F; --bg-tertiary: #24272A; --bg-elevated: #1D2023; --bg-glass: rgba(28, 25, 36, 0.6); /* ── Borders ── */ --border-color: #34373A; --border-color-subtle: #282B2E; --border-brand: rgba(232, 166, 74, 0.25); /* ── Text ── */ --text-primary: #F3F1EC; --text-secondary: #B5B1A8; --text-tertiary: #89857D; --text-inverse: #1C1812; /* ── Elevation ── */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.18); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.20); --shadow-lg: 0 12px 28px rgba(0, 0, 0, 0.24); --shadow-xl: 0 20px 48px rgba(0, 0, 0, 0.28); --shadow-glow: 0 0 16px rgba(232, 166, 74, 0.12); --shadow-glow-strong: 0 0 28px rgba(232, 166, 74, 0.18); /* ── Spacing ── */ --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem; --space-16: 4rem; --space-20: 5rem; --space-24: 6rem; /* ── Typography ── */ --font-display: "Space Grotesk", system-ui, sans-serif; --font-sans: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; --font-mono: "JetBrains Mono", "Fira Code", "Consolas", monospace; --text-xs: 0.75rem; --text-sm: 0.875rem; --text-base: 1rem; --text-lg: 1.125rem; --text-xl: 1.25rem; --text-2xl: 1.5rem; --text-3xl: 2rem; --text-4xl: 2.75rem; --text-5xl: 3.5rem; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --line-height-tight: 1.1; --line-height-snug: 1.25; --line-height-normal: 1.55; --line-height-relaxed: 1.7; --letter-spacing-tight: -0.03em; --letter-spacing-ultra-tight: -0.04em; --letter-spacing-wide: 0.06em; --letter-spacing-ultra-wide: 0.08em; /* ── Border radius ── */ --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px; --radius-xl: 18px; --radius-full: 9999px; /* ── Transitions ── */ --transition-fast: 120ms ease-out; --transition-normal: 220ms ease-out; --transition-slow: 350ms ease-out; --spring: cubic-bezier(0.34, 1.56, 0.64, 1); --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* ── Layout ── */ --sidebar-width: 260px; --header-height: 56px; --content-max-width: 1280px; } *, *::before, *::after { box-sizing: border-box; } html, body { background-color: var(--bg-primary); color: var(--text-primary); font-family: var(--font-sans); font-size: var(--text-base); line-height: var(--line-height-normal); -webkit-font-smoothing: antialiased; font-smoothing: antialiased; } h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); line-height: var(--line-height-tight); font-weight: var(--font-weight-bold); } /* ── Utility classes (matching web app naming) ── */ .font-display { font-family: var(--font-display); } .font-sans { font-family: var(--font-sans); } .font-mono { font-family: var(--font-mono); } .text-text-primary { color: var(--text-primary); } .text-text-secondary { color: var(--text-secondary); } .text-text-tertiary { color: var(--text-tertiary); } .text-text-inverse { color: var(--text-inverse); } .bg-bg-primary { background-color: var(--bg-primary); } .bg-bg-secondary { background-color: var(--bg-secondary); } .bg-bg-tertiary { background-color: var(--bg-tertiary); } .bg-bg-elevated { background-color: var(--bg-elevated); } .text-color-primary { color: var(--color-primary); } .text-color-secondary { color: var(--color-secondary); } .text-color-accent { color: var(--color-accent); } .text-color-success { color: var(--color-success); } .text-color-warning { color: var(--color-warning); } .text-color-error { color: var(--color-error); } .text-color-info { color: var(--color-info); } .bg-color-primary { background-color: var(--color-primary); } .bg-color-secondary { background-color: var(--color-secondary); } .bg-color-accent { background-color: var(--color-accent); } .bg-color-success { background-color: var(--color-success); } .bg-color-warning { background-color: var(--color-warning); } .bg-color-error { background-color: var(--color-error); } .bg-color-info { background-color: var(--color-info); } .border-border-color { border-color: var(--border-color); } .border-border-color-subtle { border-color: var(--border-color-subtle); } .shadow-sm { box-shadow: var(--shadow-sm); } .shadow-md { box-shadow: var(--shadow-md); } .shadow-lg { box-shadow: var(--shadow-lg); } .shadow-xl { box-shadow: var(--shadow-xl); } .shadow-glow { box-shadow: var(--shadow-glow); } .rounded-sm { border-radius: var(--radius-sm); } .rounded-md { border-radius: var(--radius-md); } .rounded-lg { border-radius: var(--radius-lg); } .rounded-xl { border-radius: var(--radius-xl); } .rounded-full { border-radius: var(--radius-full); } .transition-fast { transition: var(--transition-fast); } .transition-normal { transition: var(--transition-normal); } /* ── Web app utility classes ── */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); border: 1px solid transparent; border-radius: var(--radius-md); font-family: var(--font-sans); font-size: var(--text-sm); font-weight: 600; cursor: pointer; transition: background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), box-shadow var(--transition-fast); white-space: nowrap; text-decoration: none; } .btn:active { transform: scale(0.99); } .btn-primary { background: var(--color-primary); color: var(--text-inverse); border-color: var(--color-primary); box-shadow: var(--shadow-sm); } .btn-primary:hover { background: var(--color-primary-dark); border-color: var(--color-primary-dark); } .btn-secondary { background: var(--bg-tertiary); color: var(--text-primary); border: 1px solid var(--border-color-subtle); } .btn-secondary:hover { border-color: var(--color-primary); color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 6%, transparent); } .btn-ghost { background: transparent; color: var(--text-secondary); border: none; } .btn-ghost:hover { color: var(--text-primary); background: var(--bg-tertiary); } .btn-icon { padding: 0; width: 2.5rem; height: 2.5rem; min-width: 2.5rem; min-height: 2.5rem; display: inline-flex; align-items: center; justify-content: center; } .input { width: 100%; padding: var(--space-2) var(--space-3); border: 1px solid var(--border-color); border-radius: var(--radius-md); font-family: var(--font-sans); font-size: var(--text-sm); color: var(--text-primary); background: var(--bg-elevated); transition: border-color var(--transition-fast), box-shadow var(--transition-fast); outline: none; } .input:focus { border-color: var(--color-primary); box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-primary) 20%, transparent); } .input::placeholder { color: var(--text-tertiary); } .card { background: var(--bg-elevated); border: 1px solid var(--border-color-subtle); border-radius: var(--radius-lg); padding: var(--space-6); transition: border-color var(--transition-fast), box-shadow var(--transition-fast); position: relative; } .card:hover { border-color: var(--border-color); } .card-interactive { cursor: pointer; } .card-interactive:hover { border-color: color-mix(in srgb, var(--color-primary) 30%, transparent); box-shadow: var(--shadow-md); transform: translateY(-1px); } .frosted { background: var(--bg-elevated); border: 1px solid var(--border-color); position: relative; } .frosted::after { content: ""; position: absolute; inset: 0; opacity: 0.015; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E"); pointer-events: none; border-radius: inherit; } .stat-card { background: var(--bg-elevated); border: 1px solid var(--border-color-subtle); border-radius: var(--radius-lg); padding: var(--space-6); display: flex; align-items: center; gap: var(--space-4); transition: box-shadow var(--transition-fast), border-color var(--transition-fast); } .stat-card:hover { border-color: var(--border-color); } .stat-icon { width: 40px; height: 40px; border-radius: var(--radius-md); background: var(--bg-tertiary); display: flex; align-items: center; justify-content: center; border: 1px solid var(--border-color); flex-shrink: 0; } .stat-value { font-size: var(--text-2xl); font-weight: 700; font-family: var(--font-display); letter-spacing: -0.02em; } .stat-label { font-size: var(--text-xs); color: var(--text-tertiary); letter-spacing: 0.02em; } /* ── Animations ── */ @keyframes fadeIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } @keyframes revealUp { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes mic-fade-in-up { 0% { opacity: 0; transform: translateY(12px); } 100% { opacity: 1; transform: translateY(0); } } .animate-fade-in { animation: fadeIn 0.4s var(--ease-out-expo) forwards; } .animate-reveal { opacity: 0; animation: revealUp 0.7s var(--ease-out-expo) forwards; } .animate-reveal-delay-1 { animation-delay: 0.1s; } .animate-reveal-delay-2 { animation-delay: 0.2s; } .animate-reveal-delay-3 { animation-delay: 0.3s; } .animate-reveal-delay-4 { animation-delay: 0.4s; } .animate-reveal-delay-5 { animation-delay: 0.5s; } .animate-reveal-delay-6 { animation-delay: 0.6s; } .animate-mic-fade-in-up { animation: mic-fade-in-up 0.4s ease-out both; } .animate-spin { animation: spin 1s linear infinite; } /* ── Focus rings ── */ *:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; } /* ── Scrollbar ── */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: var(--bg-secondary); } ::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); } /* ── Skeleton ── */ .skeleton { background: linear-gradient( 90deg, var(--bg-tertiary) 25%, var(--border-color) 50%, var(--bg-tertiary) 75% ); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: var(--radius-md); }