You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/src/uix/eidos/components/toast/toast.css

335 lines
12 KiB

/**
* Eidos — Toast component recipe.
*
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* Translated from `air/components/toast/toast.css` with substantive
* remapping: air's part naming and intent vocabulary differ from the
* Toast morfo. Air's token model still maps to the same conceptual parts, so
* we keep the values and rebind the selectors.
*
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* Selector remap:
* air `[data-toast-toaster]` → eidos `[data-toast-viewport]`
* air `[data-toast]` (the card) → eidos `[data-toast-item]`
* air `[data-toast-message]` → DROPPED (soma has Title + Description
* directly; no separate "message" part)
* air `.air-toast-status` → DROPPED (no status icon part)
* air `.air-toast-main` → DROPPED (no content wrapper part)
*
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* Intent vocabulary remap (air `data-type` ↔ morfo `data-intent`):
* air `error` → eidos `threat`
* air `warning` → eidos `risk`
* air `success` → eidos `fulfill`
* air `info` → eidos `neutral`
* no air equiv → eidos `affirm` (added below as success-tinted)
*
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* `data-position` on viewport is a-la-carte: the morfo doesn't declare
* it, but a consumer can add it to enable air's positioning rules.
*/
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
/* ── Viewport ─────────────────────────────────────────────────────────── */
[data-toast-viewport] {
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
position: fixed;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
z-index: var(--toast-toaster-z);
display: flex;
flex-direction: column;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
gap: var(--toast-toaster-gap);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
inline-size: min(
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
calc(100vw - (var(--toast-toaster-inset) * 2)),
var(--toast-toaster-width)
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
);
pointer-events: none;
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-viewport][data-position='top-left'] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
top: var(--toast-toaster-inset);
left: var(--toast-toaster-inset);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-viewport][data-position='top-center'] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
top: var(--toast-toaster-inset);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
left: 50%;
transform: translateX(-50%);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-viewport][data-position='top-right'] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
top: var(--toast-toaster-inset);
right: var(--toast-toaster-inset);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-viewport][data-position='bottom-left'] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
bottom: var(--toast-toaster-inset);
left: var(--toast-toaster-inset);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
[data-toast-viewport][data-position='bottom-center'] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
bottom: var(--toast-toaster-inset);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
left: 50%;
transform: translateX(-50%);
}
[data-toast-viewport][data-position='bottom-right'] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
right: var(--toast-toaster-inset);
bottom: var(--toast-toaster-inset);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
/* ── Item (the card itself) ──────────────────────────────────────────── */
[data-toast-item] {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-surface: var(--toast-default-surface);
--_toast-border: var(--toast-default-border);
--_toast-accent: var(--toast-default-accent);
--_toast-status-bg: var(--toast-default-status-bg);
--_toast-status-color: var(--toast-default-status-color);
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-action-color: var(--toast-default-action-color);
--_toast-action-hover-bg: var(--toast-default-action-hover-bg);
inline-size: min(100%, var(--toast-provider-max-width));
min-inline-size: min(100%, var(--toast-provider-min-width));
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
align-items: start;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
gap: var(--toast-provider-gap);
padding: var(--toast-provider-py) var(--toast-provider-px);
border: var(--toast-provider-border-width) solid var(--_toast-border);
border-inline-start: var(--toast-accent-width) solid var(--_toast-accent);
border-radius: var(--toast-provider-radius);
background: var(--_toast-surface);
box-shadow: var(--toast-provider-shadow);
color: var(--toast-message-color);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
pointer-events: auto;
opacity: 1;
transform: translateY(0) scale(1);
transition:
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
opacity var(--toast-transition-duration) var(--toast-transition-ease),
transform var(--toast-transition-duration) var(--toast-transition-ease);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
/* Auto-collapse the 3-column grid based on which side parts are present.
* Status icon on the leading side, Close on the trailing side; if either
* is missing, the main column expands. */
[data-toast-item]:not(:has([data-toast-status])):not(:has([data-toast-close])) {
grid-template-columns: minmax(0, 1fr);
}
[data-toast-item]:not(:has([data-toast-status])):has([data-toast-close]) {
grid-template-columns: minmax(0, 1fr) auto;
}
[data-toast-item]:has([data-toast-status]):not(:has([data-toast-close])) {
grid-template-columns: auto minmax(0, 1fr);
}
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
/* Toast intent recipes — each maps to its doctrinal palette directly. */
[data-toast-item][data-intent='affirm'] {
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-surface: var(--toast-affirm-surface);
--_toast-border: var(--toast-affirm-border);
--_toast-accent: var(--toast-affirm-accent);
--_toast-status-bg: var(--toast-affirm-status-bg);
--_toast-status-color: var(--toast-affirm-status-color);
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-action-color: var(--toast-affirm-action-color);
--_toast-action-hover-bg: var(--toast-affirm-action-hover-bg);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-item][data-intent='fulfill'] {
--_toast-surface: var(--toast-fulfill-surface);
--_toast-border: var(--toast-fulfill-border);
--_toast-accent: var(--toast-fulfill-accent);
--_toast-status-bg: var(--toast-fulfill-status-bg);
--_toast-status-color: var(--toast-fulfill-status-color);
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-action-color: var(--toast-fulfill-action-color);
--_toast-action-hover-bg: var(--toast-fulfill-action-hover-bg);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-item][data-intent='risk'] {
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-surface: var(--toast-risk-surface);
--_toast-border: var(--toast-risk-border);
--_toast-accent: var(--toast-risk-accent);
--_toast-status-bg: var(--toast-risk-status-bg);
--_toast-status-color: var(--toast-risk-status-color);
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-action-color: var(--toast-risk-action-color);
--_toast-action-hover-bg: var(--toast-risk-action-hover-bg);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-item][data-intent='threat'] {
--_toast-surface: var(--toast-threat-surface);
--_toast-border: var(--toast-threat-border);
--_toast-accent: var(--toast-threat-accent);
--_toast-status-bg: var(--toast-threat-status-bg);
--_toast-status-color: var(--toast-threat-status-color);
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-action-color: var(--toast-threat-action-color);
--_toast-action-hover-bg: var(--toast-threat-action-hover-bg);
}
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-item][data-intent='loss'] {
--_toast-surface: var(--toast-loss-surface);
--_toast-border: var(--toast-loss-border);
--_toast-accent: var(--toast-loss-accent);
--_toast-status-bg: var(--toast-loss-status-bg);
--_toast-status-color: var(--toast-loss-status-color);
sema/morfo/eidos: align with GUIA_IMPLEMENTACION_SEMAUIX (canonical guide) The new doctrinal guide at src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md supersedes src/docs/sema-implementation-guide.md and locks the canonical vocabulary, event shape and color tokens. This commit aligns the codebase to that canon in three concrete moves. Phase 1 — sema/verbs.ts vocabulary: - Restructured from flat array to family-keyed Record per the guide. - Moved select / toggle / acknowledge → commit (these fix state, not contact). Removed edit from handle (it's shift.enter-mode now). - Added new verbs per the canon: contact (tap, focus, trigger, release), commit (complete, restore, expire, set, remove, reorder), signal (remind), handle (rotate, scroll, reorder), shift (route, step, return, context), sustain (start, loading, waiting, syncing, processing, streaming, pending, retrying, end). - validateEventName now recognises both naming shapes: {verb}-{variant} (head=verb) and {family}-{verb} (head=family). - New helper familyForVerb. Tests rewritten — 16/16 green. Phase 2 — morfo event shape: - target moved from event-level into event.semantic. Adds optional semantic.verb (advisory, validated against SEMA_VERBS[family]) and optional semantic.sequence ('pre' | 'coincident' | 'post'). - compile.ts and schema.ts updated. The 22 events across toggle, toast, popover, drawer, dialog refactored to the new shape with explicit verb + sequence. - Polymorphic capability (allowedFamilies + defaultSemantic) and a11ySemantic deferred — no current consumer needs them; will land when the first concrete usage appears. Phase 5 — color tokens (doctrinal 8): - themes/base/light.css and dark.css rewritten to expose primary, secondary, neutral, affirm, fulfill, risk, threat, loss. Renames success→fulfill, warning→risk, danger→threat (same hex). New primitives for secondary (slate-blue), affirm (teal-mint, low activation), loss (deep violet-grave, posterior). info palette deleted entirely — per guide, "info no es intent, es signal.announce + neutral". - _static.css legacy compatibility aliases (--color-bg, --color-success, --color-error, --color-accent, ...) deleted. Clean cut, no transition. Consumers reference doctrinal palettes directly. - 29 consumers (token files + recipes) migrated: - All --*-color-info-* declarations dropped. - Component palettes extended with secondary / affirm / loss. - switch + checkbox recipes updated to use [data-color='affirm'| 'risk'|'threat'|'secondary'] (was 'success'|'warning'|'danger'| 'info'). - toast tokens + recipe renamed to affirm/fulfill/risk/threat/loss (was success/error/warning/info). - meter, progress, mark, badge, button tokens renamed. - Contracts (contracts/contract.css + contracts/components/*) updated. - focus-ring-color-error in themes now points to --color-risk-border (validation errors are signal.warn + risk per doctrina, not threat). Phase 4 (partial): - src/docs/sema-implementation-guide.md deleted (superseded by the canonical guide). Tests: 217/217 green across uix. npm run check holds at the 39-error baseline (all pre-existing in unrelated test files; none introduced). Pending in follow-up commits: - Update active_architecture.md, sema/README.md, morfo/README.md, CLAUDE.md to reflect the canon. - Switch component migration to the eidos wrapper pattern. - Persistence field (untilAction / untilFix / stateBound) and holds-by-intent — defer until the first signal.warn / signal.alert consumer appears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
--_toast-action-color: var(--toast-loss-action-color);
--_toast-action-hover-bg: var(--toast-loss-action-hover-bg);
}
/* neutral default — uses neutral palette (no override needed unless
* the recipe wants a specific neutral toast styling). */
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-item][data-state='closed'] {
opacity: 0;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
transform: translateY(var(--toast-closed-offset)) scale(var(--toast-closed-scale));
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
pointer-events: none;
}
/* Loading state — subtle pulse on the accent stripe so the user reads
* "still working" without the toast competing for attention. */
[data-toast-item][data-loading] {
border-inline-start-color: var(--_toast-status-color);
animation: toast-loading-pulse 1.4s ease-in-out infinite;
}
@keyframes toast-loading-pulse {
0%, 100% { border-inline-start-color: var(--_toast-status-color); }
50% { border-inline-start-color: var(--_toast-accent); }
}
/* Swipe states — track the cursor / touch as the user pulls to dismiss.
* The Item's transform is updated by soma; the recipe just darkens the
* accent so the user gets stronger feedback as they near the threshold. */
[data-toast-item][data-swipe='start'],
[data-toast-item][data-swipe='move'] {
transition: none;
user-select: none;
cursor: grabbing;
}
[data-toast-item][data-swipe='cancel'] {
transition:
transform calc(var(--toast-transition-duration) * 1.5) var(--toast-transition-ease),
opacity var(--toast-transition-duration) var(--toast-transition-ease);
transform: translateY(0) scale(1);
}
[data-toast-item][data-swipe='end'] {
pointer-events: none;
}
/* Status icon disc — air's `air-toast-status` continuation. The wrapper
* reads `data-intent` from the Item and tints the disc via the cascade
* variables already set on Item. */
[data-toast-status] {
display: inline-flex;
align-items: center;
justify-content: center;
inline-size: var(--toast-status-size);
block-size: var(--toast-status-size);
border-radius: var(--toast-status-radius);
background: var(--_toast-status-bg);
color: var(--_toast-status-color);
flex: 0 0 auto;
}
/* Loading spinner — when the Item carries `data-loading`, the status
* disc spins. Uses an inline border trick so it doesn't depend on an
* extra child element. */
[data-toast-item][data-loading] [data-toast-status] {
background: transparent;
border: 2px solid color-mix(in srgb, var(--_toast-status-color) 30%, transparent);
border-block-start-color: var(--_toast-status-color);
animation: toast-spinner 0.9s linear infinite;
}
@keyframes toast-spinner {
to { transform: rotate(360deg); }
}
/* Title + description should NOT be column 1 when there's no status —
* but the auto-collapse rule above already collapses to a single column,
* so the main slot just fills. We add a wrapper rule in case a consumer
* uses an explicit `<div data-toast-main>` to group title+description. */
[data-toast-main] {
display: grid;
gap: var(--toast-provider-stack-gap);
min-inline-size: 0;
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
/* ── Title / Description / Action / Close ──────────────────────────── */
[data-toast-title] {
margin: 0;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
font-family: var(--toast-title-font-family);
font-size: var(--toast-title-font-size);
font-weight: var(--toast-title-font-weight);
line-height: var(--toast-title-line-height);
color: var(--toast-title-color);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-description] {
margin: 0;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
font-family: var(--toast-description-font-family);
font-size: var(--toast-description-font-size);
line-height: var(--toast-description-line-height);
color: var(--toast-description-color);
}
[data-toast-action] {
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
justify-self: start;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
margin-top: var(--toast-action-margin-top);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
display: inline-flex;
align-items: center;
justify-content: center;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
gap: var(--toast-action-gap);
padding: var(--toast-action-py) var(--toast-action-px);
border: var(--toast-action-border-width) solid currentColor;
border-radius: var(--toast-action-radius);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
background: transparent;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
color: var(--_toast-action-color);
font-family: var(--toast-action-font-family);
font-size: var(--toast-action-font-size);
font-weight: var(--toast-action-font-weight);
line-height: var(--toast-action-line-height);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
cursor: pointer;
transition:
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
background var(--toast-transition-duration) var(--toast-transition-ease),
color var(--toast-transition-duration) var(--toast-transition-ease),
box-shadow var(--toast-transition-duration) var(--toast-transition-ease);
}
[data-toast-action]:hover {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
background: var(--_toast-action-hover-bg);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-action]:focus-visible {
outline: none;
box-shadow:
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
0 0 0 var(--toast-action-focus-ring-offset) var(--_toast-surface),
0 0 0 calc(var(--toast-action-focus-ring-offset) + var(--toast-action-focus-ring-width))
var(--toast-action-focus-ring-color);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-close] {
display: inline-flex;
align-items: center;
justify-content: center;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
inline-size: var(--toast-close-size);
block-size: var(--toast-close-size);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
flex: 0 0 auto;
padding: 0;
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
border: var(--toast-close-border-width) solid var(--toast-close-border);
border-radius: var(--toast-close-radius);
background: var(--toast-close-bg);
color: var(--toast-close-color);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
cursor: pointer;
transition:
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
background var(--toast-transition-duration) var(--toast-transition-ease),
border-color var(--toast-transition-duration) var(--toast-transition-ease),
color var(--toast-transition-duration) var(--toast-transition-ease),
box-shadow var(--toast-transition-duration) var(--toast-transition-ease);
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
[data-toast-close]:hover {
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
background: var(--toast-close-hover-bg);
border-color: var(--toast-close-hover-border);
color: var(--toast-close-hover-color);
}
eidos phase 2 batch 2: Switch, Collapsible, Toast translated Switch (151 lines): - mechanical: --air-* → --eidos-*, drop .air-* gates - selectors match morfo as-is ([data-switch], [data-switch-thumb], [data-state='checked'], [data-disabled]) - a-la-carte variants (data-color, data-size) dormant unless consumer adds Collapsible (decorated parts only): - mechanical translation - dropped air's height-keyframes: they referenced var(--terra-collapsible-content-height) (a JS-measured value from the dead terra layer) and soma's Collapsible uses HTML `hidden` (display:none) which kills CSS animations anyway. Left undecorated; needs Presence layer integration in soma to enable real transitions. Toast (substantive remap): - selector remap due to part naming difference between air and morfo: air [data-toast-toaster] → eidos [data-toast-viewport] air [data-toast] (the card) → eidos [data-toast-item] air [data-toast-message] → DROPPED (no equivalent — soma has Title + Description direct, not a separate "message" element) air .air-toast-status → DROPPED (no status icon part) air .air-toast-main → DROPPED (no content wrapper part) - intent vocabulary remap (air data-type ↔ morfo data-intent): error → threat warning → risk success → fulfill (and affirm — same palette) info → neutral - data-position on viewport stays a-la-carte (not in morfo) Verification: smoke 68/68, morfo-check 66/66, focus rings + dialog entrance/exit working per playwright. Note: [data-dialog-trigger] has no explicit rule (air relied on .air-button recipe). The trigger renders with browser defaults + archetype interactive cursor. To be addressed in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
[data-toast-close]:focus-visible {
outline: none;
box-shadow:
eidos: pilot wrapper pattern + doctrinal API conventions Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper + types + index + README) replacing the flat CSS-only form. Pattern is documented in eidos/components/README.md and the toggle README. Shared types live in eidos/lib/types.ts. First export is `Size` (8 values xxs..xxl + full); components narrow with `Extract<Size, ...>` per the per-component-subset doctrine. No `Eidos` prefix on types — module path already conveys the layer. API doctrine: - soma stays compound (Toggle.Provider) for symmetry with multi-part - eidos exports both default + Provider so single-part components accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>` (compound-style consumers) SoundChannel eager-init fixes the autoplay race: AudioContext is created + resumed synchronously on the first user gesture (capture-phase listener registered in the constructor), avoiding the previous race where the first emit() scheduled the resume in a microtask outside the gesture window. Demo page (web/routes/toggle/+page.svelte) restructured so the live preview renders ALWAYS above the tablist — Sema-tab Play buttons can fire on the real toggle. Motion preview amplifies scale ×8 visually only; doctrinal values stay in the <dl>. Conventions 7-13 added to src/docs/sema-implementation-guide.md covering: directory structure, wrapper composition, no Eidos prefix, soma compound vs eidos flat, iconOnly sr-only body, sound eager-init, docs-preview amplification. CLAUDE.md gets a session hand-off block listing where things stand and next concrete steps (migrate switch/collapsible/dialog/drawer/popover/ toast/avatar; wire topbar sound mute to masterGain; rename theme tokens to drop the success/warning/danger fallback aliases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
0 0 0 var(--toast-close-focus-ring-offset) var(--_toast-surface),
0 0 0 calc(var(--toast-close-focus-ring-offset) + var(--toast-close-focus-ring-width))
var(--toast-close-focus-ring-color);
}

Powered by TurnKey Linux.