@jossuealcala/madre 0.7.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +773 -1
- package/README.md +92 -28
- package/bin/madre.mjs +30 -10
- package/docs/REFERENCE.md +157 -81
- package/docs/SDK.md +23 -19
- package/package.json +1 -1
- package/public/app.js +11207 -4196
- package/public/assets/brand/Geist-latin-ext.woff2 +0 -0
- package/public/assets/brand/Geist-latin.woff2 +0 -0
- package/public/assets/brand/GeistMono-latin-ext.woff2 +0 -0
- package/public/assets/brand/GeistMono-latin.woff2 +0 -0
- package/public/assets/brand/JetBrainsMono-latin-ext.woff2 +0 -0
- package/public/assets/brand/JetBrainsMono-latin.woff2 +0 -0
- package/public/assets/brand/OFL-Geist.txt +93 -0
- package/public/assets/brand/OFL-GeistMono.txt +93 -0
- package/public/assets/brand/OFL-JetBrainsMono.txt +93 -0
- package/public/assets/brand/OFL-Sora.txt +93 -0
- package/public/assets/brand/Sora-latin-ext.woff2 +0 -0
- package/public/assets/brand/Sora-latin.woff2 +0 -0
- package/public/assets/brand/madre-app-180.png +0 -0
- package/public/assets/brand/madre-app-192.png +0 -0
- package/public/assets/brand/madre-app-512.png +0 -0
- package/public/assets/brand/madre-app.svg +1 -0
- package/public/assets/brand/madre-favicon.svg +1 -0
- package/public/assets/news/1.0/alerts.webp +0 -0
- package/public/assets/news/1.0/bar.webp +0 -0
- package/public/assets/news/1.0/finder.webp +0 -0
- package/public/assets/news/1.0/github.webp +0 -0
- package/public/assets/news/1.0/intents.webp +0 -0
- package/public/assets/news/1.0/looks.webp +0 -0
- package/public/assets/news/1.0/modules.webp +0 -0
- package/public/assets/news/1.0/mother.webp +0 -0
- package/public/assets/news/1.0/nostromo.webp +0 -0
- package/public/assets/news/1.0/permissions.webp +0 -0
- package/public/assets/news/1.0/room.webp +0 -0
- package/public/assets/news/1.0/settings.webp +0 -0
- package/public/assets/wallpapers/biznaga.webp +0 -0
- package/public/assets/wallpapers/canela.webp +0 -0
- package/public/assets/wallpapers/jarrito.webp +0 -0
- package/public/assets/wallpapers/magna.webp +0 -0
- package/public/assets/wallpapers/oceano.webp +0 -0
- package/public/assets/wallpapers/paraiso.webp +0 -0
- package/public/assets/wallpapers/quila.webp +0 -0
- package/public/assets/wallpapers/tradicion.webp +0 -0
- package/public/assets/wallpapers/tropical.webp +0 -0
- package/public/assets/wallpapers/urbania.webp +0 -0
- package/public/assets/wallpapers/ventura.webp +0 -0
- package/public/assets/wallpapers/xico.webp +0 -0
- package/public/brands.js +28 -2
- package/public/editor.js +744 -0
- package/public/es.js +2784 -1026
- package/public/i18n.js +1 -1
- package/public/index.html +201 -175
- package/public/inquiry.js +11 -11
- package/public/loader.js +79 -0
- package/public/macroverso.js +1497 -0
- package/public/manifest.webmanifest +14 -0
- package/public/nostromo-engine.js +2222 -0
- package/public/resay.js +24 -0
- package/public/review-ask.js +85 -0
- package/public/salas-mac.css +787 -0
- package/public/salas-mac.html +154 -0
- package/public/salas-mac.js +3264 -0
- package/public/salas.css +85 -0
- package/public/salas.html +47 -0
- package/public/salas.js +200 -0
- package/public/styles.css +6207 -425
- package/public/touch.js +83 -0
- package/public/tour-chapters.js +342 -0
- package/public/tour.js +510 -0
- package/public/troubleshooting.js +159 -140
- package/src/adapters/codex.mjs +46 -6
- package/src/adapters/gemini.mjs +30 -10
- package/src/adapters/madre.mjs +110 -18
- package/src/adapters/process.mjs +42 -2
- package/src/auth-probe.mjs +2 -2
- package/src/bridge/devices.mjs +202 -0
- package/src/bridge/handoff.mjs +45 -0
- package/src/bridge/host.mjs +82 -0
- package/src/bridge/network.mjs +133 -0
- package/src/bridge/policy.mjs +89 -0
- package/src/bridge/qr.mjs +287 -0
- package/src/bridge/server.mjs +269 -0
- package/src/capabilities.mjs +5 -9
- package/src/chats.mjs +59 -22
- package/src/checkpoint.mjs +137 -35
- package/src/choices.mjs +18 -3
- package/src/cli-args.mjs +12 -1
- package/src/commands.mjs +15 -15
- package/src/config.mjs +73 -9
- package/src/conversation-context.mjs +5 -2
- package/src/dataset.mjs +3 -1
- package/src/directives.mjs +0 -5
- package/src/enlaces.mjs +451 -0
- package/src/event-store.mjs +55 -10
- package/src/exam.mjs +5 -5
- package/src/extensions.mjs +0 -2
- package/src/file-ops.mjs +23 -0
- package/src/files.mjs +52 -2
- package/src/github.mjs +407 -0
- package/src/json-file.mjs +63 -0
- package/src/lease.mjs +2 -2
- package/src/lobby-work.mjs +103 -0
- package/src/looks.mjs +55 -0
- package/src/maturity.mjs +3 -3
- package/src/mcp/github-server.mjs +164 -0
- package/src/mcp/image-server.mjs +1 -1
- package/src/mcp/memory-server.mjs +11 -3
- package/src/memory.mjs +38 -12
- package/src/models.mjs +89 -5
- package/src/modules/ahp.mjs +4 -4
- package/src/modules/ash.mjs +1 -1
- package/src/modules/bishop-plan.mjs +207 -0
- package/src/modules/bishop.mjs +645 -0
- package/src/modules/choices.mjs +2 -2
- package/src/modules/correo.mjs +1 -1
- package/src/modules/enlaces.mjs +255 -0
- package/src/modules/git-pulse.mjs +2 -2
- package/src/modules/github.mjs +322 -0
- package/src/modules/image-studio.mjs +3 -3
- package/src/modules/index.mjs +18 -4
- package/src/modules/intents-calibration.mjs +338 -0
- package/src/modules/intents-desk.mjs +481 -0
- package/src/modules/intents-observe.mjs +266 -0
- package/src/modules/intents-policy.mjs +414 -0
- package/src/modules/intents-try.mjs +91 -0
- package/src/modules/intents.mjs +145 -0
- package/src/modules/ollama.mjs +4 -4
- package/src/modules/playwright.mjs +121 -11
- package/src/modules/ripley.mjs +1 -1
- package/src/modules/runs.mjs +2 -2
- package/src/modules/sdk.mjs +10 -4
- package/src/ollama.mjs +6 -1
- package/src/outbound.mjs +19 -17
- package/src/override.mjs +100 -0
- package/src/ports.mjs +23 -1
- package/src/prices.mjs +72 -0
- package/src/privacy.mjs +30 -11
- package/src/quota-sources.mjs +0 -8
- package/src/request-guard.mjs +1 -1
- package/src/review-ask.mjs +111 -0
- package/src/room/archivist.mjs +55 -37
- package/src/room/budget.mjs +17 -5
- package/src/room/control.mjs +70 -7
- package/src/room/economy.mjs +35 -7
- package/src/room/escalation.mjs +2 -0
- package/src/room/guard.mjs +26 -2
- package/src/room/prompt.mjs +22 -15
- package/src/room/runs.mjs +84 -21
- package/src/room/vectors.mjs +19 -4
- package/src/room.mjs +351 -65
- package/src/router.mjs +3 -1
- package/src/runs.mjs +23 -5
- package/src/salas.mjs +313 -0
- package/src/sentinel-errors.mjs +1 -1
- package/src/server-sentinel.mjs +124 -0
- package/src/server.mjs +1526 -163
- package/src/setup.mjs +1 -0
- package/src/tour.mjs +159 -0
- package/src/updates.mjs +48 -8
- package/src/usage-sentinel.mjs +1 -1
- package/src/verdict.mjs +7 -7
- package/src/whats-new.mjs +160 -0
|
@@ -0,0 +1,787 @@
|
|
|
1
|
+
/* SALAS on the Mac (salas-mac.html). The tokens are the room's (styles.css, loaded first): the same
|
|
2
|
+
ground, panels, bevel and accent, so leaving a room for SALAS is not leaving MADRE. The sky is
|
|
3
|
+
painted once, in CSS: three glows and two layers of fixed stars, nothing that moves. */
|
|
4
|
+
body.salas-mac {
|
|
5
|
+
--s-acc: var(--phosphor);
|
|
6
|
+
--s-acc-ink: var(--phosphor-ink);
|
|
7
|
+
margin: 0; min-height: 100vh; background: var(--bg); color: var(--text);
|
|
8
|
+
font-family: var(--read); font-size: 15px; line-height: 1.45;
|
|
9
|
+
}
|
|
10
|
+
:root[data-accent] body.salas-mac { --s-acc: var(--acc); --s-acc-ink: var(--acc-ink); }
|
|
11
|
+
/* Buttons and links speak in the page's letter unless a key says otherwise (no weight of its own). */
|
|
12
|
+
:where(.salas-mac) :where(button, a, input) { font: inherit; }
|
|
13
|
+
.sm-sky {
|
|
14
|
+
position: fixed; inset: 0; z-index: 0; pointer-events: none;
|
|
15
|
+
background:
|
|
16
|
+
radial-gradient(1100px 620px at 12% -12%, color-mix(in srgb, var(--s-acc) 16%, transparent), transparent 62%),
|
|
17
|
+
radial-gradient(900px 560px at 108% 8%, color-mix(in srgb, #3dc6ff 11%, transparent), transparent 62%),
|
|
18
|
+
radial-gradient(1200px 700px at 50% 122%, color-mix(in srgb, #ff2a1f 9%, transparent), transparent 64%);
|
|
19
|
+
}
|
|
20
|
+
/* A wallpaper, when one is chosen: the room's own (styles.css, --wp-*), with its veil, its «mesh»
|
|
21
|
+
and its blur, in place of the sky; the stars go with the sky. */
|
|
22
|
+
:root[data-wallpaper="jarrito"] .sm-sky { background: var(--wp-jarrito); }
|
|
23
|
+
:root[data-wallpaper="canela"] .sm-sky { background: var(--wp-canela); }
|
|
24
|
+
:root[data-wallpaper="paradise"] .sm-sky { background: var(--wp-paradise); }
|
|
25
|
+
:root[data-wallpaper="ventura"] .sm-sky { background: var(--wp-ventura); }
|
|
26
|
+
:root[data-wallpaper="magna"] .sm-sky { background: var(--wp-magna); }
|
|
27
|
+
:root[data-wallpaper="biznaga"] .sm-sky { background: var(--wp-biznaga); }
|
|
28
|
+
:root[data-wallpaper="oceano"] .sm-sky { background: var(--wp-oceano); }
|
|
29
|
+
:root[data-wallpaper="quila"] .sm-sky { background: var(--wp-quila); }
|
|
30
|
+
:root[data-wallpaper="xico"] .sm-sky { background: var(--wp-xico); }
|
|
31
|
+
:root[data-wallpaper="tropical"] .sm-sky { background: var(--wp-tropical); }
|
|
32
|
+
:root[data-wallpaper="tradicion"] .sm-sky { background: var(--wp-tradicion); }
|
|
33
|
+
:root[data-wallpaper="urbania"] .sm-sky { background: var(--wp-urbania); }
|
|
34
|
+
:root[data-wallpaper] .sm-sky { inset: calc(-2 * var(--wp-blur-on, 0px)); filter: blur(var(--wp-blur-on, 0px)); }
|
|
35
|
+
:root[data-wallpaper] .sm-sky::after { display: none; }
|
|
36
|
+
:root:not([data-scheme="light"]) .sm-sky::after {
|
|
37
|
+
content: ''; position: absolute; inset: 0; opacity: .5;
|
|
38
|
+
background-image:
|
|
39
|
+
radial-gradient(1px 1px at 20px 30px, rgba(255, 255, 255, .55), transparent 60%),
|
|
40
|
+
radial-gradient(1px 1px at 140px 90px, rgba(255, 255, 255, .35), transparent 60%),
|
|
41
|
+
radial-gradient(1.4px 1.4px at 90px 160px, rgba(190, 220, 255, .45), transparent 60%),
|
|
42
|
+
radial-gradient(1px 1px at 210px 210px, rgba(255, 240, 220, .3), transparent 60%);
|
|
43
|
+
background-size: 240px 240px, 240px 240px, 240px 240px, 240px 240px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* THE BAR, as a room's (styles.css, .shell > .bar and .bar-home): the surface as glass, the sheen,
|
|
47
|
+
the bevel and the layered shadow, mono at 11 px; a group of its own on the right for reload and
|
|
48
|
+
settings. It stays at the top while the lobby scrolls under it. */
|
|
49
|
+
.sm-top { position: sticky; top: 0; z-index: 12; display: flex; align-items: stretch; gap: 10px; max-width: 1440px; margin: 0 auto; padding: 10px 20px 0; }
|
|
50
|
+
.sm-topbar { position: relative; display: flex; align-items: center; gap: 14px; min-width: 0; height: 48px; padding: 9px 12px 9px 16px; border-radius: 20px; background-color: color-mix(in srgb, var(--bg) 93%, transparent); background-image: var(--sheen); -webkit-backdrop-filter: blur(22px) saturate(1.7); backdrop-filter: blur(22px) saturate(1.7); box-shadow: var(--bevel), 0 1px 2px rgba(0, 0, 0, .45), 0 10px 24px -10px rgba(0, 0, 0, .6), 16px 24px 50px -24px rgba(0, 0, 0, .55); font-family: var(--mono); font-size: 11px; letter-spacing: .04em; color: var(--text-2); }
|
|
51
|
+
:root[data-scheme="light"] .sm-topbar { background-color: color-mix(in srgb, #ffffff 94%, transparent); box-shadow: var(--bevel), 0 1px 2px rgba(20, 40, 60, .12), 0 10px 24px -12px rgba(20, 40, 60, .24), 16px 24px 50px -26px rgba(20, 40, 60, .28); }
|
|
52
|
+
.sm-topbar:first-child { flex: 1; }
|
|
53
|
+
.sm-tb-home { flex: none; gap: 6px; padding: 9px 10px; }
|
|
54
|
+
.sm-brand { display: inline-flex; align-items: center; flex: none; color: var(--text); border-radius: 8px; padding: 4px 2px; }
|
|
55
|
+
.sm-brand .brand-logo { height: 15px; }
|
|
56
|
+
.sm-back-room { display: inline-flex; align-items: center; gap: 3px; flex: none; height: 26px; padding: 0 9px 0 5px; border-radius: 6px; background: var(--surface, var(--panel)); box-shadow: var(--key-rest); color: var(--text-2); font-weight: 600; text-decoration: none; }
|
|
57
|
+
.sm-back-room svg { width: 14px; height: 14px; }
|
|
58
|
+
.sm-back-room:hover { color: var(--text); box-shadow: var(--key-over, var(--key-rest)); }
|
|
59
|
+
.sm-crumb { flex: none; font-weight: 600; color: var(--text); }
|
|
60
|
+
.sm-crumb::before { content: '/ '; color: var(--text-3); font-weight: 400; }
|
|
61
|
+
.sm-live { display: inline-flex; align-items: center; gap: 6px; flex: none; color: var(--text-2); }
|
|
62
|
+
.sm-live i { width: 7px; height: 7px; border-radius: 50%; background: var(--session-ok); }
|
|
63
|
+
.sm-live.is-off i { background: var(--session-bad); }
|
|
64
|
+
.sm-live.is-off { color: var(--session-bad); }
|
|
65
|
+
/* The projects open: a key each, its state as a lamp — calm, working (it beats), waiting (ringed), older. */
|
|
66
|
+
.sm-tb-open { display: flex; align-items: center; gap: 6px; min-width: 0; overflow: hidden; padding: 3px; margin: -3px; }
|
|
67
|
+
.sm-tb-room { display: inline-flex; align-items: center; gap: 6px; flex: none; max-width: 170px; height: 26px; padding: 0 10px; border: 0; border-radius: 6px; background: var(--surface, var(--panel)); box-shadow: var(--key-rest); color: var(--text); font-family: var(--mono); font-size: 11px; font-weight: 600; letter-spacing: .02em; text-decoration: none; white-space: nowrap; cursor: pointer; transition: box-shadow calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
68
|
+
.sm-tb-room span { overflow: hidden; text-overflow: ellipsis; }
|
|
69
|
+
.sm-tb-room i { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--session-ok); }
|
|
70
|
+
.sm-tb-room.is-working i { background: var(--s-acc); animation: sm-beat 1.4s ease-in-out infinite; }
|
|
71
|
+
.sm-tb-room.is-waiting i { background: var(--s-acc); box-shadow: 0 0 0 3px color-mix(in srgb, var(--s-acc) 28%, transparent); }
|
|
72
|
+
.sm-tb-room:is(.is-outdated, .is-quiet) i { background: var(--session-wait); }
|
|
73
|
+
.sm-tb-room.is-more { color: var(--text-2); font-weight: 500; }
|
|
74
|
+
/* Six rooms or more: each a square key with its two letters, the lamp on its corner. */
|
|
75
|
+
.sm-tb-mono { display: none; }
|
|
76
|
+
.sm-tb-open.is-square > .sm-tb-room:not(.is-more) { position: relative; justify-content: center; width: 26px; padding: 0; }
|
|
77
|
+
.sm-tb-open.is-square > .sm-tb-room:not(.is-more) > span { display: none; }
|
|
78
|
+
.sm-tb-open.is-square > .sm-tb-room:not(.is-more) > .sm-tb-mono { display: block; font-family: var(--read); font-size: 11px; font-weight: 700; letter-spacing: 0; }
|
|
79
|
+
.sm-tb-open.is-square > .sm-tb-room:not(.is-more) > i { position: absolute; top: -2px; right: -2px; width: 8px; height: 8px; box-shadow: 0 0 0 2px var(--bg); }
|
|
80
|
+
.sm-tb-open.is-square > .sm-tb-room.is-waiting > i { box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px color-mix(in srgb, var(--s-acc) 35%, transparent); }
|
|
81
|
+
.sm-tb-open.is-square > .sm-tb-room.is-asleep > i { background: var(--surface, var(--panel)); box-shadow: 0 0 0 2px var(--bg), inset 0 0 0 1.5px var(--text-3); }
|
|
82
|
+
.sm-tb-room:hover { box-shadow: var(--key-over, var(--key-rest)); }
|
|
83
|
+
.sm-tb-room:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
84
|
+
/* The agents, with their sessions, as the room shows its crew. */
|
|
85
|
+
.sm-tb-agents { display: flex; align-items: center; gap: 8px; flex: none; }
|
|
86
|
+
.sm-agent-key { position: relative; flex: none; padding: 0; border: 0; border-radius: 50%; background: none; cursor: pointer; }
|
|
87
|
+
.sm-agent-key::after { content: ''; position: absolute; right: -2px; bottom: -2px; width: 8px; height: 8px; border-radius: 50%; background: var(--session-ok); box-shadow: 0 0 0 2px var(--surface, var(--panel)); }
|
|
88
|
+
.sm-agent-key.wait::after { background: var(--session-wait); }
|
|
89
|
+
.sm-agent-key.bad::after { background: var(--session-bad); }
|
|
90
|
+
.sm-agent-key:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
91
|
+
/* What asks for the person: who waits, a newer MADRE. */
|
|
92
|
+
.sm-pill { display: inline-flex; align-items: center; gap: 6px; flex: none; height: 26px; padding: 0 11px; border-radius: 999px; font-family: var(--mono); font-size: 11px; font-weight: 600; letter-spacing: .02em; text-decoration: none; white-space: nowrap; }
|
|
93
|
+
.sm-pill.is-wait { background: color-mix(in srgb, var(--s-acc) 16%, transparent); color: color-mix(in srgb, var(--s-acc) 70%, var(--text)); }
|
|
94
|
+
.sm-pill.is-wait i { width: 7px; height: 7px; border-radius: 50%; background: var(--s-acc); animation: sm-beat 1.4s ease-in-out infinite; }
|
|
95
|
+
.sm-pill.is-update { background: color-mix(in srgb, var(--session-wait) 18%, transparent); color: var(--text); }
|
|
96
|
+
.sm-badge { display: inline-grid; place-items: center; min-width: 16px; height: 16px; margin-left: 2px; padding: 0 4px; border-radius: 999px; background: var(--s-acc); color: var(--s-acc-ink); font-family: var(--mono); font-size: 9.5px; font-weight: 600; letter-spacing: 0; }
|
|
97
|
+
@media (max-width: 1180px) { .sm-tb-agents { display: none; } }
|
|
98
|
+
@media (max-width: 980px) { .sm-tb-open, .sm-live span, .sm-pill.is-update { display: none; } }
|
|
99
|
+
@media (max-width: 720px) { .sm-crumb, .sm-barkey span { display: none; } .sm-top { padding: 8px 10px 0; } }
|
|
100
|
+
.sm-brand:focus-visible { outline: 2px solid var(--s-acc); outline-offset: 3px; }
|
|
101
|
+
.sm-spacer { flex: 1; }
|
|
102
|
+
/* The bar's keys are the room's bar keys (styles.css, .mother-button, .tree-button, .stop-all). */
|
|
103
|
+
.sm-barkey, .sm-stop { display: inline-flex; align-items: center; gap: 7px; height: 26px; padding: 0 10px; border: 0; border-radius: 6px; font-family: var(--mono); font-size: 10px; font-weight: 400; letter-spacing: .18em; text-transform: uppercase; white-space: nowrap; cursor: pointer; }
|
|
104
|
+
.sm-barkey svg, .sm-stop svg { width: 14px; height: 14px; }
|
|
105
|
+
.sm-stop { box-shadow: inset 0 0 0 1px var(--terror); background: color-mix(in srgb, var(--terror) 12%, transparent); color: var(--terror); }
|
|
106
|
+
.sm-stop:hover, .sm-stop.armed { background: var(--terror); color: #fff; }
|
|
107
|
+
/* Whatever the page hides stays hidden, whatever its class lays out. */
|
|
108
|
+
.salas-mac [hidden] { display: none !important; }
|
|
109
|
+
|
|
110
|
+
/* An icon key: the room's, the surface it stands on raised by the one light. In the top bar it is
|
|
111
|
+
the bar's (28 × 26, 6 px corners); beside a text key it is that key's height and corners. */
|
|
112
|
+
.sm-icon-key { flex: none; display: inline-grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 9px; background: var(--surface, var(--panel)); color: var(--text-2); box-shadow: var(--key-rest); text-decoration: none; cursor: pointer; transition: box-shadow calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out), color calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
113
|
+
.sm-icon-key.bar { width: 28px; height: 26px; border-radius: 6px; }
|
|
114
|
+
.sm-icon-key:hover { color: var(--text); box-shadow: var(--key-over, var(--key-rest)); }
|
|
115
|
+
.sm-icon-key:active { box-shadow: var(--key-down); }
|
|
116
|
+
.sm-icon-key:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
117
|
+
.sm-icon-key svg { width: 16px; height: 16px; }
|
|
118
|
+
/* A link that cannot be followed yet (BISHOP waking) looks and acts like a disabled key. */
|
|
119
|
+
.sm-btn[aria-disabled="true"], .sm-icon-key[aria-disabled="true"] { opacity: .45; box-shadow: none; pointer-events: none; }
|
|
120
|
+
|
|
121
|
+
.sm-main { position: relative; z-index: 1; max-width: 1280px; margin: 0 auto; padding: 14px 40px 56px; }
|
|
122
|
+
.sm-hero { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 16px 24px; margin: 26px 0 26px; }
|
|
123
|
+
.sm-hero h1 { margin: 0; font-size: clamp(40px, 5vw, 60px); font-weight: 700; letter-spacing: -.025em; line-height: 1.02; }
|
|
124
|
+
/* The hero's tools stand on a raised bar, as the room's keys stand on its bar: the search and the
|
|
125
|
+
rail sink into it (the room's .settings-search and .sx-seg), the key that adds stands up. */
|
|
126
|
+
.sm-tools { display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; padding: 6px; border-radius: 14px; background: var(--surface, var(--panel)); }
|
|
127
|
+
.sm-tools .sm-search { flex: 0 1 260px; min-width: 180px; }
|
|
128
|
+
.sm-tools .sm-search input::-webkit-search-cancel-button { cursor: pointer; }
|
|
129
|
+
|
|
130
|
+
/* THE BENTO: twelve columns, rows of 118 px that grow when a tile needs more. A tile stands on the
|
|
131
|
+
lobby as the room's conversation stands on its wallpaper (styles.css, THE CANVAS IN PLANES): a
|
|
132
|
+
solid surface, one contact edge under it and one short lift, from the same formula and the same
|
|
133
|
+
depths. No light around it, no rim, no glow; the one that waits for you is the only one with a
|
|
134
|
+
ring (--ring), and a project under the hand comes one plane nearer. */
|
|
135
|
+
.sm-bento { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); grid-auto-rows: minmax(118px, auto); gap: 16px; }
|
|
136
|
+
.sm-bento + .sm-bento, .sm-none + .sm-bento, .sm-bento + .sm-none { margin-top: 16px; }
|
|
137
|
+
.sm-projects, .sm-low { grid-auto-rows: auto; }
|
|
138
|
+
.sm-tile { position: relative; display: flex; flex-direction: column; gap: 10px; min-width: 0; padding: 18px 20px; border-radius: 22px; background: var(--surface, var(--panel)); }
|
|
139
|
+
:is(.sm-tile, .sm-tools) {
|
|
140
|
+
--plane: var(--depth-system, 40);
|
|
141
|
+
box-shadow:
|
|
142
|
+
var(--ring, 0 0 #0000),
|
|
143
|
+
0 1px 1px rgb(var(--plane-ink) / min(.4, calc(var(--plane) * .0017 * var(--plane-k)))),
|
|
144
|
+
0 calc(var(--plane) * .16px) calc(var(--plane) * .38px) calc(var(--plane) * -.2px) rgb(var(--plane-ink) / min(.55, calc(var(--plane) * .0042 * var(--plane-k))));
|
|
145
|
+
}
|
|
146
|
+
.c-3 { grid-column: span 3; } .c-4 { grid-column: span 4; } .c-5 { grid-column: span 5; } .c-8 { grid-column: span 8; }
|
|
147
|
+
.r-1 { grid-row: span 1; } .r-2 { grid-row: span 2; } .r-3 { grid-row: span 3; }
|
|
148
|
+
.sm-projects > .sm-tile { grid-column: span 3; }
|
|
149
|
+
.sm-tile-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; }
|
|
150
|
+
.sm-tile-head h2 { margin: 0; font-family: var(--read); font-size: 15px; font-weight: 650; letter-spacing: -.005em; color: var(--text); }
|
|
151
|
+
.sm-tile-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: auto; }
|
|
152
|
+
.sm-hint { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
|
|
153
|
+
.sm-big { font-size: 30px; font-weight: 700; letter-spacing: -.02em; line-height: 1; font-variant-numeric: tabular-nums; color: var(--session-ok); }
|
|
154
|
+
|
|
155
|
+
/* A project: its name, where it lives, how it is, what it said last and what it holds. */
|
|
156
|
+
.sm-card { gap: 9px; transition: transform 180ms var(--ease-out, ease-out), box-shadow 180ms var(--ease-out, ease-out); }
|
|
157
|
+
.sm-card:hover { transform: translateY(-2px); --plane: var(--depth-user, 60); }
|
|
158
|
+
.sm-card.is-waiting { --ring: inset 0 0 0 1.5px color-mix(in srgb, var(--s-acc) 70%, transparent); }
|
|
159
|
+
.sm-card.is-asleep { background: color-mix(in srgb, var(--surface, var(--panel)) 64%, transparent); }
|
|
160
|
+
.sm-card.is-asleep h3 { color: var(--text-2); }
|
|
161
|
+
.sm-card-head { display: flex; align-items: center; gap: 10px; min-width: 0; }
|
|
162
|
+
.sm-card-head h3 { flex: 1; min-width: 0; margin: 0; font-size: 18px; font-weight: 650; letter-spacing: -.01em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
163
|
+
/* Chips in a flat tone (the room's, 6 Oct): seven-pixel corners, no rim, no shadow. */
|
|
164
|
+
.sm-chip { flex: none; padding: 3px 8px; border-radius: 7px; font-family: var(--mono); font-size: 11px; letter-spacing: .02em; }
|
|
165
|
+
.sm-chip.port { color: var(--text-2); background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
166
|
+
.sm-chip.here { color: color-mix(in srgb, var(--s-acc) 72%, var(--text)); background: color-mix(in srgb, var(--s-acc) 16%, transparent); font-family: var(--read); font-weight: 650; }
|
|
167
|
+
.sm-path { margin: -5px 0 0; font-family: var(--mono); font-size: 11.5px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
168
|
+
|
|
169
|
+
.sm-state { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 13px; color: var(--text-2); }
|
|
170
|
+
.sm-state .dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--session-ok); }
|
|
171
|
+
.is-working .sm-state .dot { background: var(--s-acc); animation: sm-beat 1.4s ease-in-out infinite; }
|
|
172
|
+
.is-waiting .sm-state { color: color-mix(in srgb, var(--s-acc) 62%, var(--text)); font-weight: 600; }
|
|
173
|
+
.is-waiting .sm-state .dot { background: var(--s-acc); }
|
|
174
|
+
.is-asleep .sm-state .dot { background: transparent; box-shadow: inset 0 0 0 1.5px var(--text-3); }
|
|
175
|
+
.is-outdated .sm-state .dot, .is-quiet .sm-state .dot { background: var(--session-wait); }
|
|
176
|
+
@keyframes sm-beat { 50% { opacity: .35; transform: scale(.8); } }
|
|
177
|
+
|
|
178
|
+
.sm-wait { padding: 9px 11px; border-radius: 12px; background: color-mix(in srgb, var(--s-acc) 14%, transparent); font-size: 13px; }
|
|
179
|
+
.sm-wait span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
|
|
180
|
+
.sm-chat { display: grid; gap: 2px; min-width: 0; }
|
|
181
|
+
.sm-chat b { font-size: 13.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
182
|
+
.sm-chat span { font-size: 12.5px; color: var(--text-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
|
|
183
|
+
|
|
184
|
+
/* What the archive holds, by kind, in NOSTROMO's colours: one line, as long as the archive is full. */
|
|
185
|
+
.sm-strip { display: flex; gap: 2px; height: 6px; margin-top: 2px; border-radius: 3px; overflow: hidden; }
|
|
186
|
+
.sm-strip.none { background: var(--line-2); }
|
|
187
|
+
.sm-strip i { min-width: 3px; }
|
|
188
|
+
.sm-strip .k-decision { background: var(--mem-decision); }
|
|
189
|
+
.sm-strip .k-fact { background: var(--mem-fact); }
|
|
190
|
+
.sm-strip .k-preference { background: var(--mem-preference); }
|
|
191
|
+
.sm-strip .k-question { background: var(--mem-question); }
|
|
192
|
+
.sm-strip .k-aberration { background: var(--mem-aberration); }
|
|
193
|
+
:root[data-scheme="light"] .sm-strip .k-fact { background: #b9c6d6; }
|
|
194
|
+
.sm-counts { margin: 0; font-size: 12px; color: var(--text-2); }
|
|
195
|
+
|
|
196
|
+
.sm-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: auto; padding-top: 4px; }
|
|
197
|
+
.sm-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 30px; padding: 0 13px; border: 0; border-radius: 9px; background: var(--surface, var(--panel)); color: var(--text); box-shadow: var(--key-rest); font-family: var(--read); font-size: 12.5px; font-weight: 550; letter-spacing: 0; text-decoration: none; white-space: nowrap; cursor: pointer; transition: box-shadow calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out), color calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
198
|
+
.sm-btn:hover { box-shadow: var(--key-over, var(--key-rest)); }
|
|
199
|
+
.sm-btn:active { box-shadow: var(--key-down); }
|
|
200
|
+
.sm-btn:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
201
|
+
.sm-btn.primary { background: var(--s-acc); color: var(--s-acc-ink); }
|
|
202
|
+
.sm-btn.danger { color: var(--danger, var(--terror)); }
|
|
203
|
+
.sm-ask { flex-basis: 100%; font-size: 12.5px; color: var(--text-2); }
|
|
204
|
+
@keyframes sm-turn { to { transform: rotate(360deg); } }
|
|
205
|
+
.sm-error { margin: 0; font-size: 13px; color: var(--terror); }
|
|
206
|
+
/* «Ask BISHOP about this one»: BISHOP's own mark, a key of its own at the end of the row. */
|
|
207
|
+
|
|
208
|
+
.sm-none { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 0; padding: 22px; border-radius: 22px; font-size: 14px; color: var(--text-2); background: var(--plane-meta, color-mix(in srgb, var(--text) 4%, transparent)); }
|
|
209
|
+
.sm-foot-row { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 16px; margin: 24px 0 0; }
|
|
210
|
+
.sm-foot { margin: 0; font-size: 12.5px; color: var(--text-2); }
|
|
211
|
+
.sm-foot-row .sm-colophon { flex: none; width: auto; margin: 0; }
|
|
212
|
+
body.sm-gone .sm-hero h1 { color: var(--text-3); }
|
|
213
|
+
|
|
214
|
+
/* BISHOP, the heart of the lobby: its mark, its state, the two ways in (here, or a new tab), its
|
|
215
|
+
last conversation, what it waits for, and a box that takes a question to its room. */
|
|
216
|
+
.sm-bishop { gap: 12px; padding: 20px 22px; }
|
|
217
|
+
.sm-bishop.is-waiting { --ring: inset 0 0 0 1.5px color-mix(in srgb, var(--s-acc) 70%, transparent); }
|
|
218
|
+
.sm-bishop-head { display: flex; align-items: center; gap: 14px; min-width: 0; }
|
|
219
|
+
.sm-bishop-words { display: grid; gap: 3px; flex: 1; min-width: 0; }
|
|
220
|
+
.sm-bishop-words h2 { margin: 0; font-family: var(--read); font-size: 20px; font-weight: 700; letter-spacing: -.01em; color: var(--text); }
|
|
221
|
+
.sm-bishop-keys { display: flex; align-items: center; gap: 8px; }
|
|
222
|
+
.sm-bishop-about { margin: 0; font-size: 13.5px; line-height: 1.45; color: var(--text-2); max-width: 680px; }
|
|
223
|
+
.sm-bishop-asks { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
224
|
+
/* THE LAST WORK, under BISHOP: MADRE's summary, a line per thing done, each led by its project. */
|
|
225
|
+
/* The lines share two columns (subgrid): every project tag in one, every sentence starting at the
|
|
226
|
+
same place in the other, whatever the project is called. The note closes the box at its foot. */
|
|
227
|
+
.sm-work { display: flex; flex-direction: column; gap: 12px; margin-top: 4px; padding: 14px 16px 14px; border-radius: 16px; background: color-mix(in srgb, var(--text) 4%, transparent); flex: 1; }
|
|
228
|
+
.sm-work-head { display: flex; align-items: center; gap: 10px; min-width: 0; }
|
|
229
|
+
.sm-work-head h3 { margin: 0; font-size: 14.5px; font-weight: 650; color: var(--text); }
|
|
230
|
+
.sm-work-by { flex: 1; min-width: 0; font-family: var(--mono); font-size: 11px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
231
|
+
.sm-work-list { display: grid; grid-template-columns: max-content minmax(0, 1fr); column-gap: 12px; row-gap: 10px; margin: 0; padding: 0; list-style: none; }
|
|
232
|
+
.sm-work-list:has(> li.raw) { grid-template-columns: max-content minmax(0, 1fr) max-content; }
|
|
233
|
+
.sm-work-list li { grid-column: 1 / -1; display: grid; grid-template-columns: subgrid; align-items: baseline; font-size: 13.5px; line-height: 1.5; color: var(--text); animation: sm-line-in calc(320ms * var(--motion-scale, 1)) var(--ease-out, ease-out) both; }
|
|
234
|
+
.sm-work-list .sm-tag-room { justify-self: start; max-width: 168px; overflow: hidden; text-overflow: ellipsis; }
|
|
235
|
+
.sm-work-list li:nth-child(2) { animation-delay: 60ms; } .sm-work-list li:nth-child(3) { animation-delay: 120ms; } .sm-work-list li:nth-child(4) { animation-delay: 180ms; } .sm-work-list li:nth-child(5) { animation-delay: 240ms; }
|
|
236
|
+
.sm-work-list li.raw span { color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
237
|
+
.sm-work-list li.raw b { color: var(--text); font-weight: 600; }
|
|
238
|
+
.sm-work-list time { font-family: var(--mono); font-size: 11px; color: var(--text-2); }
|
|
239
|
+
.sm-work > .sm-hint { margin-top: auto; padding-top: 2px; }
|
|
240
|
+
.sm-work.is-working .sm-work-by::before, .sm-work.is-working > .sm-hint::before { content: ''; display: inline-block; width: 10px; height: 10px; margin-right: 7px; vertical-align: -1px; border-radius: 50%; border: 2px solid color-mix(in srgb, var(--s-acc) 30%, transparent); border-top-color: var(--s-acc); animation: sm-turn .8s linear infinite; }
|
|
241
|
+
@keyframes sm-line-in { from { opacity: 0; transform: translateY(4px); } }
|
|
242
|
+
/* A project's name as a tag: flat tone, a way into it when it is open. */
|
|
243
|
+
.sm-tag-room { font-family: var(--read); font-size: 11.5px; font-weight: 600; letter-spacing: 0; color: var(--text); text-decoration: none; white-space: nowrap; }
|
|
244
|
+
a.sm-tag-room:hover { background: color-mix(in srgb, var(--s-acc) 16%, transparent); }
|
|
245
|
+
.sm-chip.ask { max-width: 100%; padding: 5px 10px; border: 0; font-family: var(--read); font-size: 12.5px; font-weight: 600; letter-spacing: 0; color: color-mix(in srgb, var(--s-acc) 72%, var(--text)); background: color-mix(in srgb, var(--s-acc) 15%, transparent); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
|
|
246
|
+
|
|
247
|
+
/* Waiting for you: one number, green when nobody waits, the accent when someone does. */
|
|
248
|
+
.sm-waiting.has .sm-big { color: var(--s-acc); }
|
|
249
|
+
.sm-waiting.has { --ring: inset 0 0 0 1.5px color-mix(in srgb, var(--s-acc) 60%, transparent); }
|
|
250
|
+
.sm-waiting-body { display: grid; gap: 6px; }
|
|
251
|
+
.sm-waiting-row { display: grid; gap: 1px; padding: 7px 10px; border-radius: 12px; color: var(--text); text-decoration: none; background: color-mix(in srgb, var(--s-acc) 12%, transparent); }
|
|
252
|
+
.sm-waiting-row b { font-size: 13px; font-weight: 650; }
|
|
253
|
+
.sm-waiting-row span { font-size: 12.5px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
254
|
+
.sm-waiting-row:hover { background: color-mix(in srgb, var(--s-acc) 18%, transparent); }
|
|
255
|
+
|
|
256
|
+
/* The map of the links (2026-10-11): hairline spokes from the Coordinator, a wire in the accent per
|
|
257
|
+
contract with the notes running along it, the projects it touches drawn whole and named in
|
|
258
|
+
full, the rest quiet round the edge. */
|
|
259
|
+
.sm-map { position: relative; flex: 1; min-height: 150px; color: var(--s-acc); }
|
|
260
|
+
.sm-map svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
|
|
261
|
+
.sm-map .spoke { stroke: var(--text-3); stroke-opacity: .22; stroke-width: 1; }
|
|
262
|
+
.sm-map .spoke.linked { stroke-opacity: 0; }
|
|
263
|
+
.sm-map .wire { fill: none; stroke: var(--s-acc); stroke-width: 2; stroke-linecap: round; }
|
|
264
|
+
.sm-map .note { fill: var(--s-acc); }
|
|
265
|
+
.sm-map .node { fill: var(--surface, var(--panel)); stroke: color-mix(in srgb, var(--text) 22%, transparent); stroke-width: 1.2; opacity: .7; }
|
|
266
|
+
.sm-map .node.asleep { fill: transparent; stroke: var(--text-3); stroke-dasharray: 2.5 2.5; }
|
|
267
|
+
.sm-map .node.linked { opacity: 1; fill: var(--surface, var(--panel)); stroke: var(--s-acc); stroke-width: 2; stroke-dasharray: none; }
|
|
268
|
+
.sm-map .node.waiting { stroke: var(--s-acc); stroke-width: 2; opacity: 1; }
|
|
269
|
+
.sm-map .label { font-family: var(--read); font-size: 11px; font-weight: 500; fill: var(--text-3); }
|
|
270
|
+
.sm-map .label.linked { font-size: 12px; font-weight: 650; fill: var(--text); }
|
|
271
|
+
.sm-map .bishop .halo { fill: none; stroke: var(--s-acc); stroke-opacity: .35; stroke-width: 1.5; }
|
|
272
|
+
.sm-map-legend { display: grid; gap: 4px; margin: 2px 0 0; padding: 0; list-style: none; }
|
|
273
|
+
.sm-map-legend li { display: flex; align-items: center; gap: 7px; min-width: 0; font-size: 12.5px; line-height: 1.35; color: var(--text-2); }
|
|
274
|
+
.sm-map-legend li i { flex: none; width: 14px; height: 2px; border-radius: 1px; background: var(--s-acc); }
|
|
275
|
+
.sm-map-legend li b { font-weight: 650; color: var(--text); }
|
|
276
|
+
.sm-map-legend .says { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
277
|
+
.sm-map-legend li.more { padding-left: 21px; }
|
|
278
|
+
.sm-map-orders { flex: none; padding: 1px 6px; border-radius: 6px; font-size: 11px; font-weight: 600; color: color-mix(in srgb, var(--s-acc) 72%, var(--text)); background: color-mix(in srgb, var(--s-acc) 14%, transparent); }
|
|
279
|
+
.sm-map > .sm-hint { position: absolute; inset: 0; display: grid; place-items: center; text-align: center; padding: 0 12px; }
|
|
280
|
+
|
|
281
|
+
/* The low row: what was decided, what needs you, and the memory. */
|
|
282
|
+
.sm-decisions { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
|
|
283
|
+
.sm-decision { display: grid; gap: 4px; padding: 10px 0; border-top: 1px solid var(--line); }
|
|
284
|
+
.sm-decision:first-child { border-top: 0; padding-top: 2px; }
|
|
285
|
+
.sm-decision-head { display: flex; align-items: center; gap: 8px; }
|
|
286
|
+
.sm-decision-head time { font-family: var(--mono); font-size: 11px; color: var(--text-2); }
|
|
287
|
+
.sm-decision p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
|
|
288
|
+
.sm-attention { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
|
|
289
|
+
.sm-attention-item { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 12px; background: color-mix(in srgb, var(--text) 4%, transparent); }
|
|
290
|
+
.sm-attention-item .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--session-wait); }
|
|
291
|
+
.sm-attention-item.is-bad .dot { background: var(--session-bad); }
|
|
292
|
+
.sm-attention-item.is-ok .dot, .sm-attention-item.is-calm .dot { background: var(--session-ok); }
|
|
293
|
+
.sm-attention-words { display: grid; gap: 1px; min-width: 0; }
|
|
294
|
+
.sm-attention-words b { font-size: 13px; font-weight: 600; color: var(--text); }
|
|
295
|
+
.sm-attention-words span { font-size: 12px; line-height: 1.4; color: var(--text-2); }
|
|
296
|
+
.sm-memory-body { display: grid; gap: 9px; }
|
|
297
|
+
.sm-memory-body .sm-strip { height: 8px; }
|
|
298
|
+
.sm-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: 12px; color: var(--text-2); }
|
|
299
|
+
.sm-legend span { display: inline-flex; align-items: center; gap: 6px; }
|
|
300
|
+
.sm-legend span::before { content: ''; width: 8px; height: 8px; border-radius: 50%; }
|
|
301
|
+
.sm-legend .k-decision::before { background: var(--mem-decision); }
|
|
302
|
+
.sm-legend .k-fact::before { background: var(--mem-fact); }
|
|
303
|
+
.sm-legend .k-preference::before { background: var(--mem-preference); }
|
|
304
|
+
.sm-legend .k-question::before { background: var(--mem-question); }
|
|
305
|
+
.sm-legend .k-aberration::before { background: var(--mem-aberration); }
|
|
306
|
+
:root[data-scheme="light"] .sm-legend .k-fact::before { background: #b9c6d6; }
|
|
307
|
+
.salas-mac .paper:hover { border-color: color-mix(in srgb, var(--s-acc) 40%, var(--line-2)); }
|
|
308
|
+
.salas-mac .paper[aria-checked="true"] { border-color: var(--s-acc); box-shadow: 0 0 0 1px var(--s-acc); }
|
|
309
|
+
|
|
310
|
+
@media (max-width: 1180px) { .sm-projects > .sm-tile { grid-column: span 4; } }
|
|
311
|
+
@media (max-width: 920px) {
|
|
312
|
+
.sm-bento > .c-8, .sm-bento > .c-4 { grid-column: 1 / -1; }
|
|
313
|
+
.sm-bento > .r-2, .sm-bento > .r-3 { grid-row: auto; }
|
|
314
|
+
.sm-projects > .sm-tile { grid-column: span 6; }
|
|
315
|
+
.sm-low > .sm-tile { grid-column: 1 / -1; }
|
|
316
|
+
}
|
|
317
|
+
@media (max-width: 720px) {
|
|
318
|
+
.sm-main { padding: 12px 18px 40px; }
|
|
319
|
+
.sm-projects > .sm-tile { grid-column: 1 / -1; }
|
|
320
|
+
.sm-tools { flex-wrap: wrap; width: 100%; }
|
|
321
|
+
.sm-tools .sm-search { flex: 1 1 100%; }
|
|
322
|
+
.sm-bishop-head { flex-wrap: wrap; }
|
|
323
|
+
}
|
|
324
|
+
@media (prefers-reduced-motion: reduce) {
|
|
325
|
+
.sm-card, .sm-btn { transition: none; }
|
|
326
|
+
.is-working .sm-state .dot { animation: none; }
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/* The room of SALAS (phase 3d): the door to the others, said on its card. */
|
|
330
|
+
.sm-chip.salas { background: color-mix(in srgb, var(--s-acc) 18%, transparent); color: color-mix(in srgb, var(--s-acc) 75%, var(--text)); }
|
|
331
|
+
|
|
332
|
+
/* LINKS (docs/MACROVERSO.md, phase 3c): the contracts between rooms, and the sheet that signs one. */
|
|
333
|
+
.sm-link-list { display: grid; gap: 10px; }
|
|
334
|
+
.sm-link { display: grid; grid-template-columns: 1fr auto; gap: 6px 14px; align-items: center; padding: 14px 16px; border-radius: 16px; background: var(--panel); box-shadow: inset 0 0 0 1px var(--line); }
|
|
335
|
+
.sm-link .who { margin: 0; font-family: var(--read); font-size: 15px; font-weight: 650; letter-spacing: -.01em; text-transform: none; }
|
|
336
|
+
.sm-link .who b { color: var(--s-acc); }
|
|
337
|
+
.sm-link .what, .sm-link .traffic { margin: 0; font-family: var(--read); font-size: 12.5px; letter-spacing: 0; text-transform: none; color: var(--text-2); }
|
|
338
|
+
.sm-link .what { grid-column: 1; }
|
|
339
|
+
.sm-link .traffic { grid-column: 1; }
|
|
340
|
+
.sm-link .sm-actions { grid-column: 2; grid-row: 1 / span 4; display: flex; align-items: center; gap: 8px; }
|
|
341
|
+
.sm-link .sm-recall { grid-column: 1; display: flex; align-items: center; gap: 8px; margin: 2px 0 0; font-family: var(--read); font-size: 12.5px; letter-spacing: 0; text-transform: none; color: var(--text-2); cursor: pointer; }
|
|
342
|
+
.sm-link .sm-recall input { accent-color: var(--s-acc); }
|
|
343
|
+
.sm-link.revoking { box-shadow: inset 0 0 0 1px color-mix(in srgb, #ff4d3d 55%, var(--line)); }
|
|
344
|
+
.sm-link .sm-ask { font-size: 12.5px; color: var(--text-2); }
|
|
345
|
+
/* Every sheet of the lobby wears the room's window material (styles.css, dialog.settings-window):
|
|
346
|
+
the second ground at 94 %, a light falling from its top, the space behind it blurred. What is
|
|
347
|
+
inside stands on it as the room's cards do. */
|
|
348
|
+
/* A SHEET (2026-10-10): the scroll is outside the window. The dialog is the whole screen, clear,
|
|
349
|
+
and it is what scrolls, so its bar runs down the screen's edge and the window stays whole,
|
|
350
|
+
corners and all; nothing inside a window scrolls on its own. Short, the window sits in the
|
|
351
|
+
middle; long, it starts near the top and the screen carries it. The window is the room's
|
|
352
|
+
settings window (styles.css, dialog.settings-window): its ground at 94 %, the light above, the
|
|
353
|
+
blur behind. */
|
|
354
|
+
dialog.sm-sheet { --sm-sheet-w: 520px; position: fixed; inset: 0; width: 100%; height: 100%; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; background: transparent; box-shadow: none; color: var(--text); overflow: hidden auto; overscroll-behavior: contain; }
|
|
355
|
+
dialog.sm-sheet[open] { --sm-sheet-pad: 28px; display: flex; flex-direction: column; align-items: center; padding: var(--sm-sheet-pad) 16px; }
|
|
356
|
+
dialog.sm-sheet > .sm-sheet-body { flex: none; width: min(var(--sm-sheet-w), 100%); margin-block: auto; overflow: clip; border-radius: 18px; background-color: color-mix(in srgb, var(--bg-2) 94%, transparent); background-image: linear-gradient(180deg, color-mix(in srgb, var(--text) 5%, transparent), transparent 120px); -webkit-backdrop-filter: blur(22px) saturate(1.2); backdrop-filter: blur(22px) saturate(1.2); box-shadow: 0 34px 90px -30px rgba(0, 0, 0, .55), 0 8px 24px -8px rgba(0, 0, 0, .25); }
|
|
357
|
+
:root[data-scheme="light"] dialog.sm-sheet > .sm-sheet-body { background-image: linear-gradient(180deg, rgba(255, 255, 255, .55), transparent 120px); }
|
|
358
|
+
.sm-sheet::backdrop { background: rgba(0, 0, 0, .45); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
|
|
359
|
+
.sm-sheet:where(:not(.sm-settings)) form { display: grid; gap: 16px; padding: 24px 24px 20px; }
|
|
360
|
+
.sm-sheet:where(:not(.sm-settings)) h3 { margin: 0; font-size: 22px; font-weight: 700; letter-spacing: -.015em; }
|
|
361
|
+
.sm-sheet:where(:not(.sm-settings)) .pair { display: grid; grid-template-columns: 1fr auto 1fr; gap: 10px; align-items: end; }
|
|
362
|
+
.sm-sheet:where(:not(.sm-settings)) .pair .arrow { padding-bottom: 9px; font-size: 18px; color: var(--text-3); text-align: center; }
|
|
363
|
+
.sm-sheet:where(:not(.sm-settings)) label { display: grid; gap: 5px; font-size: 11px; font-weight: 650; letter-spacing: .08em; text-transform: uppercase; color: var(--text-3); }
|
|
364
|
+
.sm-sheet:where(:not(.sm-settings)) select, .sm-sheet:where(:not(.sm-settings)) input[type="text"] { height: 36px; padding: 0 10px; border: 0; border-radius: 10px; background: transparent; color: var(--text); font: inherit; font-size: 14px; box-shadow: var(--key-track); outline: 0; }
|
|
365
|
+
.sm-sheet:where(:not(.sm-settings)) select:focus, .sm-sheet:where(:not(.sm-settings)) input[type="text"]:focus { box-shadow: var(--key-down); }
|
|
366
|
+
.sm-sheet:where(:not(.sm-settings)) .row { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center; font-size: 13.5px; text-transform: none; letter-spacing: 0; font-weight: 500; color: var(--text); }
|
|
367
|
+
.sm-sheet:where(:not(.sm-settings)) .row input { accent-color: var(--s-acc); }
|
|
368
|
+
.sm-sheet:where(:not(.sm-settings)) .hint { margin: 0; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
|
|
369
|
+
.sm-sheet:where(:not(.sm-settings)) .orders { padding: 12px 14px; border-radius: 12px; background: var(--panel-2); display: grid; gap: 10px; }
|
|
370
|
+
.sm-sheet:where(:not(.sm-settings)) .orders[hidden] { display: none; }
|
|
371
|
+
.sm-sheet:where(:not(.sm-settings)) .error { margin: 0; font-size: 13px; color: #ff4d3d; }
|
|
372
|
+
.sm-sheet:where(:not(.sm-settings)) .error:empty { display: none; }
|
|
373
|
+
.sm-sheet:where(:not(.sm-settings)) .actions { display: flex; justify-content: flex-end; gap: 8px; }
|
|
374
|
+
|
|
375
|
+
/* THE MACROVERSE (macroverso.js): a layer over SALAS, the whole window, always night — it is space,
|
|
376
|
+
in either theme. The words over it keep the room's type and the accent. */
|
|
377
|
+
/* A key on the bar, as MÓDULOS and MU/TH/UR are in the room. */
|
|
378
|
+
.sm-barkey { background: var(--surface, var(--panel)); color: var(--text-2); box-shadow: var(--key-rest); transition: box-shadow calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out), color calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
379
|
+
.sm-barkey:hover { color: var(--text); box-shadow: var(--key-over, var(--key-rest)); }
|
|
380
|
+
.sm-barkey:active { box-shadow: var(--key-down); }
|
|
381
|
+
.sm-barkey:focus-visible, .sm-stop:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
382
|
+
body.sm-in-macro { overflow: hidden; }
|
|
383
|
+
|
|
384
|
+
.mv { position: fixed; inset: 0; z-index: 20; background: #030305; color: #f2f1ee; animation: mv-in 420ms var(--ease-out, ease-out); }
|
|
385
|
+
/* The macroverse's space is night in either theme and what is drawn on it is light; its keys
|
|
386
|
+
are the room's in the theme you chose (2026-10-10), with the accent as the night wears it where
|
|
387
|
+
something is chosen (salas-mac.js, darkAccent and its ink). */
|
|
388
|
+
.mv { --s-acc: var(--mv-acc, #9bff66); --s-acc-ink: var(--mv-acc-ink, #0a1405); }
|
|
389
|
+
.mv.leaving { animation: mv-out 260ms ease-in forwards; }
|
|
390
|
+
@keyframes mv-in { from { opacity: 0; transform: scale(1.04); } }
|
|
391
|
+
@keyframes mv-out { to { opacity: 0; transform: scale(1.03); } }
|
|
392
|
+
.mv-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; outline: none; }
|
|
393
|
+
/* Its head is the Memory map's (styles.css, .nostromo-head and its #nostromo rules, which name
|
|
394
|
+
.mv too): a bar across the top with the name in small mono, the line of what it holds, the
|
|
395
|
+
kinds of memory under them and the keys at the end. */
|
|
396
|
+
.mv-head { position: absolute; left: 0; right: 0; top: 0; z-index: 2; margin: 0; }
|
|
397
|
+
.mv-head .mother-title { margin: 0; text-transform: uppercase; }
|
|
398
|
+
.mv-back { display: inline-flex; align-items: center; gap: 6px; }
|
|
399
|
+
.mv-back svg { width: 13px; height: 13px; flex: none; }
|
|
400
|
+
.mv-hint { position: absolute; left: 20px; bottom: 14px; margin: 0; font-size: 11.5px; color: rgba(242, 241, 238, .42); pointer-events: none; }
|
|
401
|
+
|
|
402
|
+
.mv-card { position: absolute; right: 40px; top: 50%; translate: 0 -50%; width: min(360px, 34vw); display: grid; gap: 10px; padding: 22px 22px 18px; border-radius: 22px; background: rgba(18, 18, 22, .78); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .07), 0 30px 60px -30px rgba(0, 0, 0, .9); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); animation: mv-card-in 420ms var(--ease-out, ease-out); }
|
|
403
|
+
.mv-card[hidden] { display: none; }
|
|
404
|
+
@keyframes mv-card-in { from { opacity: 0; translate: 16px -50%; } }
|
|
405
|
+
.mv-card h3 { margin: 0; font-size: 26px; font-weight: 700; letter-spacing: -.015em; }
|
|
406
|
+
.mv-state { margin: 0; font-size: 14px; color: rgba(242, 241, 238, .78); }
|
|
407
|
+
.mv-path { margin: -4px 0 0; font-family: var(--mono); font-size: 12px; color: rgba(242, 241, 238, .45); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
408
|
+
.mv-wait { margin: 0; padding: 10px 12px; border-radius: 12px; background: color-mix(in srgb, var(--s-acc) 18%, transparent); font-size: 13.5px; }
|
|
409
|
+
.mv-kinds { list-style: none; margin: 4px 0 0; padding: 0; display: grid; gap: 7px; }
|
|
410
|
+
.mv-kinds li { display: grid; gap: 4px; font-size: 12.5px; color: rgba(242, 241, 238, .72); }
|
|
411
|
+
.mv-kinds i { display: block; height: 4px; border-radius: 2px; background: var(--k); box-shadow: 0 0 10px color-mix(in srgb, var(--k) 45%, transparent); }
|
|
412
|
+
.mv-counts { margin: 2px 0 0; font-size: 12.5px; color: rgba(242, 241, 238, .5); }
|
|
413
|
+
.mv-links { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; font-size: 12.5px; color: rgba(242, 241, 238, .78); }
|
|
414
|
+
.mv-links li { padding-left: 14px; position: relative; }
|
|
415
|
+
.mv-links li::before { content: ''; position: absolute; left: 0; top: .55em; width: 8px; height: 2px; border-radius: 1px; background: var(--s-acc); }
|
|
416
|
+
.mv-links li.none { padding-left: 0; color: rgba(242, 241, 238, .45); }
|
|
417
|
+
.mv-links li.none::before { display: none; }
|
|
418
|
+
.mv-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
|
|
419
|
+
.mv-about { margin: 0; font-size: 13px; line-height: 1.45; color: rgba(242, 241, 238, .72); }
|
|
420
|
+
.mv-unlinked { margin-top: 0; gap: 6px; }
|
|
421
|
+
/* RECENTER is a bar key, as the room's: mono capitals, 26 px, 6 px corners, the surface raised. */
|
|
422
|
+
/* The memories picked inside the chosen universe, each in a window of its own (2026-10-09), as
|
|
423
|
+
NOSTROMO's cards are: dark glass, the kind as a dot and a word, the words under it, where it came
|
|
424
|
+
from in small mono. Moved by the header; the one in front carries a rim in its kind's colour. */
|
|
425
|
+
.mv-windows { position: absolute; inset: 0; pointer-events: none; }
|
|
426
|
+
.mv-mem { position: absolute; width: min(340px, 30vw); max-height: min(60vh, 520px); overflow: auto; overscroll-behavior: contain; scrollbar-width: none; display: grid; gap: 10px; padding: 14px 16px 14px; border-radius: 16px; background: rgba(22, 22, 25, .95); -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06), 0 18px 40px -18px rgba(0, 0, 0, .8); color: #f2f1ee; pointer-events: auto; animation: mv-mem-in 220ms var(--ease-out, ease-out); }
|
|
427
|
+
.mv-mem::-webkit-scrollbar { display: none; }
|
|
428
|
+
.mv-mem.front { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08), 0 0 0 1px color-mix(in srgb, var(--k, #f2f1ee) 40%, transparent), 0 22px 48px -18px rgba(0, 0, 0, .85); }
|
|
429
|
+
@keyframes mv-mem-in { from { opacity: 0; translate: 0 8px; } }
|
|
430
|
+
.mv-mem header { display: flex; align-items: center; justify-content: space-between; gap: 10px; cursor: grab; user-select: none; touch-action: none; }
|
|
431
|
+
.mv-mem.moving header { cursor: grabbing; }
|
|
432
|
+
.mv-mem header b { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; font-weight: 600; color: #f2f1ee; }
|
|
433
|
+
.mv-mem header b::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--k, #f2f1ee); }
|
|
434
|
+
.mv-mem-text { margin: 0; font-size: 14.5px; line-height: 1.5; color: #f2f1ee; }
|
|
435
|
+
.mv-mem-meta { margin: 0; font-family: var(--mono); font-size: 11px; color: rgba(242, 241, 238, .5); }
|
|
436
|
+
@media (prefers-reduced-motion: reduce) { .mv-mem { animation: none; } }
|
|
437
|
+
@media (prefers-reduced-motion: reduce) { .mv, .mv.leaving, .mv-card { animation: none; } }
|
|
438
|
+
|
|
439
|
+
/* ==========================================================================================
|
|
440
|
+
THE LOBBY (2026-10-10): the first screen of MADRE. The title with the one action it offers
|
|
441
|
+
(add a project); BISHOP above the projects, wide and in its own colour; the sheet that adds
|
|
442
|
+
folders and the first-run wizard, both in the sheets' material. The room's tokens throughout.
|
|
443
|
+
========================================================================================== */
|
|
444
|
+
.sm-add { height: 32px; padding: 0 14px; font-size: 13px; }
|
|
445
|
+
.sm-btn[disabled] { opacity: .45; box-shadow: none; cursor: default; }
|
|
446
|
+
.sm-btn.small { height: 28px; padding: 0 11px; border-radius: 8px; font-size: 12px; }
|
|
447
|
+
|
|
448
|
+
/* An agent's mark: its own colour and glyph (brands.js). */
|
|
449
|
+
.sm-mark { flex: none; display: inline-grid; place-items: center; border-radius: 50%; background: var(--b); color: var(--b-ink); box-shadow: 0 1px 2px rgba(15, 20, 30, .14), 0 4px 10px -5px rgba(15, 20, 30, .28); }
|
|
450
|
+
.sm-mark svg { width: 62%; height: 62%; }
|
|
451
|
+
|
|
452
|
+
/* Sheets that are wider than the link sheet, and their head. */
|
|
453
|
+
.sm-sheet.sm-wide { --sm-sheet-w: 720px; }
|
|
454
|
+
.sm-sheet-body { display: grid; gap: 14px; padding: 20px 24px 20px; }
|
|
455
|
+
.sm-sheet-body > h3 { margin: 0; font-size: 22px; font-weight: 700; letter-spacing: -.015em; }
|
|
456
|
+
.sm-sheet-body .hint, .sm-picker .hint { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--text-2); }
|
|
457
|
+
.sm-sheet-body .actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 4px; }
|
|
458
|
+
.sm-sheet-body .error { margin: 0; font-size: 13px; color: var(--terror); }
|
|
459
|
+
.sm-sheet-body .error:empty { display: none; }
|
|
460
|
+
.sm-sheet-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
461
|
+
.sm-sheet-head > h3 { margin: 0; font-size: 22px; font-weight: 700; letter-spacing: -.015em; }
|
|
462
|
+
|
|
463
|
+
/* The wizard's steps on the room's rail (.sx-seg): a sunk track, the current step raised and
|
|
464
|
+
heavier, the ones behind marked done. */
|
|
465
|
+
.sm-steps { display: inline-flex; gap: 4px; margin: 0; padding: 4px; list-style: none; border-radius: 12px; box-shadow: var(--key-track); }
|
|
466
|
+
.sm-steps li { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 12px; border-radius: 8px; font-size: 12.5px; font-weight: 450; color: var(--text-2); transition: color calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out), box-shadow calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
467
|
+
.sm-steps li.done::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--session-ok); }
|
|
468
|
+
.sm-steps li.on { color: var(--text); font-weight: 700; background: var(--surface, var(--panel)); box-shadow: var(--key-rest); }
|
|
469
|
+
|
|
470
|
+
/* The wizard's scenes: what each step is about, moving, over it. */
|
|
471
|
+
.sm-scene { position: relative; height: 168px; overflow: hidden; border-radius: 18px; box-shadow: var(--key-track); background: radial-gradient(420px 180px at 50% 120%, color-mix(in srgb, var(--s-acc) 16%, transparent), transparent 70%), radial-gradient(360px 160px at 50% -40%, color-mix(in srgb, #4fc3f7 10%, transparent), transparent 70%); animation: sm-scene-in calc(420ms * var(--motion-scale, 1)) var(--ease-out, ease-out) both; }
|
|
472
|
+
@keyframes sm-scene-in { from { opacity: 0; transform: scale(.985); } }
|
|
473
|
+
.sm-step { display: grid; gap: 14px; animation: sm-step-in calc(380ms * var(--motion-scale, 1)) var(--ease-out, ease-out) both; }
|
|
474
|
+
.sm-step.back { animation-name: sm-step-back; }
|
|
475
|
+
@keyframes sm-step-in { from { opacity: 0; transform: translateX(18px); } }
|
|
476
|
+
@keyframes sm-step-back { from { opacity: 0; transform: translateX(-18px); } }
|
|
477
|
+
.sm-scene-node { position: absolute; transform: translate(-50%, -50%); display: grid; place-items: center; }
|
|
478
|
+
/* 1 · The agents come to MADRE; each lights up, and its wire carries the beat, once connected. */
|
|
479
|
+
.scene-agents .sm-wires { position: absolute; inset: 0; width: 100%; height: 100%; }
|
|
480
|
+
.sm-wire { stroke: var(--text-3); stroke-opacity: .45; stroke-width: 1.4; stroke-dasharray: 3 5; animation: sm-flow 1.6s linear infinite; }
|
|
481
|
+
.sm-wire.on { stroke: var(--s-acc); stroke-opacity: .9; stroke-width: 2; stroke-dasharray: 6 8; animation-duration: .9s; }
|
|
482
|
+
@keyframes sm-flow { to { stroke-dashoffset: -16; } }
|
|
483
|
+
.scene-agents .agent { animation: sm-arrive calc(620ms * var(--motion-scale, 1)) var(--ease-out, ease-out) var(--d) both, sm-float 4.2s ease-in-out calc(var(--d) + 700ms) infinite alternate; }
|
|
484
|
+
.scene-agents .agent .sm-mark { opacity: .55; filter: saturate(.4); transition: opacity 300ms, filter 300ms; }
|
|
485
|
+
.scene-agents .agent.on .sm-mark { opacity: 1; filter: none; }
|
|
486
|
+
.scene-agents .agent::after { content: ''; position: absolute; right: -1px; bottom: -1px; width: 11px; height: 11px; border-radius: 50%; background: var(--session-ok); box-shadow: 0 0 0 2px var(--surface, var(--panel)); transform: scale(0); transition: transform 260ms var(--ease-out, ease-out); }
|
|
487
|
+
.scene-agents .agent.on::after { transform: scale(1); }
|
|
488
|
+
@keyframes sm-arrive { from { opacity: 0; transform: translate(-50%, -50%) scale(.4); } }
|
|
489
|
+
@keyframes sm-float { to { transform: translate(-50%, calc(-50% - 5px)); } }
|
|
490
|
+
.scene-agents .core::before { content: ''; position: absolute; inset: -6px; border-radius: 50%; box-shadow: 0 0 0 2px color-mix(in srgb, var(--s-acc) 50%, transparent); animation: sm-ring 2.4s ease-out infinite; }
|
|
491
|
+
@keyframes sm-ring { from { transform: scale(.9); opacity: .9; } to { transform: scale(1.7); opacity: 0; } }
|
|
492
|
+
/* 2 · The folders drop into the lobby, one after another, and its tiles light up. */
|
|
493
|
+
.sm-tray { position: absolute; left: 50%; bottom: 18px; transform: translateX(-50%); display: grid; grid-template-columns: repeat(5, 46px); gap: 10px; padding: 8px; border-radius: 14px; background: var(--surface, var(--panel)); box-shadow: var(--raise, var(--key-rest)); }
|
|
494
|
+
.sm-slot { position: relative; height: 30px; border-radius: 8px; box-shadow: var(--key-track); animation: sm-slot 5s ease-out calc(var(--i) * 420ms) infinite; }
|
|
495
|
+
@keyframes sm-slot { 0%, 17%, 82%, 100% { background: transparent; } 20%, 74% { background: color-mix(in srgb, var(--s-acc) 22%, transparent); } }
|
|
496
|
+
.sm-fly { position: absolute; left: 50%; top: 50%; width: 24px; height: 20px; margin: -10px 0 0 -12px; color: color-mix(in srgb, var(--s-acc) 72%, var(--text-2)); opacity: 0; animation: sm-drop 5s cubic-bezier(.32, .7, .4, 1) calc(var(--i) * 420ms) infinite; }
|
|
497
|
+
.sm-fly svg { width: 100%; height: 100%; display: block; }
|
|
498
|
+
@keyframes sm-drop { 0% { opacity: 0; transform: translateY(-130px) rotate(-10deg); } 5% { opacity: 1; } 17% { opacity: 1; transform: translateY(0) rotate(0); } 19% { transform: translateY(0) scale(1.08, .9); } 22% { transform: translateY(0) scale(1); } 74% { opacity: 1; transform: translateY(0); } 82%, 100% { opacity: 0; transform: translateY(0) scale(.85); } }
|
|
499
|
+
/* 3 · The rooms light up one after another as the beat runs through them. */
|
|
500
|
+
.sm-wins { position: absolute; inset: 0; z-index: 1; display: flex; align-items: center; justify-content: center; gap: 26px; }
|
|
501
|
+
.sm-win { display: grid; gap: 7px; align-content: start; width: 104px; height: 74px; padding: 9px 10px; border-radius: 12px; background: var(--surface, var(--panel)); box-shadow: var(--raise, var(--key-rest)); animation: sm-win 3s ease-out calc(var(--i) * 500ms + 300ms) infinite; }
|
|
502
|
+
.sm-win-bar { display: block; width: 26px; height: 6px; border-radius: 3px; background: var(--text-3); opacity: .5; }
|
|
503
|
+
.sm-win-line { display: block; height: 6px; border-radius: 3px; background: color-mix(in srgb, var(--text) 10%, transparent); }
|
|
504
|
+
.sm-win-line.short { width: 60%; }
|
|
505
|
+
@keyframes sm-win { 0%, 100% { box-shadow: var(--raise, var(--key-rest)); } 14%, 46% { box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--s-acc) 70%, transparent), var(--raise, var(--key-rest)); } }
|
|
506
|
+
.sm-win .sm-win-line { animation: sm-win-line 3s ease-out calc(var(--i) * 500ms + 300ms) infinite; }
|
|
507
|
+
@keyframes sm-win-line { 0%, 100% { background: color-mix(in srgb, var(--text) 10%, transparent); } 14%, 46% { background: color-mix(in srgb, var(--s-acc) 45%, transparent); } }
|
|
508
|
+
.sm-beat { position: absolute; z-index: 0; left: 0; right: 0; top: 50%; width: 100%; height: 44px; transform: translateY(-50%); pointer-events: none; }
|
|
509
|
+
.sm-beat path { fill: none; stroke: var(--s-acc); stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 18 82; animation: sm-beat-run 3s linear infinite; opacity: .85; }
|
|
510
|
+
@keyframes sm-beat-run { from { stroke-dashoffset: 18; } to { stroke-dashoffset: -82; } }
|
|
511
|
+
@media (prefers-reduced-motion: reduce) {
|
|
512
|
+
.sm-scene, .sm-step, .sm-wire, .scene-agents .agent, .scene-agents .core::before, .sm-slot, .sm-win, .sm-win .sm-win-line, .sm-beat path, .sm-work-list li { animation: none !important; }
|
|
513
|
+
.sm-fly { animation: none; opacity: 1; transform: none; }
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/* Choosing folders (salas-mac.js, projectPicker; 2026-10-10): which list (found, or your folders)
|
|
517
|
+
on a rail with a search beside it; a line that says what is shown, or where the walk is; the
|
|
518
|
+
folders as tiles, a page at a time, as many rows as the screen holds; and what was chosen, with
|
|
519
|
+
the key that adds it. The rail is the room's Appearance rail (styles.css, .sx-look .custom-seg). */
|
|
520
|
+
.sm-picker { display: grid; gap: 12px; }
|
|
521
|
+
.sm-picker-head { display: flex; align-items: center; gap: 10px; min-width: 0; }
|
|
522
|
+
.sm-picker-head .custom-seg { flex: none; display: inline-grid; grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: auto; gap: 2px; padding: 2px; border: 0; border-radius: 10px; background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
523
|
+
.sm-picker-head .seg-option { min-height: 28px; padding: 0 12px; border-radius: 8px; font-size: 12.5px; }
|
|
524
|
+
.sm-picker-head .seg-option[aria-checked="true"] { background: var(--surface, var(--panel)); box-shadow: 0 1px 2px rgba(0, 0, 0, .22), inset 0 1px 0 rgba(255, 255, 255, .06); }
|
|
525
|
+
/* The room's search (styles.css, .settings-search), not the sheet's uppercase field label. */
|
|
526
|
+
.sm-picker-head > .sm-picker-search { flex: 1 1 auto; max-width: none; display: flex; align-items: center; gap: 8px; height: 32px; padding: 0 10px; font-size: 13.5px; font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--text-2); }
|
|
527
|
+
.sm-picker-search input::-webkit-search-cancel-button { cursor: pointer; }
|
|
528
|
+
.sm-picker-line { display: flex; align-items: center; gap: 10px; min-width: 0; height: 28px; font-size: 13px; color: var(--text-2); }
|
|
529
|
+
.sm-picker-note { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
530
|
+
.sm-where { min-width: 0; font-family: var(--mono); font-size: 12px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
531
|
+
.sm-up { flex: none; gap: 4px; padding: 0 10px 0 6px; }
|
|
532
|
+
.sm-up svg { width: 14px; height: 14px; }
|
|
533
|
+
.sm-fold-grid { display: grid; grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); grid-template-rows: repeat(var(--rows, 4), 54px); gap: 8px; }
|
|
534
|
+
.sm-fold-grid > .sm-fold { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 11px; min-width: 0; padding: 0 8px 0 12px; border-radius: 12px; background: var(--surface, var(--panel)); box-shadow: var(--key-rest); font-size: inherit; font-weight: inherit; letter-spacing: 0; text-transform: none; color: var(--text); cursor: pointer; transition: box-shadow calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out), background-color calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
535
|
+
.sm-fold-grid > .sm-fold:hover { box-shadow: var(--key-over, var(--key-rest)); }
|
|
536
|
+
.sm-fold-grid > .sm-fold.is-on { background: color-mix(in srgb, var(--s-acc) 12%, var(--surface, var(--panel))); box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--s-acc) 65%, transparent), var(--key-rest); }
|
|
537
|
+
.sm-fold-grid > .sm-fold.known { cursor: default; background: color-mix(in srgb, var(--text) 4%, transparent); box-shadow: none; }
|
|
538
|
+
.sm-fold-grid > .sm-fold.known :is(.sm-fold-glyph, b) { opacity: .6; }
|
|
539
|
+
.sm-fold-grid > .sm-fold:has(input:focus-visible) { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
540
|
+
.sm-fold input { position: absolute; width: 1px; height: 1px; margin: 0; opacity: 0; pointer-events: none; }
|
|
541
|
+
.sm-fold-glyph { position: relative; display: grid; place-items: center; width: 24px; height: 20px; color: var(--text-3); }
|
|
542
|
+
.sm-fold.is-project .sm-fold-glyph { color: color-mix(in srgb, var(--s-acc) 72%, var(--text-2)); }
|
|
543
|
+
.sm-fold-glyph svg { display: block; width: 100%; height: 100%; }
|
|
544
|
+
.sm-fold-tick { position: absolute; right: -6px; bottom: -5px; display: grid; place-items: center; width: 15px; height: 15px; border-radius: 50%; background: var(--s-acc); color: var(--s-acc-ink); box-shadow: 0 0 0 2px var(--surface, var(--panel)); transform: scale(0); transition: transform calc(180ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
545
|
+
.sm-fold-tick svg { width: 10px; height: 10px; }
|
|
546
|
+
.sm-fold.is-on .sm-fold-tick { transform: scale(1); }
|
|
547
|
+
.sm-fold.known .sm-fold-tick { background: var(--text-3); }
|
|
548
|
+
.sm-fold-words { display: grid; gap: 1px; min-width: 0; }
|
|
549
|
+
.sm-fold-words b { font-size: 13.5px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
550
|
+
.sm-fold-words small { font-family: var(--mono); font-size: 11px; color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
551
|
+
.sm-into { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--text-2); cursor: pointer; }
|
|
552
|
+
.sm-into svg { width: 14px; height: 14px; }
|
|
553
|
+
.sm-into:hover, .sm-into:focus-visible { color: var(--text); background: color-mix(in srgb, var(--text) 8%, transparent); outline: 0; }
|
|
554
|
+
.sm-fold-none { grid-column: 1 / -1; grid-row: 1 / -1; align-self: center; justify-self: center; max-width: 46ch; margin: 0; text-align: center; font-size: 13.5px; line-height: 1.5; color: var(--text-2); }
|
|
555
|
+
.sm-picker-foot { display: flex; align-items: center; justify-content: flex-end; gap: 12px; min-height: 30px; }
|
|
556
|
+
.sm-pager { display: inline-flex; align-items: center; gap: 8px; margin-right: auto; }
|
|
557
|
+
.sm-page { width: 28px; height: 28px; }
|
|
558
|
+
.sm-page:disabled { opacity: .4; box-shadow: none; cursor: default; }
|
|
559
|
+
.sm-page-where { min-width: 52px; font-family: var(--mono); font-size: 11.5px; text-align: center; color: var(--text-2); }
|
|
560
|
+
.sm-picked { font-size: 13px; color: var(--text-2); }
|
|
561
|
+
/* «Add a project»: the welcome's scene, a little lower, over the picker. On a short screen every
|
|
562
|
+
scene gives up height first, so the folders keep a row more. */
|
|
563
|
+
.sm-add .sm-scene { height: 132px; }
|
|
564
|
+
@media (max-height: 820px) { .sm-scene { height: 124px; } .sm-add .sm-scene { height: 108px; } }
|
|
565
|
+
@media (max-width: 640px) { .sm-picker-head { flex-wrap: wrap; } .sm-picker-search { flex-basis: 100%; } }
|
|
566
|
+
|
|
567
|
+
/* Agents, in the wizard's first step: the mark, its name and its state, and the one action it needs. */
|
|
568
|
+
.sm-agents { display: grid; gap: 0; padding: 2px 14px; border-radius: 14px; background: var(--surface, var(--panel-2)); box-shadow: var(--key-rest, inset 0 0 0 1px var(--line)); }
|
|
569
|
+
.sm-agent { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 11px 0; border-top: 1px solid var(--line); }
|
|
570
|
+
.sm-agent:first-child { border-top: 0; }
|
|
571
|
+
.sm-agent-words { display: grid; gap: 2px; min-width: 0; }
|
|
572
|
+
.sm-agent-words b { font-size: 14.5px; font-weight: 600; }
|
|
573
|
+
.sm-agent-words small { font-size: 12.5px; }
|
|
574
|
+
.sm-agent-line { font-family: var(--mono); font-size: 11.5px !important; color: var(--text-3); overflow-wrap: anywhere; }
|
|
575
|
+
.sm-agent-line a { color: var(--s-acc); }
|
|
576
|
+
|
|
577
|
+
/* LINKING TWO ROOMS, step by step (salas-mac.js, openLinkSheet), in the room's settings language:
|
|
578
|
+
the step and its question, what it decides; the choices on a card, a row each, the safe one
|
|
579
|
+
marked; and the link as it stands, in a sunk panel under every step. */
|
|
580
|
+
.sm-sheet.sm-link-wizard { --sm-sheet-w: 640px; }
|
|
581
|
+
.sm-sheet .settings-switch { display: inline-flex; gap: 0; }
|
|
582
|
+
.salas-mac .settings-switch input:checked + i { background: var(--s-acc); }
|
|
583
|
+
.lw-step { gap: 16px; }
|
|
584
|
+
.lw-intro { display: grid; gap: 6px; }
|
|
585
|
+
.lw-eyebrow { font-family: var(--mono); font-size: 10.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--text-2); }
|
|
586
|
+
.lw-intro h3 { margin: 0; font-size: 22px; font-weight: 700; letter-spacing: -.015em; }
|
|
587
|
+
.lw-lead { margin: 0; max-width: 58ch; font-size: 14px; line-height: 1.55; color: var(--text-2); }
|
|
588
|
+
.lw-card { display: grid; margin: 0; padding: 2px 16px; list-style: none; border-radius: 14px; background: var(--surface, var(--panel)); box-shadow: var(--key-rest); }
|
|
589
|
+
.lw-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 13px 0; border-top: 1px solid var(--line); }
|
|
590
|
+
.lw-card > :first-child { border-top: 0; }
|
|
591
|
+
.lw-row.lw-stack { display: grid; gap: 8px; justify-content: normal; }
|
|
592
|
+
.lw-words { display: grid; gap: 3px; min-width: 0; }
|
|
593
|
+
.lw-title { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
594
|
+
.lw-title b { font-size: 14px; font-weight: 600; color: var(--text); }
|
|
595
|
+
.lw-note { max-width: 46ch; font-size: 12.5px; line-height: 1.45; color: var(--text-2); }
|
|
596
|
+
.lw-tag { padding: 2px 7px; border-radius: 7px; font-size: 11px; font-weight: 600; color: color-mix(in srgb, var(--s-acc) 72%, var(--text)); background: color-mix(in srgb, var(--s-acc) 14%, transparent); }
|
|
597
|
+
.lw-dot { flex: none; width: 9px; height: 9px; border-radius: 50%; }
|
|
598
|
+
.lw-dot.k-decision { background: var(--mem-decision); } .lw-dot.k-fact { background: var(--mem-fact); } .lw-dot.k-preference { background: var(--mem-preference); } .lw-dot.k-question { background: var(--mem-question); }
|
|
599
|
+
:root[data-scheme="light"] .lw-dot.k-fact { background: #b9c6d6; }
|
|
600
|
+
.lw-select { flex: none; width: 200px; }
|
|
601
|
+
.lw-input { width: 100%; }
|
|
602
|
+
.lw-control { flex: none; }
|
|
603
|
+
.lw-caution { display: flex; align-items: flex-start; gap: 10px; padding: 11px 0; border-top: 1px solid var(--line); font-size: 13px; line-height: 1.45; color: var(--text); }
|
|
604
|
+
.lw-caution i { flex: none; width: 8px; height: 8px; margin-top: 6px; border-radius: 50%; background: var(--session-wait); }
|
|
605
|
+
.lw-foot { margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--text-2); }
|
|
606
|
+
/* What a connection allows, line by line (2026-10-11): a tick in the accent for what it lets
|
|
607
|
+
happen, a quiet cross for what it never does. */
|
|
608
|
+
.lw-allows { display: grid; gap: 9px; padding: 12px 0 14px; border-top: 1px solid var(--line); }
|
|
609
|
+
.lw-allows-head { font-size: 12px; font-weight: 600; color: var(--text-2); }
|
|
610
|
+
.lw-allows ul { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
|
|
611
|
+
.lw-allows li { display: flex; align-items: flex-start; gap: 10px; font-size: 13px; line-height: 1.45; color: var(--text); }
|
|
612
|
+
.lw-allows li.no { color: var(--text-2); }
|
|
613
|
+
.lw-allows li i { flex: none; display: grid; place-items: center; width: 18px; height: 18px; margin-top: 0; border-radius: 50%; }
|
|
614
|
+
.lw-allows li i svg { width: 12px; height: 12px; }
|
|
615
|
+
.lw-allows li.yes i { color: color-mix(in srgb, var(--s-acc) 78%, var(--text)); background: color-mix(in srgb, var(--s-acc) 16%, transparent); }
|
|
616
|
+
.lw-allows li.no i { color: var(--text-2); background: color-mix(in srgb, var(--text) 7%, transparent); }
|
|
617
|
+
/* Two projects already connected: how, and where to change it, in place of a new connection. */
|
|
618
|
+
.lw-already { justify-items: start; }
|
|
619
|
+
.lw-already p { margin: 0; }
|
|
620
|
+
.lw-already-says { font-size: 13.5px; line-height: 1.45; color: var(--text); }
|
|
621
|
+
.lw-already .sm-btn { margin-top: 2px; }
|
|
622
|
+
/* The scene over every step, in the welcome's style: the two rooms arriving and floating, BISHOP
|
|
623
|
+
with its ring, the wire running the way the notes travel and the notes crossing it in their
|
|
624
|
+
kinds' colours; under it, the link's terms as chips, with no rule between (2026-10-10). */
|
|
625
|
+
.scene-link { display: grid; height: auto; }
|
|
626
|
+
.lw-field { position: relative; height: 124px; }
|
|
627
|
+
.lw-wires { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; pointer-events: none; }
|
|
628
|
+
.lw-wires path { fill: none; }
|
|
629
|
+
.lw-crossing { stroke: var(--surface, var(--panel)); stroke-width: 1.5; }
|
|
630
|
+
.lw-crossing.k-decision { fill: var(--mem-decision); } .lw-crossing.k-fact { fill: var(--mem-fact); } .lw-crossing.k-preference { fill: var(--mem-preference); } .lw-crossing.k-question { fill: var(--mem-question); }
|
|
631
|
+
:root[data-scheme="light"] .lw-crossing.k-fact { fill: #9fb0c6; }
|
|
632
|
+
.lw-end { z-index: 1; display: grid; justify-items: center; gap: 2px; transform: translate(-50%, -23px); animation: lw-arrive calc(620ms * var(--motion-scale, 1)) var(--ease-out, ease-out) var(--d) both, lw-float 4.2s ease-in-out calc(var(--d) + 700ms) infinite alternate; }
|
|
633
|
+
@keyframes lw-arrive { from { opacity: 0; transform: translate(-50%, -23px) scale(.45); } }
|
|
634
|
+
@keyframes lw-float { to { transform: translate(-50%, -28px); } }
|
|
635
|
+
.lw-end b { max-width: 130px; margin-top: 5px; font-size: 13px; font-weight: 650; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
636
|
+
.lw-end small { font-size: 11px; color: var(--text-2); }
|
|
637
|
+
.lw-room-mark { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 50%; background: var(--surface, var(--panel)); box-shadow: var(--raise, var(--key-rest)); color: color-mix(in srgb, var(--s-acc) 72%, var(--text-2)); }
|
|
638
|
+
.lw-room-mark svg { width: 22px; height: 19px; }
|
|
639
|
+
.lw-end.is-bishop::before { content: ''; position: absolute; top: -6px; left: 50%; width: 58px; height: 58px; margin-left: -29px; border-radius: 50%; box-shadow: 0 0 0 2px color-mix(in srgb, var(--s-acc) 45%, transparent); animation: sm-ring 2.4s ease-out infinite; pointer-events: none; }
|
|
640
|
+
.scene-link .lw-terms { position: relative; z-index: 1; display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin: 0; padding: 2px 14px 12px; }
|
|
641
|
+
.scene-link .lw-terms span { padding: 2px 9px; border-radius: 7px; font-size: 11.5px; line-height: 1.55; color: var(--text-2); background: color-mix(in srgb, var(--text) 6%, transparent); white-space: nowrap; }
|
|
642
|
+
.scene-link .lw-terms span:first-child { color: var(--text); font-weight: 600; }
|
|
643
|
+
/* One view, no scrolling: the assistant is compact. */
|
|
644
|
+
.sm-link-wizard .sm-sheet-body { gap: 12px; padding: 18px 22px; }
|
|
645
|
+
.sm-link-wizard .lw-step { gap: 12px; }
|
|
646
|
+
.sm-link-wizard .lw-intro h3 { font-size: 20px; }
|
|
647
|
+
.sm-link-wizard .lw-lead { font-size: 13.5px; line-height: 1.5; }
|
|
648
|
+
.sm-link-wizard .lw-row { padding: 10px 0; }
|
|
649
|
+
.lw-card.lw-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 22px; }
|
|
650
|
+
.lw-card.lw-grid > .lw-row { border-top: 1px solid var(--line); }
|
|
651
|
+
.lw-card.lw-grid > .lw-row:nth-child(-n+2) { border-top: 0; }
|
|
652
|
+
.lw-pick { display: flex; align-items: center; gap: 8px; }
|
|
653
|
+
/* Both ways: the two projects side by side, the sign that says each reads the other between them. */
|
|
654
|
+
.lw-pair { display: flex; align-items: center; gap: 10px; min-width: 0; }
|
|
655
|
+
.lw-pair .lw-select { flex: 1 1 0; width: auto; min-width: 0; }
|
|
656
|
+
.lw-both { display: grid; place-items: center; flex: none; width: 22px; color: var(--text-2); }
|
|
657
|
+
.lw-both svg { width: 18px; height: 18px; }
|
|
658
|
+
.lw-pick .lw-select { width: 170px; }
|
|
659
|
+
.lw-review li { position: relative; padding: 12px 0 12px 20px; border-top: 1px solid var(--line); font-size: 14px; line-height: 1.5; color: var(--text); }
|
|
660
|
+
.lw-review li:first-child { border-top: 0; }
|
|
661
|
+
.lw-review li::before { content: ''; position: absolute; left: 2px; top: 19px; width: 8px; height: 8px; border-radius: 50%; background: var(--s-acc); }
|
|
662
|
+
@media (max-width: 640px) {
|
|
663
|
+
.lw-row { flex-wrap: wrap; }
|
|
664
|
+
.lw-select { width: 100%; }
|
|
665
|
+
.lw-card.lw-grid { grid-template-columns: minmax(0, 1fr); }
|
|
666
|
+
.lw-card.lw-grid > .lw-row:nth-child(2) { border-top: 1px solid var(--line); }
|
|
667
|
+
.lw-pick { flex-wrap: wrap; }
|
|
668
|
+
}
|
|
669
|
+
@media (prefers-reduced-motion: reduce) { .lw-end, .lw-end.is-bishop::before { animation: none; } .lw-wires .sm-wire { animation: none; } }
|
|
670
|
+
|
|
671
|
+
/* AJUSTES, the room's window (styles.css: #settings, .settings-*, .sx-*), as wide as the room's.
|
|
672
|
+
Its head stays at the top of the screen while the screen carries the window. The board, the
|
|
673
|
+
scrim and the sheet over it share one place, so the window is as tall as the taller of the two
|
|
674
|
+
and nothing inside it scrolls. */
|
|
675
|
+
.sm-sheet.sm-settings { --sm-sheet-w: 980px; }
|
|
676
|
+
.sm-sheet-body.sm-settings-window { display: flex; flex-direction: column; gap: 0; padding: 0; min-height: min(640px, calc(100dvh - 56px)); }
|
|
677
|
+
/* Sticky against the screen's edge, not the layer's padding: the head meets the top of the screen. */
|
|
678
|
+
.sm-settings-window > .settings-head { position: sticky; top: calc(-1 * var(--sm-sheet-pad, 0px)); z-index: 4; cursor: default; touch-action: auto; background: color-mix(in srgb, var(--bg-2) 96%, transparent); -webkit-backdrop-filter: blur(22px) saturate(1.2); backdrop-filter: blur(22px) saturate(1.2); }
|
|
679
|
+
.sm-settings-body { position: relative; flex: 1; display: grid; container: settings / inline-size; }
|
|
680
|
+
.sm-settings-body > * { grid-area: 1 / 1; min-width: 0; }
|
|
681
|
+
.sm-settings-body > .settings-board { align-self: start; overflow: visible; }
|
|
682
|
+
.sm-settings-body > .settings-results { align-self: start; overflow: visible; }
|
|
683
|
+
.sm-settings-body > .settings-scrim { position: absolute; inset: 0; }
|
|
684
|
+
.sm-settings-body > .settings-sheet { position: relative; inset: auto; justify-self: end; width: min(580px, 64%); display: block; overflow: visible; }
|
|
685
|
+
.sm-settings-body .settings-scroll { overflow: visible; }
|
|
686
|
+
@container settings (max-width: 700px) { .sm-settings-body > .settings-sheet { width: 100%; } }
|
|
687
|
+
/* Appearance over the whole window, in two columns when there is room; the wallpapers small enough
|
|
688
|
+
that the thirteen fit in two rows. */
|
|
689
|
+
.sm-settings-body > .settings-sheet.full { justify-self: stretch; width: auto; max-width: none; min-width: 0; }
|
|
690
|
+
.sm-settings-body > .settings-sheet.full .settings-scroll { padding: 16px 22px 24px; }
|
|
691
|
+
.sm-look-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 30px; }
|
|
692
|
+
.sm-look-top .sx-intro { margin: 0 2px; }
|
|
693
|
+
.sm-look { grid-template-columns: minmax(0, 1fr); align-items: start; }
|
|
694
|
+
.sm-look-side { display: grid; grid-auto-rows: max-content; gap: 14px; min-width: 0; }
|
|
695
|
+
@container settings (min-width: 760px) { .sm-look { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); } }
|
|
696
|
+
.sm-look .custom-papers { grid-template-columns: repeat(auto-fill, minmax(64px, 1fr)); gap: 6px; }
|
|
697
|
+
.sm-look .paper { gap: 4px; padding: 3px 3px 5px; border-radius: 10px; }
|
|
698
|
+
.sm-look .paper-swatch { height: 38px; border-radius: 7px; }
|
|
699
|
+
.sm-look .paper-name { font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
700
|
+
.sm-look .custom-swatches { gap: 10px; }
|
|
701
|
+
.sm-look .sx-row.stack .custom-seg { display: flex; }
|
|
702
|
+
.sm-look .sx-row.stack .custom-seg .seg-option { flex: 1 1 auto; padding-inline: 8px; white-space: nowrap; }
|
|
703
|
+
.sm-look .sx-preview .look-preview { max-height: 204px; }
|
|
704
|
+
dialog.sm-sheet.sm-settings[open] { --sm-sheet-pad: 20px; }
|
|
705
|
+
/* The agents of this Mac, inside their block: the block is the card. */
|
|
706
|
+
.sx-block .sm-agents { padding: 0 16px 6px; border-radius: 0; background: none; box-shadow: none; }
|
|
707
|
+
|
|
708
|
+
/* THE BAR'S ROOMS, arranged as the room's bar is (styles.css, .bar-editing, .bar-badge, .bar-card):
|
|
709
|
+
the rooms tremble, each wears a «−», and a card under the bar offers the projects not on it. */
|
|
710
|
+
.sm-tb-open { position: relative; }
|
|
711
|
+
.sm-tb-open.is-editing { padding: 6px; margin: -6px; }
|
|
712
|
+
.sm-tb-open.is-editing > .sm-tb-room[data-bar-item] { animation: bar-jiggle calc(260ms * var(--motion-scale, 1)) ease-in-out infinite; animation-delay: var(--jiggle-delay, 0ms); touch-action: none; cursor: grab; }
|
|
713
|
+
.sm-tb-open.is-editing > .sm-tb-room[data-bar-item]:nth-child(even) { animation-direction: reverse; }
|
|
714
|
+
.sm-tb-open.is-editing > .bar-lifted { position: relative; z-index: 1; cursor: grabbing; animation-play-state: paused; }
|
|
715
|
+
.sm-tb-room:is(.is-spilled, .is-moving) { display: none; }
|
|
716
|
+
.sm-tb-room.is-asleep { color: var(--text-2); }
|
|
717
|
+
.sm-tb-room.is-asleep i { background: transparent; box-shadow: inset 0 0 0 1.5px var(--text-3); }
|
|
718
|
+
/* A project carried to the bar: where it would land, in its own name, drawn as a key that is not
|
|
719
|
+
there yet. */
|
|
720
|
+
.sm-tb-room.sm-tb-slot { background: transparent; box-shadow: none; outline: 1.5px dashed color-mix(in srgb, var(--s-acc) 75%, transparent); outline-offset: -1.5px; color: var(--text-2); pointer-events: none; }
|
|
721
|
+
.sm-tb-slot i { background: var(--s-acc); }
|
|
722
|
+
.sm-pins-card .bar-grid, .bar-more-card .bar-grid { max-height: none; overflow: visible; }
|
|
723
|
+
.sm-pin-glyph { position: relative; }
|
|
724
|
+
.sm-pin-glyph svg { width: 20px; height: 17px; }
|
|
725
|
+
.sm-pin-glyph i { position: absolute; right: -2px; bottom: -2px; width: 9px; height: 9px; border-radius: 50%; background: var(--session-ok); box-shadow: 0 0 0 2px var(--surface, var(--panel)); }
|
|
726
|
+
.sm-pin-glyph.is-asleep i { background: var(--surface, var(--panel)); box-shadow: 0 0 0 2px var(--surface, var(--panel)), inset 0 0 0 1.5px var(--text-3); }
|
|
727
|
+
.sm-pin-glyph:is(.is-waiting, .is-working) i { background: var(--s-acc); }
|
|
728
|
+
.sm-pin-glyph:is(.is-outdated, .is-quiet) i { background: var(--session-wait); }
|
|
729
|
+
/* A project's right-click: the bar card's material, a row per thing it can do. */
|
|
730
|
+
.bar-card.sm-menu { width: auto; min-width: 214px; padding: 6px; display: grid; gap: 2px; }
|
|
731
|
+
.sm-menu-item { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 34px; padding: 0 10px; border: 0; border-radius: 9px; background: transparent; color: var(--text); font-family: var(--read); font-size: 13px; text-align: left; cursor: pointer; }
|
|
732
|
+
.sm-menu-item svg { flex: none; width: 16px; height: 16px; color: var(--phosphor); }
|
|
733
|
+
.sm-menu-item:hover, .sm-menu-item:focus-visible { background: color-mix(in srgb, var(--text) 7%, transparent); outline: none; }
|
|
734
|
+
.sm-menu-item.danger, .sm-menu-item.danger svg { color: var(--danger, var(--terror)); }
|
|
735
|
+
.sm-menu-sep { display: block; height: 1px; margin: 4px 8px; background: var(--line); }
|
|
736
|
+
/* The card's own key for that menu, for whoever does not right-click: quiet until the card is
|
|
737
|
+
under the pointer. */
|
|
738
|
+
.sm-card-more { flex: none; display: grid; place-items: center; width: 26px; height: 26px; margin: -4px -6px -4px 0; padding: 0; border: 0; border-radius: 8px; background: transparent; color: var(--text-2); opacity: .7; cursor: pointer; transition: opacity calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out), background-color calc(160ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
|
|
739
|
+
.sm-card-more svg { width: 16px; height: 16px; }
|
|
740
|
+
.sm-card:hover .sm-card-more, .sm-card-more:focus-visible { opacity: 1; }
|
|
741
|
+
.sm-card-more:hover { color: var(--text); background: color-mix(in srgb, var(--text) 8%, transparent); }
|
|
742
|
+
.sm-card-more:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
743
|
+
/* Home's notices (salas-mac.js, toast): the room's, at the foot of the screen, over any sheet. */
|
|
744
|
+
.toast.sm-toast { position: fixed; inset: auto auto 28px 50%; z-index: 80; margin: 0; transform: translateX(-50%); overflow: visible; }
|
|
745
|
+
@media (prefers-reduced-motion: reduce) { .sm-tb-open.is-editing > .sm-tb-room[data-bar-item] { animation: none; } }
|
|
746
|
+
|
|
747
|
+
/* HOME'S OWN APPEARANCE (salas-mac.js, HOME_LOOKS; 2026-10-11). The preview is Home itself, small,
|
|
748
|
+
on the room's preview ground (styles.css, .look-preview), with its bar, the Coordinator and two
|
|
749
|
+
projects; and Home's choices on the page: cards with or without their last conversation, the
|
|
750
|
+
text a little larger or smaller, and the order of the projects (draw()). */
|
|
751
|
+
.sm-home-preview { display: grid; align-content: start; gap: 8px; min-height: 0; padding: 10px !important; font-family: var(--read); }
|
|
752
|
+
.sm-home-preview > * { position: relative; z-index: 1; }
|
|
753
|
+
.hp-bar { display: flex; align-items: center; gap: 6px; min-width: 0; height: 26px; padding: 0 9px; border-radius: 9px; background: color-mix(in srgb, var(--bg) 84%, transparent); box-shadow: 0 1px 2px rgba(0, 0, 0, .16), 0 6px 14px -10px rgba(0, 0, 0, .4); font-size: 9.5px; color: var(--text-2); overflow: hidden; }
|
|
754
|
+
.hp-logo { flex: none; width: 22px; height: 6px; border-radius: 3px; background: var(--acc, var(--phosphor)); }
|
|
755
|
+
.hp-bar b { flex: none; color: var(--text); font-weight: 650; }
|
|
756
|
+
.hp-pin { display: inline-flex; align-items: center; gap: 4px; min-width: 0; height: 16px; padding: 0 6px; border-radius: 5px; background: var(--panel); color: var(--text); font-family: var(--mono); font-size: 8.5px; white-space: nowrap; overflow: hidden; }
|
|
757
|
+
.hp-pin i { flex: none; width: 5px; height: 5px; border-radius: 50%; background: var(--session-ok); }
|
|
758
|
+
.hp-grid { display: grid; grid-template-columns: 1.25fr 1fr 1fr; gap: 8px; align-items: start; }
|
|
759
|
+
.hp-tile { display: grid; align-content: start; gap: 6px; min-width: 0; padding: 10px; border-radius: 12px; background: color-mix(in srgb, var(--panel) 90%, transparent); box-shadow: 0 1px 2px rgba(0, 0, 0, .16), 0 10px 20px -14px rgba(0, 0, 0, .5); font-size: 10px; color: var(--text); }
|
|
760
|
+
.hp-tile b { min-width: 0; font-size: 11.5px; font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
761
|
+
.hp-tile small { font-size: 9px; color: var(--text-2); }
|
|
762
|
+
.hp-head { display: flex; align-items: center; gap: 6px; min-width: 0; }
|
|
763
|
+
.hp-mark { flex: none; width: 18px; height: 18px; border-radius: 50%; background: #5c255e; box-shadow: inset 0 0 0 4.5px #5c255e, inset 0 0 0 6px #ffffff; }
|
|
764
|
+
.hp-state { display: flex; align-items: center; gap: 4px; }
|
|
765
|
+
.hp-state i { width: 5px; height: 5px; border-radius: 50%; background: var(--session-ok); }
|
|
766
|
+
.hp-card:nth-child(3) .hp-state i { background: transparent; box-shadow: inset 0 0 0 1.2px var(--text-3); }
|
|
767
|
+
.hp-chat { height: 16px; border-radius: 4px; background: color-mix(in srgb, var(--text) 9%, transparent); }
|
|
768
|
+
.hp-strip { height: 4px; border-radius: 2px; background: linear-gradient(90deg, var(--mem-decision, #ffdc3c) 0 28%, var(--mem-fact, #dfeeff) 28% 70%, var(--mem-preference, #5cf07a) 70% 84%, var(--mem-question, #3dc6ff) 84%); }
|
|
769
|
+
.hp-key { justify-self: start; margin-top: 2px; padding: 3px 8px; border-radius: 6px; background: var(--panel-2); font-size: 9px; font-weight: 600; white-space: nowrap; }
|
|
770
|
+
.hp-key.on, .hp-coord .hp-key { background: var(--acc, var(--phosphor)); color: var(--acc-ink, var(--phosphor-ink)); }
|
|
771
|
+
/* The Coordinator's key is the longest: inside its card it breaks into two lines rather than
|
|
772
|
+
running past the edge (2026-10-11). */
|
|
773
|
+
.hp-key { max-width: 100%; box-sizing: border-box; }
|
|
774
|
+
.hp-coord .hp-key { white-space: normal; line-height: 1.3; overflow-wrap: anywhere; }
|
|
775
|
+
.sm-home-preview[data-home-cards="compact"] :is(.hp-chat, .hp-strip) { display: none; }
|
|
776
|
+
.sm-home-preview[data-home-text="larger"] .hp-grid { zoom: 1.08; }
|
|
777
|
+
.sm-home-preview[data-home-text="smaller"] .hp-grid { zoom: .92; }
|
|
778
|
+
:root[data-home-cards="compact"] .sm-card :is(.sm-chat, .sm-strip, .sm-counts) { display: none; }
|
|
779
|
+
:root[data-home-text="larger"] .sm-main { zoom: 1.08; }
|
|
780
|
+
:root[data-home-text="smaller"] .sm-main { zoom: .93; }
|
|
781
|
+
/* A newer MADRE in the bar: a key now, that opens Home's Version. */
|
|
782
|
+
button.sm-pill { border: 0; cursor: pointer; }
|
|
783
|
+
.sm-pill.is-update svg { width: 14px; height: 14px; flex: none; }
|
|
784
|
+
.sm-pill.is-update:hover { background: color-mix(in srgb, var(--session-wait) 28%, transparent); }
|
|
785
|
+
.sm-pill.is-update:focus-visible { outline: 2px solid color-mix(in srgb, var(--s-acc) 70%, transparent); outline-offset: 2px; }
|
|
786
|
+
/* A project's name inside the wizard's sentences stands out (salas-mac.js, sayBold). */
|
|
787
|
+
:is(.lw-lead, .lw-note, .lw-review li, .lw-caution, .lw-allows li, .lw-already-says) b { font-weight: 650; color: var(--text); }
|