@jossuealcala/madre 1.0.0 → 1.0.1

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/public/styles.css CHANGED
@@ -1964,8 +1964,13 @@ dialog.viewer::backdrop { background: rgba(0,0,0,.7); backdrop-filter: blur(4px)
1964
1964
  .run-request .run-line.running { cursor: progress; border-color: var(--agent, var(--phosphor)); }
1965
1965
  .run-request .run-line.running .choice-tag { animation: klaxon 1.2s ease-in-out infinite; }
1966
1966
  @media (prefers-reduced-motion: reduce) { .run-request .run-line.running .choice-tag { animation: none; } }
1967
- .run-request .run-line.ran .choice-tag { background: var(--agent, var(--phosphor)); color: var(--bg); }
1967
+ .run-request .run-line.ran .choice-tag { border-color: var(--ok, var(--phosphor)); color: var(--ok, var(--phosphor)); }
1968
1968
  .run-request .run-line.failed .choice-tag { border-color: var(--crit); color: var(--crit); }
1969
+ .run-request .run-summary { margin: 10px 2px 0; font-family: var(--mono); font-size: 10.5px; color: var(--text-2); }
1970
+ .run-request .run-progress-track { position: relative; flex: 1 1 100%; height: 3px; overflow: hidden; border-radius: 3px; background: color-mix(in srgb, var(--agent, var(--phosphor)) 18%, transparent); }
1971
+ .run-request .run-progress-track::after { content: ''; position: absolute; inset: 0 auto 0 0; width: 32%; border-radius: inherit; background: var(--agent, var(--phosphor)); animation: run-travel 1.6s ease-in-out infinite alternate; }
1972
+ @keyframes run-travel { from { transform: translateX(0); } to { transform: translateX(220%); } }
1973
+ @media (prefers-reduced-motion: reduce) { .run-request .run-progress-track::after { animation: none; width: 100%; } }
1969
1974
  .run-request .run-line.refused { cursor: not-allowed; opacity: .6; }
1970
1975
  .run-request .run-line.refused .choice-tag { border-color: var(--text-3); color: var(--text-3); }
1971
1976
  /* A command still alive: where it serves, and the two things to do with it. The tag holds still
@@ -2463,6 +2468,23 @@ dialog.intents-window { width: 760px; height: 640px; }
2463
2468
  .conn-card .key-link:hover { color: var(--ph); }
2464
2469
  .conn-card .key-said.bad { color: var(--terror); }
2465
2470
 
2471
+ /* The second half of a browser sign-in. The CLI opens a page and then waits to be told the code
2472
+ that page gives back; this is where the address stays put and where the code is typed. It used
2473
+ to be nowhere, so the only thing on screen was a heartbeat and the sign-in died of its clock. */
2474
+ .login-ask { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
2475
+ .login-ask[hidden] { display: none; }
2476
+ .login-code { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; flex: 1 1 260px; }
2477
+ .login-code input { flex: 1 1 180px; min-width: 150px; font: inherit; font-size: 12.5px; color: var(--text); background: var(--bg); border: 1px solid var(--line-2); border-radius: 10px; padding: 8px 10px; }
2478
+ .login-code input:focus { outline: none; border-color: var(--phosphor); }
2479
+ .login-code button { font-family: var(--mono); font-size: 10px; letter-spacing: .14em; text-transform: uppercase; border: 1px solid var(--phosphor); color: var(--phosphor); background: color-mix(in srgb, var(--phosphor) 10%, transparent); border-radius: 8px; padding: 7px 12px; cursor: pointer; }
2480
+ .login-code button:disabled { opacity: .5; cursor: default; }
2481
+ .login-code .key-said { flex: 1 0 100%; }
2482
+ /* Inside a connection card the ground is black and everything is phosphor, as the key form is. */
2483
+ .conn-card .login-code input { color: var(--ph); background: #000; border: 1px solid var(--ph-dim); border-radius: 0; font-size: 12px; padding: 6px 8px; }
2484
+ .conn-card .login-code input::placeholder { color: var(--ph-dim); opacity: .7; }
2485
+ .conn-card .login-code input:focus { outline: 1px solid var(--ph); border-color: var(--ph); }
2486
+ .conn-card .login-code button { border: 1px solid var(--ph); color: #041004; background: var(--ph); border-radius: 0; }
2487
+
2466
2488
  /* A module card, floor by floor: what it is, what it does, what it touches, how it is doing, and
2467
2489
  then the switch. Everything inside a card wears the panel's phosphor, never the page's palette,
2468
2490
  and every number is given room so it can never land on its own label. */
@@ -3219,6 +3241,14 @@ dialog.whats-new::backdrop { background: rgba(0, 0, 0, .45); backdrop-filter: bl
3219
3241
  The list says whose servers these are, each one with a lamp that is lit while it answers. When
3220
3242
  the one on screen stops, the page stays, dimmed, and says so; it comes back on its own. */
3221
3243
  .ports-head { padding: 8px 10px 6px; font-family: var(--mono); font-size: 9px; font-weight: 600; letter-spacing: .18em; color: var(--text-3); }
3244
+ .ports-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 34px; }
3245
+ .ports-refresh { display: inline-grid; place-items: center; flex: none; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 7px; color: var(--text-2); background: var(--surface, var(--panel)); box-shadow: var(--key-rest); cursor: pointer; }
3246
+ .ports-refresh:hover { color: var(--text); box-shadow: var(--key-over, var(--key-rest)); }
3247
+ .ports-refresh:focus-visible { outline: 2px solid var(--phosphor); outline-offset: 2px; }
3248
+ .ports-refresh svg { width: 17px; height: 17px; }
3249
+ .ports-refresh.checking svg { animation: ports-turn .8s linear infinite; }
3250
+ @keyframes ports-turn { to { transform: rotate(360deg); } }
3251
+ @media (prefers-reduced-motion: reduce) { .ports-refresh.checking svg { animation: none; } }
3222
3252
  .ports-empty { padding: 6px 10px 10px; font-size: 12px; line-height: 1.5; color: var(--text-2); }
3223
3253
  .ports-lamp { align-self: center; width: 7px; height: 7px; border-radius: 50%; background: var(--phosphor); box-shadow: 0 0 0 3px color-mix(in srgb, var(--phosphor) 16%, transparent); }
3224
3254
  .ports-row.wider .ports-lamp, .ports-lamp.off { background: var(--text-3); box-shadow: none; }
@@ -8216,7 +8246,7 @@ dialog.tour-bonjour::backdrop { background: transparent; }
8216
8246
  .tour-points li::before { content: ''; position: absolute; left: 2px; top: .62em; width: 6px; height: 6px; border-radius: 50%; background: var(--tour-acc); }
8217
8247
  .tour-keys { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, max-content); gap: 6px 14px; margin: 6px 0 0; padding: 10px 12px; border-radius: 12px; background: color-mix(in srgb, var(--text) 4%, transparent); }
8218
8248
  .tour-keys dt { font-size: 12.5px; color: var(--text-2); }
8219
- .tour-keys dd { margin: 0; max-width: 22ch; justify-self: end; font-family: var(--mono); font-size: 11.5px; line-height: 1.4; text-align: right; color: var(--text); }
8249
+ .tour-keys dd { margin: 0; max-width: 34ch; text-wrap: balance; justify-self: end; font-family: var(--mono); font-size: 11.5px; line-height: 1.4; text-align: right; color: var(--text); }
8220
8250
  .tour-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
8221
8251
  .tour-gap { flex: 1; }
8222
8252
  .tour-where { font-size: 12.5px; color: var(--text-3); }
@@ -8228,7 +8258,7 @@ dialog.tour-bonjour::backdrop { background: transparent; }
8228
8258
 
8229
8259
  /* The scenes: a few shapes, drawn small, moving slowly. */
8230
8260
  .tour-scene { position: relative; height: 168px; overflow: hidden; border-radius: 14px; background: radial-gradient(120% 90% at 50% 0%, color-mix(in srgb, var(--tour-acc) 14%, transparent), transparent 70%), color-mix(in srgb, var(--text) 4%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text) 8%, transparent); }
8231
- .tour-scene.s-moved { height: auto; padding: 12px 14px; }
8261
+ .tour-scene.s-moved, .tour-scene.s-table { height: auto; padding: 12px 14px; }
8232
8262
  .ts-moved { display: grid; gap: 6px; }
8233
8263
  .ts-moved-row { display: grid; grid-template-columns: minmax(0, 1fr) 18px minmax(0, 1.4fr); align-items: center; gap: 8px; font-size: 12.5px; animation: tour-rise calc(420ms * var(--motion-scale, 1)) ease both; }
8234
8264
  .ts-moved-row:nth-child(2) { animation-delay: 60ms; } .ts-moved-row:nth-child(3) { animation-delay: 120ms; } .ts-moved-row:nth-child(4) { animation-delay: 180ms; } .ts-moved-row:nth-child(5) { animation-delay: 240ms; } .ts-moved-row:nth-child(6) { animation-delay: 300ms; } .ts-moved-row:nth-child(7) { animation-delay: 360ms; } .ts-moved-row:nth-child(8) { animation-delay: 420ms; }
@@ -8338,3 +8368,137 @@ dialog.tour-bonjour::backdrop { background: transparent; }
8338
8368
  .ts-search em { width: 54%; }
8339
8369
  }
8340
8370
  .tour-pill-slot:not([hidden]) { display: inline-flex; align-items: center; }
8371
+
8372
+ /* ==========================================================================================
8373
+ KEYS WITH A CLEAN EDGE · 13 OCT
8374
+ ------------------------------------------------------------------------------------------
8375
+ The two soft shadows of the shared light (above) read as a smudge on a white card: the light
8376
+ one vanishes and the dark one spreads. A key now stands on three thin layers instead — a
8377
+ hairline that draws its edge, a tight contact shadow and a short soft one below — with a
8378
+ faint lit top in the dark. Over it, it lifts a little; pressed, the shade goes inside. The
8379
+ same four tokens dress every key, in Home and in every project.
8380
+ ========================================================================================== */
8381
+ :root {
8382
+ --key-rest: inset 0 1px 0 rgba(255, 255, 255, .055), 0 0 0 .5px rgba(0, 0, 0, .6), 0 1px 1.5px rgba(0, 0, 0, .42), 0 3px 8px -3px rgba(0, 0, 0, .5);
8383
+ --key-over: inset 0 1px 0 rgba(255, 255, 255, .075), 0 0 0 .5px rgba(0, 0, 0, .6), 0 2px 3px rgba(0, 0, 0, .38), 0 8px 18px -7px rgba(0, 0, 0, .58);
8384
+ --key-down: inset 0 1px 2px rgba(0, 0, 0, .55), inset 0 0 0 .5px rgba(0, 0, 0, .5);
8385
+ --key-track: inset 0 0 0 .5px rgba(255, 255, 255, .07), inset 0 1px 2px rgba(0, 0, 0, .38);
8386
+ }
8387
+ :root[data-scheme="light"] {
8388
+ --key-rest: 0 0 0 .5px rgba(22, 30, 22, .11), 0 1px 1.5px rgba(22, 30, 22, .08), 0 2px 6px -2px rgba(22, 30, 22, .12);
8389
+ --key-over: 0 0 0 .5px rgba(22, 30, 22, .13), 0 2px 3px rgba(22, 30, 22, .08), 0 8px 18px -8px rgba(22, 30, 22, .2);
8390
+ --key-down: inset 0 1px 2px rgba(22, 30, 22, .14), inset 0 0 0 .5px rgba(22, 30, 22, .14);
8391
+ --key-track: inset 0 0 0 .5px rgba(22, 30, 22, .12), inset 0 1px 2px rgba(22, 30, 22, .06);
8392
+ }
8393
+
8394
+ /* ==========================================================================================
8395
+ OPENCODE BY PROVIDER · 13 OCT
8396
+ The composer's chooser groups OpenCode's models under the provider they come from, and
8397
+ AJUSTES › Project › OpenCode lists the providers with their key and their switch.
8398
+ ========================================================================================== */
8399
+ .model-list { max-height: 320px; }
8400
+ .model-group { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin: 10px 10px 3px; font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); }
8401
+ .model-group:first-of-type { margin-top: 6px; }
8402
+ .model-group b { font-weight: 650; color: var(--text-2); }
8403
+ .model-group span { letter-spacing: .04em; text-transform: none; font-size: 10.5px; }
8404
+ .model-group + .model-option { margin-top: 1px; }
8405
+ .model-manage { display: block; width: 100%; margin-top: 8px; padding: 8px 10px; border: 0; border-radius: 8px; background: transparent; color: var(--agent, var(--phosphor)); font: inherit; font-size: 12px; font-weight: 600; text-align: left; cursor: pointer; }
8406
+ .model-manage:hover { background: color-mix(in srgb, var(--agent, var(--phosphor)) 10%, transparent); }
8407
+
8408
+ .oc-block { display: grid; gap: 12px; margin: 0 16px 16px; padding: 16px 16px 12px; border-radius: 12px; box-shadow: var(--key-track); }
8409
+ .oc-title { display: grid; gap: 3px; }
8410
+ .oc-title b, .oc-add-label { font-size: 13.5px; font-weight: 600; color: var(--text); }
8411
+ .oc-providers { display: grid; gap: 0; }
8412
+ .oc-provider { display: flex; align-items: center; justify-content: space-between; gap: 14px; min-width: 0; padding: 10px 0; border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
8413
+ .oc-provider:first-child { border-top: 0; padding-top: 2px; }
8414
+ .oc-provider .sx-words { display: grid; gap: 1px; min-width: 0; }
8415
+ .oc-provider .sx-words b { font-size: 13.5px; font-weight: 600; color: var(--text); }
8416
+ .oc-controls { display: inline-flex; align-items: center; gap: 12px; flex: none; }
8417
+ .oc-shown { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-2); }
8418
+ .oc-add { display: grid; grid-template-columns: auto minmax(110px, 160px) minmax(0, 1fr) auto auto; align-items: center; gap: 8px 10px; padding-top: 12px; border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
8419
+ .oc-add .sx-input { height: 32px; min-width: 0; }
8420
+ .oc-where { font-size: 12px; font-weight: 550; color: var(--phosphor); text-decoration: none; white-space: nowrap; }
8421
+ .oc-where:hover { text-decoration: underline; }
8422
+ .oc-default-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); align-items: center; gap: 14px; padding-top: 12px; border-top: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
8423
+ .oc-default-row .sx-words { display: grid; gap: 2px; }
8424
+ .oc-default-row .sx-words b { font-size: 13.5px; font-weight: 600; color: var(--text); }
8425
+ .oc-picks { display: grid; gap: 8px; min-width: 0; }
8426
+ .oc-picks .sx-input { height: 32px; min-width: 0; width: 100%; }
8427
+ .oc-block > .sx-foot { margin: 0; font-size: 11.5px; }
8428
+ @container (max-width: 560px) {
8429
+ .oc-add { grid-template-columns: minmax(0, 1fr) auto; }
8430
+ .oc-add-label { grid-column: 1 / -1; }
8431
+ .oc-add .sx-input { grid-column: 1 / -1; }
8432
+ .oc-default-row { grid-template-columns: 1fr; }
8433
+ }
8434
+
8435
+ /* ==========================================================================================
8436
+ AGENTS, FOLDED · 13 OCT
8437
+ Each agent is one line until it is opened: who it is, whether it has a session and a chevron.
8438
+ Open, its settings come in pairs and its sign-in shows the last lines, the heartbeat once.
8439
+ ========================================================================================== */
8440
+ #settings .sx-agent { container-type: inline-size; }
8441
+ .sx-agent > .sx-head { padding: 0; }
8442
+ .sx-agent-toggle { display: flex; align-items: center; gap: 12px; width: 100%; min-width: 0; padding: 14px 16px; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; border-radius: inherit; }
8443
+ .sx-agent-toggle .sx-words { flex: 1; min-width: 0; }
8444
+ .sx-agent-toggle .sx-words p { margin: 0; }
8445
+ .sx-agent-toggle:focus-visible { outline: 2px solid color-mix(in srgb, var(--phosphor) 55%, transparent); outline-offset: -2px; }
8446
+ .sx-chevron { flex: none; width: 8px; height: 8px; margin: 0 4px 0 2px; border-right: 1.6px solid var(--text-3); border-bottom: 1.6px solid var(--text-3); transform: rotate(45deg) translate(-2px, -2px); transition: transform calc(180ms * var(--motion-scale, 1)) var(--ease-out, ease-out); }
8447
+ .sx-agent.open .sx-chevron { transform: rotate(-135deg) translate(-2px, -2px); }
8448
+ .sx-agent:not(.open) > .sx-meta, .sx-agent:not(.open) > .sx-agent-body { display: none; }
8449
+ .sx-agent:not(.open) { padding-bottom: 0; }
8450
+ .sx-agent > .sx-meta { padding-top: 0; margin-top: -4px; }
8451
+ .sx-agent-body { display: grid; }
8452
+ .sx-duo { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
8453
+ .sx-duo > .sx-row { min-width: 0; gap: 10px; padding-right: 14px; }
8454
+ .sx-duo > .sx-row .sx-control { max-width: none; }
8455
+ .sx-duo > .sx-row + .sx-row { border-left: 1px solid color-mix(in srgb, var(--text) 7%, transparent); }
8456
+ @container (max-width: 380px) {
8457
+ .sx-duo { grid-template-columns: 1fr; }
8458
+ .sx-duo > .sx-row + .sx-row { border-left: 0; }
8459
+ }
8460
+ .sx-agent .login-log { max-height: 132px; overflow-y: auto; padding: 10px 12px; border-radius: 10px; background: color-mix(in srgb, var(--text) 4%, transparent); font-family: var(--mono); font-size: 11.5px; line-height: 1.55; overflow-wrap: anywhere; }
8461
+ .sx-agent .login-log .beat { color: var(--text-3); }
8462
+ .sx-agent .login-log a { color: var(--phosphor); }
8463
+
8464
+ /* ==========================================================================================
8465
+ QUIET GEARS · 13 OCT
8466
+ The settings key of Files and Servers and the new-file key wore the white raised face the
8467
+ window keys wear only when they are ON (split view chosen), so they read as already pressed.
8468
+ At rest they now dress like the controls beside them — a hairline track, the bar's own
8469
+ ground, a grey icon — and take the accent only under the pointer, the way the window keys do.
8470
+ ========================================================================================== */
8471
+ :root .surface-gear, :root[data-scheme] .surface-gear {
8472
+ border: 1px solid var(--line-2) !important;
8473
+ background-color: color-mix(in srgb, var(--text) 3%, transparent) !important;
8474
+ box-shadow: none !important;
8475
+ color: var(--text-3);
8476
+ border-radius: 9px;
8477
+ }
8478
+ :root .surface-gear:hover:not(:disabled), :root .surface-gear:focus-visible {
8479
+ color: var(--phosphor);
8480
+ background-color: color-mix(in srgb, var(--phosphor) 10%, transparent) !important;
8481
+ box-shadow: none !important;
8482
+ }
8483
+ :root .surface-gear:active:not(:disabled), :root .surface-gear[aria-pressed="true"], :root .surface-gear[aria-expanded="true"] {
8484
+ color: var(--phosphor);
8485
+ background-color: var(--surface, var(--panel)) !important;
8486
+ box-shadow: var(--key-down) !important;
8487
+ }
8488
+
8489
+ /* The tour's widgets scene (1.1): four cards on a board, each with two meters that fill once. */
8490
+ .ts-grid.ts-widgets { top: 22px; bottom: 22px; grid-template-columns: repeat(2, 1fr); }
8491
+ .ts-widgets .ts-card { display: grid; align-content: center; gap: 9px; padding: 0 14px; }
8492
+ .ts-widgets .ts-card i { display: block; height: 6px; border-radius: 99px; background: linear-gradient(90deg, var(--phosphor) calc(var(--w) * 100%), color-mix(in srgb, var(--text) 10%, transparent) 0); }
8493
+ @media (prefers-reduced-motion: no-preference) {
8494
+ .ts-widgets .ts-card i { animation: ts-fill 1.6s cubic-bezier(.2, .7, .2, 1) both; }
8495
+ .ts-widgets .ts-card:nth-child(2) i { animation-delay: .15s; } .ts-widgets .ts-card:nth-child(3) i { animation-delay: .3s; } .ts-widgets .ts-card:nth-child(4) i { animation-delay: .45s; }
8496
+ }
8497
+ @keyframes ts-fill { from { background-size: 0 100%; background-repeat: no-repeat; } to { background-size: 100% 100%; background-repeat: no-repeat; } }
8498
+ .hint-card.in-modal::before { content: none; }
8499
+
8500
+ /* The tables of what was renamed or moved: a long new name wraps under itself, never past the box. */
8501
+ .ts-moved-row .now { overflow-wrap: anywhere; line-height: 1.35; }
8502
+
8503
+ /* The welcome and its chapters are dialogs too: their own ring is not drawn around them. */
8504
+ dialog.tour-bonjour:focus, dialog.tour-bonjour:focus-visible, dialog.whats-new:focus, dialog.whats-new:focus-visible { outline: none; }