Files
opsxshell/tailwind.config.js
Logan.LiandCursor 08696896f9 feat: harden local shell, SFTP, and desktop session reliability
Finder-launched terminals now inherit a login PATH so tools like ollama resolve, destructive SFTP/editor actions require confirmation, and terminal search plus window dragging work again. SSH forwards and RDP sessions keep listeners and survive reconnect without FastPath crashes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-16 16:08:11 +08:00

124 lines
4.9 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
darkMode: 'class',
theme: {
extend: {
colors: {
// ── Semantic surface tokens (theme-aware via CSS vars) ──────────
surface: {
base: 'var(--color-surface-base)',
raised: 'var(--color-surface-raised)',
overlay: 'var(--color-surface-overlay)',
inset: 'var(--color-surface-inset)',
hover: 'var(--color-surface-hover)',
active: 'var(--color-surface-active)',
},
// ── Legacy dark-* aliases (backward compat → surface tokens) ───
dark: {
950: 'var(--color-surface-base)',
900: 'var(--color-surface-base)',
850: 'var(--color-surface-raised)',
800: 'var(--color-surface-raised)',
700: 'var(--color-surface-overlay)',
600: 'var(--color-surface-inset)',
500: 'var(--color-text-dim)',
},
// ── Accent colors (RGB channels → /opacity works in light & dark) ──
accent: {
blue: 'rgb(var(--color-accent-blue-rgb) / <alpha-value>)',
'blue-hover': 'rgb(var(--color-accent-blue-hover-rgb) / <alpha-value>)',
green: 'rgb(var(--color-accent-green-rgb) / <alpha-value>)',
purple: 'rgb(var(--color-accent-purple-rgb) / <alpha-value>)',
orange: 'rgb(var(--color-accent-orange-rgb) / <alpha-value>)',
red: 'rgb(var(--color-accent-red-rgb) / <alpha-value>)',
},
// ── Content / text tokens ──────────────────────────────────────
content: {
primary: 'var(--color-content-primary)',
secondary: 'var(--color-content-secondary)',
tertiary: 'var(--color-content-tertiary)',
inverse: 'var(--color-content-inverse)',
},
// ── Text tokens (direct mapping) ───────────────────────────────
txt: {
primary: 'var(--color-text-primary)',
secondary: 'var(--color-text-secondary)',
muted: 'var(--color-text-muted)',
faint: 'var(--color-text-faint)',
dim: 'var(--color-text-dim)',
},
// ── Border tokens ──────────────────────────────────────────────
border: {
DEFAULT: 'var(--color-border-default)',
subtle: 'var(--color-border-subtle)',
strong: 'var(--color-border-strong)',
focus: 'var(--color-border-focus)',
},
// ── Placeholder tokens ─────────────────────────────────────────
ph: {
DEFAULT: 'var(--color-placeholder)',
disabled: 'var(--color-placeholder-disabled)',
},
// ── Feedback / status tokens ───────────────────────────────────
feedback: {
success: 'rgb(var(--color-feedback-success-rgb) / <alpha-value>)',
'success-bg': 'var(--color-feedback-success-bg)',
warning: 'rgb(var(--color-feedback-warning-rgb) / <alpha-value>)',
'warning-bg': 'var(--color-feedback-warning-bg)',
error: 'rgb(var(--color-feedback-error-rgb) / <alpha-value>)',
'error-bg': 'var(--color-feedback-error-bg)',
info: 'rgb(var(--color-feedback-info-rgb) / <alpha-value>)',
'info-bg': 'var(--color-feedback-info-bg)',
},
},
fontFamily: {
sans: [
'Inter',
'-apple-system',
'BlinkMacSystemFont',
'"Segoe UI"',
'Roboto',
'"Helvetica Neue"',
'Arial',
'"Noto Sans SC"',
'"PingFang SC"',
'"Microsoft YaHei"',
'sans-serif',
],
mono: [
'Menlo',
'Monaco',
'Consolas',
'"Liberation Mono"',
'"Courier New"',
'monospace',
],
},
animation: {
'fade-in': 'fadeIn 0.15s ease-out',
'slide-up': 'slideUp 0.2s ease-out',
'scale-in': 'scaleIn 0.15s ease-out',
},
keyframes: {
fadeIn: {
'0%': { opacity: '0' },
'100%': { opacity: '1' },
},
slideUp: {
'0%': { opacity: '0', transform: 'translateY(8px)' },
'100%': { opacity: '1', transform: 'translateY(0)' },
},
scaleIn: {
'0%': { opacity: '0', transform: 'scale(0.96)' },
'100%': { opacity: '1', transform: 'scale(1)' },
},
},
},
},
plugins: [],
}