@jossuealcala/madre 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +281 -0
- package/bin/madre.mjs +134 -0
- package/docs/madre-banner.svg +25 -0
- package/package.json +63 -0
- package/public/app.js +4031 -0
- package/public/brands.js +59 -0
- package/public/index.html +231 -0
- package/public/styles.css +976 -0
- package/public/troubleshooting.js +460 -0
- package/src/adapters/claude.mjs +105 -0
- package/src/adapters/codex.mjs +84 -0
- package/src/adapters/gemini.mjs +335 -0
- package/src/adapters/opencode.mjs +148 -0
- package/src/adapters/process.mjs +132 -0
- package/src/ashcode.mjs +64 -0
- package/src/auth-probe.mjs +145 -0
- package/src/capabilities.mjs +126 -0
- package/src/checkpoint.mjs +106 -0
- package/src/cli-args.mjs +38 -0
- package/src/commands.mjs +98 -0
- package/src/config.mjs +59 -0
- package/src/conversation-context.mjs +59 -0
- package/src/directives.mjs +70 -0
- package/src/distiller.mjs +78 -0
- package/src/embeddings.mjs +80 -0
- package/src/event-store.mjs +152 -0
- package/src/extensions.mjs +263 -0
- package/src/files.mjs +177 -0
- package/src/image-studio.mjs +25 -0
- package/src/lease.mjs +83 -0
- package/src/mcp/image-server.mjs +169 -0
- package/src/mcp/memory-server.mjs +221 -0
- package/src/memory-tools.mjs +34 -0
- package/src/memory.mjs +543 -0
- package/src/models.mjs +78 -0
- package/src/mother.mjs +163 -0
- package/src/quota-monitor.mjs +119 -0
- package/src/quota-sources.mjs +161 -0
- package/src/room.mjs +1159 -0
- package/src/router.mjs +13 -0
- package/src/runtime-detection.mjs +85 -0
- package/src/server.mjs +693 -0
- package/src/setup.mjs +192 -0
- package/src/usage-sentinel.mjs +65 -0
|
@@ -0,0 +1,976 @@
|
|
|
1
|
+
/* MADRE — a conversation, not a log.
|
|
2
|
+
iMessage for the dialogue, a terminal for the metadata, MOTHER for the mood. */
|
|
3
|
+
|
|
4
|
+
:root {
|
|
5
|
+
color-scheme: dark;
|
|
6
|
+
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", Inter, "Segoe UI", sans-serif;
|
|
7
|
+
--mono: "SF Mono", ui-monospace, Menlo, Consolas, monospace;
|
|
8
|
+
|
|
9
|
+
--bg: #050605;
|
|
10
|
+
--bg-2: #0b0d0b;
|
|
11
|
+
--panel: #101310;
|
|
12
|
+
--panel-2: #171b17;
|
|
13
|
+
--line: rgba(255, 255, 255, .07);
|
|
14
|
+
--line-2: rgba(255, 255, 255, .13);
|
|
15
|
+
--text: #eef1ea;
|
|
16
|
+
--text-2: #9aa197;
|
|
17
|
+
--text-3: #626a5f;
|
|
18
|
+
|
|
19
|
+
--phosphor: #9bff66; /* MOTHER */
|
|
20
|
+
--brew: #28fe14; /* ORDER 937: Terminal.app 'Homebrew' green */
|
|
21
|
+
--brew-ink: #041004;
|
|
22
|
+
--phosphor-ink: #0a1405;
|
|
23
|
+
--accent: var(--phosphor);
|
|
24
|
+
--accent-ink: var(--phosphor-ink);
|
|
25
|
+
|
|
26
|
+
--bubble: #1c201c; /* agent bubble */
|
|
27
|
+
--bubble-ink: #eef1ea;
|
|
28
|
+
--user: var(--phosphor); /* user bubble */
|
|
29
|
+
--user-ink: var(--phosphor-ink);
|
|
30
|
+
|
|
31
|
+
--danger: #ff7b72;
|
|
32
|
+
--warn: #ffd166;
|
|
33
|
+
--crit: #ff8a7a;
|
|
34
|
+
--terror: #ff2a1f; /* MOTHER, when she stops being polite */
|
|
35
|
+
--shadow: 0 1px 0 rgba(255,255,255,.03) inset, 0 12px 40px rgba(0,0,0,.45);
|
|
36
|
+
|
|
37
|
+
/* Permission modes: one colour each, read by the chip, the field, the send button and the menu. */
|
|
38
|
+
--mode-0: #8d978c; --mode-0-ink: #0b0d0b; /* GHOST · smoke */
|
|
39
|
+
--mode-1: var(--phosphor); --mode-1-ink: var(--phosphor-ink); /* EXCHANGE · phosphor */
|
|
40
|
+
--mode-2: #ffb000; --mode-2-ink: #1a1000; /* CREATE · amber phosphor */
|
|
41
|
+
--mode-3: var(--terror); --mode-3-ink: #fff3f1; /* CONTROL · the red screen */
|
|
42
|
+
}
|
|
43
|
+
@media (prefers-color-scheme: light) {
|
|
44
|
+
:root:not([data-theme="dark"]) {
|
|
45
|
+
color-scheme: light;
|
|
46
|
+
--bg: #f4f5f2;
|
|
47
|
+
--bg-2: #ffffff;
|
|
48
|
+
--panel: #ffffff;
|
|
49
|
+
--panel-2: #eef0ea;
|
|
50
|
+
--line: rgba(0, 0, 0, .07);
|
|
51
|
+
--line-2: rgba(0, 0, 0, .13);
|
|
52
|
+
--text: #121512;
|
|
53
|
+
--text-2: #5a615a;
|
|
54
|
+
--text-3: #8b928a;
|
|
55
|
+
--phosphor: #2f8a1c;
|
|
56
|
+
--brew: #178f0c;
|
|
57
|
+
--brew-ink: #ffffff;
|
|
58
|
+
--phosphor-ink: #ffffff;
|
|
59
|
+
--bubble: #e9ebe6;
|
|
60
|
+
--bubble-ink: #121512;
|
|
61
|
+
--danger: #b3261e;
|
|
62
|
+
--warn: #8a6a00;
|
|
63
|
+
--crit: #a1301f;
|
|
64
|
+
--shadow: 0 12px 40px rgba(0,0,0,.08);
|
|
65
|
+
--mode-0: #6f786e; --mode-0-ink: #ffffff;
|
|
66
|
+
--mode-2: #a06e00; --mode-2-ink: #ffffff;
|
|
67
|
+
--mode-3: #d81b12; --mode-3-ink: #ffffff;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
:root[data-theme="light"] {
|
|
71
|
+
color-scheme: light;
|
|
72
|
+
--bg: #f4f5f2;
|
|
73
|
+
--bg-2: #ffffff;
|
|
74
|
+
--panel: #ffffff;
|
|
75
|
+
--panel-2: #eef0ea;
|
|
76
|
+
--line: rgba(0, 0, 0, .07);
|
|
77
|
+
--line-2: rgba(0, 0, 0, .13);
|
|
78
|
+
--text: #121512;
|
|
79
|
+
--text-2: #5a615a;
|
|
80
|
+
--text-3: #8b928a;
|
|
81
|
+
--phosphor: #2f8a1c;
|
|
82
|
+
--brew: #178f0c;
|
|
83
|
+
--brew-ink: #ffffff;
|
|
84
|
+
--phosphor-ink: #ffffff;
|
|
85
|
+
--bubble: #e9ebe6;
|
|
86
|
+
--bubble-ink: #121512;
|
|
87
|
+
--danger: #b3261e;
|
|
88
|
+
--warn: #8a6a00;
|
|
89
|
+
--crit: #a1301f;
|
|
90
|
+
--shadow: 0 12px 40px rgba(0,0,0,.08);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
* { box-sizing: border-box; }
|
|
94
|
+
[hidden] { display: none !important; }
|
|
95
|
+
html, body { height: 100%; }
|
|
96
|
+
body {
|
|
97
|
+
margin: 0;
|
|
98
|
+
color: var(--text);
|
|
99
|
+
background:
|
|
100
|
+
linear-gradient(rgba(155,255,102,.035) 1px, transparent 1px) 0 0 / 100% 3px,
|
|
101
|
+
radial-gradient(ellipse at 50% -20%, var(--bg-2), var(--bg) 55%);
|
|
102
|
+
-webkit-font-smoothing: antialiased;
|
|
103
|
+
}
|
|
104
|
+
@media (prefers-color-scheme: light) { body { background: radial-gradient(ellipse at 50% -20%, var(--bg-2), var(--bg) 55%); } }
|
|
105
|
+
|
|
106
|
+
.shell {
|
|
107
|
+
--column: min(880px, 100% - 40px);
|
|
108
|
+
--gap: 12px;
|
|
109
|
+
height: 100dvh;
|
|
110
|
+
width: 100%;
|
|
111
|
+
display: grid;
|
|
112
|
+
grid-template-rows: auto 1fr auto auto auto;
|
|
113
|
+
}
|
|
114
|
+
.bar, .onboarding, .composer, .safety, .thread-inner { width: var(--column); margin-left: auto; margin-right: auto; }
|
|
115
|
+
.shell > .bar { grid-row: 1; } .shell > .onboarding { grid-row: 2; } .shell > .thread { grid-row: 3; } .shell > .composer { grid-row: 4; } .shell > .safety { grid-row: 5; }
|
|
116
|
+
.shell > .bar, .shell > .onboarding, .shell > .thread, .shell > .composer, .shell > .safety, .shell > .tree { grid-column: 1; }
|
|
117
|
+
.visually-hidden { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
|
|
118
|
+
|
|
119
|
+
/* ================= bar ================= */
|
|
120
|
+
.bar {
|
|
121
|
+
display: flex; align-items: center; gap: 18px;
|
|
122
|
+
padding: 18px 0 14px;
|
|
123
|
+
border-bottom: 1px solid var(--line);
|
|
124
|
+
font-family: var(--mono); font-size: 11px; letter-spacing: .04em;
|
|
125
|
+
color: var(--text-2);
|
|
126
|
+
}
|
|
127
|
+
.bar-left { display: flex; align-items: center; gap: 14px; min-width: 0; }
|
|
128
|
+
.brand { display: flex; align-items: center; gap: 10px; color: var(--text); font-weight: 700; letter-spacing: .22em; font-size: 11px; text-decoration: none; cursor: pointer; }
|
|
129
|
+
.brand:hover .brand-mark { filter: drop-shadow(0 0 10px var(--phosphor)); } .brand:hover .brand-word { color: var(--phosphor); }
|
|
130
|
+
.brand-mark { width: 64px; height: 18px; color: var(--phosphor); overflow: visible; filter: drop-shadow(0 0 6px color-mix(in srgb, var(--phosphor) 55%, transparent)); }
|
|
131
|
+
.brand-mark .beat { stroke-dasharray: 100; stroke-dashoffset: 100; animation: beat-draw 1.1s cubic-bezier(.2, .7, .2, 1) .15s forwards; }
|
|
132
|
+
.brand-mark .beat-dot { opacity: 0; transform-origin: 60px 10px; transform-box: view-box; animation: beat-dot 1s ease-out 1.05s forwards, beat-idle 2.6s ease-in-out 2.4s infinite; }
|
|
133
|
+
.brand-word { opacity: 0; transform: translateX(-6px); animation: word-in .6s ease-out 1.35s forwards; }
|
|
134
|
+
@keyframes beat-draw { to { stroke-dashoffset: 0; } }
|
|
135
|
+
@keyframes beat-dot { 0% { opacity: 0; transform: scale(.2); } 35% { opacity: 1; transform: scale(1.9); } 100% { opacity: 1; transform: scale(1); } }
|
|
136
|
+
@keyframes beat-idle { 0%, 100% { opacity: 1; transform: scale(1); } 14% { transform: scale(1.35); } 28% { transform: scale(1); } 42% { transform: scale(1.2); } 56% { transform: scale(1); } }
|
|
137
|
+
@keyframes word-in { to { opacity: 1; transform: none; } }
|
|
138
|
+
@media (prefers-reduced-motion: reduce) {
|
|
139
|
+
.brand-mark .beat { animation: none; stroke-dashoffset: 0; }
|
|
140
|
+
.brand-mark .beat-dot { animation: none; opacity: 1; }
|
|
141
|
+
.brand-word { animation: none; opacity: 1; transform: none; }
|
|
142
|
+
}
|
|
143
|
+
.project { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-3); }
|
|
144
|
+
.project::before { content: "/ "; }
|
|
145
|
+
.agents { display: flex; gap: 8px; margin-left: auto; }
|
|
146
|
+
.connection { display: inline-flex; align-items: center; gap: 6px; color: var(--text-3); text-transform: uppercase; font-size: 10px; }
|
|
147
|
+
.connection-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--text-3); }
|
|
148
|
+
.connection[data-state="live"] .connection-dot { background: var(--phosphor); box-shadow: 0 0 10px var(--phosphor); }
|
|
149
|
+
.connection[data-state="reconnecting"] .connection-dot { background: var(--warn); animation: blink 1s infinite; }
|
|
150
|
+
@keyframes blink { 50% { opacity: .2; } }
|
|
151
|
+
|
|
152
|
+
/* ================= avatars ================= */
|
|
153
|
+
.avatar {
|
|
154
|
+
--size: 28px; --pct: 0;
|
|
155
|
+
position: relative; display: inline-grid; place-items: center;
|
|
156
|
+
width: var(--size); height: var(--size); border-radius: 50%;
|
|
157
|
+
color: var(--agent); background: color-mix(in srgb, var(--agent) 14%, transparent);
|
|
158
|
+
flex: none;
|
|
159
|
+
}
|
|
160
|
+
.avatar svg { width: 58%; height: 58%; display: block; }
|
|
161
|
+
.avatar.ring::before {
|
|
162
|
+
content: ""; position: absolute; inset: -3px; border-radius: 50%;
|
|
163
|
+
background: conic-gradient(var(--agent) calc(var(--pct) * 1%), var(--line-2) 0);
|
|
164
|
+
-webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 1.5px));
|
|
165
|
+
mask: radial-gradient(farthest-side, transparent calc(100% - 2px), #000 calc(100% - 1.5px));
|
|
166
|
+
opacity: .9;
|
|
167
|
+
}
|
|
168
|
+
.avatar.ring.hot::before { background: conic-gradient(var(--crit) calc(var(--pct) * 1%), var(--line-2) 0); }
|
|
169
|
+
.avatar.offline { color: var(--text-3); background: transparent; border: 1px dashed var(--line-2); }
|
|
170
|
+
.avatar.detected { color: var(--text-2); background: transparent; border: 1px solid var(--line-2); }
|
|
171
|
+
.avatar.gradient svg { color: #fff; }
|
|
172
|
+
.avatar.gradient { background: var(--agent-gradient, var(--agent)); color: #fff; }
|
|
173
|
+
.agents .avatar { cursor: default; }
|
|
174
|
+
|
|
175
|
+
/* ================= thread ================= */
|
|
176
|
+
.thread {
|
|
177
|
+
overflow-y: auto;
|
|
178
|
+
scroll-behavior: smooth;
|
|
179
|
+
overscroll-behavior: contain;
|
|
180
|
+
}
|
|
181
|
+
.thread-inner {
|
|
182
|
+
min-height: 100%;
|
|
183
|
+
display: flex; flex-direction: column; gap: var(--gap);
|
|
184
|
+
padding: 36px 0 28px;
|
|
185
|
+
}
|
|
186
|
+
.empty { margin: auto; text-align: center; color: var(--text-3); display: grid; gap: 10px; max-width: 420px; justify-items: center; }
|
|
187
|
+
.empty-mark { width: 144px; height: 40px; color: var(--phosphor); margin-bottom: 6px; overflow: visible; filter: drop-shadow(0 0 10px color-mix(in srgb, var(--phosphor) 55%, transparent)); }
|
|
188
|
+
.empty-mark .beat { stroke-dasharray: 100; stroke-dashoffset: 100; animation: beat-draw 1.1s cubic-bezier(.2, .7, .2, 1) .15s forwards; }
|
|
189
|
+
.empty-mark .beat-dot { opacity: 0; transform-origin: 60px 10px; transform-box: view-box; animation: beat-dot 1s ease-out 1.05s forwards, beat-idle 2.6s ease-in-out 2.4s infinite; }
|
|
190
|
+
.empty strong { color: var(--text); font-size: 17px; letter-spacing: -.01em; font-weight: 600; }
|
|
191
|
+
.empty span { font-size: 13px; line-height: 1.5; }
|
|
192
|
+
code { font-family: var(--mono); font-size: .9em; color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); padding: 2px 5px; border-radius: 5px; }
|
|
193
|
+
|
|
194
|
+
/* rows */
|
|
195
|
+
.row { display: grid; grid-template-columns: 28px 1fr; gap: 12px; align-items: end; max-width: 76%; margin-top: 14px; }
|
|
196
|
+
.row.compact { margin-top: 0; }
|
|
197
|
+
.row.compact .avatar { visibility: hidden; }
|
|
198
|
+
.row.user { grid-template-columns: 1fr; align-self: flex-end; justify-items: end; }
|
|
199
|
+
.row .col { display: grid; gap: 6px; min-width: 0; }
|
|
200
|
+
.who { font-family: var(--mono); font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--agent, var(--text-2)); margin: 0 0 2px 12px; display: flex; gap: 10px; align-items: baseline; }
|
|
201
|
+
.user .who { color: var(--text-3); margin: 0 12px 2px 0; justify-content: flex-end; }
|
|
202
|
+
.user .who b { color: var(--phosphor); font-weight: 600; }
|
|
203
|
+
.user.expendable .who b { color: var(--crit); }
|
|
204
|
+
.who .reply { color: var(--text-3); letter-spacing: 0; text-transform: none; font-style: italic; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 320px; }
|
|
205
|
+
.who .badge { color: var(--text-3); border: 1px solid var(--line-2); border-radius: 999px; padding: 1px 6px; letter-spacing: .08em; }
|
|
206
|
+
|
|
207
|
+
.bubble {
|
|
208
|
+
position: relative;
|
|
209
|
+
line-height: 1.5; font-size: 15px;
|
|
210
|
+
color: var(--bubble-ink); background: var(--bubble);
|
|
211
|
+
border-radius: 20px; padding: 12px 16px;
|
|
212
|
+
overflow-wrap: anywhere;
|
|
213
|
+
box-shadow: var(--shadow);
|
|
214
|
+
}
|
|
215
|
+
.assistant .bubble { border-bottom-left-radius: 6px; }
|
|
216
|
+
.user .bubble { background: var(--user); color: var(--user-ink); border-bottom-right-radius: 6px; white-space: pre-wrap; box-shadow: 0 8px 30px color-mix(in srgb, var(--user) 25%, transparent); }
|
|
217
|
+
.bubble > :first-child { margin-top: 0; }
|
|
218
|
+
.bubble > :last-child { margin-bottom: 0; }
|
|
219
|
+
.bubble p { margin: 0 0 9px; }
|
|
220
|
+
.bubble h1, .bubble h2, .bubble h3, .bubble h4 { margin: 12px 0 6px; font-size: 1em; font-weight: 650; letter-spacing: -.01em; }
|
|
221
|
+
.bubble h1 { font-size: 1.1em; }
|
|
222
|
+
.bubble ul, .bubble ol { margin: 0 0 9px; padding-left: 20px; }
|
|
223
|
+
.bubble li { margin: 3px 0; }
|
|
224
|
+
.bubble blockquote { margin: 0 0 9px; padding: 2px 12px; border-left: 2px solid var(--line-2); color: var(--text-2); }
|
|
225
|
+
.bubble a { color: var(--agent, var(--phosphor)); text-decoration-thickness: 1px; }
|
|
226
|
+
.bubble hr { border: 0; border-top: 1px solid var(--line-2); margin: 10px 0; }
|
|
227
|
+
.bubble code { color: var(--agent, var(--phosphor)); background: color-mix(in srgb, var(--agent, var(--phosphor)) 12%, transparent); }
|
|
228
|
+
.user .bubble code { color: inherit; background: rgba(0,0,0,.12); }
|
|
229
|
+
|
|
230
|
+
/* code blocks: the terminal inside the message */
|
|
231
|
+
.codeblock { position: relative; margin: 6px -6px 9px; border-radius: 12px; background: var(--bg); border: 1px solid var(--line-2); overflow: hidden; }
|
|
232
|
+
.codeblock pre { margin: 0; padding: 12px 14px; overflow-x: auto; font-family: var(--mono); font-size: 12.5px; line-height: 1.55; color: var(--phosphor); }
|
|
233
|
+
.codeblock code { background: transparent; color: inherit; padding: 0; font-size: inherit; }
|
|
234
|
+
.codeblock .lang { position: absolute; top: 7px; left: 12px; font-family: var(--mono); font-size: 9.5px; color: var(--text-3); letter-spacing: .14em; text-transform: uppercase; }
|
|
235
|
+
.codeblock .copy { position: absolute; top: 5px; right: 6px; height: 22px; padding: 0 8px; font-family: var(--mono); font-size: 10px; letter-spacing: .06em; border-radius: 6px; background: transparent; color: var(--text-3); border: 1px solid var(--line-2); cursor: pointer; }
|
|
236
|
+
.codeblock .copy:hover { color: var(--text); border-color: var(--text-3); }
|
|
237
|
+
.codeblock.has-lang pre { padding-top: 26px; }
|
|
238
|
+
|
|
239
|
+
/* delivery line under a bubble */
|
|
240
|
+
.stamp { font-family: var(--mono); font-size: 10px; color: var(--text-3); letter-spacing: .04em; display: flex; gap: 12px; margin: 2px 12px 0; }
|
|
241
|
+
.user.expendable .stamp .to { color: var(--crit); }
|
|
242
|
+
.user.expendable .bubble { animation: phosphor-flicker 1.1s steps(2, end) 1; }
|
|
243
|
+
@keyframes phosphor-flicker { 0%, 100% { filter: none; } 20% { filter: brightness(1.6) saturate(.4); } 40% { filter: brightness(.7); } 60% { filter: brightness(1.3); } }
|
|
244
|
+
.user .stamp { justify-content: flex-end; }
|
|
245
|
+
.stamp .to { color: var(--agent, var(--text-3)); }
|
|
246
|
+
|
|
247
|
+
/* typing indicator */
|
|
248
|
+
.row.thinking .bubble { display: inline-flex; gap: 5px; padding: 10px 14px; width: max-content; max-width: 100%; align-items: center; }
|
|
249
|
+
.row.thinking .status { font-size: 13.5px; color: var(--text-2); margin-left: 8px; font-style: italic; animation: status-in .35s ease; white-space: nowrap; }
|
|
250
|
+
.row.thinking .status::after { content: ''; display: inline-block; width: 2px; height: 14px; margin-left: 3px; vertical-align: -2px; background: var(--agent, var(--text-2)); animation: cursor-blink 1s steps(1) infinite; }
|
|
251
|
+
@keyframes status-in { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } }
|
|
252
|
+
@keyframes cursor-blink { 50% { opacity: 0; } }
|
|
253
|
+
.row.thinking .elapsed { font-family: var(--mono); font-size: 10px; letter-spacing: .08em; color: var(--text-3); margin-left: 8px; }
|
|
254
|
+
.row.thinking .elapsed.late { color: var(--warn); }
|
|
255
|
+
.row.thinking i { width: 7px; height: 7px; border-radius: 50%; background: var(--agent, var(--text-2)); animation: bounce 1.2s infinite; opacity: .5; }
|
|
256
|
+
.row.thinking i:nth-child(2) { animation-delay: .18s; } .row.thinking i:nth-child(3) { animation-delay: .36s; }
|
|
257
|
+
@keyframes bounce { 0%, 80%, 100% { transform: translateY(0); opacity: .35; } 40% { transform: translateY(-4px); opacity: 1; } }
|
|
258
|
+
|
|
259
|
+
/* system lines: handoffs, sentinel, failures — MOTHER speaks in small caps */
|
|
260
|
+
.system {
|
|
261
|
+
align-self: center; text-align: center; max-width: 92%;
|
|
262
|
+
overflow-wrap: anywhere;
|
|
263
|
+
margin: 22px 0 8px;
|
|
264
|
+
font-family: var(--mono); font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase;
|
|
265
|
+
color: var(--text-3); line-height: 1.6;
|
|
266
|
+
}
|
|
267
|
+
.system b { font-weight: 600; color: var(--text-2); }
|
|
268
|
+
.system .from { color: var(--from, var(--text-2)); } .system .to { color: var(--to, var(--text-2)); }
|
|
269
|
+
.system.warn { color: var(--warn); }
|
|
270
|
+
.system.memory { color: var(--text-3); } .system.memory .who { color: var(--agent, var(--text-2)); }
|
|
271
|
+
|
|
272
|
+
/* NOSTROMO: the archive as a small solar system. One colour per kind of memory. */
|
|
273
|
+
:root { --mem-decision: #ffb000; --mem-fact: #9bff66; --mem-preference: #d78cff; --mem-question: #5fd6ff; --nostromo-sun: #ff2a1f; }
|
|
274
|
+
.nostromo-button { color: var(--terror); border-color: color-mix(in srgb, var(--terror) 55%, transparent); }
|
|
275
|
+
.nostromo-button:hover { background: color-mix(in srgb, var(--terror) 14%, transparent); }
|
|
276
|
+
dialog.nostromo { color: #eef1ea; }
|
|
277
|
+
dialog.nostromo::backdrop { background: #000; }
|
|
278
|
+
.nostromo-frame { --ph: #ffb4ad; --ph-dim: rgba(255, 42, 31, .55); --ph-faint: rgba(255, 42, 31, .16); position: relative; height: 100%; background: #030203; font-family: var(--mono); overflow: hidden; display: grid; grid-template-rows: auto 1fr; }
|
|
279
|
+
.nostromo-head { display: grid; grid-template-columns: auto 1fr auto auto auto; gap: 18px; align-items: center; padding: 18px 26px 14px; border-bottom: 1px solid var(--ph-faint); color: var(--ph); position: relative; z-index: 2; }
|
|
280
|
+
.nostromo-head .mother-title { color: var(--nostromo-sun); text-shadow: 0 0 18px color-mix(in srgb, var(--nostromo-sun) 60%, transparent); }
|
|
281
|
+
.nostromo-head .mother-sub { color: var(--ph-dim); }
|
|
282
|
+
.nostromo-legend { display: flex; gap: 8px; }
|
|
283
|
+
.nostromo-legend .k { font-size: 9px; letter-spacing: .16em; padding: 3px 8px; border: 1px solid; border-radius: 999px; }
|
|
284
|
+
.nostromo-legend .k.decision { color: var(--mem-decision); } .nostromo-legend .k.fact { color: var(--mem-fact); } .nostromo-legend .k.preference { color: var(--mem-preference); } .nostromo-legend .k.question { color: var(--mem-question); }
|
|
285
|
+
.nostromo-frame .mother-close { color: var(--ph); border-color: var(--ph-dim); }
|
|
286
|
+
.nostromo-frame .mother-close:hover { background: var(--ph-faint); }
|
|
287
|
+
.nostromo-canvas { display: block; width: 100%; height: 100%; cursor: crosshair; }
|
|
288
|
+
.nostromo-canvas.over { cursor: pointer; }
|
|
289
|
+
.nostromo-canvas.dragging { cursor: grabbing; }
|
|
290
|
+
.nostromo-help { position: absolute; left: 26px; bottom: 16px; margin: 0; font-size: 9px; letter-spacing: .2em; color: var(--ph-dim); pointer-events: none; }
|
|
291
|
+
.nostromo-frame.shake { animation: override-shake .45s ease 2; }
|
|
292
|
+
/* MOTHER's answer when touched: a klaxon over everything, then silence. */
|
|
293
|
+
.nostromo-alert { position: absolute; inset: 0; z-index: 5; display: grid; place-items: center; cursor: pointer; }
|
|
294
|
+
.nostromo-alert .klaxon { position: absolute; inset: 0; background: radial-gradient(ellipse at center, rgba(255, 42, 31, .0) 30%, rgba(255, 42, 31, .55) 100%); animation: klaxon .55s steps(2) infinite; }
|
|
295
|
+
.nostromo-alert .panel { position: relative; padding: 30px 46px; border: 2px solid var(--nostromo-sun); background: rgba(20, 0, 2, .92); box-shadow: 0 0 0 6px rgba(255, 42, 31, .25), 0 0 120px rgba(255, 42, 31, .6); text-align: center; display: grid; gap: 10px; animation: alert-in .25s ease-out; max-width: min(720px, 92vw); }
|
|
296
|
+
.nostromo-alert .warn { font-size: clamp(22px, 4vw, 40px); font-weight: 700; letter-spacing: .32em; color: var(--nostromo-sun); text-shadow: 0 0 24px var(--nostromo-sun); animation: klaxon .55s steps(2) infinite; }
|
|
297
|
+
.nostromo-alert .line { font-size: clamp(13px, 1.8vw, 18px); letter-spacing: .24em; color: #ffd9d4; }
|
|
298
|
+
.nostromo-alert .line.big { font-size: clamp(16px, 2.4vw, 24px); font-weight: 700; color: #fff; text-shadow: 0 0 18px var(--nostromo-sun); margin-top: 6px; }
|
|
299
|
+
.nostromo-alert .sub { margin-top: 8px; font-size: 9.5px; letter-spacing: .28em; color: var(--ph-dim); }
|
|
300
|
+
@keyframes klaxon { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
|
|
301
|
+
@keyframes alert-in { from { transform: scale(.92); opacity: 0; } to { transform: none; opacity: 1; } }
|
|
302
|
+
@media (prefers-reduced-motion: reduce) { .nostromo-alert .klaxon, .nostromo-alert .warn, .nostromo-frame.shake { animation: none; } }
|
|
303
|
+
.nostromo-card { position: absolute; right: 26px; top: 96px; width: min(380px, calc(100vw - 52px)); padding: 18px 20px 16px; background: rgba(6, 3, 4, .92); border: 1px solid var(--kind, var(--ph-dim)); box-shadow: 0 0 0 1px rgba(0,0,0,.6), 0 0 40px color-mix(in srgb, var(--kind, var(--nostromo-sun)) 25%, transparent); backdrop-filter: blur(8px); display: grid; gap: 12px; z-index: 3; animation: mother-on .3s ease; }
|
|
304
|
+
.nostromo-card header { display: flex; justify-content: space-between; align-items: center; }
|
|
305
|
+
.nostromo-card .kind { font-size: 10px; letter-spacing: .22em; color: var(--kind, var(--ph)); text-shadow: 0 0 10px color-mix(in srgb, var(--kind, var(--ph)) 55%, transparent); }
|
|
306
|
+
.nostromo-card .text { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", Inter, sans-serif; font-size: 14px; line-height: 1.5; color: #eef1ea; }
|
|
307
|
+
.nostromo-card .meta { margin: 0; display: grid; grid-template-columns: auto 1fr; gap: 4px 14px; font-size: 10px; letter-spacing: .1em; }
|
|
308
|
+
.nostromo-card .meta dt { color: var(--ph-dim); } .nostromo-card .meta dd { margin: 0; color: #c9c2bf; }
|
|
309
|
+
.nostromo-card .forget { border: 1px solid var(--nostromo-sun); background: transparent; color: var(--nostromo-sun); font: inherit; font-size: 10px; letter-spacing: .18em; padding: 9px 12px; cursor: pointer; transition: background .2s; }
|
|
310
|
+
.nostromo-card .forget:hover { background: color-mix(in srgb, var(--nostromo-sun) 14%, transparent); }
|
|
311
|
+
.nostromo-card .forget.confirm { background: var(--nostromo-sun); color: #fff3f1; animation: blink 1s steps(1) infinite; }
|
|
312
|
+
.nostromo-card .forget:disabled { opacity: .5; cursor: default; animation: none; }
|
|
313
|
+
.nostromo-card .foot { margin: 0; font-size: 9px; letter-spacing: .1em; color: var(--ph-dim); line-height: 1.5; }
|
|
314
|
+
.nostromo-empty { position: absolute; inset: 50% 0 auto 0; margin: 0; text-align: center; font-size: 11px; letter-spacing: .22em; color: var(--ph-dim); }
|
|
315
|
+
@media (max-width: 720px) { .nostromo-head { grid-template-columns: auto 1fr auto; } .nostromo-legend { display: none; } .nostromo-card { right: 16px; left: 16px; width: auto; } }
|
|
316
|
+
.system.memory.forgotten { color: var(--terror); }
|
|
317
|
+
.system.mother-alert { display: grid; gap: 6px; justify-items: center; max-width: min(720px, 92%); padding: 12px 16px; border: 1px solid color-mix(in srgb, var(--terror) 60%, transparent); border-radius: 12px; background: color-mix(in srgb, var(--terror) 7%, transparent); color: var(--terror); text-shadow: 0 0 8px color-mix(in srgb, var(--terror) 45%, transparent); }
|
|
318
|
+
.system.mother-alert .head b { color: var(--terror); font-weight: 700; }
|
|
319
|
+
.system.mother-alert .clear { color: var(--text); text-shadow: none; text-transform: none; letter-spacing: 0; font-size: 12px; }
|
|
320
|
+
.system.mother-alert .code { font-family: var(--mono); font-size: 10px; letter-spacing: .08em; color: color-mix(in srgb, var(--terror) 75%, var(--text-2)); text-shadow: none; text-transform: none; word-break: break-all; line-height: 1.6; opacity: .9; }
|
|
321
|
+
/* The hint under a bubble when its agent saved a memory on request. */
|
|
322
|
+
.memory-hint { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 6px 12px 0; animation: hint-in .6s cubic-bezier(.2, .7, .2, 1) 1; }
|
|
323
|
+
.memory-hint .lead { font-family: var(--mono); font-size: 9.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--agent, var(--text-3)); }
|
|
324
|
+
.memory-hint .pill { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; border: 1px solid color-mix(in srgb, var(--kind) 55%, transparent); background: color-mix(in srgb, var(--kind) 8%, transparent); color: var(--text-2); font: inherit; font-size: 11px; padding: 3px 10px; border-radius: 999px; cursor: pointer; text-align: left; box-shadow: 0 0 0 0 color-mix(in srgb, var(--kind) 45%, transparent); animation: hint-glow 2.4s ease-out 1; transition: background .2s, color .2s; }
|
|
325
|
+
.memory-hint .pill b { font-family: var(--mono); font-size: 9px; letter-spacing: .16em; text-transform: uppercase; color: var(--kind); }
|
|
326
|
+
.memory-hint .pill:hover { background: color-mix(in srgb, var(--kind) 18%, transparent); color: var(--text); }
|
|
327
|
+
.memory-hint .more { font-family: var(--mono); font-size: 9.5px; color: var(--text-3); }
|
|
328
|
+
@keyframes hint-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
|
|
329
|
+
@keyframes hint-glow { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--kind) 55%, transparent); } 40% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--kind) 0%, transparent), 0 0 18px color-mix(in srgb, var(--kind) 45%, transparent); } 100% { box-shadow: 0 0 0 0 transparent; } }
|
|
330
|
+
@media (prefers-reduced-motion: reduce) { .memory-hint, .memory-hint .pill { animation: none; } }
|
|
331
|
+
.system.crit { color: var(--crit); }
|
|
332
|
+
.system.fail { color: var(--danger); text-transform: none; letter-spacing: 0; font-size: 11px; }
|
|
333
|
+
.system.fail .label { text-transform: uppercase; letter-spacing: .1em; font-size: 10px; display: block; opacity: .8; margin-bottom: 2px; }
|
|
334
|
+
.system.recovered { color: var(--text-3); }
|
|
335
|
+
.system.mother { color: var(--terror); text-shadow: 0 0 10px color-mix(in srgb, var(--terror) 70%, transparent), 0 0 28px color-mix(in srgb, var(--terror) 35%, transparent); letter-spacing: .16em; animation: terror-in 1.4s steps(3, end) 1; }
|
|
336
|
+
.system.mother b { color: var(--terror); }
|
|
337
|
+
@keyframes terror-in { 0% { opacity: 0; } 30% { opacity: 1; } 45% { opacity: .2; } 60% { opacity: 1; } 75% { opacity: .5; } 100% { opacity: 1; } }
|
|
338
|
+
.composer.expendable .crew-label { color: var(--terror); text-shadow: 0 0 8px color-mix(in srgb, var(--terror) 60%, transparent); }
|
|
339
|
+
.composer.expendable textarea::placeholder { color: color-mix(in srgb, var(--terror) 75%, transparent); }
|
|
340
|
+
.user.expendable .who b, .user.expendable .stamp .to { color: var(--terror); }
|
|
341
|
+
.mother-button.arming { color: var(--terror); border-color: var(--terror); box-shadow: 0 0 16px color-mix(in srgb, var(--terror) 35%, transparent); transition: color 3s linear, border-color 3s linear; }
|
|
342
|
+
.system .gauge { display: block; width: 220px; max-width: 100%; height: 2px; margin: 8px auto 0; background: color-mix(in srgb, currentColor 22%, transparent); position: relative; overflow: hidden; }
|
|
343
|
+
.system .gauge .now { position: absolute; inset: 0 auto 0 0; background: currentColor; }
|
|
344
|
+
.system .gauge .next { position: absolute; inset: 0 auto 0 0; background: repeating-linear-gradient(90deg, currentColor 0 2px, transparent 2px 5px); opacity: .55; }
|
|
345
|
+
|
|
346
|
+
/* ================= onboarding ================= */
|
|
347
|
+
.onboarding { border: 1px solid var(--line-2); background: var(--panel); border-radius: 16px; padding: 22px 24px; margin-bottom: 12px; }
|
|
348
|
+
.onboarding-eyebrow { margin: 0 0 10px; font-family: var(--mono); font-size: 10px; letter-spacing: .18em; color: var(--phosphor); }
|
|
349
|
+
.onboarding h2 { margin: 0 0 6px; font-size: 18px; letter-spacing: -.01em; font-weight: 600; }
|
|
350
|
+
.onboarding p { margin: 0 0 14px; color: var(--text-2); font-size: 13px; line-height: 1.5; }
|
|
351
|
+
.onboarding-list { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 6px; }
|
|
352
|
+
.onboarding-list li { display: grid; grid-template-columns: 28px 100px 1fr; gap: 12px; align-items: center; padding: 8px 10px; border: 1px solid var(--line); border-radius: 12px; font-size: 13px; }
|
|
353
|
+
.onboarding-list .name { font-weight: 600; color: var(--text); }
|
|
354
|
+
.onboarding-list .state { color: var(--text-2); font-size: 12.5px; }
|
|
355
|
+
.onboarding-list .state b { color: var(--text); font-weight: 600; }
|
|
356
|
+
.onboarding .hint { margin: 0; font-size: 12px; color: var(--text-3); }
|
|
357
|
+
|
|
358
|
+
/* ================= composer ================= */
|
|
359
|
+
.composer { display: grid; gap: 12px; padding: 14px 0 0; }
|
|
360
|
+
.composer[aria-disabled="true"] { opacity: .45; pointer-events: none; }
|
|
361
|
+
.picker { display: flex; gap: 8px; align-items: center; padding: 0 4px; }
|
|
362
|
+
.picker .pick { --size: 30px; cursor: pointer; border: 1px solid transparent; background: color-mix(in srgb, var(--agent) 10%, transparent); transition: transform .12s ease, box-shadow .12s ease; }
|
|
363
|
+
.picker .pick:hover { transform: translateY(-1px); }
|
|
364
|
+
.picker .pick[aria-checked="true"] { box-shadow: 0 0 0 2px var(--bg), 0 0 0 3.5px var(--agent); background: color-mix(in srgb, var(--agent) 22%, transparent); }
|
|
365
|
+
.picker .pick-label { font-family: var(--mono); font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--text-2); margin-left: 2px; }
|
|
366
|
+
.picker .pick-label b { color: var(--agent, var(--text)); font-weight: 600; }
|
|
367
|
+
.field { position: relative; display: grid; grid-template-columns: auto 1fr auto; gap: 10px; align-items: end; padding: 6px 6px 6px 18px; border: 1px solid var(--line-2); background: var(--panel); border-radius: 24px; }
|
|
368
|
+
.crew-label { align-self: center; font-family: var(--mono); font-size: 10px; letter-spacing: .18em; color: var(--text-3); white-space: nowrap; transition: color .4s ease; }
|
|
369
|
+
.field:focus-within .crew-label { color: var(--phosphor); }
|
|
370
|
+
.composer.expendable .crew-label { color: var(--crit); }
|
|
371
|
+
.composer.expendable textarea::placeholder { color: color-mix(in srgb, var(--crit) 70%, transparent); }
|
|
372
|
+
select, textarea, button { font: inherit; }
|
|
373
|
+
textarea { resize: none; min-height: 34px; max-height: 180px; padding: 7px 0; border: 0; outline: 0; color: var(--text); background: transparent; line-height: 1.4; font-size: 15px; }
|
|
374
|
+
textarea::placeholder { color: var(--text-3); }
|
|
375
|
+
.composer { --mode: var(--mode-1); --mode-ink: var(--mode-1-ink); }
|
|
376
|
+
.composer.m0 { --mode: var(--mode-0); --mode-ink: var(--mode-0-ink); }
|
|
377
|
+
.composer.m2 { --mode: var(--mode-2); --mode-ink: var(--mode-2-ink); }
|
|
378
|
+
.composer.m3 { --mode: var(--mode-3); --mode-ink: var(--mode-3-ink); }
|
|
379
|
+
.field button[type="submit"] { width: 34px; height: 34px; padding: 0; border: 0; border-radius: 50%; background: var(--mode, var(--phosphor)); color: var(--mode-ink, var(--phosphor-ink)); cursor: pointer; display: grid; place-items: center; box-shadow: 0 0 18px color-mix(in srgb, var(--mode, var(--phosphor)) 45%, transparent); transition: background .25s, box-shadow .25s; }
|
|
380
|
+
.field button[type="submit"] svg { width: 18px; height: 18px; }
|
|
381
|
+
.field button[type="submit"]:hover { filter: brightness(1.06); }
|
|
382
|
+
.field button[type="submit"]:disabled { opacity: .4; cursor: default; box-shadow: none; }
|
|
383
|
+
.safety { margin: 14px auto 18px; color: var(--text-3); font-family: var(--mono); font-size: 9.5px; letter-spacing: .08em; text-transform: uppercase; text-align: center; }
|
|
384
|
+
|
|
385
|
+
/* toast */
|
|
386
|
+
.toast { position: fixed; left: var(--composer-center, 50%); bottom: calc(100vh - var(--composer-top, 70vh) + 22px); transform: translateX(-50%); text-align: center; padding: 9px 14px; animation: toast-in .22s ease; z-index: 40; border-radius: 12px; border: 1px solid color-mix(in srgb, var(--danger) 40%, transparent); background: var(--panel); color: var(--danger); font-size: 13px; box-shadow: var(--shadow); max-width: min(560px, calc(100% - 32px)); }
|
|
387
|
+
|
|
388
|
+
@keyframes toast-in { from { opacity: 0; transform: translate(-50%, 6px); } to { opacity: 1; transform: translate(-50%, 0); } }
|
|
389
|
+
|
|
390
|
+
@media (max-width: 680px) {
|
|
391
|
+
.bar { flex-wrap: wrap; gap: 10px; }
|
|
392
|
+
.project { display: none; }
|
|
393
|
+
.row { max-width: 92%; }
|
|
394
|
+
.who .reply { max-width: 150px; }
|
|
395
|
+
.system .gauge { width: 160px; }
|
|
396
|
+
.onboarding-list li { grid-template-columns: 28px 1fr; }
|
|
397
|
+
.onboarding-list .state { grid-column: 2; }
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/* ================= MU/TH/UR: troubleshooting ================= */
|
|
401
|
+
.mother-button {
|
|
402
|
+
display: inline-flex; align-items: center; gap: 7px;
|
|
403
|
+
height: 26px; padding: 0 10px; border-radius: 6px;
|
|
404
|
+
border: 1px solid var(--line-2); background: transparent; color: var(--text-2);
|
|
405
|
+
font-family: var(--mono); font-size: 10px; letter-spacing: .18em; cursor: pointer;
|
|
406
|
+
}
|
|
407
|
+
.mother-button:hover { color: var(--phosphor); border-color: var(--phosphor); box-shadow: 0 0 14px color-mix(in srgb, var(--phosphor) 30%, transparent); }
|
|
408
|
+
.mother-glyph { width: 8px; height: 8px; border: 1px solid currentColor; }
|
|
409
|
+
.mother-count { min-width: 16px; height: 16px; padding: 0 4px; border-radius: 8px; display: inline-grid; place-items: center; background: var(--danger); color: #fff; font-size: 9px; letter-spacing: 0; }
|
|
410
|
+
|
|
411
|
+
dialog.mother { border: 0; padding: 0; margin: 0; width: 100vw; max-width: 100vw; height: 100dvh; max-height: 100dvh; background: transparent; color: #9bff66; }
|
|
412
|
+
dialog.mother::backdrop { background: rgba(0, 0, 0, .82); backdrop-filter: blur(6px); }
|
|
413
|
+
.mother-frame {
|
|
414
|
+
--ph: #9bff66; --ph-dim: rgba(155, 255, 102, .45); --ph-faint: rgba(155, 255, 102, .14);
|
|
415
|
+
position: relative; height: 100%; overflow-y: auto;
|
|
416
|
+
padding: 26px clamp(16px, 5vw, 64px) 40px;
|
|
417
|
+
background:
|
|
418
|
+
linear-gradient(rgba(155, 255, 102, .05) 1px, transparent 1px) 0 0 / 100% 3px,
|
|
419
|
+
radial-gradient(ellipse at 50% 0%, #0a1506, #020402 70%);
|
|
420
|
+
font-family: var(--mono); color: var(--ph); letter-spacing: .04em;
|
|
421
|
+
text-shadow: 0 0 6px rgba(155, 255, 102, .45);
|
|
422
|
+
animation: mother-on .5s ease-out;
|
|
423
|
+
}
|
|
424
|
+
@keyframes mother-on { from { opacity: 0; transform: scaleY(.96); filter: brightness(2); } to { opacity: 1; transform: none; filter: none; } }
|
|
425
|
+
.mother-head { display: grid; grid-template-columns: auto 1fr auto; gap: 18px; align-items: baseline; padding-bottom: 14px; border-bottom: 1px solid var(--ph-dim); }
|
|
426
|
+
.mother-title { font-size: clamp(22px, 4vw, 34px); font-weight: 700; letter-spacing: .24em; }
|
|
427
|
+
.mother-sub { font-size: 10px; letter-spacing: .22em; color: var(--ph-dim); }
|
|
428
|
+
.mother-close { border: 1px solid var(--ph-dim); background: transparent; color: var(--ph); font: inherit; font-size: 10px; letter-spacing: .18em; padding: 6px 10px; cursor: pointer; }
|
|
429
|
+
.mother-close:hover { background: var(--ph-faint); }
|
|
430
|
+
.mother-boot { margin: 18px 0 8px; font: inherit; font-size: 12px; line-height: 1.7; white-space: pre-wrap; min-height: 3.4em; }
|
|
431
|
+
.mother-boot::after { content: "█"; animation: blink 1s steps(1) infinite; margin-left: 2px; }
|
|
432
|
+
.mother-query { display: grid; grid-template-columns: auto 1fr auto; gap: 12px; align-items: center; padding: 10px 0; border-top: 1px solid var(--ph-faint); border-bottom: 1px solid var(--ph-faint); }
|
|
433
|
+
.mother-prompt { font-size: 18px; }
|
|
434
|
+
.mother-query input { border: 0; outline: 0; background: transparent; color: var(--ph); font: inherit; font-size: 14px; letter-spacing: .08em; text-transform: uppercase; caret-color: var(--ph); }
|
|
435
|
+
.mother-query input::placeholder { color: var(--ph-dim); text-transform: none; letter-spacing: .04em; }
|
|
436
|
+
.mother-os { display: flex; gap: 1px; border: 1px solid var(--ph-dim); }
|
|
437
|
+
.mother-os button { border: 0; background: transparent; color: var(--ph-dim); font: inherit; font-size: 10px; letter-spacing: .16em; padding: 6px 10px; cursor: pointer; }
|
|
438
|
+
.mother-os button[aria-checked="true"] { background: var(--ph); color: #041004; text-shadow: none; }
|
|
439
|
+
.mother-answer { margin: 14px 0 6px; font-size: 12px; letter-spacing: .14em; min-height: 1.4em; }
|
|
440
|
+
.mother-section { margin-top: 22px; }
|
|
441
|
+
.mother-section h3 { margin: 0 0 12px; font-size: 10px; letter-spacing: .28em; color: var(--ph-dim); font-weight: 400; }
|
|
442
|
+
.mother-section h3::before { content: "▌ "; color: var(--ph); }
|
|
443
|
+
.mother-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 380px), 1fr)); }
|
|
444
|
+
.mother-card { border: 1px solid var(--ph-dim); padding: 14px 16px; background: rgba(2, 6, 2, .6); display: grid; gap: 8px; align-content: start; }
|
|
445
|
+
.mother-card.hit { border-color: var(--ph); box-shadow: inset 0 0 0 1px var(--ph-faint), 0 0 22px rgba(155, 255, 102, .12); }
|
|
446
|
+
.mother-card .tags { display: flex; gap: 8px; flex-wrap: wrap; font-size: 9.5px; letter-spacing: .18em; color: var(--ph-dim); }
|
|
447
|
+
.mother-card .tags .agent { color: var(--agent, var(--ph)); }
|
|
448
|
+
.mother-card .tags .sev-blocking { color: #ff7b72; }
|
|
449
|
+
.mother-card .tags .sev-transient, .mother-card .tags .sev-tunable { color: #ffd166; }
|
|
450
|
+
.mother-card .tags .sev-fixed, .mother-card .tags .sev-informational { color: var(--ph-dim); }
|
|
451
|
+
.mother-card h4 { margin: 0; font-size: 14px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
|
|
452
|
+
.mother-card p { margin: 0; font-size: 12px; line-height: 1.6; color: rgba(210, 255, 190, .85); text-shadow: none; }
|
|
453
|
+
.mother-card p b { color: var(--ph); font-weight: 400; letter-spacing: .12em; font-size: 10px; display: block; margin-bottom: 2px; }
|
|
454
|
+
.mother-card p.remedy { color: #eaffdf; font-size: 13px; line-height: 1.65; padding: 10px 12px; border: 1px solid var(--ph); border-left-width: 4px; background: var(--ph-faint); text-shadow: 0 0 6px rgba(155, 255, 102, .25); }
|
|
455
|
+
.mother-card p.remedy b { color: var(--ph); font-weight: 700; letter-spacing: .2em; }
|
|
456
|
+
.mother-card .actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
|
|
457
|
+
.mother-card .actions .act { border: 1px solid var(--ph); background: color-mix(in srgb, var(--ph) 12%, transparent); color: var(--ph); font: inherit; font-size: 10.5px; letter-spacing: .16em; padding: 8px 12px; cursor: pointer; text-shadow: 0 0 6px rgba(155, 255, 102, .35); }
|
|
458
|
+
.mother-card .actions .act:hover { background: color-mix(in srgb, var(--ph) 24%, transparent); }
|
|
459
|
+
.mother-card .actions .act:disabled { opacity: .6; cursor: default; }
|
|
460
|
+
.mother-card .actions .note { font-size: 9px; letter-spacing: .14em; color: var(--ph-dim); }
|
|
461
|
+
.mother-card.hit p.remedy { box-shadow: 0 0 18px rgba(155, 255, 102, .18); animation: remedy-in .6s ease; }
|
|
462
|
+
@keyframes remedy-in { from { background: rgba(155, 255, 102, .35); } to { background: var(--ph-faint); } }
|
|
463
|
+
.mother-cmd { position: relative; margin: 4px 0 0; border: 1px solid var(--ph-faint); background: #000; padding: 10px 12px; }
|
|
464
|
+
.mother-cmd pre { margin: 0; font: inherit; font-size: 12px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--ph); }
|
|
465
|
+
.mother-cmd .c { color: var(--ph-dim); }
|
|
466
|
+
.mother-cmd .copy { position: absolute; top: 6px; right: 6px; border: 1px solid var(--ph-dim); background: #000; color: var(--ph-dim); font: inherit; font-size: 9.5px; letter-spacing: .16em; padding: 3px 7px; cursor: pointer; }
|
|
467
|
+
.mother-cmd .copy:hover { color: var(--ph); border-color: var(--ph); }
|
|
468
|
+
.mother-record { display: grid; grid-template-columns: 64px 92px 1fr auto; gap: 12px; align-items: baseline; padding: 8px 0; border-bottom: 1px solid var(--ph-faint); font-size: 12px; }
|
|
469
|
+
.mother-record .t { color: var(--ph-dim); }
|
|
470
|
+
.mother-record .a { color: var(--agent, var(--ph)); text-transform: uppercase; letter-spacing: .1em; }
|
|
471
|
+
.mother-record .e { color: rgba(210, 255, 190, .85); text-shadow: none; overflow-wrap: anywhere; }
|
|
472
|
+
.mother-record .k { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
|
|
473
|
+
.mother-record .k button { border: 1px solid var(--ph-dim); background: transparent; color: var(--ph); font: inherit; font-size: 9.5px; letter-spacing: .12em; padding: 3px 7px; cursor: pointer; text-transform: uppercase; }
|
|
474
|
+
.mother-record .k button:hover { background: var(--ph-faint); }
|
|
475
|
+
.mother-record .k .none { color: var(--ph-dim); font-size: 9.5px; letter-spacing: .12em; }
|
|
476
|
+
.mother-record .e.more { cursor: pointer; }
|
|
477
|
+
.mother-record .e.more::after { content: ' ▸'; color: var(--ph-dim); }
|
|
478
|
+
.mother-record .e.more.open { white-space: pre-wrap; color: #eaffdf; }
|
|
479
|
+
.mother-record .e.more.open::after { content: ' ▾'; }
|
|
480
|
+
.mother-record .e.more:hover, .mother-record .e.more:focus-visible { color: var(--ph); outline: none; }
|
|
481
|
+
.mother-section h3.toggle { display: block; }
|
|
482
|
+
.mother-section h3.toggle::before { content: none; }
|
|
483
|
+
.mother-section h3.toggle button::before { content: "▌ "; color: var(--ph); }
|
|
484
|
+
.mother-section h3.toggle button > :first-child { flex: 1; }
|
|
485
|
+
.mother-section h3.toggle button { display: flex; width: 100%; justify-content: space-between; gap: 12px; border: 0; background: transparent; color: var(--ph-dim); font: inherit; letter-spacing: .28em; padding: 0; cursor: pointer; text-align: left; }
|
|
486
|
+
.mother-section h3.toggle button:hover { color: var(--ph); }
|
|
487
|
+
.mother-section h3.toggle .caret { color: var(--ph); letter-spacing: .18em; }
|
|
488
|
+
.mother-section.collapsed h3 { margin-bottom: 0; }
|
|
489
|
+
.mother-foot { margin-top: 32px; padding-top: 12px; border-top: 1px solid var(--ph-faint); font-size: 9.5px; letter-spacing: .24em; color: var(--ph-dim); text-align: center; }
|
|
490
|
+
@media (max-width: 680px) {
|
|
491
|
+
.mother-head { grid-template-columns: 1fr auto; }
|
|
492
|
+
.mother-sub { grid-column: 1 / -1; order: 3; }
|
|
493
|
+
.mother-query { grid-template-columns: auto 1fr; }
|
|
494
|
+
.mother-os { grid-column: 1 / -1; }
|
|
495
|
+
.mother-record { grid-template-columns: 64px 1fr; }
|
|
496
|
+
.mother-record .e, .mother-record .k { grid-column: 1 / -1; }
|
|
497
|
+
.mother-record .k { justify-content: flex-start; }
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/* ================= MODULES ================= */
|
|
501
|
+
.modules-glyph { border-radius: 50%; }
|
|
502
|
+
.modules-count { min-width: 16px; height: 16px; padding: 0 4px; border-radius: 8px; display: inline-grid; place-items: center; background: var(--phosphor); color: var(--phosphor-ink); font-size: 9px; letter-spacing: 0; }
|
|
503
|
+
.module-card { border: 1px solid var(--ph-dim); padding: 18px 20px; background: rgba(2, 6, 2, .6); display: grid; gap: 12px; max-width: 760px; min-width: 0; overflow-wrap: anywhere; }
|
|
504
|
+
.mother-grid > * { min-width: 0; }
|
|
505
|
+
.module-card .head { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: start; }
|
|
506
|
+
.module-card h4 { margin: 0; font-size: 16px; letter-spacing: .1em; text-transform: uppercase; }
|
|
507
|
+
.module-card .vendor { font-size: 10px; letter-spacing: .18em; color: var(--ph-dim); }
|
|
508
|
+
.module-card .state { font-size: 10px; letter-spacing: .18em; padding: 4px 8px; border: 1px solid var(--ph-dim); color: var(--ph-dim); white-space: nowrap; }
|
|
509
|
+
.module-card .detail { font-size: 10px; letter-spacing: .12em; color: var(--ph-dim); }
|
|
510
|
+
.module-card .state.installed { color: var(--ph); border-color: var(--ph); }
|
|
511
|
+
.module-card .state.running { color: #ffd166; border-color: #ffd166; animation: blink 1s infinite; }
|
|
512
|
+
.module-card p { margin: 0; font-size: 12.5px; line-height: 1.6; color: rgba(210, 255, 190, .85); text-shadow: none; }
|
|
513
|
+
.module-card ul { margin: 0; padding-left: 18px; font-size: 12px; line-height: 1.7; color: rgba(210, 255, 190, .8); text-shadow: none; }
|
|
514
|
+
.module-card .actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
|
|
515
|
+
.module-card .actions button { border: 1px solid var(--ph); background: transparent; color: var(--ph); font: inherit; font-size: 10.5px; letter-spacing: .18em; padding: 8px 14px; cursor: pointer; }
|
|
516
|
+
.module-card .actions button.primary { background: var(--ph); color: #041004; text-shadow: none; }
|
|
517
|
+
.module-card .actions button:disabled { opacity: .4; cursor: default; }
|
|
518
|
+
.module-card .actions .note { font-size: 10px; letter-spacing: .12em; color: var(--ph-dim); }
|
|
519
|
+
.module-card .confirm { border: 1px dashed var(--ph); padding: 12px 14px; display: grid; gap: 10px; }
|
|
520
|
+
.module-card .confirm .warn { color: #ffd166; font-size: 11px; letter-spacing: .12em; }
|
|
521
|
+
.module-log { max-height: 260px; overflow-y: auto; border: 1px solid var(--ph-faint); background: #000; padding: 10px 12px; font-size: 11.5px; line-height: 1.55; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--ph); }
|
|
522
|
+
.module-log .err { color: #ff7b72; }
|
|
523
|
+
.system.module { color: var(--phosphor); }
|
|
524
|
+
.system.module .cmd { text-transform: none; letter-spacing: 0; color: var(--text-2); display: block; margin-top: 4px; }
|
|
525
|
+
.system.module.failed { color: var(--danger); }
|
|
526
|
+
|
|
527
|
+
/* ================= delegation ================= */
|
|
528
|
+
.plan-card { margin: 8px 0 4px; border: 1px dashed var(--line-2); border-radius: 12px; padding: 10px 12px 10px 14px; background: color-mix(in srgb, var(--panel) 70%, transparent); }
|
|
529
|
+
.plan-label { display: block; font-family: var(--mono); font-size: 9.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--text-3); margin-bottom: 6px; }
|
|
530
|
+
.plan-card ol { margin: 0; padding-left: 18px; font-size: 13.5px; }
|
|
531
|
+
.plan-card li { margin: 4px 0; }
|
|
532
|
+
.plan-card li b { color: var(--agent); font-family: var(--mono); font-size: 11px; letter-spacing: .06em; }
|
|
533
|
+
.row.delegated .bubble { background: color-mix(in srgb, var(--bubble) 75%, transparent); border: 1px dashed var(--line-2); box-shadow: none; font-size: 14px; }
|
|
534
|
+
.who .to-agent { color: var(--agent); }
|
|
535
|
+
.system.plan .stop { margin-left: 10px; border: 1px solid var(--crit); background: transparent; color: var(--crit); font: inherit; font-size: 9.5px; letter-spacing: .16em; padding: 2px 8px; cursor: pointer; vertical-align: middle; }
|
|
536
|
+
.system.plan .stop:hover { background: color-mix(in srgb, var(--crit) 15%, transparent); }
|
|
537
|
+
.system.plan .stop:disabled { opacity: .4; cursor: default; }
|
|
538
|
+
|
|
539
|
+
/* ================= STOPALL ================= */
|
|
540
|
+
.stop-all { display: inline-flex; align-items: center; gap: 7px; height: 26px; padding: 0 10px; border-radius: 6px; border: 1px solid var(--line-2); background: transparent; color: var(--text-3); font-family: var(--mono); font-size: 10px; letter-spacing: .18em; cursor: default; opacity: .55; transition: color .3s, border-color .3s, opacity .3s; }
|
|
541
|
+
.stop-all:disabled { cursor: default; }
|
|
542
|
+
.stop-all.armed { opacity: 1; cursor: pointer; border-color: var(--terror); background: color-mix(in srgb, var(--terror) 12%, transparent); color: var(--terror); text-shadow: 0 0 8px color-mix(in srgb, var(--terror) 60%, transparent); animation: blink 1.4s infinite; }
|
|
543
|
+
.stop-all.armed:hover { background: var(--terror); color: #fff; text-shadow: none; animation: none; }
|
|
544
|
+
.stop-all-glyph { width: 8px; height: 8px; background: currentColor; }
|
|
545
|
+
.system.alert { color: var(--terror); text-shadow: 0 0 10px color-mix(in srgb, var(--terror) 70%, transparent); letter-spacing: .14em; animation: terror-in 1.4s steps(3, end) 1; }
|
|
546
|
+
.system.alert b { color: var(--terror); }
|
|
547
|
+
.system.alert .cmd { display: inline-block; margin-left: 8px; padding: 1px 8px; border: 1px solid var(--terror); letter-spacing: .2em; }
|
|
548
|
+
.system.halted { color: var(--terror); }
|
|
549
|
+
.composer.stopall textarea { color: var(--terror); letter-spacing: .12em; text-transform: uppercase; }
|
|
550
|
+
|
|
551
|
+
/* ================= connections & settings (inside MU/TH/UR) ================= */
|
|
552
|
+
.mother-actions { display: flex; gap: 8px; }
|
|
553
|
+
.mother-close[aria-pressed="true"] { background: var(--ph); color: #041004; text-shadow: none; }
|
|
554
|
+
.settings .conn-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr)); }
|
|
555
|
+
.settings .conn-grid { align-items: stretch; }
|
|
556
|
+
.conn-card { border: 1px solid var(--ph-dim); padding: 16px 18px 18px; background: rgba(2, 6, 2, .6); display: grid; grid-template-rows: auto; gap: 14px; min-width: 0; overflow-wrap: anywhere; align-content: start; }
|
|
557
|
+
.conn-card .head { display: flex; align-items: center; gap: 10px; align-self: center; }
|
|
558
|
+
.conn-card .meta { align-self: start; }
|
|
559
|
+
.conn-card .row { align-self: start; padding-top: 4px; }
|
|
560
|
+
.conn-card .slot { min-height: 0; }
|
|
561
|
+
.conn-card .mother-cmd { margin: 0; } .conn-card .slot { display: grid; gap: 8px; }
|
|
562
|
+
.conn-card label { align-self: end; margin-top: 4px; }
|
|
563
|
+
.conn-card .head .avatar { --size: 26px; }
|
|
564
|
+
.conn-card h4 { margin: 0; font-size: 13px; letter-spacing: .12em; text-transform: uppercase; color: var(--agent, var(--ph)); }
|
|
565
|
+
.conn-card .vendor { font-size: 9.5px; letter-spacing: .16em; color: var(--ph-dim); }
|
|
566
|
+
.conn-card .session { margin-left: auto; font-size: 9.5px; letter-spacing: .16em; padding: 3px 8px; border: 1px solid var(--ph-dim); color: var(--ph-dim); white-space: nowrap; }
|
|
567
|
+
.conn-card .session.on { color: var(--ph); border-color: var(--ph); }
|
|
568
|
+
.conn-card .session.off { color: #ff7b72; border-color: #ff7b72; }
|
|
569
|
+
.conn-card .session.busy { color: #ffd166; border-color: #ffd166; animation: blink 1s infinite; }
|
|
570
|
+
.conn-card .meta { font-size: 11px; line-height: 1.6; color: rgba(210, 255, 190, .8); text-shadow: none; }
|
|
571
|
+
.conn-card .row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
|
|
572
|
+
.conn-card button, .settings .room-form button { border: 1px solid var(--ph-dim); background: transparent; color: var(--ph); font: inherit; font-size: 9.5px; letter-spacing: .16em; padding: 6px 10px; cursor: pointer; }
|
|
573
|
+
.conn-card button.primary, .settings .room-form button.primary { background: var(--ph); color: #041004; text-shadow: none; border-color: var(--ph); }
|
|
574
|
+
.conn-card button:disabled, .settings .room-form button:disabled { opacity: .4; cursor: default; }
|
|
575
|
+
.conn-card label, .settings .room-form label { display: grid; gap: 4px; font-size: 9.5px; letter-spacing: .16em; color: var(--ph-dim); }
|
|
576
|
+
.conn-card input, .settings .room-form input, .settings .room-form select { border: 1px solid var(--ph-dim); background: #000; color: var(--ph); font: inherit; font-size: 12px; padding: 6px 8px; letter-spacing: .04em; min-width: 0; }
|
|
577
|
+
.conn-card input:focus, .settings .room-form input:focus { outline: 1px solid var(--ph); }
|
|
578
|
+
.conn-card .login-log { max-height: 140px; overflow-y: auto; border: 1px solid var(--ph-faint); background: #000; padding: 8px 10px; font-size: 11px; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
579
|
+
.conn-card .login-log a { color: var(--ph); }
|
|
580
|
+
.settings .room-form { border: 1px solid var(--ph-dim); padding: 14px 16px; display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); align-items: end; }
|
|
581
|
+
.settings .room-form .full { grid-column: 1 / -1; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
|
|
582
|
+
.settings .room-form .toggle { display: flex; align-items: center; gap: 8px; font-size: 10px; letter-spacing: .16em; color: var(--ph); cursor: pointer; }
|
|
583
|
+
.settings .room-form .toggle input { width: auto; accent-color: #9bff66; }
|
|
584
|
+
.settings .note { font-size: 10px; letter-spacing: .1em; color: var(--ph-dim); }
|
|
585
|
+
.system.login { color: var(--phosphor); }
|
|
586
|
+
.system.login.failed { color: var(--danger); }
|
|
587
|
+
|
|
588
|
+
/* ================= agent popover (click on a sphere) ================= */
|
|
589
|
+
.agents .avatar { cursor: pointer; }
|
|
590
|
+
.agents .avatar.open { box-shadow: 0 0 0 2px var(--bg), 0 0 0 3.5px var(--agent); }
|
|
591
|
+
.agent-pop { position: fixed; z-index: 30; min-width: 250px; max-width: min(340px, calc(100vw - 32px)); padding: 12px 14px 12px; border: 1px solid var(--line-2); border-radius: 14px; background: var(--panel); color: var(--text); box-shadow: var(--shadow); font-family: var(--mono); font-size: 11px; letter-spacing: .04em; }
|
|
592
|
+
.agent-pop .head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
|
|
593
|
+
.agent-pop .head b { color: var(--agent); letter-spacing: .14em; text-transform: uppercase; font-size: 11px; }
|
|
594
|
+
.agent-pop .head .vendor { color: var(--text-3); font-size: 10px; margin-left: auto; }
|
|
595
|
+
.agent-pop .big { font-size: 22px; letter-spacing: -.01em; font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", Inter, sans-serif; font-weight: 600; color: var(--text); }
|
|
596
|
+
.agent-pop .big small { font-size: 10px; color: var(--text-3); letter-spacing: .12em; text-transform: uppercase; margin-left: 6px; font-family: var(--mono); font-weight: 400; }
|
|
597
|
+
.agent-pop .gauge { height: 3px; background: var(--line-2); border-radius: 2px; overflow: hidden; margin: 6px 0 10px; }
|
|
598
|
+
.agent-pop .gauge i { display: block; height: 100%; width: 0; background: var(--agent); }
|
|
599
|
+
.agent-pop .gauge.hot i { background: var(--crit); }
|
|
600
|
+
.agent-pop dl { margin: 0; display: grid; grid-template-columns: auto 1fr; gap: 4px 12px; }
|
|
601
|
+
.agent-pop dt { color: var(--text-3); text-transform: uppercase; letter-spacing: .12em; font-size: 9.5px; }
|
|
602
|
+
.agent-pop dd { margin: 0; color: var(--text-2); text-align: right; }
|
|
603
|
+
.agent-pop dd.on { color: var(--phosphor); } .agent-pop dd.off { color: var(--danger); }
|
|
604
|
+
.agent-pop .foot { margin-top: 10px; font-size: 9.5px; color: var(--text-3); letter-spacing: .1em; text-transform: uppercase; }
|
|
605
|
+
|
|
606
|
+
/* model chip & menu in the composer */
|
|
607
|
+
.picker .model-chip { margin-left: 8px; border: 1px solid var(--line-2); background: transparent; color: var(--text-2); font: inherit; font-family: var(--mono); font-size: 10px; letter-spacing: .08em; text-transform: none; padding: 2px 8px; border-radius: 999px; cursor: pointer; }
|
|
608
|
+
.picker .model-chip:hover { color: var(--agent, var(--text)); border-color: var(--agent, var(--line-2)); }
|
|
609
|
+
/* Permission mode chip: TO @agent #1 EXCHANGE ▾ model ▾ */
|
|
610
|
+
.picker .mode-chip { margin-left: 8px; border: 1px solid var(--mode); background: transparent; color: var(--mode); font: inherit; font-family: var(--mono); font-size: 10px; letter-spacing: .1em; padding: 2px 9px; border-radius: 999px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; transition: background .2s, color .2s, border-color .2s; }
|
|
611
|
+
.picker .mode-chip b { font-weight: 700; color: inherit; }
|
|
612
|
+
.picker .mode-chip:hover { background: color-mix(in srgb, var(--mode) 12%, transparent); }
|
|
613
|
+
.picker .mode-chip.m0 { --mode: var(--mode-0); }
|
|
614
|
+
.picker .mode-chip.m1 { --mode: var(--mode-1); }
|
|
615
|
+
.picker .mode-chip.m2 { --mode: var(--mode-2); }
|
|
616
|
+
.picker .mode-chip.m3 { --mode: var(--mode-3); }
|
|
617
|
+
.mode-menu { width: min(380px, calc(100vw - 24px)); padding: 12px; }
|
|
618
|
+
.mode-menu .model-menu-title { margin: 4px 10px 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
619
|
+
.mode-menu .mode-ladder { display: grid; gap: 2px; }
|
|
620
|
+
.mode-menu .mode-option { --mode: var(--text-2); display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 14px; align-items: baseline; width: 100%; text-align: left; border: 0; background: transparent; color: var(--text); font: inherit; font-family: var(--mono); padding: 12px 10px; border-radius: 8px; cursor: pointer; transition: background .15s, opacity .15s; }
|
|
621
|
+
.mode-menu .mode-option + .mode-option { border-top: 1px solid var(--line); border-radius: 0 0 8px 8px; }
|
|
622
|
+
.mode-menu .mode-option:hover { background: var(--line); }
|
|
623
|
+
.mode-menu .mode-option.o0.current { --mode: var(--mode-0); }
|
|
624
|
+
.mode-menu .mode-option.o1.current { --mode: var(--mode-1); }
|
|
625
|
+
.mode-menu .mode-option.o2.current { --mode: var(--mode-2); }
|
|
626
|
+
.mode-menu .mode-option.o3 { --mode: var(--mode-3); }
|
|
627
|
+
.mode-menu .mode-option.locked { opacity: .45; }
|
|
628
|
+
.mode-menu .mode-option.locked:hover { opacity: 1; }
|
|
629
|
+
.mode-menu .mode-option:disabled { opacity: .3; cursor: default; }
|
|
630
|
+
.mode-menu .mode-option:disabled:hover { background: transparent; }
|
|
631
|
+
.mode-menu .mode-option .n { font-weight: 700; color: var(--mode); font-size: 12px; }
|
|
632
|
+
.mode-menu .mode-option .body { display: grid; gap: 3px; min-width: 0; }
|
|
633
|
+
.mode-menu .mode-option .name { font-size: 11px; font-weight: 700; letter-spacing: .14em; color: var(--mode); }
|
|
634
|
+
.mode-menu .mode-option.current .name, .mode-menu .mode-option:hover .name { color: var(--mode); }
|
|
635
|
+
.mode-menu .mode-option:not(.current):not(.o3) .name { color: var(--text); }
|
|
636
|
+
.mode-menu .mode-option .body { gap: 5px; }
|
|
637
|
+
.mode-menu .mode-option .hint { display: block; font-size: 10.5px; line-height: 1.5; letter-spacing: 0; color: var(--text-2); text-transform: none; font-family: var(--sans, inherit); }
|
|
638
|
+
.mode-menu .mode-option .tag { display: inline-flex; align-items: center; gap: 7px; font-size: 8.5px; font-weight: 700; letter-spacing: .16em; color: var(--mode); white-space: nowrap; align-self: center; margin-left: 4px; }
|
|
639
|
+
.mode-menu .mode-option .tag.raise { border: 1px solid var(--mode-3); border-radius: 999px; padding: 3px 9px; }
|
|
640
|
+
.mode-menu .mode-option .tag .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--mode); box-shadow: 0 0 8px var(--mode); animation: mode-dot 1.4s ease-in-out infinite; }
|
|
641
|
+
@keyframes mode-dot { 0%, 100% { opacity: 1; } 50% { opacity: .15; } }
|
|
642
|
+
@media (prefers-reduced-motion: reduce) { .mode-menu .mode-option .tag .dot { animation: none; } }
|
|
643
|
+
/* Composer wears the mode */
|
|
644
|
+
.composer.ghost .field { border-style: dashed; border-color: var(--mode-0); box-shadow: none; opacity: .92; }
|
|
645
|
+
.composer.ghost .crew-label { color: var(--mode-0); }
|
|
646
|
+
.composer.ghost .editor textarea { color: transparent; }
|
|
647
|
+
.composer.ghost .editor .highlight { color: var(--text-2); font-style: italic; }
|
|
648
|
+
.composer.control { width: min(1180px, 100% - 40px); }
|
|
649
|
+
.composer.control .field { border-color: var(--terror); box-shadow: 0 0 0 3px color-mix(in srgb, var(--terror) 18%, transparent), 0 0 30px color-mix(in srgb, var(--terror) 20%, transparent); }
|
|
650
|
+
.composer.control .crew-label { color: var(--terror); text-shadow: 0 0 8px color-mix(in srgb, var(--terror) 60%, transparent); }
|
|
651
|
+
.composer.intruder .crew-label { color: var(--terror); text-shadow: 0 0 8px color-mix(in srgb, var(--terror) 60%, transparent); animation: blink 1.6s steps(1) infinite; }
|
|
652
|
+
/* Mode badges on bubbles and plan steps */
|
|
653
|
+
.who .badge.mode { font-weight: 700; letter-spacing: .1em; }
|
|
654
|
+
.who .badge.mode.m0 { color: var(--mode-0); border-color: color-mix(in srgb, var(--mode-0) 50%, transparent); } .who .badge.mode.m1 { color: var(--mode-1); border-color: color-mix(in srgb, var(--mode-1) 45%, transparent); } .who .badge.mode.m2 { color: var(--mode-2); border-color: color-mix(in srgb, var(--mode-2) 50%, transparent); } .who .badge.mode.m3 { color: var(--mode-3); border-color: var(--mode-3); }
|
|
655
|
+
.row.ghost .bubble { border: 1px dashed var(--line-2); background: transparent; opacity: .85; }
|
|
656
|
+
.row.ghost.user .bubble { background: transparent; color: var(--text); border-color: var(--text-3); }
|
|
657
|
+
.row.ghost .stamp::after { content: ' · not recorded'; color: var(--text-3); }
|
|
658
|
+
.system.plan .step-mode { margin-left: 3px; font-weight: 700; }
|
|
659
|
+
.system.plan .step-mode.m1 { color: var(--mode-1); } .system.plan .step-mode.m2 { color: var(--mode-2); }
|
|
660
|
+
/* Emergency command override: a small MOTHER terminal */
|
|
661
|
+
/* Only an open override is laid out; a closed <dialog> must stay display:none. */
|
|
662
|
+
dialog.override[open] { display: grid; place-items: center; }
|
|
663
|
+
.override-frame { width: min(680px, 92vw); height: auto; min-height: 0; padding: 26px 30px 22px; border: 1px solid var(--ph-dim); box-shadow: 0 0 0 1px var(--ph-faint), 0 0 60px rgba(155, 255, 102, .12); animation: mother-on .4s ease; }
|
|
664
|
+
.override-query { grid-template-columns: auto 1fr auto; }
|
|
665
|
+
.override-query .k { font-size: 11px; letter-spacing: .22em; color: var(--ph-dim); }
|
|
666
|
+
.override-query input { text-transform: none; letter-spacing: .12em; }
|
|
667
|
+
.override-reply { min-height: 22px; letter-spacing: .14em; }
|
|
668
|
+
.override-reply.denied { color: #ff7b72; text-shadow: 0 0 10px rgba(255, 123, 114, .6); animation: terror-in .8s steps(3, end) 1; }
|
|
669
|
+
.override-reply.granted { color: var(--ph); text-shadow: 0 0 10px rgba(155, 255, 102, .6); }
|
|
670
|
+
.override-frame.shake { animation: override-shake .35s ease; }
|
|
671
|
+
@keyframes override-shake { 0%, 100% { transform: none; } 25% { transform: translateX(-6px); } 50% { transform: translateX(6px); } 75% { transform: translateX(-3px); } }
|
|
672
|
+
.model-menu { position: fixed; z-index: 40; width: min(320px, calc(100vw - 24px)); padding: 10px; border: 1px solid var(--line-2); border-radius: 14px; background: var(--panel); box-shadow: var(--shadow); font-family: var(--mono); font-size: 11px; letter-spacing: .04em; color: var(--text); }
|
|
673
|
+
.model-menu-title { font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-3); margin: 2px 4px 8px; }
|
|
674
|
+
.model-menu-title b { color: var(--agent); }
|
|
675
|
+
.model-list { display: grid; gap: 2px; max-height: 260px; overflow-y: auto; }
|
|
676
|
+
.model-option { text-align: left; border: 0; border-radius: 8px; background: transparent; color: var(--text); font: inherit; font-family: var(--mono); font-size: 12px; padding: 7px 10px; cursor: pointer; }
|
|
677
|
+
.model-option:hover { background: color-mix(in srgb, var(--agent) 12%, transparent); }
|
|
678
|
+
.model-option.current { background: color-mix(in srgb, var(--agent) 20%, transparent); color: var(--agent); }
|
|
679
|
+
.model-custom { margin-top: 8px; }
|
|
680
|
+
.model-custom input { width: 100%; border: 1px solid var(--line-2); border-radius: 8px; background: var(--bg); color: var(--text); font: inherit; font-family: var(--mono); font-size: 11px; padding: 6px 9px; outline: 0; }
|
|
681
|
+
.model-custom input:focus { border-color: var(--agent, var(--phosphor)); }
|
|
682
|
+
.model-note { margin: 8px 4px 0; font-size: 9.5px; color: var(--text-3); line-height: 1.5; }
|
|
683
|
+
.who .badge.model { color: var(--agent); border-color: color-mix(in srgb, var(--agent) 50%, transparent); text-transform: none; letter-spacing: .04em; }
|
|
684
|
+
|
|
685
|
+
/* ================= attachments, inline files & viewer ================= */
|
|
686
|
+
.field { grid-template-columns: auto minmax(0, 1fr) auto auto auto auto; }
|
|
687
|
+
.attach { width: 34px; height: 34px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--text-3); cursor: pointer; display: grid; place-items: center; }
|
|
688
|
+
.attach:hover { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); }
|
|
689
|
+
.attach svg { width: 18px; height: 18px; }
|
|
690
|
+
.composer.dropping .field { border-color: var(--phosphor); box-shadow: 0 0 0 3px color-mix(in srgb, var(--phosphor) 25%, transparent); }
|
|
691
|
+
.attachments { display: flex; gap: 8px; flex-wrap: wrap; padding: 0 6px; }
|
|
692
|
+
.attachment-chip { display: inline-flex; align-items: center; gap: 8px; padding: 4px 6px 4px 4px; border: 1px solid var(--line-2); border-radius: 10px; background: var(--panel); font-family: var(--mono); font-size: 10.5px; color: var(--text-2); max-width: 260px; }
|
|
693
|
+
.attachment-chip img { width: 28px; height: 28px; object-fit: cover; border-radius: 6px; }
|
|
694
|
+
.attachment-chip .kind { width: 28px; height: 28px; border-radius: 6px; display: grid; place-items: center; background: color-mix(in srgb, var(--phosphor) 12%, transparent); color: var(--phosphor); font-size: 9px; letter-spacing: .08em; }
|
|
695
|
+
.attachment-chip .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
696
|
+
.attachment-chip .remove { border: 0; background: transparent; color: var(--text-3); cursor: pointer; font-size: 13px; padding: 0 2px; }
|
|
697
|
+
.attachment-chip .remove:hover { color: var(--danger); }
|
|
698
|
+
.attachment-chip.uploading { opacity: .6; }
|
|
699
|
+
.bubble .files { display: flex; gap: 8px; flex-wrap: wrap; margin: 8px 0 0; }
|
|
700
|
+
.bubble .file-tile { display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px 6px 6px; border-radius: 10px; border: 1px solid rgba(0,0,0,.15); background: rgba(0,0,0,.08); font-family: var(--mono); font-size: 10.5px; cursor: pointer; color: inherit; max-width: 100%; }
|
|
701
|
+
.assistant .bubble .file-tile { border-color: var(--line-2); background: var(--panel); color: var(--text-2); }
|
|
702
|
+
.bubble .file-tile img { width: 120px; height: 90px; object-fit: cover; border-radius: 6px; display: block; }
|
|
703
|
+
.bubble .file-tile.image { padding: 0; border: 0; background: transparent; }
|
|
704
|
+
.bubble img.inline { max-width: 100%; max-height: 420px; border-radius: 12px; display: block; margin: 6px 0; cursor: zoom-in; }
|
|
705
|
+
.bubble a.file-link { color: var(--agent, var(--phosphor)); text-decoration: none; border-bottom: 1px dashed currentColor; font-family: var(--mono); font-size: .92em; cursor: pointer; }
|
|
706
|
+
dialog.viewer { border: 0; padding: 0; width: min(1100px, 96vw); max-width: 96vw; height: min(88vh, 900px); background: var(--panel); color: var(--text); border-radius: 16px; box-shadow: var(--shadow); }
|
|
707
|
+
dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px); }
|
|
708
|
+
.viewer-head { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 11px; }
|
|
709
|
+
.viewer-path { color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; }
|
|
710
|
+
.viewer-open { color: var(--phosphor); text-decoration: none; letter-spacing: .12em; font-size: 10px; }
|
|
711
|
+
.viewer-body { height: calc(100% - 46px); overflow: auto; display: grid; place-items: start center; padding: 16px; }
|
|
712
|
+
.viewer-body img { max-width: 100%; max-height: 100%; border-radius: 8px; }
|
|
713
|
+
.viewer-body pre { margin: 0; width: 100%; font-family: var(--mono); font-size: 12.5px; line-height: 1.55; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--text); }
|
|
714
|
+
.viewer-body iframe { width: 100%; height: 100%; border: 0; background: #fff; border-radius: 8px; }
|
|
715
|
+
.viewer-body .err { color: var(--danger); font-family: var(--mono); }
|
|
716
|
+
.viewer-body iframe.ripley { background: #fff; box-shadow: 0 0 0 1px var(--line-2); }
|
|
717
|
+
.viewer-body .viewer-markdown { width: min(820px, 100%); justify-self: center; padding: 8px 4px 24px; font-size: 15px; line-height: 1.6; background: transparent; }
|
|
718
|
+
.viewer-body .viewer-hint { width: 100%; margin-bottom: 10px; padding: 8px 12px; border: 1px dashed var(--line-2); border-radius: 8px; font-family: var(--mono); font-size: 10px; letter-spacing: .1em; color: var(--text-3); }
|
|
719
|
+
.viewer-body .viewer-hint b { color: var(--phosphor); font-weight: 600; }
|
|
720
|
+
.viewer-mode { border-color: var(--text-3); color: var(--text-2); background: transparent; }
|
|
721
|
+
.viewer-mode:hover { color: var(--text); border-color: var(--text-2); background: var(--line); }
|
|
722
|
+
.viewer-body pre.code { display: grid; grid-template-columns: max-content 1fr; padding: 4px 0 24px; white-space: pre; overflow: visible; font-size: 12.5px; line-height: 1.6; counter-reset: none; }
|
|
723
|
+
.viewer-body pre.code .ln { position: sticky; left: 0; user-select: none; text-align: right; padding: 0 14px 0 10px; color: var(--text-3); cursor: pointer; border-right: 1px solid var(--line); background: var(--panel); }
|
|
724
|
+
.viewer-body pre.code .ln:hover { color: var(--phosphor); }
|
|
725
|
+
.viewer-body pre.code .tx { padding: 0 16px; white-space: pre-wrap; overflow-wrap: anywhere; min-width: 0; }
|
|
726
|
+
.viewer-body pre.code .ln.sel, .viewer-body pre.code .tx.sel { background: color-mix(in srgb, var(--phosphor) 14%, transparent); }
|
|
727
|
+
.viewer-body pre.code .ln.sel { color: var(--phosphor); border-right-color: var(--phosphor); }
|
|
728
|
+
.viewer-body pre.code .tx.sel { box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--phosphor) 55%, transparent); }
|
|
729
|
+
.viewer-body pre.code .ln.hl, .viewer-body pre.code .tx.hl { background: color-mix(in srgb, var(--warn) 16%, transparent); }
|
|
730
|
+
.viewer-body pre.code .tx:hover { background: color-mix(in srgb, var(--text) 4%, transparent); }
|
|
731
|
+
.viewer-body:has(pre.code) { display: block; padding: 0; }
|
|
732
|
+
.viewer-selection { font-family: var(--mono); font-size: 10px; letter-spacing: .12em; color: var(--phosphor); white-space: nowrap; }
|
|
733
|
+
.viewer-review { border: 1px solid var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); color: var(--phosphor); font: inherit; font-family: var(--mono); font-size: 10px; letter-spacing: .14em; padding: 5px 10px; border-radius: 6px; cursor: pointer; white-space: nowrap; }
|
|
734
|
+
.viewer-review:hover { background: color-mix(in srgb, var(--phosphor) 20%, transparent); }
|
|
735
|
+
.viewer-menu { position: fixed; z-index: 50; min-width: 220px; border: 1px solid var(--line-2); background: var(--panel); border-radius: 12px; box-shadow: 0 14px 40px rgba(0, 0, 0, .35); padding: 6px; display: grid; gap: 2px; }
|
|
736
|
+
.viewer-menu .hint { padding: 4px 10px 6px; font-family: var(--mono); font-size: 10px; letter-spacing: .12em; color: var(--text-3); }
|
|
737
|
+
.viewer-menu .item { display: flex; gap: 10px; align-items: center; padding: 7px 10px; border-radius: 8px; border: 0; background: transparent; color: var(--text); font: inherit; font-size: 13px; cursor: pointer; text-align: left; }
|
|
738
|
+
.viewer-menu .item:hover { background: color-mix(in srgb, var(--agent, var(--phosphor)) 14%, transparent); }
|
|
739
|
+
.viewer-menu .item b { color: var(--agent, var(--phosphor)); font-family: var(--mono); font-size: 11.5px; letter-spacing: .06em; }
|
|
740
|
+
.viewer-menu .item.off { opacity: .5; }
|
|
741
|
+
.bubble .file-ref { font-family: var(--mono); font-size: 12.5px; color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); border: 1px solid color-mix(in srgb, var(--phosphor) 35%, transparent); border-radius: 6px; padding: 0 6px; cursor: pointer; }
|
|
742
|
+
.bubble .file-ref:hover { background: color-mix(in srgb, var(--phosphor) 18%, transparent); }
|
|
743
|
+
.caps { display: flex; gap: 6px; flex-wrap: wrap; }
|
|
744
|
+
.cap { font-family: var(--mono); font-size: 9px; letter-spacing: .12em; text-transform: uppercase; padding: 2px 6px; border-radius: 4px; border: 1px solid var(--line-2); color: var(--text-3); }
|
|
745
|
+
.cap.on { color: var(--agent, var(--phosphor)); border-color: color-mix(in srgb, var(--agent, var(--phosphor)) 50%, transparent); }
|
|
746
|
+
.conn-card .caps .cap.on { color: var(--ph); border-color: var(--ph-dim); }
|
|
747
|
+
.conn-card .caps .cap { color: var(--ph-dim); border-color: var(--ph-faint); }
|
|
748
|
+
|
|
749
|
+
/* ================= creation lease ================= */
|
|
750
|
+
.create-toggle { height: 30px; padding: 0 10px 0 8px; border-radius: 999px; border: 1px solid var(--line-2); background: transparent; color: var(--text-3); display: inline-flex; align-items: center; gap: 6px; cursor: pointer; font-family: var(--mono); font-size: 9.5px; letter-spacing: .16em; align-self: center; transition: color .2s, border-color .2s, background .2s; }
|
|
751
|
+
.create-toggle svg { width: 15px; height: 15px; }
|
|
752
|
+
.create-toggle:hover { color: var(--text); border-color: var(--text-3); }
|
|
753
|
+
.create-toggle[aria-pressed="true"] { color: var(--warn); border-color: var(--warn); background: color-mix(in srgb, var(--warn) 12%, transparent); text-shadow: 0 0 8px color-mix(in srgb, var(--warn) 50%, transparent); }
|
|
754
|
+
.create-toggle .lock.open { display: none; }
|
|
755
|
+
.create-toggle.standing { color: var(--warn); border-style: dashed; border-color: color-mix(in srgb, var(--warn) 60%, transparent); }
|
|
756
|
+
.create-toggle.standing .lock.closed { display: none; }
|
|
757
|
+
.create-toggle.standing .lock.open { display: block; }
|
|
758
|
+
.system.lease.missing { color: var(--warn); display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; justify-content: center; }
|
|
759
|
+
.system.lease.missing .actions { display: inline-flex; gap: 8px; flex-wrap: wrap; }
|
|
760
|
+
.system.lease.missing button { border: 1px solid color-mix(in srgb, var(--warn) 60%, transparent); background: color-mix(in srgb, var(--warn) 10%, transparent); color: var(--warn); font: inherit; font-family: var(--mono); font-size: 9.5px; letter-spacing: .14em; padding: 4px 9px; border-radius: 6px; cursor: pointer; }
|
|
761
|
+
.system.lease.missing button:hover { background: color-mix(in srgb, var(--warn) 20%, transparent); }
|
|
762
|
+
.system.lease.missing button:disabled { opacity: .6; cursor: default; }
|
|
763
|
+
.conn-card .scope.sub { margin-left: 22px; font-size: 9px; margin-top: -2px; }
|
|
764
|
+
.conn-card .ceiling { display: grid; grid-template-columns: auto auto; gap: 8px 12px; align-items: center; margin-top: 6px; padding-top: 12px; border-top: 1px solid var(--ph-faint); }
|
|
765
|
+
.conn-card .ceiling .k { font-size: 9.5px; letter-spacing: .16em; color: var(--ph-dim); }
|
|
766
|
+
.conn-card .ceiling .why { grid-column: 1 / -1; font-size: 9px; letter-spacing: .08em; color: var(--ph-dim); text-transform: none; line-height: 1.5; }
|
|
767
|
+
.conn-card .seg { display: inline-flex; border: 1px solid var(--ph-dim); }
|
|
768
|
+
.conn-card .seg-option { border: 0; border-right: 1px solid var(--ph-faint); background: transparent; color: var(--ph-dim); font: inherit; font-size: 10px; letter-spacing: .1em; padding: 4px 9px; cursor: pointer; }
|
|
769
|
+
.conn-card .seg-option:last-child { border-right: 0; }
|
|
770
|
+
.conn-card .seg-option:hover { background: var(--ph-faint); color: var(--ph); }
|
|
771
|
+
.conn-card .seg-option.current { background: var(--ph); color: #041004; font-weight: 700; }
|
|
772
|
+
.conn-card .seg-option.o3.current { background: #ff7b72; }
|
|
773
|
+
.conn-card .seg-option:disabled { opacity: .35; cursor: default; }
|
|
774
|
+
.create-toggle[aria-pressed="true"] .lock.closed { display: none; }
|
|
775
|
+
.create-toggle[aria-pressed="true"] .lock.open { display: block; }
|
|
776
|
+
/* ORDER 937: a bash prompt on a black terminal, Homebrew green. */
|
|
777
|
+
/* Off: a dormant prompt, grey like the other idle controls. On: the terminal lights up. */
|
|
778
|
+
.ashcode-toggle { height: 30px; padding: 0 10px 0 9px; border-radius: 7px; border: 1px dashed var(--line-2); background: transparent; color: var(--text-3); font-family: var(--mono); font-size: 10px; font-weight: 500; letter-spacing: .06em; text-transform: none; cursor: pointer; align-self: center; display: inline-flex; align-items: center; gap: 6px; opacity: .8; transition: color .2s, border-color .2s, box-shadow .2s, background .2s, opacity .2s; }
|
|
779
|
+
.ashcode-toggle::before { content: '$'; color: var(--text-3); font-weight: 700; }
|
|
780
|
+
.ashcode-toggle::after { content: ''; width: 7px; height: 12px; background: currentColor; opacity: .25; margin-left: 1px; }
|
|
781
|
+
.ashcode-toggle:hover { opacity: 1; color: var(--text-2); border-color: var(--text-3); }
|
|
782
|
+
.ashcode-toggle[aria-pressed="true"] { opacity: 1; border-style: solid; background: #070907; color: var(--brew); border-color: var(--brew); font-weight: 700; box-shadow: 0 0 0 1px color-mix(in srgb, var(--brew) 25%, transparent), 0 0 18px color-mix(in srgb, var(--brew) 40%, transparent), inset 0 0 12px color-mix(in srgb, var(--brew) 14%, transparent); text-shadow: 0 0 8px color-mix(in srgb, var(--brew) 70%, transparent); }
|
|
783
|
+
.ashcode-toggle[aria-pressed="true"]::before { color: color-mix(in srgb, var(--brew) 75%, transparent); }
|
|
784
|
+
.ashcode-toggle[aria-pressed="true"]::after { animation: cursor-blink 1s steps(1) infinite; opacity: 1; }
|
|
785
|
+
.ashcode-toggle[aria-pressed="true"]:hover { color: var(--brew); border-color: var(--brew); }
|
|
786
|
+
:root[data-theme="light"] .ashcode-toggle, .ashcode-toggle { /* stays a black terminal in every theme */ }
|
|
787
|
+
|
|
788
|
+
/* With ORDER 937 lit, the field widens like CREATE and glows Homebrew green. */
|
|
789
|
+
.composer.ordering { width: min(1180px, 100% - 40px); }
|
|
790
|
+
.composer.ordering .field { position: relative; border-color: color-mix(in srgb, var(--brew) 70%, transparent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--brew) 14%, transparent); }
|
|
791
|
+
.composer.ordering .crew-label { color: var(--brew); text-shadow: 0 0 8px color-mix(in srgb, var(--brew) 55%, transparent); }
|
|
792
|
+
.composer.ordering .editor textarea::placeholder { color: color-mix(in srgb, var(--brew) 60%, transparent); }
|
|
793
|
+
.composer.creating.ordering .field { border-color: var(--mode-2); box-shadow: 0 0 0 3px color-mix(in srgb, var(--mode-2) 18%, transparent), inset 0 0 0 1px color-mix(in srgb, var(--brew) 45%, transparent); }
|
|
794
|
+
|
|
795
|
+
/* The wink to MOTHER when the order is given: a CRT sweep and scanlines that fade. */
|
|
796
|
+
.composer .field::before { content: ''; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; opacity: 0; z-index: 2;
|
|
797
|
+
background:
|
|
798
|
+
linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--brew) 0%, transparent) 40%, color-mix(in srgb, var(--brew) 38%, transparent) 50%, transparent 60%) no-repeat,
|
|
799
|
+
repeating-linear-gradient(0deg, color-mix(in srgb, var(--brew) 10%, transparent) 0 1px, transparent 1px 3px);
|
|
800
|
+
background-size: 60% 100%, 100% 100%; background-position: -60% 0, 0 0; }
|
|
801
|
+
.composer.ash-wink .field::before { animation: ash-sweep 1.5s cubic-bezier(.2, .7, .2, 1) 1; }
|
|
802
|
+
.composer.ash-wink .crew-label { animation: phosphor-flicker .8s steps(1) 2; }
|
|
803
|
+
.composer.ash-wink .editor textarea { animation: ash-type .9s steps(1) 1; }
|
|
804
|
+
@keyframes ash-sweep { 0% { opacity: 0; background-position: -60% 0, 0 0; } 12% { opacity: 1; } 70% { opacity: .9; background-position: 160% 0, 0 0; } 100% { opacity: 0; background-position: 160% 0, 0 0; } }
|
|
805
|
+
@keyframes ash-type { 0%, 30% { caret-color: var(--brew); } 40% { caret-color: transparent; } 55% { caret-color: var(--brew); } 100% { caret-color: var(--text); } }
|
|
806
|
+
.field .rain { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: inherit; pointer-events: none; z-index: 3; }
|
|
807
|
+
.rain.global { position: fixed; inset: 0; width: 100vw; height: 100vh; pointer-events: none; z-index: 60; animation: rain-in .25s ease-out 1; }
|
|
808
|
+
@keyframes rain-in { from { opacity: 0; } to { opacity: 1; } }
|
|
809
|
+
/* GHOST: the field disintegrates into a grid of dots that shrink to nothing, then reintegrates dashed, in mode #0. */
|
|
810
|
+
@property --ghost-dot { syntax: '<length>'; inherits: false; initial-value: 7px; }
|
|
811
|
+
.composer.ghost-wink .field { animation: ghost-dissolve 1.3s cubic-bezier(.45, 0, .2, 1) 1;
|
|
812
|
+
-webkit-mask-image: radial-gradient(circle, #000 var(--ghost-dot), transparent calc(var(--ghost-dot) + .6px)); -webkit-mask-size: 8px 8px; -webkit-mask-position: 0 0;
|
|
813
|
+
mask-image: radial-gradient(circle, #000 var(--ghost-dot), transparent calc(var(--ghost-dot) + .6px)); mask-size: 8px 8px; mask-position: 0 0; }
|
|
814
|
+
@keyframes ghost-dissolve {
|
|
815
|
+
0% { --ghost-dot: 7px; opacity: 1; border-style: solid; border-color: var(--line-2); filter: blur(0); }
|
|
816
|
+
40% { --ghost-dot: 0px; opacity: .6; border-style: solid; border-color: var(--line-2); filter: blur(1.5px); }
|
|
817
|
+
58% { --ghost-dot: 0px; opacity: .6; border-style: dashed; border-color: var(--mode-0); filter: blur(1.5px); }
|
|
818
|
+
100% { --ghost-dot: 7px; opacity: .92; border-style: dashed; border-color: var(--mode-0); filter: blur(0); } }
|
|
819
|
+
.composer.control-wink .field::before { animation: control-sweep 2.2s cubic-bezier(.2, .7, .2, 1) 1;
|
|
820
|
+
background:
|
|
821
|
+
linear-gradient(90deg, transparent 0%, transparent 40%, color-mix(in srgb, var(--terror) 45%, transparent) 50%, transparent 60%) no-repeat,
|
|
822
|
+
repeating-linear-gradient(0deg, color-mix(in srgb, var(--terror) 14%, transparent) 0 1px, transparent 1px 3px);
|
|
823
|
+
background-size: 60% 100%, 100% 100%; }
|
|
824
|
+
.composer.control-wink .crew-label { animation: terror-flicker 1.1s steps(1) 2; }
|
|
825
|
+
.composer.control-wink .editor textarea { animation: control-type 1.4s steps(1) 1; }
|
|
826
|
+
@keyframes control-sweep { 0% { opacity: 0; background-position: -60% 0, 0 0; } 8% { opacity: 1; } 18% { opacity: .3; } 26% { opacity: 1; } 72% { opacity: .9; background-position: 160% 0, 0 0; } 100% { opacity: 0; background-position: 160% 0, 0 0; } }
|
|
827
|
+
@keyframes terror-flicker { 0%, 100% { filter: none; } 15% { filter: brightness(2) saturate(1.6); } 30% { filter: brightness(.5); } 45% { filter: brightness(1.8); } 60% { filter: brightness(.8); } }
|
|
828
|
+
@keyframes control-type { 0%, 30% { caret-color: var(--terror); } 40% { caret-color: transparent; } 55% { caret-color: var(--terror); } 100% { caret-color: var(--text); } }
|
|
829
|
+
@media (prefers-reduced-motion: reduce) { .composer.ash-wink .field::before, .composer.ash-wink .crew-label, .composer.ash-wink .editor textarea, .composer.control-wink .field::before, .composer.control-wink .crew-label, .composer.control-wink .editor textarea, .composer.ghost-wink .field, .rain.global { animation: none; } }
|
|
830
|
+
|
|
831
|
+
.who .badge.ash { color: var(--phosphor); border-color: color-mix(in srgb, var(--phosphor) 50%, transparent); }
|
|
832
|
+
.who .badge.ash.skipped { color: var(--text-3); border-color: var(--line-2); }
|
|
833
|
+
.ash-original { margin-top: 10px; border-top: 1px dashed var(--line-2); padding-top: 8px; }
|
|
834
|
+
.ash-original summary { color: var(--text-3); font-family: var(--mono); font-size: 10px; cursor: pointer; }
|
|
835
|
+
.ash-original pre { white-space: pre-wrap; overflow-wrap: anywhere; margin: 8px 0 0; font: inherit; color: var(--text-2); }
|
|
836
|
+
.ash-beta { color: var(--warn); font-size: 12px; }
|
|
837
|
+
.create-scopes { display: inline-flex; gap: 4px; margin-left: 4px; }
|
|
838
|
+
.create-scopes .cap { font-size: 8.5px; padding: 1px 5px; }
|
|
839
|
+
.create-scopes .cap.on { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 55%, transparent); }
|
|
840
|
+
.create-scopes .cap.no { text-decoration: line-through; opacity: .7; }
|
|
841
|
+
.system.lease.refused { color: var(--danger); }
|
|
842
|
+
/* CONTROL cards */
|
|
843
|
+
.system.control { color: var(--terror); text-shadow: 0 0 8px color-mix(in srgb, var(--terror) 45%, transparent); }
|
|
844
|
+
.system.control .who { color: var(--agent); }
|
|
845
|
+
.system.control code { font-family: var(--mono); font-size: 10.5px; padding: 1px 6px; border: 1px solid color-mix(in srgb, var(--terror) 45%, transparent); border-radius: 6px; }
|
|
846
|
+
.system.control.changed { display: grid; gap: 8px; justify-items: center; max-width: min(760px, 92%); padding: 12px 16px; border: 1px solid color-mix(in srgb, var(--terror) 55%, transparent); border-radius: 14px; background: color-mix(in srgb, var(--terror) 6%, transparent); text-shadow: none; text-transform: none; letter-spacing: 0; font-size: 12.5px; }
|
|
847
|
+
.system.control.changed .head { font-family: var(--mono); font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; }
|
|
848
|
+
.system.control.changed.quiet { border-style: dashed; color: var(--text-2); background: transparent; }
|
|
849
|
+
.system.control .files { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; justify-items: start; text-align: left; }
|
|
850
|
+
.system.control .files li { display: flex; gap: 8px; align-items: center; }
|
|
851
|
+
.system.control .files .st { font-family: var(--mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); min-width: 64px; }
|
|
852
|
+
.system.control .files .st.A { color: var(--phosphor); } .system.control .files .st.M { color: var(--warn); } .system.control .files .st.D { color: var(--danger); }
|
|
853
|
+
.system.control .files .file-ref { font-family: var(--mono); font-size: 12px; color: var(--text); background: transparent; border: 0; border-bottom: 1px dashed var(--line-2); padding: 0; cursor: pointer; }
|
|
854
|
+
.system.control .files .file-ref:disabled { text-decoration: line-through; cursor: default; }
|
|
855
|
+
.system.control .stat { margin: 0; font-family: var(--mono); font-size: 10.5px; color: var(--text-3); white-space: pre-wrap; }
|
|
856
|
+
.system.control .forbidden { font-family: var(--mono); font-size: 10.5px; color: var(--danger); letter-spacing: .04em; }
|
|
857
|
+
.system.control .undo { border: 1px solid var(--terror); background: color-mix(in srgb, var(--terror) 12%, transparent); color: var(--terror); font: inherit; font-family: var(--mono); font-size: 10px; letter-spacing: .16em; padding: 7px 12px; border-radius: 8px; cursor: pointer; }
|
|
858
|
+
.system.control .undo:hover { background: color-mix(in srgb, var(--terror) 22%, transparent); }
|
|
859
|
+
.system.control .undo:disabled { opacity: .5; cursor: default; }
|
|
860
|
+
.system.control .outcome { font-family: var(--mono); font-size: 10px; letter-spacing: .16em; color: var(--phosphor); }
|
|
861
|
+
.system.control.reverted { color: var(--phosphor); text-shadow: none; }
|
|
862
|
+
/* Escalation card: the plan waits for the human, with a clock */
|
|
863
|
+
.system.escalation { color: var(--warn); display: grid; gap: 8px; justify-items: center; max-width: min(760px, 92%); padding: 12px 16px; border: 1px dashed color-mix(in srgb, var(--warn) 55%, transparent); border-radius: 14px; background: color-mix(in srgb, var(--warn) 6%, transparent); text-transform: none; letter-spacing: 0; font-size: 12.5px; }
|
|
864
|
+
.system.escalation .head { font-family: var(--mono); font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; }
|
|
865
|
+
.system.escalation .head .who { color: var(--agent); }
|
|
866
|
+
.system.escalation .quote { font-family: inherit; font-size: 13px; color: var(--text-2); font-style: italic; text-align: center; overflow-wrap: anywhere; }
|
|
867
|
+
.system.escalation .actions { display: inline-flex; gap: 8px; align-items: center; flex-wrap: wrap; justify-content: center; }
|
|
868
|
+
.system.escalation button { border: 1px solid color-mix(in srgb, var(--warn) 65%, transparent); background: color-mix(in srgb, var(--warn) 12%, transparent); color: var(--warn); font: inherit; font-family: var(--mono); font-size: 10px; letter-spacing: .14em; padding: 6px 11px; border-radius: 8px; cursor: pointer; }
|
|
869
|
+
.system.escalation button.plan { border-style: double; }
|
|
870
|
+
.system.escalation button.deny { color: var(--text-2); border-color: var(--line-2); background: transparent; }
|
|
871
|
+
.system.escalation button:hover { filter: brightness(1.1); background: color-mix(in srgb, var(--warn) 22%, transparent); }
|
|
872
|
+
.system.escalation button:disabled { opacity: .5; cursor: default; }
|
|
873
|
+
.system.escalation .clock { font-family: var(--mono); font-size: 11px; letter-spacing: .1em; color: var(--text-3); margin-left: 6px; }
|
|
874
|
+
.system.escalation .clock.late { color: var(--crit); animation: blink 1s infinite; }
|
|
875
|
+
.system.escalation .outcome { font-family: var(--mono); font-size: 10px; letter-spacing: .16em; }
|
|
876
|
+
.system.escalation.granted { border-style: solid; color: var(--phosphor); border-color: color-mix(in srgb, var(--phosphor) 50%, transparent); background: color-mix(in srgb, var(--phosphor) 6%, transparent); }
|
|
877
|
+
.system.escalation.denied { color: var(--text-3); border-color: var(--line-2); background: transparent; }
|
|
878
|
+
.composer.creating .field { border-color: var(--mode-2); box-shadow: 0 0 0 3px color-mix(in srgb, var(--mode-2) 18%, transparent); }
|
|
879
|
+
.composer.creating .crew-label { color: var(--mode-2); }
|
|
880
|
+
.who .badge.lease { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 50%, transparent); }
|
|
881
|
+
.user .stamp .lease { color: var(--warn); }
|
|
882
|
+
.system.lease { color: var(--warn); }
|
|
883
|
+
.bubble .artifacts { margin: 10px 0 0; padding-top: 8px; border-top: 1px dashed var(--line-2); }
|
|
884
|
+
.bubble .artifacts .label { display: block; font-family: var(--mono); font-size: 9.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--warn); margin-bottom: 6px; }
|
|
885
|
+
@media (max-width: 680px) { .create-toggle .create-word { display: none; } .create-toggle { padding: 0 8px; } }
|
|
886
|
+
|
|
887
|
+
/* no horizontal overflow inside bubbles: wrap everything */
|
|
888
|
+
.bubble, .bubble * { min-width: 0; }
|
|
889
|
+
.bubble { max-width: 100%; overflow-x: hidden; }
|
|
890
|
+
.codeblock pre { white-space: pre-wrap; overflow-wrap: anywhere; overflow-x: hidden; }
|
|
891
|
+
.bubble table { display: block; max-width: 100%; overflow-x: auto; }
|
|
892
|
+
.bubble img.inline, .bubble .file-tile img { max-width: 100%; }
|
|
893
|
+
.plan-card li, .bubble li, .bubble p, .bubble a { overflow-wrap: anywhere; }
|
|
894
|
+
.bubble .table-wrap { overflow-x: auto; margin: 6px 0 10px; max-width: 100%; }
|
|
895
|
+
.bubble table { border-collapse: collapse; font-size: 13px; line-height: 1.45; min-width: 60%; }
|
|
896
|
+
.bubble th, .bubble td { border: 1px solid color-mix(in srgb, var(--bubble-ink) 14%, transparent); padding: 6px 10px; vertical-align: top; text-align: left; }
|
|
897
|
+
.bubble th { font-weight: 650; background: color-mix(in srgb, var(--bubble-ink) 6%, transparent); font-size: 12px; letter-spacing: .02em; }
|
|
898
|
+
.bubble tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--bubble-ink) 3%, transparent); }
|
|
899
|
+
.row.user .bubble th, .row.user .bubble td { border-color: color-mix(in srgb, var(--user-ink) 25%, transparent); }
|
|
900
|
+
.row .col { max-width: 100%; }
|
|
901
|
+
.thread-inner { overflow-x: hidden; }
|
|
902
|
+
/* scope toggles in connection cards */
|
|
903
|
+
.conn-card .scopes { display: grid; gap: 10px; align-self: start; padding-top: 12px; border-top: 1px solid var(--ph-faint); }
|
|
904
|
+
.conn-card .scope .assist { margin-left: 6px; border: 1px solid var(--ph-dim); background: transparent; color: var(--ph); font: inherit; font-size: 8.5px; letter-spacing: .14em; padding: 1px 6px; cursor: pointer; text-transform: uppercase; }
|
|
905
|
+
.conn-card .scope .assist:hover { background: var(--ph-faint); }
|
|
906
|
+
.conn-card .scope { display: flex; align-items: center; gap: 8px; font-size: 10px; letter-spacing: .12em; color: var(--ph); cursor: pointer; }
|
|
907
|
+
.conn-card .scope input { accent-color: #9bff66; width: auto; }
|
|
908
|
+
.conn-card .scope.unavailable { color: var(--ph-dim); cursor: not-allowed; }
|
|
909
|
+
.conn-card .scope .why { margin-left: auto; font-size: 9px; letter-spacing: .08em; color: var(--ph-dim); text-transform: none; }
|
|
910
|
+
|
|
911
|
+
/* CREATE armed and text present: the field widens past the column; height follows line breaks only */
|
|
912
|
+
/* Field box: one line, always. It grows only with explicit line breaks
|
|
913
|
+
(max two, three visible lines) and scrolls beyond. It widens, keeping
|
|
914
|
+
one line, while CREATE is armed, so the longer lease prompt fits. */
|
|
915
|
+
.field { align-items: center; }
|
|
916
|
+
.composer { transition: width .3s ease; }
|
|
917
|
+
.composer.creating { width: min(1180px, 100% - 40px); }
|
|
918
|
+
.editor textarea::placeholder { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
919
|
+
.editor { position: relative; display: grid; min-width: 0; }
|
|
920
|
+
.editor textarea, .editor .highlight { grid-area: 1 / 1; margin: 0; padding: 7px 0; line-height: 21px; font-size: 15px; font-family: inherit; letter-spacing: normal; white-space: pre-wrap; overflow-wrap: anywhere; word-break: normal; box-sizing: content-box; min-height: 0; max-height: none; overflow-y: auto; }
|
|
921
|
+
.editor textarea { position: relative; z-index: 1; color: transparent; caret-color: var(--text); }
|
|
922
|
+
.editor textarea::selection { background: color-mix(in srgb, var(--phosphor) 30%, transparent); }
|
|
923
|
+
.composer.stopall .editor textarea { color: var(--terror); }
|
|
924
|
+
.composer.stopall .editor .highlight { visibility: hidden; }
|
|
925
|
+
.editor .highlight { color: var(--text); pointer-events: none; scrollbar-width: none; }
|
|
926
|
+
.editor .highlight::-webkit-scrollbar { display: none; }
|
|
927
|
+
.editor .highlight .chip { --chip-bg: color-mix(in srgb, var(--agent, var(--phosphor)) 16%, var(--panel)); border-radius: 5px; padding: 0; margin: 0; background: var(--chip-bg); color: var(--agent, var(--phosphor)); box-shadow: 0 0 0 3px var(--chip-bg), 0 0 0 4px color-mix(in srgb, var(--agent, var(--phosphor)) 40%, transparent); font-weight: 600; }
|
|
928
|
+
.editor .highlight .chip.cmd { --agent: var(--phosphor); font-family: var(--mono); font-size: 13px; letter-spacing: .04em; }
|
|
929
|
+
.editor .highlight .chip.file { --agent: var(--text-2); font-family: var(--mono); font-size: 13px; letter-spacing: 0; font-weight: 500; }
|
|
930
|
+
.editor .highlight .chip.unknown { --agent: var(--text-3); text-decoration: underline dotted; font-weight: 500; }
|
|
931
|
+
.slash-menu { position: absolute; left: -12px; bottom: calc(100% + 14px); z-index: 30; min-width: 280px; max-width: min(460px, 90vw); border: 1px solid var(--line-2); background: var(--panel); border-radius: 14px; box-shadow: 0 14px 40px rgba(0, 0, 0, .35); padding: 6px; display: grid; gap: 2px; }
|
|
932
|
+
.slash-menu .item { display: grid; grid-template-columns: auto 1fr; gap: 10px; align-items: baseline; padding: 7px 10px; border-radius: 9px; cursor: pointer; border: 0; background: transparent; color: var(--text); text-align: left; font: inherit; }
|
|
933
|
+
.slash-menu .item .key { font-family: var(--mono); font-size: 12.5px; color: var(--agent, var(--phosphor)); font-weight: 600; white-space: nowrap; }
|
|
934
|
+
.slash-menu .item .what { font-size: 12.5px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
935
|
+
.slash-menu .item.off .key { color: var(--text-3); text-decoration: line-through; }
|
|
936
|
+
.slash-menu .item[aria-selected="true"], .slash-menu .item:hover { background: color-mix(in srgb, var(--agent, var(--phosphor)) 14%, transparent); }
|
|
937
|
+
.slash-menu .hint { padding: 4px 10px 6px; font-family: var(--mono); font-size: 10px; letter-spacing: .12em; color: var(--text-3); }
|
|
938
|
+
/* ---------- project files panel: lives in the free space right of the thread ---------- */
|
|
939
|
+
.tree-button { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 26px; border-radius: 6px; border: 1px solid var(--line-2); background: transparent; color: var(--text-2); cursor: pointer; padding: 0; }
|
|
940
|
+
.tree-button svg { width: 16px; height: 16px; }
|
|
941
|
+
.theme-button svg { display: none; }
|
|
942
|
+
.theme-button[data-theme="auto"] .t-auto, .theme-button[data-theme="light"] .t-light, .theme-button[data-theme="dark"] .t-dark { display: block; }
|
|
943
|
+
.tree-button:hover, .tree-button[aria-pressed="true"] { color: var(--phosphor); border-color: var(--phosphor); box-shadow: 0 0 14px color-mix(in srgb, var(--phosphor) 30%, transparent); }
|
|
944
|
+
.tree { grid-row: 3; justify-self: end; align-self: stretch; z-index: 5; width: clamp(240px, calc((100% - var(--column)) / 2 - 36px), 420px); margin: 18px 20px 10px 0; min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr); border: 1px solid var(--line-2); border-radius: 18px; background: var(--panel); box-shadow: 0 10px 30px rgba(0, 0, 0, .06); overflow: hidden; animation: tree-in .22s ease; }
|
|
945
|
+
@keyframes tree-in { from { opacity: 0; transform: translateX(8px); } to { opacity: 1; transform: none; } }
|
|
946
|
+
.tree-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 12px 10px 16px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 10px; letter-spacing: .18em; color: var(--text-2); }
|
|
947
|
+
.tree-title { display: flex; gap: 8px; align-items: baseline; min-width: 0; }
|
|
948
|
+
.tree-root { color: var(--text-3); letter-spacing: .06em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
949
|
+
.tree-close { border: 0; background: transparent; color: var(--text-3); font: inherit; font-size: 16px; line-height: 1; cursor: pointer; padding: 2px 6px; border-radius: 6px; }
|
|
950
|
+
.tree-close:hover { color: var(--text); background: var(--line); }
|
|
951
|
+
.tree-body { overflow: auto; padding: 8px 8px 14px; font-family: var(--mono); font-size: 12px; letter-spacing: .01em; }
|
|
952
|
+
.tree-body ul { list-style: none; margin: 0; padding: 0; }
|
|
953
|
+
.tree-body ul ul { padding-left: 14px; border-left: 1px solid var(--line); margin-left: 9px; }
|
|
954
|
+
.tree-body li { margin: 0; }
|
|
955
|
+
.tree-body .node { display: flex; align-items: center; gap: 6px; width: 100%; border: 0; background: transparent; color: var(--text-2); font: inherit; text-align: left; padding: 4px 8px; border-radius: 7px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
956
|
+
.tree-body .node:hover { background: color-mix(in srgb, var(--phosphor) 10%, transparent); color: var(--text); }
|
|
957
|
+
.tree-body .node .caret { width: 10px; color: var(--text-3); flex: none; font-size: 10px; }
|
|
958
|
+
.tree-body .node .name { overflow: hidden; text-overflow: ellipsis; }
|
|
959
|
+
.tree-body .node.dir .name { color: var(--text); }
|
|
960
|
+
.tree-body .node.file .name::before { content: ''; display: inline-block; width: 6px; height: 6px; border-radius: 2px; margin-right: 7px; background: var(--line-2); vertical-align: 1px; }
|
|
961
|
+
.tree-body .node.file.image .name::before { background: var(--phosphor); }
|
|
962
|
+
.tree-body .node.file.code .name::before { background: color-mix(in srgb, var(--warn) 70%, transparent); }
|
|
963
|
+
.tree-body .node .size { margin-left: auto; color: var(--text-3); font-size: 10px; padding-left: 8px; }
|
|
964
|
+
.tree-body .node.shallow .name::after { content: ' · not walked'; color: var(--text-3); font-size: 10px; }
|
|
965
|
+
.tree-body .empty-dir, .tree-body .error { padding: 4px 24px; color: var(--text-3); font-size: 11px; }
|
|
966
|
+
@media (max-width: 1180px) { .tree, .tree-button { display: none !important; } }
|
|
967
|
+
|
|
968
|
+
.command-card { margin: 10px 0 6px; max-width: min(860px, 100%); border: 1px solid var(--line-2); border-radius: 12px; background: color-mix(in srgb, var(--panel) 80%, transparent); overflow: hidden; }
|
|
969
|
+
.command-card.failed { border-color: color-mix(in srgb, var(--crit) 60%, transparent); }
|
|
970
|
+
.command-card .head { display: flex; gap: 10px; align-items: baseline; padding: 8px 12px; font-family: var(--mono); font-size: 10.5px; letter-spacing: .14em; color: var(--text-2); border-bottom: 1px solid var(--line-2); }
|
|
971
|
+
.command-card .head b { color: var(--phosphor); font-weight: 600; }
|
|
972
|
+
.command-card .head .args { color: var(--text-3); letter-spacing: .04em; }
|
|
973
|
+
.command-card pre { margin: 0; padding: 10px 12px; max-height: 320px; overflow: auto; font-family: var(--mono); font-size: 12px; line-height: 1.55; color: var(--text); white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
974
|
+
.command-card pre .h { color: var(--phosphor); font-weight: 600; }
|
|
975
|
+
|
|
976
|
+
.module-card select { border: 1px solid var(--ph-dim); background: #000; color: var(--ph); font: inherit; font-size: 10.5px; letter-spacing: .06em; padding: 6px 8px; }
|