@jossuealcala/madre 1.0.1 → 1.0.3
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/ADDITIONAL-TERMS.md +93 -0
- package/CHANGELOG.en.md +2013 -0
- package/CHANGELOG.md +102 -1
- package/CONTRIBUTING.md +1 -1
- package/LICENSE +661 -202
- package/NOTICE +26 -14
- package/README.en.md +241 -0
- package/README.md +21 -12
- package/TRADEMARKS.en.md +50 -0
- package/TRADEMARKS.md +33 -16
- package/bin/madre.cjs +40 -0
- package/bin/madre.mjs +7 -0
- package/docs/INTERNALS.md +6 -0
- package/docs/REFERENCE.md +40 -5
- package/docs/SDK.md +4 -2
- package/docs/en/INTERNALS.md +103 -0
- package/docs/en/REFERENCE.md +365 -0
- package/docs/en/SDK.md +308 -0
- package/docs/en/training/README.md +59 -0
- package/docs/training/README.md +48 -9
- package/docs/training/train.sh +7 -2
- package/package.json +13 -5
- package/public/abduction.js +2 -0
- package/public/app.js +3154 -539
- package/public/attribution.js +114 -0
- package/public/brands.js +23 -6
- package/public/code-tools.js +143 -0
- package/public/editor.js +22 -4
- package/public/es.js +1004 -416
- package/public/hardware.js +50 -0
- package/public/i18n.js +25 -1
- package/public/index.html +18 -11
- package/public/inquiry.js +2 -0
- package/public/loader.js +2 -0
- package/public/macroverso.js +189 -96
- package/public/market-art.js +161 -0
- package/public/market-view.js +529 -0
- package/public/market.js +189 -0
- package/public/neural.js +110 -0
- package/public/nostromo-engine.js +414 -47
- package/public/power.js +100 -0
- package/public/resay.js +11 -0
- package/public/review-ask.js +2 -0
- package/public/routing.js +23 -1
- package/public/salas-mac.css +119 -18
- package/public/salas-mac.html +14 -2
- package/public/salas-mac.js +358 -56
- package/public/salas.css +2 -0
- package/public/salas.html +1 -0
- package/public/salas.js +4 -2
- package/public/styles.css +1793 -77
- package/public/syntax.js +2 -0
- package/public/touch.js +2 -0
- package/public/tour-chapters.js +2 -0
- package/public/tour.js +84 -5
- package/public/troubleshooting.js +24 -17
- package/public/wallpaper.js +275 -0
- package/src/adapters/claude.mjs +2 -0
- package/src/adapters/codex.mjs +2 -0
- package/src/adapters/cursor.mjs +96 -0
- package/src/adapters/gemini.mjs +13 -4
- package/src/adapters/madre.mjs +5 -2
- package/src/adapters/opencode.mjs +7 -3
- package/src/adapters/process.mjs +2 -0
- package/src/asking.mjs +2 -0
- package/src/auth-probe.mjs +145 -12
- package/src/bridge/devices.mjs +2 -0
- package/src/bridge/handoff.mjs +2 -0
- package/src/bridge/host.mjs +2 -0
- package/src/bridge/network.mjs +2 -0
- package/src/bridge/policy.mjs +3 -1
- package/src/bridge/qr.mjs +2 -0
- package/src/bridge/server.mjs +2 -0
- package/src/capabilities.mjs +11 -0
- package/src/chats.mjs +2 -0
- package/src/checkpoint.mjs +18 -1
- package/src/choices.mjs +2 -0
- package/src/cli-args.mjs +2 -0
- package/src/cold.mjs +2 -0
- package/src/commands.mjs +2 -0
- package/src/config.mjs +2 -0
- package/src/conversation-context.mjs +15 -1
- package/src/credentials.mjs +35 -3
- package/src/dataset.mjs +78 -4
- package/src/directives.mjs +2 -0
- package/src/distiller.mjs +2 -0
- package/src/embeddings.mjs +2 -0
- package/src/enlaces.mjs +214 -6
- package/src/event-store.mjs +2 -0
- package/src/exam.mjs +6 -4
- package/src/extensions.mjs +13 -3
- package/src/eyecat-watch.mjs +2 -0
- package/src/eyecat.mjs +2 -0
- package/src/file-ops.mjs +2 -0
- package/src/files.mjs +32 -0
- package/src/github.mjs +2 -0
- package/src/heartbeat.mjs +2 -0
- package/src/i18n.mjs +31 -1
- package/src/image-studio.mjs +2 -0
- package/src/json-file.mjs +2 -0
- package/src/launch.mjs +2 -0
- package/src/lease.mjs +5 -1
- package/src/lobby-work.mjs +2 -0
- package/src/local-ai.mjs +2 -0
- package/src/looks.mjs +127 -2
- package/src/market-key.mjs +8 -0
- package/src/market-remote.mjs +239 -0
- package/src/maturity.mjs +3 -1
- package/src/mcp/connect.mjs +345 -0
- package/src/mcp/github-server.mjs +2 -0
- package/src/mcp/image-server.mjs +2 -0
- package/src/mcp/memory-server.mjs +2 -0
- package/src/mcp/proxy.mjs +153 -0
- package/src/mcp/smtp-server.mjs +2 -0
- package/src/memory-dashboard.mjs +2 -0
- package/src/memory-tools.mjs +2 -0
- package/src/memory.mjs +2 -0
- package/src/models.mjs +49 -3
- package/src/module-scope.mjs +68 -0
- package/src/modules/ahp.mjs +104 -7
- package/src/modules/ash-policy.mjs +2 -0
- package/src/modules/ash.mjs +3 -1
- package/src/modules/bishop-exam.mjs +122 -0
- package/src/modules/bishop-plan.mjs +5 -3
- package/src/modules/bishop.mjs +84 -23
- package/src/modules/choices.mjs +2 -0
- package/src/modules/correo.mjs +2 -0
- package/src/modules/enlaces.mjs +89 -6
- package/src/modules/git-pulse.mjs +2 -0
- package/src/modules/github.mjs +2 -0
- package/src/modules/helpers.mjs +2 -0
- package/src/modules/image-studio.mjs +13 -2
- package/src/modules/index.mjs +4 -1
- package/src/modules/intents-calibration.mjs +2 -0
- package/src/modules/intents-desk.mjs +4 -2
- package/src/modules/intents-observe.mjs +2 -0
- package/src/modules/intents-policy.mjs +4 -1
- package/src/modules/intents-try.mjs +2 -0
- package/src/modules/intents.mjs +11 -7
- package/src/modules/local-models.mjs +124 -0
- package/src/modules/mcp-connect.mjs +293 -0
- package/src/modules/ollama.mjs +15 -4
- package/src/modules/playwright.mjs +88 -15
- package/src/modules/ripley.mjs +2 -0
- package/src/modules/runs.mjs +5 -3
- package/src/modules/sdk.mjs +63 -9
- package/src/modules/updates.mjs +2 -0
- package/src/mother.mjs +2 -0
- package/src/npm-launch.mjs +18 -0
- package/src/ollama.mjs +8 -5
- package/src/outbound.mjs +16 -6
- package/src/override.mjs +2 -0
- package/src/ports.mjs +6 -2
- package/src/prices.mjs +2 -0
- package/src/privacy.mjs +2 -0
- package/src/quota-monitor.mjs +2 -0
- package/src/quota-sources.mjs +2 -0
- package/src/request-guard.mjs +2 -0
- package/src/review-ask.mjs +2 -0
- package/src/room/archivist.mjs +2 -0
- package/src/room/attachments.mjs +2 -0
- package/src/room/budget.mjs +2 -0
- package/src/room/context.mjs +2 -0
- package/src/room/control.mjs +7 -1
- package/src/room/copilot.mjs +76 -0
- package/src/room/economy.mjs +2 -0
- package/src/room/escalation.mjs +2 -0
- package/src/room/ghost.mjs +2 -0
- package/src/room/guard.mjs +2 -0
- package/src/room/prompt.mjs +25 -5
- package/src/room/returns.mjs +82 -0
- package/src/room/runs.mjs +4 -0
- package/src/room/vectors.mjs +2 -0
- package/src/room.mjs +223 -35
- package/src/router.mjs +3 -1
- package/src/runs.mjs +6 -1
- package/src/runtime-detection.mjs +11 -0
- package/src/salas.mjs +28 -0
- package/src/sentinel-errors.mjs +2 -0
- package/src/server-sentinel.mjs +2 -0
- package/src/server.mjs +757 -81
- package/src/setup.mjs +3 -1
- package/src/smtp.mjs +2 -0
- package/src/tour.mjs +2 -0
- package/src/updates.mjs +2 -0
- package/src/usage-sentinel.mjs +2 -0
- package/src/vault.mjs +2 -0
- package/src/verdict.mjs +3 -1
- package/src/whats-new.mjs +2 -0
package/public/styles.css
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
MADRE · © 2026 Jossue Alcalá · GNU AGPL v3 with additional terms (Section 7): ADDITIONAL-TERMS.md */
|
|
1
3
|
/* MADRE — a conversation, not a log.
|
|
2
4
|
iMessage for the dialogue, a terminal for the metadata, MOTHER for the mood. */
|
|
3
5
|
|
|
@@ -41,6 +43,9 @@
|
|
|
41
43
|
--text-3: #626a5f;
|
|
42
44
|
|
|
43
45
|
--phosphor: #9bff66; /* MOTHER */
|
|
46
|
+
/* MADRE's own green, which an accent never repaints: the copilot wears it (2026-10-14). */
|
|
47
|
+
--madre-green: #9bff66;
|
|
48
|
+
--madre-green-ink: #0a1405;
|
|
44
49
|
--brew: #28fe14; /* Terminal.app 'Homebrew' green */
|
|
45
50
|
--brew-ink: #041004;
|
|
46
51
|
--phosphor-ink: #0a1405;
|
|
@@ -90,6 +95,14 @@
|
|
|
90
95
|
--icon-stroke: 1.6;
|
|
91
96
|
--icon-stroke-hover: 1.8;
|
|
92
97
|
--icon-stroke-on: 2.05;
|
|
98
|
+
/* The icons' sizes (1.0.3): four, and which one a drawing takes is said by what holds it, never
|
|
99
|
+
by the drawing. A mark inside a pill, a tab or a badge (×, ⌄, ✓); a key of 22 to 30 px, or a
|
|
100
|
+
drawing beside a word; a square key of 34 px (the narrow bar, the house's keys, the box); a
|
|
101
|
+
round key that floats (40 to 44 px). */
|
|
102
|
+
--ico-xs: 12px;
|
|
103
|
+
--ico-sm: 15px;
|
|
104
|
+
--ico-md: 18px;
|
|
105
|
+
--ico-lg: 22px;
|
|
93
106
|
}
|
|
94
107
|
/* Reading code, in whichever ground the room is standing on. These were picked for phosphor on
|
|
95
108
|
black; on white the same green and yellow disappear, so each one has a light value of its own. */
|
|
@@ -121,6 +134,8 @@
|
|
|
121
134
|
--text-2: #5a615a;
|
|
122
135
|
--text-3: #767d75;
|
|
123
136
|
--phosphor: #2f8a1c;
|
|
137
|
+
--madre-green: #2f8a1c;
|
|
138
|
+
--madre-green-ink: #ffffff;
|
|
124
139
|
--brew: #178f0c;
|
|
125
140
|
--brew-ink: #ffffff;
|
|
126
141
|
--phosphor-ink: #ffffff;
|
|
@@ -157,6 +172,8 @@
|
|
|
157
172
|
--text-2: #5a615a;
|
|
158
173
|
--text-3: #767d75;
|
|
159
174
|
--phosphor: #2f8a1c;
|
|
175
|
+
--madre-green: #2f8a1c;
|
|
176
|
+
--madre-green-ink: #ffffff;
|
|
160
177
|
--brew: #178f0c;
|
|
161
178
|
--brew-ink: #ffffff;
|
|
162
179
|
--phosphor-ink: #ffffff;
|
|
@@ -829,8 +846,11 @@ textarea::placeholder { color: var(--text-3); }
|
|
|
829
846
|
.composer.m2 { --mode: var(--mode-2); --mode-ink: var(--mode-2-ink); }
|
|
830
847
|
.composer.m3 { --mode: var(--mode-3); --mode-ink: var(--mode-3-ink); }
|
|
831
848
|
.composer.m4 { --mode: var(--mode-4); --mode-ink: var(--mode-4-ink); }
|
|
849
|
+
/* Under the copilot #3 is MADRE's green, not EDIT's red: the chip, the send and the ring follow. */
|
|
850
|
+
.composer.m3.copilot { --mode: var(--madre-green); --mode-ink: var(--madre-green-ink); }
|
|
851
|
+
.composer.copilot .picker .mode-chip.m3 { --mode: var(--madre-green); }
|
|
832
852
|
.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: var(--lift-1); transition: background calc(250ms * var(--motion-scale)), box-shadow calc(250ms * var(--motion-scale)); }
|
|
833
|
-
.field button[type="submit"] svg { width:
|
|
853
|
+
.field button[type="submit"] svg { width: var(--ico-md); height: var(--ico-md); }
|
|
834
854
|
.field button[type="submit"]:hover { filter: brightness(1.06); }
|
|
835
855
|
.field button[type="submit"]:disabled { opacity: .4; cursor: default; box-shadow: none; }
|
|
836
856
|
.pick-label .pick-note { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; font-family: var(--mono); font-size: 9px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-3); white-space: nowrap; }
|
|
@@ -886,6 +906,11 @@ textarea::placeholder { color: var(--text-3); }
|
|
|
886
906
|
.who .reply { max-width: 150px; }
|
|
887
907
|
.system .gauge { width: 160px; }
|
|
888
908
|
}
|
|
909
|
+
/* A conversation 680 px wide beside a docked panel reads as one in a 680 px window (app.js, roomWidth);
|
|
910
|
+
the bar has its own container and folds by itself. */
|
|
911
|
+
:where(:root.room-680) .row { max-width: 96%; }
|
|
912
|
+
:where(:root.room-680) .who .reply { max-width: 150px; }
|
|
913
|
+
:where(:root.room-680) .system .gauge { width: 160px; }
|
|
889
914
|
|
|
890
915
|
/* ================= MU/TH/UR: troubleshooting ================= */
|
|
891
916
|
.mother-button {
|
|
@@ -1009,6 +1034,10 @@ dialog.mother::backdrop { background: rgba(0, 0, 0, .82); backdrop-filter: blur(
|
|
|
1009
1034
|
.mother-cmd .copy:hover { color: var(--ph); border-color: var(--ph-dim); }
|
|
1010
1035
|
.mother-cmd .copy.done { color: var(--ph); border-color: var(--ph); }
|
|
1011
1036
|
.mother-cmd .copy:hover { color: var(--ph); border-color: var(--ph); }
|
|
1037
|
+
/* The copy key holds only its drawing: a button rule of a sheet or a card (13px each side) used to
|
|
1038
|
+
reach it and leave the drawing no room, an empty square beside the command (2026-10-18). */
|
|
1039
|
+
.mother-cmd > .copy { padding: 0 !important; min-width: 26px; }
|
|
1040
|
+
.mother-cmd > .copy svg { flex: none; width: 13px; height: 13px; }
|
|
1012
1041
|
.mother-record { display: grid; grid-template-columns: 64px 92px 1fr auto 20px; gap: 14px; align-items: baseline; padding: 10px 0; border-bottom: 1px solid var(--ph-faint); font-size: 12px; }
|
|
1013
1042
|
.mother-record .t { color: var(--ph-dim); }
|
|
1014
1043
|
.mother-record .a { color: var(--agent, var(--ph)); text-transform: uppercase; letter-spacing: .1em; }
|
|
@@ -1081,8 +1110,11 @@ dialog.mother::backdrop { background: rgba(0, 0, 0, .82); backdrop-filter: blur(
|
|
|
1081
1110
|
.module-card .actions .note { font-size: 10px; letter-spacing: .12em; color: var(--ph-dim); }
|
|
1082
1111
|
.module-card .confirm { border: 1px dashed var(--ph); padding: 12px 14px; display: grid; gap: 10px; }
|
|
1083
1112
|
.module-card .confirm .warn { color: #ffd166; font-size: 11px; letter-spacing: .12em; }
|
|
1084
|
-
|
|
1085
|
-
|
|
1113
|
+
/* What an install printed, in the same box as the commands beside it (2026-10-18): the page's own
|
|
1114
|
+
ground and ink, in the code face. It was a black terminal painted with the theme's phosphor,
|
|
1115
|
+
which on the light theme is a dark green: dark grey on black, unreadable. */
|
|
1116
|
+
.module-log { max-height: 260px; overflow-y: auto; margin: 0; padding: 10px 12px; border: 0; border-radius: 10px; background: color-mix(in srgb, var(--text) 5%, transparent); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .14); font-family: var(--mono); font-size: 11.5px; line-height: 1.6; letter-spacing: 0; text-transform: none; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--text-2); }
|
|
1117
|
+
.module-log .err { color: var(--crit, #d93a3a); }
|
|
1086
1118
|
.system.module { color: var(--phosphor); }
|
|
1087
1119
|
.system.module .cmd { text-transform: none; letter-spacing: 0; color: var(--text-2); display: block; margin-top: 4px; }
|
|
1088
1120
|
.system.module.failed { color: var(--danger); }
|
|
@@ -1184,7 +1216,11 @@ dialog.mother::backdrop { background: rgba(0, 0, 0, .82); backdrop-filter: blur(
|
|
|
1184
1216
|
|
|
1185
1217
|
.model-menu.effort-menu { --tone: var(--agent, var(--phosphor)); width: min(400px, calc(100vw - 24px)); padding: 12px 14px 10px; }
|
|
1186
1218
|
.effort-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 2px 2px 12px; }
|
|
1187
|
-
|
|
1219
|
+
/* The title on the left and AUTO in the right corner, on the same line (2026-10-14): the title
|
|
1220
|
+
keeps its room and is cut before it is covered; a long AUTO reading is cut instead of the title. */
|
|
1221
|
+
.effort-head .model-menu-title { flex: 1 1 auto; min-width: 0; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.4; }
|
|
1222
|
+
.effort-head .effort-auto { margin-left: auto; max-width: 52%; }
|
|
1223
|
+
.effort-head .effort-auto .hint { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1188
1224
|
/* Letting the CLI decide: a small switch beside the title, lit while it is the choice. */
|
|
1189
1225
|
.effort-auto { display: inline-flex; align-items: center; gap: 7px; flex: none; height: 26px; padding: 0 10px 0 9px; border: 1px solid var(--line-2); border-radius: 999px; background: transparent; color: var(--text-2); font: inherit; cursor: pointer; transition: color var(--motion) var(--ease-out), border-color var(--motion) var(--ease-out), background-color var(--motion) var(--ease-out); }
|
|
1190
1226
|
.effort-auto .auto-dot { width: 7px; height: 7px; border-radius: 50%; border: 1.5px solid currentColor; transition: background-color var(--motion) var(--ease-out); }
|
|
@@ -1327,7 +1363,7 @@ dialog.override[open] { display: grid; place-items: center; }
|
|
|
1327
1363
|
.field { grid-template-columns: auto minmax(0, 1fr) auto auto auto auto; }
|
|
1328
1364
|
.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; }
|
|
1329
1365
|
.attach:hover { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); }
|
|
1330
|
-
.attach svg { width:
|
|
1366
|
+
.attach svg { width: var(--ico-md); height: var(--ico-md); }
|
|
1331
1367
|
.composer.dropping .field { border-color: var(--phosphor); box-shadow: 0 0 0 3px color-mix(in srgb, var(--phosphor) 16%, transparent); }
|
|
1332
1368
|
.attachments { display: flex; gap: 8px; flex-wrap: wrap; padding: 0 6px; }
|
|
1333
1369
|
.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; }
|
|
@@ -1382,7 +1418,7 @@ dialog.viewer { border: 0; padding: 0; width: min(1100px, 96vw); max-width: 96vw
|
|
|
1382
1418
|
The crew is the exception that needs markup: five spheres cannot be compacted by CSS into one
|
|
1383
1419
|
button, so there are two elements and the container query picks which one is on screen. */
|
|
1384
1420
|
.bar-icon { display: inline-flex; align-items: center; justify-content: center; gap: 5px; width: auto; padding: 0 8px 0 6px; height: 28px; padding: 0; border-radius: 8px; border: 1px solid var(--line-2); background: transparent; color: var(--text-2); cursor: pointer; }
|
|
1385
|
-
.bar-icon svg { width:
|
|
1421
|
+
.bar-icon svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
1386
1422
|
.bar-icon:hover { color: var(--phosphor); border-color: var(--phosphor); }
|
|
1387
1423
|
.bar-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-family: var(--mono); font-size: 9px; letter-spacing: 0; }
|
|
1388
1424
|
.bar-glyph { display: none; }
|
|
@@ -1412,7 +1448,7 @@ dialog.viewer { border: 0; padding: 0; width: min(1100px, 96vw); max-width: 96vw
|
|
|
1412
1448
|
that was on screen. A count belongs inside the thing it counts. */
|
|
1413
1449
|
.mother-button { width: auto; height: 28px; padding: 0 9px 0 7px; gap: 5px; font-size: 0; justify-content: center; }
|
|
1414
1450
|
.mother-button .mother-glyph { display: none; }
|
|
1415
|
-
.mother-button .bar-glyph { display: block; width:
|
|
1451
|
+
.mother-button .bar-glyph { display: block; width: var(--ico-md); height: var(--ico-md); }
|
|
1416
1452
|
.mother-button .modules-count, .mother-button .mother-count { font-size: 9px; }
|
|
1417
1453
|
.stop-all { width: 30px; height: 28px; padding: 0; gap: 0; font-size: 0; justify-content: center; }
|
|
1418
1454
|
/* Squircles with their count on the corner, the way a phone shows it. The count used to be
|
|
@@ -1421,7 +1457,7 @@ dialog.viewer { border: 0; padding: 0; width: min(1100px, 96vw); max-width: 96vw
|
|
|
1421
1457
|
and touches nothing else. A ring in the background colour cuts it out of the outline. */
|
|
1422
1458
|
.bar { gap: 14px; }
|
|
1423
1459
|
.bar-icon, .mother-button, .stop-all { position: relative; width: 34px; height: 34px; padding: 0; gap: 0; border-radius: 11px; justify-content: center; }
|
|
1424
|
-
.bar-icon svg, .mother-button .bar-glyph { width:
|
|
1460
|
+
.bar-icon svg, .mother-button .bar-glyph { width: var(--ico-md); height: var(--ico-md); }
|
|
1425
1461
|
.bar-icon .bar-count, .mother-button .modules-count, .mother-button .mother-count {
|
|
1426
1462
|
position: absolute; top: -6px; right: -7px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
|
|
1427
1463
|
font-family: var(--mono); font-size: 9.5px; font-weight: 700; line-height: 18px; box-shadow: 0 0 0 2px var(--bg);
|
|
@@ -1521,6 +1557,8 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1521
1557
|
.viewer-nav { display: inline-flex; gap: 4px; }
|
|
1522
1558
|
.viewer-nav .nav { width: 26px; height: 26px; display: grid; place-items: center; border: 1px solid var(--line-2); background: transparent; color: var(--text-2); border-radius: 7px; cursor: pointer; font: inherit; font-size: 14px; line-height: 1; }
|
|
1523
1559
|
.viewer-nav .nav:hover { color: var(--text); border-color: var(--text-3); }
|
|
1560
|
+
/* The browser's reload is the bar's reload mark (2026-10-14), the same drawing, still. */
|
|
1561
|
+
.viewer-nav .nav.reload svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
1524
1562
|
.viewer-nav .nav:disabled { opacity: .35; cursor: default; }
|
|
1525
1563
|
.viewer-errors { display: grid; gap: 6px; padding: 8px 16px; border-bottom: 1px solid color-mix(in srgb, var(--danger) 40%, transparent); background: color-mix(in srgb, var(--danger) 7%, transparent); font-family: var(--mono); font-size: 11px; }
|
|
1526
1564
|
.viewer-errors:not([hidden]) + .viewer-body { height: auto; max-height: calc(100% - 46px); }
|
|
@@ -1578,7 +1616,7 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1578
1616
|
|
|
1579
1617
|
/* ================= creation lease ================= */
|
|
1580
1618
|
.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 calc(200ms * var(--motion-scale)), border-color calc(200ms * var(--motion-scale)), background calc(200ms * var(--motion-scale)); }
|
|
1581
|
-
.create-toggle svg { width:
|
|
1619
|
+
.create-toggle svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
1582
1620
|
.create-toggle:hover { color: var(--text); border-color: var(--text-3); }
|
|
1583
1621
|
.create-toggle[aria-pressed="true"] { color: var(--warn); border-color: var(--warn); background: color-mix(in srgb, var(--warn) 12%, transparent); text-shadow: none; }
|
|
1584
1622
|
.create-toggle .lock.open { display: none; }
|
|
@@ -1695,8 +1733,10 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1695
1733
|
.system.control.changed.quiet { border-style: dashed; color: var(--text-2); background: transparent; }
|
|
1696
1734
|
/* The status and the path in two columns: the status never breaks inside a word (MODIFICADO used
|
|
1697
1735
|
to split as MODIFICAD / O), and a long path breaks inside itself, left-aligned, not centred. */
|
|
1698
|
-
|
|
1699
|
-
|
|
1736
|
+
/* Centred like the head and the tally around them: the list is one block in the middle of the card,
|
|
1737
|
+
its kinds and its files still each in their own column. */
|
|
1738
|
+
.system.control .files { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: max-content minmax(0, max-content); justify-content: center; gap: 6px 10px; align-items: baseline; justify-self: stretch; text-align: left; }
|
|
1739
|
+
.system.control .files li { display: contents; }
|
|
1700
1740
|
.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; white-space: nowrap; }
|
|
1701
1741
|
.system.control .files .st.A { color: var(--phosphor); } .system.control .files .st.M { color: var(--warn); } .system.control .files .st.D { color: var(--danger); }
|
|
1702
1742
|
.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; text-align: left; overflow-wrap: anywhere; justify-self: start; }
|
|
@@ -1762,6 +1802,8 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1762
1802
|
.bubble .artifacts { margin: 10px 0 0; padding-top: 8px; border-top: 1px dashed var(--line-2); }
|
|
1763
1803
|
.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; }
|
|
1764
1804
|
@media (max-width: 680px) { .create-toggle .create-word { display: none; } .create-toggle { padding: 0 8px; } }
|
|
1805
|
+
/* The same at 680 px of conversation beside a docked panel, where the window's width says nothing (app.js, roomWidth). */
|
|
1806
|
+
:where(:root.room-680) .create-toggle .create-word { display: none; } :where(:root.room-680) .create-toggle { padding: 0 8px; }
|
|
1765
1807
|
|
|
1766
1808
|
/* no horizontal overflow inside bubbles: wrap everything */
|
|
1767
1809
|
.bubble, .bubble * { min-width: 0; }
|
|
@@ -1910,6 +1952,13 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1910
1952
|
.mode-what { min-width: 0; font-size: 13px; line-height: 1.45; color: var(--text); }
|
|
1911
1953
|
.mode-what .who { display: inline; margin: 0; padding: 0; font: inherit; font-weight: 700; letter-spacing: 0; text-transform: none; color: var(--agent, var(--text)); }
|
|
1912
1954
|
.mode-why { font-size: 11.5px; line-height: 1.45; color: var(--text-2); }
|
|
1955
|
+
.mode-what .mode-time { font-family: var(--mono); font-size: 11px; letter-spacing: .04em; color: var(--text-2); }
|
|
1956
|
+
/* How long the permission holds: the time the agent asked for, preselected; the human may change it. */
|
|
1957
|
+
.mode-windows { display: inline-flex; flex-wrap: wrap; gap: 4px; padding: 3px; border-radius: 999px; background: color-mix(in srgb, var(--text) 5%, transparent); justify-self: start; }
|
|
1958
|
+
.mode-window { border: 0; border-radius: 999px; background: transparent; color: var(--text-2); font-family: var(--mono); font-size: 10px; letter-spacing: .08em; padding: 5px 10px; cursor: pointer; transition: background .18s ease, color .18s ease; }
|
|
1959
|
+
.mode-window:hover { color: var(--text); }
|
|
1960
|
+
.mode-window[aria-checked="true"] { background: var(--panel, #fff); color: var(--text); box-shadow: 0 1px 2px rgb(0 0 0 / .12); }
|
|
1961
|
+
.mode-window:focus-visible { outline: 2px solid color-mix(in srgb, var(--warn, #e2a022) 60%, transparent); outline-offset: 1px; }
|
|
1913
1962
|
.mode-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 4px; }
|
|
1914
1963
|
.mode-alt { border: 1px solid var(--line-2); border-radius: 7px; background: transparent; color: var(--text-2); font-family: var(--mono); font-size: 10px; letter-spacing: .1em; padding: 6px 11px; cursor: pointer; }
|
|
1915
1964
|
.mode-alt:hover { color: var(--text); border-color: var(--text-3); }
|
|
@@ -1967,6 +2016,16 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1967
2016
|
.run-request .run-line.ran .choice-tag { border-color: var(--ok, var(--phosphor)); color: var(--ok, var(--phosphor)); }
|
|
1968
2017
|
.run-request .run-line.failed .choice-tag { border-color: var(--crit); color: var(--crit); }
|
|
1969
2018
|
.run-request .run-summary { margin: 10px 2px 0; font-family: var(--mono); font-size: 10.5px; color: var(--text-2); }
|
|
2019
|
+
/* RUN ALL and the hand-back: quiet buttons in the agent's colour, under the summary. */
|
|
2020
|
+
.run-request .run-actions { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 2px 0; }
|
|
2021
|
+
.run-request .run-actions:empty { display: none; }
|
|
2022
|
+
.run-request :is(.run-all, .run-back) { border: 1px solid color-mix(in srgb, var(--agent, var(--phosphor)) 55%, transparent); border-radius: 999px; background: transparent; color: var(--agent, var(--text)); font-family: var(--mono); font-size: 10px; letter-spacing: .1em; padding: 6px 12px; cursor: pointer; transition: background .18s ease; }
|
|
2023
|
+
.run-request :is(.run-all, .run-back):hover:not(:disabled) { background: color-mix(in srgb, var(--agent, var(--phosphor)) 10%, transparent); }
|
|
2024
|
+
.run-request :is(.run-all, .run-back):disabled { opacity: .5; cursor: progress; }
|
|
2025
|
+
.run-request.returned .run-summary { color: var(--ok, var(--phosphor)); }
|
|
2026
|
+
.run-request.returned .run-all { display: none; }
|
|
2027
|
+
/* A message MADRE wrote for the human: the results of commands going back. Same bubble, quieter. */
|
|
2028
|
+
#messages .row.user.auto .bubble { opacity: .82; }
|
|
1970
2029
|
.run-request .run-progress-track { position: relative; flex: 1 1 100%; height: 3px; overflow: hidden; border-radius: 3px; background: color-mix(in srgb, var(--agent, var(--phosphor)) 18%, transparent); }
|
|
1971
2030
|
.run-request .run-progress-track::after { content: ''; position: absolute; inset: 0 auto 0 0; width: 32%; border-radius: inherit; background: var(--agent, var(--phosphor)); animation: run-travel 1.6s ease-in-out infinite alternate; }
|
|
1972
2031
|
@keyframes run-travel { from { transform: translateX(0); } to { transform: translateX(220%); } }
|
|
@@ -2038,6 +2097,7 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
2038
2097
|
.free-offer .free-go { flex: none; border: 1px solid var(--brew); background: transparent; color: var(--brew); font-family: var(--mono); font-size: 10px; font-weight: 600; letter-spacing: .12em; padding: 6px 12px; border-radius: 7px; cursor: pointer; }
|
|
2039
2098
|
.free-offer .free-go:hover { background: color-mix(in srgb, var(--brew) 16%, transparent); }
|
|
2040
2099
|
@media (max-width: 720px) { .free-offer { flex-wrap: wrap; } }
|
|
2100
|
+
:where(:root.room-720) .free-offer { flex-wrap: wrap; }
|
|
2041
2101
|
/* Intenciones: the same shelf as the @madre offer, in the room's accent when a cheaper rung was
|
|
2042
2102
|
measured to be enough or is worth measuring, and in the warning ink when the rung chosen looks
|
|
2043
2103
|
too light. The shelf itself is drawn with the box, below. */
|
|
@@ -2078,14 +2138,14 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2078
2138
|
.slash-menu .hint { padding: 4px 10px 6px; font-family: var(--mono); font-size: 10px; letter-spacing: .12em; color: var(--text-3); }
|
|
2079
2139
|
/* ---------- project files panel: lives in the free space right of the thread ---------- */
|
|
2080
2140
|
.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; }
|
|
2081
|
-
.tree-button svg { width:
|
|
2141
|
+
.tree-button svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
2082
2142
|
.tree-button:hover { color: var(--phosphor); border-color: var(--phosphor); box-shadow: var(--ring-soft); }
|
|
2083
2143
|
/* The conversations of this project, on the other side of the canvas from the files: the same
|
|
2084
2144
|
panel, so there is one shape to learn, and never both edges at once on a narrow screen. */
|
|
2085
2145
|
.tree.chats { justify-self: start; margin: 18px 0 10px 20px; grid-template-rows: auto minmax(0, 1fr) auto auto; }
|
|
2086
2146
|
.chats-new { padding: 10px 12px; border-top: 1px solid var(--line); }
|
|
2087
2147
|
.chats-new-button { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; border: 1px dashed var(--line-2); border-radius: 10px; background: transparent; color: var(--text-2); font-family: var(--mono); font-size: 10px; letter-spacing: .16em; padding: 9px 10px; cursor: pointer; }
|
|
2088
|
-
.chats-new-button svg { width:
|
|
2148
|
+
.chats-new-button svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
2089
2149
|
.chats-new-button:hover { color: var(--phosphor); border-color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 8%, transparent); }
|
|
2090
2150
|
.chats-body { padding: 10px 8px; display: grid; gap: 6px; align-content: start; }
|
|
2091
2151
|
.chats-body .chat { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: baseline; width: 100%; border: 0; background: transparent; color: var(--text-2); font: inherit; text-align: left; padding: 11px 12px; border-radius: 10px; cursor: pointer; }
|
|
@@ -2111,7 +2171,7 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2111
2171
|
.chats-foot { padding: 10px 14px; border-top: 1px solid var(--line); font-family: var(--mono); font-size: 8.5px; letter-spacing: .12em; color: var(--text-3); }
|
|
2112
2172
|
/* Its handle sits in the canvas, under the bar, where the conversation it opens begins. */
|
|
2113
2173
|
.chats-button { grid-row: 3; justify-self: start; align-self: start; z-index: 6; margin: 18px 0 0 20px; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 36px; border-radius: 11px; border: 1px solid var(--line-2); background: var(--panel); color: var(--text-2); cursor: pointer; padding: 0; }
|
|
2114
|
-
.chats-button svg { width:
|
|
2174
|
+
.chats-button svg { width: var(--ico-lg); height: var(--ico-lg); }
|
|
2115
2175
|
.chats-button:hover { color: var(--phosphor); border-color: var(--phosphor); box-shadow: var(--ring-soft); }
|
|
2116
2176
|
.chats-button:active { transform: translateY(1px); }
|
|
2117
2177
|
|
|
@@ -2228,6 +2288,31 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2228
2288
|
.command-card .undo { margin: 0 12px 10px; 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; }
|
|
2229
2289
|
.command-card .undo:hover { background: color-mix(in srgb, var(--terror) 22%, transparent); }
|
|
2230
2290
|
.command-card .undo:disabled { opacity: .5; cursor: default; }
|
|
2291
|
+
/* What a terminal said, folded (2026-10-14): one line — the command, how it ended, how long, who
|
|
2292
|
+
asked — and its last line beneath; the output opens on a click, without a jump. */
|
|
2293
|
+
.command-card.terminal .term-head { all: unset; box-sizing: border-box; display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 12px; cursor: pointer; font-family: var(--mono); font-size: 11.5px; color: var(--text-2); }
|
|
2294
|
+
.command-card.terminal .term-head:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 55%, transparent); outline-offset: -2px; border-radius: 12px; }
|
|
2295
|
+
.command-card.terminal .term-tag { flex: none; font-size: 9.5px; letter-spacing: .14em; font-weight: 600; color: var(--text-3); }
|
|
2296
|
+
.command-card.terminal code.term-line { padding: 0; border: 0; background: none; }
|
|
2297
|
+
.command-card.terminal .term-line { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--mono); font-size: 12px; color: var(--text); }
|
|
2298
|
+
.command-card.terminal .term-status { flex: none; padding: 2px 9px; border-radius: 999px; font-size: 10px; letter-spacing: .03em; white-space: nowrap; color: var(--text-2); background: color-mix(in srgb, var(--text) 6%, transparent); }
|
|
2299
|
+
.command-card.terminal .term-status.ok { color: var(--ok, #2f9e44); background: color-mix(in srgb, var(--ok, #2f9e44) 12%, transparent); }
|
|
2300
|
+
.command-card.terminal .term-status.failed { color: var(--crit); background: color-mix(in srgb, var(--crit) 12%, transparent); }
|
|
2301
|
+
.command-card.terminal .term-who { flex: none; font-size: 10.5px; color: var(--agent, var(--text-3)); }
|
|
2302
|
+
.command-card.terminal .term-count { flex: none; font-size: 10px; color: var(--text-3); white-space: nowrap; }
|
|
2303
|
+
.command-card.terminal .term-head .chev-icon { flex: none; display: inline-flex; color: var(--text-3); transition: transform .22s ease; }
|
|
2304
|
+
.command-card.terminal.open .term-head .chev-icon { transform: rotate(180deg); }
|
|
2305
|
+
.command-card.terminal .term-peek { margin-top: -4px; padding: 0 12px 9px; font-family: var(--mono); font-size: 11px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2306
|
+
.command-card.terminal.open .term-peek { display: none; }
|
|
2307
|
+
.command-card.terminal .term-out { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .24s ease; }
|
|
2308
|
+
.command-card.terminal.open .term-out { grid-template-rows: 1fr; }
|
|
2309
|
+
.command-card.terminal .term-clip { min-height: 0; overflow: hidden; }
|
|
2310
|
+
.command-card.terminal pre { max-height: 420px; border-top: 1px solid var(--line-2); background: color-mix(in srgb, var(--text) 3%, transparent); }
|
|
2311
|
+
.command-card.terminal pre .l-bad { color: var(--crit); }
|
|
2312
|
+
.command-card.terminal pre .l-good { color: var(--ok, #2f9e44); }
|
|
2313
|
+
.command-card.terminal .undo { margin-top: 10px; }
|
|
2314
|
+
@media (max-width: 560px) { .command-card.terminal .term-count, .command-card.terminal .term-tag { display: none; } }
|
|
2315
|
+
@media (prefers-reduced-motion: reduce) { .command-card.terminal .term-out, .command-card.terminal .term-head .chev-icon { transition: none; } }
|
|
2231
2316
|
.command-card .outcome { display: inline-block; margin: 0 12px 10px; font-family: var(--mono); font-size: 10px; letter-spacing: .16em; color: var(--phosphor); }
|
|
2232
2317
|
|
|
2233
2318
|
.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; }
|
|
@@ -2237,7 +2322,7 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2237
2322
|
.bubble:hover .bubble-actions, .bubble:focus-within .bubble-actions { opacity: 1; }
|
|
2238
2323
|
@media (hover: none) { .bubble-actions { opacity: .55; } }
|
|
2239
2324
|
.bubble-actions .act { width: 26px; height: 26px; display: grid; place-items: center; border: 0; border-radius: 8px; background: transparent; color: var(--text-3); cursor: pointer; padding: 0; transition: color calc(150ms * var(--motion-scale)), background calc(150ms * var(--motion-scale)); }
|
|
2240
|
-
.bubble-actions .act svg { width:
|
|
2325
|
+
.bubble-actions .act svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
2241
2326
|
.bubble-actions .act:hover { color: var(--text); background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
2242
2327
|
.bubble-actions .act.good.on { color: var(--phosphor); }
|
|
2243
2328
|
.bubble-actions .act.bad.on { color: var(--terror); }
|
|
@@ -2294,12 +2379,12 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2294
2379
|
Every control in the bar carries a drawing in the same idiom — 20×20, round ends, one stroke —
|
|
2295
2380
|
and its word, where it has one, beside it. What is open is drawn heavier and its word is set
|
|
2296
2381
|
bolder; the pointer gets half of that on the way. Colour, weight and ground carry the state. */
|
|
2297
|
-
.bar .bar-glyph { display: block; flex: none; width:
|
|
2382
|
+
.bar .bar-glyph { display: block; flex: none; width: var(--ico-sm); height: var(--ico-sm); }
|
|
2298
2383
|
.bar > .mother-button .mother-glyph { display: none; }
|
|
2299
2384
|
.bar > .mother-button, .bar > .stop-all { gap: 7px; }
|
|
2300
2385
|
.update-glyph { display: inline-flex; }
|
|
2301
2386
|
@container bar (max-width: 980px) {
|
|
2302
|
-
.bar > :is(.mother-button, .stop-all) .bar-glyph { width:
|
|
2387
|
+
.bar > :is(.mother-button, .stop-all) .bar-glyph { width: var(--ico-md); height: var(--ico-md); }
|
|
2303
2388
|
.bar > .mother-button, .bar > .stop-all { gap: 0; }
|
|
2304
2389
|
}
|
|
2305
2390
|
/* The live line: the dot keeps saying the state, the waves around it say what the dot is. */
|
|
@@ -2363,15 +2448,15 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2363
2448
|
replayed the moment .entering was taken off — the panel arrived twice. */
|
|
2364
2449
|
.tree.chats { transform-origin: left top; }
|
|
2365
2450
|
.chats .tree-close { display: inline-grid; place-items: center; padding: 4px; transition: color var(--motion) var(--ease-out), background-color var(--motion) var(--ease-out); }
|
|
2366
|
-
.chats .tree-close svg { display: block; width:
|
|
2451
|
+
.chats .tree-close svg { display: block; width: var(--ico-sm); height: var(--ico-sm); }
|
|
2367
2452
|
.chats .tree-close:hover svg { transform: rotate(90deg); }
|
|
2368
2453
|
.chats-new-button { transition: color var(--motion) var(--ease-out), background-color var(--motion) var(--ease-out), border-color var(--motion) var(--ease-out); }
|
|
2369
2454
|
.chats-new-button:hover { border-style: solid; }
|
|
2370
|
-
.chats-new-button svg { width:
|
|
2455
|
+
.chats-new-button svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
2371
2456
|
.chats-body .chat { grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; transition: background-color var(--motion) var(--ease-out), color var(--motion) var(--ease-out), transform var(--motion-fast) var(--ease-out); }
|
|
2372
2457
|
.chats-body .chat:active { transform: scale(.985); }
|
|
2373
2458
|
.chats-body .chat-glyph { display: grid; place-items: center; width: 16px; height: 16px; color: var(--text-3); transition: color var(--motion) var(--ease-out), transform var(--motion) var(--ease-out); }
|
|
2374
|
-
.chats-body .chat-glyph svg { display: block; width:
|
|
2459
|
+
.chats-body .chat-glyph svg { display: block; width: var(--ico-sm); height: var(--ico-sm); }
|
|
2375
2460
|
.chats-body .chat-glyph :is(.chat-spin, .chat-dot) { margin: 0; vertical-align: 0; }
|
|
2376
2461
|
.chats-body .chat:hover .chat-glyph { color: var(--text-2); transform: translateX(1px); }
|
|
2377
2462
|
.chats-body .chat.on .chat-glyph { color: var(--phosphor); transform: none; }
|
|
@@ -2428,6 +2513,14 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2428
2513
|
.bridge-card .actions .note { font-family: var(--mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); }
|
|
2429
2514
|
.bridge-log { margin: 0; max-height: 140px; overflow-y: auto; font-family: var(--mono); font-size: 10.5px; line-height: 1.55; color: var(--text-2); background: var(--bg); border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; white-space: pre-wrap; }
|
|
2430
2515
|
.bridge-log a { color: var(--phosphor); }
|
|
2516
|
+
/* The other way in, folded under the buttons: the same install or sign-in typed in a terminal.
|
|
2517
|
+
A quiet line until someone asks for it; the room's own buttons stay the way forward. */
|
|
2518
|
+
.terminal-way > summary { width: max-content; font-size: 11.5px; color: var(--text-3); cursor: pointer; list-style: none; }
|
|
2519
|
+
.terminal-way > summary::-webkit-details-marker { display: none; }
|
|
2520
|
+
.terminal-way > summary::after { content: ' ›'; }
|
|
2521
|
+
.terminal-way[open] > summary::after { content: ' ⌄'; }
|
|
2522
|
+
.terminal-way > summary:hover { color: var(--text-2); }
|
|
2523
|
+
.terminal-way .mother-cmd { margin: 8px 0 0; }
|
|
2431
2524
|
|
|
2432
2525
|
.bridge-card .account { font-size: 11px; line-height: 1.5; color: var(--text-3); }
|
|
2433
2526
|
.bridge-card .account .free { font-family: var(--mono); font-size: 8.5px; letter-spacing: .16em; color: var(--phosphor); border: 1px solid color-mix(in srgb, var(--phosphor) 45%, transparent); border-radius: 999px; padding: 2px 7px; margin-right: 8px; }
|
|
@@ -2473,6 +2566,8 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2473
2566
|
to be nowhere, so the only thing on screen was a heartbeat and the sign-in died of its clock. */
|
|
2474
2567
|
.login-ask { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
2475
2568
|
.login-ask[hidden] { display: none; }
|
|
2569
|
+
.login-device { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
2570
|
+
.login-device code { font-family: var(--mono); font-size: 15px; letter-spacing: .12em; color: var(--text); user-select: all; }
|
|
2476
2571
|
.login-code { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; flex: 1 1 260px; }
|
|
2477
2572
|
.login-code input { flex: 1 1 180px; min-width: 150px; font: inherit; font-size: 12.5px; color: var(--text); background: var(--bg); border: 1px solid var(--line-2); border-radius: 10px; padding: 8px 10px; }
|
|
2478
2573
|
.login-code input:focus { outline: none; border-color: var(--phosphor); }
|
|
@@ -2594,6 +2689,12 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2594
2689
|
|
|
2595
2690
|
/* A file an agent wrote in this room, in that agent's own colour. */
|
|
2596
2691
|
.tree .node .touched { width: 6px; height: 6px; border-radius: 50%; background: var(--agent, var(--ph)); box-shadow: none; flex: 0 0 auto; margin-left: 2px; }
|
|
2692
|
+
/* The way down to what changed: a folder carries the dot of the last touch beneath it, hollow, so
|
|
2693
|
+
the filled one is always the file itself. */
|
|
2694
|
+
.tree .node .touched.trail { background: transparent; box-shadow: inset 0 0 0 1.5px var(--agent, var(--ph)); }
|
|
2695
|
+
.tree-head .tree-refresh.spin svg { animation: tree-spin .6s ease; }
|
|
2696
|
+
@keyframes tree-spin { to { transform: rotate(360deg); } }
|
|
2697
|
+
@media (prefers-reduced-motion: reduce) { .tree-head .tree-refresh.spin svg { animation: none; } }
|
|
2597
2698
|
|
|
2598
2699
|
/* Read by what the file is. Six roles, the room's own phosphor: enough to find a string or a
|
|
2599
2700
|
comment at a glance, and never so many colours that the code stops being the thing you see. */
|
|
@@ -2855,11 +2956,6 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
2855
2956
|
border-radius: 16px; background: var(--panel); color: var(--text); border: 1px solid var(--line-2);
|
|
2856
2957
|
box-shadow: 0 18px 50px rgba(0, 0, 0, .4); animation: wn-in calc(300ms * var(--motion-scale)) cubic-bezier(.2, .8, .2, 1);
|
|
2857
2958
|
}
|
|
2858
|
-
.hint-card.beside::before { content: none; }
|
|
2859
|
-
.hint-card::before {
|
|
2860
|
-
content: ''; position: absolute; top: -7px; left: calc(var(--arrow, 24px) - 6px); width: 12px; height: 12px;
|
|
2861
|
-
background: var(--panel); border-left: 1px solid var(--line-2); border-top: 1px solid var(--line-2); transform: rotate(45deg);
|
|
2862
|
-
}
|
|
2863
2959
|
@media (prefers-reduced-motion: reduce) { .hint-card { animation: none; } }
|
|
2864
2960
|
.hint-card h3 { margin: 0 0 6px; font-size: 15px; font-weight: 700; }
|
|
2865
2961
|
.hint-card p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text-2); }
|
|
@@ -2926,7 +3022,7 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
2926
3022
|
.split-dock.working .split-spin { display: inline-block; }
|
|
2927
3023
|
@media (prefers-reduced-motion: reduce) { .split-spin { animation: none; border-color: var(--phosphor); } }
|
|
2928
3024
|
.split-action { flex: none; display: inline-grid; place-items: center; width: 26px; height: 26px; padding: 0; border: 1px solid transparent; border-radius: 7px; background: transparent; color: var(--text-3); font: inherit; font-size: 16px; line-height: 1; cursor: pointer; }
|
|
2929
|
-
.split-action svg { width:
|
|
3025
|
+
.split-action svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
2930
3026
|
.split-action:hover, .split-action:focus-visible { color: var(--text); border-color: var(--line-2); }
|
|
2931
3027
|
.split-frame { display: block; width: 100%; height: 100%; min-height: 0; border: 0; background: transparent; }
|
|
2932
3028
|
.shell.dragging-split .split-frame, .shell.dragging-split .browser-dock iframe { pointer-events: none; }
|
|
@@ -2937,7 +3033,7 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
2937
3033
|
window, or a window of its own. One lit is how it is shown now; the other moves it. */
|
|
2938
3034
|
.chats-body .chat-beside { display: inline-flex; align-items: center; gap: 2px; }
|
|
2939
3035
|
.chats-body :is(.chat-split, .chat-window) { display: inline-grid; place-items: center; border: 1px solid transparent; background: transparent; color: var(--text-3); padding: 3px 5px; border-radius: 7px; cursor: pointer; opacity: 0; }
|
|
2940
|
-
.chats-body :is(.chat-split, .chat-window) svg { width:
|
|
3036
|
+
.chats-body :is(.chat-split, .chat-window) svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
2941
3037
|
.chats-body :is(.chat-split, .chat-window) { transition: opacity var(--motion) var(--ease-out), color var(--motion) var(--ease-out), border-color var(--motion) var(--ease-out); }
|
|
2942
3038
|
.chats-body .chat-row:hover :is(.chat-split, .chat-window), .chats-body :is(.chat-split, .chat-window):focus-visible, .chats-body :is(.chat-split, .chat-window).on, .chats-body .chat-beside:has(.on) :is(.chat-split, .chat-window) { opacity: 1; }
|
|
2943
3039
|
.chats-body :is(.chat-split, .chat-window):hover { color: var(--text); border-color: var(--line-2); }
|
|
@@ -3245,7 +3341,7 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
3245
3341
|
.ports-refresh { display: inline-grid; place-items: center; flex: none; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 7px; color: var(--text-2); background: var(--surface, var(--panel)); box-shadow: var(--key-rest); cursor: pointer; }
|
|
3246
3342
|
.ports-refresh:hover { color: var(--text); box-shadow: var(--key-over, var(--key-rest)); }
|
|
3247
3343
|
.ports-refresh:focus-visible { outline: 2px solid var(--phosphor); outline-offset: 2px; }
|
|
3248
|
-
.ports-refresh svg { width:
|
|
3344
|
+
.ports-refresh svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3249
3345
|
.ports-refresh.checking svg { animation: ports-turn .8s linear infinite; }
|
|
3250
3346
|
@keyframes ports-turn { to { transform: rotate(360deg); } }
|
|
3251
3347
|
@media (prefers-reduced-motion: reduce) { .ports-refresh.checking svg { animation: none; } }
|
|
@@ -3288,7 +3384,7 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
3288
3384
|
.surface-modes { display: inline-flex; align-items: center; flex: none; gap: 0; padding: 2px; border: 1px solid var(--line-2); border-radius: 9px; background: color-mix(in srgb, var(--text) 3%, transparent); }
|
|
3289
3385
|
.surface-mode { display: inline-grid; place-items: center; width: 26px; height: 22px; padding: 0; border: 0; border-radius: 6px; background: transparent; color: var(--text-3); cursor: pointer; transition: color var(--motion) var(--ease-out), background-color var(--motion) var(--ease-out); }
|
|
3290
3386
|
.surface-mode + .surface-mode { margin-left: 1px; }
|
|
3291
|
-
.surface-mode svg { width:
|
|
3387
|
+
.surface-mode svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3292
3388
|
.surface-mode:hover, .surface-mode:focus-visible { color: var(--text); background: color-mix(in srgb, var(--text) 7%, transparent); outline: 0; }
|
|
3293
3389
|
.surface-mode[aria-pressed="true"] { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 14%, transparent); }
|
|
3294
3390
|
.surface-mode[aria-pressed="true"] :is(.ic-h, .ic-f) { fill: currentColor; fill-opacity: .35; }
|
|
@@ -3417,7 +3513,7 @@ dialog.surface.no-intro .mother-frame { animation: none; }
|
|
|
3417
3513
|
.slash-menu .group:first-child { padding-top: 6px; }
|
|
3418
3514
|
.slash-menu .item.cmd { grid-template-columns: 30px minmax(0, 1fr); gap: 12px; align-items: center; padding: 8px 10px; border-radius: 11px; transition: background-color var(--motion-fast) var(--ease-out); }
|
|
3419
3515
|
.slash-menu .item.cmd .glyph { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; border: 1px solid var(--line-2); background: color-mix(in srgb, var(--text) 3%, transparent); color: var(--text-2); transition: color var(--motion-fast) var(--ease-out), background-color var(--motion-fast) var(--ease-out), border-color var(--motion-fast) var(--ease-out); }
|
|
3420
|
-
.slash-menu .item.cmd .glyph svg { width:
|
|
3516
|
+
.slash-menu .item.cmd .glyph svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3421
3517
|
.slash-menu .item.cmd .glyph.agent { border: 0; background: transparent; }
|
|
3422
3518
|
.slash-menu .item.cmd .glyph.mode { font-family: var(--mono); font-size: 11px; font-weight: 700; color: var(--mode); border-color: color-mix(in srgb, var(--mode) 40%, transparent); }
|
|
3423
3519
|
.slash-menu .item.cmd .glyph.m0 { --mode: var(--mode-0); } .slash-menu .item.cmd .glyph.m1 { --mode: var(--mode-1); } .slash-menu .item.cmd .glyph.m2 { --mode: var(--mode-2); } .slash-menu .item.cmd .glyph.m3 { --mode: var(--mode-3); } .slash-menu .item.cmd .glyph.m4 { --mode: var(--mode-4); }
|
|
@@ -3565,6 +3661,8 @@ dialog.viewer .viewer-status { flex: none; display: flex; align-items: center; g
|
|
|
3565
3661
|
dialog.viewer .viewer-status:not(:has(> :not([hidden]))) { display: none; }
|
|
3566
3662
|
dialog.viewer.editing .viewer-status { display: none; }
|
|
3567
3663
|
dialog.viewer .viewer-status .viewer-lang { border: 0; padding: 0; letter-spacing: .04em; font-size: 10px; text-transform: none; }
|
|
3664
|
+
/* A narrow viewer ends the hint with «…» instead of cutting it at the edge; the whole of it is its title. */
|
|
3665
|
+
dialog.viewer .viewer-status .viewer-lang { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
3568
3666
|
dialog.viewer .viewer-status .viewer-selection { color: var(--phosphor); letter-spacing: .06em; }
|
|
3569
3667
|
dialog.viewer .viewer-status .viewer-review { margin-left: auto; height: 24px; padding: 0 10px; border-radius: 7px; font-size: 9.5px; }
|
|
3570
3668
|
dialog.viewer .viewer-menu { z-index: 70; }
|
|
@@ -3579,24 +3677,30 @@ dialog.viewer pre.code .ln { cursor: pointer; user-select: none; }
|
|
|
3579
3677
|
.ed-btn { height: 26px; padding: 0 9px; gap: 6px; font-size: 9.5px; letter-spacing: .1em; border-radius: 7px; }
|
|
3580
3678
|
.ed-tools .ed-btn { color: var(--text-2); }
|
|
3581
3679
|
.ed-btn .ed-ico { display: inline-grid; place-items: center; width: 15px; height: 15px; color: var(--text-3); transition: color var(--motion) var(--ease-out); }
|
|
3582
|
-
.ed-btn .ed-ico svg { width:
|
|
3680
|
+
.ed-btn .ed-ico svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3583
3681
|
.ed-btn:hover .ed-ico, .ed-btn[aria-pressed="true"] .ed-ico { color: currentColor; }
|
|
3584
3682
|
.ed-save { padding: 0 12px; }
|
|
3585
3683
|
.code-editor.dirty .ed-save { color: var(--text); background: color-mix(in srgb, var(--warn) 10%, transparent); }
|
|
3586
3684
|
.ed-sep { display: none; }
|
|
3587
3685
|
.ed-status .ed-keys { color: var(--text-2); }
|
|
3588
3686
|
|
|
3589
|
-
/* What is selected gets its tools right above it
|
|
3590
|
-
|
|
3687
|
+
/* What is selected gets its tools right above it: the light sheet of the cards under the bar (solid,
|
|
3688
|
+
no glow, no halo; over code a glass would let the letters through), as a capsule. Its words are
|
|
3689
|
+
the room's, in a sentence; its drawings the size of a drawing beside a word; asking an agent, the
|
|
3690
|
+
first of them, wears the accent's flat tone and opens its menu under the chevron. */
|
|
3691
|
+
.ed-float { position: absolute; left: 12px; top: 0; z-index: 4; display: inline-flex; align-items: center; gap: 2px; padding: 3px; border: 0; border-radius: 999px; background: var(--surface, var(--panel)); box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 10%, transparent), 0 1px 2px rgba(0, 0, 0, .18), 0 10px 26px -14px rgba(0, 0, 0, .5); will-change: transform; animation: float-in calc(160ms * var(--motion-scale)) var(--ease-glide); }
|
|
3692
|
+
:root[data-scheme="light"] .ed-float { box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 9%, transparent), 0 1px 2px rgba(20, 30, 25, .08), 0 10px 26px -16px rgba(20, 30, 25, .32); }
|
|
3591
3693
|
.ed-float[hidden] { display: none; }
|
|
3592
3694
|
@keyframes float-in { from { opacity: 0; } to { opacity: 1; } }
|
|
3593
|
-
.ed-chip { display: inline-flex; align-items: center; gap: 6px; height:
|
|
3594
|
-
.ed-chip .ed-ico { display: inline-grid; width:
|
|
3595
|
-
.ed-chip:hover { color: var(--text); background: color-mix(in srgb, var(--text)
|
|
3596
|
-
.ed-chip.ask { color: var(--phosphor); }
|
|
3597
|
-
.ed-chip.ask:hover { background: color-mix(in srgb, var(--phosphor)
|
|
3598
|
-
.ed-chip.
|
|
3695
|
+
.ed-chip { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 12px 0 10px; border: 0; border-radius: 999px; background: transparent; color: var(--text-2); font-family: var(--read); font-size: 12.5px; font-weight: 500; letter-spacing: 0; white-space: nowrap; cursor: pointer; transition: color var(--motion-fast) var(--ease-out), background-color var(--motion-fast) var(--ease-out); }
|
|
3696
|
+
.ed-chip .ed-ico { display: inline-grid; place-items: center; width: var(--ico-sm); height: var(--ico-sm); } .ed-chip .ed-ico svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3697
|
+
.ed-chip:is(:hover, :focus-visible) { color: var(--text); background: color-mix(in srgb, var(--text) 7%, transparent); outline: 0; }
|
|
3698
|
+
.ed-chip.ask { padding-right: 9px; color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 14%, transparent); }
|
|
3699
|
+
.ed-chip.ask:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--phosphor) 22%, transparent); }
|
|
3700
|
+
.ed-chip .ed-chev { display: inline-grid; place-items: center; margin-left: -1px; opacity: .8; }
|
|
3701
|
+
.ed-chip .ed-chev svg { width: var(--ico-xs); height: var(--ico-xs); }
|
|
3599
3702
|
.ed-chip.done { color: var(--phosphor); }
|
|
3703
|
+
:root[data-scheme="light"] .ed-chip:is(.ask, .done) { color: color-mix(in srgb, var(--phosphor) 72%, #000000); }
|
|
3600
3704
|
@media (prefers-reduced-motion: reduce) { .ed-float { animation: none; } }
|
|
3601
3705
|
|
|
3602
3706
|
/* ================= the core: the board =================
|
|
@@ -3716,6 +3820,16 @@ dialog.surface.window.mother .mother-head :is(.mother-title, .mother-sub) { curs
|
|
|
3716
3820
|
.agent-pop .crew-pct.hot { color: var(--crit); }
|
|
3717
3821
|
.agent-pop .crew-go { width: 100%; padding: 8px 10px; border: 1px solid var(--line-2); border-radius: 9px; background: transparent; color: var(--text-2); font-family: var(--mono); font-size: 9.5px; letter-spacing: .14em; cursor: pointer; transition: color var(--motion-fast) var(--ease-out), border-color var(--motion-fast) var(--ease-out); }
|
|
3718
3822
|
.agent-pop .crew-go:hover { color: var(--phosphor); border-color: var(--phosphor); }
|
|
3823
|
+
/* 1.0.3 · The way to the agents' settings: Settings' own gear, at its size, and the room's letter. */
|
|
3824
|
+
.agent-pop .crew-go { display: flex; align-items: center; justify-content: center; gap: 8px; height: 34px; padding: 0 12px; border: 0; border-radius: 10px; background: color-mix(in srgb, var(--text) 6%, transparent); color: var(--text); font-family: var(--read); font-size: 12.5px; font-weight: 500; letter-spacing: 0; text-transform: none; }
|
|
3825
|
+
.agent-pop .crew-go:is(:hover, :focus-visible) { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 12%, transparent); border-color: transparent; outline: 0; }
|
|
3826
|
+
.agent-pop .crew-go-icon { display: inline-grid; color: var(--text-2); transition: color var(--motion-fast) var(--ease-out); }
|
|
3827
|
+
.agent-pop .crew-go-icon svg { display: block; width: var(--ico-sm); height: var(--ico-sm); transition: transform calc(520ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
3828
|
+
.agent-pop .crew-go:is(:hover, :focus-visible) .crew-go-icon { color: currentColor; }
|
|
3829
|
+
.agent-pop .crew-go:is(:hover, :focus-visible) .crew-go-icon svg { transform: rotate(90deg); }
|
|
3830
|
+
.ports-row b.ports-gear { display: inline-grid; align-self: center; }
|
|
3831
|
+
.ports-row b.ports-gear svg { display: block; width: var(--ico-sm); height: var(--ico-sm); }
|
|
3832
|
+
@media (prefers-reduced-motion: reduce) { .agent-pop .crew-go-icon svg { transition: none; } .agent-pop .crew-go:hover .crew-go-icon svg { transform: none; } }
|
|
3719
3833
|
.agent-pop .crew-back { display: inline-grid; place-items: center; width: 22px; height: 22px; margin-right: -2px; border: 0; border-radius: 7px; background: transparent; color: var(--text-3); font-size: 16px; line-height: 1; cursor: pointer; }
|
|
3720
3834
|
.agent-pop .crew-back:hover { color: var(--text); background: var(--line); }
|
|
3721
3835
|
/* The live dot and the crew beside it read as one pair: what the room is connected to. */
|
|
@@ -3840,13 +3954,13 @@ dialog.room-ask.console .room-ask-choice.danger:hover { background: color-mix(in
|
|
|
3840
3954
|
that pulses where it was pressed or an area drawn with a dashed edge, and beside the mark a card
|
|
3841
3955
|
with who should look and what to ask. */
|
|
3842
3956
|
.browser-head .nav.point { display: inline-flex; align-items: center; gap: 6px; width: auto; padding: 0 10px 0 8px; font-family: var(--mono); font-size: 9.5px; letter-spacing: .14em; }
|
|
3843
|
-
.browser-head .nav.point svg { width:
|
|
3957
|
+
.browser-head .nav.point svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3844
3958
|
.browser-head .nav.point[aria-pressed="true"] { color: var(--phosphor); border-color: color-mix(in srgb, var(--phosphor) 45%, transparent); background: color-mix(in srgb, var(--phosphor) 12%, transparent); }
|
|
3845
3959
|
@container dock (max-width: 620px) { .browser-head .nav.point > span { display: none; } .browser-head .nav.point { padding: 0 7px; } }
|
|
3846
3960
|
.point-layer { position: absolute; z-index: 3; cursor: crosshair; background: color-mix(in srgb, var(--phosphor) 3%, transparent); box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--phosphor) 45%, transparent); }
|
|
3847
3961
|
.point-tools { position: absolute; top: 12px; left: 50%; transform: translateX(-50%); z-index: 2; display: inline-flex; align-items: center; gap: 2px; padding: 3px; border: 1px solid var(--line-2); border-radius: 12px; background: var(--panel); box-shadow: 0 14px 34px -14px rgba(0, 0, 0, .5); cursor: default; animation: point-in calc(220ms * var(--motion-scale)) var(--ease-glide); }
|
|
3848
3962
|
.point-tool { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 11px 0 9px; border: 0; border-radius: 9px; background: transparent; color: var(--text-2); font-family: var(--mono); font-size: 9.5px; letter-spacing: .14em; cursor: pointer; transition: color var(--motion-fast) var(--ease-out), background-color var(--motion-fast) var(--ease-out); }
|
|
3849
|
-
.point-tool svg { width:
|
|
3963
|
+
.point-tool svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3850
3964
|
.point-tool:hover { color: var(--text); background: color-mix(in srgb, var(--text) 6%, transparent); }
|
|
3851
3965
|
.point-tool[aria-pressed="true"] { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 14%, transparent); }
|
|
3852
3966
|
.point-sep { width: 1px; height: 16px; margin: 0 3px; background: var(--line-2); }
|
|
@@ -3881,7 +3995,7 @@ dialog.room-ask.console .room-ask-choice.danger:hover { background: color-mix(in
|
|
|
3881
3995
|
.ask-item:hover, .ask-item:focus-visible { background: color-mix(in srgb, var(--phosphor) 10%, transparent); outline: 0; }
|
|
3882
3996
|
.ask-remembered:empty { display: none; }
|
|
3883
3997
|
.ask-own { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 4px; border-radius: 10px; font-family: var(--mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; cursor: pointer; }
|
|
3884
|
-
.ask-own svg { width:
|
|
3998
|
+
.ask-own svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
3885
3999
|
@media (prefers-reduced-motion: reduce) { .ask-card { animation: none; } }
|
|
3886
4000
|
|
|
3887
4001
|
/* Taking the picture: only the page, without the toolbox, the layer's tint or the area's frame —
|
|
@@ -3903,7 +4017,7 @@ dialog.room-ask.console .room-ask-choice.danger:hover { background: color-mix(in
|
|
|
3903
4017
|
.system.fail .partial { display: grid; gap: 8px; justify-items: center; margin-top: 10px; padding: 10px 14px; border: 1px dashed color-mix(in srgb, var(--danger) 45%, transparent); border-radius: 12px; color: var(--text-2); }
|
|
3904
4018
|
.system.fail .partial > .label { color: var(--text-2); opacity: 1; }
|
|
3905
4019
|
.system.fail .partial .artifacts { justify-items: center; }
|
|
3906
|
-
.system.fail .partial .files { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; font-family: var(--mono); font-size: 11px; text-align:
|
|
4020
|
+
.system.fail .partial .files { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; font-family: var(--mono); font-size: 11px; text-align: center; }
|
|
3907
4021
|
.system.fail .partial .note { font-family: var(--mono); font-size: 10.5px; color: var(--warn); }
|
|
3908
4022
|
.system.fail .partial .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; }
|
|
3909
4023
|
.system.fail .partial .undo:hover { background: color-mix(in srgb, var(--terror) 22%, transparent); }
|
|
@@ -4629,7 +4743,7 @@ dialog.custom-window::backdrop { display: none; }
|
|
|
4629
4743
|
/* ---------- An open question's mark ----------
|
|
4630
4744
|
The «?» is one of the room's own drawings now, in the accent. */
|
|
4631
4745
|
.openq-ask::before { content: none; }
|
|
4632
|
-
.openq-ask .q-mark { position: absolute; left: 9px; top: 50%; transform: translateY(-50%); width:
|
|
4746
|
+
.openq-ask .q-mark { position: absolute; left: 9px; top: 50%; transform: translateY(-50%); width: var(--ico-sm); height: var(--ico-sm); display: block; color: var(--phosphor); }
|
|
4633
4747
|
.openq-ask .q-mark svg { width: 100%; height: 100%; display: block; }
|
|
4634
4748
|
:root[data-scheme="light"] .openq-ask .q-mark { color: color-mix(in srgb, var(--phosphor) 62%, #000000); }
|
|
4635
4749
|
|
|
@@ -4977,10 +5091,10 @@ dialog.custom-window::backdrop { display: none; }
|
|
|
4977
5091
|
steps now: 26px tall with a 15px drawing on a wide bar, the same 34px squircle and 18px drawing
|
|
4978
5092
|
on a narrow one. */
|
|
4979
5093
|
.bar > .tree-button { width: 28px; height: 26px; }
|
|
4980
|
-
.bar > .tree-button svg { width:
|
|
5094
|
+
.bar > .tree-button svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
4981
5095
|
@container bar (max-width: 980px) {
|
|
4982
5096
|
.bar > .tree-button { width: 34px; height: 34px; border-radius: 11px; display: inline-grid; place-items: center; padding: 0; }
|
|
4983
|
-
.bar > .tree-button svg { width:
|
|
5097
|
+
.bar > .tree-button svg { width: var(--ico-md); height: var(--ico-md); }
|
|
4984
5098
|
}
|
|
4985
5099
|
|
|
4986
5100
|
/* ==========================================================================================
|
|
@@ -5060,7 +5174,7 @@ dialog.custom-window::backdrop { display: none; }
|
|
|
5060
5174
|
inset 1px 0 0 rgba(255, 92, 170, .08), inset -1px 0 0 rgba(90, 210, 255, .08),
|
|
5061
5175
|
0 1px 1px rgba(0, 0, 0, .3), 0 6px 14px -6px rgba(0, 0, 0, .55), 0 18px 34px -16px rgba(0, 0, 0, .6);
|
|
5062
5176
|
}
|
|
5063
|
-
:root .shell > .chats-button svg { width:
|
|
5177
|
+
:root .shell > .chats-button svg { width: var(--ico-lg); height: var(--ico-lg); filter: drop-shadow(0 1px 0 rgba(0, 0, 0, .35)); }
|
|
5064
5178
|
:root[data-scheme="light"] .shell > .chats-button {
|
|
5065
5179
|
background-image: linear-gradient(180deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .35) 60%), var(--sheen);
|
|
5066
5180
|
box-shadow:
|
|
@@ -5209,6 +5323,37 @@ dialog.custom-window::backdrop { display: none; }
|
|
|
5209
5323
|
height: 26px; padding: 0 10px 0 12px; border: 0; border-radius: 999px; background: transparent; box-shadow: none;
|
|
5210
5324
|
}
|
|
5211
5325
|
:root[data-scheme] .composer > .pick-options :is(.mode-chip, .model-chip, .effort-chip):is(:hover, :focus-visible, [aria-expanded="true"]) { background: color-mix(in srgb, currentColor 12%, transparent); }
|
|
5326
|
+
/* THE COPILOT (2026-10-14): a robot beside mode · model · effort, in the same glass; MADRE's green
|
|
5327
|
+
when it is on, with the time it has left. Its menu says what it does, its switch and how long. */
|
|
5328
|
+
.picker .pick-label > .copilot-chip { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 9px; border: 0; border-radius: 999px; background: transparent; color: var(--text-2); font: inherit; letter-spacing: .06em; cursor: pointer; transition: background .18s ease, color .18s ease; }
|
|
5329
|
+
.picker .pick-label > .copilot-chip:is(:hover, :focus-visible) { background: color-mix(in srgb, currentColor 12%, transparent); outline: none; }
|
|
5330
|
+
.copilot-icon { display: inline-flex; width: var(--ico-sm); height: var(--ico-sm); }
|
|
5331
|
+
.copilot-icon svg { width: 100%; height: 100%; }
|
|
5332
|
+
.picker .pick-label > .copilot-chip.on { color: var(--madre-green); background: color-mix(in srgb, var(--madre-green) 14%, transparent); }
|
|
5333
|
+
.picker .pick-label > .copilot-chip .left { font-size: 10px; }
|
|
5334
|
+
.copilot-menu { display: grid; gap: 8px; }
|
|
5335
|
+
.copilot-menu .copilot-title { display: flex; align-items: center; gap: 8px; margin: 2px 2px 0; color: var(--text); }
|
|
5336
|
+
.copilot-menu .copilot-title b { flex: 1; color: var(--text); font-size: 11px; }
|
|
5337
|
+
.copilot-menu .copilot-title .copilot-icon { color: var(--madre-green); }
|
|
5338
|
+
.copilot-menu .copilot-body { display: grid; gap: 8px; padding: 0 2px 2px; font-family: var(--read, inherit); letter-spacing: 0; }
|
|
5339
|
+
/* Three weights (2026-10-14): what it does reads first; what it never does is the small print. */
|
|
5340
|
+
.copilot-menu .copilot-body p { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
|
|
5341
|
+
.copilot-menu .copilot-body .copilot-lead { font-size: 14px; line-height: 1.45; color: var(--text); font-weight: 400; }
|
|
5342
|
+
.copilot-menu .copilot-body .copilot-never { padding-top: 8px; border-top: 1px solid var(--line); font-size: 11.5px; line-height: 1.5; color: color-mix(in srgb, var(--text) 46%, transparent); }
|
|
5343
|
+
.copilot-menu .copilot-body .copilot-state { color: var(--madre-green); font-weight: 600; }
|
|
5344
|
+
.copilot-menu .copilot-body .copilot-foot { font-size: 11px; color: var(--text-3); }
|
|
5345
|
+
.copilot-menu .copilot-how { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; color: var(--text-2); }
|
|
5346
|
+
/* A message under the copilot: the box wears green, not EDIT's red. */
|
|
5347
|
+
.composer.copilot .field { border-color: var(--madre-green); --ring: 0 0 0 3px color-mix(in srgb, var(--madre-green) 16%, transparent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--madre-green) 16%, transparent); }
|
|
5348
|
+
.composer.copilot .crew-label { color: var(--madre-green); }
|
|
5349
|
+
/* The reply written as the copilot: a green round robot on the agent's own circle, shown on every
|
|
5350
|
+
reply of a run of them, so a glance down the thread says which ones the copilot wrote. */
|
|
5351
|
+
#messages .row.copilot > .avatar { position: relative; overflow: visible; }
|
|
5352
|
+
#messages .row.copilot.compact > .avatar { visibility: visible; }
|
|
5353
|
+
#messages .row.copilot.compact > .avatar > :not(.copilot-badge) { visibility: hidden; }
|
|
5354
|
+
#messages .row.copilot > .avatar .copilot-badge { position: absolute; right: -6px; bottom: -6px; z-index: 1; visibility: visible; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; padding: 3px; border-radius: 50%; background: var(--madre-green); color: var(--madre-green-ink); box-shadow: 0 0 0 2px var(--bg), 0 2px 6px rgb(0 0 0 / .18); }
|
|
5355
|
+
#messages .row.copilot > .avatar .copilot-badge svg { width: 100%; height: 100%; }
|
|
5356
|
+
#messages .who .badge.copilot { color: var(--madre-green); background: color-mix(in srgb, var(--madre-green) 14%, transparent); }
|
|
5212
5357
|
/* The lines of the room that carry a chip: the box's radius follows the chip it holds. */
|
|
5213
5358
|
:is(:root[data-wallpaper] #messages, .look-preview[data-wallpaper]:not([data-wallpaper="default"])) .system:not(.mother-alert) { border-radius: 18px; padding: 8px 16px 9px; }
|
|
5214
5359
|
|
|
@@ -5267,7 +5412,11 @@ dialog.custom-window::backdrop { display: none; }
|
|
|
5267
5412
|
/* SIGUE ABIERTO AQUÍ can be put away: a small × beside its heading, quiet until the pointer finds it. */
|
|
5268
5413
|
.openq-head { display: inline-flex; align-items: center; gap: 6px; }
|
|
5269
5414
|
.openq-close { display: inline-grid; place-items: center; width: 20px; height: 20px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--text-3); cursor: pointer; opacity: .75; transition: opacity var(--motion-fast) var(--ease-out), background-color var(--motion-fast) var(--ease-out), color var(--motion-fast) var(--ease-out); }
|
|
5270
|
-
.openq-close svg { width:
|
|
5415
|
+
.openq-close svg { width: var(--ico-xs); height: var(--ico-xs); }
|
|
5416
|
+
/* Centred is the label, not the label and its ×: the × hangs at the label's right, out of the
|
|
5417
|
+
count, so «sigue abierto aquí» stands on the same axis as the questions under it and the card above. */
|
|
5418
|
+
.openq-head { position: relative; }
|
|
5419
|
+
.openq-head > .openq-close { position: absolute; top: 50%; left: calc(100% + 6px); translate: 0 -50%; }
|
|
5271
5420
|
.openq-close:hover, .openq-close:focus-visible { opacity: 1; color: var(--text); background: color-mix(in srgb, var(--text) 10%, transparent); }
|
|
5272
5421
|
:root[data-wallpaper] .openq-close { color: var(--text-2); background: color-mix(in srgb, var(--bg) 62%, transparent); }
|
|
5273
5422
|
|
|
@@ -5600,7 +5749,9 @@ dialog.mother { --mono: "JetBrains Mono", ui-monospace, Menlo, Consolas, monospa
|
|
|
5600
5749
|
/* Dark theme: the box is its own black, a neutral graphite rather than the room's green-black,
|
|
5601
5750
|
and the row of mode, model and effort under it steps back so it never competes with it. */
|
|
5602
5751
|
:root:not([data-scheme="light"]) .shell .composer .field { background-color: color-mix(in srgb, #1a1b1d 96%, transparent); }
|
|
5603
|
-
|
|
5752
|
+
/* Dark glass reads on a dark ground (2026-10-14): the ground at 45% over the ground was invisible,
|
|
5753
|
+
so it takes a breath of the text colour, a half-pixel rim and the same blur as in light. */
|
|
5754
|
+
:root:not([data-scheme="light"]) .composer > .pick-options .pick-label { background: color-mix(in srgb, var(--text) 13%, color-mix(in srgb, var(--bg) 52%, transparent)); box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 20%, transparent), inset 0 1px 0 rgb(255 255 255 / .09), 0 6px 18px rgb(0 0 0 / .28); -webkit-backdrop-filter: blur(20px) saturate(1.7); backdrop-filter: blur(20px) saturate(1.7); }
|
|
5604
5755
|
:root:not([data-scheme="light"]) .composer > .pick-options :is(.mode-chip, .model-chip, .effort-chip) { opacity: .78; }
|
|
5605
5756
|
:root:not([data-scheme="light"]) .composer > .pick-options :is(.mode-chip, .model-chip, .effort-chip):is(:hover, :focus-visible, [aria-expanded="true"]) { opacity: 1; }
|
|
5606
5757
|
|
|
@@ -5665,7 +5816,7 @@ dialog.mother { --mono: "JetBrains Mono", ui-monospace, Menlo, Consolas, monospa
|
|
|
5665
5816
|
}
|
|
5666
5817
|
|
|
5667
5818
|
/* A new conversation is a plus, a little larger than the icons beside it. */
|
|
5668
|
-
.chats-new-button svg { width:
|
|
5819
|
+
.chats-new-button svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
5669
5820
|
|
|
5670
5821
|
/* ==========================================================================================
|
|
5671
5822
|
SURFACES THAT STAND OUT FROM THE GROUND, AND BUTTONS LIKE PEBBLES
|
|
@@ -5764,7 +5915,7 @@ dialog.settings-window.entering { animation: window-in calc(440ms * var(--motion
|
|
|
5764
5915
|
dialog.settings-window::backdrop { display: none; }
|
|
5765
5916
|
.settings-head { display: flex; align-items: center; gap: 14px; }
|
|
5766
5917
|
.settings-search { flex: 1; min-width: 0; max-width: 420px; display: flex; align-items: center; gap: 8px; height: 32px; padding: 0 10px; border-radius: 10px; background: color-mix(in srgb, var(--text) 6%, transparent); color: var(--text-2); cursor: text; }
|
|
5767
|
-
.settings-search svg { width:
|
|
5918
|
+
.settings-search svg { width: var(--ico-sm); height: var(--ico-sm); flex: none; }
|
|
5768
5919
|
.settings-search input { flex: 1; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; font-family: var(--read); font-size: 13.5px; }
|
|
5769
5920
|
.settings-search:focus-within { box-shadow: 0 0 0 2px color-mix(in srgb, var(--phosphor) 45%, transparent); }
|
|
5770
5921
|
.settings-body { position: relative; flex: 1; min-height: 0; display: flex; overflow: hidden; }
|
|
@@ -5783,7 +5934,7 @@ dialog.settings-window::backdrop { display: none; }
|
|
|
5783
5934
|
.settings-card-head b { font-size: 14px; font-weight: 600; }
|
|
5784
5935
|
.settings-card-head .settings-go { margin-left: auto; width: 14px; height: 14px; color: var(--text-2); transform: rotate(-90deg); }
|
|
5785
5936
|
.settings-icon { display: grid; place-items: center; width: 28px; height: 28px; flex: none; border-radius: 8px; background: color-mix(in srgb, var(--cat) 16%, transparent); color: var(--cat); }
|
|
5786
|
-
.settings-icon svg { width:
|
|
5937
|
+
.settings-icon svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
5787
5938
|
.settings-line { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
|
|
5788
5939
|
.settings-warn { justify-self: start; margin: 2px 0 0; padding: 3px 8px; border-radius: 7px; font-size: 12px; background: color-mix(in srgb, #f2c94c 18%, transparent); color: #f2c94c; }
|
|
5789
5940
|
:root[data-scheme="light"] .settings-warn { color: #7a5c00; }
|
|
@@ -5938,6 +6089,28 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
5938
6089
|
.sx-chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
5939
6090
|
.sx-field { display: flex; gap: 8px; }
|
|
5940
6091
|
.sx-field .sx-input { flex: 1; }
|
|
6092
|
+
/* Settings › Connect MCP (2026-10-14): a row per server — what it is and where, how it stands,
|
|
6093
|
+
the one thing to do, and from which mode its tools that act travel. */
|
|
6094
|
+
.mcp-row { gap: 10px; }
|
|
6095
|
+
.mcp-row .mcp-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; width: 100%; }
|
|
6096
|
+
.mcp-row .mcp-top .sx-words { min-width: 0; display: grid; gap: 4px; }
|
|
6097
|
+
.mcp-row .mcp-where { display: block; font-family: var(--mono); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 52ch; }
|
|
6098
|
+
.mcp-row.off .mcp-top .sx-words > b { color: var(--text-2); }
|
|
6099
|
+
.mcp-problem { margin: 0; font-size: 12px; line-height: 1.45; color: var(--danger); overflow-wrap: anywhere; }
|
|
6100
|
+
.mcp-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
|
|
6101
|
+
.mcp-block > .mcp-actions { padding: 4px 16px 14px; }
|
|
6102
|
+
.mcp-from { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
|
|
6103
|
+
.mcp-tools { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
|
|
6104
|
+
.mcp-tools li { display: inline-flex; align-items: center; gap: 6px; padding: 3px 8px; border-radius: 7px; background: color-mix(in srgb, var(--text) 6%, transparent); font-size: 11.5px; }
|
|
6105
|
+
.mcp-tools li code { font-family: var(--mono); font-size: 11.5px; }
|
|
6106
|
+
.mcp-tools .mcp-tool-kind { font-size: 10px; letter-spacing: .04em; color: var(--text-3); }
|
|
6107
|
+
.mcp-tools li.acts .mcp-tool-kind { color: #d9a90f; }
|
|
6108
|
+
.mcp-vars { display: grid; gap: 6px; width: 100%; }
|
|
6109
|
+
.mcp-vars .sx-field { align-items: center; }
|
|
6110
|
+
.mcp-secret { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--text-2); white-space: nowrap; }
|
|
6111
|
+
.mcp-pick { display: inline-flex; align-items: center; }
|
|
6112
|
+
.mcp-block .sx-row .sx-hint { overflow-wrap: anywhere; }
|
|
6113
|
+
.mcp-pick input, .mcp-secret input { width: 16px; height: 16px; accent-color: var(--phosphor); }
|
|
5941
6114
|
.sx-command { display: flex; align-items: center; gap: 8px; padding: 4px 4px 4px 10px; border-radius: 9px; background: color-mix(in srgb, var(--text) 5%, transparent); }
|
|
5942
6115
|
.sx-command code { flex: 1; min-width: 0; overflow-x: auto; white-space: nowrap; font-family: var(--mono); font-size: 11.5px; color: var(--text); scrollbar-width: none; }
|
|
5943
6116
|
.sx-more { border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
|
|
@@ -5948,7 +6121,15 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
5948
6121
|
.sx-more > :not(summary) { margin: 0 16px 14px; }
|
|
5949
6122
|
.sx-steps { display: grid; gap: 12px; margin: 10px 16px 16px; padding-left: 18px; }
|
|
5950
6123
|
.sx-steps li { display: grid; gap: 6px; font-size: 12.5px; }
|
|
5951
|
-
.sx-steps li b { font-weight:
|
|
6124
|
+
.sx-steps li b { font-weight: 600; color: var(--text); }
|
|
6125
|
+
/* The training recipe, numbered and explained (2026-10-14). */
|
|
6126
|
+
.sx-steps { counter-reset: step; list-style: none; padding-left: 0; gap: 14px; }
|
|
6127
|
+
.sx-steps li { position: relative; padding-left: 34px; counter-increment: step; }
|
|
6128
|
+
.sx-steps li::before { content: counter(step); position: absolute; left: 0; top: -1px; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: color-mix(in srgb, var(--phosphor) 16%, transparent); color: var(--phosphor); font: 600 11.5px/1 var(--read); }
|
|
6129
|
+
.sx-steps li .sx-hint { font-size: 12px; line-height: 1.45; color: var(--text-2); }
|
|
6130
|
+
.sx-train-what { margin: 0 16px 10px; font-size: 12.5px; line-height: 1.5; color: var(--text-2); }
|
|
6131
|
+
.sx-train-platform { margin: 10px 16px 6px; }
|
|
6132
|
+
.sx-more > .sx-hint { margin: 0 16px; }
|
|
5952
6133
|
|
|
5953
6134
|
/* An agent's card: its colour on the avatar and the name, where it lives in small print. */
|
|
5954
6135
|
.sx-agent .sx-head { align-items: center; }
|
|
@@ -6040,6 +6221,8 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
6040
6221
|
.settings-detail .sx-analysis :is(.mem-strip-head b, .mem-strip-head span, .mem-axis span, summary b, summary .caret, th, td, .mem-signal .top b, .mem-bar .name, .exams > .note, .exam-head b, .exam-head .verdict, .exam-bullet span, .exam > .note:not(.about), .exam .actions button, .exam .actions .note)::first-letter { text-transform: uppercase; }
|
|
6041
6222
|
.settings-detail .sx-analysis .mem-strip-head b, .settings-detail .sx-analysis .mem-bar .name { color: var(--text); }
|
|
6042
6223
|
.settings-detail .sx-analysis .mem-signal .top b, .settings-detail .sx-analysis .exam-head b { font-size: 12.5px; font-weight: 500; }
|
|
6224
|
+
/* The review's questions are written in sentence case; lowering them would turn «IA» into «ia». */
|
|
6225
|
+
.settings-detail .sx-analysis .exam-head b { text-transform: none; }
|
|
6043
6226
|
.settings-detail .sx-analysis .exams .said { font-family: var(--read); font-size: 12.5px; line-height: 1.5; }
|
|
6044
6227
|
.settings-detail .sx-analysis .mem-cols i:not(.zero) { background: color-mix(in srgb, #3fb6d9 70%, transparent); }
|
|
6045
6228
|
.settings-detail .sx-analysis .mem-cols i.now { background: #3fb6d9; }
|
|
@@ -6154,7 +6337,7 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
6154
6337
|
|
|
6155
6338
|
/* The gear in the Finder's and the servers' heads: their settings, one click away. */
|
|
6156
6339
|
.surface-gear { display: inline-grid; place-items: center; width: 28px; height: 28px; flex: none; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--text-2); cursor: pointer; transition: background-color var(--motion-fast) var(--ease-out), color var(--motion-fast) var(--ease-out); }
|
|
6157
|
-
.surface-gear svg { width:
|
|
6340
|
+
.surface-gear svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
6158
6341
|
.surface-gear:hover { color: var(--text); background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
6159
6342
|
.surface-gear:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 70%, transparent); outline-offset: 1px; }
|
|
6160
6343
|
|
|
@@ -6219,6 +6402,7 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
6219
6402
|
.mods-detail .module-card :is(p, ul, li, .summary) { font-family: var(--read); font-size: 13px; font-weight: var(--read-weight, 300); line-height: 1.55; letter-spacing: 0; text-transform: none; color: var(--text); }
|
|
6220
6403
|
.mods-detail .module-card :is(.state, .vendor, .detail, .note, .update, .card-block h5, .ollama-status, .actions .toggle, .confirm .warn, i) { font-family: var(--read); font-size: 12px; letter-spacing: 0; text-transform: lowercase; color: var(--text-2); font-style: normal; }
|
|
6221
6404
|
.mods-detail .module-card :is(.state, .vendor, .detail, .note, .update, .card-block h5, .confirm .warn)::first-letter { text-transform: uppercase; }
|
|
6405
|
+
.mods-detail .module-card .confirm :is(.warn, .note).as-written { text-transform: none; }
|
|
6222
6406
|
.mods-detail .module-card .state.on { color: var(--phosphor); }
|
|
6223
6407
|
.mods-detail .module-card .card-block h5 { display: inline-block; font-size: 12.5px; font-weight: 600; color: var(--text); }
|
|
6224
6408
|
.mods-detail .module-card .version b { font-family: var(--mono); font-size: 12px; color: var(--text); }
|
|
@@ -6337,9 +6521,13 @@ dialog.surface.window:is(.settings-window, .module-window).lifted { background-c
|
|
|
6337
6521
|
.bar-left .connection { position: relative; align-self: flex-start; margin: 9px 0 0 -2px; padding: 4px; text-transform: none; cursor: default; }
|
|
6338
6522
|
.bar-left .connection :is(.connection-icon .bar-glyph, .connection-label) { display: none; }
|
|
6339
6523
|
.bar-left .connection .connection-dot { width: 7px; height: 7px; background: var(--text-3); box-shadow: none; }
|
|
6340
|
-
.bar-left .connection[data-state="live"] .connection-dot { background: #34d058; animation:
|
|
6341
|
-
.bar-left .connection[data-state="reconnecting"] .connection-dot { background: var(--warn); animation:
|
|
6342
|
-
|
|
6524
|
+
.bar-left .connection[data-state="live"] .connection-dot { background: #34d058; animation: state-pulse 2.6s ease-in-out infinite; }
|
|
6525
|
+
.bar-left .connection[data-state="reconnecting"] .connection-dot { background: var(--warn); animation: state-pulse 1.1s ease-in-out infinite; }
|
|
6526
|
+
.bar-left .connection:is([data-state="offline"], [data-state="closed"], [data-state="disconnected"]) .connection-dot { background: var(--danger, #e5484d); animation: none; }
|
|
6527
|
+
/* The project's state is a dot that breathes, nothing more (2026-10-14): from its size to a little
|
|
6528
|
+
larger and back, in the colour of the state. No glow around it. */
|
|
6529
|
+
@keyframes state-pulse { 0%, 100% { transform: scale(.85); } 50% { transform: scale(1.15); } }
|
|
6530
|
+
:root.just-arrived .bar-left .connection[data-state="live"] .connection-dot { animation: state-pulse 2.6s ease-in-out infinite; }
|
|
6343
6531
|
.bar-left .connection::after { content: attr(data-said); position: absolute; top: calc(100% + 8px); left: 50%; translate: -50% 0; padding: 4px 9px; border-radius: 8px; font-family: var(--read); font-size: 12px; font-weight: 500; white-space: nowrap; color: var(--text); background: var(--surface, var(--panel)); box-shadow: var(--key-rest); opacity: 0; pointer-events: none; transition: opacity var(--motion-fast) var(--ease-out); z-index: 60; }
|
|
6344
6532
|
.bar-left .connection:hover::after { opacity: 1; }
|
|
6345
6533
|
.bar-left .connection::first-letter { text-transform: none; }
|
|
@@ -6683,7 +6871,9 @@ dialog.mods-window { width: 1040px; height: 720px; container: modswin / inline-s
|
|
|
6683
6871
|
display: inline-flex; align-items: center; gap: 9px;
|
|
6684
6872
|
padding: 9px 16px 9px 13px; border: 0; border-radius: 20px;
|
|
6685
6873
|
background: var(--surface, var(--panel)); color: var(--text);
|
|
6686
|
-
|
|
6874
|
+
/* It floats over the canvas (2026-10-14): a rim, a near shadow and a far one, so it reads lifted
|
|
6875
|
+
off any wallpaper or thread under it. */
|
|
6876
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 14%, transparent), inset 0 1px 0 rgb(255 255 255 / .06), 0 2px 4px rgba(0, 0, 0, .24), 0 12px 28px -6px rgba(0, 0, 0, .5), 0 28px 60px -18px rgba(0, 0, 0, .45);
|
|
6687
6877
|
font-family: var(--read); font-size: 13px; font-weight: 450; line-height: 1.4; text-align: left;
|
|
6688
6878
|
max-width: min(560px, calc(100% - 32px)); width: max-content;
|
|
6689
6879
|
}
|
|
@@ -6692,6 +6882,10 @@ dialog.mods-window { width: 1040px; height: 720px; container: modswin / inline-s
|
|
|
6692
6882
|
.toast .toast-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--text-3); }
|
|
6693
6883
|
.toast[data-tone="done"] .toast-dot { background: #34c759; box-shadow: 0 0 0 3px rgba(52, 199, 89, .16); }
|
|
6694
6884
|
.toast[data-tone="look"] .toast-dot { background: #e0a23c; box-shadow: 0 0 0 3px rgba(224, 162, 60, .18); }
|
|
6885
|
+
.toast[data-tone="news"] .toast-dot { background: var(--madre-green); box-shadow: 0 0 0 3px color-mix(in srgb, var(--madre-green) 22%, transparent); }
|
|
6886
|
+
/* The one key a notice may carry (the Market's news): small, the room's green, at its end. */
|
|
6887
|
+
.toast .toast-act { flex: none; margin-left: 4px; padding: 4px 11px; border: 0; border-radius: 99px; background: color-mix(in srgb, var(--madre-green) 16%, transparent); color: var(--madre-green); font: inherit; font-size: 12.5px; font-weight: 650; cursor: pointer; }
|
|
6888
|
+
.toast .toast-act:hover { background: color-mix(in srgb, var(--madre-green) 26%, transparent); }
|
|
6695
6889
|
.toast[data-tone="wrong"] .toast-dot { background: var(--danger); box-shadow: 0 0 0 3px color-mix(in srgb, var(--danger) 18%, transparent); }
|
|
6696
6890
|
|
|
6697
6891
|
/* The model's mark in the conversation is flat: one solid tint of the agent's colour, no light and
|
|
@@ -6708,7 +6902,7 @@ dialog.mods-window { width: 1040px; height: 720px; container: modswin / inline-s
|
|
|
6708
6902
|
#messages .row > .avatar.gradient { box-shadow: none !important; }
|
|
6709
6903
|
#messages .row > .avatar svg { width: 64%; height: 64%; opacity: 1; }
|
|
6710
6904
|
|
|
6711
|
-
:root[data-scheme="light"] .toast:not([hidden]) { box-shadow: 0
|
|
6905
|
+
:root[data-scheme="light"] .toast:not([hidden]) { box-shadow: 0 0 0 .5px rgba(20, 30, 20, .08), 0 2px 4px rgba(20, 30, 20, .1), 0 12px 28px -6px rgba(20, 30, 20, .22), 0 28px 60px -18px rgba(20, 30, 20, .2); }
|
|
6712
6906
|
|
|
6713
6907
|
/* ==========================================================================================
|
|
6714
6908
|
MU/TH/UR · the remedies, as a window of the room
|
|
@@ -6851,7 +7045,7 @@ dialog.room-ask:not(.console) .room-ask-card { justify-items: center; gap: 10px;
|
|
|
6851
7045
|
:root[data-scheme="light"] dialog.room-ask:not(.console) .room-ask-card { box-shadow: 0 1px 2px rgba(20, 30, 25, .08), 0 22px 48px -22px rgba(20, 30, 25, .35); }
|
|
6852
7046
|
dialog.room-ask:not(.console) .room-ask-icon { --tone: var(--phosphor); display: grid; place-items: center; width: 44px; height: 44px; margin-bottom: 2px; border-radius: 13px; background: color-mix(in srgb, var(--tone) 16%, transparent); color: var(--tone); }
|
|
6853
7047
|
dialog.room-ask:not(.console) .room-ask-icon[hidden] { display: none; }
|
|
6854
|
-
dialog.room-ask:not(.console) .room-ask-icon svg { width:
|
|
7048
|
+
dialog.room-ask:not(.console) .room-ask-icon svg { width: var(--ico-lg); height: var(--ico-lg); }
|
|
6855
7049
|
dialog.room-ask[data-kind="danger"] .room-ask-icon { --tone: var(--danger); }
|
|
6856
7050
|
dialog.room-ask[data-kind="key"] .room-ask-icon, dialog.key-ask .room-ask-icon { --tone: var(--mode-3); }
|
|
6857
7051
|
dialog.key-ask.m4 .room-ask-icon { --tone: var(--mode-4); }
|
|
@@ -6878,6 +7072,9 @@ dialog.room-ask:not(.console) .room-ask-choice.danger:hover { background: var(--
|
|
|
6878
7072
|
/* The key, quieter: one sentence of what it allows, a smaller one of what keeps it safe, the
|
|
6879
7073
|
ceiling note when there is one, and a field whose label says what to type. */
|
|
6880
7074
|
dialog.key-ask .room-ask-body { color: var(--text); font-size: 14px; }
|
|
7075
|
+
/* «Don't ask again…» under the memory gate: a quiet link to Settings › Permissions › Memory access. */
|
|
7076
|
+
.key-skip { display: block; margin: 4px auto 0; padding: 4px 8px; border: 0; border-radius: 8px; background: none; font: 500 12px/1.3 var(--sans); color: var(--text-2); cursor: pointer; text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--text-2) 40%, transparent); text-underline-offset: 3px; }
|
|
7077
|
+
.key-skip:hover, .key-skip:focus-visible { color: var(--text); background: color-mix(in srgb, var(--text) 6%, transparent); outline: 0; }
|
|
6881
7078
|
.key-safe { margin: -4px 0 0; font-family: var(--read); font-size: 12.5px; line-height: 1.45; color: color-mix(in srgb, var(--text) 58%, transparent); }
|
|
6882
7079
|
.key-raise { margin: 0; padding: 4px 10px; border-radius: 999px; background: color-mix(in srgb, var(--mode-3) 14%, transparent); color: color-mix(in srgb, var(--mode-3) 70%, var(--text)); font-family: var(--read); font-size: 12px; font-weight: 550; }
|
|
6883
7080
|
dialog.key-ask.m4 .key-raise { background: color-mix(in srgb, var(--mode-4) 14%, transparent); color: color-mix(in srgb, var(--mode-4) 70%, var(--text)); }
|
|
@@ -7063,7 +7260,7 @@ dialog.room-ask:not(.console) .room-ask-code { width: 100%; margin: 2px 0 0; pad
|
|
|
7063
7260
|
:root[data-scheme="light"] .job-sheet { box-shadow: 0 1px 2px rgba(20, 30, 25, .08), 0 14px 34px -18px rgba(20, 30, 25, .32); }
|
|
7064
7261
|
.job-sheet[hidden] { display: none; }
|
|
7065
7262
|
.job-icon { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px; background: color-mix(in srgb, var(--phosphor) 16%, transparent); color: var(--phosphor); }
|
|
7066
|
-
.job-icon svg { width:
|
|
7263
|
+
.job-icon svg { width: var(--ico-md); height: var(--ico-md); }
|
|
7067
7264
|
.job-sheet.failed .job-icon { background: color-mix(in srgb, var(--danger) 14%, transparent); color: var(--danger); }
|
|
7068
7265
|
.job-words { display: grid; gap: 2px; min-width: 0; }
|
|
7069
7266
|
.job-title { font-size: 13.5px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -7234,7 +7431,7 @@ dialog.room-ask:not(.console) .room-ask-code { width: 100%; margin: 2px 0 0; pad
|
|
|
7234
7431
|
animation-delay: 0ms, var(--jiggle-delay, 0ms);
|
|
7235
7432
|
}
|
|
7236
7433
|
.bar-badge[hidden] { display: none; }
|
|
7237
|
-
.bar-badge svg { display: block; width:
|
|
7434
|
+
.bar-badge svg { display: block; width: var(--ico-xs); height: var(--ico-xs); }
|
|
7238
7435
|
.bar-badge:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 70%, transparent); outline-offset: 2px; }
|
|
7239
7436
|
:root[data-scheme="light"] .bar-badge { --bar-ring: #ffffff; box-shadow: 0 0 0 1.5px var(--bar-ring), 0 1px 2px rgba(20, 30, 20, .18); }
|
|
7240
7437
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -7255,10 +7452,27 @@ dialog.room-ask:not(.console) .room-ask-code { width: 100%; margin: 2px 0 0; pad
|
|
|
7255
7452
|
.bar-tile:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 70%, transparent); outline-offset: 0; }
|
|
7256
7453
|
.bar-tile:active { transform: scale(.97); }
|
|
7257
7454
|
.bar-tile-glyph { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 11px; color: var(--phosphor); background: color-mix(in srgb, var(--text) 6%, transparent); box-shadow: var(--key-rest, none); }
|
|
7258
|
-
.bar-tile-glyph svg { display: block; width:
|
|
7455
|
+
.bar-tile-glyph svg { display: block; width: var(--ico-md); height: var(--ico-md); }
|
|
7259
7456
|
.bar-tile-name { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
7260
7457
|
.bar-card-empty { margin: 4px 2px 6px; font-size: 12.5px; color: var(--text-2); }
|
|
7261
7458
|
.bar-card-hint { margin: 10px 2px 0; font-size: 11.5px; color: var(--text-3); }
|
|
7459
|
+
/* «Add to the bar» (2026-10-17): a title and, under it, how the bar is arranged; Done at their right.
|
|
7460
|
+
Below, each key that can still go on is drawn as it will stand on the bar (its face, its drawing in
|
|
7461
|
+
the bar's ink, the bar's 18 px) with a «+» on the corner where the bar's keys wear their «−», and
|
|
7462
|
+
its whole name under it, on two lines if it needs them, never cut. */
|
|
7463
|
+
.bar-card.bar-add { width: min(380px, calc(100vw - 32px)); padding: 16px 16px 14px; }
|
|
7464
|
+
.bar-add .bar-card-head { align-items: flex-start; margin-bottom: 14px; }
|
|
7465
|
+
.bar-card-titles { display: grid; gap: 3px; min-width: 0; }
|
|
7466
|
+
.bar-card-titles h3 { font-size: 14px; }
|
|
7467
|
+
.bar-card-sub { margin: 0; font-size: 12px; line-height: 1.4; color: var(--text-2); }
|
|
7468
|
+
.bar-add .bar-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; padding: 4px 2px 2px; }
|
|
7469
|
+
.bar-add .bar-tile { gap: 8px; padding: 12px 6px 10px; color: var(--text-2); font-size: 12px; line-height: 1.3; }
|
|
7470
|
+
.bar-add .bar-tile-glyph { position: relative; width: 40px; height: 40px; border-radius: 12px; color: var(--text); background: var(--surface, var(--panel)); box-shadow: var(--key-rest, none); transition: color var(--motion-fast) var(--ease-out); }
|
|
7471
|
+
.bar-add .bar-tile:is(:hover, :focus-visible) .bar-tile-glyph { color: var(--phosphor); }
|
|
7472
|
+
.bar-add .bar-tile-name { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; white-space: normal; text-align: center; overflow-wrap: anywhere; }
|
|
7473
|
+
.bar-tile-plus { position: absolute; top: -5px; right: -5px; display: grid; place-items: center; width: 16px; height: 16px; border-radius: 50%; background: var(--phosphor); color: var(--phosphor-ink); }
|
|
7474
|
+
.bar-tile-plus svg { display: block; width: var(--ico-xs); height: var(--ico-xs); }
|
|
7475
|
+
:root[data-scheme="light"] .bar-add .bar-tile:is(:hover, :focus-visible) .bar-tile-glyph { color: color-mix(in srgb, var(--phosphor) 72%, #000000); }
|
|
7262
7476
|
@media (prefers-reduced-motion: reduce) { .bar-card { animation: none; } .bar-tile:active { transform: none; } }
|
|
7263
7477
|
|
|
7264
7478
|
/* On a narrow screen: keys that do not fit wait behind «more», the brand keeps its place, and
|
|
@@ -7269,9 +7483,12 @@ dialog.room-ask:not(.console) .room-ask-code { width: 100%; margin: 2px 0 0; pad
|
|
|
7269
7483
|
.bar-more-card[hidden] { display: none; }
|
|
7270
7484
|
@media (max-width: 720px) {
|
|
7271
7485
|
.bar > .bar-left { min-width: 58px; flex-shrink: 1; }
|
|
7272
|
-
.bar.bar-editing { overflow-x: auto; scrollbar-width: none; }
|
|
7273
|
-
.bar.bar-editing::-webkit-scrollbar { display: none; }
|
|
7274
7486
|
}
|
|
7487
|
+
/* Being arranged, at any width (2026-10-17): every key shows, so a bar with more keys than room
|
|
7488
|
+
scrolls sideways inside its own box instead of spilling under the house's keys, and the key
|
|
7489
|
+
being carried is held between the first and the last (app.js, barDragMove). */
|
|
7490
|
+
.bar.bar-editing { overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; scrollbar-width: none; }
|
|
7491
|
+
.bar.bar-editing::-webkit-scrollbar { display: none; }
|
|
7275
7492
|
|
|
7276
7493
|
/* Badges are a plain disc of the accent: no ring around them, anywhere. */
|
|
7277
7494
|
:is(.bar-count, .modules-count, .mother-count, .remedy-badge, .bar-badge, .chats-count, .badge-count) { box-shadow: none !important; outline: none !important; border: 0 !important; }
|
|
@@ -7315,7 +7532,7 @@ dialog.room-ask:not(.console) .room-ask-code { width: 100%; margin: 2px 0 0; pad
|
|
|
7315
7532
|
.steps-list li { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; gap: 10px; align-items: start; padding: 8px 6px; border-radius: 12px; }
|
|
7316
7533
|
.steps-list li:not(.done):hover { background: color-mix(in srgb, var(--text) 5%, transparent); }
|
|
7317
7534
|
.steps-tick { display: grid; place-items: center; width: 20px; height: 20px; margin-top: 1px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--text) 26%, transparent); color: transparent; transition: background-color var(--motion) var(--ease-out), color var(--motion) var(--ease-out); }
|
|
7318
|
-
.steps-tick svg { display: block; width:
|
|
7535
|
+
.steps-tick svg { display: block; width: var(--ico-xs); height: var(--ico-xs); }
|
|
7319
7536
|
.steps-list li.done .steps-tick { background: var(--acc, var(--phosphor)); color: var(--acc-ink, var(--phosphor-ink)); box-shadow: none; }
|
|
7320
7537
|
.steps-words { display: grid; gap: 2px; min-width: 0; }
|
|
7321
7538
|
.steps-words b { font-size: 13.5px; font-weight: 600; line-height: 1.4; }
|
|
@@ -7574,6 +7791,15 @@ html.via-phone[data-wallpaper]:not([data-wallpaper="default"]) { --phone-ground:
|
|
|
7574
7791
|
background: var(--agent-gradient, var(--agent-solid, var(--agent))) !important;
|
|
7575
7792
|
color: #ffffff !important;
|
|
7576
7793
|
}
|
|
7794
|
+
/* Switched off: an agent in the bar that cannot answer (not installed, no adapter, or no session)
|
|
7795
|
+
is a quiet grey disc with its mark, no colour and no ring, until it can (2026-10-17). */
|
|
7796
|
+
#agents.agents .avatar.off {
|
|
7797
|
+
background: color-mix(in srgb, var(--text) 9%, transparent) !important;
|
|
7798
|
+
color: color-mix(in srgb, var(--text) 38%, transparent) !important;
|
|
7799
|
+
border: 0 !important; box-shadow: none !important; filter: grayscale(1);
|
|
7800
|
+
}
|
|
7801
|
+
#agents.agents .avatar.off::before { display: none; }
|
|
7802
|
+
#agents.agents .avatar.off.open { box-shadow: 0 0 0 2px var(--lay-4), 0 0 0 3.5px color-mix(in srgb, var(--text) 30%, transparent) !important; }
|
|
7577
7803
|
/* What was said by a ring keeps its ring: the open agent in the bar, the chosen one in the picker. */
|
|
7578
7804
|
.agents .avatar.open:not(.offline):not(.detected),
|
|
7579
7805
|
.picker .avatar.pick[aria-checked="true"]:not(.offline):not(.detected) { box-shadow: 0 0 0 2px var(--lay-4), 0 0 0 3.5px var(--agent-solid, var(--agent)) !important; }
|
|
@@ -7593,10 +7819,21 @@ html.via-phone[data-wallpaper]:not([data-wallpaper="default"]) { --phone-ground:
|
|
|
7593
7819
|
container-type: normal;
|
|
7594
7820
|
}
|
|
7595
7821
|
.shell > .bar.bar-home[hidden], .via-phone .shell > .bar.bar-home { display: none !important; }
|
|
7822
|
+
/* When the room's bar folds its keys into 34 px squares, the house's fold with them (app.js,
|
|
7823
|
+
roomWidth): one row, one size of key, one size of drawing. */
|
|
7824
|
+
.shell > .bar.bar-home.keys-square { padding-block: 9px; }
|
|
7825
|
+
.shell > .bar.bar-home.keys-square > .tree-button { display: inline-grid; place-items: center; width: 34px; height: 34px; padding: 0; border-radius: 11px; }
|
|
7826
|
+
.shell > .bar.bar-home.keys-square > .tree-button svg { width: var(--ico-md); height: var(--ico-md); }
|
|
7827
|
+
/* The notes to accept, short (app.js, barFit): when nothing else can leave a narrow bar, the tray
|
|
7828
|
+
and its number, and the words in the key's name. */
|
|
7829
|
+
#inbox-pill .inbox-count { display: none; font-variant-numeric: tabular-nums; }
|
|
7830
|
+
.bar.bar-tight > #inbox-pill .handoff-words { display: none; }
|
|
7831
|
+
.bar.bar-tight > #inbox-pill .inbox-count { display: inline; }
|
|
7832
|
+
.bar.bar-tight > #inbox-pill { padding-inline: 10px 12px; }
|
|
7596
7833
|
:root:not(.via-phone) .shell > .bar.with-home {
|
|
7597
7834
|
width: auto; justify-self: stretch;
|
|
7598
7835
|
margin-left: max(20px, calc((100% - 1440px) / 2));
|
|
7599
|
-
margin-right: calc(max(20px, calc((100% - 1440px) / 2)) + var(--home-w, 150px) +
|
|
7836
|
+
margin-right: calc(max(20px, calc((100% - 1440px) / 2)) + var(--home-w, 150px) + 16px);
|
|
7600
7837
|
}
|
|
7601
7838
|
/* With the second bar beside it the room's bar is ~120px narrower, so the pulse alone takes the
|
|
7602
7839
|
wordmark's place a little earlier: before the brand is cut instead of folded. */
|
|
@@ -7646,7 +7883,7 @@ dialog.room-switch::backdrop {
|
|
|
7646
7883
|
.switch-face { display: grid; place-items: center; width: 100%; height: 100%; }
|
|
7647
7884
|
.switch-icon.is-coordinator svg { width: 58%; height: 58%; display: block; }
|
|
7648
7885
|
.switch-badge { position: absolute; top: -6px; right: -6px; display: none; place-items: center; min-width: 22px; height: 22px; padding: 0 6px; border-radius: 999px; font-family: var(--mono); font-size: 11.5px; font-style: normal; font-weight: 700; line-height: 1; box-shadow: 0 0 0 2.5px var(--bg-2); }
|
|
7649
|
-
.switch-badge svg { width:
|
|
7886
|
+
.switch-badge svg { width: var(--ico-xs); height: var(--ico-xs); }
|
|
7650
7887
|
.switch-tile.is-waiting .switch-badge { display: grid; background: var(--acc, var(--phosphor)); color: var(--acc-ink, var(--phosphor-ink)); }
|
|
7651
7888
|
.switch-tile.is-done .switch-badge { display: grid; padding: 0; background: var(--session-ok); color: var(--phosphor-ink); }
|
|
7652
7889
|
.switch-tile.is-working .switch-badge { display: grid; min-width: 0; width: 22px; padding: 0; background: var(--bg-2); }
|
|
@@ -7731,6 +7968,32 @@ dialog.viewer .viewer-seg .viewer-seg-btn:not([hidden]) + .viewer-open { margin-
|
|
|
7731
7968
|
.agent-pop .pop-group dd { font-family: var(--read, var(--sans)); font-size: 12.5px; line-height: 1.35; color: var(--text); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
7732
7969
|
.agent-pop .caps { margin-top: 12px !important; padding-top: 12px; border-top: 1px solid var(--line); }
|
|
7733
7970
|
.agent-pop .foot { margin-top: 10px; font-size: 9px; line-height: 1.5; }
|
|
7971
|
+
/* The agent's card, ordered (2026-10-14): name and session, one figure, four numbers, the plan, a
|
|
7972
|
+
line for the connection, what it can do and the way to its settings. */
|
|
7973
|
+
.agent-pop .head { gap: 10px; }
|
|
7974
|
+
.agent-pop .pop-who { display: grid; gap: 1px; min-width: 0; }
|
|
7975
|
+
.agent-pop .pop-who .vendor { margin: 0; font-family: var(--read, var(--sans)); font-size: 11.5px; letter-spacing: 0; color: var(--text-3); }
|
|
7976
|
+
.agent-pop .pop-session { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; height: 22px; padding: 0 9px; border-radius: 999px; background: color-mix(in srgb, var(--text) 6%, transparent); font-family: var(--read, var(--sans)); font-size: 11.5px; color: var(--text-2); white-space: nowrap; }
|
|
7977
|
+
.agent-pop .pop-session::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--text-3); }
|
|
7978
|
+
.agent-pop .pop-session.ok::before { background: #34c759; }
|
|
7979
|
+
.agent-pop .pop-session.wait::before { background: var(--warn); }
|
|
7980
|
+
.agent-pop .pop-session.bad::before { background: var(--danger); }
|
|
7981
|
+
.agent-pop .pop-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 12px 0; border-bottom: 1px solid var(--line); }
|
|
7982
|
+
.agent-pop .pop-stat { display: grid; gap: 3px; padding: 9px 11px; border-radius: 11px; background: color-mix(in srgb, var(--text) 4.5%, transparent); min-width: 0; }
|
|
7983
|
+
.agent-pop .pop-stat span { font-family: var(--read, var(--sans)); font-size: 11px; color: var(--text-3); }
|
|
7984
|
+
.agent-pop .pop-stat b { font-family: var(--read, var(--sans)); font-size: 14px; font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
7985
|
+
.agent-pop .pop-provider { display: grid; gap: 5px; padding: 11px 0; border-bottom: 1px solid var(--line); }
|
|
7986
|
+
.agent-pop .pop-provider h4 { margin: 0 0 2px; font-family: var(--read, var(--sans)); font-size: 12px; font-weight: 600; color: var(--text); letter-spacing: 0; text-transform: none; }
|
|
7987
|
+
.agent-pop .pop-limit { display: flex; justify-content: space-between; gap: 12px; font-family: var(--read, var(--sans)); font-size: 12px; color: var(--text-2); }
|
|
7988
|
+
.agent-pop .pop-limit b { font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }
|
|
7989
|
+
.agent-pop .pop-limit.hot b { color: var(--crit); }
|
|
7990
|
+
.agent-pop .pop-note { margin: 0; font-family: var(--read, var(--sans)); font-size: 12px; line-height: 1.45; color: var(--text-2); }
|
|
7991
|
+
.agent-pop .pop-meta { margin: 10px 0 0; font-family: var(--read, var(--sans)); font-size: 11.5px; line-height: 1.45; color: var(--text-3); }
|
|
7992
|
+
.agent-pop .caps { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 10px !important; padding-top: 0; border-top: 0; }
|
|
7993
|
+
.agent-pop .caps .cap { padding: 3px 8px; border: 0; border-radius: 999px; background: color-mix(in srgb, var(--text) 5%, transparent); font-family: var(--read, var(--sans)); font-size: 11px; letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
7994
|
+
.agent-pop .caps .cap.on { background: color-mix(in srgb, var(--agent, var(--phosphor)) 13%, transparent); color: color-mix(in srgb, var(--agent, var(--phosphor)) 75%, var(--text)); }
|
|
7995
|
+
.agent-pop .pop-go { width: 100%; margin-top: 12px; height: 32px; border: 0; border-radius: 10px; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); font-family: var(--read, var(--sans)); font-size: 12.5px; font-weight: 500; cursor: pointer; }
|
|
7996
|
+
.agent-pop .pop-go:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--text) 12%, transparent); outline: 0; }
|
|
7734
7997
|
|
|
7735
7998
|
/* The agent picker: the chosen agent at full colour; the others dimmed, until the pointer finds one. */
|
|
7736
7999
|
.picker .avatar.pick:not([aria-checked="true"]) { filter: saturate(.55) brightness(.94); opacity: .55; transition: opacity calc(160ms * var(--motion-scale, 1)) var(--ease-out), filter calc(160ms * var(--motion-scale, 1)) var(--ease-out); }
|
|
@@ -7822,6 +8085,37 @@ dialog#core .mother-close { height: 30px; padding: 0 13px; border: 0; border-rad
|
|
|
7822
8085
|
dialog#core .mother-close:hover { box-shadow: var(--key-over, var(--key-rest)); color: var(--phosphor); }
|
|
7823
8086
|
dialog#core .mother-close:active { box-shadow: var(--key-down, var(--key-rest)); }
|
|
7824
8087
|
dialog#core .mother-boot { display: none; }
|
|
8088
|
+
/* «Lo que se envía» in the room's hand (2026-10-14): the title over its line on the left, the
|
|
8089
|
+
buttons every window has on the right, centred tabs, and the console's capitals gone from what
|
|
8090
|
+
used to be MU/TH/UR's (the verdict, «next», the memory review, the roles and fields). */
|
|
8091
|
+
dialog#core .mother-head { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "title actions" "sub actions"; align-items: center; gap: 2px 16px; padding: 16px 16px 14px 24px; }
|
|
8092
|
+
dialog#core .mother-title { grid-area: title; line-height: 1.25; }
|
|
8093
|
+
dialog#core .mother-sub { grid-area: sub; flex: none; line-height: 1.35; }
|
|
8094
|
+
dialog#core .mother-actions { grid-area: actions; align-items: center; gap: 10px; }
|
|
8095
|
+
dialog#core .core-copy-all { height: 30px; font-family: var(--read); font-size: 12.5px; font-weight: 550; letter-spacing: 0; text-transform: none; }
|
|
8096
|
+
dialog#core .core-tab { display: grid; justify-items: center; text-align: center; }
|
|
8097
|
+
dialog#core .core-tab .meta { max-width: 100%; }
|
|
8098
|
+
dialog#core .mem-verdict .says, dialog#core .mem-verdict > p:not(.maturity-next) { margin: 0; font-family: var(--read); font-size: 13px; line-height: 1.5; letter-spacing: 0; text-transform: none; color: var(--text-2); text-shadow: none; }
|
|
8099
|
+
dialog#core .mem-verdict .says b { margin-right: 6px; font-size: 13px; letter-spacing: 0; color: var(--text); }
|
|
8100
|
+
dialog#core .mem-verdict .maturity-next { padding: 11px 14px; border: 0; border-radius: 12px; background: color-mix(in srgb, var(--text) 5%, transparent); box-shadow: none; font-family: var(--read); font-size: 12.5px; line-height: 1.5; letter-spacing: 0; text-transform: none; color: var(--text); }
|
|
8101
|
+
dialog#core .mem-verdict .maturity-next b { margin-right: 8px; font-size: 12.5px; font-weight: 600; letter-spacing: 0; color: var(--phosphor); }
|
|
8102
|
+
dialog#core .mem-verdict .maturity-next .where { font-size: 12px; letter-spacing: 0; color: var(--text-3); }
|
|
8103
|
+
dialog#core :is(.exams, .exam .verdict, .exam-head b, .exams .note, .exam .note, .exam-bullet span, .exam .said, .exam .actions button) { font-family: var(--read); letter-spacing: 0; text-transform: none; text-shadow: none; }
|
|
8104
|
+
dialog#core .exam-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
|
|
8105
|
+
dialog#core .exam-head b { font-size: 13px; font-weight: 600; color: var(--text); }
|
|
8106
|
+
dialog#core .exam .verdict { flex: none; padding: 2px 8px; border: 0; border-radius: 7px; font-size: 11.5px; background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text-2); }
|
|
8107
|
+
dialog#core .exam.passed .verdict { background: color-mix(in srgb, var(--phosphor) 16%, transparent); color: var(--phosphor); }
|
|
8108
|
+
dialog#core .exam.failed .verdict { background: color-mix(in srgb, var(--warn) 16%, transparent); color: var(--warn); }
|
|
8109
|
+
dialog#core .exam :is(.note, .said) { font-size: 12.5px; line-height: 1.5; color: var(--text-2); }
|
|
8110
|
+
dialog#core .exam-bullet span { font-size: 11.5px; color: var(--text-3); }
|
|
8111
|
+
dialog#core .exam .actions button { height: 28px; padding: 0 12px; border: 0; border-radius: 8px; background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text); font-size: 12px; box-shadow: none; cursor: pointer; }
|
|
8112
|
+
dialog#core .exam .actions button.primary { background: var(--phosphor); color: var(--phosphor-ink); }
|
|
8113
|
+
dialog#core .core-role { color: var(--text); }
|
|
8114
|
+
dialog#core .core-role input { width: 15px; height: 15px; accent-color: var(--phosphor); }
|
|
8115
|
+
dialog#core .core-role-words b { font-family: var(--read); font-size: 13px; font-weight: 500; letter-spacing: 0; text-transform: none; color: var(--text); }
|
|
8116
|
+
dialog#core .core-role-words .detail { font-family: var(--read); font-size: 12px; letter-spacing: 0; color: var(--text-3); }
|
|
8117
|
+
dialog#core .core-field { font-family: var(--read); font-size: 12px; letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
8118
|
+
dialog#core .core-pick select, dialog#core .core-field select { font-family: var(--read) !important; font-size: 12.5px !important; letter-spacing: 0 !important; text-transform: none !important; }
|
|
7825
8119
|
dialog#core .mother-foot { padding: 9px 22px 11px; border-top: 1px solid var(--line); font-family: var(--read); font-size: 11.5px; letter-spacing: 0; text-transform: none; color: var(--text-3); text-align: center; }
|
|
7826
8120
|
/* The body: tabs, the strip that says for whom, the pane, and the question line. */
|
|
7827
8121
|
dialog#core .core-body { min-height: 0; gap: 12px; padding: 14px 22px 14px; }
|
|
@@ -7991,6 +8285,74 @@ dialog#core .mother-cmd .copy { position: absolute; top: 8px; right: 8px; displa
|
|
|
7991
8285
|
width: fit-content; max-width: min(92%, 560px); margin-inline: auto; padding: 8px 16px 9px; border: 0; border-radius: 18px;
|
|
7992
8286
|
}
|
|
7993
8287
|
#messages#messages .row > .col > .who { width: fit-content; max-width: 100%; padding: 3px 10px; border-radius: 999px; }
|
|
8288
|
+
/* A failure wears the room's own card (2026-10-14): rounded, as wide as its words, in its red
|
|
8289
|
+
tint — it was a square box of another app. Its RETRY and UNDO stay under it. */
|
|
8290
|
+
#messages#messages .thread-inner > .system.fail {
|
|
8291
|
+
width: fit-content; max-width: min(92%, 560px); margin-inline: auto; padding: 10px 18px 11px; border: 0; border-radius: 18px;
|
|
8292
|
+
background: color-mix(in srgb, var(--danger) 9%, var(--plane-solid, var(--panel))) !important;
|
|
8293
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--danger) 30%, transparent) !important;
|
|
8294
|
+
}
|
|
8295
|
+
#messages#messages .thread-inner > .system.fail .label { font-family: var(--mono); letter-spacing: .14em; }
|
|
8296
|
+
|
|
8297
|
+
/* ==========================================================================================
|
|
8298
|
+
NOTICES THAT FOLD INTO DOTS (2026-10-14)
|
|
8299
|
+
------------------------------------------------------------------------------------------
|
|
8300
|
+
A notice says its piece and, ten seconds later, folds into a row of the notices around it.
|
|
8301
|
+
Folded, the row is one small dot in the colour of its first notice and «+N» for the rest, on
|
|
8302
|
+
the same glass as mode · model · effort so it reads on any wallpaper. A click opens the row as
|
|
8303
|
+
one card with every notice in order, each with its dot; another click, or Escape, folds it.
|
|
8304
|
+
Red is a diagnostic, amber a permission or a warning, green something that went well, grey the
|
|
8305
|
+
rest. Sizes carry !important: the wallpaper's rules for the room's lines would otherwise give a
|
|
8306
|
+
folded notice their width and padding (it was a dot 0 px wide, only its ring showing).
|
|
8307
|
+
========================================================================================== */
|
|
8308
|
+
#messages#messages .thread-inner > .system.folding { animation: notice-fold .22s ease forwards; }
|
|
8309
|
+
@keyframes notice-fold { to { opacity: 0; transform: scale(.94); } }
|
|
8310
|
+
#messages .sys-dots {
|
|
8311
|
+
display: flex; align-items: center; gap: 6px; width: fit-content; max-width: min(92%, 560px); margin: 6px auto; padding: 4px 9px 4px 7px;
|
|
8312
|
+
border-radius: 999px; cursor: pointer; font-family: var(--mono); font-size: 10px; letter-spacing: .06em; color: var(--text-2);
|
|
8313
|
+
background: color-mix(in srgb, var(--bg) 62%, transparent); border: .5px solid color-mix(in srgb, var(--text) 10%, transparent);
|
|
8314
|
+
-webkit-backdrop-filter: blur(18px) saturate(1.6); backdrop-filter: blur(18px) saturate(1.6);
|
|
8315
|
+
transition: background .18s ease;
|
|
8316
|
+
}
|
|
8317
|
+
#messages .sys-dots:hover, #messages .sys-dots:focus-visible { background: color-mix(in srgb, var(--bg) 78%, transparent); outline: none; }
|
|
8318
|
+
#messages .sys-dots > .sys-more { font: inherit; color: inherit; }
|
|
8319
|
+
#messages .sys-dots.single { padding: 6px; gap: 0; justify-content: center; }
|
|
8320
|
+
#messages#messages .sys-dots > .system.folded { --dot: var(--text-3); margin: 0; cursor: inherit; }
|
|
8321
|
+
#messages#messages .sys-dots > .system.folded[data-tone="crit"] { --dot: var(--terror, #d33); }
|
|
8322
|
+
#messages#messages .sys-dots > .system.folded[data-tone="warn"] { --dot: var(--warn, #e2a022); }
|
|
8323
|
+
#messages#messages .sys-dots > .system.folded[data-tone="ok"] { --dot: var(--ok, var(--phosphor, #2f9e44)); }
|
|
8324
|
+
/* Folded: the first notice is the dot; the rest are counted in «+N». */
|
|
8325
|
+
#messages#messages .sys-dots:not(.open) > .system.folded {
|
|
8326
|
+
flex: none; width: 8px !important; height: 8px !important; min-width: 0 !important; max-width: none !important; padding: 0 !important; border: 0 !important; border-radius: 50% !important;
|
|
8327
|
+
overflow: hidden; font-size: 0; line-height: 0; color: transparent; text-shadow: none !important;
|
|
8328
|
+
background: var(--dot) !important; box-shadow: 0 0 0 2px color-mix(in srgb, var(--dot) 22%, transparent) !important;
|
|
8329
|
+
-webkit-backdrop-filter: none !important; backdrop-filter: none !important;
|
|
8330
|
+
animation: dot-in .28s cubic-bezier(.2, .9, .3, 1.25);
|
|
8331
|
+
}
|
|
8332
|
+
#messages#messages .sys-dots:not(.open) > .system.folded:not(:first-child) { display: none !important; }
|
|
8333
|
+
#messages#messages .sys-dots:not(.open) > .system.folded > * { display: none !important; }
|
|
8334
|
+
#messages#messages .sys-dots > .system.folded.quiet { animation: none; }
|
|
8335
|
+
@keyframes dot-in { from { transform: scale(.3); opacity: 0; } to { transform: scale(1); opacity: 1; } }
|
|
8336
|
+
/* Open: one card, every notice in order, each with its dot. No bar on the side. */
|
|
8337
|
+
#messages .sys-dots.open {
|
|
8338
|
+
display: grid; gap: 2px; width: min(92%, 560px); padding: 6px; border-radius: 16px; cursor: default;
|
|
8339
|
+
background: color-mix(in srgb, var(--bg) 88%, transparent); border-color: color-mix(in srgb, var(--text) 12%, transparent);
|
|
8340
|
+
box-shadow: 0 10px 30px -12px rgb(0 0 0 / .35); animation: notice-peek .2s ease;
|
|
8341
|
+
}
|
|
8342
|
+
#messages#messages .sys-dots.open > .system.folded { color: var(--text-2) !important; }
|
|
8343
|
+
#messages#messages .sys-dots.open > .system.folded {
|
|
8344
|
+
position: relative; width: auto !important; max-width: none !important; margin: 0 !important; padding: 7px 12px 8px 26px !important; border: 0 !important; border-radius: 10px !important;
|
|
8345
|
+
text-align: left; background: transparent !important; box-shadow: none !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
|
|
8346
|
+
}
|
|
8347
|
+
#messages#messages .sys-dots.open > .system.folded:hover { background: color-mix(in srgb, var(--text) 4%, transparent) !important; }
|
|
8348
|
+
#messages#messages .sys-dots.open > .system.folded::before { content: ''; position: absolute; left: 11px; top: 12px; width: 7px; height: 7px; border-radius: 50%; background: var(--dot); }
|
|
8349
|
+
#messages#messages .sys-dots.open > .system.folded > b:first-child { display: inline; margin-right: 6px; }
|
|
8350
|
+
#messages .sys-dots.open > .sys-more { justify-self: center; margin-top: 2px; padding: 3px 10px; border-radius: 999px; cursor: pointer; color: var(--text-3); }
|
|
8351
|
+
#messages .sys-dots.open > .sys-more:hover { color: var(--text); }
|
|
8352
|
+
@keyframes notice-peek { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
|
|
8353
|
+
@media (prefers-reduced-motion: reduce) {
|
|
8354
|
+
#messages#messages .sys-dots > .system.folded, #messages .sys-dots.open, #messages#messages .thread-inner > .system.folding { animation: none !important; transition: none !important; }
|
|
8355
|
+
}
|
|
7994
8356
|
|
|
7995
8357
|
/* ==========================================================================================
|
|
7996
8358
|
SIGUE ABIERTO AQUÍ, THE SAME GLASS AS MODE · MODEL · EFFORT (2026-10-09)
|
|
@@ -8002,9 +8364,9 @@ dialog#core .mother-cmd .copy { position: absolute; top: 8px; right: 8px; displa
|
|
|
8002
8364
|
(`#composer#composer` only outranks CHIPS IN FLAT TONE, which had flattened them into tags.)
|
|
8003
8365
|
========================================================================================== */
|
|
8004
8366
|
:root {
|
|
8005
|
-
--lq-fill: color-mix(in srgb, var(--bg) 45%, transparent);
|
|
8006
|
-
--lq-fill-over: color-mix(in srgb, var(--bg) 62%, transparent);
|
|
8007
|
-
--lq-rim:
|
|
8367
|
+
--lq-fill: color-mix(in srgb, var(--text) 7%, color-mix(in srgb, var(--bg) 45%, transparent));
|
|
8368
|
+
--lq-fill-over: color-mix(in srgb, var(--text) 11%, color-mix(in srgb, var(--bg) 62%, transparent));
|
|
8369
|
+
--lq-rim: 0 0 0 .5px color-mix(in srgb, var(--text) 12%, transparent), inset 0 1px 0 rgb(255 255 255 / .05);
|
|
8008
8370
|
}
|
|
8009
8371
|
:root[data-scheme="light"] {
|
|
8010
8372
|
--lq-fill: color-mix(in srgb, var(--bg) 62%, transparent);
|
|
@@ -8036,7 +8398,7 @@ dialog#core .mother-cmd .copy { position: absolute; top: 8px; right: 8px; displa
|
|
|
8036
8398
|
the colour of a stop; it fills a little under the pointer. */
|
|
8037
8399
|
#messages .system.plan > b:first-child { display: flex; align-items: center; justify-content: center; gap: 6px; }
|
|
8038
8400
|
#messages .system.plan .act.stop { width: 22px; height: 22px; display: inline-grid; place-items: center; padding: 0; margin: -3px 0; border: 0; border-radius: 50%; background: color-mix(in srgb, var(--crit) 12%, transparent); color: var(--crit); letter-spacing: 0; cursor: pointer; transition: background-color calc(150ms * var(--motion-scale, 1)) var(--ease-out); }
|
|
8039
|
-
#messages .system.plan .act.stop svg { width:
|
|
8401
|
+
#messages .system.plan .act.stop svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
8040
8402
|
#messages .system.plan .act.stop:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--crit) 24%, transparent); outline: 0; }
|
|
8041
8403
|
#messages .system.plan .act.stop:disabled { opacity: .45; cursor: default; }
|
|
8042
8404
|
|
|
@@ -8218,7 +8580,7 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8218
8580
|
.tour-head-words { display: grid; gap: 4px; }
|
|
8219
8581
|
.tour-head h2 { margin: 0; font-size: 22px; font-weight: 650; letter-spacing: -.015em; }
|
|
8220
8582
|
.tour-close { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 50%; color: var(--text-2); background: color-mix(in srgb, var(--text) 7%, transparent); cursor: pointer; }
|
|
8221
|
-
.tour-close svg { width:
|
|
8583
|
+
.tour-close svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
8222
8584
|
.tour-close:hover { color: var(--text); background: color-mix(in srgb, var(--text) 12%, transparent); }
|
|
8223
8585
|
.tour-body { display: grid; grid-template-columns: 210px minmax(0, 1fr); flex: 1 1 auto; min-height: 0; border-top: 1px solid color-mix(in srgb, var(--text) 9%, transparent); }
|
|
8224
8586
|
.tour-window .tour-nav { display: grid; align-content: start; gap: 2px; margin: 0; padding: 10px 8px; list-style: none; overflow-y: auto; border-right: 1px solid color-mix(in srgb, var(--text) 9%, transparent); }
|
|
@@ -8338,7 +8700,33 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8338
8700
|
.tour-pill { display: inline-flex; align-items: center; gap: 2px; height: 28px; padding: 0 3px 0 0; border-radius: 999px; background: color-mix(in srgb, var(--tour-acc) 16%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--tour-acc) 40%, transparent); }
|
|
8339
8701
|
.tour-pill-go { height: 28px; padding: 0 6px 0 12px; border: 0; background: transparent; font: inherit; font-family: var(--read); font-size: 12.5px; font-weight: 600; white-space: nowrap; color: color-mix(in srgb, var(--tour-acc) 70%, var(--text)); cursor: pointer; }
|
|
8340
8702
|
.tour-pill-x { display: grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 50%; color: var(--text-2); background: transparent; cursor: pointer; }
|
|
8341
|
-
.tour-pill-x svg { width:
|
|
8703
|
+
.tour-pill-x svg { width: var(--ico-xs); height: var(--ico-xs); }
|
|
8704
|
+
/* A phone's room bar (2026-10-14): only what keeps it whole — the pulse, the live light, DETENER
|
|
8705
|
+
TODO and «more» on the left; Inicio, the projects and Ajustes on the right. Reload is the page's
|
|
8706
|
+
own pull, and the tour goes on from Ajustes › Versión. */
|
|
8707
|
+
@media (max-width: 560px) {
|
|
8708
|
+
.shell > .bar { gap: 8px; }
|
|
8709
|
+
.shell > .bar .brand { width: 40px; overflow: hidden; flex: none; }
|
|
8710
|
+
.shell > .bar .tour-pill-slot, .shell > .bar-home #reload-button { display: none !important; }
|
|
8711
|
+
}
|
|
8712
|
+
/* The room's bar knows its own width (2026-10-14): split beside a second conversation and the
|
|
8713
|
+
browser it is narrow on a wide screen, where the screen's media queries never fire. */
|
|
8714
|
+
/* Both names: «bar» is the one every older fold of the bar asks for; with only «roombar» here
|
|
8715
|
+
(2026-10-14) none of them fired and a narrow bar kept its wide keys. */
|
|
8716
|
+
.shell > .bar:not(.bar-home) { container: bar roombar / inline-size; }
|
|
8717
|
+
@container roombar (max-width: 760px) {
|
|
8718
|
+
.tour-pill-go[data-short] { font-size: 0; }
|
|
8719
|
+
.tour-pill-go[data-short]::after { content: attr(data-short); font-size: 12px; }
|
|
8720
|
+
}
|
|
8721
|
+
@container roombar (max-width: 470px) {
|
|
8722
|
+
.bar-left .brand { width: 40px; overflow: hidden; flex: none; }
|
|
8723
|
+
.tour-pill-slot { display: none !important; }
|
|
8724
|
+
}
|
|
8725
|
+
/* A narrow bar (2026-10-14): the pill says «Recorrido · 3/13»; the full sentence stays its name. */
|
|
8726
|
+
@media (max-width: 1180px) {
|
|
8727
|
+
.tour-pill-go[data-short] { font-size: 0; }
|
|
8728
|
+
.tour-pill-go[data-short]::after { content: attr(data-short); font-size: 12px; }
|
|
8729
|
+
}
|
|
8342
8730
|
.tour-pill-x:hover { color: var(--text); background: color-mix(in srgb, var(--text) 10%, transparent); }
|
|
8343
8731
|
|
|
8344
8732
|
/* A hint: one line, once, beside the place it speaks of, in the top layer — a bubble, no beak. And
|
|
@@ -8353,7 +8741,32 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8353
8741
|
.tour-hint b { font-size: 14px; font-weight: 650; }
|
|
8354
8742
|
.tour-hint p { margin: 0; font-size: 13px; line-height: 1.45; color: var(--text-2); }
|
|
8355
8743
|
.tour-hint .tour-btn { justify-self: end; margin-top: 4px; }
|
|
8356
|
-
|
|
8744
|
+
/* Inside a window (a modal sheet, where a floating card could not be pressed): the same card as the
|
|
8745
|
+
floating hint, set into the window with its margins — not a tinted band glued to its edges
|
|
8746
|
+
(2026-10-17). Eyebrow, title and line on the left; its one key on the right, the hint's small key. */
|
|
8747
|
+
.tour-hint.inline {
|
|
8748
|
+
position: relative; inset: auto; z-index: auto; max-height: none; overflow: visible;
|
|
8749
|
+
margin: 12px 12px 4px; padding: 12px 14px 12px 16px; border-radius: 16px; text-align: left;
|
|
8750
|
+
grid-template-columns: minmax(0, 1fr) auto; column-gap: 16px; row-gap: 3px; align-items: center;
|
|
8751
|
+
background: color-mix(in srgb, var(--bg-2, var(--bg)) 94%, transparent);
|
|
8752
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--tour-acc) 32%, transparent), 0 8px 22px -14px rgba(0, 0, 0, .4);
|
|
8753
|
+
-webkit-backdrop-filter: none; backdrop-filter: none; animation: none;
|
|
8754
|
+
}
|
|
8755
|
+
.tour-hint.inline > :not(.tour-btn) { grid-column: 1; }
|
|
8756
|
+
.tour-hint.inline > .tour-btn { grid-column: 2; grid-row: 1 / span 3; align-self: center; justify-self: end; margin: 0; }
|
|
8757
|
+
:root[data-scheme="light"] .tour-hint.inline { background: #ffffff; box-shadow: 0 0 0 1px color-mix(in srgb, var(--tour-acc) 30%, transparent), 0 8px 22px -16px rgba(20, 30, 20, .3); }
|
|
8758
|
+
@media (max-width: 560px) { .tour-hint.inline { grid-template-columns: minmax(0, 1fr); } .tour-hint.inline > .tour-btn { grid-column: 1; grid-row: auto; margin-top: 6px; } }
|
|
8759
|
+
/* The way to a first-time hint whose place is out of view: a pill at the edge the place went past,
|
|
8760
|
+
with the hint's own title and which way to go. A click takes the page there (tour.js). */
|
|
8761
|
+
.tour-hint-away { --tour-acc: var(--s-acc, var(--acc, var(--phosphor))); position: fixed; inset: auto; left: 50%; translate: -50% 0; margin: 0; z-index: 2147483000; display: inline-flex; align-items: center; gap: 8px; max-width: min(420px, calc(100vw - 32px)); padding: 8px 14px 8px 10px; border: 0; border-radius: 999px; font: inherit; font-family: var(--read); color: var(--text); background: color-mix(in srgb, var(--bg-2, var(--bg)) 94%, transparent); -webkit-backdrop-filter: blur(22px) saturate(1.3); backdrop-filter: blur(22px) saturate(1.3); box-shadow: 0 0 0 1.5px color-mix(in srgb, var(--tour-acc) 70%, transparent), 0 14px 32px -14px rgba(0, 0, 0, .45); cursor: pointer; animation: tour-rise calc(360ms * var(--motion-scale, 1)) cubic-bezier(.2, .8, .2, 1) both; }
|
|
8762
|
+
.tour-hint-away[data-side="up"] { top: calc(env(safe-area-inset-top, 0px) + 84px); bottom: auto; }
|
|
8763
|
+
.tour-hint-away[data-side="down"] { bottom: calc(env(safe-area-inset-bottom, 0px) + 24px); top: auto; }
|
|
8764
|
+
.tour-hint-away svg { flex: none; width: var(--ico-sm, 15px); height: var(--ico-sm, 15px); color: var(--tour-acc); }
|
|
8765
|
+
.tour-hint-away[data-side="down"] svg { rotate: 180deg; }
|
|
8766
|
+
.tour-hint-away b { font-size: 13px; font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
|
|
8767
|
+
.tour-hint-away span { font-size: 12.5px; color: var(--text-2); white-space: nowrap; }
|
|
8768
|
+
.tour-hint-away:is(:hover, :focus-visible) { box-shadow: 0 0 0 2px var(--tour-acc), 0 14px 32px -14px rgba(0, 0, 0, .45); outline: none; }
|
|
8769
|
+
.tour-hint-away[hidden], .tour-hint[hidden] { display: none !important; }
|
|
8357
8770
|
|
|
8358
8771
|
@media (max-width: 720px) {
|
|
8359
8772
|
.tour-body { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); }
|
|
@@ -8362,7 +8775,7 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8362
8775
|
.tour-nav-name { overflow: visible; }
|
|
8363
8776
|
}
|
|
8364
8777
|
@media (prefers-reduced-motion: reduce) {
|
|
8365
|
-
dialog.tour-bonjour[open], .tour-bonjour-stage > *, .tour-bonjour-done > *, .tour-chapter, .ts-moved-row, .tour-hint, .tour-notice { animation: none; }
|
|
8778
|
+
dialog.tour-bonjour[open], .tour-bonjour-stage > *, .tour-bonjour-done > *, .tour-chapter, .ts-moved-row, .tour-hint, .tour-hint-away, .tour-notice { animation: none; }
|
|
8366
8779
|
.tour-scene *, .tour-scene *::after { animation: none !important; }
|
|
8367
8780
|
.ts-type b:first-child, .ts-arrive { opacity: 1; }
|
|
8368
8781
|
.ts-search em { width: 54%; }
|
|
@@ -8495,10 +8908,1313 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8495
8908
|
.ts-widgets .ts-card:nth-child(2) i { animation-delay: .15s; } .ts-widgets .ts-card:nth-child(3) i { animation-delay: .3s; } .ts-widgets .ts-card:nth-child(4) i { animation-delay: .45s; }
|
|
8496
8909
|
}
|
|
8497
8910
|
@keyframes ts-fill { from { background-size: 0 100%; background-repeat: no-repeat; } to { background-size: 100% 100%; background-repeat: no-repeat; } }
|
|
8498
|
-
.hint-card.in-modal::before { content: none; }
|
|
8499
8911
|
|
|
8500
8912
|
/* The tables of what was renamed or moved: a long new name wraps under itself, never past the box. */
|
|
8501
8913
|
.ts-moved-row .now { overflow-wrap: anywhere; line-height: 1.35; }
|
|
8502
8914
|
|
|
8503
8915
|
/* The welcome and its chapters are dialogs too: their own ring is not drawn around them. */
|
|
8504
8916
|
dialog.tour-bonjour:focus, dialog.tour-bonjour:focus-visible, dialog.whats-new:focus, dialog.whats-new:focus-visible { outline: none; }
|
|
8917
|
+
|
|
8918
|
+
/* ==========================================================================================
|
|
8919
|
+
RESPUESTAS SIN BURBUJA (2026-10-15). La forma de siempre es C · piezas con carril difuso (app.js
|
|
8920
|
+
pone data-reply="pieces" y data-reply-legible="lane"); las demás quedan para comparar, por atributos en
|
|
8921
|
+
<html> que pone el selector de prueba (app.js, ?reply=): data-reply = doc (A · regla bajo la
|
|
8922
|
+
cabecera), doc-inline (A · el avatar entra a la cabecera), pieces (C · plan en tarjeta),
|
|
8923
|
+
pieces-edge (C · tarjeta con el filo de cada agente). data-reply-legible = lane (vidrio difuso
|
|
8924
|
+
detrás de cada respuesta), column (una columna de lectura detrás de toda la conversación), halo
|
|
8925
|
+
(sin plano: un halo en las letras), stripe (franja que se desvanece a la derecha). El carril solo
|
|
8926
|
+
existe sobre un fondo de pantalla.
|
|
8927
|
+
========================================================================================== */
|
|
8928
|
+
:root[data-reply] #messages#messages .row.assistant { max-width: min(760px, 88%); }
|
|
8929
|
+
:root[data-reply] #messages#messages .row.assistant .bubble { background: transparent !important; box-shadow: none !important; border: 0 !important; border-radius: 0 !important; padding: 2px 0 0 !important; }
|
|
8930
|
+
:root[data-reply] #messages#messages .row.assistant .who { margin-left: 0; }
|
|
8931
|
+
:root[data-reply] #messages#messages .row.assistant .bubble-foot { margin-top: 6px; }
|
|
8932
|
+
:root[data-reply] #messages#messages .row.assistant .stamp > span { font-family: var(--mono); }
|
|
8933
|
+
/* A · regla bajo la cabecera */
|
|
8934
|
+
:root[data-reply="doc"] #messages#messages .row.assistant .who { padding-bottom: 7px; margin-bottom: 6px; border-bottom: 1px solid var(--line); }
|
|
8935
|
+
/* A · avatar en la cabecera: la fila es una sola columna y el agente se dice con un punto de su color. */
|
|
8936
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant { grid-template-columns: minmax(0, 1fr); }
|
|
8937
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant > .avatar { display: none; }
|
|
8938
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant .who { align-items: center; margin-bottom: 4px; }
|
|
8939
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant .who::before { content: ''; flex: none; width: 18px; height: 18px; border-radius: 50%; background: var(--agent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--agent) 18%, transparent); }
|
|
8940
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant .who > span:first-child { font-size: 11.5px; font-weight: 600; }
|
|
8941
|
+
/* C · lo accionable en tarjeta */
|
|
8942
|
+
:root[data-reply^="pieces"] #messages#messages .row.assistant .plan-card { border: 0; border-radius: 14px; padding: 10px 14px; background: var(--panel); box-shadow: var(--lift-1); }
|
|
8943
|
+
:root[data-reply="pieces-edge"] #messages#messages .row.assistant .plan-card li { list-style: none; margin: 6px 0 6px -18px; padding: 5px 0 5px 10px; border-left: 3px solid var(--agent); border-radius: 2px; }
|
|
8944
|
+
:root[data-reply="pieces-edge"] #messages#messages .row.assistant .plan-card { border-left: 3px solid var(--agent); }
|
|
8945
|
+
/* Los carriles, solo sobre un fondo de pantalla */
|
|
8946
|
+
:root[data-reply][data-reply-legible][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col { position: relative; isolation: isolate; }
|
|
8947
|
+
:root[data-reply][data-reply-legible="lane"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col::before,
|
|
8948
|
+
:root[data-reply][data-reply-legible="stripe"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col::before {
|
|
8949
|
+
content: ''; position: absolute; inset: -10px -18px -8px -14px; z-index: -1; border-radius: 22px;
|
|
8950
|
+
background: color-mix(in srgb, var(--bg) 62%, transparent);
|
|
8951
|
+
-webkit-backdrop-filter: blur(18px) saturate(1.15); backdrop-filter: blur(18px) saturate(1.15);
|
|
8952
|
+
-webkit-mask-image: radial-gradient(120% 140% at 40% 50%, #000 62%, transparent 100%); mask-image: radial-gradient(120% 140% at 40% 50%, #000 62%, transparent 100%);
|
|
8953
|
+
}
|
|
8954
|
+
:root[data-reply][data-reply-legible="stripe"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col::before {
|
|
8955
|
+
inset: -10px -60px -8px -14px; border-radius: 18px 0 0 18px; background: color-mix(in srgb, var(--bg) 70%, transparent);
|
|
8956
|
+
-webkit-mask-image: linear-gradient(90deg, #000 0, #000 68%, transparent 100%); mask-image: linear-gradient(90deg, #000 0, #000 68%, transparent 100%);
|
|
8957
|
+
}
|
|
8958
|
+
:root[data-reply][data-reply-legible="column"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .thread-inner {
|
|
8959
|
+
border-radius: 26px; background: color-mix(in srgb, var(--bg) 52%, transparent);
|
|
8960
|
+
-webkit-backdrop-filter: blur(20px) saturate(1.15); backdrop-filter: blur(20px) saturate(1.15);
|
|
8961
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 8%, transparent);
|
|
8962
|
+
padding-left: 18px; padding-right: 18px;
|
|
8963
|
+
}
|
|
8964
|
+
:root[data-reply][data-reply-legible="halo"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant :is(.bubble, .who) {
|
|
8965
|
+
text-shadow: 0 0 1px var(--bg), 0 0 6px var(--bg), 0 0 14px color-mix(in srgb, var(--bg) 85%, transparent), 0 0 24px color-mix(in srgb, var(--bg) 60%, transparent);
|
|
8966
|
+
}
|
|
8967
|
+
:root[data-reply][data-reply-legible="halo"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .bubble { font-weight: 400; }
|
|
8968
|
+
/* El selector de la prueba: solo existe con ?reply= (app.js, PRUEBA · respuestas sin burbuja). */
|
|
8969
|
+
.reply-lab { position: fixed; left: 50%; top: 66px; z-index: 90; transform: translateX(-50%); display: grid; gap: 4px; padding: 6px; border-radius: 14px; background: color-mix(in srgb, var(--panel) 90%, transparent); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); box-shadow: 0 0 0 .5px var(--line-2), 0 10px 28px -8px rgba(0, 0, 0, .45); font-family: var(--read); }
|
|
8970
|
+
.reply-lab .lab-row { display: flex; align-items: center; gap: 3px; }
|
|
8971
|
+
.reply-lab b { width: 58px; padding: 0 6px; font: 600 10px var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--text-3); }
|
|
8972
|
+
.reply-lab button { white-space: nowrap; height: 27px; padding: 0 10px; border: 0; border-radius: 9px; background: transparent; color: var(--text-2); font: 500 12px var(--read); cursor: pointer; }
|
|
8973
|
+
.reply-lab button:hover { background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); }
|
|
8974
|
+
.reply-lab button.on { background: var(--phosphor); color: var(--phosphor-ink); }
|
|
8975
|
+
.reply-lab button:disabled { opacity: .4; cursor: default; }
|
|
8976
|
+
.reply-lab .lab-sample { margin-left: auto; box-shadow: inset 0 0 0 1px var(--line-2); }
|
|
8977
|
+
|
|
8978
|
+
/* ==========================================================================================
|
|
8979
|
+
PIEZAS QUE SE USAN (2026-10-15): la petición de comandos y la tarjeta de @madre local, con la
|
|
8980
|
+
letra de lectura y botones que se sienten botones. Solo forma: lo que hacen no cambia.
|
|
8981
|
+
========================================================================================== */
|
|
8982
|
+
/* «@agente te pide correr» */
|
|
8983
|
+
#messages#messages .choice.run-request .choice-q { margin: 2px 2px 14px; font-family: var(--read); font-size: 16px; font-weight: 600; line-height: 1.4; }
|
|
8984
|
+
#messages#messages .choice.run-request .run-line { grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 10px 10px 10px 12px; border: 0 !important; border-radius: 12px; background: color-mix(in srgb, var(--text) 4%, transparent) !important; box-shadow: inset 0 0 0 1px var(--line) !important; }
|
|
8985
|
+
#messages#messages .choice.run-request .run-line + .run-line, #messages#messages .choice.run-request .run-why + .run-line { margin-top: 6px; }
|
|
8986
|
+
#messages#messages .choice.run-request .run-line:hover:not(:disabled) { background: color-mix(in srgb, var(--text) 7%, transparent) !important; box-shadow: inset 0 0 0 1px var(--line-2) !important; }
|
|
8987
|
+
#messages#messages .choice.run-request .run-line .choice-key { width: 22px; height: 22px; margin: 0; border: 0 !important; border-radius: 6px; background: color-mix(in srgb, var(--text) 7%, transparent) !important; box-shadow: none !important; color: var(--text-3); font-size: 11.5px; }
|
|
8988
|
+
#messages#messages .choice.run-request .run-line .choice-text { padding: 0 !important; border: 0 !important; background: transparent !important; box-shadow: none !important; color: var(--text) !important; font-family: var(--mono); font-size: 13px; line-height: 1.45; }
|
|
8989
|
+
#messages#messages .choice.run-request .run-line .choice-tag { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 11px; border: 0 !important; border-radius: 999px; background: color-mix(in srgb, var(--text) 9%, transparent) !important; box-shadow: none !important; color: var(--text) !important; font-family: var(--read); font-size: 12px; font-weight: 500; letter-spacing: 0; text-transform: lowercase; white-space: nowrap; }
|
|
8990
|
+
#messages#messages .choice.run-request .run-line .choice-tag::first-letter { text-transform: uppercase; }
|
|
8991
|
+
#messages#messages .choice.run-request .run-line:not(.ran):not(.failed):not(.refused):not(.running):not(.serving) .choice-tag { background: var(--agent, var(--phosphor)) !important; color: var(--agent-on, var(--phosphor-ink)) !important; }
|
|
8992
|
+
#messages#messages .choice.run-request .run-line.ran .choice-tag { background: color-mix(in srgb, var(--ok, var(--phosphor)) 15%, transparent) !important; color: var(--ok, var(--phosphor)) !important; }
|
|
8993
|
+
#messages#messages .choice.run-request .run-line.ran .choice-tag { position: relative; padding-left: 26px; }
|
|
8994
|
+
#messages#messages .choice.run-request .run-line.ran .choice-tag::before { content: '✓'; position: absolute; left: 11px; text-transform: none; }
|
|
8995
|
+
#messages#messages .choice.run-request .run-line.failed .choice-tag { background: color-mix(in srgb, var(--crit) 15%, transparent) !important; color: var(--crit) !important; }
|
|
8996
|
+
#messages#messages .choice.run-request .run-line.refused { opacity: 1; }
|
|
8997
|
+
#messages#messages .choice.run-request .run-line.refused .choice-text { color: var(--text-3) !important; }
|
|
8998
|
+
#messages#messages .choice.run-request .run-line.refused .choice-tag { background: transparent !important; box-shadow: inset 0 0 0 1px var(--line-2) !important; color: var(--text-3) !important; }
|
|
8999
|
+
#messages#messages .choice.run-request .run-why { margin: 6px 0 0 46px; font-family: var(--read); font-size: 12.5px; line-height: 1.45; letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
9000
|
+
#messages#messages .choice.run-request .run-summary { display: inline-flex; align-items: center; margin: 12px 2px 0; padding: 4px 11px; border-radius: 999px; background: color-mix(in srgb, var(--text) 6%, transparent); font-family: var(--read); font-size: 12.5px; letter-spacing: 0; color: var(--text-2); }
|
|
9001
|
+
#messages#messages .choice.run-request.returned .run-summary { background: color-mix(in srgb, var(--ok, var(--phosphor)) 13%, transparent); color: var(--ok, var(--phosphor)); }
|
|
9002
|
+
#messages#messages .choice.run-request :is(.run-all, .run-back) { height: 30px; padding: 0 13px; border: 0 !important; border-radius: 9px; background: color-mix(in srgb, var(--text) 8%, transparent) !important; color: var(--text) !important; font-family: var(--read); font-size: 12.5px; font-weight: 500; letter-spacing: 0; text-transform: none; }
|
|
9003
|
+
#messages#messages .choice.run-request .choice-foot { margin: 14px 2px 0; font-family: var(--read); font-size: 12px; line-height: 1.5; letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
9004
|
+
/* @madre local: una tarjeta que se lee, a la izquierda, y su botón como el de las demás. */
|
|
9005
|
+
#messages#messages .system.local-model { justify-items: start; gap: 6px; padding: 14px 16px; text-align: left; }
|
|
9006
|
+
#messages#messages .system.local-model .head { display: inline-flex; align-items: center; gap: 6px; font-family: var(--mono); font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); }
|
|
9007
|
+
#messages#messages .system.local-model .head .who { padding: 2px 8px; border-radius: 999px; background: color-mix(in srgb, var(--agent, var(--phosphor)) 14%, transparent); color: var(--agent, var(--phosphor)); }
|
|
9008
|
+
#messages#messages .system.local-model .says { max-width: 62ch; font-family: var(--read); font-size: 14px; line-height: 1.5; letter-spacing: 0; text-transform: none; color: var(--text); text-align: left; }
|
|
9009
|
+
#messages#messages .system.local-model .says.small { font-size: 12.5px; color: var(--text-3); }
|
|
9010
|
+
#messages#messages .system.local-model .acts { justify-content: flex-start; margin-top: 4px; }
|
|
9011
|
+
#messages#messages .system.local-model .acts button { height: 30px; padding: 0 14px; border: 0 !important; border-radius: 9px; background: var(--phosphor) !important; box-shadow: none !important; color: var(--phosphor-ink) !important; font-family: var(--read); font-size: 12.5px; font-weight: 600; letter-spacing: 0; text-transform: lowercase; }
|
|
9012
|
+
#messages#messages .system.local-model .acts button::first-letter { text-transform: uppercase; }
|
|
9013
|
+
#messages#messages .system.local-model .acts button + button { background: color-mix(in srgb, var(--text) 8%, transparent) !important; color: var(--text) !important; }
|
|
9014
|
+
.reply-lab .lab-code { margin-left: auto; padding: 4px 10px; border-radius: 8px; background: color-mix(in srgb, var(--phosphor) 16%, transparent); color: var(--phosphor); font: 600 12px var(--mono); letter-spacing: .08em; }
|
|
9015
|
+
|
|
9016
|
+
/* «#3 EDITAR concedido»: un estado pequeño en el color de su modo, no una franja punteada. */
|
|
9017
|
+
#messages#messages .mode-ask.settled { display: inline-flex !important; grid-template-columns: none; justify-self: start; align-self: flex-start; width: fit-content !important; max-width: 100%; margin-left: 0 !important; margin-right: auto !important; padding: 5px 12px 5px 10px; border: 0 !important; border-radius: 999px; background: color-mix(in srgb, var(--mode-c, var(--ok, var(--phosphor))) 13%, transparent) !important; box-shadow: none !important; }
|
|
9018
|
+
#messages#messages .mode-ask.settled .mode-what { display: inline-flex; align-items: center; gap: 7px; font-family: var(--read); font-size: 12.5px; font-weight: 500; letter-spacing: 0; color: var(--mode-c, var(--ok, var(--phosphor))); }
|
|
9019
|
+
#messages#messages .mode-ask.settled .mode-what::before { content: '✓'; font-weight: 700; }
|
|
9020
|
+
#messages#messages .mode-ask.settled[data-mode="1"] { --mode-c: var(--mode-1); }
|
|
9021
|
+
#messages#messages .mode-ask.settled[data-mode="2"] { --mode-c: var(--mode-2); }
|
|
9022
|
+
#messages#messages .mode-ask.settled[data-mode="3"] { --mode-c: var(--mode-3); }
|
|
9023
|
+
#messages#messages .mode-ask.settled[data-mode="4"] { --mode-c: var(--mode-4); }
|
|
9024
|
+
|
|
9025
|
+
/* ==========================================================================================
|
|
9026
|
+
PRUEBA · las tarjetas de /run en cuatro formas (2026-10-15), por data-term en <html>:
|
|
9027
|
+
line (a), window (b), pill (c), step (d). Sin el atributo, la de siempre.
|
|
9028
|
+
========================================================================================== */
|
|
9029
|
+
/* a · línea: el comando primero, el estado y quién a la derecha, la última línea debajo. */
|
|
9030
|
+
:root[data-term="line"] #messages#messages .command-card.terminal { border-radius: 14px; }
|
|
9031
|
+
:root[data-term="line"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
9032
|
+
:root[data-term="line"] #messages .command-card.terminal .term-head { gap: 10px; padding: 10px 12px; }
|
|
9033
|
+
:root[data-term="line"] #messages .command-card.terminal .term-head .chev-icon { order: -1; }
|
|
9034
|
+
:root[data-term="line"] #messages .command-card.terminal .term-line { font-size: 13px; }
|
|
9035
|
+
:root[data-term="line"] #messages .command-card.terminal .term-status { font-family: var(--read); font-size: 12px; padding: 3px 10px; }
|
|
9036
|
+
:root[data-term="line"] #messages .command-card.terminal .term-who { font-family: var(--read); font-size: 12px; }
|
|
9037
|
+
:root[data-term="line"] #messages .command-card.terminal .term-peek { padding: 0 12px 10px 38px; font-size: 12px; }
|
|
9038
|
+
:root[data-term="line"] #messages .command-card.terminal .term-peek::before { content: '→ '; color: var(--text-3); }
|
|
9039
|
+
/* b · ventana: una terminal pequeña, oscura en los dos temas, con su salida a la vista. */
|
|
9040
|
+
:root[data-term="window"] #messages#messages .command-card.terminal { overflow: hidden; border-radius: 14px; border: 0 !important; background: #0d100d !important; box-shadow: 0 0 0 .5px rgba(255, 255, 255, .1), var(--lift-1) !important; color: #e9ede6; }
|
|
9041
|
+
:root[data-term="window"] #messages .command-card.terminal .term-head { padding: 9px 12px; background: rgba(255, 255, 255, .05); border-bottom: 1px solid rgba(255, 255, 255, .07); }
|
|
9042
|
+
:root[data-term="window"] #messages .command-card.terminal .term-head::before { content: ''; flex: none; width: 34px; height: 10px; background: radial-gradient(circle at 5px 5px, #ff5f57 4px, transparent 4.5px), radial-gradient(circle at 17px 5px, #febc2e 4px, transparent 4.5px), radial-gradient(circle at 29px 5px, #28c840 4px, transparent 4.5px); opacity: .85; }
|
|
9043
|
+
:root[data-term="window"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
9044
|
+
:root[data-term="window"] #messages .command-card.terminal .term-line { color: #e9ede6; font-size: 12.5px; }
|
|
9045
|
+
:root[data-term="window"] #messages .command-card.terminal .term-who { color: #9aa197; }
|
|
9046
|
+
:root[data-term="window"] #messages .command-card.terminal .term-peek { margin: 0; padding: 10px 14px 12px; font-size: 12px; color: #b8c2b4; white-space: pre-wrap; }
|
|
9047
|
+
:root[data-term="window"] #messages .command-card.terminal .term-peek::before { content: '› '; color: #28c840; }
|
|
9048
|
+
:root[data-term="window"] #messages .command-card.terminal pre { background: transparent; border-top-color: rgba(255, 255, 255, .07); color: #e9ede6; }
|
|
9049
|
+
/* c · píldora: como las llamadas a herramientas de los chats, una línea del ancho de lo que dice. */
|
|
9050
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal:not(.open) { justify-self: start; width: fit-content; max-width: 100%; border-radius: 999px; }
|
|
9051
|
+
:root[data-term="pill"] #messages .command-card.terminal:not(.open) .term-peek, :root[data-term="pill"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
9052
|
+
:root[data-term="pill"] #messages .command-card.terminal:not(.open) .term-head { padding: 6px 12px 6px 8px; gap: 8px; }
|
|
9053
|
+
:root[data-term="pill"] #messages .command-card.terminal .term-status { order: -1; font-family: var(--read); font-size: 12px; }
|
|
9054
|
+
:root[data-term="pill"] #messages .command-card.terminal .term-line { font-size: 12.5px; }
|
|
9055
|
+
:root[data-term="pill"] #messages .command-card.terminal .term-who { font-family: var(--read); font-size: 12px; }
|
|
9056
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal.open { border-radius: 14px; }
|
|
9057
|
+
/* d · paso: sin tarjeta; un punto de estado en un hilo, el comando y debajo quién, cuánto y qué dijo. */
|
|
9058
|
+
:root[data-term="step"] #messages#messages .command-card.terminal { position: relative; padding-left: 26px; border: 0 !important; background: transparent !important; box-shadow: none !important; }
|
|
9059
|
+
:root[data-term="step"] #messages#messages .command-card.terminal::before { content: ''; position: absolute; left: 7px; top: 0; bottom: 0; width: 2px; border-radius: 2px; background: color-mix(in srgb, var(--text) 12%, transparent); }
|
|
9060
|
+
:root[data-term="step"] #messages#messages .command-card.terminal::after { content: '✓'; position: absolute; left: 0; top: 9px; display: grid; place-items: center; width: 16px; height: 16px; border-radius: 50%; background: var(--ok, var(--phosphor)); color: var(--bg); font: 700 10px var(--read); }
|
|
9061
|
+
:root[data-term="step"] #messages#messages .command-card.terminal.failed::after { content: '✕'; background: var(--crit); }
|
|
9062
|
+
:root[data-term="step"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
9063
|
+
:root[data-term="step"] #messages .command-card.terminal .term-head { flex-wrap: wrap; padding: 6px 0; row-gap: 2px; }
|
|
9064
|
+
:root[data-term="step"] #messages .command-card.terminal .term-line { flex: 1 1 calc(100% - 40px); font-size: 13px; }
|
|
9065
|
+
:root[data-term="step"] #messages .command-card.terminal .term-head .chev-icon { order: 0; }
|
|
9066
|
+
:root[data-term="step"] #messages .command-card.terminal .term-status { order: 2; padding: 0; background: none !important; font-family: var(--read); font-size: 12px; }
|
|
9067
|
+
:root[data-term="step"] #messages .command-card.terminal .term-who { order: 3; font-family: var(--read); font-size: 12px; }
|
|
9068
|
+
:root[data-term="step"] #messages .command-card.terminal .term-who::before { content: '· '; color: var(--text-3); }
|
|
9069
|
+
:root[data-term="step"] #messages .command-card.terminal .term-peek { padding: 0 0 6px; font-size: 12px; }
|
|
9070
|
+
:root[data-term="step"] #messages .command-card.terminal pre { border: 0; border-radius: 10px; margin-bottom: 6px; }
|
|
9071
|
+
:root[data-term="step"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .command-card.terminal { padding-right: 12px; border-radius: 0 14px 14px 0; background: color-mix(in srgb, var(--bg) 62%, transparent) !important; -webkit-backdrop-filter: blur(18px) saturate(1.15); backdrop-filter: blur(18px) saturate(1.15); }
|
|
9072
|
+
#messages#messages .mode-ask.settled { background: color-mix(in srgb, var(--mode-c, var(--phosphor)) 16%, color-mix(in srgb, var(--bg) 78%, transparent)) !important; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mode-c, var(--phosphor)) 45%, transparent) !important; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); }
|
|
9073
|
+
#messages#messages .mode-ask.settled .mode-what { color: color-mix(in srgb, var(--mode-c, var(--phosphor)) 70%, var(--text)); }
|
|
9074
|
+
|
|
9075
|
+
/* ==========================================================================================
|
|
9076
|
+
LABORATORIO DEL CHAT (2026-10-15): el panel de ?lab (app.js) y las cinco formas de cada
|
|
9077
|
+
elemento, por data-labNN en <html>. A es siempre como se ve hoy.
|
|
9078
|
+
========================================================================================== */
|
|
9079
|
+
.lab-panel { position: fixed; top: 64px; right: 12px; bottom: 12px; z-index: 95; width: 300px; display: flex; flex-direction: column; border-radius: 16px; background: color-mix(in srgb, var(--panel) 92%, transparent); -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); box-shadow: 0 0 0 .5px var(--line-2), 0 18px 40px -12px rgba(0, 0, 0, .5); font-family: var(--read); }
|
|
9080
|
+
.lab-panel.folded { bottom: auto; width: auto; }
|
|
9081
|
+
.lab-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--line); }
|
|
9082
|
+
.lab-head b { font: 600 13px var(--read); }
|
|
9083
|
+
.lab-fold { width: 26px; height: 26px; border: 0; border-radius: 8px; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); cursor: pointer; }
|
|
9084
|
+
.lab-code { margin-left: auto; padding: 4px 9px; border-radius: 8px; background: color-mix(in srgb, var(--phosphor) 16%, transparent); color: var(--phosphor); font: 600 12px var(--mono); letter-spacing: .06em; }
|
|
9085
|
+
.lab-copy, .lab-again { height: 28px; padding: 0 11px; border: 0; border-radius: 8px; background: var(--phosphor); color: var(--phosphor-ink); font: 600 12px var(--read); cursor: pointer; }
|
|
9086
|
+
.lab-copy { flex: 1 1 100%; }
|
|
9087
|
+
.lab-list { flex: 1; overflow: auto; padding: 6px 8px; display: grid; gap: 2px; align-content: start; }
|
|
9088
|
+
.lab-row { display: grid; gap: 3px; padding: 7px 6px; border-radius: 10px; }
|
|
9089
|
+
.lab-row:hover { background: color-mix(in srgb, var(--text) 4%, transparent); }
|
|
9090
|
+
.lab-top { display: flex; align-items: center; gap: 8px; }
|
|
9091
|
+
.lab-n { font: 600 10.5px var(--mono); color: var(--text-3); }
|
|
9092
|
+
.lab-name { flex: 1; min-width: 0; font-size: 12.5px; font-weight: 600; color: var(--text); }
|
|
9093
|
+
.lab-keys { display: inline-flex; gap: 2px; padding: 2px; border-radius: 8px; background: color-mix(in srgb, var(--text) 6%, transparent); }
|
|
9094
|
+
.lab-keys button { width: 22px; height: 22px; border: 0; border-radius: 6px; background: none; color: var(--text-2); font: 600 11px var(--mono); cursor: pointer; }
|
|
9095
|
+
.lab-keys button.on { background: var(--phosphor); color: var(--phosphor-ink); }
|
|
9096
|
+
.lab-desc { padding-left: 26px; font-size: 11.5px; color: var(--text-3); }
|
|
9097
|
+
.lab-again { margin: 8px 12px 12px; background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text); }
|
|
9098
|
+
:root[data-lab="on"] .shell { padding-right: 312px; }
|
|
9099
|
+
@media (max-width: 900px) { :root[data-lab="on"] .shell { padding-right: 0; } .lab-panel { width: 260px; } }
|
|
9100
|
+
/* 01 · Mensaje del humano */
|
|
9101
|
+
:root[data-lab01="B"] #messages#messages .row.user .bubble { background: var(--panel-2) !important; color: var(--text) !important; border-radius: 20px !important; box-shadow: none !important; }
|
|
9102
|
+
:root[data-lab01="C"] #messages#messages .row.user .bubble { background: transparent !important; color: var(--text) !important; box-shadow: none !important; padding: 0 !important; text-align: right; }
|
|
9103
|
+
:root[data-lab01="D"] #messages#messages .row.user { justify-self: stretch; max-width: 100%; }
|
|
9104
|
+
:root[data-lab01="D"] #messages#messages .row.user .col { justify-items: stretch; }
|
|
9105
|
+
:root[data-lab01="D"] #messages#messages .row.user .bubble { background: var(--panel) !important; color: var(--text) !important; border-radius: 14px !important; box-shadow: 0 0 0 1px var(--line-2) !important; text-align: left; }
|
|
9106
|
+
:root[data-lab01="D"] #messages#messages .row.user .who { justify-content: flex-start; }
|
|
9107
|
+
:root[data-lab01="E"] #messages#messages .row.user .bubble { background: var(--panel-2) !important; color: var(--text) !important; border-radius: 20px !important; box-shadow: inset 0 0 0 1px var(--line) !important; }
|
|
9108
|
+
:root[data-lab01="E"] #messages#messages .row.user .stamp .to { order: -1; font-size: 12px; color: var(--text); }
|
|
9109
|
+
/* 02 · Adjuntos */
|
|
9110
|
+
:root[data-lab02="B"] #messages .row.user .files { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
9111
|
+
:root[data-lab02="B"] #messages .row.user .file-tile { display: inline-flex; align-items: center; gap: 6px; width: auto; height: 28px; padding: 0 10px; border: 0; border-radius: 999px; background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
9112
|
+
:root[data-lab02="C"] #messages .row.user .file-tile { display: inline-grid; grid-template-columns: 30px auto; align-items: center; gap: 10px; width: auto; height: auto; padding: 8px 12px 8px 8px; border: 0; border-radius: 12px; background: var(--panel); box-shadow: var(--lift-1); color: var(--text); }
|
|
9113
|
+
:root[data-lab02="C"] #messages .row.user .file-tile .kind { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
9114
|
+
:root[data-lab02="D"] #messages .row.user .files { display: flex; flex-wrap: wrap; gap: 4px 10px; }
|
|
9115
|
+
:root[data-lab02="D"] #messages .row.user .file-tile { width: auto; height: auto; padding: 0; border: 0; background: none; color: inherit; opacity: .75; font-size: 12px; }
|
|
9116
|
+
:root[data-lab02="D"] #messages .row.user .file-tile .kind { display: none; }
|
|
9117
|
+
:root[data-lab02="D"] #messages .row.user .file-tile .name::before { content: '📎 '; }
|
|
9118
|
+
:root[data-lab02="E"] #messages .row.user .bubble { display: flex; flex-direction: column; }
|
|
9119
|
+
:root[data-lab02="E"] #messages .row.user .files { order: -1; margin: 0 0 8px; }
|
|
9120
|
+
/* 03 · Pensando */
|
|
9121
|
+
:root[data-lab03="B"] #messages .row.thinking .bubble > i { display: none; }
|
|
9122
|
+
:root[data-lab03="B"] #messages .row.thinking .bubble { background: transparent !important; box-shadow: none !important; }
|
|
9123
|
+
:root[data-lab03="B"] #messages .row.thinking .bubble::before { content: 'Pensando…'; background: linear-gradient(90deg, var(--text-3) 0%, var(--text) 50%, var(--text-3) 100%); background-size: 200% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: lab-shimmer 2.2s linear infinite; font-weight: 500; }
|
|
9124
|
+
@keyframes lab-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
|
|
9125
|
+
:root[data-lab03="C"] #messages .row.thinking .bubble { background: transparent !important; box-shadow: none !important; }
|
|
9126
|
+
:root[data-lab03="C"] #messages .row.thinking .bubble > i { display: none; }
|
|
9127
|
+
:root[data-lab03="C"] #messages .row.thinking > .avatar { animation: lab-pulse 1.4s ease-in-out infinite; }
|
|
9128
|
+
@keyframes lab-pulse { 0%, 100% { transform: scale(.92); } 50% { transform: scale(1.08); } }
|
|
9129
|
+
:root[data-lab03="D"] #messages .row.thinking .bubble > i { display: none; }
|
|
9130
|
+
:root[data-lab03="D"] #messages .row.thinking .bubble { width: 140px; height: 4px; padding: 0 !important; border-radius: 4px !important; overflow: hidden; background: color-mix(in srgb, var(--text) 10%, transparent) !important; box-shadow: none !important; }
|
|
9131
|
+
:root[data-lab03="D"] #messages .row.thinking .bubble::before { content: ''; display: block; width: 40%; height: 100%; border-radius: inherit; background: var(--agent, var(--phosphor)); animation: lab-bar 1.4s ease-in-out infinite; }
|
|
9132
|
+
@keyframes lab-bar { 0% { transform: translateX(-100%); } 100% { transform: translateX(260%); } }
|
|
9133
|
+
:root[data-lab03="E"] #messages .row.thinking .bubble > i { display: none; }
|
|
9134
|
+
:root[data-lab03="E"] #messages .row.thinking .bubble { display: inline-flex !important; align-items: center; gap: 6px; padding: 4px 12px !important; border-radius: 999px !important; background: color-mix(in srgb, var(--agent, var(--text)) 12%, transparent) !important; box-shadow: none !important; font-size: 12.5px; }
|
|
9135
|
+
:root[data-lab03="E"] #messages .row.thinking .bubble::before { content: 'pensando'; color: var(--agent, var(--text)); font-weight: 500; }
|
|
9136
|
+
/* 04 · Cabecera del agente */
|
|
9137
|
+
:root[data-lab04="B"] #messages#messages .row.assistant .who > span:first-child { font-family: var(--read); font-size: 14px; font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--text); }
|
|
9138
|
+
:root[data-lab04="B"] #messages#messages .row.assistant .who .badge:not(.mode) { background: none !important; padding: 0; font-family: var(--read); letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
9139
|
+
:root[data-lab04="C"] #messages#messages .row.assistant .who > span:first-child { padding: 3px 10px; border-radius: 999px; background: color-mix(in srgb, var(--agent) 15%, transparent); font-weight: 600; }
|
|
9140
|
+
:root[data-lab04="D"] #messages#messages .row.assistant .who > :not(:first-child) { opacity: 0; transition: opacity .2s; }
|
|
9141
|
+
:root[data-lab04="D"] #messages#messages .row.assistant:hover .who > :not(:first-child) { opacity: 1; }
|
|
9142
|
+
:root[data-lab04="E"] #messages#messages .row.assistant { grid-template-columns: minmax(0, 1fr); }
|
|
9143
|
+
:root[data-lab04="E"] #messages#messages .row.assistant > .avatar { display: none; }
|
|
9144
|
+
:root[data-lab04="E"] #messages#messages .row.assistant .who { align-items: center; }
|
|
9145
|
+
:root[data-lab04="E"] #messages#messages .row.assistant .who::before { content: ''; flex: none; width: 18px; height: 18px; border-radius: 50%; background: var(--agent); }
|
|
9146
|
+
/* 05 · Cuerpo de la respuesta (hoy: prosa libre con carril) */
|
|
9147
|
+
:root[data-lab05="B"] #messages#messages .row.assistant .bubble { background: var(--panel) !important; box-shadow: var(--lift-1) !important; border-radius: 20px 20px 20px 6px !important; padding: 12px 16px !important; }
|
|
9148
|
+
:root[data-lab05="C"] #messages#messages .row.assistant .bubble { background: var(--panel) !important; box-shadow: 0 0 0 1px var(--line-2) !important; border-radius: 14px !important; padding: 12px 16px !important; }
|
|
9149
|
+
:root[data-lab05="D"] #messages#messages .row.assistant .bubble { padding: 4px 0 4px 14px !important; border-left: 3px solid var(--agent) !important; }
|
|
9150
|
+
:root[data-lab05="E"] #messages#messages .row.assistant .who { padding-bottom: 7px; margin-bottom: 6px; border-bottom: 1px solid var(--line); }
|
|
9151
|
+
:root[data-lab05]:not([data-lab05="A"]) #messages#messages .row.assistant .col::before { display: none; }
|
|
9152
|
+
:root[data-lab05="D"] #messages#messages .row.assistant .col::before, :root[data-lab05="E"] #messages#messages .row.assistant .col::before { display: block; }
|
|
9153
|
+
/* 06 · Memoria citada */
|
|
9154
|
+
:root[data-lab06="B"] #messages .cite { font-family: var(--mono); font-size: 10px; vertical-align: super; padding: 1px 4px; border-radius: 4px; background: color-mix(in srgb, var(--madre-green) 16%, transparent); color: var(--madre-green); }
|
|
9155
|
+
:root[data-lab06="C"] #messages .cite { display: inline-flex; padding: 1px 8px; border-radius: 999px; background: color-mix(in srgb, var(--madre-green) 14%, transparent); color: var(--madre-green); font: 500 11.5px var(--mono); }
|
|
9156
|
+
:root[data-lab06="D"] #messages .cite { text-decoration: underline dotted var(--madre-green); text-decoration-thickness: 2px; text-underline-offset: 4px; }
|
|
9157
|
+
:root[data-lab06="E"] #messages .cite { font-size: .8em; color: var(--text-3); }
|
|
9158
|
+
/* 07 · Plan */
|
|
9159
|
+
:root[data-lab07="B"] #messages .plan-card ol { list-style: none; padding-left: 0; }
|
|
9160
|
+
:root[data-lab07="B"] #messages .plan-card li { position: relative; padding: 6px 0 6px 26px; }
|
|
9161
|
+
:root[data-lab07="B"] #messages .plan-card li::before { content: ''; position: absolute; left: 0; top: 8px; width: 16px; height: 16px; border-radius: 5px; box-shadow: inset 0 0 0 1.5px var(--line-2); }
|
|
9162
|
+
:root[data-lab07="C"] #messages .plan-card ol { padding-left: 22px; }
|
|
9163
|
+
:root[data-lab07="C"] #messages .plan-card li { padding: 8px 0; border-top: 1px dashed var(--line-2); }
|
|
9164
|
+
:root[data-lab07="C"] #messages .plan-card li:first-child { border-top: 0; }
|
|
9165
|
+
:root[data-lab07="D"] #messages .plan-card ol { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 0; list-style: none; }
|
|
9166
|
+
:root[data-lab07="D"] #messages .plan-card li { display: grid; gap: 4px; margin: 0; padding: 10px 12px; border-radius: 12px; background: color-mix(in srgb, var(--agent) 10%, transparent); }
|
|
9167
|
+
:root[data-lab07="E"] #messages .plan-card ol { list-style: none; padding-left: 0; }
|
|
9168
|
+
:root[data-lab07="E"] #messages .plan-card li { position: relative; margin: 0; padding: 6px 0 10px 24px; }
|
|
9169
|
+
:root[data-lab07="E"] #messages .plan-card li::before { content: ''; position: absolute; left: 0; top: 9px; width: 12px; height: 12px; border-radius: 50%; background: var(--agent); }
|
|
9170
|
+
:root[data-lab07="E"] #messages .plan-card li:not(:last-child)::after { content: ''; position: absolute; left: 5px; top: 23px; bottom: -2px; width: 2px; background: var(--line-2); }
|
|
9171
|
+
/* 08 · Bloque de código */
|
|
9172
|
+
:root[data-lab08="B"] #messages .codeblock { overflow: hidden; border: 0 !important; border-radius: 12px; background: var(--panel) !important; box-shadow: var(--lift-1); }
|
|
9173
|
+
:root[data-lab08="B"] #messages .codeblock .lang, :root[data-lab08="B"] #messages .codeblock .copy { font-family: var(--read); letter-spacing: 0; text-transform: none; }
|
|
9174
|
+
:root[data-lab08="C"] #messages .codeblock .lang { display: none; }
|
|
9175
|
+
:root[data-lab08="C"] #messages .codeblock .copy { opacity: 0; transition: opacity .2s; }
|
|
9176
|
+
:root[data-lab08="C"] #messages .codeblock:hover .copy { opacity: 1; }
|
|
9177
|
+
:root[data-lab08="C"] #messages .codeblock { border: 0 !important; background: color-mix(in srgb, var(--text) 5%, transparent) !important; }
|
|
9178
|
+
:root[data-lab08="D"] #messages .codeblock { border: 0 !important; background: #0d100d !important; color: #e9ede6; }
|
|
9179
|
+
:root[data-lab08="D"] #messages .codeblock :is(pre, code, .lang, .copy) { color: #e9ede6 !important; background: transparent !important; }
|
|
9180
|
+
:root[data-lab08="E"] #messages .codeblock pre { max-height: 7.5em; overflow: hidden; -webkit-mask-image: linear-gradient(#000 55%, transparent); mask-image: linear-gradient(#000 55%, transparent); }
|
|
9181
|
+
/* 09 · Pie de la respuesta */
|
|
9182
|
+
:root[data-lab09="B"] #messages .row.assistant .bubble-foot .stamp { display: none; }
|
|
9183
|
+
:root[data-lab09="B"] #messages .row.assistant .bubble-foot { opacity: 0; transition: opacity .2s; }
|
|
9184
|
+
:root[data-lab09="B"] #messages .row.assistant:hover .bubble-foot { opacity: 1; }
|
|
9185
|
+
:root[data-lab09="C"] #messages .row.assistant .bubble-foot .stamp { padding: 3px 10px; border-radius: 999px; background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
9186
|
+
:root[data-lab09="D"] #messages .row.assistant .bubble-actions .act { border-radius: 8px; background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
9187
|
+
:root[data-lab09="E"] #messages .row.assistant .bubble-foot .stamp { opacity: .45; transition: opacity .2s; }
|
|
9188
|
+
:root[data-lab09="E"] #messages .row.assistant:hover .bubble-foot .stamp { opacity: 1; }
|
|
9189
|
+
/* 10 · Elección */
|
|
9190
|
+
:root[data-lab10="B"] #messages .choice:not(.run-request) .choice-list { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
9191
|
+
:root[data-lab10="B"] #messages .choice:not(.run-request) .choice-option { width: auto; display: inline-flex; padding: 7px 14px; border-radius: 999px; }
|
|
9192
|
+
:root[data-lab10="B"] #messages .choice:not(.run-request) .choice-key { display: none; }
|
|
9193
|
+
:root[data-lab10="C"] #messages .choice:not(.run-request) .choice-option { border: 0; border-top: 1px solid var(--line); border-radius: 0; background: none; }
|
|
9194
|
+
:root[data-lab10="D"] #messages .choice:not(.run-request) .choice-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
|
|
9195
|
+
:root[data-lab10="D"] #messages .choice:not(.run-request) .choice-option { grid-template-columns: 1fr; align-content: start; min-height: 74px; }
|
|
9196
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) { background: transparent !important; box-shadow: none !important; border: 0 !important; padding: 0 !important; }
|
|
9197
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) .choice-list { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
9198
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) .choice-option { width: auto; padding: 7px 14px; border-radius: 9px; }
|
|
9199
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) .choice-option.recommended { background: var(--agent, var(--phosphor)); color: var(--agent-on, var(--phosphor-ink)); }
|
|
9200
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) :is(.choice-key, .choice-kicker, .choice-foot) { display: none; }
|
|
9201
|
+
/* 11 · Petición de permiso */
|
|
9202
|
+
:root[data-lab11="B"] #messages .mode-ask:not(.settled) { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
|
|
9203
|
+
:root[data-lab11="B"] #messages .mode-ask:not(.settled) .mode-why { display: none; }
|
|
9204
|
+
:root[data-lab11="C"] #messages .mode-ask:not(.settled) { border: 0 !important; border-left: 4px solid var(--mode-2) !important; border-radius: 6px 14px 14px 6px !important; background: var(--panel) !important; }
|
|
9205
|
+
:root[data-lab11="D"] #messages .mode-ask:not(.settled) { position: sticky; bottom: 8px; z-index: 5; box-shadow: 0 10px 28px -8px rgba(0, 0, 0, .45) !important; }
|
|
9206
|
+
:root[data-lab11="E"] #messages .mode-ask:not(.settled) { background: transparent !important; border: 1px solid var(--line-2) !important; box-shadow: none !important; }
|
|
9207
|
+
/* 12 · Permiso concedido */
|
|
9208
|
+
:root[data-lab12="B"] #messages#messages .mode-ask.settled { align-self: stretch; width: auto !important; background: none !important; box-shadow: none !important; gap: 10px; }
|
|
9209
|
+
:root[data-lab12="B"] #messages#messages .mode-ask.settled::before, :root[data-lab12="B"] #messages#messages .mode-ask.settled::after { content: ''; flex: 1; align-self: center; height: 1px; background: var(--line-2); }
|
|
9210
|
+
:root[data-lab12="C"] #messages#messages .mode-ask.settled { align-self: center; background: none !important; box-shadow: none !important; }
|
|
9211
|
+
:root[data-lab12="C"] #messages#messages .mode-ask.settled .mode-what { color: var(--text-3); font-weight: 400; }
|
|
9212
|
+
:root[data-lab12="C"] #messages#messages .mode-ask.settled .mode-what::before { content: none; }
|
|
9213
|
+
:root[data-lab12="D"] #messages#messages .mode-ask.settled .mode-what::before { content: '🔓'; }
|
|
9214
|
+
:root[data-lab12="E"] #messages#messages .mode-ask.settled { background: none !important; box-shadow: none !important; }
|
|
9215
|
+
:root[data-lab12="E"] #messages#messages .mode-ask.settled .mode-what { color: var(--text-2); font-weight: 400; }
|
|
9216
|
+
:root[data-lab12="E"] #messages#messages .mode-ask.settled .mode-what::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--mode-c, var(--phosphor)); }
|
|
9217
|
+
/* 13 · Petición de comandos */
|
|
9218
|
+
:root[data-lab13="B"] #messages#messages .choice.run-request .run-line { background: transparent !important; box-shadow: none !important; border-radius: 0; border-top: 1px solid var(--line) !important; }
|
|
9219
|
+
:root[data-lab13="C"] #messages#messages .choice.run-request .run-line { background: #0d100d !important; }
|
|
9220
|
+
:root[data-lab13="C"] #messages#messages .choice.run-request .run-line .choice-text { color: #e9ede6 !important; }
|
|
9221
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .choice-list { counter-reset: lab-run; }
|
|
9222
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .run-line { counter-increment: lab-run; }
|
|
9223
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .run-line .choice-key { font-size: 0 !important; }
|
|
9224
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .run-line .choice-key::after { content: counter(lab-run); font: 600 11.5px var(--mono); color: var(--text-2); }
|
|
9225
|
+
:root[data-lab13="E"] #messages#messages .choice.run-request .run-line:not(.refused):not(:hover) .choice-tag { opacity: 0; }
|
|
9226
|
+
/* 15 · Avisos del sistema (abiertos en B–E) */
|
|
9227
|
+
:root[data-lab15]:not([data-lab15="A"]) #messages#messages .sys-dots.open { background: none !important; box-shadow: none !important; -webkit-backdrop-filter: none; backdrop-filter: none; }
|
|
9228
|
+
:root[data-lab15]:not([data-lab15="A"]) #messages#messages .sys-dots.open > .sys-more { display: none; }
|
|
9229
|
+
:root[data-lab15="B"] #messages#messages .sys-dots.open > .system.folded { text-align: center; padding-left: 12px !important; background: none !important; }
|
|
9230
|
+
:root[data-lab15="B"] #messages#messages .sys-dots.open > .system.folded::before { display: none; }
|
|
9231
|
+
:root[data-lab15="C"] #messages#messages .sys-dots.open > .system.folded { text-align: center; padding: 8px 12px !important; border-top: 1px solid var(--line-2); border-radius: 0 !important; background: none !important; }
|
|
9232
|
+
:root[data-lab15="C"] #messages#messages .sys-dots.open > .system.folded::before { display: none; }
|
|
9233
|
+
:root[data-lab15="D"] #messages#messages .sys-dots.open { justify-items: start; }
|
|
9234
|
+
:root[data-lab15="D"] #messages#messages .sys-dots.open > .system.folded { justify-self: start; border-radius: 999px !important; background: color-mix(in srgb, var(--panel) 88%, transparent) !important; box-shadow: var(--lift-1); }
|
|
9235
|
+
:root[data-lab15="E"] #messages#messages .sys-dots.open { gap: 8px; }
|
|
9236
|
+
:root[data-lab15="E"] #messages#messages .sys-dots.open > .system.folded { border-radius: 14px !important; background: var(--panel) !important; box-shadow: var(--lift-1); }
|
|
9237
|
+
/* 16 · Error y diagnóstico */
|
|
9238
|
+
:root[data-lab16="B"] #messages#messages .thread-inner > .system.fail { justify-self: start; margin-left: 40px; text-align: left; }
|
|
9239
|
+
:root[data-lab16="B"] #messages#messages .thread-inner > .system.fail::before { content: '⚠ '; }
|
|
9240
|
+
:root[data-lab16="C"] #messages#messages .thread-inner > .system.fail { width: 100%; max-width: 100%; border-radius: 10px; text-align: left; }
|
|
9241
|
+
:root[data-lab16="D"] #messages#messages .thread-inner > .system.fail { background: none !important; box-shadow: none !important; padding: 0; font-size: 12.5px; }
|
|
9242
|
+
:root[data-lab16="E"] #messages#messages .thread-inner > .system.fail { background: var(--panel) !important; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--danger) 45%, transparent), var(--lift-1) !important; color: var(--text); }
|
|
9243
|
+
/* 17 · Espacio entre turnos */
|
|
9244
|
+
:root[data-lab17="B"] #messages .thread-inner > * + * { margin-top: 4px !important; }
|
|
9245
|
+
:root[data-lab17="C"] #messages .thread-inner > * + * { margin-top: 28px !important; }
|
|
9246
|
+
:root[data-lab17="D"] #messages .thread-inner > .row + .row { padding-top: 14px; border-top: 1px solid var(--line); }
|
|
9247
|
+
:root[data-lab17="E"] #messages .thread-inner > .row.assistant + .row.assistant { margin-top: 2px !important; }
|
|
9248
|
+
:root[data-lab17="E"] #messages .thread-inner > :is(.row.assistant[data-agent="claude"] + .row.assistant[data-agent="claude"], .row.assistant[data-agent="codex"] + .row.assistant[data-agent="codex"], .row.assistant[data-agent="gemini"] + .row.assistant[data-agent="gemini"], .row.assistant[data-agent="opencode"] + .row.assistant[data-agent="opencode"], .row.assistant[data-agent="madre"] + .row.assistant[data-agent="madre"]) .who { display: none; }
|
|
9249
|
+
:root[data-lab17="E"] #messages .thread-inner > :is(.row.assistant[data-agent="claude"] + .row.assistant[data-agent="claude"], .row.assistant[data-agent="codex"] + .row.assistant[data-agent="codex"], .row.assistant[data-agent="gemini"] + .row.assistant[data-agent="gemini"], .row.assistant[data-agent="opencode"] + .row.assistant[data-agent="opencode"], .row.assistant[data-agent="madre"] + .row.assistant[data-agent="madre"]) > .avatar { visibility: hidden; }
|
|
9250
|
+
:root[data-lab15="B"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .sys-dots.open > .system.folded,
|
|
9251
|
+
:root[data-lab15="C"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .sys-dots.open > .system.folded { background: color-mix(in srgb, var(--bg) 62%, transparent) !important; -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); border-radius: 12px !important; }
|
|
9252
|
+
|
|
9253
|
+
/* ==========================================================================================
|
|
9254
|
+
CHAT · ACCC-BABA-ECBB-DCAA-C (2026-10-15). Lo que se eligió en el laboratorio (?lab), hecho
|
|
9255
|
+
forma de la sala: adjuntos en tarjeta, avatar que late al pensar, el agente en una píldora, la
|
|
9256
|
+
respuesta en burbuja, el plan como lista de tareas, la hora sola al pie, elecciones en lista con
|
|
9257
|
+
número, el permiso en una línea, el concedido como divisoria, comandos en pasos, cada /run en
|
|
9258
|
+
píldora (data-term="pill", app.js) y aire entre turnos. Cada regla se aparta cuando el
|
|
9259
|
+
laboratorio compara otra forma de su elemento (data-labNN en <html>). Sin backdrop-filter en el
|
|
9260
|
+
hilo, como dicen los planos: sobre un fondo de pantalla, cada pieza lleva su propio material.
|
|
9261
|
+
========================================================================================== */
|
|
9262
|
+
|
|
9263
|
+
/* 02 · Adjuntos: una tarjeta por archivo, con su tipo, su nombre y su tamaño. */
|
|
9264
|
+
:root:not([data-lab02]) #messages#messages .bubble .files { gap: 8px; margin-top: 10px; }
|
|
9265
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile:not(.image) {
|
|
9266
|
+
display: inline-grid; grid-template-columns: 34px minmax(0, auto); align-items: center; column-gap: 10px;
|
|
9267
|
+
max-width: min(100%, 280px); padding: 7px 14px 7px 7px; border: 0; border-radius: 12px;
|
|
9268
|
+
background: var(--plane-solid); color: var(--text); text-align: left;
|
|
9269
|
+
box-shadow: 0 0 0 .5px rgb(var(--plane-ink) / .14), 0 1px 2px rgb(var(--plane-ink) / .1);
|
|
9270
|
+
transition: transform calc(160ms * var(--motion-scale)) ease, box-shadow calc(160ms * var(--motion-scale)) ease;
|
|
9271
|
+
}
|
|
9272
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile:not(.image):hover { transform: translateY(-1px); box-shadow: 0 0 0 .5px rgb(var(--plane-ink) / .18), 0 4px 10px -4px rgb(var(--plane-ink) / .28); }
|
|
9273
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 70%, transparent); outline-offset: 2px; }
|
|
9274
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile .kind { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 9px; background: color-mix(in srgb, var(--phosphor) 12%, transparent); color: var(--phosphor); font: 600 9.5px var(--mono); letter-spacing: .06em; }
|
|
9275
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile .file-text { display: grid; gap: 1px; min-width: 0; }
|
|
9276
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 500 13px/1.3 var(--read); letter-spacing: 0; }
|
|
9277
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile .meta { font: 400 11.5px/1.3 var(--read); font-variant-numeric: tabular-nums; color: var(--text-3); }
|
|
9278
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile.image { overflow: hidden; border-radius: 12px; box-shadow: 0 0 0 .5px rgb(var(--plane-ink) / .14); }
|
|
9279
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile.image img { border-radius: 0; }
|
|
9280
|
+
|
|
9281
|
+
/* 03 · Pensando: sin globo. El avatar respira y deja un anillo en su color; al lado, lo que hace y
|
|
9282
|
+
cuánto lleva. Sobre un fondo de pantalla, la línea va en el material de las etiquetas. */
|
|
9283
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .bubble { gap: 0; padding: 4px 6px 4px 2px; border-radius: 999px; background: transparent !important; box-shadow: none !important; }
|
|
9284
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .bubble > i { display: none; }
|
|
9285
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .status { margin-left: 0; font-size: 14px; font-style: normal; color: var(--text-2); }
|
|
9286
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .status::after { display: none; }
|
|
9287
|
+
:root:not([data-lab03]) #messages#messages .row.thinking :is(.elapsed, .tokens) { margin-left: 10px; font-size: 11px; letter-spacing: 0; font-variant-numeric: tabular-nums; }
|
|
9288
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .stop-turn { margin-left: 6px; }
|
|
9289
|
+
:root:not([data-lab03]) #messages#messages .row.thinking > .avatar { position: relative; animation: think-breathe calc(2.4s * var(--motion-scale) / .7) ease-in-out infinite; }
|
|
9290
|
+
:root:not([data-lab03]) #messages#messages .row.thinking > .avatar::after { content: ''; position: absolute; inset: 0; border-radius: 50%; pointer-events: none; animation: think-ring calc(2.4s * var(--motion-scale) / .7) ease-out infinite; }
|
|
9291
|
+
:root:not([data-lab03])[data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.thinking .bubble { padding: 4px 8px 4px 14px; background: var(--plane-meta) !important; }
|
|
9292
|
+
@keyframes think-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(.9); } }
|
|
9293
|
+
@keyframes think-ring {
|
|
9294
|
+
0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--agent, var(--phosphor)) 50%, transparent); }
|
|
9295
|
+
70%, 100% { box-shadow: 0 0 0 9px color-mix(in srgb, var(--agent, var(--phosphor)) 0%, transparent); }
|
|
9296
|
+
}
|
|
9297
|
+
|
|
9298
|
+
/* 04 · Cabecera: el nombre del agente en su píldora, en letra de lectura; modelo y esfuerzo detrás,
|
|
9299
|
+
en píldoras neutras (AJUSTES EN LA SALA REAL, al final); el modo conserva su color. */
|
|
9300
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who { align-items: center; gap: 8px; padding: 3px 10px 3px 3px; }
|
|
9301
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child { padding: 2px 10px; border-radius: 999px; background: color-mix(in srgb, var(--agent) 15%, transparent); color: color-mix(in srgb, var(--agent) 82%, var(--text)); font: 600 12.5px/1.4 var(--read); letter-spacing: 0; text-transform: none; }
|
|
9302
|
+
|
|
9303
|
+
/* 05 · Cuerpo: la burbuja, con la esquina corta hacia el avatar, que va abajo. */
|
|
9304
|
+
:root:not([data-reply]) #messages#messages .row.assistant:not(.delegated) .bubble { border-radius: 20px 20px 20px 6px; padding: 13px 17px 10px; }
|
|
9305
|
+
|
|
9306
|
+
/* 07 · Plan: una lista de tareas; cada casilla en el color de quien la hará. */
|
|
9307
|
+
:root:not([data-lab07]) #messages#messages .plan-card { margin: 10px 0 8px; padding: 10px 14px 8px; border: 0; border-radius: 14px; background: color-mix(in srgb, var(--text) 4%, transparent); }
|
|
9308
|
+
:root:not([data-lab07]) #messages#messages .plan-card .plan-label { display: block; margin-bottom: 4px; }
|
|
9309
|
+
:root:not([data-lab07]) #messages#messages .plan-card ol { margin: 0; padding: 0; list-style: none; }
|
|
9310
|
+
:root:not([data-lab07]) #messages#messages .plan-card li { position: relative; margin: 0; padding: 6px 0 6px 28px; font-size: 14px; line-height: 1.45; }
|
|
9311
|
+
:root:not([data-lab07]) #messages#messages .plan-card li::before { content: ''; position: absolute; left: 0; top: calc(6px + (1.45em - 17px) / 2); width: 17px; height: 17px; box-sizing: border-box; border-radius: 5px; background: color-mix(in srgb, var(--agent) 8%, var(--plane-solid)); box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--agent) 55%, var(--line-2)); }
|
|
9312
|
+
:root:not([data-lab07]) #messages#messages .plan-card li + li { border-top: 1px solid color-mix(in srgb, var(--text) 6%, transparent); }
|
|
9313
|
+
|
|
9314
|
+
/* 09 · Pie: la hora sola; lo que costó aparece al pasar o al enfocar la respuesta. */
|
|
9315
|
+
:root:not([data-lab09]) #messages#messages .row.assistant .bubble-foot .stamp > span:not(:first-child) { opacity: 0; transition: opacity calc(180ms * var(--motion-scale)) ease; }
|
|
9316
|
+
:root:not([data-lab09]) #messages#messages .row.assistant:is(:hover, :focus-within) .bubble-foot .stamp > span { opacity: 1; }
|
|
9317
|
+
:root:not([data-lab09]) #messages#messages .row.assistant .bubble-foot .stamp > span:first-child { font-variant-numeric: tabular-nums; }
|
|
9318
|
+
@media (hover: none) { :root:not([data-lab09]) #messages#messages .row.assistant .bubble-foot .stamp > span { opacity: 1; } }
|
|
9319
|
+
|
|
9320
|
+
/* 10 · Elección: una lista con número, como las de los chats; cada fila es una frase que se presiona. */
|
|
9321
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-list { gap: 0; overflow: hidden; border-radius: 14px; box-shadow: inset 0 0 0 1px var(--line-2); }
|
|
9322
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option { grid-template-columns: 24px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 11px 14px; border: 0; border-radius: 0; background: transparent; font-size: 14.5px; line-height: 1.45; }
|
|
9323
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option + .choice-option { box-shadow: inset 0 1px 0 var(--line); }
|
|
9324
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option:hover { background: color-mix(in srgb, var(--agent, var(--text)) 6%, transparent); }
|
|
9325
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option:focus-visible { outline-offset: -2px; }
|
|
9326
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-key { display: grid; place-items: center; width: 24px; height: 24px; border: 0; border-radius: 50%; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text-2); font: 600 11.5px var(--mono); }
|
|
9327
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.recommended { background: color-mix(in srgb, var(--agent, var(--phosphor)) 5%, transparent); }
|
|
9328
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.recommended .choice-key,
|
|
9329
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.picked .choice-key { background: var(--agent, var(--phosphor)); color: var(--agent-on, var(--bg)); }
|
|
9330
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.picked { background: color-mix(in srgb, var(--agent, var(--phosphor)) 10%, transparent); }
|
|
9331
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-tag { padding: 3px 9px; border: 0; border-radius: 999px; background: color-mix(in srgb, var(--agent, var(--phosphor)) 13%, transparent); color: color-mix(in srgb, var(--agent, var(--phosphor)) 85%, var(--text)); font: 500 11.5px var(--read); letter-spacing: 0; text-transform: lowercase; }
|
|
9332
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-tag::first-letter { text-transform: uppercase; }
|
|
9333
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-foot { margin-top: 12px; font: 400 12px/1.5 var(--read); letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
9334
|
+
|
|
9335
|
+
/* 11 · Permiso: en una línea, como Claude Code: qué pide y por cuánto, los botones a la derecha, y
|
|
9336
|
+
debajo, en letra secundaria, cómo se confirma. */
|
|
9337
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin: 10px 0 2px; padding: 10px 12px 10px 14px; border: 0; border-radius: 14px; background: color-mix(in srgb, var(--warn, #e2a022) 7%, var(--plane-solid)) !important; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--warn, #e2a022) 38%, transparent), 0 1px 2px rgb(var(--plane-ink) / .08) !important; -webkit-backdrop-filter: none; backdrop-filter: none; }
|
|
9338
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-what { flex: 1 1 260px; font: 400 14px/1.45 var(--read); }
|
|
9339
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-what .who { padding: 0; border-radius: 0; background: none !important; font-weight: 600; }
|
|
9340
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-time { font: 400 13px var(--read); letter-spacing: 0; color: var(--text-2); }
|
|
9341
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-why { order: 9; flex: 1 1 100%; font: 400 12.5px/1.45 var(--read); color: var(--text-3); }
|
|
9342
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-windows { flex-wrap: nowrap; max-width: 100%; overflow-x: auto; scrollbar-width: none; }
|
|
9343
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-window { flex: none; font: 500 12px var(--read); letter-spacing: 0; padding: 4px 9px; white-space: nowrap; }
|
|
9344
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-actions { margin: 0; gap: 6px; }
|
|
9345
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) :is(.mode-go, .mode-alt) { height: 30px; padding: 0 13px; border-radius: 9px; font: 500 12.5px var(--read); letter-spacing: 0; text-transform: lowercase; white-space: nowrap; transition: background calc(150ms * var(--motion-scale)), color calc(150ms * var(--motion-scale)); }
|
|
9346
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) :is(.mode-go, .mode-alt)::first-letter { text-transform: uppercase; }
|
|
9347
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-go { font-weight: 600; box-shadow: none; }
|
|
9348
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-alt { border: 0; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); }
|
|
9349
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-alt:hover { background: color-mix(in srgb, var(--text) 12%, transparent); }
|
|
9350
|
+
|
|
9351
|
+
/* 12 · Concedido: una divisoria a lo ancho de la respuesta, con el permiso al centro en su color. */
|
|
9352
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled { display: flex !important; align-items: center; gap: 12px; justify-self: stretch; align-self: stretch; width: auto !important; margin: 12px 0 2px !important; padding: 0; background: none !important; box-shadow: none !important; }
|
|
9353
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::before,
|
|
9354
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::after { content: ''; flex: 1; height: 1px; background: color-mix(in srgb, var(--mode-c, var(--ok, var(--phosphor))) 40%, var(--line-2)); animation: settle-line calc(420ms * var(--motion-scale) / .7) cubic-bezier(.2, .7, .2, 1) both; }
|
|
9355
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::before { transform-origin: right; }
|
|
9356
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::after { transform-origin: left; }
|
|
9357
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled .mode-what { flex: none; padding: 4px 12px; border-radius: 999px; background: color-mix(in srgb, var(--mode-c, var(--ok, var(--phosphor))) 14%, var(--plane-solid)); color: color-mix(in srgb, var(--mode-c, var(--ok, var(--phosphor))) 80%, var(--text)); }
|
|
9358
|
+
@keyframes settle-line { from { transform: scaleX(0); opacity: 0; } }
|
|
9359
|
+
|
|
9360
|
+
/* 13 · Petición de comandos: pasos numerados; el paso que corrió dice ✓ y el que falló ✕. */
|
|
9361
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .choice-list { counter-reset: run-step; }
|
|
9362
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line { counter-increment: run-step; }
|
|
9363
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line .choice-key { font-size: 0 !important; border-radius: 50%; }
|
|
9364
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line .choice-key::after { content: counter(run-step); font: 600 11.5px var(--mono); color: var(--text-2); }
|
|
9365
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.ran .choice-key { background: color-mix(in srgb, var(--ok, var(--phosphor)) 16%, transparent) !important; }
|
|
9366
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.ran .choice-key::after { content: '✓'; color: var(--ok, var(--phosphor)); font-family: var(--read); }
|
|
9367
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.failed .choice-key { background: color-mix(in srgb, var(--crit) 15%, transparent) !important; }
|
|
9368
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.failed .choice-key::after { content: '✕'; color: var(--crit); font-family: var(--read); }
|
|
9369
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.refused .choice-key::after { color: var(--text-3); }
|
|
9370
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request :is(.run-all, .run-back) { text-transform: lowercase; }
|
|
9371
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request :is(.run-all, .run-back)::first-letter { text-transform: uppercase; }
|
|
9372
|
+
|
|
9373
|
+
/* 17 · Aire entre turnos, como en los chats de hoy; lo que es del mismo turno queda junto. */
|
|
9374
|
+
:root:not([data-lab17]) #messages#messages .thread-inner > * + * { margin-top: 28px; }
|
|
9375
|
+
:root:not([data-lab17]) #messages#messages .thread-inner > :is(.command-card, .sys-dots) + :is(.command-card, .sys-dots),
|
|
9376
|
+
:root:not([data-lab17]) #messages#messages .thread-inner > .row.assistant + :is(.choice, .command-card) { margin-top: 0; }
|
|
9377
|
+
|
|
9378
|
+
@media (prefers-reduced-motion: reduce) {
|
|
9379
|
+
#messages#messages .row.thinking > .avatar, #messages#messages .row.thinking > .avatar::after, #messages#messages .mode-ask.settled::before, #messages#messages .mode-ask.settled::after { animation: none !important; }
|
|
9380
|
+
#messages#messages .row.thinking > .avatar::after { box-shadow: 0 0 0 3px color-mix(in srgb, var(--agent, var(--phosphor)) 30%, transparent); }
|
|
9381
|
+
#messages#messages .bubble .file-tile:hover { transform: none; }
|
|
9382
|
+
}
|
|
9383
|
+
|
|
9384
|
+
/* ==========================================================================================
|
|
9385
|
+
AJUSTES EN LA SALA REAL (2026-10-15, tras ACCC-BABA-ECBB-DCAA-C)
|
|
9386
|
+
========================================================================================== */
|
|
9387
|
+
|
|
9388
|
+
/* El conjunto de un agente en un solo carril: la cabecera, la burbuja, lo que pide (elección,
|
|
9389
|
+
comandos) y sus /run empiezan donde empieza la burbuja, a la derecha del avatar. */
|
|
9390
|
+
:root:not([data-reply]) #messages#messages .row.assistant { column-gap: 14px; }
|
|
9391
|
+
:root:not([data-reply]) #messages#messages .row.assistant .col > .who { margin-left: 0; }
|
|
9392
|
+
:root:not([data-reply]) #messages#messages .thread-inner > :is(.choice, .command-card) { --agent-lane: 42px; margin-left: var(--agent-lane) !important; margin-right: 0; max-width: min(760px, calc(100% - var(--agent-lane))); }
|
|
9393
|
+
:root:not([data-reply])[data-term="pill"] #messages#messages .thread-inner > .command-card.terminal.open { width: auto; }
|
|
9394
|
+
|
|
9395
|
+
/* La cabecera: un plano con píldoras dentro, que se leen como una pieza. El plano deja 3 px
|
|
9396
|
+
alrededor de todo (radio 14 = 11 de la píldora + 3), las píldoras van a 4 px entre sí, todas de
|
|
9397
|
+
22 px, letra de lectura de 12 px y el mismo material: sólido, con un filo de medio píxel; el
|
|
9398
|
+
color solo tiñe. El texto suelto (la pregunta citada, lo cobrado) lleva el mismo aire que una
|
|
9399
|
+
píldora. En angosto se acomoda en renglones en vez de desbordarse. */
|
|
9400
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who { flex-wrap: wrap; align-items: center; gap: 4px; row-gap: 4px; max-width: 100%; padding: 3px; box-sizing: border-box; border-radius: 14px; box-shadow: inset 0 0 0 .5px rgb(var(--plane-ink) / .1) !important; }
|
|
9401
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child,
|
|
9402
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.badge, .to-agent) {
|
|
9403
|
+
--chip: var(--text); --chip-mix: 5%;
|
|
9404
|
+
display: inline-block; flex: none; height: 22px; max-width: 100%; padding: 0 10px; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
9405
|
+
border: 0; border-radius: 11px; background: color-mix(in srgb, var(--chip) var(--chip-mix), var(--plane-solid)) !important;
|
|
9406
|
+
box-shadow: inset 0 0 0 .5px color-mix(in srgb, var(--chip) 18%, transparent);
|
|
9407
|
+
color: color-mix(in srgb, var(--chip) 80%, var(--text)); font: 500 12px/22px var(--read); letter-spacing: 0; text-transform: none;
|
|
9408
|
+
}
|
|
9409
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.badge, .to-agent) { --chip: var(--text-2); }
|
|
9410
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child { --chip: var(--agent); --chip-mix: 15%; font-weight: 600; }
|
|
9411
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .to-agent { --chip: var(--agent); --chip-mix: 13%; }
|
|
9412
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.ash { --chip: var(--phosphor); --chip-mix: 13%; text-transform: lowercase; }
|
|
9413
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge:not(.model, .mode)::first-letter,
|
|
9414
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.model.effort::first-letter { text-transform: uppercase; }
|
|
9415
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.mode { font-family: var(--mono); font-size: 10.5px; font-weight: 600; letter-spacing: .06em; }
|
|
9416
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.reply, .spent) { padding: 0 7px; line-height: 22px; letter-spacing: 0; text-transform: none; }
|
|
9417
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .reply { flex: 1 1 140px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11.5px; }
|
|
9418
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .spent { flex: none; padding-left: 4px; font: 400 11px/22px var(--mono); font-variant-numeric: tabular-nums; color: var(--text-3); }
|
|
9419
|
+
|
|
9420
|
+
/* Modo · modelo · esfuerzo en claro: el mismo vidrio blanco que ya tiene en oscuro. */
|
|
9421
|
+
:root[data-scheme="light"] .composer > .pick-options .pick-label {
|
|
9422
|
+
background: rgb(255 255 255 / .6);
|
|
9423
|
+
box-shadow: 0 0 0 .5px rgb(20 30 20 / .1), inset 0 1px 0 #ffffff, 0 6px 18px rgb(20 30 20 / .1);
|
|
9424
|
+
-webkit-backdrop-filter: blur(20px) saturate(1.6); backdrop-filter: blur(20px) saturate(1.6);
|
|
9425
|
+
}
|
|
9426
|
+
|
|
9427
|
+
/* Cambiar de proyecto: al pasar, el cuadro de atrás se despega un poco; al presionar, o con la
|
|
9428
|
+
ventana abierta, se ilumina el de enfrente. */
|
|
9429
|
+
.switch-button svg > path { transition: transform calc(220ms * var(--motion-scale) / .7) cubic-bezier(.2, .8, .2, 1); }
|
|
9430
|
+
.switch-button:is(:hover, :focus-visible) svg > path { transform: translate(1.3px, -1.3px); }
|
|
9431
|
+
.switch-button svg > .ic-f { transition: fill calc(160ms * var(--motion-scale)) ease, filter calc(160ms * var(--motion-scale)) ease; }
|
|
9432
|
+
.switch-button:active svg > .ic-f, body:has(dialog.room-switch[open]) .switch-button svg > .ic-f { fill: currentColor; fill-opacity: .9; filter: drop-shadow(0 0 3px color-mix(in srgb, currentColor 45%, transparent)); }
|
|
9433
|
+
@media (prefers-reduced-motion: reduce) { .switch-button svg > path { transition: none; } .switch-button:is(:hover, :focus-visible) svg > path { transform: none; } }
|
|
9434
|
+
|
|
9435
|
+
/* El foco de un aviso de primera vez (spotlight, tour.js): lo que el aviso nombra se ve claro, con
|
|
9436
|
+
un aro suave del acento, y el resto de la página baja un poco. Sin pico en la tarjeta. */
|
|
9437
|
+
.hint-spot {
|
|
9438
|
+
position: fixed; z-index: 2147482999; pointer-events: none; box-sizing: border-box;
|
|
9439
|
+
box-shadow: 0 0 0 200vmax rgb(14 20 16 / .16), 0 0 0 2px color-mix(in srgb, var(--accent, var(--phosphor)) 55%, transparent), 0 0 24px 2px color-mix(in srgb, var(--accent, var(--phosphor)) 32%, transparent);
|
|
9440
|
+
background: rgb(255 255 255 / .06);
|
|
9441
|
+
animation: hint-spot-in calc(360ms * var(--motion-scale, .7) / .7) cubic-bezier(.2, .8, .2, 1) both;
|
|
9442
|
+
transition: left .2s ease, top .2s ease, width .2s ease, height .2s ease;
|
|
9443
|
+
}
|
|
9444
|
+
.hint-spot[hidden] { display: none; }
|
|
9445
|
+
:root:not([data-scheme="light"]) .hint-spot { box-shadow: 0 0 0 200vmax rgb(0 0 0 / .3), 0 0 0 2px color-mix(in srgb, var(--accent, var(--phosphor)) 60%, transparent), 0 0 26px 3px color-mix(in srgb, var(--accent, var(--phosphor)) 30%, transparent); }
|
|
9446
|
+
@keyframes hint-spot-in { from { opacity: 0; transform: scale(1.06); } }
|
|
9447
|
+
@media (prefers-reduced-motion: reduce) { .hint-spot { animation: none; transition: none; } }
|
|
9448
|
+
|
|
9449
|
+
/* La fila de avisos dice con una flecha que se despliega: hacia abajo junto a «+N» cerrada, hacia
|
|
9450
|
+
arriba en «Plegar» abierta. La flecha es la misma, girada, y va centrada con el texto. */
|
|
9451
|
+
#messages .sys-dots { --chev: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 10 8 6l4 4' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
|
|
9452
|
+
#messages .sys-dots > .sys-more::after {
|
|
9453
|
+
content: ''; display: inline-block; flex: none; width: 10px; height: 10px; background: currentColor;
|
|
9454
|
+
-webkit-mask: var(--chev) center / contain no-repeat; mask: var(--chev) center / contain no-repeat;
|
|
9455
|
+
transition: transform calc(180ms * var(--motion-scale)) ease;
|
|
9456
|
+
}
|
|
9457
|
+
#messages#messages .sys-dots:not(.open) > .sys-more:not([hidden]) { display: inline-flex; align-items: center; gap: 4px; line-height: 1; }
|
|
9458
|
+
#messages#messages .sys-dots:not(.open) > .sys-more::after { transform: rotate(180deg); opacity: .8; }
|
|
9459
|
+
#messages#messages .sys-dots:not(.open):hover > .sys-more::after { transform: rotate(180deg) translateY(-1px); opacity: 1; }
|
|
9460
|
+
/* «Plegar»: una tecla de 26 px, la palabra y su flecha en la misma línea media. */
|
|
9461
|
+
#messages#messages .sys-dots.open > .sys-more {
|
|
9462
|
+
display: inline-block; height: 26px; margin-top: 4px; padding: 0 11px 0 13px; box-sizing: border-box; border-radius: 999px;
|
|
9463
|
+
font: 500 12.5px/26px var(--read); letter-spacing: 0; text-transform: lowercase; white-space: nowrap; color: var(--text-2);
|
|
9464
|
+
transition: background calc(150ms * var(--motion-scale)) ease, color calc(150ms * var(--motion-scale)) ease;
|
|
9465
|
+
}
|
|
9466
|
+
#messages#messages .sys-dots.open > .sys-more::first-letter { text-transform: uppercase; }
|
|
9467
|
+
#messages#messages .sys-dots.open > .sys-more::after { width: 11px; height: 11px; margin-left: 6px; vertical-align: middle; position: relative; top: -1px; }
|
|
9468
|
+
#messages#messages .sys-dots.open > .sys-more:hover { background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); }
|
|
9469
|
+
#messages#messages .sys-dots.open > .sys-more:hover::after { transform: translateY(-1px); }
|
|
9470
|
+
@media (prefers-reduced-motion: reduce) { #messages .sys-dots > .sys-more::after { transition: none; } }
|
|
9471
|
+
|
|
9472
|
+
/* Los avisos abiertos como una lista que se lee (2026-10-15): cada uno con su punto, la etiqueta
|
|
9473
|
+
pequeña arriba y lo que dice debajo en letra de lectura; una línea fina entre uno y otro; la
|
|
9474
|
+
memoria, las barras de límite y los comandos alineados a la izquierda como lo demás; lo repetido
|
|
9475
|
+
seguido, una sola vez con «×N» (groupRepeats, app.js). */
|
|
9476
|
+
#messages#messages .sys-dots.open { gap: 0; width: min(92%, 600px); padding: 6px 6px 8px; border-radius: 18px; }
|
|
9477
|
+
#messages#messages .sys-dots.open > .system.folded {
|
|
9478
|
+
display: block; padding: 11px 14px 12px 34px !important; border-radius: 12px !important;
|
|
9479
|
+
font: 400 13.5px/1.5 var(--read) !important; letter-spacing: 0 !important; text-transform: none !important; text-align: left !important;
|
|
9480
|
+
color: var(--text-2) !important;
|
|
9481
|
+
}
|
|
9482
|
+
#messages#messages .sys-dots.open > .system.folded + .system.folded:not(.repeat)::after { content: ''; position: absolute; left: 34px; right: 14px; top: 0; height: 1px; background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
9483
|
+
#messages#messages .sys-dots.open > .system.folded:hover::after, #messages#messages .sys-dots.open > .system.folded:hover + .system.folded::after { opacity: 0; }
|
|
9484
|
+
#messages#messages .sys-dots.open > .system.folded::before { left: 14px; top: 16px; width: 8px; height: 8px; box-shadow: 0 0 0 3px color-mix(in srgb, var(--dot) 18%, transparent); }
|
|
9485
|
+
#messages#messages .sys-dots.open > .system.folded.repeat { display: none !important; }
|
|
9486
|
+
/* La etiqueta: su propia línea, pequeña, en el tono del aviso. */
|
|
9487
|
+
#messages#messages .sys-dots.open > .system.folded > b:first-child {
|
|
9488
|
+
display: block; width: fit-content; margin: 0 0 3px; font: 600 10px/1.4 var(--mono); letter-spacing: .14em; text-transform: uppercase;
|
|
9489
|
+
color: color-mix(in srgb, var(--dot) 70%, var(--text-2));
|
|
9490
|
+
}
|
|
9491
|
+
#messages#messages .sys-dots.open > .system.folded:is([data-tone="info"], :not([data-tone])) > b:first-child { color: var(--text-3); }
|
|
9492
|
+
#messages#messages .sys-dots.open > .system.folded[data-times] > b:first-child::after { content: var(--times); margin-left: 8px; padding: 1px 6px; border-radius: 999px; background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text-2); font-weight: 600; letter-spacing: .04em; }
|
|
9493
|
+
#messages#messages .sys-dots.open > .system.folded > b:not(:first-child) { font-weight: 600; color: var(--text); }
|
|
9494
|
+
/* La barra de un límite: bajo el texto, a la izquierda, fina. */
|
|
9495
|
+
#messages#messages .sys-dots.open > .system.folded .gauge { display: block; width: min(100%, 280px); height: 4px; margin: 9px 0 1px; border-radius: 4px; background: color-mix(in srgb, var(--text) 10%, transparent); overflow: hidden; }
|
|
9496
|
+
#messages#messages .sys-dots.open > .system.folded .gauge .now { display: block; height: 100%; border-radius: inherit; background: var(--dot); }
|
|
9497
|
+
/* El comando de un módulo: un trozo de código, no una caja con borde. */
|
|
9498
|
+
#messages#messages .sys-dots.open > .system.folded .cmd { display: block; width: fit-content; max-width: 100%; box-sizing: border-box; margin: 7px 0 0; padding: 3px 9px; border: 0 !important; box-shadow: none !important; outline: 0; border-radius: 7px; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); font: 400 12px/1.5 var(--mono); letter-spacing: 0; text-transform: none; overflow-wrap: anywhere; }
|
|
9499
|
+
/* La memoria: como los demás, a la izquierda; quién, en su píldora; la cuenta en voz baja. */
|
|
9500
|
+
#messages#messages .sys-dots.open > .system.folded.claim { display: block; width: auto; }
|
|
9501
|
+
#messages#messages .sys-dots.open > .system.folded.claim > .claim-head { font-size: 10px; }
|
|
9502
|
+
#messages#messages .sys-dots.open > .system.folded.claim > .claim-head .who { display: inline-block; margin-left: 4px; padding: 0 7px; border-radius: 999px; background: color-mix(in srgb, var(--agent, var(--text)) 14%, transparent); color: color-mix(in srgb, var(--agent, var(--text)) 80%, var(--text)); letter-spacing: .06em; }
|
|
9503
|
+
#messages#messages .sys-dots.open > .system.folded.claim .claim-body { display: block; font-size: 13.5px; color: var(--text-2); }
|
|
9504
|
+
#messages#messages .sys-dots.open > .system.folded.claim .claim-note { display: block; margin-top: 2px; font: 400 12px/1.5 var(--read); letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
9505
|
+
#messages#messages .sys-dots.open > .system.folded.claim .claim-acts { justify-content: flex-start; }
|
|
9506
|
+
#messages#messages .sys-dots.open > .sys-more { justify-self: center; margin-top: 8px; }
|
|
9507
|
+
#messages#messages .sys-dots.open > .system.folded.claim > * { margin-left: 0 !important; margin-right: 0 !important; max-width: none !important; text-align: left !important; justify-self: start !important; }
|
|
9508
|
+
/* La cabecera en una sola línea (2026-10-15): lo primero que cede es la pregunta citada (se corta
|
|
9509
|
+
con «…»), luego modelo, esfuerzo y las demás insignias; el nombre y lo cobrado no se cortan. */
|
|
9510
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who { flex-wrap: nowrap; border-radius: 14px; }
|
|
9511
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child,
|
|
9512
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .spent { flex: none; }
|
|
9513
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.badge, .to-agent) { flex: none; }
|
|
9514
|
+
/* Solo lo que es una frase (de dónde viene una orden, «orden 1 de 1 · …») puede cortarse. */
|
|
9515
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge:not(.model, .mode, .ash) { flex: 0 1 auto; min-width: 60px; }
|
|
9516
|
+
/* Con el chat angosto se callan primero los que se pueden leer en otro lado: el esfuerzo (lo dice
|
|
9517
|
+
el sello de tu mensaje) y, más angosto, el ahorro de tokens (lo dice la caja de escribir). */
|
|
9518
|
+
#messages .thread-inner { container: thread / inline-size; }
|
|
9519
|
+
@container thread (max-width: 540px) { :root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.effort { display: none; } }
|
|
9520
|
+
@container thread (max-width: 430px) { :root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.ash { display: none; } }
|
|
9521
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .reply { flex: 1 1 0; min-width: 0; max-width: max-content; }
|
|
9522
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .reply:empty { display: none; }
|
|
9523
|
+
/* El punto de un aviso solo (2026-10-15): más chico y casi transparente, para no ensuciar el
|
|
9524
|
+
lienzo; vuelve a verse entero al pasar o al enfocarlo. La fila con «+N» se atenúa menos. */
|
|
9525
|
+
#messages#messages .sys-dots.single { padding: 3px; margin-block: 2px; border-color: transparent; background: color-mix(in srgb, var(--bg) 30%, transparent); -webkit-backdrop-filter: none; backdrop-filter: none; opacity: .5; transition: opacity calc(180ms * var(--motion-scale)) ease, background calc(180ms * var(--motion-scale)) ease; }
|
|
9526
|
+
#messages#messages .sys-dots.single > .system.folded { width: 6px !important; height: 6px !important; box-shadow: none !important; }
|
|
9527
|
+
#messages#messages .sys-dots:not(.open):not(.single) { opacity: .8; transition: opacity calc(180ms * var(--motion-scale)) ease; }
|
|
9528
|
+
#messages#messages .sys-dots:not(.open):is(:hover, :focus-visible) { opacity: 1; background: color-mix(in srgb, var(--bg) 78%, transparent); }
|
|
9529
|
+
/* El contexto compartido no lleva etiqueta: empieza con palabras y sus @agentes van en la frase. */
|
|
9530
|
+
#messages#messages .sys-dots.open > .system.folded.handoff > b:first-child { display: inline; margin: 0; font: 600 13.5px/1.5 var(--read); letter-spacing: 0; text-transform: none; color: var(--text); }
|
|
9531
|
+
|
|
9532
|
+
/* Lo que queda detrás de la caja de escribir (2026-10-15): la conversación se desvanece en los últimos
|
|
9533
|
+
~10 px antes del borde de la caja de escribir (--type-gap; más largo se veía como un resplandor) (--dock-h la mide app.js, measureDock) en vez de asomarse bajo modo · modelo y detrás
|
|
9534
|
+
de la versión. El final de la conversación sigue subiendo por encima: el hilo ya deja ese aire. */
|
|
9535
|
+
:root:not(.via-phone) #messages.thread {
|
|
9536
|
+
-webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - var(--type-gap, var(--dock-h, 0px)) - 10px), transparent calc(100% - var(--type-gap, var(--dock-h, 0px)) + 2px));
|
|
9537
|
+
mask-image: linear-gradient(to bottom, #000 calc(100% - var(--type-gap, var(--dock-h, 0px)) - 10px), transparent calc(100% - var(--type-gap, var(--dock-h, 0px)) + 2px));
|
|
9538
|
+
}
|
|
9539
|
+
/* La barra del proyecto junto a dos paneles (2026-10-15): angosta en una pantalla ancha. Por
|
|
9540
|
+
debajo de 760 px «Primeros pasos» queda en su anillo y su cuenta (la frase sigue en su nombre y
|
|
9541
|
+
su título) y las teclas se juntan, para que todo quepa sin pisar Inicio · Proyectos · Ajustes y
|
|
9542
|
+
el nombre del proyecto no sea lo primero en irse. */
|
|
9543
|
+
@container roombar (max-width: 760px) {
|
|
9544
|
+
.shell > .bar:not(.bar-home) { gap: 10px; }
|
|
9545
|
+
#steps-pill .steps-label { display: none; }
|
|
9546
|
+
#steps-pill { gap: 6px; padding-inline: 9px 11px; }
|
|
9547
|
+
/* El nombre del proyecto se queda; el título de la conversación es el que se corta con «…». */
|
|
9548
|
+
.shell > .bar:not(.bar-home) .project:not(.chat-here) { font-size: 11px; }
|
|
9549
|
+
.shell > .bar:not(.bar-home) .project:not(.chat-here)::after { content: none; }
|
|
9550
|
+
}
|
|
9551
|
+
/* Cerrada, la salida de un /run no da su ancho a la píldora (2026-10-15): sus líneas largas (un
|
|
9552
|
+
`cloc`, una tabla) la estiraban de lado a lado aunque no se vieran. Ocupa el ancho de la píldora
|
|
9553
|
+
sin pedirlo; abierta, vuelve a medir lo suyo. */
|
|
9554
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal:not(.open) .term-out { width: 0; min-width: 100%; }
|
|
9555
|
+
/* La esquina de quién hizo MADRE (public/attribution.js): un enlace a su autor, con aire bajo
|
|
9556
|
+
modo · modelo · esfuerzo para no pegarse a su vidrio cuando el centro es angosto. */
|
|
9557
|
+
.shell > .colophon { margin-top: 8px; }
|
|
9558
|
+
.colophon-link { color: inherit; text-decoration: none; border-radius: inherit; }
|
|
9559
|
+
.colophon-link:hover { text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
|
|
9560
|
+
.colophon-link:focus-visible { outline: 2px solid var(--accent, var(--phosphor)); outline-offset: 3px; }
|
|
9561
|
+
/* Lo que está fuera de la pantalla no se dibuja (2026-10-15): cada pieza de la conversación lleva
|
|
9562
|
+
content-visibility:auto, así que el navegador no la mide ni la pinta hasta que se acerca, y
|
|
9563
|
+
recuerda su alto una vez vista (contain-intrinsic-size: auto). Buscar con ⌘F, seleccionar y
|
|
9564
|
+
saltar a una cita siguen funcionando. El margen de recorte deja ver las sombras y los anillos
|
|
9565
|
+
que salen un poco de su caja. */
|
|
9566
|
+
#messages .thread-inner > :is(.row, .choice, .command-card, .system, .sys-dots) {
|
|
9567
|
+
content-visibility: auto;
|
|
9568
|
+
contain-intrinsic-size: auto 140px;
|
|
9569
|
+
overflow-clip-margin: 28px;
|
|
9570
|
+
}
|
|
9571
|
+
/* ---------- Correcciones de UX de 1.0.2 (2026-10-16) ----------
|
|
9572
|
+
1 · Un /run con punto de restauración se viste como los demás avisos del lienzo: esquinas de
|
|
9573
|
+
14 px y su DESHACER debajo, a la izquierda. Era una cápsula de 999 px que se inflaba en círculo
|
|
9574
|
+
al meter el botón en un segundo renglón. */
|
|
9575
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal.has-undo:not(.open) { border-radius: 14px; }
|
|
9576
|
+
#messages#messages .command-card.terminal.has-undo > :is(.undo, .outcome) { display: block; margin: 0 12px 10px 10px; }
|
|
9577
|
+
#messages#messages .command-card.terminal.has-undo.open > :is(.undo, .outcome) { margin-top: 10px; }
|
|
9578
|
+
/* 3 · La píldora cerrada respeta el carril del agente: su máximo era el 100 % de la columna y,
|
|
9579
|
+
corrida 42 px a la derecha, la columna (overflow-x: hidden) le cortaba el final. */
|
|
9580
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal:not(.open) { max-width: min(760px, calc(100% - var(--agent-lane, 0px))); }
|
|
9581
|
+
/* 4 · El aviso del botón de conversaciones va montado en su esquina, por fuera del squircle, con
|
|
9582
|
+
un anillo del color del fondo que lo separa del vidrio. */
|
|
9583
|
+
.chats-button.working::after, .chats-button.unread::after { top: -3px; right: -3px; width: 10px; height: 10px; box-shadow: 0 0 0 2px var(--bg), 0 0 8px color-mix(in srgb, var(--phosphor) 55%, transparent); }
|
|
9584
|
+
/* 8 · Una línea larga se lee entera antes de presionarla, sin volver la tarjeta una pared: pasada
|
|
9585
|
+
cierta altura, la línea se recorre dentro de su botón. */
|
|
9586
|
+
#messages .run-request .run-line .choice-text { max-height: 15.5em; overflow-y: auto; overscroll-behavior: contain; }
|
|
9587
|
+
/* 2 · Pensando: el anillo que respira alrededor del avatar sale unos píxeles de su caja y la
|
|
9588
|
+
columna lo cortaba en seco por la izquierda (overflow-x: hidden pegado al avatar) y la fila, por
|
|
9589
|
+
su contención de pintado (content-visibility). La columna recorta con margen y la fila viva no se
|
|
9590
|
+
contiene: siempre está en pantalla. */
|
|
9591
|
+
/* Chrome keeps overflow-clip-margin only when both axes clip; with overflow-x alone the ring was
|
|
9592
|
+
still cut flush with the avatar (2026-10-17). Clipping the height too costs nothing: the column
|
|
9593
|
+
pads 36px above and the dock's height below, and nothing in it hangs past that. */
|
|
9594
|
+
#messages .thread-inner { overflow: clip; overflow-clip-margin: 24px; }
|
|
9595
|
+
#messages .thread-inner > .row.thinking { content-visibility: visible; }
|
|
9596
|
+
/* 9 · Desplazarse es del humano. El hilo ya no anima cada asignación de su posición: con el scroll
|
|
9597
|
+
suave, el «volver al final» instantáneo y el animado peleaban en el mismo cuadro y la vista
|
|
9598
|
+
temblaba. Los desplazamientos que sí deben deslizarse lo piden ellos mismos. */
|
|
9599
|
+
#messages.thread { scroll-behavior: auto; }
|
|
9600
|
+
/* Nada dentro del hilo muestrea lo que hay detrás (la regla de arriba sobre backdrop-filter): la
|
|
9601
|
+
fila de avisos plegados se había quedado fuera y, al desplazarse rápido, dejaba su vidrio atrás
|
|
9602
|
+
como una ventana fantasma. Lleva una tinta plana un poco más espesa en su lugar. */
|
|
9603
|
+
#messages .sys-dots { -webkit-backdrop-filter: none; backdrop-filter: none; background: color-mix(in srgb, var(--bg) 80%, transparent); }
|
|
9604
|
+
#messages .sys-dots:hover, #messages .sys-dots:focus-visible { background: color-mix(in srgb, var(--bg) 90%, transparent); }
|
|
9605
|
+
/* 10 · Abajo terminó algo: un botón redondo y ligero sobre la caja, con un punto del color de quien
|
|
9606
|
+
contestó. Lleva al final y se va solo al llegar. */
|
|
9607
|
+
.to-end {
|
|
9608
|
+
position: fixed; z-index: 39; left: var(--composer-center, 50%); bottom: calc(100vh - var(--composer-top, 70vh) + 14px); translate: -50% 0;
|
|
9609
|
+
display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border: 0; border-radius: 50%; cursor: pointer;
|
|
9610
|
+
color: var(--text); background: color-mix(in srgb, var(--surface, var(--panel)) 86%, transparent);
|
|
9611
|
+
-webkit-backdrop-filter: blur(16px) saturate(1.5); backdrop-filter: blur(16px) saturate(1.5);
|
|
9612
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 16%, transparent), 0 2px 4px rgba(0, 0, 0, .18), 0 10px 24px -8px rgba(0, 0, 0, .42);
|
|
9613
|
+
transition: bottom calc(220ms * var(--motion-scale)) var(--ease-out, ease), color calc(160ms * var(--motion-scale)) ease;
|
|
9614
|
+
animation: to-end-in calc(260ms * var(--motion-scale)) var(--ease-out, ease) both;
|
|
9615
|
+
}
|
|
9616
|
+
.to-end[hidden] { display: none; }
|
|
9617
|
+
.to-end svg { width: var(--ico-md); height: var(--ico-md); }
|
|
9618
|
+
.to-end:hover { color: var(--phosphor); }
|
|
9619
|
+
.to-end:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 60%, transparent); outline-offset: 2px; }
|
|
9620
|
+
.to-end .to-end-dot { position: absolute; top: 0; right: 0; width: 9px; height: 9px; border-radius: 50%; background: var(--agent, var(--phosphor)); box-shadow: 0 0 0 2px var(--bg); }
|
|
9621
|
+
.to-end.leaving { animation: to-end-out calc(200ms * var(--motion-scale)) ease both; }
|
|
9622
|
+
:root[data-scheme="light"] .to-end { background: color-mix(in srgb, #ffffff 88%, transparent); box-shadow: 0 0 0 .5px rgba(20, 30, 20, .12), 0 2px 4px rgba(20, 30, 20, .08), 0 10px 24px -8px rgba(20, 30, 20, .22); }
|
|
9623
|
+
:root.toasting .to-end { bottom: calc(100vh - var(--composer-top, 70vh) + 32px + var(--toast-h, 38px)); }
|
|
9624
|
+
@keyframes to-end-in { from { opacity: 0; transform: translateY(8px) scale(.85); } }
|
|
9625
|
+
@keyframes to-end-out { to { opacity: 0; transform: translateY(6px) scale(.9); } }
|
|
9626
|
+
/* 7 · Un aviso del sistema nace como el punto de su color y se abre en su píldora; al irse vuelve
|
|
9627
|
+
a cerrarse en el punto. La forma no cambia, solo cómo llega y cómo se va. Lleva una sombra más,
|
|
9628
|
+
amplia y muy suave, que lo despega del lienzo; y mientras está, la conversación que estaba en su
|
|
9629
|
+
final sube lo que mide para que el aviso no tape la última línea. */
|
|
9630
|
+
.toast { --toast-tone: var(--text-3); }
|
|
9631
|
+
.toast[data-tone="done"] { --toast-tone: #34c759; }
|
|
9632
|
+
.toast[data-tone="look"] { --toast-tone: #e0a23c; }
|
|
9633
|
+
.toast[data-tone="wrong"] { --toast-tone: var(--danger); }
|
|
9634
|
+
.toast:not([hidden]) { animation: toast-bloom calc(480ms * var(--motion-scale)) cubic-bezier(.3, .7, .2, 1) both; }
|
|
9635
|
+
.toast:not([hidden])::before { content: ''; position: absolute; inset: 0; border-radius: inherit; background: var(--toast-tone); pointer-events: none; animation: toast-bloom-tint calc(480ms * var(--motion-scale)) ease-out both; }
|
|
9636
|
+
.toast:not([hidden]) > * { animation: toast-words calc(240ms * var(--motion-scale)) ease calc(230ms * var(--motion-scale)) both; }
|
|
9637
|
+
.toast.leaving:not([hidden]) { animation: toast-fold calc(300ms * var(--motion-scale)) cubic-bezier(.5, 0, .6, 1) both; }
|
|
9638
|
+
.toast.leaving:not([hidden])::before { animation: toast-fold-tint calc(300ms * var(--motion-scale)) ease-in both; }
|
|
9639
|
+
.toast.leaving:not([hidden]) > * { animation: toast-words-out calc(120ms * var(--motion-scale)) ease both; }
|
|
9640
|
+
@keyframes toast-bloom {
|
|
9641
|
+
from { clip-path: inset(calc(50% - 5px) calc(50% - 5px) round 999px); transform: translateX(-50%) scale(.92); }
|
|
9642
|
+
32% { clip-path: inset(0 calc(50% - var(--toast-h, 38px) / 2) round 999px); }
|
|
9643
|
+
78%, to { clip-path: inset(0 round 20px); transform: translateX(-50%); }
|
|
9644
|
+
}
|
|
9645
|
+
@keyframes toast-bloom-tint { from, 30% { opacity: 1; } 70%, to { opacity: 0; } }
|
|
9646
|
+
@keyframes toast-words { from { opacity: 0; } }
|
|
9647
|
+
@keyframes toast-fold {
|
|
9648
|
+
from { clip-path: inset(0 round 20px); transform: translateX(-50%); }
|
|
9649
|
+
55% { clip-path: inset(0 calc(50% - var(--toast-h, 38px) / 2) round 999px); opacity: 1; }
|
|
9650
|
+
85% { clip-path: inset(calc(50% - 5px) calc(50% - 5px) round 999px); opacity: 1; }
|
|
9651
|
+
to { clip-path: inset(calc(50% - 5px) calc(50% - 5px) round 999px); transform: translateX(-50%) scale(.92); opacity: 0; }
|
|
9652
|
+
}
|
|
9653
|
+
@keyframes toast-fold-tint { from, 25% { opacity: 0; } 60%, to { opacity: 1; } }
|
|
9654
|
+
@keyframes toast-words-out { to { opacity: 0; } }
|
|
9655
|
+
.toast:not([hidden]) {
|
|
9656
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 14%, transparent), inset 0 1px 0 rgb(255 255 255 / .06), 0 2px 4px rgba(0, 0, 0, .24), 0 12px 28px -6px rgba(0, 0, 0, .5), 0 28px 60px -18px rgba(0, 0, 0, .45), 0 0 0 10px color-mix(in srgb, var(--bg) 16%, transparent), 0 24px 70px 6px rgba(0, 0, 0, .16);
|
|
9657
|
+
}
|
|
9658
|
+
:root[data-scheme="light"] .toast:not([hidden]) { box-shadow: 0 0 0 .5px rgba(20, 30, 20, .08), 0 2px 4px rgba(20, 30, 20, .1), 0 12px 28px -6px rgba(20, 30, 20, .22), 0 28px 60px -18px rgba(20, 30, 20, .2), 0 0 0 10px rgb(255 255 255 / .22), 0 24px 70px 6px rgba(20, 30, 20, .08); }
|
|
9659
|
+
#messages .thread-inner { transition: padding-bottom calc(280ms * var(--motion-scale)) var(--ease-out, ease); }
|
|
9660
|
+
:root.toast-room #messages .thread-inner { padding-bottom: calc(var(--dock-h, 0px) + 28px + var(--toast-h, 38px) + 18px); }
|
|
9661
|
+
@media (prefers-reduced-motion: reduce) {
|
|
9662
|
+
.toast:not([hidden]), .toast:not([hidden])::before, .toast:not([hidden]) > *, .toast.leaving:not([hidden]), .toast.leaving:not([hidden])::before { animation-duration: 1ms; }
|
|
9663
|
+
.to-end, .to-end.leaving { animation: none; }
|
|
9664
|
+
}
|
|
9665
|
+
/* 6 · La caja de escribir no se aplasta: el texto conserva un ancho para escribir y la dirección
|
|
9666
|
+
(HUMANO › COPILOTO › AHORRO DE TOKENS ›) se corta con «…» antes que el destinatario, que siempre
|
|
9667
|
+
se ve. La ficha del ahorro de tokens no se parte en renglones. */
|
|
9668
|
+
.field { grid-template-columns: auto minmax(0, max-content) minmax(min(220px, 42%), 1fr) auto auto auto auto; }
|
|
9669
|
+
.field > .crew-label { display: flex; min-width: 0; overflow: hidden; }
|
|
9670
|
+
.crew-label > .crew-path { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
9671
|
+
.crew-label > .crew-to { flex: none; white-space: pre; }
|
|
9672
|
+
.ash-toggle { white-space: nowrap; flex: none; }
|
|
9673
|
+
@container composer (max-width: 560px) {
|
|
9674
|
+
.field { grid-template-columns: auto auto minmax(0, 1fr) auto auto auto auto; }
|
|
9675
|
+
}
|
|
9676
|
+
/* 5 · La receta para entrenar tu IA (Mac y Linux) cabe en su hoja: cada paso es una columna que
|
|
9677
|
+
puede angostarse y cada comando se lee completo, partido en renglones, con Copiar siempre a la
|
|
9678
|
+
vista arriba a la derecha. Antes la línea más larga ensanchaba el paso y la hoja la cortaba. */
|
|
9679
|
+
.sx-steps, .sx-steps > li { grid-template-columns: minmax(0, 1fr); min-width: 0; }
|
|
9680
|
+
.sx-steps .sx-command { min-width: 0; align-items: flex-start; }
|
|
9681
|
+
.sx-steps .sx-command code { white-space: pre-wrap; overflow-wrap: anywhere; overflow-x: visible; padding: 5px 0; line-height: 1.55; }
|
|
9682
|
+
.sx-steps .sx-command > :not(code) { flex: none; }
|
|
9683
|
+
/* La caja con muchos renglones se recorre por dentro: la primera línea visible se desvanece bajo
|
|
9684
|
+
su borde en lugar de verse partida a la mitad. */
|
|
9685
|
+
.editor.scrolled { -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 12px); mask-image: linear-gradient(to bottom, transparent 0, #000 12px); }
|
|
9686
|
+
.sx-steps .sx-command code { background: none; border: 0; border-radius: 0; }
|
|
9687
|
+
/* Un paso de medición al abrir una conversación (app.js, measureRows): cada fila se dibuja una vez
|
|
9688
|
+
para que el navegador recuerde su alto real y el historial no salte al llegar a lo nunca visto. */
|
|
9689
|
+
#messages .thread-inner > .cv-measure { content-visibility: visible; }
|
|
9690
|
+
|
|
9691
|
+
/* 1.0.3 · Your computer: every model size, to run and to train, against this machine. */
|
|
9692
|
+
.sx-more > .sx-table { overflow-x: auto; }
|
|
9693
|
+
.sx-models { width: 100%; border-collapse: collapse; font-size: 12.5px; font-variant-numeric: tabular-nums; }
|
|
9694
|
+
.sx-models th { text-align: left; font-weight: 550; color: var(--text-2); padding: 6px 10px 6px 0; border-bottom: 1px solid color-mix(in srgb, var(--text) 9%, transparent); white-space: nowrap; }
|
|
9695
|
+
.sx-models td { padding: 7px 10px 7px 0; color: var(--text); border-bottom: 1px solid color-mix(in srgb, var(--text) 5%, transparent); white-space: nowrap; }
|
|
9696
|
+
.sx-models tr:last-child td { border-bottom: 0; }
|
|
9697
|
+
.sx-models td.no { color: var(--text-2); }
|
|
9698
|
+
.sx-models tr.pick td:first-child { color: var(--phosphor); font-weight: 600; }
|
|
9699
|
+
|
|
9700
|
+
/* 1.0.3 · Turning MADRE off: the key takes the accent under the pointer, like every key of its bar,
|
|
9701
|
+
and what stays on screen once it is off says so plainly (public/power.js). */
|
|
9702
|
+
.madre-off { position: fixed; inset: 0; z-index: 2147483000; display: grid; place-content: center; justify-items: center; gap: 10px; padding: 24px; text-align: center; background: var(--bg, #050605); color: var(--text); }
|
|
9703
|
+
.madre-off h1 { margin: 6px 0 0; font-size: 22px; font-weight: 600; }
|
|
9704
|
+
.madre-off p { margin: 0; max-width: 420px; color: var(--text-2); font-size: 14px; line-height: 1.5; }
|
|
9705
|
+
.madre-off .madre-off-stuck { color: var(--danger); }
|
|
9706
|
+
.madre-off-mark { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 14px; color: var(--text-2); background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
9707
|
+
.madre-off-mark svg { width: 24px; height: 24px; }
|
|
9708
|
+
html.madre-is-off body > :not(.madre-off) { visibility: hidden; }
|
|
9709
|
+
|
|
9710
|
+
/* 1.0.3 · Modules and Diagnostics lift less under the pointer: the key's own shadow and a slight
|
|
9711
|
+
one beneath, not the heavier one of the keys that are pressed (2026-10-17). */
|
|
9712
|
+
:root { --key-lift: rgba(0, 0, 0, .34); }
|
|
9713
|
+
:root[data-scheme="light"] { --key-lift: rgba(22, 30, 22, .16); }
|
|
9714
|
+
:root .shell .bar > :is(#modules-button, #mother-button, #code-button):is(:hover, :focus-visible) { box-shadow: var(--key-rest), 0 3px 8px -5px var(--key-lift) !important; }
|
|
9715
|
+
/* CODE under the pointer: its brackets take the accent, as every key's drawing does, and a slash
|
|
9716
|
+
draws itself between them. Open, the whole drawing stays in the accent, slash and all. */
|
|
9717
|
+
#code-button .code-slash { stroke-dasharray: 10; stroke-dashoffset: 10; opacity: 0; transition: stroke-dashoffset calc(240ms * var(--motion-scale, 1)) var(--ease-out), opacity calc(120ms * var(--motion-scale, 1)) var(--ease-out); }
|
|
9718
|
+
#code-button:is(:hover, :focus-visible, [aria-pressed="true"]) .code-slash { stroke-dashoffset: 0; opacity: 1; }
|
|
9719
|
+
:root[data-scheme] .shell .bar > #code-button:is(:hover, :focus-visible, [aria-pressed="true"]) svg { color: var(--phosphor); }
|
|
9720
|
+
:root[data-scheme="light"] .shell .bar > #code-button:is(:hover, :focus-visible, [aria-pressed="true"]) svg { color: color-mix(in srgb, var(--phosphor) 70%, #000000); }
|
|
9721
|
+
@media (prefers-reduced-motion: reduce) { #code-button .code-slash { transition: none; } }
|
|
9722
|
+
|
|
9723
|
+
/* 1.0.3 · The code workspace: the viewer docked beside the conversation (public/app.js, «the code
|
|
9724
|
+
workspace»). Over the room nothing of this shows; docked, the files sit at its side, the open files
|
|
9725
|
+
are tabs, a quiet path says where the caret is, an agent's changes wear the agent's colour, and a
|
|
9726
|
+
page or a document can show what it makes beside its text. The room's own pieces throughout. */
|
|
9727
|
+
dialog.viewer > .code-shell { flex: 1 1 auto; display: flex; min-height: 0; min-width: 0; }
|
|
9728
|
+
dialog.viewer > .code-shell > .viewer-body { flex: 1 1 auto; height: auto; min-height: 0; min-width: 0; }
|
|
9729
|
+
.code-files { flex: none; width: 216px; display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--line); background: color-mix(in srgb, var(--text) 2%, transparent); }
|
|
9730
|
+
.code-files[hidden] { display: none; }
|
|
9731
|
+
.code-files-head { display: flex; align-items: center; gap: 6px; padding: 10px 10px 6px 14px; font-family: var(--read); font-size: 12px; font-weight: 600; color: var(--text-2); }
|
|
9732
|
+
.code-files-fold { margin-left: auto; width: 24px; height: 24px; display: grid; place-items: center; border: 0; border-radius: 7px; background: transparent; color: var(--text-3); cursor: pointer; }
|
|
9733
|
+
.code-files-fold:hover { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); }
|
|
9734
|
+
.code-files-fold svg { width: var(--ico-sm); height: var(--ico-sm); }
|
|
9735
|
+
.code-files-search { margin: 0 10px 8px; height: 30px; padding: 0 10px; border: 0; border-radius: 9px; background: color-mix(in srgb, var(--text) 6%, transparent); color: var(--text); font: inherit; font-family: var(--read); font-size: 12.5px; outline: none; }
|
|
9736
|
+
.code-files-search:focus { box-shadow: 0 0 0 2px color-mix(in srgb, var(--phosphor) 35%, transparent); }
|
|
9737
|
+
.code-files > .code-files-list { flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 0 6px 12px; }
|
|
9738
|
+
.code-files-list { list-style: none; margin: 0; padding: 0; }
|
|
9739
|
+
.code-file { width: 100%; display: flex; align-items: center; gap: 6px; min-height: 26px; padding: 3px 8px 3px calc(8px + var(--depth, 0) * 12px); border: 0; border-radius: 7px; background: transparent; color: var(--text); font-family: var(--mono); font-size: 12px; text-align: left; cursor: pointer; }
|
|
9740
|
+
.code-file:hover { background: color-mix(in srgb, var(--text) 6%, transparent); }
|
|
9741
|
+
.code-file.on { background: color-mix(in srgb, var(--phosphor) 13%, transparent); color: var(--phosphor); }
|
|
9742
|
+
.code-file-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
9743
|
+
.code-file-dir { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-3); font-size: 10.5px; direction: rtl; text-align: left; }
|
|
9744
|
+
.code-folder { color: var(--text-2); }
|
|
9745
|
+
.code-folder-caret { flex: none; display: inline-grid; place-items: center; width: var(--ico-xs); height: var(--ico-xs); color: var(--text-3); }
|
|
9746
|
+
.code-folder-caret svg { display: block; width: var(--ico-xs); height: var(--ico-xs); rotate: -90deg; transition: rotate var(--motion-fast) var(--ease-out); }
|
|
9747
|
+
.code-folder[aria-expanded="true"] .code-folder-caret svg { rotate: 0deg; }
|
|
9748
|
+
@media (prefers-reduced-motion: reduce) { .code-folder-caret svg { transition: none; } }
|
|
9749
|
+
.code-file-agent { flex: none; width: 7px; height: 7px; margin-left: auto; border-radius: 50%; background: var(--agent, var(--text-3)); }
|
|
9750
|
+
.code-files-empty { padding: 8px 12px; color: var(--text-3); font-family: var(--read); font-size: 12px; }
|
|
9751
|
+
|
|
9752
|
+
.code-tabs { flex: none; display: flex; align-items: flex-end; gap: 2px; padding: 6px 10px 0; overflow-x: auto; scrollbar-width: none; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--text) 2.5%, transparent); }
|
|
9753
|
+
.code-tabs::-webkit-scrollbar { display: none; }
|
|
9754
|
+
.code-tabs[hidden] { display: none; }
|
|
9755
|
+
.code-tab { flex: none; display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 6px 0 4px; border-radius: 9px 9px 0 0; color: var(--text-2); }
|
|
9756
|
+
.code-tab.on { background: var(--panel); color: var(--text); box-shadow: 0 -1px 0 var(--line), 1px 0 0 var(--line), -1px 0 0 var(--line); }
|
|
9757
|
+
.code-tab-name { height: 28px; padding: 0 6px; border: 0; background: transparent; color: inherit; font-family: var(--mono); font-size: 11.5px; cursor: pointer; }
|
|
9758
|
+
.code-tab.on .code-tab-name { font-weight: 600; cursor: default; }
|
|
9759
|
+
.code-tab-dirty { width: 7px; height: 7px; border-radius: 50%; background: var(--text-2); }
|
|
9760
|
+
.code-tab-agent { width: 7px; height: 7px; border-radius: 50%; background: var(--agent); }
|
|
9761
|
+
.code-tab-close { width: 20px; height: 20px; display: grid; place-items: center; border: 0; border-radius: 6px; background: transparent; color: var(--text-3); cursor: pointer; opacity: 0; transition: opacity var(--motion-fast) var(--ease-out); }
|
|
9762
|
+
.code-tab:hover .code-tab-close, .code-tab.on .code-tab-close, .code-tab-close:focus-visible { opacity: 1; }
|
|
9763
|
+
.code-tab-close:hover { color: var(--text); background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
9764
|
+
.code-tab-close svg { width: var(--ico-xs); height: var(--ico-xs); }
|
|
9765
|
+
|
|
9766
|
+
.code-crumbs { flex: none; display: flex; align-items: center; gap: 12px; min-height: 30px; padding: 4px 16px; border-bottom: 1px solid var(--line); font-family: var(--mono); font-size: 11px; color: var(--text-3); }
|
|
9767
|
+
.code-crumbs[hidden] { display: none; }
|
|
9768
|
+
.code-crumbs-path { display: flex; align-items: center; gap: 6px; min-width: 0; overflow: hidden; white-space: nowrap; }
|
|
9769
|
+
.code-crumbs-path i { font-style: normal; opacity: .6; }
|
|
9770
|
+
.code-crumbs-path b { color: var(--text-2); font-weight: 600; }
|
|
9771
|
+
.code-crumbs-path .code-crumbs-symbol { color: var(--text); }
|
|
9772
|
+
.code-crumbs-changes { margin-left: auto; flex: none; display: inline-flex; align-items: center; gap: 6px; color: var(--agent); }
|
|
9773
|
+
.code-crumbs-changes .code-file-agent { margin: 0; }
|
|
9774
|
+
.code-crumbs-step { display: inline-grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: var(--chip-r, 7px); background: color-mix(in srgb, var(--text) 6%, transparent); color: var(--text-2); cursor: pointer; transition: background-color var(--motion-fast) var(--ease-out), color var(--motion-fast) var(--ease-out); }
|
|
9775
|
+
.code-crumbs-step:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--text) 11%, transparent); color: var(--text); outline: 0; }
|
|
9776
|
+
.code-crumbs-step svg { display: block; width: var(--ico-xs); height: var(--ico-xs); }
|
|
9777
|
+
.code-crumbs-step.back svg { rotate: 90deg; }
|
|
9778
|
+
.code-crumbs-step.on svg { rotate: -90deg; }
|
|
9779
|
+
|
|
9780
|
+
/* An agent's change, in its colour: a band at the line numbers, a light ground on the lines, and a
|
|
9781
|
+
card under them with what was there before and the three answers. */
|
|
9782
|
+
.viewer-body pre.code .ln.ag { color: var(--ag); box-shadow: inset 3px 0 0 var(--ag); }
|
|
9783
|
+
.viewer-body pre.code .tx.ag { background: color-mix(in srgb, var(--ag) 9%, transparent); }
|
|
9784
|
+
/* An agent's change, under its lines: a card of the windows' own material (Settings' cards), who
|
|
9785
|
+
changed them as the agent's tag (no edge in its colour: on a round card it read as an eyebrow), what
|
|
9786
|
+
was there before as lines with their «−» (never crossed out: it has to be read), and three tags of a
|
|
9787
|
+
flat tone, each with its drawing at the size of a drawing beside a word. */
|
|
9788
|
+
.code-change { grid-column: 1 / -1; display: grid; gap: 8px; margin: 6px 16px 12px 52px; padding: 10px 12px; border-radius: 12px; background: var(--surface, var(--panel)); box-shadow: var(--bevel, none), var(--float-sm, 0 6px 16px -10px rgba(0, 0, 0, .4)); white-space: normal; font-family: var(--read); }
|
|
9789
|
+
.code-change-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; font-size: 12.5px; line-height: 1.4; color: var(--text-2); }
|
|
9790
|
+
.code-change-who { padding: 1px 7px; border-radius: var(--chip-r, 7px); background: color-mix(in srgb, var(--agent) 14%, transparent); color: var(--agent); font-family: var(--mono); font-size: 11px; font-weight: 600; letter-spacing: .02em; }
|
|
9791
|
+
.code-change-was { display: grid; margin: 0; padding: 6px 0; max-height: 12em; overflow: auto; border-radius: 8px; background: color-mix(in srgb, var(--danger) 6%, transparent); color: var(--text-2); font-family: var(--mono); font-size: 12px; line-height: 1.6; white-space: pre; }
|
|
9792
|
+
.code-change-was > span { padding: 0 10px 0 26px; position: relative; }
|
|
9793
|
+
.code-change-was > span::before { content: '−'; position: absolute; left: 10px; color: color-mix(in srgb, var(--danger) 80%, var(--text-2)); }
|
|
9794
|
+
.code-change-acts { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
9795
|
+
.code-change-act { --tone: var(--text); display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 11px 0 9px; border: 0; border-radius: var(--chip-r, 7px); background: color-mix(in srgb, var(--tone) 12%, transparent); color: var(--tone); font-family: var(--read); font-size: 12.5px; font-weight: 550; white-space: nowrap; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-out); }
|
|
9796
|
+
.code-change-act:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--tone) 20%, transparent); outline: 0; }
|
|
9797
|
+
.code-change-act:disabled { opacity: .5; cursor: default; }
|
|
9798
|
+
.code-change-act.keep { --tone: var(--phosphor); }
|
|
9799
|
+
.code-change-act.undo { --tone: var(--text); background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
9800
|
+
.code-change-act.undo:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--text) 12%, transparent); }
|
|
9801
|
+
.code-change-act.why { --tone: var(--agent); }
|
|
9802
|
+
.code-change-ico { display: inline-grid; place-items: center; flex: none; }
|
|
9803
|
+
.code-change-ico svg { display: block; width: var(--ico-sm); height: var(--ico-sm); }
|
|
9804
|
+
:root[data-scheme="light"] .code-change-act.keep { color: color-mix(in srgb, var(--phosphor) 72%, #000000); }
|
|
9805
|
+
.code-editor .ed-gutter-inner > .mk { color: var(--mk); box-shadow: inset 3px 0 0 var(--mk); background: color-mix(in srgb, var(--mk) 10%, transparent); }
|
|
9806
|
+
|
|
9807
|
+
/* Side by side: the text and what it makes. */
|
|
9808
|
+
.viewer-body.with-beside { display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(280px, 46%); padding: 0; overflow: hidden; }
|
|
9809
|
+
.viewer-body.with-beside > :first-child { min-height: 0; height: 100%; overflow: auto; }
|
|
9810
|
+
.code-beside { display: flex; flex-direction: column; min-height: 0; border-left: 1px solid var(--line); background: color-mix(in srgb, var(--text) 2%, transparent); }
|
|
9811
|
+
.code-beside-head { flex: none; display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-bottom: 1px solid var(--line); font-family: var(--read); font-size: 12px; color: var(--text-2); }
|
|
9812
|
+
.code-beside-head b { color: var(--text); font-weight: 600; }
|
|
9813
|
+
.code-beside-live { margin-left: auto; font-family: var(--mono); font-size: 10px; color: var(--phosphor); }
|
|
9814
|
+
.code-beside > iframe.ripley { flex: 1 1 auto; width: 100%; height: auto; min-height: 0; border-radius: 0; box-shadow: none; }
|
|
9815
|
+
.code-beside > .viewer-markdown { flex: 1 1 auto; min-height: 0; overflow: auto; width: auto; padding: 14px 18px 24px; font-size: 14.5px; }
|
|
9816
|
+
.code-beside-off { display: grid; gap: 12px; justify-items: start; padding: 18px; font-family: var(--read); font-size: 13px; line-height: 1.5; color: var(--text-2); }
|
|
9817
|
+
.code-beside-off p { margin: 0; }
|
|
9818
|
+
dialog.viewer .viewer-beside[aria-pressed="true"] { color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 14%, transparent); }
|
|
9819
|
+
|
|
9820
|
+
/* Nothing open yet. */
|
|
9821
|
+
.code-home { width: min(460px, 100%); display: grid; gap: 10px; justify-items: start; margin: 8vh auto 0; font-family: var(--read); }
|
|
9822
|
+
.code-home h3 { margin: 0; font-size: 18px; font-weight: 600; color: var(--text); }
|
|
9823
|
+
.code-home h4 { margin: 14px 0 0; font-size: 12px; font-weight: 600; color: var(--text-2); }
|
|
9824
|
+
.code-home p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--text-2); }
|
|
9825
|
+
.code-home-list { list-style: none; margin: 0; padding: 0; width: 100%; display: grid; gap: 2px; }
|
|
9826
|
+
.code-home-list .code-file { gap: 8px; }
|
|
9827
|
+
.code-home-list .code-file small { margin-left: auto; flex: none; color: var(--text-3); font-size: 10.5px; }
|
|
9828
|
+
.code-home-list .code-file .code-file-agent { margin: 0; }
|
|
9829
|
+
|
|
9830
|
+
/* ⌘P */
|
|
9831
|
+
.quick-open { position: fixed; z-index: 90; inset: 14vh auto auto 50%; transform: translateX(-50%); width: min(560px, calc(100vw - 32px)); margin: 0; padding: 0; border: 1px solid var(--line-2); border-radius: 14px; background: var(--panel); color: var(--text); box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .55); overflow: hidden; }
|
|
9832
|
+
.quick-open[hidden] { display: none; }
|
|
9833
|
+
.quick-open-input { width: 100%; height: 48px; padding: 0 16px; border: 0; border-bottom: 1px solid var(--line); background: transparent; color: var(--text); font: inherit; font-family: var(--read); font-size: 15px; outline: none; }
|
|
9834
|
+
.quick-open-list { list-style: none; margin: 0; padding: 6px; max-height: min(52vh, 420px); overflow: auto; }
|
|
9835
|
+
.quick-open-item { display: flex; align-items: baseline; gap: 10px; padding: 8px 10px; border-radius: 9px; cursor: pointer; }
|
|
9836
|
+
.quick-open-item b { font-family: var(--mono); font-size: 12.5px; font-weight: 600; }
|
|
9837
|
+
.quick-open-item span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-3); font-family: var(--mono); font-size: 11px; }
|
|
9838
|
+
.quick-open-item .code-file-agent { align-self: center; }
|
|
9839
|
+
.quick-open-item.on, .quick-open-item:hover { background: color-mix(in srgb, var(--phosphor) 12%, transparent); }
|
|
9840
|
+
.quick-open-empty { padding: 12px; color: var(--text-3); font-family: var(--read); font-size: 13px; }
|
|
9841
|
+
|
|
9842
|
+
/* The verbs of the ask card: a row of flat-tone chips above the suggestions. */
|
|
9843
|
+
.ask-actions { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 2px; }
|
|
9844
|
+
.ask-action { height: 28px; padding: 0 11px; border: 0; border-radius: var(--chip-r, 7px); background: color-mix(in srgb, var(--phosphor) 14%, var(--chip-ground, transparent)); color: var(--phosphor); font-family: var(--read); font-size: 12.5px; font-weight: 600; cursor: pointer; }
|
|
9845
|
+
.ask-action:hover, .ask-action:focus-visible { background: color-mix(in srgb, var(--phosphor) 24%, var(--chip-ground, transparent)); outline: 0; }
|
|
9846
|
+
@media (prefers-reduced-motion: reduce) { .code-tab-close { transition: none; } }
|
|
9847
|
+
.viewer-body.with-beside > :not(.code-beside) { grid-column: 1; grid-row: 1; }
|
|
9848
|
+
.viewer-body.with-beside > .code-beside { grid-column: 2; grid-row: 1; }
|
|
9849
|
+
.code-crumbs .code-files-show { margin: 0 -4px 0 -8px; }
|
|
9850
|
+
.viewer-body.with-beside { grid-template-rows: minmax(0, 1fr); }
|
|
9851
|
+
.viewer-body.with-beside > pre.code { align-content: start; }
|
|
9852
|
+
.viewer-body.with-beside { place-items: stretch; }
|
|
9853
|
+
/* Narrow, what the code makes goes under it. */
|
|
9854
|
+
.viewer-body.with-beside.stacked { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) minmax(0, 1fr); }
|
|
9855
|
+
.viewer-body.with-beside.stacked > .code-beside { grid-column: 1; grid-row: 2; border-left: 0; border-top: 1px solid var(--line); }
|
|
9856
|
+
/* The header of the code workspace: the tabs and the path under it already name the file, so the
|
|
9857
|
+
header keeps only its tools; too narrow for their words, they keep their drawings, and past that
|
|
9858
|
+
it takes two lines instead of going out of the window: the window's keys always on the top one,
|
|
9859
|
+
the tools under them (wrap-reverse sends what does not fit, the last keys, upwards; narrower
|
|
9860
|
+
still, the spacer fills the top line beside the window's keys so every tool goes below). */
|
|
9861
|
+
dialog.viewer.code:has(> .code-crumbs:not([hidden])) > .viewer-head > :is(#viewer-path, #viewer-lang) { display: none; }
|
|
9862
|
+
dialog.viewer.code > .viewer-head { flex-wrap: wrap-reverse; row-gap: 6px; justify-content: flex-end; }
|
|
9863
|
+
@container viewerhead (max-width: 420px) {
|
|
9864
|
+
dialog.viewer.code > .viewer-head > .viewer-spacer { order: 1; flex: 1 1 calc(100% - 140px); }
|
|
9865
|
+
dialog.viewer.code > .viewer-head > .surface-modes { order: 2; }
|
|
9866
|
+
}
|
|
9867
|
+
.viewer-beside { display: inline-flex; align-items: center; justify-content: center; }
|
|
9868
|
+
.viewer-beside > svg { display: none; width: var(--ico-sm); height: var(--ico-sm); }
|
|
9869
|
+
@container viewerhead (max-width: 620px) {
|
|
9870
|
+
.viewer-head > .viewer-beside { padding: 4px 7px; }
|
|
9871
|
+
.viewer-head > .viewer-beside > svg { display: block; }
|
|
9872
|
+
.viewer-head > .viewer-beside > span { display: none; }
|
|
9873
|
+
dialog.viewer .viewer-head .viewer-seg .viewer-open { font-size: 0; padding: 0 9px; letter-spacing: 0; }
|
|
9874
|
+
dialog.viewer .viewer-head .viewer-seg .viewer-open .tail-mark { margin-left: 0; }
|
|
9875
|
+
dialog.viewer .viewer-head .viewer-seg-btn { padding: 0 9px; }
|
|
9876
|
+
.viewer-head > .viewer-mode { padding: 5px 8px; letter-spacing: .08em; }
|
|
9877
|
+
.viewer-head > .surface-modes { margin-left: 0; }
|
|
9878
|
+
}
|
|
9879
|
+
|
|
9880
|
+
/* ==========================================================================================
|
|
9881
|
+
1.0.3 · SIGNS DRAWN, THE AGENT ASKED, THE CORE'S SCROLL (2026-10-17)
|
|
9882
|
+
------------------------------------------------------------------------------------------
|
|
9883
|
+
↗ and ▾ at the end of a key's words and ◉ at the start of a label are drawn (app.js, tailMark
|
|
9884
|
+
and leadWords), at the size of a mark; the folders' and the folds' carets are the chooser's
|
|
9885
|
+
chevron, turned by their state. Asking about code, the agent chosen is lit and the rest are
|
|
9886
|
+
quietly off. And the core scrolls at its window's edge, never over its cards.
|
|
9887
|
+
========================================================================================== */
|
|
9888
|
+
.tail-mark { display: inline-grid; place-items: center; width: var(--ico-xs); height: var(--ico-xs); margin-left: 3px; vertical-align: -2px; flex: none; }
|
|
9889
|
+
.tail-mark svg { display: block; width: 100%; height: 100%; }
|
|
9890
|
+
.lead-mark { display: inline-grid; place-items: center; width: var(--ico-xs); height: var(--ico-xs); margin-right: 6px; vertical-align: -2px; flex: none; }
|
|
9891
|
+
.lead-mark svg { display: block; width: 100%; height: 100%; }
|
|
9892
|
+
.tree-body .node .caret { display: inline-grid; place-items: center; width: var(--ico-xs); height: var(--ico-xs); font-size: 0; }
|
|
9893
|
+
.tree-body .node .caret svg { display: block; width: var(--ico-xs); height: var(--ico-xs); rotate: -90deg; transition: rotate var(--motion-fast) var(--ease-out); }
|
|
9894
|
+
.tree-body li[aria-expanded="true"] > .node .caret svg { rotate: 0deg; }
|
|
9895
|
+
.card-fold > summary .caret { display: inline-flex; align-items: center; gap: 4px; }
|
|
9896
|
+
.card-fold > summary .caret-mark { display: inline-grid; place-items: center; width: var(--ico-xs); height: var(--ico-xs); }
|
|
9897
|
+
.card-fold > summary .caret-mark svg { display: block; width: 100%; height: 100%; rotate: -90deg; transition: rotate var(--motion-fast) var(--ease-out); }
|
|
9898
|
+
.card-fold[open] > summary .caret-mark svg { rotate: 0deg; }
|
|
9899
|
+
@media (prefers-reduced-motion: reduce) { .tree-body .node .caret svg, .card-fold > summary .caret-mark svg { transition: none; } }
|
|
9900
|
+
|
|
9901
|
+
.ask-card .ask-crew .ask-agent { transition: opacity var(--motion-fast) var(--ease-out), filter var(--motion-fast) var(--ease-out), box-shadow var(--motion-fast) var(--ease-out), transform var(--motion-fast) var(--ease-out); }
|
|
9902
|
+
.ask-card .ask-crew .ask-agent[aria-checked="false"] { opacity: .4; filter: grayscale(.9); box-shadow: none !important; }
|
|
9903
|
+
.ask-card .ask-crew .ask-agent[aria-checked="false"]:is(:hover, :focus-visible) { opacity: .75; filter: grayscale(.35); }
|
|
9904
|
+
.ask-card .ask-crew .ask-agent[aria-checked="true"] { opacity: 1; filter: none; box-shadow: 0 0 0 2px var(--surface, var(--panel)), 0 0 0 3.5px var(--agent), 0 0 14px -2px color-mix(in srgb, var(--agent) 55%, transparent) !important; }
|
|
9905
|
+
@media (prefers-reduced-motion: reduce) { .ask-card .ask-crew .ask-agent { transition: none; } }
|
|
9906
|
+
|
|
9907
|
+
dialog#core { --core-pad: 22px; }
|
|
9908
|
+
dialog#core .core-body { padding-inline: var(--core-pad); }
|
|
9909
|
+
dialog#core .core-panes { margin-inline: calc(-1 * var(--core-pad)); padding-inline: calc(var(--core-pad) + 2px); scrollbar-gutter: stable; }
|
|
9910
|
+
@media (max-width: 720px) { dialog#core { --core-pad: 14px; } }
|
|
9911
|
+
|
|
9912
|
+
/* ==========================================================================================
|
|
9913
|
+
YOUR OWN PICTURE (1.0.3) · --wp-custom
|
|
9914
|
+
------------------------------------------------------------------------------------------
|
|
9915
|
+
The same layers as the wallpapers that ship — a veil, or a mesh of the picture's own colours,
|
|
9916
|
+
its tint for the room's material, its blur — with the colours the page took from the picture
|
|
9917
|
+
(public/wallpaper.js, paintCustomWall: --wpc-* on the root, as "r g b") and the point of it that
|
|
9918
|
+
stays in view (--wpc-pos). Until they arrive, a plain ground of the theme.
|
|
9919
|
+
========================================================================================== */
|
|
9920
|
+
:root, .look-preview[data-scheme="dark"] {
|
|
9921
|
+
--wp-custom: linear-gradient(rgb(var(--wpc-veil-d, 12 12 12) / min(.96, calc(.68 * var(--veil-k, 1)))), rgb(var(--wpc-veil-d, 12 12 12) / min(.97, calc(.78 * var(--veil-k, 1))))), var(--wpc-url, none) var(--wpc-pos, 50% 50%) / cover no-repeat, rgb(var(--wpc-veil-d, 12 12 12));
|
|
9922
|
+
}
|
|
9923
|
+
:root[data-scheme="light"], .look-preview[data-scheme="light"] {
|
|
9924
|
+
--wp-custom: linear-gradient(rgb(var(--wpc-veil-l, 246 246 246) / min(.96, calc(.52 * var(--veil-k, 1)))), rgb(var(--wpc-veil-l, 246 246 246) / min(.97, calc(.64 * var(--veil-k, 1))))), var(--wpc-url, none) var(--wpc-pos, 50% 50%) / cover no-repeat, rgb(var(--wpc-veil-l, 241 241 241));
|
|
9925
|
+
}
|
|
9926
|
+
:is(:root:not([data-scheme="light"]), .look-preview[data-scheme="dark"])[data-wp-style="mesh"] {
|
|
9927
|
+
--wp-custom: radial-gradient(75% 65% at 12% 8%, rgb(var(--wpc-m1-d, 32 32 32) / min(.95, calc(.9 * var(--veil-k, 1)))), transparent 72%), radial-gradient(65% 75% at 92% 28%, rgb(var(--wpc-m2-d, 44 44 44) / min(.95, calc(.9 * var(--veil-k, 1)))), transparent 72%), radial-gradient(85% 65% at 42% 102%, rgb(var(--wpc-m3-d, 18 18 18) / min(.95, calc(.9 * var(--veil-k, 1)))), transparent 74%), linear-gradient(rgb(var(--wpc-veil-d, 12 12 12) / min(.9, calc(.56 * var(--veil-k, 1)))), rgb(var(--wpc-veil-d, 12 12 12) / min(.9, calc(.56 * var(--veil-k, 1))))), var(--wpc-url, none) var(--wpc-pos, 50% 50%) / cover no-repeat, rgb(var(--wpc-veil-d, 12 12 12));
|
|
9928
|
+
}
|
|
9929
|
+
:is(:root[data-scheme="light"], .look-preview[data-scheme="light"])[data-wp-style="mesh"] {
|
|
9930
|
+
--wp-custom: radial-gradient(75% 65% at 12% 8%, rgb(var(--wpc-m1-l, 240 240 240) / min(.95, calc(.78 * var(--veil-k, 1)))), transparent 72%), radial-gradient(65% 75% at 92% 28%, rgb(var(--wpc-m2-l, 246 246 246) / min(.95, calc(.78 * var(--veil-k, 1)))), transparent 72%), radial-gradient(85% 65% at 42% 102%, rgb(var(--wpc-m3-l, 236 236 236) / min(.95, calc(.78 * var(--veil-k, 1)))), transparent 74%), linear-gradient(rgb(var(--wpc-veil-l, 246 246 246) / min(.9, calc(.42 * var(--veil-k, 1)))), rgb(var(--wpc-veil-l, 246 246 246) / min(.9, calc(.42 * var(--veil-k, 1))))), var(--wpc-url, none) var(--wpc-pos, 50% 50%) / cover no-repeat, rgb(var(--wpc-veil-l, 241 241 241));
|
|
9931
|
+
}
|
|
9932
|
+
:root[data-wallpaper="custom"] .shell::before { background: var(--wp-custom); }
|
|
9933
|
+
.look-preview[data-wallpaper="custom"], .paper[data-wp="custom"]:not(.paper-add) .paper-swatch { background: var(--wp-custom); }
|
|
9934
|
+
.look-preview[data-wallpaper="custom"]::before { background: var(--wp-custom); }
|
|
9935
|
+
:is(:root, .look-preview)[data-wallpaper="custom"] { --tint: rgb(var(--wpc-tint-d, 27 27 27)); }
|
|
9936
|
+
:is(:root, .look-preview)[data-scheme="light"][data-wallpaper="custom"] { --tint: rgb(var(--wpc-tint-l, 245 245 245)); }
|
|
9937
|
+
:is(:root[data-wallpaper="custom"], .look-preview[data-wallpaper="custom"]) { --wp-blur-on: var(--wp-blur, 0px); }
|
|
9938
|
+
:root[data-wallpaper="custom"] .shell::before { inset: calc(-2 * var(--wp-blur-on, 0px)); filter: blur(var(--wp-blur-on, 0px)); }
|
|
9939
|
+
.look-preview[data-wallpaper="custom"] { background: none !important; position: relative; isolation: isolate; overflow: hidden; }
|
|
9940
|
+
.look-preview[data-wallpaper="custom"]::before { content: ""; position: absolute; inset: calc(-2 * var(--wp-blur-on, 0px)); z-index: -1; filter: blur(var(--wp-blur-on, 0px)); pointer-events: none; }
|
|
9941
|
+
|
|
9942
|
+
/* Its tile: the picture once it is here; before, a «+» on the ground, the way to add it. Busy while
|
|
9943
|
+
the page prepares and keeps it. */
|
|
9944
|
+
.paper.paper-add .paper-swatch { display: grid; place-items: center; background: color-mix(in srgb, var(--text) 5%, transparent); box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--text) 16%, transparent); color: var(--text-2); }
|
|
9945
|
+
.paper.paper-add .paper-swatch svg { width: var(--ico-md); height: var(--ico-md); }
|
|
9946
|
+
.paper.paper-add:is(:hover, :focus-visible) .paper-swatch { color: var(--phosphor); box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--phosphor) 50%, transparent); }
|
|
9947
|
+
.paper.busy { pointer-events: none; }
|
|
9948
|
+
.paper.busy .paper-swatch { animation: paper-busy 1.1s ease-in-out infinite; }
|
|
9949
|
+
@keyframes paper-busy { 50% { opacity: .45; } }
|
|
9950
|
+
@media (prefers-reduced-motion: reduce) { .paper.busy .paper-swatch { animation: none; opacity: .6; } }
|
|
9951
|
+
|
|
9952
|
+
/* Framing it: the whole picture, and over it the part the screen shows, carried by hand. What the
|
|
9953
|
+
screen does not show is dimmed; the frame keeps a white line and the window's own corner. */
|
|
9954
|
+
.wall-tools { display: grid; gap: 10px; margin-top: 4px; padding-top: 12px; border-top: 1px solid var(--line); }
|
|
9955
|
+
.wall-tools-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
|
|
9956
|
+
.wall-tools-words { display: grid; gap: 2px; min-width: 0; }
|
|
9957
|
+
.wall-tools-words b { font-family: var(--read); font-size: 12.5px; font-weight: 600; color: var(--text); }
|
|
9958
|
+
.wall-tools-hint { font-family: var(--read); font-size: 12px; line-height: 1.4; color: var(--text-2); }
|
|
9959
|
+
.wall-frame { display: grid; place-items: center; padding: 10px; border-radius: 12px; background: color-mix(in srgb, var(--text) 5%, transparent); }
|
|
9960
|
+
.wall-frame-fit { position: relative; display: block; line-height: 0; border-radius: 8px; overflow: hidden; touch-action: none; user-select: none; -webkit-user-select: none; }
|
|
9961
|
+
.wall-frame-pic { display: block; max-width: 100%; max-height: 150px; width: auto; height: auto; }
|
|
9962
|
+
.wall-frame-view { position: absolute; border-radius: 6px; box-shadow: 0 0 0 2px #ffffff, 0 0 0 4000px rgb(0 0 0 / .42); outline: 0; }
|
|
9963
|
+
.wall-frame:not([data-free="none"]) .wall-frame-fit { cursor: grab; }
|
|
9964
|
+
.wall-frame.moving .wall-frame-fit { cursor: grabbing; }
|
|
9965
|
+
.wall-frame-view:focus-visible { box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px color-mix(in srgb, var(--phosphor) 70%, transparent), 0 0 0 4000px rgb(0 0 0 / .42); }
|
|
9966
|
+
.wall-tools-acts { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
9967
|
+
|
|
9968
|
+
/* ==========================================================================================
|
|
9969
|
+
NEURAL MODE (1.0.3) · its key in the maps' heads, and its invitation
|
|
9970
|
+
------------------------------------------------------------------------------------------
|
|
9971
|
+
The Memory map and the Projects map can be drawn as the neurons of a brain (public/neural.js,
|
|
9972
|
+
nostromo-engine.js drawNeural). The key sits with the maps' other keys and takes their shape;
|
|
9973
|
+
on, its neuron fills and takes the cold light of the mode. When the machine does not give the
|
|
9974
|
+
map its frames, the key breathes and a card under it offers the mode: what it is, try it or not.
|
|
9975
|
+
========================================================================================== */
|
|
9976
|
+
:root { --neural: #56c8ff; --neural-ink: #021018; }
|
|
9977
|
+
.nostromo-head .neural-key { display: inline-flex; align-items: center; gap: 6px; }
|
|
9978
|
+
.nostromo-head .neural-key svg { flex: none; width: var(--ico-sm); height: var(--ico-sm); }
|
|
9979
|
+
/* Its word is written as it reads (the head lowercases its keys and lifts the first letter, which here is the drawing). */
|
|
9980
|
+
:is(#nostromo, .mv) .nostromo-actions .neural-key { text-transform: none; }
|
|
9981
|
+
:is(#nostromo, .mv) .nostromo-actions .neural-key[aria-pressed="true"] { color: var(--neural-ink); background: var(--neural); }
|
|
9982
|
+
:is(#nostromo, .mv) .nostromo-actions .neural-key[aria-pressed="true"]:hover { background: color-mix(in srgb, var(--neural) 86%, #ffffff); }
|
|
9983
|
+
.nostromo-head .neural-key[aria-pressed="true"] .ic-f { fill: currentColor; }
|
|
9984
|
+
.nostromo-head .neural-key.invite { animation: neural-breathe calc(2400ms * var(--motion-scale, 1)) ease-in-out infinite; }
|
|
9985
|
+
@keyframes neural-breathe { 0%, 100% { box-shadow: 0 0 0 0 rgb(86 200 255 / 0); } 50% { box-shadow: 0 0 0 4px rgb(86 200 255 / .35), 0 0 22px rgb(86 200 255 / .3); } }
|
|
9986
|
+
.via-phone #nostromo-neural { display: none; }
|
|
9987
|
+
.neural-invite {
|
|
9988
|
+
position: absolute; z-index: 6; width: min(340px, calc(100% - 24px));
|
|
9989
|
+
display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 12px 12px; padding: 14px 14px 12px;
|
|
9990
|
+
border-radius: 14px; color: #eef3ff; font-family: var(--read); text-transform: none; letter-spacing: 0;
|
|
9991
|
+
background: rgb(8 14 26 / .92); -webkit-backdrop-filter: blur(16px) saturate(1.4); backdrop-filter: blur(16px) saturate(1.4);
|
|
9992
|
+
box-shadow: 0 0 0 .5px rgb(86 200 255 / .28), 0 18px 44px -18px rgb(0 0 0 / .7), 0 0 40px -12px rgb(86 200 255 / .28);
|
|
9993
|
+
animation: neural-invite-in calc(240ms * var(--motion-scale, 1)) var(--ease-glide, ease-out);
|
|
9994
|
+
}
|
|
9995
|
+
@keyframes neural-invite-in { from { opacity: 0; translate: 0 -6px; } to { opacity: 1; translate: 0 0; } }
|
|
9996
|
+
.neural-invite-mark { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 11px; color: var(--neural); background: radial-gradient(circle at 50% 45%, rgb(86 200 255 / .3), rgb(86 200 255 / .06) 70%); box-shadow: inset 0 0 0 .5px rgb(86 200 255 / .4); }
|
|
9997
|
+
.neural-invite-mark svg { width: var(--ico-md); height: var(--ico-md); }
|
|
9998
|
+
.neural-invite-words { display: grid; gap: 3px; align-content: center; min-width: 0; }
|
|
9999
|
+
.neural-invite-words b { font-size: 13.5px; font-weight: 600; color: #ffffff; }
|
|
10000
|
+
.neural-invite-words span { font-size: 12.5px; line-height: 1.45; color: rgb(220 232 255 / .72); }
|
|
10001
|
+
.neural-invite-acts { grid-column: 1 / -1; display: flex; justify-content: flex-end; gap: 8px; }
|
|
10002
|
+
/* Its two keys are its own: the map is dark in either theme, so they never take the page's. */
|
|
10003
|
+
.neural-invite :is(.neural-invite-go, .neural-invite-later) { height: 30px; padding: 0 14px; border: 0; border-radius: 9px; font-family: var(--read); font-size: 12.5px; font-weight: 600; letter-spacing: 0; cursor: pointer; transition: background-color var(--motion-fast) var(--ease-out); }
|
|
10004
|
+
.neural-invite .neural-invite-later { color: #eef3ff; background: rgb(255 255 255 / .08); }
|
|
10005
|
+
.neural-invite .neural-invite-later:is(:hover, :focus-visible) { background: rgb(255 255 255 / .15); outline: 0; }
|
|
10006
|
+
.neural-invite .neural-invite-go { color: var(--neural-ink); background: var(--neural); }
|
|
10007
|
+
.neural-invite .neural-invite-go:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--neural) 84%, #ffffff); outline: 0; }
|
|
10008
|
+
@media (prefers-reduced-motion: reduce) { .nostromo-head .neural-key.invite, .neural-invite { animation: none; } }
|
|
10009
|
+
|
|
10010
|
+
/* The maps' close (1.0.3): the same sunk track and turning cross as every window, in the dark the
|
|
10011
|
+
maps always stand on, whatever the room's theme. */
|
|
10012
|
+
:is(#nostromo, .mv) .nostromo-actions .surface-modes {
|
|
10013
|
+
--neu-hi: rgba(255, 255, 255, .07); --neu-lo: rgba(0, 0, 0, .72); --surface: #1b1e1b;
|
|
10014
|
+
--key-track: inset 1.5px 1.5px 4px var(--neu-lo), inset -1.5px -1.5px 4px var(--neu-hi);
|
|
10015
|
+
--key-rest: -2px -2px 5px var(--neu-hi), 3px 3px 7px var(--neu-lo);
|
|
10016
|
+
box-shadow: var(--key-track); background: rgb(255 255 255 / .04) !important;
|
|
10017
|
+
}
|
|
10018
|
+
:is(#nostromo, .mv) .nostromo-actions .surface-modes .surface-mode.close { color: rgb(242 241 238 / .78); }
|
|
10019
|
+
:is(#nostromo, .mv) .nostromo-actions .surface-modes .surface-mode.close:is(:hover, :focus-visible) { color: #ffffff; background: var(--surface); box-shadow: var(--key-rest); }
|
|
10020
|
+
|
|
10021
|
+
|
|
10022
|
+
/* The Market's offer in the conversation (2026-10-18, app.js offerModule): one card under the
|
|
10023
|
+
message that asked for what a module does — its drawing, what would help, and its keys. */
|
|
10024
|
+
#messages .system.market-offer { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 6px 12px; max-width: min(640px, 100%); margin: 4px auto 6px; padding: 12px 14px; border: 0; border-radius: 14px; text-align: left; background: var(--plane-solid, var(--panel)); box-shadow: 0 0 0 1px color-mix(in srgb, var(--acc, var(--phosphor)) 30%, transparent), 0 6px 18px -12px rgba(0, 0, 0, .4); font-family: var(--read); letter-spacing: 0; text-transform: none; }
|
|
10025
|
+
#messages .market-offer-words { display: grid; gap: 2px; min-width: 0; }
|
|
10026
|
+
#messages .market-offer-words b { font-size: 14px; font-weight: 650; color: var(--text); }
|
|
10027
|
+
#messages .market-offer-words span { font-size: 13px; line-height: 1.45; color: var(--text-2); }
|
|
10028
|
+
#messages .market-offer-acts { grid-column: 2; display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
|
|
10029
|
+
#messages .market-offer-acts button { padding: 6px 12px; border: 0; border-radius: 9px; font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer; color: var(--text); background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
10030
|
+
#messages .market-offer-acts button.primary { color: var(--acc-ink, var(--phosphor-ink, #0b0b0b)); background: var(--acc, var(--phosphor)); }
|
|
10031
|
+
#messages .market-offer-acts button.quiet { background: transparent; color: var(--text-3); }
|
|
10032
|
+
#messages .market-offer-acts button:disabled { opacity: .6; cursor: default; }
|
|
10033
|
+
/* Beside «Add a module», at the right: the push goes to whichever stands first. */
|
|
10034
|
+
.mods-head .mods-market { flex: none; height: 30px; padding: 0 12px; margin-left: auto; }
|
|
10035
|
+
.mods-head .mods-market + .mods-add { margin-left: 0; }
|
|
10036
|
+
|
|
10037
|
+
/* THE MARKET, full screen (market-view.js, 2026-10-18): the same store in Home and in a project.
|
|
10038
|
+
It takes the whole window, as a store does, over whatever was open; its own colors are the
|
|
10039
|
+
room's tokens, so it follows light and dark, and each module wears its own two colors. */
|
|
10040
|
+
html.mk-open, html.mk-open body { overflow: hidden; }
|
|
10041
|
+
/* The page's own first-time hints wait under the store and come back when it closes. */
|
|
10042
|
+
html.mk-open :is(.tour-hint, .tour-hint-away, .hint-spot) { visibility: hidden !important; }
|
|
10043
|
+
.mk { position: fixed; inset: 0; z-index: 2147482990; display: flex; flex-direction: column; background: var(--bg); color: var(--text); font-family: var(--read); outline: 0; opacity: 0; transform: scale(.985); transition: opacity calc(200ms * var(--motion-scale, 1)) ease, transform calc(240ms * var(--motion-scale, 1)) cubic-bezier(.2, .8, .2, 1); }
|
|
10044
|
+
.mk.in { opacity: 1; transform: none; }
|
|
10045
|
+
.mk button { font-family: inherit; }
|
|
10046
|
+
.mk-bar { position: relative; z-index: 2; display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 12px; padding: calc(10px + env(safe-area-inset-top, 0px)) 20px 10px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--bg) 84%, transparent); -webkit-backdrop-filter: saturate(1.4) blur(18px); backdrop-filter: saturate(1.4) blur(18px); }
|
|
10047
|
+
.mk-leave { justify-self: start; width: 34px; height: 34px; display: grid; place-items: center; border: 0; border-radius: 50%; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); cursor: pointer; }
|
|
10048
|
+
.mk-leave:hover { background: color-mix(in srgb, var(--text) 12%, transparent); }
|
|
10049
|
+
.mk-leave svg { width: 16px; height: 16px; }
|
|
10050
|
+
.mk-tabs { display: inline-flex; gap: 2px; padding: 3px; border-radius: 12px; background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
10051
|
+
.mk-tab { min-width: 104px; padding: 6px 18px; border: 0; border-radius: 9px; background: transparent; color: var(--text-2); font-size: 13.5px; font-weight: 600; cursor: pointer; }
|
|
10052
|
+
.mk-tab[aria-selected="true"] { background: var(--panel); color: var(--text); box-shadow: 0 1px 3px rgba(0, 0, 0, .18); }
|
|
10053
|
+
.mk-here { display: flex; align-items: baseline; gap: 8px; font-size: 14.5px; white-space: nowrap; }
|
|
10054
|
+
.mk-here span { color: var(--text-2); font-size: 13.5px; }
|
|
10055
|
+
.mk-search { justify-self: end; width: min(280px, 100%); }
|
|
10056
|
+
.mk-search[hidden] { display: flex !important; visibility: hidden; }
|
|
10057
|
+
.mk-main { flex: 1; overflow-y: auto; overscroll-behavior: contain; }
|
|
10058
|
+
.mk-page { width: min(1120px, 100%); margin: 0 auto; padding: 30px 32px calc(72px + env(safe-area-inset-bottom, 0px)); display: grid; grid-template-columns: minmax(0, 1fr); gap: 36px; box-sizing: border-box; }
|
|
10059
|
+
.mk-page > * { min-width: 0; }
|
|
10060
|
+
.mk-head h1 { margin: 0; font-size: clamp(30px, 4vw, 40px); font-weight: 760; letter-spacing: -.02em; line-height: 1.05; }
|
|
10061
|
+
.mk-head p { margin: 8px 0 0; max-width: 72ch; color: var(--text-2); font-size: 15px; line-height: 1.5; }
|
|
10062
|
+
.mk-empty { margin: 0; color: var(--text-2); font-size: 14.5px; }
|
|
10063
|
+
|
|
10064
|
+
/* A module's app icon: its drawing in white on its own colors, rounded like the icons on a phone. */
|
|
10065
|
+
.mk-icon { --mk-size: 56px; flex: none; display: grid; place-items: center; width: var(--mk-size); height: var(--mk-size); border-radius: calc(var(--mk-size) * .235); color: #fff; background: linear-gradient(160deg, var(--mk-a, #94a3b8), var(--mk-b, #334155)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .3), inset 0 -1px 0 rgba(0, 0, 0, .14), 0 1px 2px rgba(0, 0, 0, .14), 0 8px 18px -10px var(--mk-b, #334155); }
|
|
10066
|
+
.mk-icon svg { width: 58%; height: 58%; filter: drop-shadow(0 1px 1px rgba(0, 0, 0, .18)); }
|
|
10067
|
+
|
|
10068
|
+
/* The carousel: one featured module at a time, its picture beside what it does. */
|
|
10069
|
+
.mk-carousel { position: relative; }
|
|
10070
|
+
.mk-track { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; border-radius: 26px; box-shadow: 0 24px 48px -32px rgba(0, 0, 0, .55); }
|
|
10071
|
+
.mk-track::-webkit-scrollbar { display: none; }
|
|
10072
|
+
.mk-slide { --mk-a: #60a5fa; --mk-b: #1d4ed8; position: relative; flex: 0 0 100%; display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); align-items: center; min-height: 380px; overflow: hidden; scroll-snap-align: start; color: #fff; cursor: pointer; background: radial-gradient(90% 120% at 88% 12%, color-mix(in srgb, var(--mk-a) 70%, #fff) 0%, transparent 60%), linear-gradient(135deg, var(--mk-a), var(--mk-b)); }
|
|
10073
|
+
.mk-slide::before { content: ''; position: absolute; inset: 0; pointer-events: none; background: radial-gradient(60% 80% at 0% 100%, rgba(0, 0, 0, .28), transparent 70%); }
|
|
10074
|
+
.mk-slide-words { position: relative; display: grid; align-content: center; gap: 10px; min-width: 0; padding: 40px 0 40px 46px; }
|
|
10075
|
+
.mk-slide-words small { font-size: 12px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; opacity: .86; }
|
|
10076
|
+
.mk-slide-words h2 { margin: 0; font-size: clamp(28px, 3.6vw, 42px); font-weight: 780; letter-spacing: -.025em; line-height: 1.04; text-wrap: balance; }
|
|
10077
|
+
.mk-slide-words p { margin: 0; max-width: 34ch; font-size: 16.5px; line-height: 1.45; opacity: .94; text-wrap: pretty; }
|
|
10078
|
+
.mk-slide-get { display: flex; align-items: center; gap: 12px; width: max-content; max-width: 100%; margin-top: 16px; padding: 10px 12px 10px 10px; border-radius: 18px; background: rgba(255, 255, 255, .16); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .18); box-sizing: border-box; }
|
|
10079
|
+
.mk-slide-get .mk-icon { box-shadow: 0 0 0 1px rgba(255, 255, 255, .4), 0 4px 10px -4px rgba(0, 0, 0, .4); }
|
|
10080
|
+
.mk-slide-who { display: grid; gap: 1px; min-width: 0; padding-right: 6px; }
|
|
10081
|
+
.mk-slide-who b { font-size: 14.5px; }
|
|
10082
|
+
.mk-slide-who span { font-size: 12.5px; opacity: .85; }
|
|
10083
|
+
.mk-slide-art { position: relative; align-self: stretch; display: grid; place-items: center; padding: 22px 26px 22px 0; }
|
|
10084
|
+
.mk-slide-art svg { width: 100%; height: auto; max-height: 340px; }
|
|
10085
|
+
.mk-arrow { position: absolute; bottom: 44px; display: grid; place-items: center; width: 40px; height: 40px; border: 0; border-radius: 50%; background: rgba(0, 0, 0, .3); color: #fff; -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); cursor: pointer; opacity: 0; transition: opacity calc(160ms * var(--motion-scale, 1)) ease; }
|
|
10086
|
+
.mk-carousel:hover .mk-arrow, .mk-arrow:focus-visible { opacity: 1; }
|
|
10087
|
+
/* Both in the corner, out of the words' way. */
|
|
10088
|
+
.mk-arrow.prev { right: 64px; }
|
|
10089
|
+
.mk-arrow.next { right: 16px; }
|
|
10090
|
+
.mk-arrow svg { width: 18px; height: 18px; }
|
|
10091
|
+
.mk-dots { display: flex; justify-content: center; gap: 8px; margin-top: 14px; }
|
|
10092
|
+
.mk-dot { width: 8px; height: 8px; padding: 0; border: 0; border-radius: 99px; background: color-mix(in srgb, var(--text) 22%, transparent); cursor: pointer; transition: width calc(220ms * var(--motion-scale, 1)) ease, background-color calc(220ms * var(--motion-scale, 1)) ease; }
|
|
10093
|
+
.mk-dot[aria-current="true"] { width: 24px; background: var(--text); }
|
|
10094
|
+
|
|
10095
|
+
/* The key: tonal while it is a question, solid on a module's page, quiet once it is on. */
|
|
10096
|
+
.mk-get { flex: none; height: 30px; padding: 0 16px; border: 0; border-radius: 999px; background: color-mix(in srgb, var(--madre-green) 15%, transparent); color: var(--madre-green); font-size: 13px; font-weight: 700; letter-spacing: .01em; white-space: nowrap; cursor: pointer; }
|
|
10097
|
+
.mk-get:hover { background: color-mix(in srgb, var(--madre-green) 24%, transparent); }
|
|
10098
|
+
.mk-get.on { background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text-2); }
|
|
10099
|
+
.mk-get.light { background: #fff; color: #111; }
|
|
10100
|
+
.mk-get.light:hover { background: rgba(255, 255, 255, .88); }
|
|
10101
|
+
.mk-get.big { height: 40px; padding: 0 22px; background: var(--madre-green); color: var(--madre-green-ink); font-size: 14.5px; }
|
|
10102
|
+
.mk-get.big:hover { filter: brightness(1.06); }
|
|
10103
|
+
.mk-get.big:is(.quiet, .on) { background: color-mix(in srgb, var(--text) 9%, transparent); color: var(--text); }
|
|
10104
|
+
.mk-get:disabled { opacity: .55; cursor: progress; }
|
|
10105
|
+
.mk-link { padding: 0; border: 0; background: none; color: var(--madre-green); font-size: 13.5px; font-weight: 600; cursor: pointer; }
|
|
10106
|
+
.mk-link:hover { text-decoration: underline; }
|
|
10107
|
+
|
|
10108
|
+
/* The shelves: rows of modules, three across where they fit, like a store's lists. */
|
|
10109
|
+
.mk-shelf { display: grid; gap: 6px; }
|
|
10110
|
+
.mk-shelf > header { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
|
|
10111
|
+
.mk-shelf h2, .mk-section > h2 { margin: 0; font-size: 22px; font-weight: 720; letter-spacing: -.01em; }
|
|
10112
|
+
.mk-shelf > header p { margin: 0; color: var(--text-2); font-size: 14px; }
|
|
10113
|
+
.mk-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr)); column-gap: 30px; }
|
|
10114
|
+
.mk-row { display: flex; align-items: center; gap: 12px; min-width: 0; padding: 12px 0; border-bottom: 1px solid var(--line); }
|
|
10115
|
+
.mk-row-open { flex: 1; display: flex; align-items: center; gap: 14px; min-width: 0; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
|
|
10116
|
+
.mk-row-words { display: grid; gap: 3px; min-width: 0; }
|
|
10117
|
+
.mk-row-words b { font-size: 15px; font-weight: 650; }
|
|
10118
|
+
.mk-row-words span { display: -webkit-box; overflow: hidden; color: var(--text-2); font-size: 13px; line-height: 1.35; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
|
10119
|
+
.mk-row-side { display: grid; justify-items: center; gap: 3px; }
|
|
10120
|
+
.mk-row-side small { color: var(--text-3); font-size: 10.5px; }
|
|
10121
|
+
.mk-row-side small:empty { display: none; }
|
|
10122
|
+
|
|
10123
|
+
/* A module's page. */
|
|
10124
|
+
.mk-product { gap: 30px; }
|
|
10125
|
+
.mk-back { justify-self: start; display: inline-flex; align-items: center; gap: 2px; padding: 4px 8px 4px 0; border: 0; background: none; color: var(--madre-green); font-size: 15px; font-weight: 600; cursor: pointer; }
|
|
10126
|
+
.mk-back svg { width: 17px; height: 17px; }
|
|
10127
|
+
.mk-product-top { display: flex; align-items: center; gap: 28px; }
|
|
10128
|
+
.mk-product-words { display: grid; gap: 8px; min-width: 0; }
|
|
10129
|
+
.mk-product-words h1 { margin: 0; font-size: clamp(26px, 3.4vw, 36px); font-weight: 760; letter-spacing: -.02em; line-height: 1.08; }
|
|
10130
|
+
.mk-product-words > p:not(.mk-said) { margin: 0; color: var(--text-2); font-size: 16px; }
|
|
10131
|
+
.mk-keys { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 14px; margin-top: 8px; }
|
|
10132
|
+
.mk-state { color: var(--text-2); font-size: 13.5px; }
|
|
10133
|
+
.mk-only { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; color: var(--text-2); font-size: 13.5px; }
|
|
10134
|
+
.mk-select { height: 32px; max-width: 240px; padding: 0 10px; border: 0; border-radius: 9px; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); font: inherit; font-size: 13.5px; }
|
|
10135
|
+
.mk-keys > .mk-select { height: 40px; }
|
|
10136
|
+
.mk-said { margin: 0; color: var(--text-2); font-size: 13.5px; line-height: 1.45; }
|
|
10137
|
+
.mk-said:empty { display: none; }
|
|
10138
|
+
.mk-said[data-tone="bad"] { color: var(--crit, #d93025); }
|
|
10139
|
+
.mk-said[data-tone="good"] { color: var(--madre-green); }
|
|
10140
|
+
.mk-facts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0; border-block: 1px solid var(--line); }
|
|
10141
|
+
.mk-facts > div { display: grid; justify-items: center; gap: 4px; padding: 14px 16px; text-align: center; }
|
|
10142
|
+
.mk-facts > div + div { border-left: 1px solid var(--line); }
|
|
10143
|
+
.mk-facts dt { color: var(--text-3); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
|
|
10144
|
+
.mk-facts dd { margin: 0; font-size: 14.5px; font-weight: 600; }
|
|
10145
|
+
.mk-section { display: grid; gap: 14px; }
|
|
10146
|
+
.mk-shot { display: grid; place-items: center; width: min(760px, 100%); aspect-ratio: 16 / 9; padding: 3%; overflow: hidden; border-radius: 22px; background: radial-gradient(90% 120% at 85% 10%, color-mix(in srgb, var(--mk-a) 70%, #fff) 0%, transparent 60%), linear-gradient(135deg, var(--mk-a, #94a3b8), var(--mk-b, #334155)); box-sizing: border-box; }
|
|
10147
|
+
.mk-shot svg { width: min(100%, 720px); height: 100%; }
|
|
10148
|
+
.mk-about { margin: 0; max-width: 72ch; font-size: 15.5px; line-height: 1.6; }
|
|
10149
|
+
.mk-touches { overflow: hidden; border: 1px solid var(--line); border-radius: 16px; }
|
|
10150
|
+
.mk-touch { display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: 14px; padding: 12px 16px; font-size: 14px; line-height: 1.45; }
|
|
10151
|
+
.mk-touch + .mk-touch { border-top: 1px solid var(--line); }
|
|
10152
|
+
.mk-touch span:first-child { color: var(--text-3); }
|
|
10153
|
+
|
|
10154
|
+
/* MODULES in Home: one card per module, a switch for every project and a chip for each one. */
|
|
10155
|
+
.mk-card { display: grid; gap: 12px; padding: 16px 18px; border-radius: 18px; background: var(--panel); box-shadow: 0 0 0 1px var(--line); }
|
|
10156
|
+
.mk-card.focused { box-shadow: 0 0 0 2px var(--madre-green); }
|
|
10157
|
+
.mk-card-head { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; }
|
|
10158
|
+
.mk-card-open { flex: 1; display: flex; align-items: center; gap: 14px; min-width: 220px; padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
|
|
10159
|
+
.mk-card-words { display: grid; gap: 2px; min-width: 0; }
|
|
10160
|
+
.mk-card-words b { font-size: 15px; font-weight: 650; }
|
|
10161
|
+
.mk-card-words span { color: var(--text-2); font-size: 13px; }
|
|
10162
|
+
.mk-all { display: flex; align-items: center; gap: 10px; color: var(--text-2); font-size: 13.5px; }
|
|
10163
|
+
.mk-switch { display: flex; flex: none; width: 44px; height: 26px; padding: 3px; border: 0; border-radius: 99px; background: color-mix(in srgb, var(--text) 18%, transparent); cursor: pointer; transition: background-color calc(160ms * var(--motion-scale, 1)) ease; }
|
|
10164
|
+
.mk-knob { width: 20px; height: 20px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, .3); transition: transform calc(180ms * var(--motion-scale, 1)) cubic-bezier(.2, .8, .2, 1); }
|
|
10165
|
+
.mk-switch.on { background: var(--madre-green); }
|
|
10166
|
+
.mk-switch.on .mk-knob { transform: translateX(18px); }
|
|
10167
|
+
.mk-switch:disabled, .mk-chip:disabled { opacity: .55; cursor: progress; }
|
|
10168
|
+
.mk-chips { display: flex; flex-wrap: wrap; gap: 8px; padding-left: 58px; }
|
|
10169
|
+
.mk-chip { padding: 6px 12px; border: 0; border-radius: 99px; background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text-2); font-size: 13px; cursor: pointer; }
|
|
10170
|
+
span.mk-chip { cursor: default; }
|
|
10171
|
+
.mk-chip.on { background: color-mix(in srgb, var(--madre-green) 16%, transparent); color: var(--madre-green); font-weight: 600; }
|
|
10172
|
+
/* The page's own notice, over the Market while it is open, where a store says things: at the bottom. */
|
|
10173
|
+
html.mk-open .toast { z-index: 2147482995 !important; left: 50% !important; right: auto !important; top: auto !important; bottom: calc(28px + env(safe-area-inset-bottom, 0px)) !important; }
|
|
10174
|
+
|
|
10175
|
+
@media (max-width: 760px) {
|
|
10176
|
+
.mk-bar { grid-template-columns: auto minmax(0, 1fr); padding-inline: 14px; }
|
|
10177
|
+
.mk-bar-mid { justify-self: end; }
|
|
10178
|
+
.mk-search { grid-column: 1 / -1; justify-self: stretch; width: 100%; }
|
|
10179
|
+
.mk-search[hidden] { display: none !important; }
|
|
10180
|
+
.mk-tab { min-width: 0; padding-inline: 14px; }
|
|
10181
|
+
.mk-page { gap: 28px; padding: 20px 16px calc(52px + env(safe-area-inset-bottom, 0px)); }
|
|
10182
|
+
.mk-slide { grid-template-columns: minmax(0, 1fr); min-height: 0; }
|
|
10183
|
+
.mk-slide-get { width: 100%; }
|
|
10184
|
+
.mk-slide-who { flex: 1; }
|
|
10185
|
+
.mk-slide-words { padding: 26px 22px 6px; }
|
|
10186
|
+
.mk-slide-words p { max-width: none; }
|
|
10187
|
+
.mk-slide-art { padding: 4px 14px 18px; }
|
|
10188
|
+
.mk-slide-art svg { max-height: 230px; }
|
|
10189
|
+
.mk-arrow { display: none; }
|
|
10190
|
+
.mk-product-top { flex-direction: column; align-items: flex-start; gap: 16px; }
|
|
10191
|
+
.mk-product-top > .mk-icon { --mk-size: 96px !important; }
|
|
10192
|
+
.mk-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
10193
|
+
.mk-facts > div:nth-child(3) { border-left: 0; }
|
|
10194
|
+
.mk-facts > div:nth-child(n + 3) { border-top: 1px solid var(--line); }
|
|
10195
|
+
.mk-touch { grid-template-columns: 1fr; gap: 2px; }
|
|
10196
|
+
.mk-chips { padding-left: 0; }
|
|
10197
|
+
}
|
|
10198
|
+
@media (prefers-reduced-motion: reduce) { .mk, .mk-dot, .mk-knob { transition: none; } }
|
|
10199
|
+
|
|
10200
|
+
/* KEYS BESIDE THE VERSION (attribution.js, drawColophonKeys, 2026-10-18): what a module puts in the
|
|
10201
|
+
corner, drawn by MADRE. A mark in the same pill as the version; hovered or focused, a card above
|
|
10202
|
+
it with the module's words and the key that opens its address. */
|
|
10203
|
+
.colophon-keys { display: inline-flex; align-items: center; gap: 2px; margin-left: 8px; padding-left: 8px; border-left: 1px solid color-mix(in srgb, var(--text) 18%, transparent); }
|
|
10204
|
+
.colophon-key { position: relative; display: inline-flex; }
|
|
10205
|
+
.colophon-key-mark { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; color: var(--text-2); text-decoration: none; transition: color calc(160ms * var(--motion-scale, 1)) ease, transform calc(200ms * var(--motion-scale, 1)) cubic-bezier(.2, .8, .2, 1); }
|
|
10206
|
+
.colophon-key-mark svg { width: 14px; height: 14px; }
|
|
10207
|
+
.colophon-key.heart .colophon-key-mark { color: #e5484d; }
|
|
10208
|
+
.colophon-key:is(:hover, :focus-within) .colophon-key-mark { transform: scale(1.18); }
|
|
10209
|
+
.colophon-key.heart:is(:hover, :focus-within) .colophon-key-mark svg { animation: colophon-beat calc(900ms * var(--motion-scale, 1)) ease-in-out infinite; }
|
|
10210
|
+
@keyframes colophon-beat { 0%, 100% { transform: scale(1); } 20% { transform: scale(1.18); } 40% { transform: scale(.96); } 60% { transform: scale(1.1); } }
|
|
10211
|
+
.colophon-key-mark:focus-visible { outline: 2px solid var(--madre-green); outline-offset: 2px; }
|
|
10212
|
+
.colophon-card { position: absolute; right: -10px; bottom: calc(100% + 12px); z-index: 20; display: grid; gap: 6px; width: max-content; max-width: 260px; padding: 12px 14px; border-radius: 14px; background: var(--surface, var(--panel)); color: var(--text); font-family: var(--read); font-size: 12.5px; font-weight: 450; letter-spacing: 0; line-height: 1.45; text-align: left; text-transform: none; white-space: normal; user-select: text; box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 14%, transparent), 0 12px 28px -8px rgba(0, 0, 0, .45); opacity: 0; visibility: hidden; transform: translateY(4px); transition: opacity calc(160ms * var(--motion-scale, 1)) ease, transform calc(200ms * var(--motion-scale, 1)) ease, visibility 0s linear calc(200ms * var(--motion-scale, 1)); }
|
|
10213
|
+
/* A bridge over the gap, so the pointer can travel from the mark to the card without losing it. */
|
|
10214
|
+
.colophon-card::after { content: ''; position: absolute; left: 0; right: 0; top: 100%; height: 14px; }
|
|
10215
|
+
.colophon-key:is(:hover, :focus-within) .colophon-card { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
|
|
10216
|
+
.colophon-card b { font-size: 13px; font-weight: 650; }
|
|
10217
|
+
.colophon-card span { color: var(--text-2); }
|
|
10218
|
+
.colophon-card-go { justify-self: start; margin-top: 2px; padding: 6px 12px; border-radius: 99px; background: var(--madre-green); color: var(--madre-green-ink); font-weight: 650; text-decoration: none; }
|
|
10219
|
+
.colophon-card-go:hover { filter: brightness(1.06); }
|
|
10220
|
+
@media (prefers-reduced-motion: reduce) { .colophon-key.heart:is(:hover, :focus-within) .colophon-key-mark svg { animation: none; } }
|