1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--bg-primary: #0f1117;
--bg-secondary: #1a1d27;
--bg-card: #1e2130;
--border-color: #2a2e3d;
--text-primary: #e8eaed;
--text-secondary: #9aa0b0;
--text-muted: #5c6278;
--green: #22f06a;
--red: #ff4060;
--amber: #ffb020;
}
* {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
background-color: var(--bg-primary);
color: var(--text-primary);
font-family: 'Inter', system-ui, -apple-system, sans-serif;
min-height: 100vh;
}
body {
background:
radial-gradient(ellipse 80% 60% at 50% -20%, rgba(34, 240, 106, 0.04) 0%, transparent 60%),
radial-gradient(ellipse 60% 50% at 80% 20%, rgba(255, 64, 96, 0.03) 0%, transparent 50%),
var(--bg-primary);
}
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 3px;
}
/* ── Kiosk / TV Mode ── */
html.kiosk-mode,
html.kiosk-mode body {
overflow: hidden !important;
cursor: none;
}
html.kiosk-mode body {
background:
radial-gradient(ellipse 100% 80% at 30% -10%, rgba(34, 240, 106, 0.06) 0%, transparent 60%),
radial-gradient(ellipse 80% 70% at 80% 30%, rgba(255, 64, 96, 0.04) 0%, transparent 50%),
var(--bg-primary);
}
html.kiosk-mode header,
html.kiosk-mode .kiosk-hidden {
display: none !important;
}
html.kiosk-mode main {
max-width: none !important;
padding: 1rem !important;
}
html.kiosk-mode .kiosk-active .grid {
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)) !important;
}
html.kiosk-mode .kiosk-active .grid > * {
transform: scale(1);
}
/* SSE pulse animation */
.kiosk-active.pulse [class*="border"] {
animation: kioskPulse 0.6s ease-out;
}
@keyframes kioskPulse {
0% { box-shadow: 0 0 0 0 rgba(34, 240, 106, 0.3); }
100% { box-shadow: 0 0 0 8px transparent; }
}
/* Re-enable cursor when moving in kiosk mode */
html.kiosk-mode .kiosk-active {
cursor: auto;
}
|