@jossuealcala/madre 1.0.0 → 1.0.2
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 +1945 -0
- package/CHANGELOG.md +78 -1
- package/CONTRIBUTING.md +5 -1
- package/LICENSE +661 -202
- package/NOTICE +34 -3
- package/README.en.md +245 -0
- package/README.md +23 -13
- package/TRADEMARKS.en.md +50 -0
- package/TRADEMARKS.md +82 -0
- package/bin/madre.mjs +2 -0
- package/docs/INTERNALS.md +8 -2
- package/docs/REFERENCE.md +17 -7
- package/docs/en/INTERNALS.md +103 -0
- package/docs/en/REFERENCE.md +339 -0
- package/docs/en/SDK.md +306 -0
- package/docs/en/training/README.md +59 -0
- package/docs/madre-banner.png +0 -0
- package/docs/training/README.md +20 -8
- package/docs/training/train.sh +2 -1
- package/package.json +14 -5
- package/public/abduction.js +2 -0
- package/public/app.js +2066 -488
- package/public/attribution.js +71 -0
- package/public/brands.js +3 -1
- package/public/editor.js +2 -0
- package/public/es.js +1706 -1226
- package/public/i18n.js +25 -1
- package/public/index.html +13 -10
- package/public/inquiry.js +2 -0
- package/public/loader.js +2 -0
- package/public/macroverso.js +24 -2
- package/public/nostromo-engine.js +2 -0
- package/public/resay.js +6 -0
- package/public/review-ask.js +2 -0
- package/public/routing.js +23 -1
- package/public/salas-mac.css +539 -28
- package/public/salas-mac.html +30 -22
- package/public/salas-mac.js +1498 -144
- package/public/salas.css +2 -0
- package/public/salas.html +1 -0
- package/public/salas.js +4 -2
- package/public/styles.css +1123 -20
- package/public/syntax.js +2 -0
- package/public/touch.js +2 -0
- package/public/tour-chapters.js +164 -52
- package/public/tour.js +85 -12
- package/public/troubleshooting.js +20 -18
- package/src/adapters/claude.mjs +2 -0
- package/src/adapters/codex.mjs +2 -0
- package/src/adapters/gemini.mjs +3 -1
- package/src/adapters/madre.mjs +3 -1
- 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 +32 -7
- 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 +2 -0
- package/src/chats.mjs +2 -0
- package/src/checkpoint.mjs +2 -0
- 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 +112 -3
- package/src/dataset.mjs +2 -0
- package/src/directives.mjs +8 -6
- package/src/distiller.mjs +2 -0
- package/src/embeddings.mjs +2 -0
- package/src/enlaces.mjs +6 -4
- package/src/event-store.mjs +2 -0
- package/src/exam.mjs +6 -4
- package/src/extensions.mjs +33 -10
- 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 +57 -0
- package/src/i18n.mjs +15 -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 +50 -0
- package/src/looks.mjs +40 -5
- 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 +83 -3
- package/src/modules/ahp.mjs +2 -0
- package/src/modules/ash-policy.mjs +2 -0
- package/src/modules/ash.mjs +3 -1
- package/src/modules/bishop-plan.mjs +5 -3
- package/src/modules/bishop.mjs +13 -11
- package/src/modules/choices.mjs +2 -0
- package/src/modules/correo.mjs +2 -0
- package/src/modules/enlaces.mjs +2 -0
- 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 +3 -1
- 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 +8 -6
- package/src/modules/mcp-connect.mjs +293 -0
- package/src/modules/ollama.mjs +17 -3
- package/src/modules/playwright.mjs +25 -10
- package/src/modules/ripley.mjs +2 -0
- package/src/modules/runs.mjs +5 -3
- package/src/modules/sdk.mjs +2 -0
- package/src/modules/updates.mjs +2 -0
- package/src/mother.mjs +2 -0
- package/src/ollama.mjs +2 -0
- package/src/outbound.mjs +24 -5
- package/src/override.mjs +2 -0
- package/src/ports.mjs +2 -0
- 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 +3 -0
- package/src/room/ghost.mjs +2 -0
- package/src/room/guard.mjs +2 -0
- package/src/room/prompt.mjs +13 -4
- 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 +264 -45
- package/src/router.mjs +2 -0
- package/src/runs.mjs +2 -0
- package/src/runtime-detection.mjs +2 -0
- package/src/salas.mjs +2 -0
- package/src/sentinel-errors.mjs +2 -0
- package/src/server-sentinel.mjs +2 -0
- package/src/server.mjs +485 -55
- package/src/setup.mjs +2 -0
- package/src/smtp.mjs +2 -0
- package/src/tour.mjs +26 -9
- 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 +12 -10
- package/docs/madre-banner.svg +0 -25
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;
|
|
@@ -121,6 +126,8 @@
|
|
|
121
126
|
--text-2: #5a615a;
|
|
122
127
|
--text-3: #767d75;
|
|
123
128
|
--phosphor: #2f8a1c;
|
|
129
|
+
--madre-green: #2f8a1c;
|
|
130
|
+
--madre-green-ink: #ffffff;
|
|
124
131
|
--brew: #178f0c;
|
|
125
132
|
--brew-ink: #ffffff;
|
|
126
133
|
--phosphor-ink: #ffffff;
|
|
@@ -157,6 +164,8 @@
|
|
|
157
164
|
--text-2: #5a615a;
|
|
158
165
|
--text-3: #767d75;
|
|
159
166
|
--phosphor: #2f8a1c;
|
|
167
|
+
--madre-green: #2f8a1c;
|
|
168
|
+
--madre-green-ink: #ffffff;
|
|
160
169
|
--brew: #178f0c;
|
|
161
170
|
--brew-ink: #ffffff;
|
|
162
171
|
--phosphor-ink: #ffffff;
|
|
@@ -829,6 +838,9 @@ textarea::placeholder { color: var(--text-3); }
|
|
|
829
838
|
.composer.m2 { --mode: var(--mode-2); --mode-ink: var(--mode-2-ink); }
|
|
830
839
|
.composer.m3 { --mode: var(--mode-3); --mode-ink: var(--mode-3-ink); }
|
|
831
840
|
.composer.m4 { --mode: var(--mode-4); --mode-ink: var(--mode-4-ink); }
|
|
841
|
+
/* Under the copilot #3 is MADRE's green, not EDIT's red: the chip, the send and the ring follow. */
|
|
842
|
+
.composer.m3.copilot { --mode: var(--madre-green); --mode-ink: var(--madre-green-ink); }
|
|
843
|
+
.composer.copilot .picker .mode-chip.m3 { --mode: var(--madre-green); }
|
|
832
844
|
.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
845
|
.field button[type="submit"] svg { width: 18px; height: 18px; }
|
|
834
846
|
.field button[type="submit"]:hover { filter: brightness(1.06); }
|
|
@@ -1184,7 +1196,11 @@ dialog.mother::backdrop { background: rgba(0, 0, 0, .82); backdrop-filter: blur(
|
|
|
1184
1196
|
|
|
1185
1197
|
.model-menu.effort-menu { --tone: var(--agent, var(--phosphor)); width: min(400px, calc(100vw - 24px)); padding: 12px 14px 10px; }
|
|
1186
1198
|
.effort-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 2px 2px 12px; }
|
|
1187
|
-
|
|
1199
|
+
/* The title on the left and AUTO in the right corner, on the same line (2026-10-14): the title
|
|
1200
|
+
keeps its room and is cut before it is covered; a long AUTO reading is cut instead of the title. */
|
|
1201
|
+
.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; }
|
|
1202
|
+
.effort-head .effort-auto { margin-left: auto; max-width: 52%; }
|
|
1203
|
+
.effort-head .effort-auto .hint { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1188
1204
|
/* Letting the CLI decide: a small switch beside the title, lit while it is the choice. */
|
|
1189
1205
|
.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
1206
|
.effort-auto .auto-dot { width: 7px; height: 7px; border-radius: 50%; border: 1.5px solid currentColor; transition: background-color var(--motion) var(--ease-out); }
|
|
@@ -1521,6 +1537,8 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1521
1537
|
.viewer-nav { display: inline-flex; gap: 4px; }
|
|
1522
1538
|
.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
1539
|
.viewer-nav .nav:hover { color: var(--text); border-color: var(--text-3); }
|
|
1540
|
+
/* The browser's reload is the bar's reload mark (2026-10-14), the same drawing, still. */
|
|
1541
|
+
.viewer-nav .nav.reload svg { width: 14px; height: 14px; }
|
|
1524
1542
|
.viewer-nav .nav:disabled { opacity: .35; cursor: default; }
|
|
1525
1543
|
.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
1544
|
.viewer-errors:not([hidden]) + .viewer-body { height: auto; max-height: calc(100% - 46px); }
|
|
@@ -1910,6 +1928,13 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1910
1928
|
.mode-what { min-width: 0; font-size: 13px; line-height: 1.45; color: var(--text); }
|
|
1911
1929
|
.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
1930
|
.mode-why { font-size: 11.5px; line-height: 1.45; color: var(--text-2); }
|
|
1931
|
+
.mode-what .mode-time { font-family: var(--mono); font-size: 11px; letter-spacing: .04em; color: var(--text-2); }
|
|
1932
|
+
/* How long the permission holds: the time the agent asked for, preselected; the human may change it. */
|
|
1933
|
+
.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; }
|
|
1934
|
+
.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; }
|
|
1935
|
+
.mode-window:hover { color: var(--text); }
|
|
1936
|
+
.mode-window[aria-checked="true"] { background: var(--panel, #fff); color: var(--text); box-shadow: 0 1px 2px rgb(0 0 0 / .12); }
|
|
1937
|
+
.mode-window:focus-visible { outline: 2px solid color-mix(in srgb, var(--warn, #e2a022) 60%, transparent); outline-offset: 1px; }
|
|
1913
1938
|
.mode-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 4px; }
|
|
1914
1939
|
.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
1940
|
.mode-alt:hover { color: var(--text); border-color: var(--text-3); }
|
|
@@ -1964,8 +1989,23 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
|
|
|
1964
1989
|
.run-request .run-line.running { cursor: progress; border-color: var(--agent, var(--phosphor)); }
|
|
1965
1990
|
.run-request .run-line.running .choice-tag { animation: klaxon 1.2s ease-in-out infinite; }
|
|
1966
1991
|
@media (prefers-reduced-motion: reduce) { .run-request .run-line.running .choice-tag { animation: none; } }
|
|
1967
|
-
.run-request .run-line.ran .choice-tag {
|
|
1992
|
+
.run-request .run-line.ran .choice-tag { border-color: var(--ok, var(--phosphor)); color: var(--ok, var(--phosphor)); }
|
|
1968
1993
|
.run-request .run-line.failed .choice-tag { border-color: var(--crit); color: var(--crit); }
|
|
1994
|
+
.run-request .run-summary { margin: 10px 2px 0; font-family: var(--mono); font-size: 10.5px; color: var(--text-2); }
|
|
1995
|
+
/* RUN ALL and the hand-back: quiet buttons in the agent's colour, under the summary. */
|
|
1996
|
+
.run-request .run-actions { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 2px 0; }
|
|
1997
|
+
.run-request .run-actions:empty { display: none; }
|
|
1998
|
+
.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; }
|
|
1999
|
+
.run-request :is(.run-all, .run-back):hover:not(:disabled) { background: color-mix(in srgb, var(--agent, var(--phosphor)) 10%, transparent); }
|
|
2000
|
+
.run-request :is(.run-all, .run-back):disabled { opacity: .5; cursor: progress; }
|
|
2001
|
+
.run-request.returned .run-summary { color: var(--ok, var(--phosphor)); }
|
|
2002
|
+
.run-request.returned .run-all { display: none; }
|
|
2003
|
+
/* A message MADRE wrote for the human: the results of commands going back. Same bubble, quieter. */
|
|
2004
|
+
#messages .row.user.auto .bubble { opacity: .82; }
|
|
2005
|
+
.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); }
|
|
2006
|
+
.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; }
|
|
2007
|
+
@keyframes run-travel { from { transform: translateX(0); } to { transform: translateX(220%); } }
|
|
2008
|
+
@media (prefers-reduced-motion: reduce) { .run-request .run-progress-track::after { animation: none; width: 100%; } }
|
|
1969
2009
|
.run-request .run-line.refused { cursor: not-allowed; opacity: .6; }
|
|
1970
2010
|
.run-request .run-line.refused .choice-tag { border-color: var(--text-3); color: var(--text-3); }
|
|
1971
2011
|
/* A command still alive: where it serves, and the two things to do with it. The tag holds still
|
|
@@ -2223,6 +2263,31 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2223
2263
|
.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; }
|
|
2224
2264
|
.command-card .undo:hover { background: color-mix(in srgb, var(--terror) 22%, transparent); }
|
|
2225
2265
|
.command-card .undo:disabled { opacity: .5; cursor: default; }
|
|
2266
|
+
/* What a terminal said, folded (2026-10-14): one line — the command, how it ended, how long, who
|
|
2267
|
+
asked — and its last line beneath; the output opens on a click, without a jump. */
|
|
2268
|
+
.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); }
|
|
2269
|
+
.command-card.terminal .term-head:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 55%, transparent); outline-offset: -2px; border-radius: 12px; }
|
|
2270
|
+
.command-card.terminal .term-tag { flex: none; font-size: 9.5px; letter-spacing: .14em; font-weight: 600; color: var(--text-3); }
|
|
2271
|
+
.command-card.terminal code.term-line { padding: 0; border: 0; background: none; }
|
|
2272
|
+
.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); }
|
|
2273
|
+
.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); }
|
|
2274
|
+
.command-card.terminal .term-status.ok { color: var(--ok, #2f9e44); background: color-mix(in srgb, var(--ok, #2f9e44) 12%, transparent); }
|
|
2275
|
+
.command-card.terminal .term-status.failed { color: var(--crit); background: color-mix(in srgb, var(--crit) 12%, transparent); }
|
|
2276
|
+
.command-card.terminal .term-who { flex: none; font-size: 10.5px; color: var(--agent, var(--text-3)); }
|
|
2277
|
+
.command-card.terminal .term-count { flex: none; font-size: 10px; color: var(--text-3); white-space: nowrap; }
|
|
2278
|
+
.command-card.terminal .term-head .chev-icon { flex: none; display: inline-flex; color: var(--text-3); transition: transform .22s ease; }
|
|
2279
|
+
.command-card.terminal.open .term-head .chev-icon { transform: rotate(180deg); }
|
|
2280
|
+
.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; }
|
|
2281
|
+
.command-card.terminal.open .term-peek { display: none; }
|
|
2282
|
+
.command-card.terminal .term-out { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .24s ease; }
|
|
2283
|
+
.command-card.terminal.open .term-out { grid-template-rows: 1fr; }
|
|
2284
|
+
.command-card.terminal .term-clip { min-height: 0; overflow: hidden; }
|
|
2285
|
+
.command-card.terminal pre { max-height: 420px; border-top: 1px solid var(--line-2); background: color-mix(in srgb, var(--text) 3%, transparent); }
|
|
2286
|
+
.command-card.terminal pre .l-bad { color: var(--crit); }
|
|
2287
|
+
.command-card.terminal pre .l-good { color: var(--ok, #2f9e44); }
|
|
2288
|
+
.command-card.terminal .undo { margin-top: 10px; }
|
|
2289
|
+
@media (max-width: 560px) { .command-card.terminal .term-count, .command-card.terminal .term-tag { display: none; } }
|
|
2290
|
+
@media (prefers-reduced-motion: reduce) { .command-card.terminal .term-out, .command-card.terminal .term-head .chev-icon { transition: none; } }
|
|
2226
2291
|
.command-card .outcome { display: inline-block; margin: 0 12px 10px; font-family: var(--mono); font-size: 10px; letter-spacing: .16em; color: var(--phosphor); }
|
|
2227
2292
|
|
|
2228
2293
|
.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; }
|
|
@@ -2463,6 +2528,23 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2463
2528
|
.conn-card .key-link:hover { color: var(--ph); }
|
|
2464
2529
|
.conn-card .key-said.bad { color: var(--terror); }
|
|
2465
2530
|
|
|
2531
|
+
/* The second half of a browser sign-in. The CLI opens a page and then waits to be told the code
|
|
2532
|
+
that page gives back; this is where the address stays put and where the code is typed. It used
|
|
2533
|
+
to be nowhere, so the only thing on screen was a heartbeat and the sign-in died of its clock. */
|
|
2534
|
+
.login-ask { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
2535
|
+
.login-ask[hidden] { display: none; }
|
|
2536
|
+
.login-code { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; flex: 1 1 260px; }
|
|
2537
|
+
.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; }
|
|
2538
|
+
.login-code input:focus { outline: none; border-color: var(--phosphor); }
|
|
2539
|
+
.login-code button { font-family: var(--mono); font-size: 10px; letter-spacing: .14em; text-transform: uppercase; border: 1px solid var(--phosphor); color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); border-radius: 8px; padding: 7px 12px; cursor: pointer; }
|
|
2540
|
+
.login-code button:disabled { opacity: .5; cursor: default; }
|
|
2541
|
+
.login-code .key-said { flex: 1 0 100%; }
|
|
2542
|
+
/* Inside a connection card the ground is black and everything is phosphor, as the key form is. */
|
|
2543
|
+
.conn-card .login-code input { color: var(--ph); background: #000; border: 1px solid var(--ph-dim); border-radius: 0; font-size: 12px; padding: 6px 8px; }
|
|
2544
|
+
.conn-card .login-code input::placeholder { color: var(--ph-dim); opacity: .7; }
|
|
2545
|
+
.conn-card .login-code input:focus { outline: 1px solid var(--ph); border-color: var(--ph); }
|
|
2546
|
+
.conn-card .login-code button { border: 1px solid var(--ph); color: #041004; background: var(--ph); border-radius: 0; }
|
|
2547
|
+
|
|
2466
2548
|
/* A module card, floor by floor: what it is, what it does, what it touches, how it is doing, and
|
|
2467
2549
|
then the switch. Everything inside a card wears the panel's phosphor, never the page's palette,
|
|
2468
2550
|
and every number is given room so it can never land on its own label. */
|
|
@@ -2572,6 +2654,12 @@ dialog.intents-window { width: 760px; height: 640px; }
|
|
|
2572
2654
|
|
|
2573
2655
|
/* A file an agent wrote in this room, in that agent's own colour. */
|
|
2574
2656
|
.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; }
|
|
2657
|
+
/* The way down to what changed: a folder carries the dot of the last touch beneath it, hollow, so
|
|
2658
|
+
the filled one is always the file itself. */
|
|
2659
|
+
.tree .node .touched.trail { background: transparent; box-shadow: inset 0 0 0 1.5px var(--agent, var(--ph)); }
|
|
2660
|
+
.tree-head .tree-refresh.spin svg { animation: tree-spin .6s ease; }
|
|
2661
|
+
@keyframes tree-spin { to { transform: rotate(360deg); } }
|
|
2662
|
+
@media (prefers-reduced-motion: reduce) { .tree-head .tree-refresh.spin svg { animation: none; } }
|
|
2575
2663
|
|
|
2576
2664
|
/* Read by what the file is. Six roles, the room's own phosphor: enough to find a string or a
|
|
2577
2665
|
comment at a glance, and never so many colours that the code stops being the thing you see. */
|
|
@@ -2833,11 +2921,6 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
2833
2921
|
border-radius: 16px; background: var(--panel); color: var(--text); border: 1px solid var(--line-2);
|
|
2834
2922
|
box-shadow: 0 18px 50px rgba(0, 0, 0, .4); animation: wn-in calc(300ms * var(--motion-scale)) cubic-bezier(.2, .8, .2, 1);
|
|
2835
2923
|
}
|
|
2836
|
-
.hint-card.beside::before { content: none; }
|
|
2837
|
-
.hint-card::before {
|
|
2838
|
-
content: ''; position: absolute; top: -7px; left: calc(var(--arrow, 24px) - 6px); width: 12px; height: 12px;
|
|
2839
|
-
background: var(--panel); border-left: 1px solid var(--line-2); border-top: 1px solid var(--line-2); transform: rotate(45deg);
|
|
2840
|
-
}
|
|
2841
2924
|
@media (prefers-reduced-motion: reduce) { .hint-card { animation: none; } }
|
|
2842
2925
|
.hint-card h3 { margin: 0 0 6px; font-size: 15px; font-weight: 700; }
|
|
2843
2926
|
.hint-card p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text-2); }
|
|
@@ -3219,6 +3302,14 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
|
|
|
3219
3302
|
The list says whose servers these are, each one with a lamp that is lit while it answers. When
|
|
3220
3303
|
the one on screen stops, the page stays, dimmed, and says so; it comes back on its own. */
|
|
3221
3304
|
.ports-head { padding: 8px 10px 6px; font-family: var(--mono); font-size: 9px; font-weight: 600; letter-spacing: .18em; color: var(--text-3); }
|
|
3305
|
+
.ports-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 34px; }
|
|
3306
|
+
.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; }
|
|
3307
|
+
.ports-refresh:hover { color: var(--text); box-shadow: var(--key-over, var(--key-rest)); }
|
|
3308
|
+
.ports-refresh:focus-visible { outline: 2px solid var(--phosphor); outline-offset: 2px; }
|
|
3309
|
+
.ports-refresh svg { width: 17px; height: 17px; }
|
|
3310
|
+
.ports-refresh.checking svg { animation: ports-turn .8s linear infinite; }
|
|
3311
|
+
@keyframes ports-turn { to { transform: rotate(360deg); } }
|
|
3312
|
+
@media (prefers-reduced-motion: reduce) { .ports-refresh.checking svg { animation: none; } }
|
|
3222
3313
|
.ports-empty { padding: 6px 10px 10px; font-size: 12px; line-height: 1.5; color: var(--text-2); }
|
|
3223
3314
|
.ports-lamp { align-self: center; width: 7px; height: 7px; border-radius: 50%; background: var(--phosphor); box-shadow: 0 0 0 3px color-mix(in srgb, var(--phosphor) 16%, transparent); }
|
|
3224
3315
|
.ports-row.wider .ports-lamp, .ports-lamp.off { background: var(--text-3); box-shadow: none; }
|
|
@@ -5179,6 +5270,37 @@ dialog.custom-window::backdrop { display: none; }
|
|
|
5179
5270
|
height: 26px; padding: 0 10px 0 12px; border: 0; border-radius: 999px; background: transparent; box-shadow: none;
|
|
5180
5271
|
}
|
|
5181
5272
|
: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); }
|
|
5273
|
+
/* THE COPILOT (2026-10-14): a robot beside mode · model · effort, in the same glass; MADRE's green
|
|
5274
|
+
when it is on, with the time it has left. Its menu says what it does, its switch and how long. */
|
|
5275
|
+
.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; }
|
|
5276
|
+
.picker .pick-label > .copilot-chip:is(:hover, :focus-visible) { background: color-mix(in srgb, currentColor 12%, transparent); outline: none; }
|
|
5277
|
+
.copilot-icon { display: inline-flex; width: 16px; height: 16px; }
|
|
5278
|
+
.copilot-icon svg { width: 100%; height: 100%; }
|
|
5279
|
+
.picker .pick-label > .copilot-chip.on { color: var(--madre-green); background: color-mix(in srgb, var(--madre-green) 14%, transparent); }
|
|
5280
|
+
.picker .pick-label > .copilot-chip .left { font-size: 10px; }
|
|
5281
|
+
.copilot-menu { display: grid; gap: 8px; }
|
|
5282
|
+
.copilot-menu .copilot-title { display: flex; align-items: center; gap: 8px; margin: 2px 2px 0; color: var(--text); }
|
|
5283
|
+
.copilot-menu .copilot-title b { flex: 1; color: var(--text); font-size: 11px; }
|
|
5284
|
+
.copilot-menu .copilot-title .copilot-icon { color: var(--madre-green); }
|
|
5285
|
+
.copilot-menu .copilot-body { display: grid; gap: 8px; padding: 0 2px 2px; font-family: var(--read, inherit); letter-spacing: 0; }
|
|
5286
|
+
/* Three weights (2026-10-14): what it does reads first; what it never does is the small print. */
|
|
5287
|
+
.copilot-menu .copilot-body p { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
|
|
5288
|
+
.copilot-menu .copilot-body .copilot-lead { font-size: 14px; line-height: 1.45; color: var(--text); font-weight: 400; }
|
|
5289
|
+
.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); }
|
|
5290
|
+
.copilot-menu .copilot-body .copilot-state { color: var(--madre-green); font-weight: 600; }
|
|
5291
|
+
.copilot-menu .copilot-body .copilot-foot { font-size: 11px; color: var(--text-3); }
|
|
5292
|
+
.copilot-menu .copilot-how { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; color: var(--text-2); }
|
|
5293
|
+
/* A message under the copilot: the box wears green, not EDIT's red. */
|
|
5294
|
+
.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); }
|
|
5295
|
+
.composer.copilot .crew-label { color: var(--madre-green); }
|
|
5296
|
+
/* The reply written as the copilot: a green round robot on the agent's own circle, shown on every
|
|
5297
|
+
reply of a run of them, so a glance down the thread says which ones the copilot wrote. */
|
|
5298
|
+
#messages .row.copilot > .avatar { position: relative; overflow: visible; }
|
|
5299
|
+
#messages .row.copilot.compact > .avatar { visibility: visible; }
|
|
5300
|
+
#messages .row.copilot.compact > .avatar > :not(.copilot-badge) { visibility: hidden; }
|
|
5301
|
+
#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); }
|
|
5302
|
+
#messages .row.copilot > .avatar .copilot-badge svg { width: 100%; height: 100%; }
|
|
5303
|
+
#messages .who .badge.copilot { color: var(--madre-green); background: color-mix(in srgb, var(--madre-green) 14%, transparent); }
|
|
5182
5304
|
/* The lines of the room that carry a chip: the box's radius follows the chip it holds. */
|
|
5183
5305
|
:is(:root[data-wallpaper] #messages, .look-preview[data-wallpaper]:not([data-wallpaper="default"])) .system:not(.mother-alert) { border-radius: 18px; padding: 8px 16px 9px; }
|
|
5184
5306
|
|
|
@@ -5570,7 +5692,9 @@ dialog.mother { --mono: "JetBrains Mono", ui-monospace, Menlo, Consolas, monospa
|
|
|
5570
5692
|
/* Dark theme: the box is its own black, a neutral graphite rather than the room's green-black,
|
|
5571
5693
|
and the row of mode, model and effort under it steps back so it never competes with it. */
|
|
5572
5694
|
:root:not([data-scheme="light"]) .shell .composer .field { background-color: color-mix(in srgb, #1a1b1d 96%, transparent); }
|
|
5573
|
-
|
|
5695
|
+
/* Dark glass reads on a dark ground (2026-10-14): the ground at 45% over the ground was invisible,
|
|
5696
|
+
so it takes a breath of the text colour, a half-pixel rim and the same blur as in light. */
|
|
5697
|
+
: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); }
|
|
5574
5698
|
:root:not([data-scheme="light"]) .composer > .pick-options :is(.mode-chip, .model-chip, .effort-chip) { opacity: .78; }
|
|
5575
5699
|
:root:not([data-scheme="light"]) .composer > .pick-options :is(.mode-chip, .model-chip, .effort-chip):is(:hover, :focus-visible, [aria-expanded="true"]) { opacity: 1; }
|
|
5576
5700
|
|
|
@@ -5908,6 +6032,28 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
5908
6032
|
.sx-chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
5909
6033
|
.sx-field { display: flex; gap: 8px; }
|
|
5910
6034
|
.sx-field .sx-input { flex: 1; }
|
|
6035
|
+
/* Settings › Connect MCP (2026-10-14): a row per server — what it is and where, how it stands,
|
|
6036
|
+
the one thing to do, and from which mode its tools that act travel. */
|
|
6037
|
+
.mcp-row { gap: 10px; }
|
|
6038
|
+
.mcp-row .mcp-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; width: 100%; }
|
|
6039
|
+
.mcp-row .mcp-top .sx-words { min-width: 0; display: grid; gap: 4px; }
|
|
6040
|
+
.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; }
|
|
6041
|
+
.mcp-row.off .mcp-top .sx-words > b { color: var(--text-2); }
|
|
6042
|
+
.mcp-problem { margin: 0; font-size: 12px; line-height: 1.45; color: var(--danger); overflow-wrap: anywhere; }
|
|
6043
|
+
.mcp-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
|
|
6044
|
+
.mcp-block > .mcp-actions { padding: 4px 16px 14px; }
|
|
6045
|
+
.mcp-from { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
|
|
6046
|
+
.mcp-tools { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
|
|
6047
|
+
.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; }
|
|
6048
|
+
.mcp-tools li code { font-family: var(--mono); font-size: 11.5px; }
|
|
6049
|
+
.mcp-tools .mcp-tool-kind { font-size: 10px; letter-spacing: .04em; color: var(--text-3); }
|
|
6050
|
+
.mcp-tools li.acts .mcp-tool-kind { color: #d9a90f; }
|
|
6051
|
+
.mcp-vars { display: grid; gap: 6px; width: 100%; }
|
|
6052
|
+
.mcp-vars .sx-field { align-items: center; }
|
|
6053
|
+
.mcp-secret { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--text-2); white-space: nowrap; }
|
|
6054
|
+
.mcp-pick { display: inline-flex; align-items: center; }
|
|
6055
|
+
.mcp-block .sx-row .sx-hint { overflow-wrap: anywhere; }
|
|
6056
|
+
.mcp-pick input, .mcp-secret input { width: 16px; height: 16px; accent-color: var(--phosphor); }
|
|
5911
6057
|
.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); }
|
|
5912
6058
|
.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; }
|
|
5913
6059
|
.sx-more { border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
|
|
@@ -5918,7 +6064,15 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
5918
6064
|
.sx-more > :not(summary) { margin: 0 16px 14px; }
|
|
5919
6065
|
.sx-steps { display: grid; gap: 12px; margin: 10px 16px 16px; padding-left: 18px; }
|
|
5920
6066
|
.sx-steps li { display: grid; gap: 6px; font-size: 12.5px; }
|
|
5921
|
-
.sx-steps li b { font-weight:
|
|
6067
|
+
.sx-steps li b { font-weight: 600; color: var(--text); }
|
|
6068
|
+
/* The training recipe, numbered and explained (2026-10-14). */
|
|
6069
|
+
.sx-steps { counter-reset: step; list-style: none; padding-left: 0; gap: 14px; }
|
|
6070
|
+
.sx-steps li { position: relative; padding-left: 34px; counter-increment: step; }
|
|
6071
|
+
.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); }
|
|
6072
|
+
.sx-steps li .sx-hint { font-size: 12px; line-height: 1.45; color: var(--text-2); }
|
|
6073
|
+
.sx-train-what { margin: 0 16px 10px; font-size: 12.5px; line-height: 1.5; color: var(--text-2); }
|
|
6074
|
+
.sx-train-platform { margin: 10px 16px 6px; }
|
|
6075
|
+
.sx-more > .sx-hint { margin: 0 16px; }
|
|
5922
6076
|
|
|
5923
6077
|
/* An agent's card: its colour on the avatar and the name, where it lives in small print. */
|
|
5924
6078
|
.sx-agent .sx-head { align-items: center; }
|
|
@@ -6010,6 +6164,8 @@ select.sx-input { width: auto; max-width: 100%; padding-right: 8px; cursor: poin
|
|
|
6010
6164
|
.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; }
|
|
6011
6165
|
.settings-detail .sx-analysis .mem-strip-head b, .settings-detail .sx-analysis .mem-bar .name { color: var(--text); }
|
|
6012
6166
|
.settings-detail .sx-analysis .mem-signal .top b, .settings-detail .sx-analysis .exam-head b { font-size: 12.5px; font-weight: 500; }
|
|
6167
|
+
/* The review's questions are written in sentence case; lowering them would turn «IA» into «ia». */
|
|
6168
|
+
.settings-detail .sx-analysis .exam-head b { text-transform: none; }
|
|
6013
6169
|
.settings-detail .sx-analysis .exams .said { font-family: var(--read); font-size: 12.5px; line-height: 1.5; }
|
|
6014
6170
|
.settings-detail .sx-analysis .mem-cols i:not(.zero) { background: color-mix(in srgb, #3fb6d9 70%, transparent); }
|
|
6015
6171
|
.settings-detail .sx-analysis .mem-cols i.now { background: #3fb6d9; }
|
|
@@ -6307,9 +6463,13 @@ dialog.surface.window:is(.settings-window, .module-window).lifted { background-c
|
|
|
6307
6463
|
.bar-left .connection { position: relative; align-self: flex-start; margin: 9px 0 0 -2px; padding: 4px; text-transform: none; cursor: default; }
|
|
6308
6464
|
.bar-left .connection :is(.connection-icon .bar-glyph, .connection-label) { display: none; }
|
|
6309
6465
|
.bar-left .connection .connection-dot { width: 7px; height: 7px; background: var(--text-3); box-shadow: none; }
|
|
6310
|
-
.bar-left .connection[data-state="live"] .connection-dot { background: #34d058; animation:
|
|
6311
|
-
.bar-left .connection[data-state="reconnecting"] .connection-dot { background: var(--warn); animation:
|
|
6312
|
-
|
|
6466
|
+
.bar-left .connection[data-state="live"] .connection-dot { background: #34d058; animation: state-pulse 2.6s ease-in-out infinite; }
|
|
6467
|
+
.bar-left .connection[data-state="reconnecting"] .connection-dot { background: var(--warn); animation: state-pulse 1.1s ease-in-out infinite; }
|
|
6468
|
+
.bar-left .connection:is([data-state="offline"], [data-state="closed"], [data-state="disconnected"]) .connection-dot { background: var(--danger, #e5484d); animation: none; }
|
|
6469
|
+
/* The project's state is a dot that breathes, nothing more (2026-10-14): from its size to a little
|
|
6470
|
+
larger and back, in the colour of the state. No glow around it. */
|
|
6471
|
+
@keyframes state-pulse { 0%, 100% { transform: scale(.85); } 50% { transform: scale(1.15); } }
|
|
6472
|
+
:root.just-arrived .bar-left .connection[data-state="live"] .connection-dot { animation: state-pulse 2.6s ease-in-out infinite; }
|
|
6313
6473
|
.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; }
|
|
6314
6474
|
.bar-left .connection:hover::after { opacity: 1; }
|
|
6315
6475
|
.bar-left .connection::first-letter { text-transform: none; }
|
|
@@ -6653,7 +6813,9 @@ dialog.mods-window { width: 1040px; height: 720px; container: modswin / inline-s
|
|
|
6653
6813
|
display: inline-flex; align-items: center; gap: 9px;
|
|
6654
6814
|
padding: 9px 16px 9px 13px; border: 0; border-radius: 20px;
|
|
6655
6815
|
background: var(--surface, var(--panel)); color: var(--text);
|
|
6656
|
-
|
|
6816
|
+
/* It floats over the canvas (2026-10-14): a rim, a near shadow and a far one, so it reads lifted
|
|
6817
|
+
off any wallpaper or thread under it. */
|
|
6818
|
+
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);
|
|
6657
6819
|
font-family: var(--read); font-size: 13px; font-weight: 450; line-height: 1.4; text-align: left;
|
|
6658
6820
|
max-width: min(560px, calc(100% - 32px)); width: max-content;
|
|
6659
6821
|
}
|
|
@@ -6678,7 +6840,7 @@ dialog.mods-window { width: 1040px; height: 720px; container: modswin / inline-s
|
|
|
6678
6840
|
#messages .row > .avatar.gradient { box-shadow: none !important; }
|
|
6679
6841
|
#messages .row > .avatar svg { width: 64%; height: 64%; opacity: 1; }
|
|
6680
6842
|
|
|
6681
|
-
:root[data-scheme="light"] .toast:not([hidden]) { box-shadow: 0
|
|
6843
|
+
: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); }
|
|
6682
6844
|
|
|
6683
6845
|
/* ==========================================================================================
|
|
6684
6846
|
MU/TH/UR · the remedies, as a window of the room
|
|
@@ -6848,6 +7010,9 @@ dialog.room-ask:not(.console) .room-ask-choice.danger:hover { background: var(--
|
|
|
6848
7010
|
/* The key, quieter: one sentence of what it allows, a smaller one of what keeps it safe, the
|
|
6849
7011
|
ceiling note when there is one, and a field whose label says what to type. */
|
|
6850
7012
|
dialog.key-ask .room-ask-body { color: var(--text); font-size: 14px; }
|
|
7013
|
+
/* «Don't ask again…» under the memory gate: a quiet link to Settings › Permissions › Memory access. */
|
|
7014
|
+
.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; }
|
|
7015
|
+
.key-skip:hover, .key-skip:focus-visible { color: var(--text); background: color-mix(in srgb, var(--text) 6%, transparent); outline: 0; }
|
|
6851
7016
|
.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); }
|
|
6852
7017
|
.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; }
|
|
6853
7018
|
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)); }
|
|
@@ -7566,7 +7731,7 @@ html.via-phone[data-wallpaper]:not([data-wallpaper="default"]) { --phone-ground:
|
|
|
7566
7731
|
:root:not(.via-phone) .shell > .bar.with-home {
|
|
7567
7732
|
width: auto; justify-self: stretch;
|
|
7568
7733
|
margin-left: max(20px, calc((100% - 1440px) / 2));
|
|
7569
|
-
margin-right: calc(max(20px, calc((100% - 1440px) / 2)) + var(--home-w, 150px) +
|
|
7734
|
+
margin-right: calc(max(20px, calc((100% - 1440px) / 2)) + var(--home-w, 150px) + 16px);
|
|
7570
7735
|
}
|
|
7571
7736
|
/* With the second bar beside it the room's bar is ~120px narrower, so the pulse alone takes the
|
|
7572
7737
|
wordmark's place a little earlier: before the brand is cut instead of folded. */
|
|
@@ -7701,6 +7866,32 @@ dialog.viewer .viewer-seg .viewer-seg-btn:not([hidden]) + .viewer-open { margin-
|
|
|
7701
7866
|
.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; }
|
|
7702
7867
|
.agent-pop .caps { margin-top: 12px !important; padding-top: 12px; border-top: 1px solid var(--line); }
|
|
7703
7868
|
.agent-pop .foot { margin-top: 10px; font-size: 9px; line-height: 1.5; }
|
|
7869
|
+
/* The agent's card, ordered (2026-10-14): name and session, one figure, four numbers, the plan, a
|
|
7870
|
+
line for the connection, what it can do and the way to its settings. */
|
|
7871
|
+
.agent-pop .head { gap: 10px; }
|
|
7872
|
+
.agent-pop .pop-who { display: grid; gap: 1px; min-width: 0; }
|
|
7873
|
+
.agent-pop .pop-who .vendor { margin: 0; font-family: var(--read, var(--sans)); font-size: 11.5px; letter-spacing: 0; color: var(--text-3); }
|
|
7874
|
+
.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; }
|
|
7875
|
+
.agent-pop .pop-session::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--text-3); }
|
|
7876
|
+
.agent-pop .pop-session.ok::before { background: #34c759; }
|
|
7877
|
+
.agent-pop .pop-session.wait::before { background: var(--warn); }
|
|
7878
|
+
.agent-pop .pop-session.bad::before { background: var(--danger); }
|
|
7879
|
+
.agent-pop .pop-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 12px 0; border-bottom: 1px solid var(--line); }
|
|
7880
|
+
.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; }
|
|
7881
|
+
.agent-pop .pop-stat span { font-family: var(--read, var(--sans)); font-size: 11px; color: var(--text-3); }
|
|
7882
|
+
.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; }
|
|
7883
|
+
.agent-pop .pop-provider { display: grid; gap: 5px; padding: 11px 0; border-bottom: 1px solid var(--line); }
|
|
7884
|
+
.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; }
|
|
7885
|
+
.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); }
|
|
7886
|
+
.agent-pop .pop-limit b { font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }
|
|
7887
|
+
.agent-pop .pop-limit.hot b { color: var(--crit); }
|
|
7888
|
+
.agent-pop .pop-note { margin: 0; font-family: var(--read, var(--sans)); font-size: 12px; line-height: 1.45; color: var(--text-2); }
|
|
7889
|
+
.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); }
|
|
7890
|
+
.agent-pop .caps { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 10px !important; padding-top: 0; border-top: 0; }
|
|
7891
|
+
.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); }
|
|
7892
|
+
.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)); }
|
|
7893
|
+
.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; }
|
|
7894
|
+
.agent-pop .pop-go:is(:hover, :focus-visible) { background: color-mix(in srgb, var(--text) 12%, transparent); outline: 0; }
|
|
7704
7895
|
|
|
7705
7896
|
/* The agent picker: the chosen agent at full colour; the others dimmed, until the pointer finds one. */
|
|
7706
7897
|
.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); }
|
|
@@ -7792,6 +7983,37 @@ dialog#core .mother-close { height: 30px; padding: 0 13px; border: 0; border-rad
|
|
|
7792
7983
|
dialog#core .mother-close:hover { box-shadow: var(--key-over, var(--key-rest)); color: var(--phosphor); }
|
|
7793
7984
|
dialog#core .mother-close:active { box-shadow: var(--key-down, var(--key-rest)); }
|
|
7794
7985
|
dialog#core .mother-boot { display: none; }
|
|
7986
|
+
/* «Lo que se envía» in the room's hand (2026-10-14): the title over its line on the left, the
|
|
7987
|
+
buttons every window has on the right, centred tabs, and the console's capitals gone from what
|
|
7988
|
+
used to be MU/TH/UR's (the verdict, «next», the memory review, the roles and fields). */
|
|
7989
|
+
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; }
|
|
7990
|
+
dialog#core .mother-title { grid-area: title; line-height: 1.25; }
|
|
7991
|
+
dialog#core .mother-sub { grid-area: sub; flex: none; line-height: 1.35; }
|
|
7992
|
+
dialog#core .mother-actions { grid-area: actions; align-items: center; gap: 10px; }
|
|
7993
|
+
dialog#core .core-copy-all { height: 30px; font-family: var(--read); font-size: 12.5px; font-weight: 550; letter-spacing: 0; text-transform: none; }
|
|
7994
|
+
dialog#core .core-tab { display: grid; justify-items: center; text-align: center; }
|
|
7995
|
+
dialog#core .core-tab .meta { max-width: 100%; }
|
|
7996
|
+
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; }
|
|
7997
|
+
dialog#core .mem-verdict .says b { margin-right: 6px; font-size: 13px; letter-spacing: 0; color: var(--text); }
|
|
7998
|
+
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); }
|
|
7999
|
+
dialog#core .mem-verdict .maturity-next b { margin-right: 8px; font-size: 12.5px; font-weight: 600; letter-spacing: 0; color: var(--phosphor); }
|
|
8000
|
+
dialog#core .mem-verdict .maturity-next .where { font-size: 12px; letter-spacing: 0; color: var(--text-3); }
|
|
8001
|
+
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; }
|
|
8002
|
+
dialog#core .exam-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
|
|
8003
|
+
dialog#core .exam-head b { font-size: 13px; font-weight: 600; color: var(--text); }
|
|
8004
|
+
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); }
|
|
8005
|
+
dialog#core .exam.passed .verdict { background: color-mix(in srgb, var(--phosphor) 16%, transparent); color: var(--phosphor); }
|
|
8006
|
+
dialog#core .exam.failed .verdict { background: color-mix(in srgb, var(--warn) 16%, transparent); color: var(--warn); }
|
|
8007
|
+
dialog#core .exam :is(.note, .said) { font-size: 12.5px; line-height: 1.5; color: var(--text-2); }
|
|
8008
|
+
dialog#core .exam-bullet span { font-size: 11.5px; color: var(--text-3); }
|
|
8009
|
+
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; }
|
|
8010
|
+
dialog#core .exam .actions button.primary { background: var(--phosphor); color: var(--phosphor-ink); }
|
|
8011
|
+
dialog#core .core-role { color: var(--text); }
|
|
8012
|
+
dialog#core .core-role input { width: 15px; height: 15px; accent-color: var(--phosphor); }
|
|
8013
|
+
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); }
|
|
8014
|
+
dialog#core .core-role-words .detail { font-family: var(--read); font-size: 12px; letter-spacing: 0; color: var(--text-3); }
|
|
8015
|
+
dialog#core .core-field { font-family: var(--read); font-size: 12px; letter-spacing: 0; text-transform: none; color: var(--text-3); }
|
|
8016
|
+
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; }
|
|
7795
8017
|
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; }
|
|
7796
8018
|
/* The body: tabs, the strip that says for whom, the pane, and the question line. */
|
|
7797
8019
|
dialog#core .core-body { min-height: 0; gap: 12px; padding: 14px 22px 14px; }
|
|
@@ -7961,6 +8183,74 @@ dialog#core .mother-cmd .copy { position: absolute; top: 8px; right: 8px; displa
|
|
|
7961
8183
|
width: fit-content; max-width: min(92%, 560px); margin-inline: auto; padding: 8px 16px 9px; border: 0; border-radius: 18px;
|
|
7962
8184
|
}
|
|
7963
8185
|
#messages#messages .row > .col > .who { width: fit-content; max-width: 100%; padding: 3px 10px; border-radius: 999px; }
|
|
8186
|
+
/* A failure wears the room's own card (2026-10-14): rounded, as wide as its words, in its red
|
|
8187
|
+
tint — it was a square box of another app. Its RETRY and UNDO stay under it. */
|
|
8188
|
+
#messages#messages .thread-inner > .system.fail {
|
|
8189
|
+
width: fit-content; max-width: min(92%, 560px); margin-inline: auto; padding: 10px 18px 11px; border: 0; border-radius: 18px;
|
|
8190
|
+
background: color-mix(in srgb, var(--danger) 9%, var(--plane-solid, var(--panel))) !important;
|
|
8191
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--danger) 30%, transparent) !important;
|
|
8192
|
+
}
|
|
8193
|
+
#messages#messages .thread-inner > .system.fail .label { font-family: var(--mono); letter-spacing: .14em; }
|
|
8194
|
+
|
|
8195
|
+
/* ==========================================================================================
|
|
8196
|
+
NOTICES THAT FOLD INTO DOTS (2026-10-14)
|
|
8197
|
+
------------------------------------------------------------------------------------------
|
|
8198
|
+
A notice says its piece and, ten seconds later, folds into a row of the notices around it.
|
|
8199
|
+
Folded, the row is one small dot in the colour of its first notice and «+N» for the rest, on
|
|
8200
|
+
the same glass as mode · model · effort so it reads on any wallpaper. A click opens the row as
|
|
8201
|
+
one card with every notice in order, each with its dot; another click, or Escape, folds it.
|
|
8202
|
+
Red is a diagnostic, amber a permission or a warning, green something that went well, grey the
|
|
8203
|
+
rest. Sizes carry !important: the wallpaper's rules for the room's lines would otherwise give a
|
|
8204
|
+
folded notice their width and padding (it was a dot 0 px wide, only its ring showing).
|
|
8205
|
+
========================================================================================== */
|
|
8206
|
+
#messages#messages .thread-inner > .system.folding { animation: notice-fold .22s ease forwards; }
|
|
8207
|
+
@keyframes notice-fold { to { opacity: 0; transform: scale(.94); } }
|
|
8208
|
+
#messages .sys-dots {
|
|
8209
|
+
display: flex; align-items: center; gap: 6px; width: fit-content; max-width: min(92%, 560px); margin: 6px auto; padding: 4px 9px 4px 7px;
|
|
8210
|
+
border-radius: 999px; cursor: pointer; font-family: var(--mono); font-size: 10px; letter-spacing: .06em; color: var(--text-2);
|
|
8211
|
+
background: color-mix(in srgb, var(--bg) 62%, transparent); border: .5px solid color-mix(in srgb, var(--text) 10%, transparent);
|
|
8212
|
+
-webkit-backdrop-filter: blur(18px) saturate(1.6); backdrop-filter: blur(18px) saturate(1.6);
|
|
8213
|
+
transition: background .18s ease;
|
|
8214
|
+
}
|
|
8215
|
+
#messages .sys-dots:hover, #messages .sys-dots:focus-visible { background: color-mix(in srgb, var(--bg) 78%, transparent); outline: none; }
|
|
8216
|
+
#messages .sys-dots > .sys-more { font: inherit; color: inherit; }
|
|
8217
|
+
#messages .sys-dots.single { padding: 6px; gap: 0; justify-content: center; }
|
|
8218
|
+
#messages#messages .sys-dots > .system.folded { --dot: var(--text-3); margin: 0; cursor: inherit; }
|
|
8219
|
+
#messages#messages .sys-dots > .system.folded[data-tone="crit"] { --dot: var(--terror, #d33); }
|
|
8220
|
+
#messages#messages .sys-dots > .system.folded[data-tone="warn"] { --dot: var(--warn, #e2a022); }
|
|
8221
|
+
#messages#messages .sys-dots > .system.folded[data-tone="ok"] { --dot: var(--ok, var(--phosphor, #2f9e44)); }
|
|
8222
|
+
/* Folded: the first notice is the dot; the rest are counted in «+N». */
|
|
8223
|
+
#messages#messages .sys-dots:not(.open) > .system.folded {
|
|
8224
|
+
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;
|
|
8225
|
+
overflow: hidden; font-size: 0; line-height: 0; color: transparent; text-shadow: none !important;
|
|
8226
|
+
background: var(--dot) !important; box-shadow: 0 0 0 2px color-mix(in srgb, var(--dot) 22%, transparent) !important;
|
|
8227
|
+
-webkit-backdrop-filter: none !important; backdrop-filter: none !important;
|
|
8228
|
+
animation: dot-in .28s cubic-bezier(.2, .9, .3, 1.25);
|
|
8229
|
+
}
|
|
8230
|
+
#messages#messages .sys-dots:not(.open) > .system.folded:not(:first-child) { display: none !important; }
|
|
8231
|
+
#messages#messages .sys-dots:not(.open) > .system.folded > * { display: none !important; }
|
|
8232
|
+
#messages#messages .sys-dots > .system.folded.quiet { animation: none; }
|
|
8233
|
+
@keyframes dot-in { from { transform: scale(.3); opacity: 0; } to { transform: scale(1); opacity: 1; } }
|
|
8234
|
+
/* Open: one card, every notice in order, each with its dot. No bar on the side. */
|
|
8235
|
+
#messages .sys-dots.open {
|
|
8236
|
+
display: grid; gap: 2px; width: min(92%, 560px); padding: 6px; border-radius: 16px; cursor: default;
|
|
8237
|
+
background: color-mix(in srgb, var(--bg) 88%, transparent); border-color: color-mix(in srgb, var(--text) 12%, transparent);
|
|
8238
|
+
box-shadow: 0 10px 30px -12px rgb(0 0 0 / .35); animation: notice-peek .2s ease;
|
|
8239
|
+
}
|
|
8240
|
+
#messages#messages .sys-dots.open > .system.folded { color: var(--text-2) !important; }
|
|
8241
|
+
#messages#messages .sys-dots.open > .system.folded {
|
|
8242
|
+
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;
|
|
8243
|
+
text-align: left; background: transparent !important; box-shadow: none !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
|
|
8244
|
+
}
|
|
8245
|
+
#messages#messages .sys-dots.open > .system.folded:hover { background: color-mix(in srgb, var(--text) 4%, transparent) !important; }
|
|
8246
|
+
#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); }
|
|
8247
|
+
#messages#messages .sys-dots.open > .system.folded > b:first-child { display: inline; margin-right: 6px; }
|
|
8248
|
+
#messages .sys-dots.open > .sys-more { justify-self: center; margin-top: 2px; padding: 3px 10px; border-radius: 999px; cursor: pointer; color: var(--text-3); }
|
|
8249
|
+
#messages .sys-dots.open > .sys-more:hover { color: var(--text); }
|
|
8250
|
+
@keyframes notice-peek { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
|
|
8251
|
+
@media (prefers-reduced-motion: reduce) {
|
|
8252
|
+
#messages#messages .sys-dots > .system.folded, #messages .sys-dots.open, #messages#messages .thread-inner > .system.folding { animation: none !important; transition: none !important; }
|
|
8253
|
+
}
|
|
7964
8254
|
|
|
7965
8255
|
/* ==========================================================================================
|
|
7966
8256
|
SIGUE ABIERTO AQUÍ, THE SAME GLASS AS MODE · MODEL · EFFORT (2026-10-09)
|
|
@@ -7972,9 +8262,9 @@ dialog#core .mother-cmd .copy { position: absolute; top: 8px; right: 8px; displa
|
|
|
7972
8262
|
(`#composer#composer` only outranks CHIPS IN FLAT TONE, which had flattened them into tags.)
|
|
7973
8263
|
========================================================================================== */
|
|
7974
8264
|
:root {
|
|
7975
|
-
--lq-fill: color-mix(in srgb, var(--bg) 45%, transparent);
|
|
7976
|
-
--lq-fill-over: color-mix(in srgb, var(--bg) 62%, transparent);
|
|
7977
|
-
--lq-rim:
|
|
8265
|
+
--lq-fill: color-mix(in srgb, var(--text) 7%, color-mix(in srgb, var(--bg) 45%, transparent));
|
|
8266
|
+
--lq-fill-over: color-mix(in srgb, var(--text) 11%, color-mix(in srgb, var(--bg) 62%, transparent));
|
|
8267
|
+
--lq-rim: 0 0 0 .5px color-mix(in srgb, var(--text) 12%, transparent), inset 0 1px 0 rgb(255 255 255 / .05);
|
|
7978
8268
|
}
|
|
7979
8269
|
:root[data-scheme="light"] {
|
|
7980
8270
|
--lq-fill: color-mix(in srgb, var(--bg) 62%, transparent);
|
|
@@ -8216,7 +8506,7 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8216
8506
|
.tour-points li::before { content: ''; position: absolute; left: 2px; top: .62em; width: 6px; height: 6px; border-radius: 50%; background: var(--tour-acc); }
|
|
8217
8507
|
.tour-keys { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, max-content); gap: 6px 14px; margin: 6px 0 0; padding: 10px 12px; border-radius: 12px; background: color-mix(in srgb, var(--text) 4%, transparent); }
|
|
8218
8508
|
.tour-keys dt { font-size: 12.5px; color: var(--text-2); }
|
|
8219
|
-
.tour-keys dd { margin: 0; max-width:
|
|
8509
|
+
.tour-keys dd { margin: 0; max-width: 34ch; text-wrap: balance; justify-self: end; font-family: var(--mono); font-size: 11.5px; line-height: 1.4; text-align: right; color: var(--text); }
|
|
8220
8510
|
.tour-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
|
|
8221
8511
|
.tour-gap { flex: 1; }
|
|
8222
8512
|
.tour-where { font-size: 12.5px; color: var(--text-3); }
|
|
@@ -8228,7 +8518,7 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8228
8518
|
|
|
8229
8519
|
/* The scenes: a few shapes, drawn small, moving slowly. */
|
|
8230
8520
|
.tour-scene { position: relative; height: 168px; overflow: hidden; border-radius: 14px; background: radial-gradient(120% 90% at 50% 0%, color-mix(in srgb, var(--tour-acc) 14%, transparent), transparent 70%), color-mix(in srgb, var(--text) 4%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text) 8%, transparent); }
|
|
8231
|
-
.tour-scene.s-moved { height: auto; padding: 12px 14px; }
|
|
8521
|
+
.tour-scene.s-moved, .tour-scene.s-table { height: auto; padding: 12px 14px; }
|
|
8232
8522
|
.ts-moved { display: grid; gap: 6px; }
|
|
8233
8523
|
.ts-moved-row { display: grid; grid-template-columns: minmax(0, 1fr) 18px minmax(0, 1.4fr); align-items: center; gap: 8px; font-size: 12.5px; animation: tour-rise calc(420ms * var(--motion-scale, 1)) ease both; }
|
|
8234
8524
|
.ts-moved-row:nth-child(2) { animation-delay: 60ms; } .ts-moved-row:nth-child(3) { animation-delay: 120ms; } .ts-moved-row:nth-child(4) { animation-delay: 180ms; } .ts-moved-row:nth-child(5) { animation-delay: 240ms; } .ts-moved-row:nth-child(6) { animation-delay: 300ms; } .ts-moved-row:nth-child(7) { animation-delay: 360ms; } .ts-moved-row:nth-child(8) { animation-delay: 420ms; }
|
|
@@ -8309,6 +8599,32 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8309
8599
|
.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; }
|
|
8310
8600
|
.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; }
|
|
8311
8601
|
.tour-pill-x svg { width: 11px; height: 11px; }
|
|
8602
|
+
/* A phone's room bar (2026-10-14): only what keeps it whole — the pulse, the live light, DETENER
|
|
8603
|
+
TODO and «more» on the left; Inicio, the projects and Ajustes on the right. Reload is the page's
|
|
8604
|
+
own pull, and the tour goes on from Ajustes › Versión. */
|
|
8605
|
+
@media (max-width: 560px) {
|
|
8606
|
+
.shell > .bar { gap: 8px; }
|
|
8607
|
+
.shell > .bar .brand { width: 40px; overflow: hidden; flex: none; }
|
|
8608
|
+
.shell > .bar .tour-pill-slot, .shell > .bar-home #reload-button { display: none !important; }
|
|
8609
|
+
}
|
|
8610
|
+
/* The room's bar knows its own width (2026-10-14): split beside a second conversation and the
|
|
8611
|
+
browser it is narrow on a wide screen, where the screen's media queries never fire. */
|
|
8612
|
+
/* Both names: «bar» is the one every older fold of the bar asks for; with only «roombar» here
|
|
8613
|
+
(2026-10-14) none of them fired and a narrow bar kept its wide keys. */
|
|
8614
|
+
.shell > .bar:not(.bar-home) { container: bar roombar / inline-size; }
|
|
8615
|
+
@container roombar (max-width: 760px) {
|
|
8616
|
+
.tour-pill-go[data-short] { font-size: 0; }
|
|
8617
|
+
.tour-pill-go[data-short]::after { content: attr(data-short); font-size: 12px; }
|
|
8618
|
+
}
|
|
8619
|
+
@container roombar (max-width: 470px) {
|
|
8620
|
+
.bar-left .brand { width: 40px; overflow: hidden; flex: none; }
|
|
8621
|
+
.tour-pill-slot { display: none !important; }
|
|
8622
|
+
}
|
|
8623
|
+
/* A narrow bar (2026-10-14): the pill says «Recorrido · 3/13»; the full sentence stays its name. */
|
|
8624
|
+
@media (max-width: 1180px) {
|
|
8625
|
+
.tour-pill-go[data-short] { font-size: 0; }
|
|
8626
|
+
.tour-pill-go[data-short]::after { content: attr(data-short); font-size: 12px; }
|
|
8627
|
+
}
|
|
8312
8628
|
.tour-pill-x:hover { color: var(--text); background: color-mix(in srgb, var(--text) 10%, transparent); }
|
|
8313
8629
|
|
|
8314
8630
|
/* A hint: one line, once, beside the place it speaks of, in the top layer — a bubble, no beak. And
|
|
@@ -8338,3 +8654,790 @@ dialog.tour-bonjour::backdrop { background: transparent; }
|
|
|
8338
8654
|
.ts-search em { width: 54%; }
|
|
8339
8655
|
}
|
|
8340
8656
|
.tour-pill-slot:not([hidden]) { display: inline-flex; align-items: center; }
|
|
8657
|
+
|
|
8658
|
+
/* ==========================================================================================
|
|
8659
|
+
KEYS WITH A CLEAN EDGE · 13 OCT
|
|
8660
|
+
------------------------------------------------------------------------------------------
|
|
8661
|
+
The two soft shadows of the shared light (above) read as a smudge on a white card: the light
|
|
8662
|
+
one vanishes and the dark one spreads. A key now stands on three thin layers instead — a
|
|
8663
|
+
hairline that draws its edge, a tight contact shadow and a short soft one below — with a
|
|
8664
|
+
faint lit top in the dark. Over it, it lifts a little; pressed, the shade goes inside. The
|
|
8665
|
+
same four tokens dress every key, in Home and in every project.
|
|
8666
|
+
========================================================================================== */
|
|
8667
|
+
:root {
|
|
8668
|
+
--key-rest: inset 0 1px 0 rgba(255, 255, 255, .055), 0 0 0 .5px rgba(0, 0, 0, .6), 0 1px 1.5px rgba(0, 0, 0, .42), 0 3px 8px -3px rgba(0, 0, 0, .5);
|
|
8669
|
+
--key-over: inset 0 1px 0 rgba(255, 255, 255, .075), 0 0 0 .5px rgba(0, 0, 0, .6), 0 2px 3px rgba(0, 0, 0, .38), 0 8px 18px -7px rgba(0, 0, 0, .58);
|
|
8670
|
+
--key-down: inset 0 1px 2px rgba(0, 0, 0, .55), inset 0 0 0 .5px rgba(0, 0, 0, .5);
|
|
8671
|
+
--key-track: inset 0 0 0 .5px rgba(255, 255, 255, .07), inset 0 1px 2px rgba(0, 0, 0, .38);
|
|
8672
|
+
}
|
|
8673
|
+
:root[data-scheme="light"] {
|
|
8674
|
+
--key-rest: 0 0 0 .5px rgba(22, 30, 22, .11), 0 1px 1.5px rgba(22, 30, 22, .08), 0 2px 6px -2px rgba(22, 30, 22, .12);
|
|
8675
|
+
--key-over: 0 0 0 .5px rgba(22, 30, 22, .13), 0 2px 3px rgba(22, 30, 22, .08), 0 8px 18px -8px rgba(22, 30, 22, .2);
|
|
8676
|
+
--key-down: inset 0 1px 2px rgba(22, 30, 22, .14), inset 0 0 0 .5px rgba(22, 30, 22, .14);
|
|
8677
|
+
--key-track: inset 0 0 0 .5px rgba(22, 30, 22, .12), inset 0 1px 2px rgba(22, 30, 22, .06);
|
|
8678
|
+
}
|
|
8679
|
+
|
|
8680
|
+
/* ==========================================================================================
|
|
8681
|
+
OPENCODE BY PROVIDER · 13 OCT
|
|
8682
|
+
The composer's chooser groups OpenCode's models under the provider they come from, and
|
|
8683
|
+
AJUSTES › Project › OpenCode lists the providers with their key and their switch.
|
|
8684
|
+
========================================================================================== */
|
|
8685
|
+
.model-list { max-height: 320px; }
|
|
8686
|
+
.model-group { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin: 10px 10px 3px; font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); }
|
|
8687
|
+
.model-group:first-of-type { margin-top: 6px; }
|
|
8688
|
+
.model-group b { font-weight: 650; color: var(--text-2); }
|
|
8689
|
+
.model-group span { letter-spacing: .04em; text-transform: none; font-size: 10.5px; }
|
|
8690
|
+
.model-group + .model-option { margin-top: 1px; }
|
|
8691
|
+
.model-manage { display: block; width: 100%; margin-top: 8px; padding: 8px 10px; border: 0; border-radius: 8px; background: transparent; color: var(--agent, var(--phosphor)); font: inherit; font-size: 12px; font-weight: 600; text-align: left; cursor: pointer; }
|
|
8692
|
+
.model-manage:hover { background: color-mix(in srgb, var(--agent, var(--phosphor)) 10%, transparent); }
|
|
8693
|
+
|
|
8694
|
+
.oc-block { display: grid; gap: 12px; margin: 0 16px 16px; padding: 16px 16px 12px; border-radius: 12px; box-shadow: var(--key-track); }
|
|
8695
|
+
.oc-title { display: grid; gap: 3px; }
|
|
8696
|
+
.oc-title b, .oc-add-label { font-size: 13.5px; font-weight: 600; color: var(--text); }
|
|
8697
|
+
.oc-providers { display: grid; gap: 0; }
|
|
8698
|
+
.oc-provider { display: flex; align-items: center; justify-content: space-between; gap: 14px; min-width: 0; padding: 10px 0; border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
|
|
8699
|
+
.oc-provider:first-child { border-top: 0; padding-top: 2px; }
|
|
8700
|
+
.oc-provider .sx-words { display: grid; gap: 1px; min-width: 0; }
|
|
8701
|
+
.oc-provider .sx-words b { font-size: 13.5px; font-weight: 600; color: var(--text); }
|
|
8702
|
+
.oc-controls { display: inline-flex; align-items: center; gap: 12px; flex: none; }
|
|
8703
|
+
.oc-shown { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-2); }
|
|
8704
|
+
.oc-add { display: grid; grid-template-columns: auto minmax(110px, 160px) minmax(0, 1fr) auto auto; align-items: center; gap: 8px 10px; padding-top: 12px; border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
|
|
8705
|
+
.oc-add .sx-input { height: 32px; min-width: 0; }
|
|
8706
|
+
.oc-where { font-size: 12px; font-weight: 550; color: var(--phosphor); text-decoration: none; white-space: nowrap; }
|
|
8707
|
+
.oc-where:hover { text-decoration: underline; }
|
|
8708
|
+
.oc-default-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); align-items: center; gap: 14px; padding-top: 12px; border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
|
|
8709
|
+
.oc-default-row .sx-words { display: grid; gap: 2px; }
|
|
8710
|
+
.oc-default-row .sx-words b { font-size: 13.5px; font-weight: 600; color: var(--text); }
|
|
8711
|
+
.oc-picks { display: grid; gap: 8px; min-width: 0; }
|
|
8712
|
+
.oc-picks .sx-input { height: 32px; min-width: 0; width: 100%; }
|
|
8713
|
+
.oc-block > .sx-foot { margin: 0; font-size: 11.5px; }
|
|
8714
|
+
@container (max-width: 560px) {
|
|
8715
|
+
.oc-add { grid-template-columns: minmax(0, 1fr) auto; }
|
|
8716
|
+
.oc-add-label { grid-column: 1 / -1; }
|
|
8717
|
+
.oc-add .sx-input { grid-column: 1 / -1; }
|
|
8718
|
+
.oc-default-row { grid-template-columns: 1fr; }
|
|
8719
|
+
}
|
|
8720
|
+
|
|
8721
|
+
/* ==========================================================================================
|
|
8722
|
+
AGENTS, FOLDED · 13 OCT
|
|
8723
|
+
Each agent is one line until it is opened: who it is, whether it has a session and a chevron.
|
|
8724
|
+
Open, its settings come in pairs and its sign-in shows the last lines, the heartbeat once.
|
|
8725
|
+
========================================================================================== */
|
|
8726
|
+
#settings .sx-agent { container-type: inline-size; }
|
|
8727
|
+
.sx-agent > .sx-head { padding: 0; }
|
|
8728
|
+
.sx-agent-toggle { display: flex; align-items: center; gap: 12px; width: 100%; min-width: 0; padding: 14px 16px; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; border-radius: inherit; }
|
|
8729
|
+
.sx-agent-toggle .sx-words { flex: 1; min-width: 0; }
|
|
8730
|
+
.sx-agent-toggle .sx-words p { margin: 0; }
|
|
8731
|
+
.sx-agent-toggle:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 55%, transparent); outline-offset: -2px; }
|
|
8732
|
+
.sx-chevron { flex: none; width: 8px; height: 8px; margin: 0 4px 0 2px; border-right: 1.6px solid var(--text-3); border-bottom: 1.6px solid var(--text-3); transform: rotate(45deg) translate(-2px, -2px); transition: transform calc(180ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
8733
|
+
.sx-agent.open .sx-chevron { transform: rotate(-135deg) translate(-2px, -2px); }
|
|
8734
|
+
.sx-agent:not(.open) > .sx-meta, .sx-agent:not(.open) > .sx-agent-body { display: none; }
|
|
8735
|
+
.sx-agent:not(.open) { padding-bottom: 0; }
|
|
8736
|
+
.sx-agent > .sx-meta { padding-top: 0; margin-top: -4px; }
|
|
8737
|
+
.sx-agent-body { display: grid; }
|
|
8738
|
+
.sx-duo { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
8739
|
+
.sx-duo > .sx-row { min-width: 0; gap: 10px; padding-right: 14px; }
|
|
8740
|
+
.sx-duo > .sx-row .sx-control { max-width: none; }
|
|
8741
|
+
.sx-duo > .sx-row + .sx-row { border-left: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
|
|
8742
|
+
@container (max-width: 380px) {
|
|
8743
|
+
.sx-duo { grid-template-columns: 1fr; }
|
|
8744
|
+
.sx-duo > .sx-row + .sx-row { border-left: 0; }
|
|
8745
|
+
}
|
|
8746
|
+
.sx-agent .login-log { max-height: 132px; overflow-y: auto; padding: 10px 12px; border-radius: 10px; background: color-mix(in srgb, var(--text) 4%, transparent); font-family: var(--mono); font-size: 11.5px; line-height: 1.55; overflow-wrap: anywhere; }
|
|
8747
|
+
.sx-agent .login-log .beat { color: var(--text-3); }
|
|
8748
|
+
.sx-agent .login-log a { color: var(--phosphor); }
|
|
8749
|
+
|
|
8750
|
+
/* ==========================================================================================
|
|
8751
|
+
QUIET GEARS · 13 OCT
|
|
8752
|
+
The settings key of Files and Servers and the new-file key wore the white raised face the
|
|
8753
|
+
window keys wear only when they are ON (split view chosen), so they read as already pressed.
|
|
8754
|
+
At rest they now dress like the controls beside them — a hairline track, the bar's own
|
|
8755
|
+
ground, a grey icon — and take the accent only under the pointer, the way the window keys do.
|
|
8756
|
+
========================================================================================== */
|
|
8757
|
+
:root .surface-gear, :root[data-scheme] .surface-gear {
|
|
8758
|
+
border: 1px solid var(--line-2) !important;
|
|
8759
|
+
background-color: color-mix(in srgb, var(--text) 3%, transparent) !important;
|
|
8760
|
+
box-shadow: none !important;
|
|
8761
|
+
color: var(--text-3);
|
|
8762
|
+
border-radius: 9px;
|
|
8763
|
+
}
|
|
8764
|
+
:root .surface-gear:hover:not(:disabled), :root .surface-gear:focus-visible {
|
|
8765
|
+
color: var(--phosphor);
|
|
8766
|
+
background-color: color-mix(in srgb, var(--phosphor) 10%, transparent) !important;
|
|
8767
|
+
box-shadow: none !important;
|
|
8768
|
+
}
|
|
8769
|
+
:root .surface-gear:active:not(:disabled), :root .surface-gear[aria-pressed="true"], :root .surface-gear[aria-expanded="true"] {
|
|
8770
|
+
color: var(--phosphor);
|
|
8771
|
+
background-color: var(--surface, var(--panel)) !important;
|
|
8772
|
+
box-shadow: var(--key-down) !important;
|
|
8773
|
+
}
|
|
8774
|
+
|
|
8775
|
+
/* The tour's widgets scene (1.1): four cards on a board, each with two meters that fill once. */
|
|
8776
|
+
.ts-grid.ts-widgets { top: 22px; bottom: 22px; grid-template-columns: repeat(2, 1fr); }
|
|
8777
|
+
.ts-widgets .ts-card { display: grid; align-content: center; gap: 9px; padding: 0 14px; }
|
|
8778
|
+
.ts-widgets .ts-card i { display: block; height: 6px; border-radius: 99px; background: linear-gradient(90deg, var(--phosphor) calc(var(--w) * 100%), color-mix(in srgb, var(--text) 10%, transparent) 0); }
|
|
8779
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
8780
|
+
.ts-widgets .ts-card i { animation: ts-fill 1.6s cubic-bezier(.2, .7, .2, 1) both; }
|
|
8781
|
+
.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; }
|
|
8782
|
+
}
|
|
8783
|
+
@keyframes ts-fill { from { background-size: 0 100%; background-repeat: no-repeat; } to { background-size: 100% 100%; background-repeat: no-repeat; } }
|
|
8784
|
+
|
|
8785
|
+
/* The tables of what was renamed or moved: a long new name wraps under itself, never past the box. */
|
|
8786
|
+
.ts-moved-row .now { overflow-wrap: anywhere; line-height: 1.35; }
|
|
8787
|
+
|
|
8788
|
+
/* The welcome and its chapters are dialogs too: their own ring is not drawn around them. */
|
|
8789
|
+
dialog.tour-bonjour:focus, dialog.tour-bonjour:focus-visible, dialog.whats-new:focus, dialog.whats-new:focus-visible { outline: none; }
|
|
8790
|
+
|
|
8791
|
+
/* ==========================================================================================
|
|
8792
|
+
RESPUESTAS SIN BURBUJA (2026-10-15). La forma de siempre es C · piezas con carril difuso (app.js
|
|
8793
|
+
pone data-reply="pieces" y data-reply-legible="lane"); las demás quedan para comparar, por atributos en
|
|
8794
|
+
<html> que pone el selector de prueba (app.js, ?reply=): data-reply = doc (A · regla bajo la
|
|
8795
|
+
cabecera), doc-inline (A · el avatar entra a la cabecera), pieces (C · plan en tarjeta),
|
|
8796
|
+
pieces-edge (C · tarjeta con el filo de cada agente). data-reply-legible = lane (vidrio difuso
|
|
8797
|
+
detrás de cada respuesta), column (una columna de lectura detrás de toda la conversación), halo
|
|
8798
|
+
(sin plano: un halo en las letras), stripe (franja que se desvanece a la derecha). El carril solo
|
|
8799
|
+
existe sobre un fondo de pantalla.
|
|
8800
|
+
========================================================================================== */
|
|
8801
|
+
:root[data-reply] #messages#messages .row.assistant { max-width: min(760px, 88%); }
|
|
8802
|
+
: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; }
|
|
8803
|
+
:root[data-reply] #messages#messages .row.assistant .who { margin-left: 0; }
|
|
8804
|
+
:root[data-reply] #messages#messages .row.assistant .bubble-foot { margin-top: 6px; }
|
|
8805
|
+
:root[data-reply] #messages#messages .row.assistant .stamp > span { font-family: var(--mono); }
|
|
8806
|
+
/* A · regla bajo la cabecera */
|
|
8807
|
+
:root[data-reply="doc"] #messages#messages .row.assistant .who { padding-bottom: 7px; margin-bottom: 6px; border-bottom: 1px solid var(--line); }
|
|
8808
|
+
/* A · avatar en la cabecera: la fila es una sola columna y el agente se dice con un punto de su color. */
|
|
8809
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant { grid-template-columns: minmax(0, 1fr); }
|
|
8810
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant > .avatar { display: none; }
|
|
8811
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant .who { align-items: center; margin-bottom: 4px; }
|
|
8812
|
+
: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); }
|
|
8813
|
+
:root[data-reply="doc-inline"] #messages#messages .row.assistant .who > span:first-child { font-size: 11.5px; font-weight: 600; }
|
|
8814
|
+
/* C · lo accionable en tarjeta */
|
|
8815
|
+
: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); }
|
|
8816
|
+
: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; }
|
|
8817
|
+
:root[data-reply="pieces-edge"] #messages#messages .row.assistant .plan-card { border-left: 3px solid var(--agent); }
|
|
8818
|
+
/* Los carriles, solo sobre un fondo de pantalla */
|
|
8819
|
+
:root[data-reply][data-reply-legible][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col { position: relative; isolation: isolate; }
|
|
8820
|
+
:root[data-reply][data-reply-legible="lane"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col::before,
|
|
8821
|
+
:root[data-reply][data-reply-legible="stripe"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col::before {
|
|
8822
|
+
content: ''; position: absolute; inset: -10px -18px -8px -14px; z-index: -1; border-radius: 22px;
|
|
8823
|
+
background: color-mix(in srgb, var(--bg) 62%, transparent);
|
|
8824
|
+
-webkit-backdrop-filter: blur(18px) saturate(1.15); backdrop-filter: blur(18px) saturate(1.15);
|
|
8825
|
+
-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%);
|
|
8826
|
+
}
|
|
8827
|
+
:root[data-reply][data-reply-legible="stripe"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .col::before {
|
|
8828
|
+
inset: -10px -60px -8px -14px; border-radius: 18px 0 0 18px; background: color-mix(in srgb, var(--bg) 70%, transparent);
|
|
8829
|
+
-webkit-mask-image: linear-gradient(90deg, #000 0, #000 68%, transparent 100%); mask-image: linear-gradient(90deg, #000 0, #000 68%, transparent 100%);
|
|
8830
|
+
}
|
|
8831
|
+
:root[data-reply][data-reply-legible="column"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .thread-inner {
|
|
8832
|
+
border-radius: 26px; background: color-mix(in srgb, var(--bg) 52%, transparent);
|
|
8833
|
+
-webkit-backdrop-filter: blur(20px) saturate(1.15); backdrop-filter: blur(20px) saturate(1.15);
|
|
8834
|
+
box-shadow: 0 0 0 .5px color-mix(in srgb, var(--text) 8%, transparent);
|
|
8835
|
+
padding-left: 18px; padding-right: 18px;
|
|
8836
|
+
}
|
|
8837
|
+
:root[data-reply][data-reply-legible="halo"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant :is(.bubble, .who) {
|
|
8838
|
+
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);
|
|
8839
|
+
}
|
|
8840
|
+
:root[data-reply][data-reply-legible="halo"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .row.assistant .bubble { font-weight: 400; }
|
|
8841
|
+
/* El selector de la prueba: solo existe con ?reply= (app.js, PRUEBA · respuestas sin burbuja). */
|
|
8842
|
+
.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); }
|
|
8843
|
+
.reply-lab .lab-row { display: flex; align-items: center; gap: 3px; }
|
|
8844
|
+
.reply-lab b { width: 58px; padding: 0 6px; font: 600 10px var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--text-3); }
|
|
8845
|
+
.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; }
|
|
8846
|
+
.reply-lab button:hover { background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); }
|
|
8847
|
+
.reply-lab button.on { background: var(--phosphor); color: var(--phosphor-ink); }
|
|
8848
|
+
.reply-lab button:disabled { opacity: .4; cursor: default; }
|
|
8849
|
+
.reply-lab .lab-sample { margin-left: auto; box-shadow: inset 0 0 0 1px var(--line-2); }
|
|
8850
|
+
|
|
8851
|
+
/* ==========================================================================================
|
|
8852
|
+
PIEZAS QUE SE USAN (2026-10-15): la petición de comandos y la tarjeta de @madre local, con la
|
|
8853
|
+
letra de lectura y botones que se sienten botones. Solo forma: lo que hacen no cambia.
|
|
8854
|
+
========================================================================================== */
|
|
8855
|
+
/* «@agente te pide correr» */
|
|
8856
|
+
#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; }
|
|
8857
|
+
#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; }
|
|
8858
|
+
#messages#messages .choice.run-request .run-line + .run-line, #messages#messages .choice.run-request .run-why + .run-line { margin-top: 6px; }
|
|
8859
|
+
#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; }
|
|
8860
|
+
#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; }
|
|
8861
|
+
#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; }
|
|
8862
|
+
#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; }
|
|
8863
|
+
#messages#messages .choice.run-request .run-line .choice-tag::first-letter { text-transform: uppercase; }
|
|
8864
|
+
#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; }
|
|
8865
|
+
#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; }
|
|
8866
|
+
#messages#messages .choice.run-request .run-line.ran .choice-tag { position: relative; padding-left: 26px; }
|
|
8867
|
+
#messages#messages .choice.run-request .run-line.ran .choice-tag::before { content: '✓'; position: absolute; left: 11px; text-transform: none; }
|
|
8868
|
+
#messages#messages .choice.run-request .run-line.failed .choice-tag { background: color-mix(in srgb, var(--crit) 15%, transparent) !important; color: var(--crit) !important; }
|
|
8869
|
+
#messages#messages .choice.run-request .run-line.refused { opacity: 1; }
|
|
8870
|
+
#messages#messages .choice.run-request .run-line.refused .choice-text { color: var(--text-3) !important; }
|
|
8871
|
+
#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; }
|
|
8872
|
+
#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); }
|
|
8873
|
+
#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); }
|
|
8874
|
+
#messages#messages .choice.run-request.returned .run-summary { background: color-mix(in srgb, var(--ok, var(--phosphor)) 13%, transparent); color: var(--ok, var(--phosphor)); }
|
|
8875
|
+
#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; }
|
|
8876
|
+
#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); }
|
|
8877
|
+
/* @madre local: una tarjeta que se lee, a la izquierda, y su botón como el de las demás. */
|
|
8878
|
+
#messages#messages .system.local-model { justify-items: start; gap: 6px; padding: 14px 16px; text-align: left; }
|
|
8879
|
+
#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); }
|
|
8880
|
+
#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)); }
|
|
8881
|
+
#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; }
|
|
8882
|
+
#messages#messages .system.local-model .says.small { font-size: 12.5px; color: var(--text-3); }
|
|
8883
|
+
#messages#messages .system.local-model .acts { justify-content: flex-start; margin-top: 4px; }
|
|
8884
|
+
#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; }
|
|
8885
|
+
#messages#messages .system.local-model .acts button::first-letter { text-transform: uppercase; }
|
|
8886
|
+
#messages#messages .system.local-model .acts button + button { background: color-mix(in srgb, var(--text) 8%, transparent) !important; color: var(--text) !important; }
|
|
8887
|
+
.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; }
|
|
8888
|
+
|
|
8889
|
+
/* «#3 EDITAR concedido»: un estado pequeño en el color de su modo, no una franja punteada. */
|
|
8890
|
+
#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; }
|
|
8891
|
+
#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))); }
|
|
8892
|
+
#messages#messages .mode-ask.settled .mode-what::before { content: '✓'; font-weight: 700; }
|
|
8893
|
+
#messages#messages .mode-ask.settled[data-mode="1"] { --mode-c: var(--mode-1); }
|
|
8894
|
+
#messages#messages .mode-ask.settled[data-mode="2"] { --mode-c: var(--mode-2); }
|
|
8895
|
+
#messages#messages .mode-ask.settled[data-mode="3"] { --mode-c: var(--mode-3); }
|
|
8896
|
+
#messages#messages .mode-ask.settled[data-mode="4"] { --mode-c: var(--mode-4); }
|
|
8897
|
+
|
|
8898
|
+
/* ==========================================================================================
|
|
8899
|
+
PRUEBA · las tarjetas de /run en cuatro formas (2026-10-15), por data-term en <html>:
|
|
8900
|
+
line (a), window (b), pill (c), step (d). Sin el atributo, la de siempre.
|
|
8901
|
+
========================================================================================== */
|
|
8902
|
+
/* a · línea: el comando primero, el estado y quién a la derecha, la última línea debajo. */
|
|
8903
|
+
:root[data-term="line"] #messages#messages .command-card.terminal { border-radius: 14px; }
|
|
8904
|
+
:root[data-term="line"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
8905
|
+
:root[data-term="line"] #messages .command-card.terminal .term-head { gap: 10px; padding: 10px 12px; }
|
|
8906
|
+
:root[data-term="line"] #messages .command-card.terminal .term-head .chev-icon { order: -1; }
|
|
8907
|
+
:root[data-term="line"] #messages .command-card.terminal .term-line { font-size: 13px; }
|
|
8908
|
+
:root[data-term="line"] #messages .command-card.terminal .term-status { font-family: var(--read); font-size: 12px; padding: 3px 10px; }
|
|
8909
|
+
:root[data-term="line"] #messages .command-card.terminal .term-who { font-family: var(--read); font-size: 12px; }
|
|
8910
|
+
:root[data-term="line"] #messages .command-card.terminal .term-peek { padding: 0 12px 10px 38px; font-size: 12px; }
|
|
8911
|
+
:root[data-term="line"] #messages .command-card.terminal .term-peek::before { content: '→ '; color: var(--text-3); }
|
|
8912
|
+
/* b · ventana: una terminal pequeña, oscura en los dos temas, con su salida a la vista. */
|
|
8913
|
+
: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; }
|
|
8914
|
+
: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); }
|
|
8915
|
+
: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; }
|
|
8916
|
+
:root[data-term="window"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
8917
|
+
:root[data-term="window"] #messages .command-card.terminal .term-line { color: #e9ede6; font-size: 12.5px; }
|
|
8918
|
+
:root[data-term="window"] #messages .command-card.terminal .term-who { color: #9aa197; }
|
|
8919
|
+
: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; }
|
|
8920
|
+
:root[data-term="window"] #messages .command-card.terminal .term-peek::before { content: '› '; color: #28c840; }
|
|
8921
|
+
:root[data-term="window"] #messages .command-card.terminal pre { background: transparent; border-top-color: rgba(255, 255, 255, .07); color: #e9ede6; }
|
|
8922
|
+
/* c · píldora: como las llamadas a herramientas de los chats, una línea del ancho de lo que dice. */
|
|
8923
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal:not(.open) { justify-self: start; width: fit-content; max-width: 100%; border-radius: 999px; }
|
|
8924
|
+
: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; }
|
|
8925
|
+
:root[data-term="pill"] #messages .command-card.terminal:not(.open) .term-head { padding: 6px 12px 6px 8px; gap: 8px; }
|
|
8926
|
+
:root[data-term="pill"] #messages .command-card.terminal .term-status { order: -1; font-family: var(--read); font-size: 12px; }
|
|
8927
|
+
:root[data-term="pill"] #messages .command-card.terminal .term-line { font-size: 12.5px; }
|
|
8928
|
+
:root[data-term="pill"] #messages .command-card.terminal .term-who { font-family: var(--read); font-size: 12px; }
|
|
8929
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal.open { border-radius: 14px; }
|
|
8930
|
+
/* d · paso: sin tarjeta; un punto de estado en un hilo, el comando y debajo quién, cuánto y qué dijo. */
|
|
8931
|
+
:root[data-term="step"] #messages#messages .command-card.terminal { position: relative; padding-left: 26px; border: 0 !important; background: transparent !important; box-shadow: none !important; }
|
|
8932
|
+
: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); }
|
|
8933
|
+
: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); }
|
|
8934
|
+
:root[data-term="step"] #messages#messages .command-card.terminal.failed::after { content: '✕'; background: var(--crit); }
|
|
8935
|
+
:root[data-term="step"] #messages .command-card.terminal :is(.term-tag, .term-count) { display: none; }
|
|
8936
|
+
:root[data-term="step"] #messages .command-card.terminal .term-head { flex-wrap: wrap; padding: 6px 0; row-gap: 2px; }
|
|
8937
|
+
:root[data-term="step"] #messages .command-card.terminal .term-line { flex: 1 1 calc(100% - 40px); font-size: 13px; }
|
|
8938
|
+
:root[data-term="step"] #messages .command-card.terminal .term-head .chev-icon { order: 0; }
|
|
8939
|
+
:root[data-term="step"] #messages .command-card.terminal .term-status { order: 2; padding: 0; background: none !important; font-family: var(--read); font-size: 12px; }
|
|
8940
|
+
:root[data-term="step"] #messages .command-card.terminal .term-who { order: 3; font-family: var(--read); font-size: 12px; }
|
|
8941
|
+
:root[data-term="step"] #messages .command-card.terminal .term-who::before { content: '· '; color: var(--text-3); }
|
|
8942
|
+
:root[data-term="step"] #messages .command-card.terminal .term-peek { padding: 0 0 6px; font-size: 12px; }
|
|
8943
|
+
:root[data-term="step"] #messages .command-card.terminal pre { border: 0; border-radius: 10px; margin-bottom: 6px; }
|
|
8944
|
+
: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); }
|
|
8945
|
+
#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); }
|
|
8946
|
+
#messages#messages .mode-ask.settled .mode-what { color: color-mix(in srgb, var(--mode-c, var(--phosphor)) 70%, var(--text)); }
|
|
8947
|
+
|
|
8948
|
+
/* ==========================================================================================
|
|
8949
|
+
LABORATORIO DEL CHAT (2026-10-15): el panel de ?lab (app.js) y las cinco formas de cada
|
|
8950
|
+
elemento, por data-labNN en <html>. A es siempre como se ve hoy.
|
|
8951
|
+
========================================================================================== */
|
|
8952
|
+
.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); }
|
|
8953
|
+
.lab-panel.folded { bottom: auto; width: auto; }
|
|
8954
|
+
.lab-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--line); }
|
|
8955
|
+
.lab-head b { font: 600 13px var(--read); }
|
|
8956
|
+
.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; }
|
|
8957
|
+
.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; }
|
|
8958
|
+
.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; }
|
|
8959
|
+
.lab-copy { flex: 1 1 100%; }
|
|
8960
|
+
.lab-list { flex: 1; overflow: auto; padding: 6px 8px; display: grid; gap: 2px; align-content: start; }
|
|
8961
|
+
.lab-row { display: grid; gap: 3px; padding: 7px 6px; border-radius: 10px; }
|
|
8962
|
+
.lab-row:hover { background: color-mix(in srgb, var(--text) 4%, transparent); }
|
|
8963
|
+
.lab-top { display: flex; align-items: center; gap: 8px; }
|
|
8964
|
+
.lab-n { font: 600 10.5px var(--mono); color: var(--text-3); }
|
|
8965
|
+
.lab-name { flex: 1; min-width: 0; font-size: 12.5px; font-weight: 600; color: var(--text); }
|
|
8966
|
+
.lab-keys { display: inline-flex; gap: 2px; padding: 2px; border-radius: 8px; background: color-mix(in srgb, var(--text) 6%, transparent); }
|
|
8967
|
+
.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; }
|
|
8968
|
+
.lab-keys button.on { background: var(--phosphor); color: var(--phosphor-ink); }
|
|
8969
|
+
.lab-desc { padding-left: 26px; font-size: 11.5px; color: var(--text-3); }
|
|
8970
|
+
.lab-again { margin: 8px 12px 12px; background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text); }
|
|
8971
|
+
:root[data-lab="on"] .shell { padding-right: 312px; }
|
|
8972
|
+
@media (max-width: 900px) { :root[data-lab="on"] .shell { padding-right: 0; } .lab-panel { width: 260px; } }
|
|
8973
|
+
/* 01 · Mensaje del humano */
|
|
8974
|
+
: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; }
|
|
8975
|
+
: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; }
|
|
8976
|
+
:root[data-lab01="D"] #messages#messages .row.user { justify-self: stretch; max-width: 100%; }
|
|
8977
|
+
:root[data-lab01="D"] #messages#messages .row.user .col { justify-items: stretch; }
|
|
8978
|
+
: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; }
|
|
8979
|
+
:root[data-lab01="D"] #messages#messages .row.user .who { justify-content: flex-start; }
|
|
8980
|
+
: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; }
|
|
8981
|
+
:root[data-lab01="E"] #messages#messages .row.user .stamp .to { order: -1; font-size: 12px; color: var(--text); }
|
|
8982
|
+
/* 02 · Adjuntos */
|
|
8983
|
+
:root[data-lab02="B"] #messages .row.user .files { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
8984
|
+
: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); }
|
|
8985
|
+
: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); }
|
|
8986
|
+
: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); }
|
|
8987
|
+
:root[data-lab02="D"] #messages .row.user .files { display: flex; flex-wrap: wrap; gap: 4px 10px; }
|
|
8988
|
+
: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; }
|
|
8989
|
+
:root[data-lab02="D"] #messages .row.user .file-tile .kind { display: none; }
|
|
8990
|
+
:root[data-lab02="D"] #messages .row.user .file-tile .name::before { content: '📎 '; }
|
|
8991
|
+
:root[data-lab02="E"] #messages .row.user .bubble { display: flex; flex-direction: column; }
|
|
8992
|
+
:root[data-lab02="E"] #messages .row.user .files { order: -1; margin: 0 0 8px; }
|
|
8993
|
+
/* 03 · Pensando */
|
|
8994
|
+
:root[data-lab03="B"] #messages .row.thinking .bubble > i { display: none; }
|
|
8995
|
+
:root[data-lab03="B"] #messages .row.thinking .bubble { background: transparent !important; box-shadow: none !important; }
|
|
8996
|
+
: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; }
|
|
8997
|
+
@keyframes lab-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
|
|
8998
|
+
:root[data-lab03="C"] #messages .row.thinking .bubble { background: transparent !important; box-shadow: none !important; }
|
|
8999
|
+
:root[data-lab03="C"] #messages .row.thinking .bubble > i { display: none; }
|
|
9000
|
+
:root[data-lab03="C"] #messages .row.thinking > .avatar { animation: lab-pulse 1.4s ease-in-out infinite; }
|
|
9001
|
+
@keyframes lab-pulse { 0%, 100% { transform: scale(.92); } 50% { transform: scale(1.08); } }
|
|
9002
|
+
:root[data-lab03="D"] #messages .row.thinking .bubble > i { display: none; }
|
|
9003
|
+
: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; }
|
|
9004
|
+
: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; }
|
|
9005
|
+
@keyframes lab-bar { 0% { transform: translateX(-100%); } 100% { transform: translateX(260%); } }
|
|
9006
|
+
:root[data-lab03="E"] #messages .row.thinking .bubble > i { display: none; }
|
|
9007
|
+
: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; }
|
|
9008
|
+
:root[data-lab03="E"] #messages .row.thinking .bubble::before { content: 'pensando'; color: var(--agent, var(--text)); font-weight: 500; }
|
|
9009
|
+
/* 04 · Cabecera del agente */
|
|
9010
|
+
: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); }
|
|
9011
|
+
: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); }
|
|
9012
|
+
: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; }
|
|
9013
|
+
:root[data-lab04="D"] #messages#messages .row.assistant .who > :not(:first-child) { opacity: 0; transition: opacity .2s; }
|
|
9014
|
+
:root[data-lab04="D"] #messages#messages .row.assistant:hover .who > :not(:first-child) { opacity: 1; }
|
|
9015
|
+
:root[data-lab04="E"] #messages#messages .row.assistant { grid-template-columns: minmax(0, 1fr); }
|
|
9016
|
+
:root[data-lab04="E"] #messages#messages .row.assistant > .avatar { display: none; }
|
|
9017
|
+
:root[data-lab04="E"] #messages#messages .row.assistant .who { align-items: center; }
|
|
9018
|
+
:root[data-lab04="E"] #messages#messages .row.assistant .who::before { content: ''; flex: none; width: 18px; height: 18px; border-radius: 50%; background: var(--agent); }
|
|
9019
|
+
/* 05 · Cuerpo de la respuesta (hoy: prosa libre con carril) */
|
|
9020
|
+
: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; }
|
|
9021
|
+
: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; }
|
|
9022
|
+
:root[data-lab05="D"] #messages#messages .row.assistant .bubble { padding: 4px 0 4px 14px !important; border-left: 3px solid var(--agent) !important; }
|
|
9023
|
+
:root[data-lab05="E"] #messages#messages .row.assistant .who { padding-bottom: 7px; margin-bottom: 6px; border-bottom: 1px solid var(--line); }
|
|
9024
|
+
:root[data-lab05]:not([data-lab05="A"]) #messages#messages .row.assistant .col::before { display: none; }
|
|
9025
|
+
:root[data-lab05="D"] #messages#messages .row.assistant .col::before, :root[data-lab05="E"] #messages#messages .row.assistant .col::before { display: block; }
|
|
9026
|
+
/* 06 · Memoria citada */
|
|
9027
|
+
: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); }
|
|
9028
|
+
: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); }
|
|
9029
|
+
:root[data-lab06="D"] #messages .cite { text-decoration: underline dotted var(--madre-green); text-decoration-thickness: 2px; text-underline-offset: 4px; }
|
|
9030
|
+
:root[data-lab06="E"] #messages .cite { font-size: .8em; color: var(--text-3); }
|
|
9031
|
+
/* 07 · Plan */
|
|
9032
|
+
:root[data-lab07="B"] #messages .plan-card ol { list-style: none; padding-left: 0; }
|
|
9033
|
+
:root[data-lab07="B"] #messages .plan-card li { position: relative; padding: 6px 0 6px 26px; }
|
|
9034
|
+
: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); }
|
|
9035
|
+
:root[data-lab07="C"] #messages .plan-card ol { padding-left: 22px; }
|
|
9036
|
+
:root[data-lab07="C"] #messages .plan-card li { padding: 8px 0; border-top: 1px dashed var(--line-2); }
|
|
9037
|
+
:root[data-lab07="C"] #messages .plan-card li:first-child { border-top: 0; }
|
|
9038
|
+
: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; }
|
|
9039
|
+
: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); }
|
|
9040
|
+
:root[data-lab07="E"] #messages .plan-card ol { list-style: none; padding-left: 0; }
|
|
9041
|
+
:root[data-lab07="E"] #messages .plan-card li { position: relative; margin: 0; padding: 6px 0 10px 24px; }
|
|
9042
|
+
: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); }
|
|
9043
|
+
: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); }
|
|
9044
|
+
/* 08 · Bloque de código */
|
|
9045
|
+
:root[data-lab08="B"] #messages .codeblock { overflow: hidden; border: 0 !important; border-radius: 12px; background: var(--panel) !important; box-shadow: var(--lift-1); }
|
|
9046
|
+
:root[data-lab08="B"] #messages .codeblock .lang, :root[data-lab08="B"] #messages .codeblock .copy { font-family: var(--read); letter-spacing: 0; text-transform: none; }
|
|
9047
|
+
:root[data-lab08="C"] #messages .codeblock .lang { display: none; }
|
|
9048
|
+
:root[data-lab08="C"] #messages .codeblock .copy { opacity: 0; transition: opacity .2s; }
|
|
9049
|
+
:root[data-lab08="C"] #messages .codeblock:hover .copy { opacity: 1; }
|
|
9050
|
+
:root[data-lab08="C"] #messages .codeblock { border: 0 !important; background: color-mix(in srgb, var(--text) 5%, transparent) !important; }
|
|
9051
|
+
:root[data-lab08="D"] #messages .codeblock { border: 0 !important; background: #0d100d !important; color: #e9ede6; }
|
|
9052
|
+
:root[data-lab08="D"] #messages .codeblock :is(pre, code, .lang, .copy) { color: #e9ede6 !important; background: transparent !important; }
|
|
9053
|
+
: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); }
|
|
9054
|
+
/* 09 · Pie de la respuesta */
|
|
9055
|
+
:root[data-lab09="B"] #messages .row.assistant .bubble-foot .stamp { display: none; }
|
|
9056
|
+
:root[data-lab09="B"] #messages .row.assistant .bubble-foot { opacity: 0; transition: opacity .2s; }
|
|
9057
|
+
:root[data-lab09="B"] #messages .row.assistant:hover .bubble-foot { opacity: 1; }
|
|
9058
|
+
: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); }
|
|
9059
|
+
:root[data-lab09="D"] #messages .row.assistant .bubble-actions .act { border-radius: 8px; background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
9060
|
+
:root[data-lab09="E"] #messages .row.assistant .bubble-foot .stamp { opacity: .45; transition: opacity .2s; }
|
|
9061
|
+
:root[data-lab09="E"] #messages .row.assistant:hover .bubble-foot .stamp { opacity: 1; }
|
|
9062
|
+
/* 10 · Elección */
|
|
9063
|
+
:root[data-lab10="B"] #messages .choice:not(.run-request) .choice-list { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
9064
|
+
:root[data-lab10="B"] #messages .choice:not(.run-request) .choice-option { width: auto; display: inline-flex; padding: 7px 14px; border-radius: 999px; }
|
|
9065
|
+
:root[data-lab10="B"] #messages .choice:not(.run-request) .choice-key { display: none; }
|
|
9066
|
+
:root[data-lab10="C"] #messages .choice:not(.run-request) .choice-option { border: 0; border-top: 1px solid var(--line); border-radius: 0; background: none; }
|
|
9067
|
+
:root[data-lab10="D"] #messages .choice:not(.run-request) .choice-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
|
|
9068
|
+
:root[data-lab10="D"] #messages .choice:not(.run-request) .choice-option { grid-template-columns: 1fr; align-content: start; min-height: 74px; }
|
|
9069
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) { background: transparent !important; box-shadow: none !important; border: 0 !important; padding: 0 !important; }
|
|
9070
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) .choice-list { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
9071
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) .choice-option { width: auto; padding: 7px 14px; border-radius: 9px; }
|
|
9072
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) .choice-option.recommended { background: var(--agent, var(--phosphor)); color: var(--agent-on, var(--phosphor-ink)); }
|
|
9073
|
+
:root[data-lab10="E"] #messages .choice:not(.run-request) :is(.choice-key, .choice-kicker, .choice-foot) { display: none; }
|
|
9074
|
+
/* 11 · Petición de permiso */
|
|
9075
|
+
:root[data-lab11="B"] #messages .mode-ask:not(.settled) { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
|
|
9076
|
+
:root[data-lab11="B"] #messages .mode-ask:not(.settled) .mode-why { display: none; }
|
|
9077
|
+
: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; }
|
|
9078
|
+
: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; }
|
|
9079
|
+
:root[data-lab11="E"] #messages .mode-ask:not(.settled) { background: transparent !important; border: 1px solid var(--line-2) !important; box-shadow: none !important; }
|
|
9080
|
+
/* 12 · Permiso concedido */
|
|
9081
|
+
:root[data-lab12="B"] #messages#messages .mode-ask.settled { align-self: stretch; width: auto !important; background: none !important; box-shadow: none !important; gap: 10px; }
|
|
9082
|
+
: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); }
|
|
9083
|
+
:root[data-lab12="C"] #messages#messages .mode-ask.settled { align-self: center; background: none !important; box-shadow: none !important; }
|
|
9084
|
+
:root[data-lab12="C"] #messages#messages .mode-ask.settled .mode-what { color: var(--text-3); font-weight: 400; }
|
|
9085
|
+
:root[data-lab12="C"] #messages#messages .mode-ask.settled .mode-what::before { content: none; }
|
|
9086
|
+
:root[data-lab12="D"] #messages#messages .mode-ask.settled .mode-what::before { content: '🔓'; }
|
|
9087
|
+
:root[data-lab12="E"] #messages#messages .mode-ask.settled { background: none !important; box-shadow: none !important; }
|
|
9088
|
+
:root[data-lab12="E"] #messages#messages .mode-ask.settled .mode-what { color: var(--text-2); font-weight: 400; }
|
|
9089
|
+
: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)); }
|
|
9090
|
+
/* 13 · Petición de comandos */
|
|
9091
|
+
: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; }
|
|
9092
|
+
:root[data-lab13="C"] #messages#messages .choice.run-request .run-line { background: #0d100d !important; }
|
|
9093
|
+
:root[data-lab13="C"] #messages#messages .choice.run-request .run-line .choice-text { color: #e9ede6 !important; }
|
|
9094
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .choice-list { counter-reset: lab-run; }
|
|
9095
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .run-line { counter-increment: lab-run; }
|
|
9096
|
+
:root[data-lab13="D"] #messages#messages .choice.run-request .run-line .choice-key { font-size: 0 !important; }
|
|
9097
|
+
: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); }
|
|
9098
|
+
:root[data-lab13="E"] #messages#messages .choice.run-request .run-line:not(.refused):not(:hover) .choice-tag { opacity: 0; }
|
|
9099
|
+
/* 15 · Avisos del sistema (abiertos en B–E) */
|
|
9100
|
+
: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; }
|
|
9101
|
+
:root[data-lab15]:not([data-lab15="A"]) #messages#messages .sys-dots.open > .sys-more { display: none; }
|
|
9102
|
+
:root[data-lab15="B"] #messages#messages .sys-dots.open > .system.folded { text-align: center; padding-left: 12px !important; background: none !important; }
|
|
9103
|
+
:root[data-lab15="B"] #messages#messages .sys-dots.open > .system.folded::before { display: none; }
|
|
9104
|
+
: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; }
|
|
9105
|
+
:root[data-lab15="C"] #messages#messages .sys-dots.open > .system.folded::before { display: none; }
|
|
9106
|
+
:root[data-lab15="D"] #messages#messages .sys-dots.open { justify-items: start; }
|
|
9107
|
+
: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); }
|
|
9108
|
+
:root[data-lab15="E"] #messages#messages .sys-dots.open { gap: 8px; }
|
|
9109
|
+
:root[data-lab15="E"] #messages#messages .sys-dots.open > .system.folded { border-radius: 14px !important; background: var(--panel) !important; box-shadow: var(--lift-1); }
|
|
9110
|
+
/* 16 · Error y diagnóstico */
|
|
9111
|
+
:root[data-lab16="B"] #messages#messages .thread-inner > .system.fail { justify-self: start; margin-left: 40px; text-align: left; }
|
|
9112
|
+
:root[data-lab16="B"] #messages#messages .thread-inner > .system.fail::before { content: '⚠ '; }
|
|
9113
|
+
:root[data-lab16="C"] #messages#messages .thread-inner > .system.fail { width: 100%; max-width: 100%; border-radius: 10px; text-align: left; }
|
|
9114
|
+
:root[data-lab16="D"] #messages#messages .thread-inner > .system.fail { background: none !important; box-shadow: none !important; padding: 0; font-size: 12.5px; }
|
|
9115
|
+
: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); }
|
|
9116
|
+
/* 17 · Espacio entre turnos */
|
|
9117
|
+
:root[data-lab17="B"] #messages .thread-inner > * + * { margin-top: 4px !important; }
|
|
9118
|
+
:root[data-lab17="C"] #messages .thread-inner > * + * { margin-top: 28px !important; }
|
|
9119
|
+
:root[data-lab17="D"] #messages .thread-inner > .row + .row { padding-top: 14px; border-top: 1px solid var(--line); }
|
|
9120
|
+
:root[data-lab17="E"] #messages .thread-inner > .row.assistant + .row.assistant { margin-top: 2px !important; }
|
|
9121
|
+
: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; }
|
|
9122
|
+
: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; }
|
|
9123
|
+
:root[data-lab15="B"][data-wallpaper]:not([data-wallpaper="default"]) #messages#messages .sys-dots.open > .system.folded,
|
|
9124
|
+
: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; }
|
|
9125
|
+
|
|
9126
|
+
/* ==========================================================================================
|
|
9127
|
+
CHAT · ACCC-BABA-ECBB-DCAA-C (2026-10-15). Lo que se eligió en el laboratorio (?lab), hecho
|
|
9128
|
+
forma de la sala: adjuntos en tarjeta, avatar que late al pensar, el agente en una píldora, la
|
|
9129
|
+
respuesta en burbuja, el plan como lista de tareas, la hora sola al pie, elecciones en lista con
|
|
9130
|
+
número, el permiso en una línea, el concedido como divisoria, comandos en pasos, cada /run en
|
|
9131
|
+
píldora (data-term="pill", app.js) y aire entre turnos. Cada regla se aparta cuando el
|
|
9132
|
+
laboratorio compara otra forma de su elemento (data-labNN en <html>). Sin backdrop-filter en el
|
|
9133
|
+
hilo, como dicen los planos: sobre un fondo de pantalla, cada pieza lleva su propio material.
|
|
9134
|
+
========================================================================================== */
|
|
9135
|
+
|
|
9136
|
+
/* 02 · Adjuntos: una tarjeta por archivo, con su tipo, su nombre y su tamaño. */
|
|
9137
|
+
:root:not([data-lab02]) #messages#messages .bubble .files { gap: 8px; margin-top: 10px; }
|
|
9138
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile:not(.image) {
|
|
9139
|
+
display: inline-grid; grid-template-columns: 34px minmax(0, auto); align-items: center; column-gap: 10px;
|
|
9140
|
+
max-width: min(100%, 280px); padding: 7px 14px 7px 7px; border: 0; border-radius: 12px;
|
|
9141
|
+
background: var(--plane-solid); color: var(--text); text-align: left;
|
|
9142
|
+
box-shadow: 0 0 0 .5px rgb(var(--plane-ink) / .14), 0 1px 2px rgb(var(--plane-ink) / .1);
|
|
9143
|
+
transition: transform calc(160ms * var(--motion-scale)) ease, box-shadow calc(160ms * var(--motion-scale)) ease;
|
|
9144
|
+
}
|
|
9145
|
+
: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); }
|
|
9146
|
+
: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; }
|
|
9147
|
+
: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; }
|
|
9148
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile .file-text { display: grid; gap: 1px; min-width: 0; }
|
|
9149
|
+
: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; }
|
|
9150
|
+
: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); }
|
|
9151
|
+
: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); }
|
|
9152
|
+
:root:not([data-lab02]) #messages#messages .bubble .file-tile.image img { border-radius: 0; }
|
|
9153
|
+
|
|
9154
|
+
/* 03 · Pensando: sin globo. El avatar respira y deja un anillo en su color; al lado, lo que hace y
|
|
9155
|
+
cuánto lleva. Sobre un fondo de pantalla, la línea va en el material de las etiquetas. */
|
|
9156
|
+
: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; }
|
|
9157
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .bubble > i { display: none; }
|
|
9158
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .status { margin-left: 0; font-size: 14px; font-style: normal; color: var(--text-2); }
|
|
9159
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .status::after { display: none; }
|
|
9160
|
+
: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; }
|
|
9161
|
+
:root:not([data-lab03]) #messages#messages .row.thinking .stop-turn { margin-left: 6px; }
|
|
9162
|
+
: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; }
|
|
9163
|
+
: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; }
|
|
9164
|
+
: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; }
|
|
9165
|
+
@keyframes think-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(.9); } }
|
|
9166
|
+
@keyframes think-ring {
|
|
9167
|
+
0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--agent, var(--phosphor)) 50%, transparent); }
|
|
9168
|
+
70%, 100% { box-shadow: 0 0 0 9px color-mix(in srgb, var(--agent, var(--phosphor)) 0%, transparent); }
|
|
9169
|
+
}
|
|
9170
|
+
|
|
9171
|
+
/* 04 · Cabecera: el nombre del agente en su píldora, en letra de lectura; modelo y esfuerzo detrás,
|
|
9172
|
+
en píldoras neutras (AJUSTES EN LA SALA REAL, al final); el modo conserva su color. */
|
|
9173
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who { align-items: center; gap: 8px; padding: 3px 10px 3px 3px; }
|
|
9174
|
+
: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; }
|
|
9175
|
+
|
|
9176
|
+
/* 05 · Cuerpo: la burbuja, con la esquina corta hacia el avatar, que va abajo. */
|
|
9177
|
+
:root:not([data-reply]) #messages#messages .row.assistant:not(.delegated) .bubble { border-radius: 20px 20px 20px 6px; padding: 13px 17px 10px; }
|
|
9178
|
+
|
|
9179
|
+
/* 07 · Plan: una lista de tareas; cada casilla en el color de quien la hará. */
|
|
9180
|
+
: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); }
|
|
9181
|
+
:root:not([data-lab07]) #messages#messages .plan-card .plan-label { display: block; margin-bottom: 4px; }
|
|
9182
|
+
:root:not([data-lab07]) #messages#messages .plan-card ol { margin: 0; padding: 0; list-style: none; }
|
|
9183
|
+
: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; }
|
|
9184
|
+
: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)); }
|
|
9185
|
+
:root:not([data-lab07]) #messages#messages .plan-card li + li { border-top: 1px solid color-mix(in srgb, var(--text) 6%, transparent); }
|
|
9186
|
+
|
|
9187
|
+
/* 09 · Pie: la hora sola; lo que costó aparece al pasar o al enfocar la respuesta. */
|
|
9188
|
+
: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; }
|
|
9189
|
+
:root:not([data-lab09]) #messages#messages .row.assistant:is(:hover, :focus-within) .bubble-foot .stamp > span { opacity: 1; }
|
|
9190
|
+
:root:not([data-lab09]) #messages#messages .row.assistant .bubble-foot .stamp > span:first-child { font-variant-numeric: tabular-nums; }
|
|
9191
|
+
@media (hover: none) { :root:not([data-lab09]) #messages#messages .row.assistant .bubble-foot .stamp > span { opacity: 1; } }
|
|
9192
|
+
|
|
9193
|
+
/* 10 · Elección: una lista con número, como las de los chats; cada fila es una frase que se presiona. */
|
|
9194
|
+
: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); }
|
|
9195
|
+
: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; }
|
|
9196
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option + .choice-option { box-shadow: inset 0 1px 0 var(--line); }
|
|
9197
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option:hover { background: color-mix(in srgb, var(--agent, var(--text)) 6%, transparent); }
|
|
9198
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option:focus-visible { outline-offset: -2px; }
|
|
9199
|
+
: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); }
|
|
9200
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.recommended { background: color-mix(in srgb, var(--agent, var(--phosphor)) 5%, transparent); }
|
|
9201
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.recommended .choice-key,
|
|
9202
|
+
: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)); }
|
|
9203
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-option.picked { background: color-mix(in srgb, var(--agent, var(--phosphor)) 10%, transparent); }
|
|
9204
|
+
: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; }
|
|
9205
|
+
:root:not([data-lab10]) #messages#messages .choice:not(.run-request) .choice-tag::first-letter { text-transform: uppercase; }
|
|
9206
|
+
: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); }
|
|
9207
|
+
|
|
9208
|
+
/* 11 · Permiso: en una línea, como Claude Code: qué pide y por cuánto, los botones a la derecha, y
|
|
9209
|
+
debajo, en letra secundaria, cómo se confirma. */
|
|
9210
|
+
: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; }
|
|
9211
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-what { flex: 1 1 260px; font: 400 14px/1.45 var(--read); }
|
|
9212
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-what .who { padding: 0; border-radius: 0; background: none !important; font-weight: 600; }
|
|
9213
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-time { font: 400 13px var(--read); letter-spacing: 0; color: var(--text-2); }
|
|
9214
|
+
: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); }
|
|
9215
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-windows { flex-wrap: nowrap; max-width: 100%; overflow-x: auto; scrollbar-width: none; }
|
|
9216
|
+
: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; }
|
|
9217
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-actions { margin: 0; gap: 6px; }
|
|
9218
|
+
: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)); }
|
|
9219
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) :is(.mode-go, .mode-alt)::first-letter { text-transform: uppercase; }
|
|
9220
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-go { font-weight: 600; box-shadow: none; }
|
|
9221
|
+
: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); }
|
|
9222
|
+
:root:not([data-lab11]) #messages#messages .mode-ask:not(.settled) .mode-alt:hover { background: color-mix(in srgb, var(--text) 12%, transparent); }
|
|
9223
|
+
|
|
9224
|
+
/* 12 · Concedido: una divisoria a lo ancho de la respuesta, con el permiso al centro en su color. */
|
|
9225
|
+
: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; }
|
|
9226
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::before,
|
|
9227
|
+
: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; }
|
|
9228
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::before { transform-origin: right; }
|
|
9229
|
+
:root:not([data-lab12]) #messages#messages .mode-ask.settled::after { transform-origin: left; }
|
|
9230
|
+
: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)); }
|
|
9231
|
+
@keyframes settle-line { from { transform: scaleX(0); opacity: 0; } }
|
|
9232
|
+
|
|
9233
|
+
/* 13 · Petición de comandos: pasos numerados; el paso que corrió dice ✓ y el que falló ✕. */
|
|
9234
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .choice-list { counter-reset: run-step; }
|
|
9235
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line { counter-increment: run-step; }
|
|
9236
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line .choice-key { font-size: 0 !important; border-radius: 50%; }
|
|
9237
|
+
: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); }
|
|
9238
|
+
: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; }
|
|
9239
|
+
: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); }
|
|
9240
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.failed .choice-key { background: color-mix(in srgb, var(--crit) 15%, transparent) !important; }
|
|
9241
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.failed .choice-key::after { content: '✕'; color: var(--crit); font-family: var(--read); }
|
|
9242
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request .run-line.refused .choice-key::after { color: var(--text-3); }
|
|
9243
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request :is(.run-all, .run-back) { text-transform: lowercase; }
|
|
9244
|
+
:root:not([data-lab13]) #messages#messages .choice.run-request :is(.run-all, .run-back)::first-letter { text-transform: uppercase; }
|
|
9245
|
+
|
|
9246
|
+
/* 17 · Aire entre turnos, como en los chats de hoy; lo que es del mismo turno queda junto. */
|
|
9247
|
+
:root:not([data-lab17]) #messages#messages .thread-inner > * + * { margin-top: 28px; }
|
|
9248
|
+
:root:not([data-lab17]) #messages#messages .thread-inner > :is(.command-card, .sys-dots) + :is(.command-card, .sys-dots),
|
|
9249
|
+
:root:not([data-lab17]) #messages#messages .thread-inner > .row.assistant + :is(.choice, .command-card) { margin-top: 0; }
|
|
9250
|
+
|
|
9251
|
+
@media (prefers-reduced-motion: reduce) {
|
|
9252
|
+
#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; }
|
|
9253
|
+
#messages#messages .row.thinking > .avatar::after { box-shadow: 0 0 0 3px color-mix(in srgb, var(--agent, var(--phosphor)) 30%, transparent); }
|
|
9254
|
+
#messages#messages .bubble .file-tile:hover { transform: none; }
|
|
9255
|
+
}
|
|
9256
|
+
|
|
9257
|
+
/* ==========================================================================================
|
|
9258
|
+
AJUSTES EN LA SALA REAL (2026-10-15, tras ACCC-BABA-ECBB-DCAA-C)
|
|
9259
|
+
========================================================================================== */
|
|
9260
|
+
|
|
9261
|
+
/* El conjunto de un agente en un solo carril: la cabecera, la burbuja, lo que pide (elección,
|
|
9262
|
+
comandos) y sus /run empiezan donde empieza la burbuja, a la derecha del avatar. */
|
|
9263
|
+
:root:not([data-reply]) #messages#messages .row.assistant { column-gap: 14px; }
|
|
9264
|
+
:root:not([data-reply]) #messages#messages .row.assistant .col > .who { margin-left: 0; }
|
|
9265
|
+
: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))); }
|
|
9266
|
+
:root:not([data-reply])[data-term="pill"] #messages#messages .thread-inner > .command-card.terminal.open { width: auto; }
|
|
9267
|
+
|
|
9268
|
+
/* La cabecera: un plano con píldoras dentro, que se leen como una pieza. El plano deja 3 px
|
|
9269
|
+
alrededor de todo (radio 14 = 11 de la píldora + 3), las píldoras van a 4 px entre sí, todas de
|
|
9270
|
+
22 px, letra de lectura de 12 px y el mismo material: sólido, con un filo de medio píxel; el
|
|
9271
|
+
color solo tiñe. El texto suelto (la pregunta citada, lo cobrado) lleva el mismo aire que una
|
|
9272
|
+
píldora. En angosto se acomoda en renglones en vez de desbordarse. */
|
|
9273
|
+
: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; }
|
|
9274
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child,
|
|
9275
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.badge, .to-agent) {
|
|
9276
|
+
--chip: var(--text); --chip-mix: 5%;
|
|
9277
|
+
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;
|
|
9278
|
+
border: 0; border-radius: 11px; background: color-mix(in srgb, var(--chip) var(--chip-mix), var(--plane-solid)) !important;
|
|
9279
|
+
box-shadow: inset 0 0 0 .5px color-mix(in srgb, var(--chip) 18%, transparent);
|
|
9280
|
+
color: color-mix(in srgb, var(--chip) 80%, var(--text)); font: 500 12px/22px var(--read); letter-spacing: 0; text-transform: none;
|
|
9281
|
+
}
|
|
9282
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.badge, .to-agent) { --chip: var(--text-2); }
|
|
9283
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child { --chip: var(--agent); --chip-mix: 15%; font-weight: 600; }
|
|
9284
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .to-agent { --chip: var(--agent); --chip-mix: 13%; }
|
|
9285
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.ash { --chip: var(--phosphor); --chip-mix: 13%; text-transform: lowercase; }
|
|
9286
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge:not(.model, .mode)::first-letter,
|
|
9287
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.model.effort::first-letter { text-transform: uppercase; }
|
|
9288
|
+
: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; }
|
|
9289
|
+
: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; }
|
|
9290
|
+
: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; }
|
|
9291
|
+
: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); }
|
|
9292
|
+
|
|
9293
|
+
/* Modo · modelo · esfuerzo en claro: el mismo vidrio blanco que ya tiene en oscuro. */
|
|
9294
|
+
:root[data-scheme="light"] .composer > .pick-options .pick-label {
|
|
9295
|
+
background: rgb(255 255 255 / .6);
|
|
9296
|
+
box-shadow: 0 0 0 .5px rgb(20 30 20 / .1), inset 0 1px 0 #ffffff, 0 6px 18px rgb(20 30 20 / .1);
|
|
9297
|
+
-webkit-backdrop-filter: blur(20px) saturate(1.6); backdrop-filter: blur(20px) saturate(1.6);
|
|
9298
|
+
}
|
|
9299
|
+
|
|
9300
|
+
/* Cambiar de proyecto: al pasar, el cuadro de atrás se despega un poco; al presionar, o con la
|
|
9301
|
+
ventana abierta, se ilumina el de enfrente. */
|
|
9302
|
+
.switch-button svg > path { transition: transform calc(220ms * var(--motion-scale) / .7) cubic-bezier(.2, .8, .2, 1); }
|
|
9303
|
+
.switch-button:is(:hover, :focus-visible) svg > path { transform: translate(1.3px, -1.3px); }
|
|
9304
|
+
.switch-button svg > .ic-f { transition: fill calc(160ms * var(--motion-scale)) ease, filter calc(160ms * var(--motion-scale)) ease; }
|
|
9305
|
+
.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)); }
|
|
9306
|
+
@media (prefers-reduced-motion: reduce) { .switch-button svg > path { transition: none; } .switch-button:is(:hover, :focus-visible) svg > path { transform: none; } }
|
|
9307
|
+
|
|
9308
|
+
/* El foco de un aviso de primera vez (spotlight, tour.js): lo que el aviso nombra se ve claro, con
|
|
9309
|
+
un aro suave del acento, y el resto de la página baja un poco. Sin pico en la tarjeta. */
|
|
9310
|
+
.hint-spot {
|
|
9311
|
+
position: fixed; z-index: 2147482999; pointer-events: none; box-sizing: border-box;
|
|
9312
|
+
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);
|
|
9313
|
+
background: rgb(255 255 255 / .06);
|
|
9314
|
+
animation: hint-spot-in calc(360ms * var(--motion-scale, .7) / .7) cubic-bezier(.2, .8, .2, 1) both;
|
|
9315
|
+
transition: left .2s ease, top .2s ease, width .2s ease, height .2s ease;
|
|
9316
|
+
}
|
|
9317
|
+
.hint-spot[hidden] { display: none; }
|
|
9318
|
+
: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); }
|
|
9319
|
+
@keyframes hint-spot-in { from { opacity: 0; transform: scale(1.06); } }
|
|
9320
|
+
@media (prefers-reduced-motion: reduce) { .hint-spot { animation: none; transition: none; } }
|
|
9321
|
+
|
|
9322
|
+
/* La fila de avisos dice con una flecha que se despliega: hacia abajo junto a «+N» cerrada, hacia
|
|
9323
|
+
arriba en «Plegar» abierta. La flecha es la misma, girada, y va centrada con el texto. */
|
|
9324
|
+
#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"); }
|
|
9325
|
+
#messages .sys-dots > .sys-more::after {
|
|
9326
|
+
content: ''; display: inline-block; flex: none; width: 10px; height: 10px; background: currentColor;
|
|
9327
|
+
-webkit-mask: var(--chev) center / contain no-repeat; mask: var(--chev) center / contain no-repeat;
|
|
9328
|
+
transition: transform calc(180ms * var(--motion-scale)) ease;
|
|
9329
|
+
}
|
|
9330
|
+
#messages#messages .sys-dots:not(.open) > .sys-more:not([hidden]) { display: inline-flex; align-items: center; gap: 4px; line-height: 1; }
|
|
9331
|
+
#messages#messages .sys-dots:not(.open) > .sys-more::after { transform: rotate(180deg); opacity: .8; }
|
|
9332
|
+
#messages#messages .sys-dots:not(.open):hover > .sys-more::after { transform: rotate(180deg) translateY(-1px); opacity: 1; }
|
|
9333
|
+
/* «Plegar»: una tecla de 26 px, la palabra y su flecha en la misma línea media. */
|
|
9334
|
+
#messages#messages .sys-dots.open > .sys-more {
|
|
9335
|
+
display: inline-block; height: 26px; margin-top: 4px; padding: 0 11px 0 13px; box-sizing: border-box; border-radius: 999px;
|
|
9336
|
+
font: 500 12.5px/26px var(--read); letter-spacing: 0; text-transform: lowercase; white-space: nowrap; color: var(--text-2);
|
|
9337
|
+
transition: background calc(150ms * var(--motion-scale)) ease, color calc(150ms * var(--motion-scale)) ease;
|
|
9338
|
+
}
|
|
9339
|
+
#messages#messages .sys-dots.open > .sys-more::first-letter { text-transform: uppercase; }
|
|
9340
|
+
#messages#messages .sys-dots.open > .sys-more::after { width: 11px; height: 11px; margin-left: 6px; vertical-align: middle; position: relative; top: -1px; }
|
|
9341
|
+
#messages#messages .sys-dots.open > .sys-more:hover { background: color-mix(in srgb, var(--text) 7%, transparent); color: var(--text); }
|
|
9342
|
+
#messages#messages .sys-dots.open > .sys-more:hover::after { transform: translateY(-1px); }
|
|
9343
|
+
@media (prefers-reduced-motion: reduce) { #messages .sys-dots > .sys-more::after { transition: none; } }
|
|
9344
|
+
|
|
9345
|
+
/* Los avisos abiertos como una lista que se lee (2026-10-15): cada uno con su punto, la etiqueta
|
|
9346
|
+
pequeña arriba y lo que dice debajo en letra de lectura; una línea fina entre uno y otro; la
|
|
9347
|
+
memoria, las barras de límite y los comandos alineados a la izquierda como lo demás; lo repetido
|
|
9348
|
+
seguido, una sola vez con «×N» (groupRepeats, app.js). */
|
|
9349
|
+
#messages#messages .sys-dots.open { gap: 0; width: min(92%, 600px); padding: 6px 6px 8px; border-radius: 18px; }
|
|
9350
|
+
#messages#messages .sys-dots.open > .system.folded {
|
|
9351
|
+
display: block; padding: 11px 14px 12px 34px !important; border-radius: 12px !important;
|
|
9352
|
+
font: 400 13.5px/1.5 var(--read) !important; letter-spacing: 0 !important; text-transform: none !important; text-align: left !important;
|
|
9353
|
+
color: var(--text-2) !important;
|
|
9354
|
+
}
|
|
9355
|
+
#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); }
|
|
9356
|
+
#messages#messages .sys-dots.open > .system.folded:hover::after, #messages#messages .sys-dots.open > .system.folded:hover + .system.folded::after { opacity: 0; }
|
|
9357
|
+
#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); }
|
|
9358
|
+
#messages#messages .sys-dots.open > .system.folded.repeat { display: none !important; }
|
|
9359
|
+
/* La etiqueta: su propia línea, pequeña, en el tono del aviso. */
|
|
9360
|
+
#messages#messages .sys-dots.open > .system.folded > b:first-child {
|
|
9361
|
+
display: block; width: fit-content; margin: 0 0 3px; font: 600 10px/1.4 var(--mono); letter-spacing: .14em; text-transform: uppercase;
|
|
9362
|
+
color: color-mix(in srgb, var(--dot) 70%, var(--text-2));
|
|
9363
|
+
}
|
|
9364
|
+
#messages#messages .sys-dots.open > .system.folded:is([data-tone="info"], :not([data-tone])) > b:first-child { color: var(--text-3); }
|
|
9365
|
+
#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; }
|
|
9366
|
+
#messages#messages .sys-dots.open > .system.folded > b:not(:first-child) { font-weight: 600; color: var(--text); }
|
|
9367
|
+
/* La barra de un límite: bajo el texto, a la izquierda, fina. */
|
|
9368
|
+
#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; }
|
|
9369
|
+
#messages#messages .sys-dots.open > .system.folded .gauge .now { display: block; height: 100%; border-radius: inherit; background: var(--dot); }
|
|
9370
|
+
/* El comando de un módulo: un trozo de código, no una caja con borde. */
|
|
9371
|
+
#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; }
|
|
9372
|
+
/* La memoria: como los demás, a la izquierda; quién, en su píldora; la cuenta en voz baja. */
|
|
9373
|
+
#messages#messages .sys-dots.open > .system.folded.claim { display: block; width: auto; }
|
|
9374
|
+
#messages#messages .sys-dots.open > .system.folded.claim > .claim-head { font-size: 10px; }
|
|
9375
|
+
#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; }
|
|
9376
|
+
#messages#messages .sys-dots.open > .system.folded.claim .claim-body { display: block; font-size: 13.5px; color: var(--text-2); }
|
|
9377
|
+
#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); }
|
|
9378
|
+
#messages#messages .sys-dots.open > .system.folded.claim .claim-acts { justify-content: flex-start; }
|
|
9379
|
+
#messages#messages .sys-dots.open > .sys-more { justify-self: center; margin-top: 8px; }
|
|
9380
|
+
#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; }
|
|
9381
|
+
/* La cabecera en una sola línea (2026-10-15): lo primero que cede es la pregunta citada (se corta
|
|
9382
|
+
con «…»), luego modelo, esfuerzo y las demás insignias; el nombre y lo cobrado no se cortan. */
|
|
9383
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who { flex-wrap: nowrap; border-radius: 14px; }
|
|
9384
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who > span:first-child,
|
|
9385
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .spent { flex: none; }
|
|
9386
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who :is(.badge, .to-agent) { flex: none; }
|
|
9387
|
+
/* Solo lo que es una frase (de dónde viene una orden, «orden 1 de 1 · …») puede cortarse. */
|
|
9388
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge:not(.model, .mode, .ash) { flex: 0 1 auto; min-width: 60px; }
|
|
9389
|
+
/* Con el chat angosto se callan primero los que se pueden leer en otro lado: el esfuerzo (lo dice
|
|
9390
|
+
el sello de tu mensaje) y, más angosto, el ahorro de tokens (lo dice la caja de escribir). */
|
|
9391
|
+
#messages .thread-inner { container: thread / inline-size; }
|
|
9392
|
+
@container thread (max-width: 540px) { :root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.effort { display: none; } }
|
|
9393
|
+
@container thread (max-width: 430px) { :root:not([data-lab04]) #messages#messages .row.assistant .col > .who .badge.ash { display: none; } }
|
|
9394
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .reply { flex: 1 1 0; min-width: 0; max-width: max-content; }
|
|
9395
|
+
:root:not([data-lab04]) #messages#messages .row.assistant .col > .who .reply:empty { display: none; }
|
|
9396
|
+
/* El punto de un aviso solo (2026-10-15): más chico y casi transparente, para no ensuciar el
|
|
9397
|
+
lienzo; vuelve a verse entero al pasar o al enfocarlo. La fila con «+N» se atenúa menos. */
|
|
9398
|
+
#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; }
|
|
9399
|
+
#messages#messages .sys-dots.single > .system.folded { width: 6px !important; height: 6px !important; box-shadow: none !important; }
|
|
9400
|
+
#messages#messages .sys-dots:not(.open):not(.single) { opacity: .8; transition: opacity calc(180ms * var(--motion-scale)) ease; }
|
|
9401
|
+
#messages#messages .sys-dots:not(.open):is(:hover, :focus-visible) { opacity: 1; background: color-mix(in srgb, var(--bg) 78%, transparent); }
|
|
9402
|
+
/* El contexto compartido no lleva etiqueta: empieza con palabras y sus @agentes van en la frase. */
|
|
9403
|
+
#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); }
|
|
9404
|
+
|
|
9405
|
+
/* Lo que queda detrás de la caja de escribir (2026-10-15): la conversación se desvanece en los últimos
|
|
9406
|
+
~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
|
|
9407
|
+
de la versión. El final de la conversación sigue subiendo por encima: el hilo ya deja ese aire. */
|
|
9408
|
+
:root:not(.via-phone) #messages.thread {
|
|
9409
|
+
-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));
|
|
9410
|
+
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));
|
|
9411
|
+
}
|
|
9412
|
+
/* La barra del proyecto junto a dos paneles (2026-10-15): angosta en una pantalla ancha. Por
|
|
9413
|
+
debajo de 760 px «Primeros pasos» queda en su anillo y su cuenta (la frase sigue en su nombre y
|
|
9414
|
+
su título) y las teclas se juntan, para que todo quepa sin pisar Inicio · Proyectos · Ajustes y
|
|
9415
|
+
el nombre del proyecto no sea lo primero en irse. */
|
|
9416
|
+
@container roombar (max-width: 760px) {
|
|
9417
|
+
.shell > .bar:not(.bar-home) { gap: 10px; }
|
|
9418
|
+
#steps-pill .steps-label { display: none; }
|
|
9419
|
+
#steps-pill { gap: 6px; padding-inline: 9px 11px; }
|
|
9420
|
+
/* El nombre del proyecto se queda; el título de la conversación es el que se corta con «…». */
|
|
9421
|
+
.shell > .bar:not(.bar-home) .project:not(.chat-here) { font-size: 11px; }
|
|
9422
|
+
.shell > .bar:not(.bar-home) .project:not(.chat-here)::after { content: none; }
|
|
9423
|
+
}
|
|
9424
|
+
/* Cerrada, la salida de un /run no da su ancho a la píldora (2026-10-15): sus líneas largas (un
|
|
9425
|
+
`cloc`, una tabla) la estiraban de lado a lado aunque no se vieran. Ocupa el ancho de la píldora
|
|
9426
|
+
sin pedirlo; abierta, vuelve a medir lo suyo. */
|
|
9427
|
+
:root[data-term="pill"] #messages#messages .command-card.terminal:not(.open) .term-out { width: 0; min-width: 100%; }
|
|
9428
|
+
/* La esquina de quién hizo MADRE (public/attribution.js): un enlace a su autor, con aire bajo
|
|
9429
|
+
modo · modelo · esfuerzo para no pegarse a su vidrio cuando el centro es angosto. */
|
|
9430
|
+
.shell > .colophon { margin-top: 8px; }
|
|
9431
|
+
.colophon-link { color: inherit; text-decoration: none; border-radius: inherit; }
|
|
9432
|
+
.colophon-link:hover { text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
|
|
9433
|
+
.colophon-link:focus-visible { outline: 2px solid var(--accent, var(--phosphor)); outline-offset: 3px; }
|
|
9434
|
+
/* Lo que está fuera de la pantalla no se dibuja (2026-10-15): cada pieza de la conversación lleva
|
|
9435
|
+
content-visibility:auto, así que el navegador no la mide ni la pinta hasta que se acerca, y
|
|
9436
|
+
recuerda su alto una vez vista (contain-intrinsic-size: auto). Buscar con ⌘F, seleccionar y
|
|
9437
|
+
saltar a una cita siguen funcionando. El margen de recorte deja ver las sombras y los anillos
|
|
9438
|
+
que salen un poco de su caja. */
|
|
9439
|
+
#messages .thread-inner > :is(.row, .choice, .command-card, .system, .sys-dots) {
|
|
9440
|
+
content-visibility: auto;
|
|
9441
|
+
contain-intrinsic-size: auto 140px;
|
|
9442
|
+
overflow-clip-margin: 28px;
|
|
9443
|
+
}
|