/* ═══ KCG Monitoring Design Tokens ═══ * 모든 색상을 --kcg-* CSS 변수로 관리. * data-theme 속성으로 dark/light 전환. * @theme 블록으로 Tailwind 유틸리티 클래스에 매핑. */ /* ── Dark Theme (기본 — 현재 UI와 동일) ── */ :root, [data-theme='dark'] { /* 배경 */ --kcg-bg: #0a0a1a; --kcg-surface: #111127; --kcg-card: #1a1a2e; --kcg-overlay: rgba(10, 10, 26, 0.96); --kcg-subtle: rgba(255, 255, 255, 0.03); /* 텍스트 */ --kcg-text: #e0e0e0; --kcg-text-secondary: #ccc; --kcg-muted: #888; --kcg-dim: #666; /* 보더 */ --kcg-border: #333; --kcg-border-light: #444; --kcg-border-heavy: #555; /* 시맨틱 */ --kcg-accent: #3b82f6; --kcg-accent-hover: #2563eb; --kcg-danger: #ef4444; --kcg-warning: #eab308; --kcg-success: #22c55e; --kcg-info: #06b6d4; /* 이벤트 타입 */ --kcg-event-airstrike: #ef4444; --kcg-event-explosion: #f97316; --kcg-event-missile: #eab308; --kcg-event-intercept: #3b82f6; --kcg-event-impact: #ff0000; --kcg-event-alert: #f97316; --kcg-event-osint: #06b6d4; /* 선박 MT 분류 */ --kcg-ship-cargo: #f0a830; --kcg-ship-tanker: #e74c3c; --kcg-ship-passenger: #4caf50; --kcg-ship-fishing: #42a5f5; --kcg-ship-military: #d32f2f; --kcg-ship-tug: #2e7d32; --kcg-ship-pleasure: #e91e8c; --kcg-ship-highspeed: #ff9800; --kcg-ship-other: #5c6bc0; --kcg-ship-unknown: #9e9e9e; /* 항공기 카테고리 */ --kcg-ac-fighter: #ff4444; --kcg-ac-military: #ff6600; --kcg-ac-surveillance: #ffcc00; --kcg-ac-tanker: #00ccff; --kcg-ac-cargo: #a78bfa; --kcg-ac-civilian: #FFD700; --kcg-ac-unknown: #7CFC00; /* 국기/해군 */ --kcg-navy-us: #4a90d9; --kcg-navy-kr: #00c73c; --kcg-navy-jp: #ff6b6b; --kcg-navy-cn: #ff4444; --kcg-navy-ir: #ff8c00; /* 글래스/투명 */ --kcg-glass: rgba(10, 10, 26, 0.92); --kcg-glass-dense: rgba(10, 10, 26, 0.96); --kcg-hover: rgba(255, 255, 255, 0.05); --kcg-hover-strong: rgba(255, 255, 255, 0.08); --kcg-accent-bg: rgba(59, 130, 246, 0.12); --kcg-danger-bg: rgba(239, 68, 68, 0.15); /* 패널 그림자 */ --kcg-panel-shadow: none; /* 지도 라벨 그림자 — dark에서 검정 기반 */ --kcg-map-label-shadow: 0 0 3px rgba(0,0,0,0.9), 0 0 6px rgba(0,0,0,0.6); --kcg-map-impact-shadow: 0 0 4px rgba(0,0,0,0.9), 0 0 8px rgba(0,0,0,0.7); } /* ── Light Theme ── */ [data-theme='light'] { /* 배경 */ --kcg-bg: #f0f2f5; --kcg-surface: #ffffff; --kcg-card: #f8fafc; --kcg-overlay: rgba(255, 255, 255, 0.96); --kcg-subtle: rgba(0, 0, 0, 0.02); /* 텍스트 */ --kcg-text: #1a1a2e; --kcg-text-secondary: #374151; --kcg-muted: #6b7280; --kcg-dim: #9ca3af; /* 보더 */ --kcg-border: #d1d5db; --kcg-border-light: #e5e7eb; --kcg-border-heavy: #9ca3af; /* 시맨틱 (데이터 시각화 색상은 테마 불변) */ --kcg-accent: #2563eb; --kcg-accent-hover: #1d4ed8; /* 글래스/투명 */ --kcg-glass: rgba(255, 255, 255, 0.95); --kcg-glass-dense: rgba(255, 255, 255, 0.98); --kcg-hover: rgba(0, 0, 0, 0.04); --kcg-hover-strong: rgba(0, 0, 0, 0.08); --kcg-accent-bg: rgba(37, 99, 235, 0.08); --kcg-danger-bg: rgba(239, 68, 68, 0.08); /* 패널 그림자 — light에서 영역 구분 강화 (outline 제거 — 폰트 가독성) */ --kcg-panel-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); /* 지도 라벨 그림자 — light에서 흰 배경 기반 */ --kcg-map-label-shadow: 0 0 3px rgba(255,255,255,0.9), 0 0 6px rgba(255,255,255,0.6); --kcg-map-impact-shadow: 0 0 4px rgba(255,255,255,0.9), 0 0 8px rgba(255,255,255,0.7); } /* ── Tailwind @theme mapping ── */ @theme { /* 배경 */ --color-kcg-bg: var(--kcg-bg); --color-kcg-surface: var(--kcg-surface); --color-kcg-card: var(--kcg-card); --color-kcg-overlay: var(--kcg-overlay); --color-kcg-subtle: var(--kcg-subtle); /* 텍스트 */ --color-kcg-text: var(--kcg-text); --color-kcg-text-secondary: var(--kcg-text-secondary); --color-kcg-muted: var(--kcg-muted); --color-kcg-dim: var(--kcg-dim); /* 보더 */ --color-kcg-border: var(--kcg-border); --color-kcg-border-light: var(--kcg-border-light); /* 시맨틱 */ --color-kcg-accent: var(--kcg-accent); --color-kcg-danger: var(--kcg-danger); --color-kcg-warning: var(--kcg-warning); --color-kcg-success: var(--kcg-success); --color-kcg-info: var(--kcg-info); /* 이벤트 */ --color-kcg-event-airstrike: var(--kcg-event-airstrike); --color-kcg-event-explosion: var(--kcg-event-explosion); --color-kcg-event-missile: var(--kcg-event-missile); --color-kcg-event-intercept: var(--kcg-event-intercept); --color-kcg-event-impact: var(--kcg-event-impact); --color-kcg-event-osint: var(--kcg-event-osint); /* 선박 */ --color-kcg-ship-cargo: var(--kcg-ship-cargo); --color-kcg-ship-tanker: var(--kcg-ship-tanker); --color-kcg-ship-passenger: var(--kcg-ship-passenger); --color-kcg-ship-fishing: var(--kcg-ship-fishing); --color-kcg-ship-military: var(--kcg-ship-military); --color-kcg-ship-tug: var(--kcg-ship-tug); --color-kcg-ship-unknown: var(--kcg-ship-unknown); /* 항공기 */ --color-kcg-ac-fighter: var(--kcg-ac-fighter); --color-kcg-ac-military: var(--kcg-ac-military); --color-kcg-ac-surveillance: var(--kcg-ac-surveillance); --color-kcg-ac-tanker: var(--kcg-ac-tanker); --color-kcg-ac-cargo: var(--kcg-ac-cargo); --color-kcg-ac-civilian: var(--kcg-ac-civilian); /* 글래스 */ --color-kcg-glass: var(--kcg-glass); --color-kcg-hover: var(--kcg-hover); --color-kcg-accent-bg: var(--kcg-accent-bg); --color-kcg-danger-bg: var(--kcg-danger-bg); /* 폰트 */ --font-mono: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; --font-sans: 'Inter', system-ui, -apple-system, sans-serif; }