@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Noto+Sans+TC:wght@400;500;700;900&family=JetBrains+Mono:wght@400;700&display=swap'); @tailwind base; @tailwind components; @tailwind utilities; :root { --font-body: 'Inter', 'Noto Sans TC', sans-serif; --font-matrix: 'JetBrains Mono', monospace; --bg-color: #0B0E14; --text-color: #E2E8F0; --accent-color: #b83822; --accent-glow: rgba(184, 56, 34, 0.28); --surface-cream: #fff8e6; --surface-cream-soft: #f6f0e1; --surface-border: #e7c89b; --text-coffee: #3f2f25; --text-muted-coffee: #7a5b46; } html, body { margin: 0; padding: 0; min-height: 100%; background-color: var(--bg-color); background-image: radial-gradient(circle at 18% 20%, rgba(184, 56, 34, 0.10), transparent 24%), radial-gradient(circle at 82% 28%, rgba(231, 200, 155, 0.10), transparent 26%), linear-gradient(180deg, #080a10 0%, #111827 56%, #0b0e14 100%); color: var(--text-color); font-family: var(--font-body); } * { box-sizing: border-box; } .dashboard-shell { min-height: 100vh; position: relative; z-index: 1; } /* Unified warm research-card surface */ .panel-glow { background: rgba(255, 248, 230, 0.94); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border: 1px solid var(--surface-border); box-shadow: 0 18px 50px rgba(98, 58, 34, 0.16); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .panel-glow:hover { border-color: rgba(184, 56, 34, 0.38); box-shadow: 0 22px 58px rgba(98, 58, 34, 0.20); transform: translateY(-2px); } .panel-glow .text-slate-50, .panel-glow .text-slate-100, .panel-glow .text-slate-200, .panel-glow .text-cyan-200, .panel-glow .text-cyan-300, .panel-glow .text-cyan-400 { color: var(--text-coffee); } .panel-glow .text-slate-300, .panel-glow .text-slate-400, .panel-glow .text-slate-500, .panel-glow .text-slate-600 { color: var(--text-muted-coffee); } .panel-glow .bg-slate-950\/50, .panel-glow .bg-slate-950\/60, .panel-glow .bg-slate-900\/60, .panel-glow .bg-slate-800 { background-color: rgba(255, 255, 255, 0.66); } .panel-glow .border-slate-700, .panel-glow .border-slate-800 { border-color: #eadcb9; } .dot-matrix { font-family: var(--font-matrix); letter-spacing: 0.05em; text-transform: uppercase; } /* Status LEDs */ .status-led { width: 8px; height: 8px; border-radius: 50%; display: inline-block; box-shadow: 0 0 8px currentColor; } .status-led-ok { background: #10B981; color: #10B981; } .status-led-warn { background: #F59E0B; color: #F59E0B; } .status-led-danger { background: #EF4444; color: #EF4444; } /* Edge Glow Animation */ @keyframes top-edge-glow { 0% { box-shadow: 0 0 0 rgba(0, 240, 255, 0); border-color: rgba(255, 255, 255, 0.08); } 50% { box-shadow: 0 0 20px rgba(184, 56, 34, 0.28); border-color: #b83822; } 100% { box-shadow: 0 0 0 rgba(0, 240, 255, 0); border-color: rgba(255, 255, 255, 0.08); } } .prop-top-edge { animation: top-edge-glow 2s ease-in-out infinite; } @keyframes dot-matrix-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; text-shadow: 0 0 8px var(--accent-color); } } .dot-matrix-loading { animation: dot-matrix-pulse 1.5s ease-in-out infinite; } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: rgba(246, 240, 225, 0.45); } ::-webkit-scrollbar-thumb { background: rgba(184, 56, 34, 0.32); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: rgba(184, 56, 34, 0.55); }