-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstyles.css
More file actions
154 lines (144 loc) · 35 KB
/
Copy pathstyles.css
File metadata and controls
154 lines (144 loc) · 35 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
:root {
--canvas: #0d1113;
--surface: #14191b;
--surface-2: #1a2022;
--surface-3: #20282a;
--line: #303a3d;
--line-strong: #465255;
--ink: #f2f6f5;
--muted: #8f9b9d;
--mint: #39ddb3;
--mint-dark: #0ca783;
--amber: #f2c84b;
--rose: #ff6675;
--blue: #57a5ff;
--light-rgb: 56, 221, 178;
color: var(--ink);
background: var(--canvas);
font-family: Inter, "Segoe UI", "Microsoft YaHei", sans-serif;
}
* { box-sizing: border-box; }
body { min-width: 320px; min-height: 100vh; margin: 0; background: var(--canvas); }
button, input, select { font: inherit; }
button { cursor: pointer; }
button:focus-visible, input:focus-visible, select:focus-visible, canvas:focus-visible { outline: 2px solid var(--amber); outline-offset: 2px; }
.app-shell { height: 100vh; min-height: 560px; display: grid; grid-template-rows: 72px minmax(0, 1fr) 38px; overflow: hidden; background: linear-gradient(120deg, #0d1113, #101719 54%, #121315); }
.topbar { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 0 28px; border-bottom: 1px solid var(--line); background: rgba(13, 17, 19, .92); }
.brand-lockup, .header-actions, .connection-pill, .master-switch, .device-card-head, .section-heading, .view-header, .profile-controls, .field-label, .light-actions, .activity-bar, .activity-bar > div { display: flex; align-items: center; }
.brand-lockup { gap: 12px; }
.brand-mark { width: 30px; height: 30px; display: grid; grid-template-columns: repeat(3, 4px); align-items: center; justify-content: center; gap: 4px; border: 1px solid var(--line-strong); }
.brand-mark span { height: 10px; background: var(--mint); }.brand-mark span:nth-child(2) { height: 18px; background: var(--amber); }.brand-mark span:nth-child(3) { height: 7px; background: var(--blue); }
.eyebrow, .section-kicker { margin: 0 0 4px; color: var(--muted); font-size: 9px; font-weight: 800; letter-spacing: 1px; }
h1, h2, h3, p { margin-top: 0; letter-spacing: 0; }
h1 { margin: 0; font-size: 17px; line-height: 1; } h2 { margin: 0; font-size: 22px; } h3 { margin: 0; font-size: 15px; }
.header-actions { gap: 20px; }
.connection-pill { gap: 8px; color: var(--muted); font-size: 12px; }
.status-dot, .service-dot { width: 7px; height: 7px; flex: 0 0 auto; border-radius: 50%; background: #626d70; }
.status-dot.is-online, .service-dot.is-online { background: var(--mint); box-shadow: 0 0 0 4px rgba(57, 221, 179, .1); }
.master-switch { gap: 9px; color: var(--muted); font-size: 11px; }
.master-switch input { position: absolute; opacity: 0; pointer-events: none; }
.switch-track { width: 35px; height: 19px; position: relative; border: 1px solid var(--line-strong); border-radius: 10px; background: #1b2224; transition: .18s ease; }
.switch-track i { width: 13px; height: 13px; position: absolute; left: 2px; top: 2px; border-radius: 50%; background: #899496; transition: transform .18s ease; }
.master-switch input:checked + .switch-track { border-color: var(--mint-dark); background: rgba(57, 221, 179, .16); }.master-switch input:checked + .switch-track i { transform: translateX(16px); background: var(--mint); }
.master-switch strong { width: 34px; color: var(--ink); font-size: 11px; }
.hub-layout { min-height: 0; display: grid; grid-template-columns: 220px minmax(0, 1fr); overflow: hidden; }
.sidebar { min-height: 0; display: flex; flex-direction: column; padding: 22px 14px 16px; border-right: 1px solid var(--line); background: #111618; }
.hub-nav { display: grid; gap: 5px; }
.nav-item { min-height: 42px; display: flex; align-items: center; gap: 11px; padding: 0 11px; border: 1px solid transparent; border-radius: 5px; color: var(--muted); background: transparent; font-size: 12px; font-weight: 700; text-align: left; }
.nav-item:hover { color: var(--ink); background: var(--surface-2); }.nav-item.is-active { border-color: #315f55; color: var(--mint); background: rgba(57, 221, 179, .08); }
.nav-icon { width: 20px; color: inherit; font-family: Consolas, monospace; font-size: 16px; text-align: center; }
.device-card { margin-top: 26px; padding: 14px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }
.device-card-head { gap: 10px; padding-bottom: 13px; border-bottom: 1px solid var(--line); }.device-card-head > div { min-width: 0; }
.mini-controller { width: 34px; height: 30px; display: grid; place-items: center; flex: 0 0 auto; border: 1px solid var(--line-strong); border-radius: 8px 8px 12px 12px; color: var(--mint); font-family: Consolas, monospace; font-size: 9px; font-weight: 800; }
.device-card strong, .device-card small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.device-card strong { font-size: 12px; }.device-card small { margin-top: 3px; color: var(--muted); font-family: Consolas, monospace; font-size: 9px; }
.device-stats { margin: 8px 0 0; }.device-stats div { display: flex; justify-content: space-between; gap: 8px; padding: 6px 0; font-size: 10px; }.device-stats dt { color: var(--muted); }.device-stats dd { margin: 0; font-family: Consolas, monospace; text-align: right; }
.sidebar-footer { margin-top: auto; display: grid; grid-template-columns: 8px 1fr; align-items: center; gap: 5px 7px; padding: 10px 7px 0; color: var(--muted); font-size: 10px; }.sidebar-footer small { grid-column: 2; color: #667174; font-family: Consolas, monospace; }
.button { min-height: 36px; padding: 0 13px; border: 1px solid transparent; border-radius: 5px; color: var(--ink); background: transparent; font-size: 12px; font-weight: 750; }.button:disabled { cursor: not-allowed; opacity: .45; }
.button-primary { border-color: var(--mint); color: #06221b; background: var(--mint); }.button-primary:hover:not(:disabled) { background: #68e8c7; }
.button-secondary { border-color: var(--line-strong); color: var(--muted); }.button-secondary:hover { color: var(--ink); border-color: #697578; }
.button-quiet { width: 100%; min-height: 30px; margin-top: 9px; border-color: var(--line); color: var(--muted); font-size: 10px; }.button-quiet:hover { color: var(--ink); border-color: var(--line-strong); }
.icon-button { width: 34px; height: 34px; padding: 0; border: 1px solid var(--line); border-radius: 4px; color: var(--muted); background: var(--surface); font-size: 17px; }.icon-button:hover { color: var(--ink); border-color: var(--line-strong); }
.main-stage { min-width: 0; min-height: 0; height: 100%; overflow: auto; }
.view { display: none; min-height: 100%; padding: 25px clamp(22px, 3vw, 42px) 30px; }.view.is-active { display: block; }
.view-header { justify-content: space-between; gap: 18px; margin-bottom: 20px; }
.profile-controls { gap: 8px; }.profile-controls label { color: var(--muted); font-size: 10px; font-weight: 700; }.profile-controls select { height: 34px; min-width: 150px; padding: 0 30px 0 10px; border: 1px solid var(--line); border-radius: 4px; color: var(--ink); background: var(--surface); font-size: 11px; }
.mapping-workspace, .touchpad-workspace, .lighting-workspace, .trigger-workspace { display: grid; grid-template-columns: minmax(430px, 1.15fr) minmax(390px, .85fr); gap: 16px; }
.controller-monitor, .mapping-panel, .touchpad-monitor-panel, .touchpad-controls-panel, .light-preview-panel, .light-controls-panel { min-width: 0; border: 1px solid var(--line); border-radius: 6px; background: rgba(20, 25, 27, .82); }
.controller-monitor, .light-preview-panel { padding: 20px; }.mapping-panel, .light-controls-panel { padding: 20px; }
.section-heading { justify-content: space-between; gap: 15px; min-height: 35px; }
.badge { padding: 4px 7px; border: 1px solid var(--line); border-radius: 3px; color: var(--muted); background: var(--surface-2); font-size: 9px; font-weight: 800; }.badge.is-live { border-color: #347464; color: var(--mint); background: rgba(57, 221, 179, .08); }.badge.is-active { border-color: #8f7632; color: var(--amber); }
.controller-visual { width: min(100%, 650px); aspect-ratio: 1502 / 1012; position: relative; margin: 12px auto 8px; isolation: isolate; }
.controller-wireframe { width: 100%; height: 100%; display: block; border-radius: 4px; object-fit: contain; opacity: .78; }
.twin-node { position: absolute; left: var(--x); top: var(--y); z-index: 2; padding: 0; border: 0; color: var(--ink); background: transparent; transform: translate(-50%, -50%); }
.twin-node span { min-width: 24px; min-height: 19px; display: grid; place-items: center; padding: 2px 4px; border: 1px solid #647074; border-radius: 4px; color: #d5dddd; background: rgba(13, 17, 19, .88); box-shadow: 0 0 0 2px rgba(13,17,19,.52); font: 700 8px Consolas, monospace; transition: border-color .08s ease, color .08s ease, background .08s ease, box-shadow .08s ease; }
.twin-node kbd { min-width: 36px; max-width: 94px; position: absolute; left: calc(100% + 4px); top: 50%; z-index: 3; overflow: hidden; visibility: hidden; opacity: 0; padding: 3px 5px; border: 1px solid #315f55; border-radius: 3px; color: var(--mint); background: rgba(13,17,19,.94); box-shadow: 0 2px 8px rgba(0,0,0,.4); font: 7px Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; transform: translateY(-50%); transition: opacity .1s ease, visibility .1s ease; pointer-events: none; }
.twin-node:hover kbd, .twin-node.is-pressed kbd { visibility: visible; opacity: 1; }
.twin-node:hover span, .twin-node:focus-visible span { border-color: var(--mint); color: var(--mint); }
.twin-node.is-pressed { color: inherit !important; background: transparent !important; box-shadow: none !important; }
.twin-node.is-pressed span { border-color: #d9fff5; color: #06221b; background: var(--mint); box-shadow: 0 0 0 3px rgba(57,221,179,.2), 0 0 16px rgba(57,221,179,.85); }
.twin-node.is-pressed kbd { border-color: var(--mint); color: #06221b; background: #8aefd4; }
.twin-node.is-capturing span { border-color: var(--amber); color: var(--amber); }.twin-node.is-capturing kbd { border-color: var(--amber); color: var(--amber); }
.twin-node.callout-top kbd { left: 50%; top: auto; bottom: calc(100% + 4px); transform: translateX(-50%); }.twin-node.callout-bottom kbd { left: 50%; top: calc(100% + 4px); transform: translateX(-50%); }.twin-node.callout-left kbd { left: auto; right: calc(100% + 4px); }.twin-node.callout-right kbd { left: calc(100% + 4px); }
.twin-face span { min-width: 26px; min-height: 26px; border-radius: 50%; font-size: 12px; }.twin-dpad span { min-width: 28px; min-height: 24px; font-size: 8px; }
.twin-shoulder span { min-width: 32px; }.twin-shoulder kbd { left: 50%; top: calc(100% + 4px); transform: translateX(-50%); }
.twin-system span { min-width: 20px; min-height: 25px; }.twin-touchpad span { min-width: 52px; }.twin-touchpad kbd { left: 50%; top: calc(100% + 4px); transform: translateX(-50%); }
.twin-stick span { width: 35px; height: 35px; padding: 0; border-radius: 50%; background: rgba(13,17,19,.48); }.twin-stick span i { width: 13px; height: 13px; display: block; border: 1px solid #9ba6a8; border-radius: 50%; background: #222b2d; transition: transform .06s linear; }.twin-stick kbd { left: 50%; top: calc(100% + 5px); transform: translateX(-50%); }
.twin-stick-direction { z-index: 3; }.twin-stick-direction span { min-width: 17px; min-height: 17px; padding: 0; border-color: #455154; border-radius: 50%; color: #7f8b8d; background: rgba(13,17,19,.78); font-size: 8px; }
.twin-center span { min-width: 29px; border-radius: 10px; }.twin-center kbd { left: calc(100% + 4px); }.twin-mute kbd { left: 50%; top: calc(100% + 4px); transform: translateX(-50%); }
.twin-readout { min-height: 38px; display: grid; grid-template-columns: auto minmax(90px,1fr) minmax(110px,auto); align-items: center; gap: 12px; margin-bottom: 10px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 4px; background: #101517; }.twin-readout > span { color: var(--muted); font-size: 8px; font-weight: 800; letter-spacing: .8px; }.twin-readout strong { font-size: 11px; }.twin-readout kbd { overflow: hidden; padding: 4px 7px; border: 1px solid #315f55; border-radius: 3px; color: var(--mint); background: rgba(57,221,179,.05); font: 9px Consolas,monospace; text-align: center; text-overflow: ellipsis; white-space: nowrap; }.twin-readout.is-live { border-color: #347464; box-shadow: inset 3px 0 0 var(--mint); }.twin-readout.is-live kbd { color: #06221b; background: var(--mint); }
.axis-monitor { display: grid; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }.axis-monitor div { min-width: 0; padding: 12px 10px; }.axis-monitor div + div { border-left: 1px solid var(--line); }.axis-monitor span, .light-telemetry span { display: block; color: var(--muted); font-size: 9px; }.axis-monitor strong, .light-telemetry strong { display: block; margin-top: 5px; overflow: hidden; font: 11px Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; }
.pressed-strip { min-height: 42px; display: flex; align-items: center; gap: 14px; padding-top: 11px; }.pressed-strip span { color: var(--muted); font-size: 9px; }.pressed-strip strong { min-width: 0; overflow: hidden; color: var(--mint); font: 10px Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; }
.mapping-count { color: var(--mint); font: 11px Consolas, monospace; }.mapping-filter { display: grid; grid-template-columns: repeat(5, 1fr); margin: 15px 0 10px; border: 1px solid var(--line); border-radius: 4px; overflow: hidden; }.mapping-filter button { min-height: 30px; padding: 0 5px; border: 0; border-right: 1px solid var(--line); color: var(--muted); background: transparent; font-size: 9px; font-weight: 700; }.mapping-filter button:last-child { border-right: 0; }.mapping-filter button.is-active { color: #06221c; background: var(--mint); }
.touchpad-monitor-panel, .touchpad-controls-panel { padding: 20px; }.touchpad-coordinate { color: var(--mint); font: 11px Consolas,monospace; }.touchpad-surface { aspect-ratio: 1.78 / 1; position: relative; margin-top: 22px; overflow: hidden; border: 1px solid var(--line-strong); border-radius: 6px; background: #0d1214; box-shadow: inset 0 0 40px rgba(0,0,0,.35); }.touchpad-surface::before { content: ""; position: absolute; inset: 9%; border: 1px solid #263033; border-radius: 4px; }.touchpad-surface.is-pressed { border-color: #71817e; }.touchpad-surface.is-tracking { border-color: var(--mint-dark); box-shadow: inset 0 0 40px rgba(57,221,179,.05), 0 0 0 1px rgba(57,221,179,.12); }.touchpad-centerline { width: 1px; position: absolute; inset-block: 9%; left: 50%; background: #253033; }.touchpad-direction { position: absolute; top: 50%; z-index: 1; color: #3c494b; font: 36px Consolas,monospace; transform: translateY(-50%); }.touchpad-direction-left { left: 15%; }.touchpad-direction-right { right: 15%; }.touchpad-cursor { width: 18px; height: 18px; position: absolute; left: var(--touch-x,50%); top: var(--touch-y,50%); z-index: 2; display: none; border: 2px solid white; border-radius: 50%; background: var(--mint); box-shadow: 0 0 0 6px rgba(57,221,179,.16), 0 0 16px var(--mint); transform: translate(-50%,-50%); }.touchpad-cursor.is-visible { display: block; }.touchpad-telemetry { display: grid; grid-template-columns: repeat(3,1fr); margin-top: 18px; border-top: 1px solid var(--line); }.touchpad-telemetry div { min-width: 0; padding: 13px 9px 0; }.touchpad-telemetry div + div { border-left: 1px solid var(--line); }.touchpad-telemetry span { display: block; color: var(--muted); font-size: 8px; }.touchpad-telemetry strong { display: block; margin-top: 5px; color: var(--ink); font: 10px Consolas,monospace; }.touchpad-gesture-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; }.touchpad-gesture-header .status-link-toggle { margin: 0; }.touchpad-route-list { margin-top: 20px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }.touchpad-route-list > div { min-height: 72px; display: grid; grid-template-columns: 32px 1fr auto; align-items: center; gap: 11px; }.touchpad-route-list > div + div { border-top: 1px solid var(--line); }.route-arrow { width: 30px; height: 30px; display: grid; place-items: center; border: 1px solid var(--line-strong); border-radius: 4px; color: var(--mint); font: 16px Consolas,monospace; }.touchpad-route-list small, .touchpad-route-list strong { display: block; }.touchpad-route-list small { color: var(--muted); font-size: 8px; }.touchpad-route-list strong { margin-top: 3px; font-size: 10px; }.touchpad-route-list kbd { color: var(--mint); font: 9px Consolas,monospace; }.touchpad-gesture-status { min-height: 42px; display: flex; align-items: center; justify-content: space-between; margin-top: 17px; padding: 0 10px; background: #101517; color: var(--muted); font-size: 9px; }.touchpad-gesture-status b { color: var(--ink); font: 9px Consolas,monospace; }.touchpad-gesture-status b.is-live { color: var(--mint); }.touchpad-threshold { display: grid; grid-template-columns: 1fr auto; gap: 8px; margin-top: 22px; color: var(--muted); font-size: 9px; }.touchpad-threshold output { color: var(--mint); font: 9px Consolas,monospace; }.touchpad-threshold input { grid-column: 1 / 3; }.mapping-row.is-overridden { opacity: .42; }
.touchpad-option-row { min-height: 42px; display: flex; align-items: center; justify-content: space-between; margin-top: 12px; padding: 0 10px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); color: var(--muted); font-size: 9px; }.touchpad-option-row .status-link-toggle { margin: 0; }.touchpad-option-row .status-link-toggle strong { color: var(--mint); }
.mapping-list { height: 400px; overflow-y: auto; scrollbar-color: #475255 transparent; }.mapping-group-title { position: sticky; top: 0; z-index: 2; padding: 8px 7px 6px; color: #768285; background: var(--surface); font-size: 8px; font-weight: 800; letter-spacing: .8px; }
.mapping-row { min-height: 45px; display: grid; grid-template-columns: 1fr minmax(135px, 1.25fr) 26px; align-items: center; gap: 8px; padding: 6px 6px 6px 8px; border-top: 1px solid var(--line); }.mapping-row.is-hidden { display: none; }.controller-key-label { display: flex; align-items: center; gap: 8px; min-width: 0; font-size: 11px; font-weight: 700; }.controller-key-symbol { width: 27px; height: 27px; display: grid; place-items: center; flex: 0 0 auto; border: 1px solid var(--line-strong); border-radius: 4px; color: var(--mint); background: var(--surface-2); font: 10px Consolas, monospace; }
.shortcut-button { min-width: 0; min-height: 30px; overflow: hidden; padding: 0 8px; border: 1px solid var(--line); border-radius: 4px; color: var(--ink); background: #101517; font: 9px Consolas, monospace; text-overflow: ellipsis; white-space: nowrap; }.shortcut-button:hover { border-color: #54726b; }.shortcut-button.is-empty { color: #687477; }.shortcut-button.is-capturing { border-color: var(--amber); color: var(--amber); background: rgba(242,200,75,.06); }
.clear-mapping { width: 26px; height: 26px; padding: 0; border: 0; border-radius: 3px; color: #667174; background: transparent; font-size: 15px; }.clear-mapping:hover { color: var(--rose); background: rgba(255,102,117,.08); }
.lighting-workspace { align-items: stretch; }.light-preview-panel { display: flex; flex-direction: column; }.color-chip { width: 26px; height: 26px; border: 2px solid #e8eeee; border-radius: 50%; background: rgb(var(--light-rgb)); box-shadow: 0 0 13px rgba(var(--light-rgb),.6); }
.light-preview { min-height: 370px; display: grid; place-items: center; flex: 1; }.light-preview-device { width: min(82%, 450px); aspect-ratio: 2.1 / 1; position: relative; border: 1px solid #dbe3e2; border-radius: 88px 88px 58px 58px; background: linear-gradient(145deg, #edf2f1, #aebabb); box-shadow: inset 0 10px 18px rgba(255,255,255,.6), 0 25px 38px rgba(0,0,0,.36); }.light-preview-device::before { content: ""; width: 42%; height: 45%; position: absolute; left: 29%; top: 10%; border: 1px solid #4d5a5d; border-radius: 11px 11px 28px 28px; background: #202a2c; }
.preview-bar { width: 20%; height: 6px; position: absolute; top: 15%; background: rgb(var(--light-rgb)); box-shadow: 0 0 9px 2px rgba(var(--light-rgb),.8), 0 0 24px rgba(var(--light-rgb),.4); }.preview-bar-left { left: 30%; transform: skewX(-24deg); }.preview-bar-right { right: 30%; transform: skewX(24deg); }
.preview-player-lights { position: absolute; left: 50%; top: 48%; display: flex; gap: 5px; transform: translateX(-50%); }.preview-player-lights i { width: 5px; height: 5px; border-radius: 50%; background: #6e7b7d; }.preview-player-lights i.is-on { background: white; box-shadow: 0 0 6px white; }
.light-preview.is-breathe .preview-bar { animation: breathe var(--effect-duration,3s) ease-in-out infinite; }.light-preview.is-blink .preview-bar { animation: blink calc(var(--effect-duration,3s) * .35) steps(2,jump-none) infinite; } @keyframes breathe { 0%,100% { opacity:.08; } 50% { opacity:1; } } @keyframes blink { 50% { opacity:.05; } }
.light-telemetry { display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px solid var(--line); }.light-telemetry div { min-width: 0; padding: 13px 10px 0; }.light-telemetry div + div { border-left: 1px solid var(--line); }
.codex-light-panel { margin: -2px 0 18px; padding-bottom: 17px; border-bottom: 1px solid var(--line); }
.codex-light-header { min-height: 37px; display: flex; align-items: center; justify-content: space-between; gap: 16px; }.codex-light-header .status-link-toggle { margin-top: 0; }
.codex-state-grid { display: grid; grid-template-columns: repeat(3,1fr); margin-top: 12px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.codex-state-row { min-width: 0; display: grid; grid-template-columns: 9px 1fr auto; align-items: center; gap: 5px 7px; padding: 10px 9px; color: var(--muted); }.codex-state-row + .codex-state-row { border-left: 1px solid var(--line); }.codex-state-row strong { min-width: 0; color: var(--ink); font-size: 10px; }.codex-state-row span:nth-child(3) { grid-column: 2 / 4; font-size: 8px; }.codex-state-row b { align-self: start; color: #667174; font: 8px Consolas,monospace; }.codex-state-row.is-active { background: rgba(255,255,255,.035); box-shadow: inset 0 -2px 0 currentColor; }.codex-state-row.is-active strong { color: currentColor; }
.state-light { width: 8px; height: 8px; display: inline-block; flex: 0 0 auto; border-radius: 50%; background: #657174; }.state-light-approval, [data-codex-state="approval"].is-active { color: #ffd34e; }.state-light-approval { background: #ffd34e; box-shadow: 0 0 8px rgba(255,211,78,.7); }.state-light-working, [data-codex-state="working"].is-active { color: #ff4f5e; }.state-light-working { background: #ff4f5e; box-shadow: 0 0 8px rgba(255,79,94,.68); }.state-light-idle, [data-codex-state="idle"].is-active { color: #36d17e; }.state-light-idle { background: #36d17e; box-shadow: 0 0 8px rgba(54,209,126,.65); }
.codex-state-row.is-active[data-codex-state="approval"] .state-light { animation: status-pulse-blink .8s steps(2,jump-none) infinite; }.codex-state-row.is-active[data-codex-state="working"] .state-light { animation: status-pulse-breathe 2.4s ease-in-out infinite; }
.codex-current-state { min-height: 43px; display: grid; grid-template-columns: 9px minmax(90px,1fr) auto; align-items: center; gap: 10px; margin-top: 10px; padding: 0 10px; background: #101517; }.codex-current-state > div span { display: block; color: var(--muted); font-size: 8px; }.codex-current-state strong { display: block; margin-top: 2px; font-size: 10px; }.codex-current-state small { max-width: 180px; overflow: hidden; color: var(--muted); font: 8px Consolas,monospace; text-align: right; text-overflow: ellipsis; white-space: nowrap; }
.light-controls-panel.is-codex-linked .manual-light-control { opacity: .42; pointer-events: none; }.manual-light-control { transition: opacity .16s ease; }
@keyframes status-pulse-blink { 50% { opacity: .12; box-shadow: none; } }
@keyframes status-pulse-breathe { 0%,100% { opacity: .2; box-shadow: none; } 50% { opacity: 1; } }
.color-control-grid { display: grid; grid-template-columns: 170px 1fr; align-items: center; gap: 17px; padding-bottom: 18px; border-bottom: 1px solid var(--line); }.color-wheel-wrap { display: grid; place-items: center; }.color-wheel-wrap canvas { width: 148px; height: 148px; border: 1px solid var(--line-strong); border-radius: 50%; cursor: crosshair; touch-action: none; }.color-fields { min-width: 0; }.hex-field, .rgb-grid label { color: var(--muted); font-size: 9px; font-weight: 800; }.hex-field { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }.hex-field input { width: 100px; padding: 4px; border: 0; color: var(--ink); background: transparent; font: 14px Consolas, monospace; text-align: right; text-transform: uppercase; }
.rgb-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 6px; margin-top: 11px; }.rgb-grid input { width: 100%; min-width: 0; margin-top: 5px; padding: 7px 3px; border: 1px solid var(--line); border-radius: 3px; color: var(--ink); background: #101517; font: 10px Consolas, monospace; text-align: center; }.swatches { display: flex; gap: 7px; margin-top: 13px; }.swatch { width: 22px; height: 22px; padding: 0; border: 2px solid transparent; border-radius: 50%; background: var(--swatch); }.swatch.is-selected { border-color: white; box-shadow: 0 0 0 2px var(--mint); }
.control-row { padding: 17px 0 0; }.field-label { justify-content: space-between; margin-bottom: 10px; color: var(--ink); font-size: 10px; font-weight: 750; }.field-label output { color: var(--mint); font: 10px Consolas,monospace; }
.range-input { width: 100%; height: 4px; margin: 0; appearance: none; border-radius: 2px; background: #465154; }.range-input::-webkit-slider-thumb { width: 14px; height: 14px; appearance: none; border: 2px solid #dffbf3; border-radius: 50%; background: var(--mint); box-shadow: 0 0 0 3px rgba(57,221,179,.13); }
.segmented-control { display: grid; grid-template-columns: repeat(3,1fr); border: 1px solid var(--line); border-radius: 4px; overflow: hidden; }.segmented-control button { min-height: 32px; border: 0; border-right: 1px solid var(--line); color: var(--muted); background: transparent; font-size: 10px; font-weight: 700; }.segmented-control button:last-child { border-right: 0; }.segmented-control button.is-active { color: #06221c; background: var(--mint); }.speed-row { display: block; }
.player-presets, .player-leds { display: grid; grid-template-columns: repeat(5,1fr); gap: 5px; }.player-presets button { min-height: 29px; padding: 0; border: 1px solid var(--line); border-radius: 3px; color: var(--muted); background: #101517; font-size: 9px; }.player-presets button.is-active { border-color: var(--mint-dark); color: #06221c; background: var(--mint); }.player-leds { margin-top: 7px; }.player-leds button { height: 24px; padding: 0; border: 1px solid var(--line); border-radius: 3px; background: var(--surface-2); }.player-leds i { width: 6px; height: 6px; display: block; margin: auto; border-radius: 50%; background: #5b676a; }.player-leds button.is-on { border-color: #397f6e; background: rgba(57,221,179,.09); }.player-leds button.is-on i { background: white; box-shadow: 0 0 6px white; }.light-actions { justify-content: flex-end; gap: 8px; margin-top: 20px; padding-top: 17px; border-top: 1px solid var(--line); }
.status-link-toggle { display: flex; align-items: center; gap: 9px; margin-top: 17px; color: var(--muted); cursor: pointer; font-size: 10px; }.status-link-toggle input { position: absolute; opacity: 0; }.status-link-toggle strong { color: var(--ink); font-size: 10px; }.status-link-toggle input:checked + .switch-track { border-color: var(--mint-dark); background: rgba(57,221,179,.16); }.status-link-toggle input:checked + .switch-track i { transform: translateX(16px); background: var(--mint); }
.trigger-preview-panel, .trigger-controls-panel { padding: 20px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }.trigger-preview-panel { display: flex; flex-direction: column; }.trigger-usb-badge { padding: 4px 7px; border: 1px solid #3d6c62; border-radius: 3px; color: var(--mint); font: 9px Consolas,monospace; }.trigger-preview-stage { display: grid; align-content: center; gap: 42px; min-height: 370px; padding: 28px 7%; }.trigger-preview-head, .trigger-control-head, .trigger-preset-row, .trigger-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; }.trigger-preview-head strong { color: var(--mint); font: 17px Consolas,monospace; }.trigger-preview-head span, .trigger-control-head output { color: var(--muted); font-size: 9px; }.trigger-rail { height: 30px; position: relative; margin-top: 14px; border: 1px solid var(--line-strong); border-radius: 4px; background: #0d1214; overflow: hidden; }.trigger-rail::after { content: ""; position: absolute; inset: 0; background: repeating-linear-gradient(90deg, transparent 0 calc(10% - 1px), rgba(255,255,255,.08) calc(10% - 1px) 10%); pointer-events: none; }.trigger-resistance { height: 100%; position: absolute; left: var(--trigger-start,30%); right: calc(100% - var(--trigger-end,60%)); background: rgba(57,221,179,.2); box-shadow: inset 0 -3px 0 var(--mint); }.trigger-break { width: 3px; height: 100%; position: absolute; left: var(--trigger-end,60%); z-index: 2; background: var(--amber); box-shadow: 0 0 9px rgba(242,200,75,.75); }.trigger-current { width: 3px; height: 100%; position: absolute; left: var(--trigger-current,0%); z-index: 3; background: white; box-shadow: 0 0 8px white; transition: left .06s linear; }.trigger-preview[data-mode="off"] .trigger-resistance, .trigger-preview[data-mode="off"] .trigger-break, .trigger-preview[data-mode="feedback"] .trigger-break { display: none; }.trigger-preview[data-mode="feedback"] .trigger-resistance { right: 0; }.trigger-scale { display: flex; justify-content: space-between; margin-top: 6px; color: #6f7b7e; font: 8px Consolas,monospace; }.trigger-legend { display: flex; gap: 20px; padding-top: 16px; border-top: 1px solid var(--line); color: var(--muted); font-size: 8px; }.trigger-legend span { display: flex; align-items: center; gap: 6px; }.trigger-legend i { width: 13px; height: 3px; display: inline-block; }.legend-live { background: white; }.legend-zone { background: var(--mint); }.legend-break { background: var(--amber); }
.trigger-preset-row { min-height: 44px; padding-bottom: 16px; border-bottom: 1px solid var(--line); }.trigger-control-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; margin-top: 16px; }.trigger-control { min-width: 0; padding: 14px; border: 1px solid var(--line); border-radius: 5px; background: #101517; }.trigger-control-head strong { color: var(--ink); font: 16px Consolas,monospace; }.trigger-mode { margin-top: 13px; }.trigger-mode button { font-size: 9px; }.trigger-range-row { display: grid; grid-template-columns: 1fr auto; gap: 8px; margin-top: 18px; color: var(--muted); font-size: 9px; }.trigger-range-row output { color: var(--mint); font: 9px Consolas,monospace; }.trigger-range-row input { grid-column: 1 / 3; }.trigger-control[data-mode="off"] .trigger-range-row { opacity: .3; pointer-events: none; }.trigger-control:not([data-mode="weapon"]) .trigger-end-row { opacity: .3; pointer-events: none; }.trigger-actions { justify-content: flex-end; margin-top: 20px; padding-top: 17px; border-top: 1px solid var(--line); }
.activity-bar { justify-content: space-between; gap: 20px; padding: 0 22px; border-top: 1px solid var(--line); color: var(--muted); background: #101517; font-size: 9px; }.activity-bar > div { min-width: 0; gap: 12px; }.activity-label { color: var(--mint); font-weight: 800; letter-spacing: .7px; }.activity-bar strong { overflow: hidden; color: var(--muted); font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }.activity-bar time { flex: 0 0 auto; font-family: Consolas,monospace; }
.message-dialog { width: min(410px,calc(100vw - 30px)); padding: 23px; border: 1px solid var(--line-strong); border-radius: 6px; color: var(--ink); background: var(--surface-2); box-shadow: 0 28px 70px rgba(0,0,0,.58); }.message-dialog::backdrop { background: rgba(0,0,0,.65); backdrop-filter: blur(3px); }.message-dialog h2 { font-size: 20px; }.message-dialog p:not(.eyebrow) { margin: 12px 0 20px; color: var(--muted); font-size: 12px; line-height: 1.6; }
@media (max-width: 1050px) {
.mapping-workspace, .touchpad-workspace, .lighting-workspace, .trigger-workspace { grid-template-columns: 1fr; }
.mapping-list { height: 430px; }
.controller-visual { height: auto; }
}
@media (max-width: 720px) {
.app-shell { grid-template-rows: 64px 1fr 36px; }.topbar { padding: 0 14px; }.brand-mark { display: none; }.brand-lockup .eyebrow { display: none; }.header-actions { gap: 10px; }.connection-pill { display: none; }.master-switch > span:first-child { display: none; }
.hub-layout { display: flex; flex-direction: column; }.sidebar { min-height: auto; flex: 0 0 auto; padding: 8px 12px; border-right: 0; border-bottom: 1px solid var(--line); }.hub-nav { grid-template-columns: repeat(4,1fr); }.nav-item { justify-content: center; min-height: 38px; padding-inline: 5px; font-size: 9px; }.nav-icon { width: 15px; font-size: 13px; }.device-card, .sidebar-footer { display: none; }.main-stage { flex: 1 1 auto; height: auto; }
.view { padding: 19px 12px 24px; }.view-header { align-items: flex-end; }.view-header h2 { font-size: 19px; }.profile-controls label { display: none; }.profile-controls select { min-width: 130px; max-width: 145px; }
.controller-monitor, .mapping-panel, .touchpad-monitor-panel, .touchpad-controls-panel, .light-preview-panel, .light-controls-panel, .trigger-preview-panel, .trigger-controls-panel { padding: 15px; }.mapping-workspace, .touchpad-workspace, .lighting-workspace, .trigger-workspace { gap: 12px; }
.controller-visual { height: auto; }.twin-node { transform: translate(-50%, -50%) scale(.78); }.twin-node kbd { max-width: 78px; font-size: 6px; }
.twin-readout { grid-template-columns: auto 1fr; gap: 5px 10px; }.twin-readout kbd { grid-column: 1 / 3; }
.axis-monitor strong { font-size: 9px; }.mapping-filter button { font-size: 8px; }.mapping-list { height: 390px; }.mapping-row { grid-template-columns: 1fr minmax(120px,1.2fr) 24px; }
.light-preview { min-height: 260px; }.trigger-preview-stage { min-height: 260px; }.color-control-grid { grid-template-columns: 145px 1fr; gap: 10px; }.color-wheel-wrap canvas { width: 130px; height: 130px; }.swatches { gap: 5px; }.swatch { width: 19px; height: 19px; }.activity-bar { padding: 0 12px; }
.light-telemetry div { padding: 11px 5px 0; }.light-telemetry strong { font-size: 9px; }
}
@media (max-width: 430px) {
.profile-controls select { min-width: 112px; width: 112px; }.controller-visual { height: auto; }.twin-node { transform: translate(-50%, -50%) scale(.64); }.axis-monitor div { padding: 10px 5px; }.pressed-strip { padding-top: 8px; }.touchpad-route-list > div { grid-template-columns: 30px 1fr; }.touchpad-route-list kbd { grid-column: 2; padding-bottom: 10px; }.color-control-grid, .trigger-control-grid { grid-template-columns: 1fr; }.color-fields { width: 100%; }.light-preview { min-height: 220px; }.trigger-preview-stage { gap: 28px; padding-inline: 2%; }.codex-state-row { grid-template-columns: 8px 1fr; padding: 9px 6px; }.codex-state-row b { display: none; }.codex-state-row span:nth-child(3) { grid-column: 1 / 3; }.codex-current-state { grid-template-columns: 8px 1fr; }.codex-current-state small { grid-column: 2; max-width: none; text-align: left; }
}
@media (prefers-reduced-motion: reduce) { *,*::before,*::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; } }