diff --git a/web/routes/temas/profundidad/+page.svelte b/web/routes/temas/profundidad/+page.svelte index 3518a6972..bf3587757 100644 --- a/web/routes/temas/profundidad/+page.svelte +++ b/web/routes/temas/profundidad/+page.svelte @@ -1,39 +1,34 @@ Profundidad · Eidos @@ -48,86 +43,152 @@

La profundidad ocurre

- No es una propiedad que un elemento tiene — es algo que sucede. Un plano en - reposo (estado) y un ascenso al emerger (evento): los dos momentos, un solo - canal. + No es una propiedad que un elemento tiene — es algo que sucede. Mira: la + profundidad responde al cursor y asciende cuando algo emerge.

- +
-

Planos · momento-estado

-

- data-depth='{`{plane}`}' — un nivel cohere superficie + sombra + z. La mezcla - es mode-aware (en dark, "más arriba" = más claro). Cambia el tema arriba. -

+

Reacciona

+

Pasa el cursor — cada tarjeta sube de plano (raised → overlay): la sombra crece y se eleva.

-
- {#each PLANES as p} -
-
- {p.label} - {p.note} -
+
+ {#each [{ t: 'Ingresos', v: '€48.2k', d: '+12% este mes', c: 'fulfill' }, { t: 'Sesiones', v: '9 312', d: '+4% vs ayer', c: 'primary' }, { t: 'Alertas', v: '3', d: 'requieren acción', c: 'risk' }] as card} +
+ {card.t} + {card.v} + {card.d} +
{/each}
- +
-

El evento · momento-evento

+

Asciende

- La elevación vive en la firma: dispara un evento (como haría sema durante el - hold) y la sombra crece al emerger / se aplana - al presionar — coordinado con posición + escala desde un solo evento. + Abre el panel: asciende sobre el contenido (que recede tras el scrim). La sombra + crece desde plano hasta su elevación — la firma del evento, no un estilo fijo.

-
-
-
- plano de reposo -
- {#each ['raised', 'overlay', 'modal'] as pl} - - {/each} -
-
-
- - +
+
+
+ + panel · proyecto
+ {#each ['Revisar borrador de diseño', 'Publicar el sprint de profundidad', 'Cerrar incidencias abiertas'] as row, i} +
{row}
+ {/each}
-
+ {#if open} +
- ↕ - dispárame +

Acabo de ascender

+

+ Mi sombra creció desde la superficie hasta el plano modal mientras subía — y + el contenido de detrás recedió. Eso es la profundidad ocurriendo. +

+
+ + +
-
+ {/if} + + +
+
+ + +
+
+

Cada plano, un rol

+

+ Los 5 planos son los componentes que los necesitan. data-depth cohere + superficie + sombra + z; en dark, "más arriba" = más claro (mode-aware). +

+
+ +
+ +
+
+
+ diseño + activo + v2 +
+
+
flush · chips, a ras de superficie
+
+ + +
+
+
+ A +
Tarjetacontenido en reposo
+
+
+
raised · tarjetas, paneles
+
+ + +
+
+
+ + + +
+
+
overlay · menús, popovers
+
+ + +
+
+
+ ¿Eliminar? + No se puede deshacer. + Eliminar +
+
+
modal · diálogos, cima
+
+ + +
+
+
+ Buscar + escribe aquí… +
+
+
recessed · inputs, pozos
+
@@ -136,209 +197,150 @@ .root { min-block-size: 100vh; background: - radial-gradient(120% 80% at 50% -10%, var(--color-surface-raised), transparent 60%), + radial-gradient(130% 90% at 50% -15%, var(--color-surface-raised), transparent 55%), var(--color-surface-default); color: var(--color-content-primary); font-family: var(--font-family-primary); padding: clamp(1.5rem, 5vw, 5rem) clamp(1.25rem, 5vw, 6rem) 6rem; - --rule: color-mix(in srgb, var(--color-border-default) 100%, transparent); + --rule: var(--color-border-default); } - .masthead { - max-inline-size: 56rem; - margin-block-end: clamp(3rem, 8vw, 6rem); - } - .mast-row { - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; - margin-block-end: 2.5rem; - } - .kicker { - margin: 0; - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - letter-spacing: 0.18em; - text-transform: uppercase; - color: var(--color-content-muted); - } - .theme-toggle { - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - letter-spacing: 0.06em; - color: var(--color-content-secondary); - background: var(--color-surface-raised); - border: 1px solid var(--rule); - border-radius: 999px; - padding: 0.5rem 1rem; - cursor: pointer; - } + .masthead { max-inline-size: 56rem; margin-block-end: clamp(3rem, 8vw, 6rem); } + .mast-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-block-end: 2.5rem; } + .kicker { margin: 0; font-family: var(--font-family-mono); font-size: var(--font-size-xs); letter-spacing: 0.18em; text-transform: uppercase; color: var(--color-content-muted); } + .theme-toggle { font-family: var(--font-family-mono); font-size: var(--font-size-xs); color: var(--color-content-secondary); background: var(--color-surface-raised); border: 1px solid var(--rule); border-radius: 999px; padding: 0.5rem 1rem; cursor: pointer; } .theme-toggle:hover { color: var(--color-content-primary); } - .mast-title { - font-family: var(--font-family-display); - font-size: var(--font-size-xxxl); - font-weight: 600; - line-height: 1; - letter-spacing: -0.03em; - margin: 0 0 1.25rem; - text-wrap: balance; - } + .mast-title { font-family: var(--font-family-display); font-size: var(--font-size-xxxl); font-weight: 600; line-height: 1; letter-spacing: -0.03em; margin: 0 0 1.25rem; text-wrap: balance; } .mast-title em { font-style: italic; color: var(--color-primary-text, var(--color-content-primary)); } - .mast-lede { - max-inline-size: 46ch; - font-size: var(--font-size-lg); - line-height: 1.5; - color: var(--color-content-secondary); - margin: 0; - text-wrap: pretty; - } + .mast-lede { max-inline-size: 48ch; font-size: var(--font-size-lg); line-height: 1.5; color: var(--color-content-secondary); margin: 0; text-wrap: pretty; } .mast-lede i { font-style: italic; } + .mast-lede strong, .sec-note em { color: var(--color-content-primary); font-weight: 600; font-style: normal; } .section { margin-block-end: clamp(3.5rem, 9vw, 7rem); } - .sec-head { - display: flex; - flex-wrap: wrap; - align-items: baseline; - gap: 0.75rem 2rem; - padding-block-end: 1.25rem; - margin-block-end: 2.5rem; - border-block-end: 1px solid var(--rule); - } - .sec-title { - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - font-weight: 500; - letter-spacing: 0.16em; - text-transform: uppercase; - margin: 0; - } - .sec-note { - margin: 0; - max-inline-size: 60ch; - font-size: var(--font-size-sm); - line-height: 1.55; - color: var(--color-content-muted); - } - code { font-family: var(--font-family-mono); font-size: 0.92em; color: var(--color-content-secondary); background: var(--color-surface-muted); padding: 0.1em 0.4em; border-radius: 4px; } - em { font-style: normal; color: var(--color-content-primary); font-weight: 500; } - - /* Planes */ - .planes { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr)); - gap: clamp(1.5rem, 4vw, 3rem); - } - .plane-cell { display: flex; flex-direction: column; align-items: center; gap: 1rem; } - .plane-card { - inline-size: 100%; - block-size: 7rem; - border-radius: var(--radius-lg); - /* hairline so `flush` (no shadow, surface = canvas) still reads as a flat tile */ - border: 1px solid color-mix(in srgb, var(--rule) 70%, transparent); - } - .plane-label { - font-family: var(--font-family-mono); - font-size: var(--font-size-sm); - letter-spacing: 0.04em; - color: var(--color-content-primary); - } - .plane-note { - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - color: var(--color-content-muted); - text-align: center; - } + .sec-head { margin-block-end: 2.5rem; } + .sec-title { font-family: var(--font-family-display); font-size: var(--font-size-xl); font-weight: 600; letter-spacing: -0.01em; margin: 0 0 0.5rem; } + .sec-note { margin: 0; max-inline-size: 62ch; font-size: var(--font-size-sm); line-height: 1.55; color: var(--color-content-muted); } + code { font-family: var(--font-family-mono); font-size: 0.9em; color: var(--color-content-secondary); background: var(--color-surface-muted); padding: 0.1em 0.4em; border-radius: 4px; } - /* Event stage */ - .event-stage { - display: grid; - grid-template-columns: minmax(0, 18rem) 1fr; - gap: clamp(1.5rem, 4vw, 3rem); - align-items: start; - } - @media (max-width: 720px) { .event-stage { grid-template-columns: 1fr; } } - .event-controls { display: flex; flex-direction: column; gap: 1.75rem; } - .ctrl { display: flex; flex-direction: column; gap: 0.7rem; } - .ctrl-label { - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - letter-spacing: 0.08em; - text-transform: uppercase; - color: var(--color-content-muted); - } - .chips { display: flex; flex-wrap: wrap; gap: 0.4rem; } - .chip { - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - color: var(--color-content-secondary); + /* 1 · Reacciona (hover lift) */ + .lift-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); gap: 1.5rem; } + .lift-card { background: var(--color-surface-raised); border: 1px solid var(--rule); - border-radius: 7px; - padding: 0.35rem 0.7rem; - cursor: pointer; + border-radius: var(--radius-lg); + padding: 1.5rem; + display: flex; + flex-direction: column; + gap: 0.5rem; + cursor: default; + transition: box-shadow 240ms var(--ease-out, cubic-bezier(0.2, 0, 0, 1)), translate 240ms var(--ease-out, cubic-bezier(0.2, 0, 0, 1)), border-color 240ms; } - .chip[data-on='true'] { - color: var(--color-primary-on-solid, #fff); - background: var(--color-primary-solid); - border-color: var(--color-primary-solid); + .lift-card:hover { + box-shadow: var(--depth-overlay-shadow); + translate: 0 -6px; + border-color: color-mix(in srgb, var(--color-primary-solid) 40%, var(--rule)); } - .fire-row { display: flex; flex-direction: column; gap: 0.6rem; } - .fire-btn { - font-family: var(--font-family-mono); - font-size: var(--font-size-sm); - color: var(--color-content-primary); - background: var(--color-surface-raised); + .lift-tag { font-family: var(--font-family-mono); font-size: var(--font-size-xs); letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-content-muted); } + .lift-tag[data-c='fulfill'] { color: var(--color-fulfill-text, var(--color-content-secondary)); } + .lift-tag[data-c='primary'] { color: var(--color-primary-text, var(--color-content-secondary)); } + .lift-tag[data-c='risk'] { color: var(--color-risk-text, var(--color-content-secondary)); } + .lift-value { font-family: var(--font-family-display); font-size: var(--font-size-xxl); line-height: 1; letter-spacing: -0.02em; color: var(--color-content-primary); } + .lift-delta { font-size: var(--font-size-xs); color: var(--color-content-muted); } + @media (prefers-reduced-motion: reduce) { .lift-card { transition: box-shadow 240ms; } .lift-card:hover { translate: none; } } + + /* 2 · Asciende (the stage + rising dialog + scrim) */ + .stage { + position: relative; + overflow: hidden; + border-radius: var(--radius-lg); border: 1px solid var(--rule); - border-radius: var(--radius-md); - padding: 0.7rem 1rem; + background: var(--color-surface-default); + min-block-size: 22rem; + padding: clamp(1.25rem, 3vw, 2rem); + } + .stage-app { transition: filter 280ms var(--ease-out, ease), opacity 280ms; max-inline-size: 30rem; } + .stage-app.dimmed { filter: saturate(0.7); opacity: 0.5; } + .app-bar { display: flex; align-items: center; gap: 0.4rem; padding-block-end: 1rem; margin-block-end: 1rem; border-block-end: 1px solid var(--rule); } + .app-dot { inline-size: 0.6rem; block-size: 0.6rem; border-radius: 50%; background: var(--color-surface-muted); } + .app-title { margin-inline-start: 0.5rem; font-family: var(--font-family-mono); font-size: var(--font-size-xs); color: var(--color-content-muted); } + .app-row { display: flex; align-items: center; gap: 0.75rem; padding-block: 0.6rem; font-size: var(--font-size-sm); color: var(--color-content-secondary); border-block-end: 1px solid color-mix(in srgb, var(--rule) 50%, transparent); } + .app-check { inline-size: 1.05rem; block-size: 1.05rem; border-radius: 5px; border: 1.5px solid var(--rule); flex: none; } + .app-check[data-on='true'] { background: var(--color-primary-solid); border-color: var(--color-primary-solid); } + + .scrim { + position: absolute; + inset: 0; + border: 0; + padding: 0; + background: color-mix(in srgb, var(--color-neutral-contrast, #000) 55%, transparent); cursor: pointer; - text-align: left; - transition: border-color 140ms; + animation: depth-scrim-in 240ms var(--ease-out, ease) both; } - .fire-btn small { color: var(--color-content-muted); } - .fire-btn:hover { border-color: var(--color-primary-solid); } + @keyframes depth-scrim-in { from { opacity: 0; } to { opacity: 1; } } - .event-arena { - display: grid; - place-items: center; - min-block-size: 18rem; - border-radius: var(--radius-lg); - background: - repeating-linear-gradient(45deg, transparent 0 13px, color-mix(in srgb, var(--rule) 45%, transparent) 13px 14px), - var(--color-surface-default); + .risen { + position: absolute; + inset-block-start: 50%; + inset-inline-start: 50%; + translate: -50% -50%; + inline-size: min(24rem, calc(100% - 3rem)); + background: var(--depth-modal-surface, var(--color-surface-overlay)); border: 1px solid var(--rule); - } - .event-target { - inline-size: 11rem; - block-size: 7.5rem; - border-radius: var(--radius-lg); + border-radius: var(--radius-xl); + padding: 1.75rem; display: flex; flex-direction: column; - gap: 0.5rem; - align-items: center; - justify-content: center; - } - .target-glyph { font-size: var(--font-size-xl); color: var(--color-content-secondary); } - .target-text { - font-family: var(--font-family-mono); - font-size: var(--font-size-xs); - letter-spacing: 0.06em; - text-transform: uppercase; - color: var(--color-content-muted); + gap: 0.75rem; } + .risen-title { font-family: var(--font-family-display); font-size: var(--font-size-xl); margin: 0; color: var(--color-content-primary); } + .risen-body { margin: 0; font-size: var(--font-size-sm); line-height: 1.55; color: var(--color-content-secondary); } + .risen-actions { display: flex; gap: 0.6rem; margin-block-start: 0.75rem; } + .btn { font-family: var(--font-family-primary); font-size: var(--font-size-sm); border-radius: var(--radius-md); padding: 0.55rem 1.1rem; cursor: pointer; border: 1px solid transparent; } + .btn-primary { background: var(--color-primary-solid); color: var(--color-primary-on-solid, #fff); } + .btn-ghost { background: transparent; color: var(--color-content-secondary); border-color: var(--rule); } - .footnote { - max-inline-size: 60rem; - padding-block-start: 2rem; - border-block-start: 1px solid var(--rule); - } - .footnote p { - margin: 0; + .stage-trigger { + position: absolute; + inset-block-end: 1.25rem; + inset-inline-end: 1.25rem; + font-family: var(--font-family-mono); font-size: var(--font-size-sm); - line-height: 1.6; - color: var(--color-content-muted); - text-wrap: pretty; + color: var(--color-primary-on-solid, #fff); + background: var(--color-primary-solid); + border: 0; + border-radius: var(--radius-md); + padding: 0.65rem 1.1rem; + cursor: pointer; + z-index: 1; + box-shadow: var(--depth-raised-shadow); } - .footnote i { font-style: italic; } + + /* 3 · Cada plano, un rol */ + .roles { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr)); gap: clamp(1.25rem, 3vw, 2.5rem); } + .role { margin: 0; display: flex; flex-direction: column; gap: 1rem; } + .role-stage { min-block-size: 8rem; display: grid; place-items: center; padding: 1rem; border-radius: var(--radius-lg); background: var(--color-surface-default); border: 1px solid color-mix(in srgb, var(--rule) 60%, transparent); } + .role figcaption { font-family: var(--font-family-mono); font-size: var(--font-size-xs); color: var(--color-content-muted); } + .role figcaption b { color: var(--color-content-primary); font-weight: 600; } + + .chips { display: flex; flex-wrap: wrap; gap: 0.5rem; justify-content: center; } + .chip { font-family: var(--font-family-mono); font-size: var(--font-size-xs); padding: 0.3rem 0.7rem; border-radius: 999px; background: var(--color-surface-muted); color: var(--color-content-secondary); border: 1px solid color-mix(in srgb, var(--rule) 60%, transparent); } + + .mini-card { display: flex; align-items: center; gap: 0.75rem; padding: 0.9rem 1.1rem; border-radius: var(--radius-md); background: var(--color-surface-raised); } + .mini-avatar { inline-size: 2rem; block-size: 2rem; border-radius: 50%; display: grid; place-items: center; background: var(--color-primary-solid); color: var(--color-primary-on-solid, #fff); font-size: var(--font-size-sm); font-weight: 600; } + .mini-name { display: block; font-size: var(--font-size-sm); font-weight: 600; color: var(--color-content-primary); } + .mini-sub { display: block; font-size: var(--font-size-xs); color: var(--color-content-muted); } + + .mini-menu { inline-size: 9rem; padding: 0.4rem; border-radius: var(--radius-md); background: var(--color-surface-overlay); display: flex; flex-direction: column; } + .menu-item { padding: 0.45rem 0.65rem; border-radius: var(--radius-sm); font-size: var(--font-size-sm); color: var(--color-content-secondary); } + .menu-item[data-on] { background: var(--color-primary-solid); color: var(--color-primary-on-solid, #fff); } + + .mini-dialog { inline-size: 11rem; padding: 1rem; border-radius: var(--radius-md); background: var(--color-surface-overlay); display: flex; flex-direction: column; gap: 0.35rem; } + .mini-btn { margin-block-start: 0.5rem; align-self: flex-start; font-size: var(--font-size-xs); padding: 0.35rem 0.7rem; border-radius: var(--radius-sm); background: var(--color-threat-solid, var(--color-primary-solid)); color: #fff; } + + .mini-field { display: flex; flex-direction: column; gap: 0.4rem; inline-size: 100%; max-inline-size: 11rem; } + .field-label { font-size: var(--font-size-xs); color: var(--color-content-muted); } + .field-input { padding: 0.6rem 0.8rem; border-radius: var(--radius-md); background: var(--color-surface-muted); color: var(--color-content-muted); font-size: var(--font-size-sm); } + + .footnote { max-inline-size: 60rem; padding-block-start: 2rem; border-block-start: 1px solid var(--rule); } + .footnote p { margin: 0; font-size: var(--font-size-sm); line-height: 1.6; color: var(--color-content-muted); text-wrap: pretty; }