@echothink-ui/style 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/index.cjs +216 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +1015 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.js +163 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
- package/src/base-roles.css +175 -0
- package/src/carbon-bridge.css +109 -0
- package/src/density.css +32 -0
- package/src/index.tsx +207 -0
- package/src/palettes.css +51 -0
- package/src/presets.css +617 -0
- package/src/primitives.css +82 -0
- package/src/styles.css +22 -0
- package/src/type-scale.css +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/palettes.css","../src/primitives.css","../src/base-roles.css","../src/density.css","../src/type-scale.css","../src/presets.css","../src/carbon-bridge.css"],"sourcesContent":["/* ========================================================================= *\n * Layer 1 — Palette tokens.\n *\n * Raw color assets. No component, preset, or mode meaning. Presets map these\n * into the semantic + role contract. Applied at :root so they always resolve,\n * and under .eth-palette-<name> so multiple palettes can coexist on one page.\n * ========================================================================= */\n\n:root,\n.eth-palette-default {\n --eth-palette-neutral-0: #ffffff;\n --eth-palette-neutral-25: #fbfcfe;\n --eth-palette-neutral-50: #f6f7f9;\n --eth-palette-neutral-100: #edf2f8;\n --eth-palette-neutral-200: #dbe1ea;\n --eth-palette-neutral-300: #c2ccd9;\n --eth-palette-neutral-400: #9aa7b8;\n --eth-palette-neutral-500: #6b7889;\n --eth-palette-neutral-600: #5c6a7d;\n --eth-palette-neutral-700: #526176;\n --eth-palette-neutral-800: #33414f;\n --eth-palette-neutral-900: #122033;\n --eth-palette-neutral-950: #0b1623;\n\n --eth-palette-blue-50: #edf6ff;\n --eth-palette-blue-100: #dff0ff;\n --eth-palette-blue-300: #7db2ff;\n --eth-palette-blue-400: #4589ff;\n --eth-palette-blue-500: #1768ff;\n --eth-palette-blue-700: #0048d9;\n\n --eth-palette-indigo-50: #eef0ff;\n --eth-palette-indigo-300: #a5acff;\n --eth-palette-indigo-500: #4f5bef;\n --eth-palette-indigo-700: #3a3fd0;\n\n --eth-palette-red-50: #fff1f1;\n --eth-palette-red-300: #ff9a9f;\n --eth-palette-red-500: #da1e28;\n --eth-palette-red-700: #a2191f;\n\n --eth-palette-green-50: #defbe6;\n --eth-palette-green-300: #6fdc8c;\n --eth-palette-green-500: #24a148;\n --eth-palette-green-700: #198038;\n\n --eth-palette-yellow-50: #fcf4d6;\n --eth-palette-yellow-300: #f5d76e;\n --eth-palette-yellow-500: #f1c21b;\n --eth-palette-yellow-700: #8a6d00;\n}\n","/* ========================================================================= *\n * Layer 2 — Primitive scales.\n *\n * Non-color structural values: radius, spacing, border width, blur, motion,\n * z-index, and elevation geometry. Global and preset-independent — presets\n * choose WHICH step they use, they do not redefine the steps. Additive: these\n * do not replace the existing --eth-radius-* / --eth-space-* role tokens in\n * @echothink-ui/tokens, they sit alongside them.\n * ========================================================================= */\n\n:root {\n /* Radius scale */\n --eth-radius-0: 0;\n --eth-radius-1: 2px;\n --eth-radius-2: 4px;\n --eth-radius-3: 6px;\n --eth-radius-4: 8px;\n --eth-radius-5: 10px;\n --eth-radius-6: 12px;\n --eth-radius-7: 16px;\n --eth-radius-round: 999px;\n\n /* Spacing scale (4px base) */\n --eth-space-0: 0;\n --eth-space-1: 2px;\n --eth-space-2: 4px;\n --eth-space-3: 6px;\n --eth-space-4: 8px;\n --eth-space-5: 12px;\n --eth-space-6: 16px;\n --eth-space-7: 20px;\n --eth-space-8: 24px;\n --eth-space-9: 32px;\n --eth-space-10: 40px;\n --eth-space-11: 48px;\n --eth-space-12: 64px;\n\n /* Border width scale */\n --eth-border-width-0: 0;\n --eth-border-width-1: 1px;\n --eth-border-width-2: 2px;\n --eth-border-width-3: 3px;\n\n /* Blur scale */\n --eth-blur-0: 0;\n --eth-blur-1: 4px;\n --eth-blur-2: 8px;\n --eth-blur-3: 16px;\n --eth-blur-4: 24px;\n\n /* Motion */\n --eth-duration-fast: 70ms;\n --eth-duration-base: 110ms;\n --eth-duration-slow: 240ms;\n --eth-easing-standard: cubic-bezier(0.2, 0, 0.38, 0.9);\n --eth-easing-entrance: cubic-bezier(0, 0, 0.38, 0.9);\n --eth-easing-exit: cubic-bezier(0.2, 0, 1, 0.9);\n\n /* Z-index scale */\n --eth-z-base: 0;\n --eth-z-sticky: 100;\n --eth-z-overlay: 1000;\n --eth-z-modal: 1100;\n --eth-z-popover: 1200;\n --eth-z-toast: 1300;\n --eth-z-tooltip: 1400;\n\n /* Elevation geometry — shadow colors are set per preset (light default). */\n --eth-shadow-umbra: rgb(31 41 51 / 10%);\n --eth-shadow-penumbra: rgb(31 41 51 / 6%);\n --eth-elevation-0: none;\n --eth-elevation-1: 0 1px 2px var(--eth-shadow-umbra);\n --eth-elevation-2:\n 0 2px 6px var(--eth-shadow-umbra),\n 0 1px 2px var(--eth-shadow-penumbra);\n --eth-elevation-3:\n 0 8px 24px var(--eth-shadow-umbra),\n 0 2px 6px var(--eth-shadow-penumbra);\n --eth-elevation-4:\n 0 16px 48px var(--eth-shadow-umbra),\n 0 4px 12px var(--eth-shadow-penumbra);\n}\n","/* ========================================================================= *\n * Layer 4 base — Component role-token defaults (Carbon-like).\n *\n * These extend the existing @echothink-ui/tokens contract with the role +\n * state + status + density-sizing tokens it was missing. Defaults below derive\n * from the existing --eth-color-* / --eth-radius-* contract, so an un-presetted\n * page still resolves them to Carbon. Presets override the deltas; components\n * consume these WITH fallbacks to the legacy tokens.\n * ========================================================================= */\n\n:root {\n /* ---- Bridge-safe solid background (Carbon's --cds-background wants a color,\n not a gradient; presets whose page bg is a gradient set this solid). */\n --eth-bridge-bg: var(--eth-color-background);\n\n /* ---- Focus ---- */\n --eth-focus-ring-color: var(--eth-color-focus);\n --eth-focus-ring-width: 2px;\n --eth-focus-ring-offset: 2px;\n --eth-focus-ring: var(--eth-focus-ring-width) solid var(--eth-focus-ring-color);\n\n /* ---- Field (text input, textarea, select trigger) ---- */\n --eth-field-bg: var(--eth-color-layer-01);\n --eth-field-bg-hover: var(--eth-color-layer-hover);\n --eth-field-bg-disabled: var(--eth-color-layer-02);\n --eth-field-text: var(--eth-color-text-primary);\n --eth-field-placeholder: var(--eth-color-text-helper);\n --eth-field-text-disabled: var(--eth-color-text-helper);\n --eth-field-label-text: var(--eth-color-text-secondary);\n --eth-field-helper-text: var(--eth-color-text-helper);\n --eth-field-border: var(--eth-control-border);\n\n /* Bottom-emphasis border (carbon-like fields); falls back to the box border. */\n --eth-field-border-bottom: var(--eth-field-border);\n --eth-field-border-hover: var(--eth-border-width-1) solid var(--eth-color-border-strong);\n --eth-field-border-strong: var(--eth-border-width-1) solid var(--eth-color-border-strong);\n --eth-field-radius: var(--eth-radius-control);\n --eth-field-shadow: none;\n --eth-field-backdrop-filter: none;\n --eth-field-invalid-border: var(--eth-border-width-2) solid var(--eth-color-danger);\n --eth-field-warning-border: var(--eth-border-width-2) solid var(--eth-color-warning);\n\n /* Field border placement. carbon-like uses bottom-only; others full-box. */\n --eth-field-border-style: full;\n\n /* ---- Buttons (per variant, with states) ---- */\n --eth-btn-radius: var(--eth-radius-control);\n --eth-btn-focus-ring: var(--eth-focus-ring);\n --eth-btn-primary-bg: var(--eth-color-interactive-primary);\n --eth-btn-primary-bg-hover: var(--eth-color-interactive-strong);\n --eth-btn-primary-bg-active: var(--eth-color-interactive-strong);\n --eth-btn-primary-text: #ffffff;\n --eth-btn-secondary-bg: var(--eth-color-text-primary);\n --eth-btn-secondary-bg-hover: var(--eth-color-text-secondary);\n --eth-btn-secondary-bg-active: var(--eth-color-text-secondary);\n --eth-btn-secondary-text: #ffffff;\n --eth-btn-tertiary-bg: transparent;\n --eth-btn-tertiary-bg-hover: var(--eth-color-layer-hover);\n --eth-btn-tertiary-text: var(--eth-color-interactive-primary);\n --eth-btn-ghost-bg: transparent;\n --eth-btn-ghost-bg-hover: var(--eth-color-layer-hover);\n --eth-btn-ghost-text: var(--eth-color-interactive-primary);\n --eth-btn-danger-bg: var(--eth-color-danger);\n --eth-btn-danger-bg-hover: #b81922;\n --eth-btn-danger-bg-active: #a2191f;\n --eth-btn-danger-text: #ffffff;\n --eth-btn-success-bg: var(--eth-color-success);\n --eth-btn-success-bg-hover: var(--eth-palette-green-700);\n --eth-btn-success-text: #ffffff;\n --eth-btn-disabled-bg: var(--eth-color-layer-02);\n --eth-btn-disabled-text: var(--eth-color-text-helper);\n --eth-btn-primary-border: 1px solid var(--eth-btn-primary-bg);\n --eth-btn-secondary-border: 1px solid var(--eth-btn-secondary-bg);\n --eth-btn-tertiary-border: var(--eth-border-width-1) solid var(--eth-btn-tertiary-text);\n --eth-btn-ghost-border: 1px solid transparent;\n --eth-btn-danger-border: 1px solid var(--eth-btn-danger-bg);\n --eth-btn-success-border: 1px solid var(--eth-btn-success-bg);\n --eth-btn-disabled-border: 1px solid var(--eth-btn-disabled-bg);\n --eth-btn-shadow: none;\n --eth-btn-backdrop-filter: none;\n\n /* ---- Card ---- */\n --eth-card-bg: var(--eth-color-card);\n --eth-card-radius: var(--eth-radius-card);\n --eth-card-shadow: var(--eth-shadow-card);\n --eth-card-backdrop-filter: var(--eth-backdrop-filter);\n --eth-card-header-bg: transparent;\n --eth-card-footer-bg: transparent;\n --eth-card-divider: var(--eth-divider-width) solid var(--eth-divider-color);\n\n /* ---- Control (segmented controls, chips, triggers) ---- */\n --eth-control-bg: var(--eth-color-control);\n --eth-control-bg-hover: var(--eth-color-control-hover);\n --eth-control-bg-active: var(--eth-color-layer-hover);\n --eth-control-bg-selected: var(--eth-color-layer-selected);\n --eth-control-bg-disabled: var(--eth-color-layer-02);\n --eth-control-text: var(--eth-color-text-primary);\n --eth-control-text-disabled: var(--eth-color-text-helper);\n --eth-control-radius: var(--eth-radius-control);\n --eth-control-focus-ring: var(--eth-focus-ring);\n\n /* ---- Table ---- */\n --eth-table-bg: var(--eth-color-layer-01);\n --eth-table-border: var(--eth-card-border);\n --eth-table-radius: var(--eth-radius-card);\n --eth-table-shadow: var(--eth-shadow-card);\n --eth-table-header-bg: var(--eth-color-layer-02);\n --eth-table-header-text: var(--eth-color-text-secondary);\n --eth-table-row-bg: var(--eth-color-layer-01);\n --eth-table-row-bg-alt: var(--eth-color-layer-01);\n --eth-table-row-hover-bg: var(--eth-color-layer-hover);\n --eth-table-row-selected-bg: var(--eth-color-layer-selected);\n --eth-table-row-selected-hover-bg: var(--eth-color-layer-selected);\n --eth-table-row-selected-accent: var(--eth-color-interactive-primary);\n --eth-table-cell-text: var(--eth-color-text-primary);\n --eth-table-gridline: var(--eth-color-border-subtle);\n --eth-table-gridline-width: var(--eth-border-width-1);\n\n /* Which cell edges draw gridlines: both | horizontal | none */\n --eth-table-gridline-axis: both;\n --eth-table-row-border: var(--eth-table-gridline-width) solid var(--eth-table-gridline);\n --eth-table-column-border: var(--eth-table-gridline-width) solid var(--eth-table-gridline);\n --eth-table-backdrop-filter: none;\n\n /* ---- Divider ---- */\n --eth-divider-color: var(--eth-color-border-subtle);\n --eth-divider-width: var(--eth-border-width-1);\n\n /* ---- Overlay / popover (portaled) ---- */\n --eth-overlay-bg: rgb(22 22 22 / 50%);\n --eth-popover-bg: var(--eth-color-overlay);\n --eth-popover-border: var(--eth-overlay-border);\n --eth-popover-radius: var(--eth-radius-overlay);\n --eth-popover-shadow: var(--eth-shadow-overlay);\n --eth-popover-blur: var(--eth-backdrop-filter-overlay);\n\n /* ---- Status / feedback (subtle: tinted bg + readable fg). Light default. */\n --eth-status-info-bg: var(--eth-palette-blue-50);\n --eth-status-info-text: var(--eth-palette-blue-700);\n --eth-status-info-border: var(--eth-palette-blue-300);\n --eth-status-info-icon: var(--eth-palette-blue-500);\n --eth-status-success-bg: var(--eth-palette-green-50);\n --eth-status-success-text: var(--eth-palette-green-700);\n --eth-status-success-border: var(--eth-palette-green-300);\n --eth-status-success-icon: var(--eth-palette-green-500);\n --eth-status-warning-bg: var(--eth-palette-yellow-50);\n --eth-status-warning-text: var(--eth-palette-yellow-700);\n --eth-status-warning-border: var(--eth-palette-yellow-300);\n --eth-status-warning-icon: var(--eth-palette-yellow-500);\n --eth-status-danger-bg: var(--eth-palette-red-50);\n --eth-status-danger-text: var(--eth-palette-red-700);\n --eth-status-danger-border: var(--eth-palette-red-300);\n --eth-status-danger-icon: var(--eth-palette-red-500);\n --eth-status-neutral-bg: var(--eth-palette-neutral-100);\n --eth-status-neutral-text: var(--eth-palette-neutral-700);\n --eth-status-neutral-border: var(--eth-palette-neutral-200);\n --eth-status-neutral-icon: var(--eth-palette-neutral-500);\n\n /* ---- Typography choices (families/weights; sizes live in type-scale.css) */\n --eth-font-family-sans: \"IBM Plex Sans\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --eth-font-family-mono: \"IBM Plex Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n --eth-font-weight-title: 600;\n --eth-font-weight-body: 400;\n\n /* ---- Density sizing (standard defaults; variants in density.css) ---- */\n --eth-control-height: 40px;\n --eth-control-padding-inline: 1rem;\n --eth-control-padding-block: 0.5rem;\n --eth-row-height: 48px;\n --eth-cell-padding-inline: var(--eth-space-6);\n --eth-cell-padding-block: var(--eth-space-4);\n --eth-field-gap: var(--eth-space-5);\n --eth-section-gap: var(--eth-space-9);\n --eth-card-padding: var(--eth-space-8);\n}\n","/* ========================================================================= *\n * Layer 5 — Density sizing axis.\n *\n * Orthogonal to preset. Standard defaults live in base-roles.css :root (so a\n * page with no [data-eth-density] attribute is \"standard\"). These blocks add\n * the compact and comfortable steps. Composes with the existing spacing-scale\n * density overrides in @echothink-ui/tokens.\n * ========================================================================= */\n\n[data-eth-density=\"compact\"] {\n --eth-control-height: 32px;\n --eth-control-padding-inline: 0.75rem;\n --eth-control-padding-block: 0.25rem;\n --eth-row-height: 32px;\n --eth-cell-padding-inline: var(--eth-space-5);\n --eth-cell-padding-block: var(--eth-space-2);\n --eth-field-gap: var(--eth-space-3);\n --eth-section-gap: var(--eth-space-6);\n --eth-card-padding: var(--eth-space-6);\n}\n\n[data-eth-density=\"comfortable\"] {\n --eth-control-height: 48px;\n --eth-control-padding-inline: 1.25rem;\n --eth-control-padding-block: 0.75rem;\n --eth-row-height: 56px;\n --eth-cell-padding-inline: var(--eth-space-7);\n --eth-cell-padding-block: var(--eth-space-5);\n --eth-field-gap: var(--eth-space-6);\n --eth-section-gap: var(--eth-space-10);\n --eth-card-padding: var(--eth-space-9);\n}\n","/* ========================================================================= *\n * Layer 5 — Type scale axis.\n *\n * Explicit size + line-height tokens. Orthogonal to preset; selected via the\n * existing [data-eth-type] attribute that StyleScope emits (compact | standard\n * | large). Standard is the :root default. The legacy --eth-text-scale\n * multiplier in @echothink-ui/tokens still works for un-migrated components.\n * ========================================================================= */\n\n:root {\n --eth-font-size-caption: 0.75rem; /* 12 */\n --eth-font-size-body-sm: 0.8125rem; /* 13 */\n --eth-font-size-body: 0.875rem; /* 14 */\n --eth-font-size-body-lg: 1rem; /* 16 */\n --eth-font-size-heading-sm: 1rem; /* 16 */\n --eth-font-size-heading: 1.25rem; /* 20 */\n --eth-font-size-heading-lg: 1.75rem;/* 28 */\n --eth-font-size-display: 2.5rem; /* 40 */\n --eth-line-height-tight: 1.25;\n --eth-line-height-body: 1.5;\n --eth-letter-spacing-tight: -0.01em;\n --eth-letter-spacing-normal: 0;\n}\n\n[data-eth-type=\"compact\"] {\n --eth-font-size-caption: 0.6875rem; /* 11 */\n --eth-font-size-body-sm: 0.75rem; /* 12 */\n --eth-font-size-body: 0.8125rem; /* 13 */\n --eth-font-size-body-lg: 0.9375rem; /* 15 */\n --eth-font-size-heading-sm: 0.9375rem;\n --eth-font-size-heading: 1.125rem; /* 18 */\n --eth-font-size-heading-lg: 1.5rem; /* 24 */\n --eth-font-size-display: 2rem; /* 32 */\n --eth-line-height-body: 1.4;\n}\n\n[data-eth-type=\"large\"] {\n --eth-font-size-caption: 0.8125rem; /* 13 */\n --eth-font-size-body-sm: 0.875rem; /* 14 */\n --eth-font-size-body: 1rem; /* 16 */\n --eth-font-size-body-lg: 1.125rem; /* 18 */\n --eth-font-size-heading-sm: 1.125rem;\n --eth-font-size-heading: 1.375rem; /* 22 */\n --eth-font-size-heading-lg: 2rem; /* 32 */\n --eth-font-size-display: 3rem; /* 48 */\n --eth-line-height-body: 1.6;\n}\n","/* ========================================================================= *\n * Layer 3 — Preset tokens.\n *\n * Each preset maps palette + primitives into the semantic contract AND the\n * role/state/status tokens. Existing --eth-color-* / radius / shadow / effect\n * tokens are preserved verbatim so the ~340 un-migrated components do not\n * regress; the new role/state/status/bridge-safe tokens are added as deltas.\n * The Carbon bridge (carbon-bridge.css) reads these to drive --cds-*.\n * ========================================================================= */\n\n:root,\n.eth-style-carbon-like {\n --eth-color-background: var(--cds-white, #ffffff);\n --eth-color-text-primary: var(--cds-gray-100, #161616);\n --eth-color-text-secondary: var(--cds-gray-70, #525252);\n --eth-color-text-helper: var(--cds-gray-60, #6f6f6f);\n --eth-color-border-subtle: var(--cds-gray-20, #e0e0e0);\n --eth-color-border-strong: var(--cds-gray-50, #8d8d8d);\n --eth-color-interactive-primary: var(--cds-blue-60, #0f62fe);\n --eth-color-interactive-strong: var(--cds-blue-70, #0043ce);\n --eth-color-link: var(--cds-blue-60, #0f62fe);\n --eth-color-layer-01: var(--cds-gray-10, #f4f4f4);\n --eth-color-layer-02: var(--cds-white, #ffffff);\n --eth-color-layer-hover: #e8e8e8;\n --eth-color-layer-selected: var(--cds-gray-20, #e0e0e0);\n --eth-color-card: var(--cds-gray-10, #f4f4f4);\n --eth-color-control: transparent;\n --eth-color-control-hover: var(--eth-color-layer-hover);\n --eth-color-overlay: var(--cds-white, #ffffff);\n --eth-color-focus: var(--cds-blue-60, #0f62fe);\n --eth-border: 1px solid var(--eth-color-border-subtle);\n --eth-card-border: 1px solid var(--eth-color-border-subtle);\n --eth-control-border: 1px solid var(--eth-color-border-subtle);\n --eth-overlay-border: 1px solid var(--eth-color-border-subtle);\n --eth-radius-surface: 0;\n --eth-radius-card: 0;\n --eth-radius-control: 0;\n --eth-radius-overlay: 0;\n --eth-shadow-surface: none;\n --eth-shadow-card: none;\n --eth-shadow-overlay: 0 12px 32px rgb(22 22 22 / 16%);\n --eth-backdrop-filter: none;\n --eth-backdrop-filter-overlay: none;\n --eth-effect-ambient: linear-gradient(transparent, transparent);\n --eth-effect-highlight: linear-gradient(transparent, transparent);\n --eth-card-bg: var(--eth-color-card);\n --eth-card-radius: 0;\n --eth-card-shadow: none;\n --eth-card-backdrop-filter: none;\n --eth-card-header-bg: transparent;\n --eth-card-footer-bg: var(--eth-color-layer-02);\n --eth-card-divider: 1px solid var(--eth-color-border-subtle);\n\n /* ---- role/state deltas: square, structural, bottom-border fields ---- */\n --eth-shadow-umbra: rgb(0 0 0 / 8%);\n --eth-shadow-penumbra: rgb(0 0 0 / 4%);\n --eth-bridge-bg: var(--cds-white, #ffffff);\n --eth-field-bg: var(--cds-gray-10, #f4f4f4);\n --eth-field-bg-hover: #e8e8e8;\n --eth-field-text: var(--eth-color-text-primary);\n --eth-field-placeholder: var(--eth-color-text-helper);\n --eth-field-border: 1px solid transparent;\n --eth-field-border-bottom: 1px solid var(--eth-color-border-strong);\n --eth-field-border-strong: 1px solid var(--eth-color-border-strong);\n --eth-field-radius: 0;\n --eth-field-shadow: none;\n --eth-field-backdrop-filter: none;\n --eth-field-border-style: bottom;\n --eth-btn-radius: 0;\n --eth-btn-secondary-bg: #393939;\n --eth-btn-secondary-bg-hover: #4c4c4c;\n --eth-btn-secondary-bg-active: #6f6f6f;\n --eth-btn-secondary-text: #ffffff;\n --eth-btn-shadow: none;\n --eth-btn-backdrop-filter: none;\n --eth-table-header-bg: var(--eth-color-layer-02);\n --eth-table-row-border: 1px solid var(--eth-table-gridline, var(--eth-color-border-subtle));\n --eth-table-column-border: 1px solid var(--eth-table-gridline, var(--eth-color-border-subtle));\n --eth-table-gridline-axis: both;\n --eth-table-row-selected-accent: var(--eth-color-interactive-primary);\n}\n\n.eth-style-soft-card {\n --eth-color-background: #eff0f2;\n --eth-color-text-primary: #17191d;\n --eth-color-text-secondary: #666d78;\n --eth-color-text-helper: #7b838d;\n --eth-color-border-subtle: #dedfe3;\n --eth-color-border-strong: #bfc2c8;\n --eth-color-interactive-primary: #1f5fd6;\n --eth-color-interactive-strong: #164eb6;\n --eth-color-link: #164eb6;\n --eth-color-layer-01: #ffffff;\n --eth-color-layer-02: #f8f8f9;\n --eth-color-layer-hover: #f1f2f4;\n --eth-color-layer-selected: #eaf1ff;\n --eth-color-card: #ffffff;\n --eth-color-control: #ffffff;\n --eth-color-control-hover: #f4f5f6;\n --eth-color-overlay: #ffffff;\n --eth-color-focus: #2f6df6;\n --eth-color-danger: #c93645;\n --eth-color-warning: #d89112;\n --eth-color-success: #16a35b;\n --eth-color-info: #1f5fd6;\n --eth-border: 1px solid #dedfe3;\n --eth-card-border: 1px solid #e1e2e5;\n --eth-control-border: 1px solid #d9dade;\n --eth-overlay-border: 1px solid #d9dade;\n --eth-radius-surface: 14px;\n --eth-radius-card: 14px;\n --eth-radius-control: 10px;\n --eth-radius-overlay: 14px;\n --eth-shadow-surface: 0 10px 26px rgb(17 19 24 / 7%);\n --eth-shadow-card: 0 2px 12px rgb(17 19 24 / 7%);\n --eth-shadow-overlay: 0 18px 48px rgb(17 19 24 / 14%);\n --eth-backdrop-filter: none;\n --eth-backdrop-filter-overlay: none;\n --eth-card-bg: #ffffff;\n --eth-card-radius: 14px;\n --eth-card-shadow: 0 2px 12px rgb(17 19 24 / 7%);\n --eth-card-backdrop-filter: none;\n --eth-card-header-bg: transparent;\n --eth-card-footer-bg: #fafafa;\n --eth-card-divider: 1px solid #e8e8eb;\n\n /* ---- role/state deltas: rounded, quiet borders, light elevation ---- */\n --eth-shadow-umbra: rgb(17 19 24 / 10%);\n --eth-shadow-penumbra: rgb(17 19 24 / 5%);\n --eth-bridge-bg: #eff0f2;\n --eth-field-bg: #ffffff;\n --eth-field-bg-hover: #ffffff;\n --eth-field-bg-disabled: #f4f4f5;\n --eth-field-text: #17191d;\n --eth-field-placeholder: #878d96;\n --eth-field-border: 1px solid #d9dade;\n --eth-field-border-hover: 1px solid #bfc2c8;\n --eth-field-radius: 10px;\n --eth-field-shadow: 0 1px 2px rgb(17 19 24 / 5%);\n --eth-field-backdrop-filter: none;\n --eth-field-border-style: full;\n --eth-btn-radius: 10px;\n --eth-btn-primary-bg: #17191d;\n --eth-btn-primary-bg-hover: #2a2d33;\n --eth-btn-primary-bg-active: #050608;\n --eth-btn-primary-text: #ffffff;\n --eth-btn-secondary-bg: #ffffff;\n --eth-btn-secondary-bg-hover: #f1f2f4;\n --eth-btn-secondary-bg-active: #e7e8eb;\n --eth-btn-secondary-text: #17191d;\n --eth-btn-tertiary-text: #17191d;\n --eth-btn-ghost-text: #17191d;\n --eth-btn-danger-bg: #c93645;\n --eth-btn-danger-bg-hover: #ad2e3b;\n --eth-btn-success-bg: #16a35b;\n --eth-btn-success-bg-hover: #12834a;\n --eth-btn-disabled-bg: #f1f2f4;\n --eth-btn-disabled-text: #a2a6ad;\n --eth-btn-primary-border: 1px solid #17191d;\n --eth-btn-secondary-border: 1px solid #d9dade;\n --eth-btn-tertiary-border: 1px solid #c9cbd0;\n --eth-btn-ghost-border: 1px solid transparent;\n --eth-btn-shadow: 0 2px 8px rgb(17 19 24 / 8%);\n --eth-btn-backdrop-filter: none;\n --eth-table-bg: #ffffff;\n --eth-table-border: 1px solid #e1e2e5;\n --eth-table-radius: 14px;\n --eth-table-shadow: 0 2px 12px rgb(17 19 24 / 6%);\n --eth-table-header-bg: #fafafa;\n --eth-table-header-text: #666d78;\n --eth-table-gridline: #e9eaed;\n --eth-table-row-border: 1px solid #e9eaed;\n --eth-table-column-border: 0 solid transparent;\n --eth-table-gridline-axis: horizontal;\n --eth-table-row-hover-bg: #f6f7f8;\n --eth-table-row-selected-bg: #eef4ff;\n --eth-table-row-selected-hover-bg: #e5efff;\n --eth-table-row-selected-accent: #1f5fd6;\n --eth-status-info-bg: #eef4ff;\n --eth-status-info-text: #164eb6;\n --eth-status-info-border: #cfe0ff;\n --eth-status-info-icon: #1f5fd6;\n --eth-status-success-bg: #e8f8ef;\n --eth-status-success-text: #0f6f3c;\n --eth-status-success-border: #c8efd8;\n --eth-status-success-icon: #16a35b;\n --eth-status-warning-bg: #fff5df;\n --eth-status-warning-text: #8a5c08;\n --eth-status-warning-border: #f5dfab;\n --eth-status-warning-icon: #d89112;\n --eth-status-danger-bg: #fff0f2;\n --eth-status-danger-text: #9e2633;\n --eth-status-danger-border: #f2c8cf;\n --eth-status-danger-icon: #c93645;\n --eth-status-neutral-bg: #f1f2f4;\n --eth-status-neutral-text: #5d646f;\n --eth-status-neutral-border: #dedfe3;\n --eth-status-neutral-icon: #7b838d;\n --eth-focus-ring-color: #2f6df6;\n --eth-font-family-sans: \"Inter\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --eth-font-weight-title: 650;\n}\n\n.eth-style-glass {\n --eth-color-background:\n radial-gradient(circle at 18% 18%, rgb(255 255 255 / 74%) 0 10rem, transparent 26rem),\n radial-gradient(circle at 72% 18%, rgb(207 221 228 / 46%) 0 18rem, transparent 34rem),\n radial-gradient(circle at 80% 78%, rgb(202 221 206 / 36%) 0 14rem, transparent 28rem),\n linear-gradient(135deg, #c4ccce 0%, #e9eeee 52%, #cbd5d8 100%);\n --eth-color-text-primary: #20272b;\n --eth-color-text-secondary: #687274;\n --eth-color-text-helper: #7c8587;\n --eth-color-border-subtle: rgb(255 255 255 / 52%);\n --eth-color-border-strong: rgb(255 255 255 / 74%);\n --eth-color-interactive-primary: #4b8df7;\n --eth-color-interactive-strong: #2f73dc;\n --eth-color-link: #316fca;\n --eth-color-layer-01: rgb(255 255 255 / 38%);\n --eth-color-layer-02: rgb(255 255 255 / 26%);\n --eth-color-layer-hover: rgb(255 255 255 / 52%);\n --eth-color-layer-selected: rgb(80 141 247 / 16%);\n --eth-color-card: rgb(255 255 255 / 36%);\n --eth-color-control: rgb(255 255 255 / 30%);\n --eth-color-control-hover: rgb(255 255 255 / 52%);\n --eth-color-overlay: rgb(255 255 255 / 48%);\n --eth-color-focus: #4b8df7;\n --eth-color-danger: #ff4d59;\n --eth-color-warning: #ff9d2f;\n --eth-color-success: #20b956;\n --eth-color-info: #4b8df7;\n --eth-border: 1px solid rgb(255 255 255 / 52%);\n --eth-card-border: 1px solid rgb(255 255 255 / 56%);\n --eth-control-border: 1px solid rgb(255 255 255 / 44%);\n --eth-overlay-border: 1px solid rgb(255 255 255 / 62%);\n --eth-radius-surface: 18px;\n --eth-radius-card: 18px;\n --eth-radius-control: 12px;\n --eth-radius-overlay: 20px;\n --eth-shadow-surface:\n 0 28px 90px rgb(51 62 66 / 22%),\n 0 10px 30px rgb(51 62 66 / 12%),\n inset 0 1px 0 rgb(255 255 255 / 68%);\n --eth-shadow-card:\n 0 18px 54px rgb(51 62 66 / 16%),\n inset 0 1px 0 rgb(255 255 255 / 64%),\n inset 0 -18px 42px rgb(255 255 255 / 10%);\n --eth-shadow-overlay:\n 0 34px 110px rgb(51 62 66 / 24%),\n inset 0 1px 0 rgb(255 255 255 / 70%);\n --eth-backdrop-filter: blur(22px) saturate(1.22);\n --eth-backdrop-filter-overlay: blur(28px) saturate(1.28);\n --eth-effect-ambient:\n radial-gradient(circle at 14% 18%, rgb(255 255 255 / 42%) 0 8rem, transparent 20rem),\n radial-gradient(circle at 84% 12%, rgb(192 211 220 / 30%) 0 13rem, transparent 26rem),\n radial-gradient(circle at 88% 78%, rgb(186 215 191 / 22%) 0 12rem, transparent 26rem);\n --eth-effect-highlight:\n linear-gradient(\n 135deg,\n rgb(255 255 255 / 42%) 0%,\n rgb(255 255 255 / 16%) 42%,\n rgb(211 224 228 / 10%) 100%\n );\n --eth-card-bg: rgb(255 255 255 / 40%);\n --eth-card-radius: 18px;\n --eth-card-shadow: var(--eth-shadow-card);\n --eth-card-backdrop-filter: var(--eth-backdrop-filter);\n --eth-card-header-bg: rgb(255 255 255 / 18%);\n --eth-card-footer-bg: rgb(255 255 255 / 24%);\n --eth-card-divider: 1px solid rgb(255 255 255 / 38%);\n\n /* ---- role/state deltas: translucent, blurred, rounded ---- */\n --eth-shadow-umbra: rgb(51 62 66 / 18%);\n --eth-shadow-penumbra: rgb(51 62 66 / 10%);\n\n /* --cds-background must be a solid color, not the page gradient. */\n --eth-bridge-bg: #e9eeee;\n --eth-field-bg: rgb(255 255 255 / 50%);\n --eth-field-bg-hover: rgb(255 255 255 / 66%);\n --eth-field-bg-disabled: rgb(255 255 255 / 24%);\n --eth-field-text: #20272b;\n --eth-field-placeholder: #687274;\n --eth-field-border: 1px solid rgb(255 255 255 / 46%);\n --eth-field-border-hover: 1px solid rgb(255 255 255 / 70%);\n --eth-field-radius: 12px;\n --eth-field-shadow:\n inset 0 1px 0 rgb(255 255 255 / 60%),\n 0 8px 22px rgb(51 62 66 / 9%);\n --eth-field-backdrop-filter: blur(16px) saturate(1.18);\n --eth-field-border-style: full;\n --eth-btn-radius: 12px;\n --eth-btn-primary-bg: #4b8df7;\n --eth-btn-primary-bg-hover: #3379e7;\n --eth-btn-primary-bg-active: #2d68c8;\n --eth-btn-primary-text: #ffffff;\n --eth-btn-secondary-bg: rgb(255 255 255 / 42%);\n --eth-btn-secondary-bg-hover: rgb(255 255 255 / 62%);\n --eth-btn-secondary-bg-active: rgb(255 255 255 / 70%);\n --eth-btn-secondary-text: #20272b;\n --eth-btn-danger-bg: #ff4d59;\n --eth-btn-danger-bg-hover: #e83d48;\n --eth-btn-success-bg: #20b956;\n --eth-btn-success-bg-hover: #17a249;\n --eth-btn-disabled-bg: rgb(255 255 255 / 24%);\n --eth-btn-disabled-text: #8e9799;\n --eth-btn-primary-border: 1px solid rgb(75 141 247 / 55%);\n --eth-btn-secondary-border: 1px solid rgb(255 255 255 / 48%);\n --eth-btn-tertiary-border: 1px solid rgb(75 141 247 / 48%);\n --eth-btn-ghost-border: 1px solid transparent;\n --eth-btn-shadow:\n 0 10px 28px rgb(51 62 66 / 14%),\n inset 0 1px 0 rgb(255 255 255 / 56%);\n --eth-btn-backdrop-filter: blur(16px) saturate(1.2);\n --eth-table-bg: rgb(255 255 255 / 42%);\n --eth-table-border: 1px solid rgb(255 255 255 / 54%);\n --eth-table-radius: 18px;\n --eth-table-shadow: var(--eth-shadow-card);\n --eth-table-backdrop-filter: var(--eth-backdrop-filter);\n --eth-table-header-bg: rgb(255 255 255 / 28%);\n --eth-table-header-text: #5d686b;\n --eth-table-gridline: rgb(32 39 43 / 7%);\n --eth-table-row-border: 1px solid rgb(255 255 255 / 22%);\n --eth-table-column-border: 0 solid transparent;\n --eth-table-gridline-axis: horizontal;\n --eth-table-row-hover-bg: rgb(255 255 255 / 50%);\n --eth-table-row-selected-bg: rgb(75 141 247 / 14%);\n --eth-table-row-selected-hover-bg: rgb(75 141 247 / 20%);\n --eth-table-row-selected-accent: transparent;\n --eth-status-info-bg: rgb(75 141 247 / 14%);\n --eth-status-info-text: #245fb4;\n --eth-status-info-border: rgb(75 141 247 / 24%);\n --eth-status-info-icon: #4b8df7;\n --eth-status-success-bg: rgb(32 185 86 / 14%);\n --eth-status-success-text: #0f7a39;\n --eth-status-success-border: rgb(32 185 86 / 26%);\n --eth-status-success-icon: #20b956;\n --eth-status-warning-bg: rgb(255 157 47 / 16%);\n --eth-status-warning-text: #8a5200;\n --eth-status-warning-border: rgb(255 157 47 / 26%);\n --eth-status-warning-icon: #ff9d2f;\n --eth-status-danger-bg: rgb(255 77 89 / 14%);\n --eth-status-danger-text: #a82531;\n --eth-status-danger-border: rgb(255 77 89 / 26%);\n --eth-status-danger-icon: #ff4d59;\n --eth-status-neutral-bg: rgb(255 255 255 / 32%);\n --eth-status-neutral-text: #5f696c;\n --eth-status-neutral-border: rgb(255 255 255 / 38%);\n --eth-status-neutral-icon: #7c8587;\n --eth-popover-bg: rgb(255 255 255 / 72%);\n --eth-popover-blur: blur(20px) saturate(1.28);\n --eth-overlay-bg: rgb(32 39 43 / 34%);\n --eth-font-family-sans: \"Inter\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n}\n\n.eth-style-bright {\n --eth-color-background: #efd6f2;\n --eth-color-text-primary: #111111;\n --eth-color-text-secondary: #5f5f66;\n --eth-color-text-helper: #777780;\n --eth-color-border-subtle: #e6e2e8;\n --eth-color-border-strong: #c8c1ce;\n --eth-color-interactive-primary: #111111;\n --eth-color-interactive-strong: #000000;\n --eth-color-link: #111111;\n --eth-color-layer-01: #ffffff;\n --eth-color-layer-02: #faf9fb;\n --eth-color-layer-hover: #f4f1f6;\n --eth-color-layer-selected: #f1e8ff;\n --eth-color-card: #ffffff;\n --eth-color-control: #ffffff;\n --eth-color-control-hover: #f5f2f7;\n --eth-color-overlay: #ffffff;\n --eth-color-focus: #111111;\n --eth-color-danger: #ff7e92;\n --eth-color-warning: #ff9f24;\n --eth-color-success: #b8ff86;\n --eth-color-info: #d6c6ff;\n --eth-border: 1px solid #e6e2e8;\n --eth-card-border: 1px solid #e8e2ea;\n --eth-control-border: 1px solid #ded8e2;\n --eth-overlay-border: 1px solid #ded8e2;\n --eth-radius-surface: 18px;\n --eth-radius-card: 18px;\n --eth-radius-control: 12px;\n --eth-radius-overlay: 18px;\n --eth-shadow-surface: 0 28px 70px rgb(40 28 44 / 10%);\n --eth-shadow-card: 0 10px 28px rgb(40 28 44 / 8%);\n --eth-shadow-overlay: 0 28px 80px rgb(40 28 44 / 16%);\n --eth-backdrop-filter: none;\n --eth-backdrop-filter-overlay: none;\n --eth-card-bg: #ffffff;\n --eth-card-radius: 18px;\n --eth-card-shadow: 0 10px 28px rgb(40 28 44 / 8%);\n --eth-card-backdrop-filter: none;\n --eth-card-header-bg: transparent;\n --eth-card-footer-bg: #fbf9fc;\n --eth-card-divider: 1px solid #ece7ef;\n\n /* ---- role/state deltas: high-key white panels, black action, pastel statuses ---- */\n --eth-shadow-umbra: rgb(40 28 44 / 10%);\n --eth-shadow-penumbra: rgb(40 28 44 / 5%);\n --eth-bridge-bg: #efd6f2;\n --eth-field-bg: #ffffff;\n --eth-field-bg-hover: #ffffff;\n --eth-field-bg-disabled: #f2eef4;\n --eth-field-text: #111111;\n --eth-field-placeholder: #8b858e;\n --eth-field-border: 1px solid #ded8e2;\n --eth-field-border-hover: 1px solid #bdb4c4;\n --eth-field-radius: 12px;\n --eth-field-shadow: 0 2px 8px rgb(40 28 44 / 5%);\n --eth-field-backdrop-filter: none;\n --eth-field-border-style: full;\n --eth-btn-radius: 14px;\n --eth-btn-primary-bg: #111111;\n --eth-btn-primary-bg-hover: #000000;\n --eth-btn-primary-bg-active: #000000;\n --eth-btn-primary-text: #ffffff;\n --eth-btn-secondary-bg: #ffffff;\n --eth-btn-secondary-bg-hover: #f4f1f6;\n --eth-btn-secondary-bg-active: #ede7f1;\n --eth-btn-secondary-text: #111111;\n --eth-btn-tertiary-text: #111111;\n --eth-btn-ghost-text: #111111;\n --eth-btn-danger-bg: #ff7e92;\n --eth-btn-danger-bg-hover: #f15e76;\n --eth-btn-danger-text: #26070c;\n --eth-btn-success-bg: #b8ff86;\n --eth-btn-success-bg-hover: #a1ee6d;\n --eth-btn-success-text: #112007;\n --eth-btn-disabled-bg: #f1edf3;\n --eth-btn-disabled-text: #aaa2ad;\n --eth-btn-primary-border: 1px solid #111111;\n --eth-btn-secondary-border: 1px solid #e2dce7;\n --eth-btn-tertiary-border: 1px solid #111111;\n --eth-btn-shadow: 0 8px 18px rgb(40 28 44 / 10%);\n --eth-btn-backdrop-filter: none;\n --eth-table-bg: #ffffff;\n --eth-table-border: 1px solid #e8e2ea;\n --eth-table-radius: 18px;\n --eth-table-shadow: 0 10px 28px rgb(40 28 44 / 8%);\n --eth-table-header-bg: #ffffff;\n --eth-table-header-text: #656069;\n --eth-table-gridline: #eee8f0;\n --eth-table-row-border: 1px solid #eee8f0;\n --eth-table-column-border: 0 solid transparent;\n --eth-table-gridline-axis: horizontal;\n --eth-table-row-hover-bg: #fbf7fc;\n --eth-table-row-selected-bg: #f2e9ff;\n --eth-table-row-selected-hover-bg: #eadcff;\n --eth-table-row-selected-accent: #111111;\n --eth-status-info-bg: #e7dbff;\n --eth-status-info-text: #332254;\n --eth-status-info-border: #d6c6ff;\n --eth-status-info-icon: #7d5ee6;\n --eth-status-success-bg: #d9ffc6;\n --eth-status-success-text: #1d3a11;\n --eth-status-success-border: #b8ff86;\n --eth-status-success-icon: #5dcc32;\n --eth-status-warning-bg: #ffe7bf;\n --eth-status-warning-text: #522f00;\n --eth-status-warning-border: #ffc86f;\n --eth-status-warning-icon: #ff9f24;\n --eth-status-danger-bg: #ffd0da;\n --eth-status-danger-text: #5b1724;\n --eth-status-danger-border: #ffafbd;\n --eth-status-danger-icon: #ff6f86;\n --eth-status-neutral-bg: #f4f1f6;\n --eth-status-neutral-text: #5f5a64;\n --eth-status-neutral-border: #e4dde8;\n --eth-status-neutral-icon: #8d8492;\n --eth-focus-ring-color: #111111;\n --eth-font-family-sans: \"Inter\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --eth-font-weight-title: 700;\n}\n\n.eth-style-studio-dark {\n color-scheme: dark;\n\n --eth-color-background: #050505;\n --eth-color-text-primary: #f7f7f2;\n --eth-color-text-secondary: #bebeb6;\n --eth-color-text-helper: #8f908a;\n --eth-color-border-subtle: #30302f;\n --eth-color-border-strong: #484847;\n --eth-color-interactive-primary: #a8ff4f;\n --eth-color-interactive-strong: #c4ff78;\n --eth-color-link: #c4ff78;\n --eth-color-layer-01: #1f1f1f;\n --eth-color-layer-02: #282828;\n --eth-color-layer-hover: #303030;\n --eth-color-layer-selected: #2f3f1f;\n --eth-color-card: #202020;\n --eth-color-control: #242424;\n --eth-color-control-hover: #303030;\n --eth-color-overlay: #202020;\n --eth-color-focus: #a8ff4f;\n --eth-color-danger: #ff9f24;\n --eth-color-warning: #ff9f24;\n --eth-color-success: #a8ff4f;\n --eth-color-info: #ffffff;\n --eth-border: 1px solid #30302f;\n --eth-card-border: 1px solid #2c2c2b;\n --eth-control-border: 1px solid #3a3a38;\n --eth-overlay-border: 1px solid #3a3a38;\n --eth-radius-surface: 34px;\n --eth-radius-card: 26px;\n --eth-radius-control: 999px;\n --eth-radius-overlay: 28px;\n --eth-shadow-surface: 0 40px 90px rgb(0 0 0 / 48%);\n --eth-shadow-card: 0 20px 54px rgb(0 0 0 / 40%);\n --eth-shadow-overlay: 0 30px 80px rgb(0 0 0 / 58%);\n --eth-backdrop-filter: none;\n --eth-backdrop-filter-overlay: none;\n --eth-card-bg: #202020;\n --eth-card-radius: 26px;\n --eth-card-shadow: 0 20px 54px rgb(0 0 0 / 40%);\n --eth-card-backdrop-filter: none;\n --eth-card-header-bg: transparent;\n --eth-card-footer-bg: #242424;\n --eth-card-divider: 1px solid #30302f;\n\n /* ---- role/state deltas: dark surfaces, dark fields, dark-tuned status ---- */\n --eth-shadow-umbra: rgb(0 0 0 / 55%);\n --eth-shadow-penumbra: rgb(0 0 0 / 35%);\n --eth-bridge-bg: #050505;\n --eth-field-bg: #181818;\n --eth-field-bg-hover: #202020;\n --eth-field-bg-disabled: #111111;\n --eth-field-text: #f7f7f2;\n --eth-field-placeholder: #8f908a;\n --eth-field-text-disabled: #63645f;\n --eth-field-border: 1px solid #3a3a38;\n --eth-field-border-hover: 1px solid #555550;\n --eth-field-radius: 16px;\n --eth-field-shadow: inset 0 1px 0 rgb(255 255 255 / 3%);\n --eth-field-backdrop-filter: none;\n --eth-field-border-style: full;\n --eth-btn-radius: 999px;\n --eth-btn-primary-bg: #a8ff4f;\n --eth-btn-primary-bg-hover: #bdff69;\n --eth-btn-primary-bg-active: #91e843;\n --eth-btn-primary-text: #101010;\n --eth-btn-secondary-bg: #242424;\n --eth-btn-secondary-bg-hover: #303030;\n --eth-btn-secondary-bg-active: #3a3a38;\n --eth-btn-secondary-text: #f7f7f2;\n --eth-btn-tertiary-text: #a8ff4f;\n --eth-btn-ghost-text: #a8ff4f;\n --eth-btn-danger-bg: #ff9f24;\n --eth-btn-danger-bg-hover: #ffa936;\n --eth-btn-danger-text: #130b00;\n --eth-btn-success-bg: #a8ff4f;\n --eth-btn-success-bg-hover: #bdff69;\n --eth-btn-success-text: #101010;\n --eth-btn-disabled-bg: #242424;\n --eth-btn-disabled-text: #666760;\n --eth-btn-primary-border: 1px solid #a8ff4f;\n --eth-btn-secondary-border: 1px solid #3a3a38;\n --eth-btn-tertiary-border: 1px solid #a8ff4f;\n --eth-btn-danger-border: 1px solid #ff9f24;\n --eth-btn-shadow: 0 8px 22px rgb(0 0 0 / 35%);\n --eth-btn-backdrop-filter: none;\n --eth-table-bg: #202020;\n --eth-table-border: 1px solid #30302f;\n --eth-table-radius: 26px;\n --eth-table-shadow: 0 20px 54px rgb(0 0 0 / 34%);\n --eth-table-header-bg: #242424;\n --eth-table-header-text: #bebeb6;\n --eth-table-row-bg: #202020;\n --eth-table-cell-text: #f0f0ea;\n --eth-table-gridline: rgb(255 255 255 / 10%);\n --eth-table-row-border: 1px solid rgb(255 255 255 / 10%);\n --eth-table-column-border: 0 solid transparent;\n --eth-table-gridline-axis: horizontal;\n --eth-table-row-hover-bg: #2a2a28;\n --eth-table-row-selected-bg: #2f3f1f;\n --eth-table-row-selected-hover-bg: #394d26;\n --eth-table-row-selected-accent: #a8ff4f;\n --eth-overlay-bg: rgb(0 0 0 / 60%);\n --eth-popover-bg: #242424;\n --eth-popover-border: 1px solid #3a3a38;\n --eth-focus-ring-color: #a8ff4f;\n\n /* dark-adjusted status: deep-tinted bg + light fg */\n --eth-status-info-bg: #ffffff;\n --eth-status-info-text: #101010;\n --eth-status-info-border: #ffffff;\n --eth-status-info-icon: #ffffff;\n --eth-status-success-bg: color-mix(in srgb, #a8ff4f 18%, #101010);\n --eth-status-success-text: #c4ff78;\n --eth-status-success-border: color-mix(in srgb, #a8ff4f 45%, transparent);\n --eth-status-success-icon: #a8ff4f;\n --eth-status-warning-bg: color-mix(in srgb, #ff9f24 18%, #101010);\n --eth-status-warning-text: #ffbf6b;\n --eth-status-warning-border: color-mix(in srgb, #ff9f24 45%, transparent);\n --eth-status-warning-icon: #ff9f24;\n --eth-status-danger-bg: color-mix(in srgb, #ff5b4d 18%, #101010);\n --eth-status-danger-text: #ff9f91;\n --eth-status-danger-border: color-mix(in srgb, #ff5b4d 45%, transparent);\n --eth-status-danger-icon: #ff5b4d;\n --eth-status-neutral-bg: #242424;\n --eth-status-neutral-text: #bebeb6;\n --eth-status-neutral-border: #3a3a38;\n --eth-status-neutral-icon: #8f908a;\n --eth-font-family-sans: \"Inter\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n --eth-font-weight-title: 760;\n --eth-font-weight-body: 500;\n}\n\n.eth-style-carbon-like,\n.eth-style-soft-card,\n.eth-style-glass,\n.eth-style-bright,\n.eth-style-studio-dark {\n background: var(--eth-color-background);\n color: var(--eth-color-text-primary);\n}\n","/* ========================================================================= *\n * Carbon Bridge.\n *\n * Core controls wrap Carbon React, which reads --cds-* tokens. Presets only\n * overrode --eth-* tokens, so Carbon controls ignored the preset (square,\n * Carbon-blue, and — in studio-dark — white inputs on a dark page). This block\n * maps the active preset's role tokens onto every --cds-* family Carbon\n * consumes. Because the --eth-* values differ per preset, one shared bridge\n * block themes all five presets.\n *\n * Dark mode: StyleScope additionally sets [data-carbon-theme=\"g100\"] on the\n * studio-dark scope, so the ~100 Carbon tokens NOT re-pointed here still get a\n * correct dark base (Part A \"theme-bundle base\" of the architecture doc). This\n * bridge then tints the subset that should follow the EchoThink palette.\n *\n * Applied to :root by StyleScope (global mode) so PORTALED Carbon content\n * (modals, menus, tooltips, toasts mounted at document.body) inherits the\n * theme instead of falling back to default Carbon.\n * ========================================================================= */\n\n.eth-style-carbon-like,\n.eth-style-soft-card,\n.eth-style-glass,\n.eth-style-bright,\n.eth-style-studio-dark {\n /* backgrounds + layers — drive every nested surface, not just the page */\n --cds-background: var(--eth-bridge-bg);\n --cds-background-hover: var(--eth-color-layer-hover);\n --cds-background-active: var(--eth-color-layer-selected);\n --cds-background-selected: var(--eth-color-layer-selected);\n --cds-layer-01: var(--eth-color-card);\n --cds-layer-02: var(--eth-color-layer-02);\n --cds-layer-03: var(--eth-color-layer-03, var(--eth-color-layer-02));\n --cds-layer: var(--cds-layer-01);\n --cds-layer-hover-01: var(--eth-color-layer-hover);\n --cds-layer-hover-02: var(--eth-color-layer-hover);\n --cds-layer-active-01: var(--eth-color-layer-selected);\n --cds-layer-selected-01: var(--eth-table-row-selected-bg);\n --cds-layer-selected-02: var(--eth-table-row-selected-bg);\n --cds-layer-selected-hover-01: var(--eth-table-row-selected-hover-bg);\n --cds-layer-accent-01: var(--eth-table-header-bg);\n --cds-layer-accent-02: var(--eth-table-header-bg);\n\n /* fields — the source of the studio-dark white-box bug */\n --cds-field-01: var(--eth-field-bg);\n --cds-field-02: var(--eth-field-bg);\n --cds-field-03: var(--eth-field-bg);\n --cds-field-hover-01: var(--eth-field-bg-hover);\n --cds-field-hover-02: var(--eth-field-bg-hover);\n --cds-field-hover-03: var(--eth-field-bg-hover);\n\n /* text + icons (every text role, including on-color and placeholder) */\n --cds-text-primary: var(--eth-color-text-primary);\n --cds-text-secondary: var(--eth-color-text-secondary);\n --cds-text-helper: var(--eth-color-text-helper);\n --cds-text-placeholder: var(--eth-field-placeholder);\n --cds-text-error: var(--eth-status-danger-text);\n --cds-text-on-color: var(--eth-btn-primary-text);\n --cds-text-inverse: var(--eth-bridge-bg);\n --cds-icon-primary: var(--eth-color-text-primary);\n --cds-icon-secondary: var(--eth-color-text-secondary);\n --cds-icon-on-color: var(--eth-btn-primary-text);\n\n /* borders */\n --cds-border-subtle: var(--eth-color-border-subtle);\n --cds-border-subtle-00: var(--eth-color-border-subtle);\n --cds-border-subtle-01: var(--eth-color-border-subtle);\n --cds-border-subtle-02: var(--eth-color-border-subtle);\n --cds-border-subtle-03: var(--eth-color-border-subtle);\n --cds-border-strong: var(--eth-color-border-strong);\n --cds-border-strong-01: var(--eth-color-border-strong);\n --cds-border-strong-02: var(--eth-color-border-strong);\n --cds-border-interactive: var(--eth-color-interactive-primary);\n\n /* buttons (per variant + state) */\n --cds-button-primary: var(--eth-btn-primary-bg);\n --cds-button-primary-hover: var(--eth-btn-primary-bg-hover);\n --cds-button-primary-active: var(--eth-btn-primary-bg-active);\n --cds-button-secondary: var(--eth-btn-secondary-bg);\n --cds-button-secondary-hover: var(--eth-btn-secondary-bg-hover);\n --cds-button-secondary-active: var(--eth-btn-secondary-bg-active);\n --cds-button-tertiary: var(--eth-btn-tertiary-text);\n --cds-button-tertiary-hover: var(--eth-btn-tertiary-bg-hover);\n --cds-button-danger-primary: var(--eth-btn-danger-bg);\n --cds-button-danger-hover: var(--eth-btn-danger-bg-hover);\n --cds-button-danger-active: var(--eth-btn-danger-bg-active, var(--eth-btn-danger-bg-hover));\n --cds-button-disabled: var(--eth-btn-disabled-bg);\n\n /* links + interactive */\n --cds-link-primary: var(--eth-color-link);\n --cds-link-primary-hover: var(--eth-color-interactive-strong);\n --cds-interactive: var(--eth-color-interactive-primary);\n\n /* support / status (icon glyph colors + notification fills) */\n --cds-support-error: var(--eth-status-danger-icon);\n --cds-support-success: var(--eth-status-success-icon);\n --cds-support-warning: var(--eth-status-warning-icon);\n --cds-support-info: var(--eth-status-info-icon);\n --cds-notification-background-error: var(--eth-status-danger-bg);\n --cds-notification-background-success: var(--eth-status-success-bg);\n --cds-notification-background-warning: var(--eth-status-warning-bg);\n --cds-notification-background-info: var(--eth-status-info-bg);\n\n /* focus + overlay + typography */\n --cds-focus: var(--eth-focus-ring-color);\n --cds-overlay: var(--eth-overlay-bg);\n --cds-font-family: var(--eth-font-family-sans);\n --cds-font-mono: var(--eth-font-family-mono);\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import "./styles.css";
|
|
3
|
+
export declare const ethStylePresets: readonly ["carbon-like", "soft-card", "glass", "bright", "studio-dark"];
|
|
4
|
+
export type EthStylePreset = (typeof ethStylePresets)[number];
|
|
5
|
+
export declare const defaultStylePreset: EthStylePreset;
|
|
6
|
+
export declare const ethStylePresetLabels: Record<EthStylePreset, string>;
|
|
7
|
+
export declare const ethStylePresetDescriptions: Record<EthStylePreset, string>;
|
|
8
|
+
/** Light/dark mode per preset. Drives the Carbon theme bundle + data-eth-mode. */
|
|
9
|
+
export declare const ethStylePresetModes: Record<EthStylePreset, "light" | "dark">;
|
|
10
|
+
/**
|
|
11
|
+
* Carbon theme bundle per preset (Part A "theme-bundle base"). Light presets
|
|
12
|
+
* base on the white bundle; studio-dark bases on g100 so every Carbon token
|
|
13
|
+
* the bridge does not re-point still resolves to a correct dark value.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ethStylePresetCarbonThemes: Record<EthStylePreset, string>;
|
|
16
|
+
export declare const ethPalettes: readonly ["default"];
|
|
17
|
+
export type EthPalette = (typeof ethPalettes)[number];
|
|
18
|
+
export declare const defaultPalette: EthPalette;
|
|
19
|
+
export declare function isEthStylePreset(value: string): value is EthStylePreset;
|
|
20
|
+
export declare function isEthPalette(value: string): value is EthPalette;
|
|
21
|
+
export declare function getEthStylePresetClassName(preset?: EthStylePreset): string;
|
|
22
|
+
export declare function getEthPaletteClassName(palette?: EthPalette): string;
|
|
23
|
+
export declare function getEthStylePresetDataAttribute(preset?: EthStylePreset): "carbon-like" | "soft-card" | "glass" | "bright" | "studio-dark";
|
|
24
|
+
export declare function getEthStyleMode(preset?: EthStylePreset): "light" | "dark";
|
|
25
|
+
export declare function getEthStyleCarbonTheme(preset?: EthStylePreset): string;
|
|
26
|
+
export declare function composeEthStylePresetClassName(preset?: EthStylePreset, className?: string): string;
|
|
27
|
+
export declare const ethDensityModes: readonly ["compact", "standard", "comfortable"];
|
|
28
|
+
export type EthDensityMode = (typeof ethDensityModes)[number];
|
|
29
|
+
export declare const ethTypeScales: readonly ["compact", "standard", "large"];
|
|
30
|
+
export type EthTypeScale = (typeof ethTypeScales)[number];
|
|
31
|
+
export interface StyleScopeProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
32
|
+
preset?: EthStylePreset;
|
|
33
|
+
/** Palette of raw color assets the preset maps from. */
|
|
34
|
+
palette?: EthPalette;
|
|
35
|
+
/** Orthogonal spacing axis. "standard" emits no attribute (token defaults). */
|
|
36
|
+
density?: EthDensityMode;
|
|
37
|
+
/** Orthogonal typography scale axis. "standard" emits no attribute. */
|
|
38
|
+
typeScale?: EthTypeScale;
|
|
39
|
+
/**
|
|
40
|
+
* Also mirror the preset/palette/Carbon-theme onto the document root so
|
|
41
|
+
* PORTALED Carbon content (modals, dropdown menus, tooltips, toasts mounted
|
|
42
|
+
* at document.body, outside this wrapper) inherits the theme instead of
|
|
43
|
+
* falling back to default Carbon. Defaults to true.
|
|
44
|
+
*/
|
|
45
|
+
global?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare function StyleScope({ preset, palette, density, typeScale, global, className, children, ...props }: StyleScopeProps): import("react/jsx-runtime").JSX.Element;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// src/index.tsx
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
var ethStylePresets = [
|
|
5
|
+
"carbon-like",
|
|
6
|
+
"soft-card",
|
|
7
|
+
"glass",
|
|
8
|
+
"bright",
|
|
9
|
+
"studio-dark"
|
|
10
|
+
];
|
|
11
|
+
var defaultStylePreset = "carbon-like";
|
|
12
|
+
var ethStylePresetLabels = {
|
|
13
|
+
"carbon-like": "Carbon-like",
|
|
14
|
+
"soft-card": "Soft card",
|
|
15
|
+
glass: "Liquid glass",
|
|
16
|
+
bright: "Bright",
|
|
17
|
+
"studio-dark": "Studio dark"
|
|
18
|
+
};
|
|
19
|
+
var ethStylePresetDescriptions = {
|
|
20
|
+
"carbon-like": "Square, flat Carbon-inspired surfaces.",
|
|
21
|
+
"soft-card": "Soft radius with quiet card elevation.",
|
|
22
|
+
glass: "Layered translucent surfaces with strong blur, highlights, and depth.",
|
|
23
|
+
bright: "High-key SaaS surfaces with crisp contrast.",
|
|
24
|
+
"studio-dark": "Dark workbench surfaces for dense tools."
|
|
25
|
+
};
|
|
26
|
+
var ethStylePresetModes = {
|
|
27
|
+
"carbon-like": "light",
|
|
28
|
+
"soft-card": "light",
|
|
29
|
+
glass: "light",
|
|
30
|
+
bright: "light",
|
|
31
|
+
"studio-dark": "dark"
|
|
32
|
+
};
|
|
33
|
+
var ethStylePresetCarbonThemes = {
|
|
34
|
+
"carbon-like": "white",
|
|
35
|
+
"soft-card": "white",
|
|
36
|
+
glass: "white",
|
|
37
|
+
bright: "white",
|
|
38
|
+
"studio-dark": "g100"
|
|
39
|
+
};
|
|
40
|
+
var ethPalettes = ["default"];
|
|
41
|
+
var defaultPalette = "default";
|
|
42
|
+
var presetSet = new Set(ethStylePresets);
|
|
43
|
+
var paletteSet = new Set(ethPalettes);
|
|
44
|
+
function joinClassNames(...values) {
|
|
45
|
+
return values.filter(Boolean).join(" ");
|
|
46
|
+
}
|
|
47
|
+
function isEthStylePreset(value) {
|
|
48
|
+
return presetSet.has(value);
|
|
49
|
+
}
|
|
50
|
+
function isEthPalette(value) {
|
|
51
|
+
return paletteSet.has(value);
|
|
52
|
+
}
|
|
53
|
+
function getEthStylePresetClassName(preset = defaultStylePreset) {
|
|
54
|
+
return `eth-style-${preset}`;
|
|
55
|
+
}
|
|
56
|
+
function getEthPaletteClassName(palette = defaultPalette) {
|
|
57
|
+
return `eth-palette-${palette}`;
|
|
58
|
+
}
|
|
59
|
+
function getEthStylePresetDataAttribute(preset = defaultStylePreset) {
|
|
60
|
+
return preset;
|
|
61
|
+
}
|
|
62
|
+
function getEthStyleMode(preset = defaultStylePreset) {
|
|
63
|
+
return ethStylePresetModes[preset];
|
|
64
|
+
}
|
|
65
|
+
function getEthStyleCarbonTheme(preset = defaultStylePreset) {
|
|
66
|
+
return ethStylePresetCarbonThemes[preset];
|
|
67
|
+
}
|
|
68
|
+
function composeEthStylePresetClassName(preset = defaultStylePreset, className) {
|
|
69
|
+
return joinClassNames(getEthStylePresetClassName(preset), className);
|
|
70
|
+
}
|
|
71
|
+
var ethDensityModes = ["compact", "standard", "comfortable"];
|
|
72
|
+
var ethTypeScales = ["compact", "standard", "large"];
|
|
73
|
+
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
74
|
+
function applyGlobalTheme(preset, palette, density, typeScale) {
|
|
75
|
+
if (typeof document === "undefined") return void 0;
|
|
76
|
+
const root = document.documentElement;
|
|
77
|
+
const presetClass = getEthStylePresetClassName(preset);
|
|
78
|
+
const paletteClass = getEthPaletteClassName(palette);
|
|
79
|
+
const desiredAttrs = {
|
|
80
|
+
"data-eth-palette": palette,
|
|
81
|
+
"data-eth-style-preset": getEthStylePresetDataAttribute(preset),
|
|
82
|
+
"data-eth-mode": getEthStyleMode(preset),
|
|
83
|
+
"data-carbon-theme": getEthStyleCarbonTheme(preset),
|
|
84
|
+
"data-eth-density": density === "standard" ? null : density,
|
|
85
|
+
"data-eth-type": typeScale === "standard" ? null : typeScale
|
|
86
|
+
};
|
|
87
|
+
const removedClasses = Array.from(root.classList).filter(
|
|
88
|
+
(c) => c.startsWith("eth-style-") || c.startsWith("eth-palette-")
|
|
89
|
+
);
|
|
90
|
+
const prevAttrs = {};
|
|
91
|
+
Object.keys(desiredAttrs).forEach((key) => {
|
|
92
|
+
prevAttrs[key] = root.getAttribute(key);
|
|
93
|
+
});
|
|
94
|
+
removedClasses.forEach((c) => root.classList.remove(c));
|
|
95
|
+
root.classList.add(paletteClass, presetClass);
|
|
96
|
+
Object.entries(desiredAttrs).forEach(([key, value]) => {
|
|
97
|
+
if (value === null) root.removeAttribute(key);
|
|
98
|
+
else root.setAttribute(key, value);
|
|
99
|
+
});
|
|
100
|
+
return () => {
|
|
101
|
+
root.classList.remove(paletteClass, presetClass);
|
|
102
|
+
removedClasses.forEach((c) => root.classList.add(c));
|
|
103
|
+
Object.entries(prevAttrs).forEach(([key, value]) => {
|
|
104
|
+
if (value === null) root.removeAttribute(key);
|
|
105
|
+
else root.setAttribute(key, value);
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function StyleScope({
|
|
110
|
+
preset = defaultStylePreset,
|
|
111
|
+
palette = defaultPalette,
|
|
112
|
+
density = "standard",
|
|
113
|
+
typeScale = "standard",
|
|
114
|
+
global = true,
|
|
115
|
+
className,
|
|
116
|
+
children,
|
|
117
|
+
...props
|
|
118
|
+
}) {
|
|
119
|
+
useIsomorphicLayoutEffect(() => {
|
|
120
|
+
if (!global) return void 0;
|
|
121
|
+
return applyGlobalTheme(preset, palette, density, typeScale);
|
|
122
|
+
}, [global, preset, palette, density, typeScale]);
|
|
123
|
+
return /* @__PURE__ */ jsx(
|
|
124
|
+
"div",
|
|
125
|
+
{
|
|
126
|
+
...props,
|
|
127
|
+
className: joinClassNames(
|
|
128
|
+
getEthPaletteClassName(palette),
|
|
129
|
+
getEthStylePresetClassName(preset),
|
|
130
|
+
className
|
|
131
|
+
),
|
|
132
|
+
"data-eth-palette": palette,
|
|
133
|
+
"data-eth-style-preset": getEthStylePresetDataAttribute(preset),
|
|
134
|
+
"data-eth-mode": getEthStyleMode(preset),
|
|
135
|
+
"data-carbon-theme": getEthStyleCarbonTheme(preset),
|
|
136
|
+
"data-eth-density": density === "standard" ? void 0 : density,
|
|
137
|
+
"data-eth-type": typeScale === "standard" ? void 0 : typeScale,
|
|
138
|
+
children
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
StyleScope,
|
|
144
|
+
composeEthStylePresetClassName,
|
|
145
|
+
defaultPalette,
|
|
146
|
+
defaultStylePreset,
|
|
147
|
+
ethDensityModes,
|
|
148
|
+
ethPalettes,
|
|
149
|
+
ethStylePresetCarbonThemes,
|
|
150
|
+
ethStylePresetDescriptions,
|
|
151
|
+
ethStylePresetLabels,
|
|
152
|
+
ethStylePresetModes,
|
|
153
|
+
ethStylePresets,
|
|
154
|
+
ethTypeScales,
|
|
155
|
+
getEthPaletteClassName,
|
|
156
|
+
getEthStyleCarbonTheme,
|
|
157
|
+
getEthStyleMode,
|
|
158
|
+
getEthStylePresetClassName,
|
|
159
|
+
getEthStylePresetDataAttribute,
|
|
160
|
+
isEthPalette,
|
|
161
|
+
isEthStylePreset
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import * as React from \"react\";\nimport \"./styles.css\";\n\nexport const ethStylePresets = [\n \"carbon-like\",\n \"soft-card\",\n \"glass\",\n \"bright\",\n \"studio-dark\"\n] as const;\n\nexport type EthStylePreset = (typeof ethStylePresets)[number];\n\nexport const defaultStylePreset: EthStylePreset = \"carbon-like\";\n\nexport const ethStylePresetLabels: Record<EthStylePreset, string> = {\n \"carbon-like\": \"Carbon-like\",\n \"soft-card\": \"Soft card\",\n glass: \"Liquid glass\",\n bright: \"Bright\",\n \"studio-dark\": \"Studio dark\"\n};\n\nexport const ethStylePresetDescriptions: Record<EthStylePreset, string> = {\n \"carbon-like\": \"Square, flat Carbon-inspired surfaces.\",\n \"soft-card\": \"Soft radius with quiet card elevation.\",\n glass: \"Layered translucent surfaces with strong blur, highlights, and depth.\",\n bright: \"High-key SaaS surfaces with crisp contrast.\",\n \"studio-dark\": \"Dark workbench surfaces for dense tools.\"\n};\n\n/** Light/dark mode per preset. Drives the Carbon theme bundle + data-eth-mode. */\nexport const ethStylePresetModes: Record<EthStylePreset, \"light\" | \"dark\"> = {\n \"carbon-like\": \"light\",\n \"soft-card\": \"light\",\n glass: \"light\",\n bright: \"light\",\n \"studio-dark\": \"dark\"\n};\n\n/**\n * Carbon theme bundle per preset (Part A \"theme-bundle base\"). Light presets\n * base on the white bundle; studio-dark bases on g100 so every Carbon token\n * the bridge does not re-point still resolves to a correct dark value.\n */\nexport const ethStylePresetCarbonThemes: Record<EthStylePreset, string> = {\n \"carbon-like\": \"white\",\n \"soft-card\": \"white\",\n glass: \"white\",\n bright: \"white\",\n \"studio-dark\": \"g100\"\n};\n\nexport const ethPalettes = [\"default\"] as const;\nexport type EthPalette = (typeof ethPalettes)[number];\nexport const defaultPalette: EthPalette = \"default\";\n\nconst presetSet = new Set<string>(ethStylePresets);\nconst paletteSet = new Set<string>(ethPalettes);\n\nfunction joinClassNames(...values: Array<string | undefined | false>) {\n return values.filter(Boolean).join(\" \");\n}\n\nexport function isEthStylePreset(value: string): value is EthStylePreset {\n return presetSet.has(value);\n}\n\nexport function isEthPalette(value: string): value is EthPalette {\n return paletteSet.has(value);\n}\n\nexport function getEthStylePresetClassName(preset: EthStylePreset = defaultStylePreset) {\n return `eth-style-${preset}`;\n}\n\nexport function getEthPaletteClassName(palette: EthPalette = defaultPalette) {\n return `eth-palette-${palette}`;\n}\n\nexport function getEthStylePresetDataAttribute(preset: EthStylePreset = defaultStylePreset) {\n return preset;\n}\n\nexport function getEthStyleMode(preset: EthStylePreset = defaultStylePreset) {\n return ethStylePresetModes[preset];\n}\n\nexport function getEthStyleCarbonTheme(preset: EthStylePreset = defaultStylePreset) {\n return ethStylePresetCarbonThemes[preset];\n}\n\nexport function composeEthStylePresetClassName(\n preset: EthStylePreset = defaultStylePreset,\n className?: string\n) {\n return joinClassNames(getEthStylePresetClassName(preset), className);\n}\n\nexport const ethDensityModes = [\"compact\", \"standard\", \"comfortable\"] as const;\nexport type EthDensityMode = (typeof ethDensityModes)[number];\n\nexport const ethTypeScales = [\"compact\", \"standard\", \"large\"] as const;\nexport type EthTypeScale = (typeof ethTypeScales)[number];\n\nexport interface StyleScopeProps extends React.HTMLAttributes<HTMLDivElement> {\n preset?: EthStylePreset;\n /** Palette of raw color assets the preset maps from. */\n palette?: EthPalette;\n /** Orthogonal spacing axis. \"standard\" emits no attribute (token defaults). */\n density?: EthDensityMode;\n /** Orthogonal typography scale axis. \"standard\" emits no attribute. */\n typeScale?: EthTypeScale;\n /**\n * Also mirror the preset/palette/Carbon-theme onto the document root so\n * PORTALED Carbon content (modals, dropdown menus, tooltips, toasts mounted\n * at document.body, outside this wrapper) inherits the theme instead of\n * falling back to default Carbon. Defaults to true.\n */\n global?: boolean;\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\nfunction applyGlobalTheme(\n preset: EthStylePreset,\n palette: EthPalette,\n density: EthDensityMode,\n typeScale: EthTypeScale\n) {\n if (typeof document === \"undefined\") return undefined;\n const root = document.documentElement;\n\n const presetClass = getEthStylePresetClassName(preset);\n const paletteClass = getEthPaletteClassName(palette);\n\n // Desired attributes; a null value means \"remove the attribute\".\n const desiredAttrs: Record<string, string | null> = {\n \"data-eth-palette\": palette,\n \"data-eth-style-preset\": getEthStylePresetDataAttribute(preset),\n \"data-eth-mode\": getEthStyleMode(preset),\n \"data-carbon-theme\": getEthStyleCarbonTheme(preset),\n \"data-eth-density\": density === \"standard\" ? null : density,\n \"data-eth-type\": typeScale === \"standard\" ? null : typeScale\n };\n\n // Snapshot prior preset/palette classes and the attributes we touch.\n const removedClasses = Array.from(root.classList).filter(\n (c) => c.startsWith(\"eth-style-\") || c.startsWith(\"eth-palette-\")\n );\n const prevAttrs: Record<string, string | null> = {};\n Object.keys(desiredAttrs).forEach((key) => {\n prevAttrs[key] = root.getAttribute(key);\n });\n\n removedClasses.forEach((c) => root.classList.remove(c));\n root.classList.add(paletteClass, presetClass);\n Object.entries(desiredAttrs).forEach(([key, value]) => {\n if (value === null) root.removeAttribute(key);\n else root.setAttribute(key, value);\n });\n\n return () => {\n root.classList.remove(paletteClass, presetClass);\n removedClasses.forEach((c) => root.classList.add(c));\n Object.entries(prevAttrs).forEach(([key, value]) => {\n if (value === null) root.removeAttribute(key);\n else root.setAttribute(key, value);\n });\n };\n}\n\nexport function StyleScope({\n preset = defaultStylePreset,\n palette = defaultPalette,\n density = \"standard\",\n typeScale = \"standard\",\n global = true,\n className,\n children,\n ...props\n}: StyleScopeProps) {\n useIsomorphicLayoutEffect(() => {\n if (!global) return undefined;\n return applyGlobalTheme(preset, palette, density, typeScale);\n }, [global, preset, palette, density, typeScale]);\n\n return (\n <div\n {...props}\n className={joinClassNames(\n getEthPaletteClassName(palette),\n getEthStylePresetClassName(preset),\n className\n )}\n data-eth-palette={palette}\n data-eth-style-preset={getEthStylePresetDataAttribute(preset)}\n data-eth-mode={getEthStyleMode(preset)}\n data-carbon-theme={getEthStyleCarbonTheme(preset)}\n data-eth-density={density === \"standard\" ? undefined : density}\n data-eth-type={typeScale === \"standard\" ? undefined : typeScale}\n >\n {children}\n </div>\n );\n}\n"],"mappings":";AAAA,YAAY,WAAW;AA6LnB;AA1LG,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,qBAAqC;AAE3C,IAAM,uBAAuD;AAAA,EAClE,eAAe;AAAA,EACf,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AACjB;AAEO,IAAM,6BAA6D;AAAA,EACxE,eAAe;AAAA,EACf,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AACjB;AAGO,IAAM,sBAAgE;AAAA,EAC3E,eAAe;AAAA,EACf,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AACjB;AAOO,IAAM,6BAA6D;AAAA,EACxE,eAAe;AAAA,EACf,aAAa;AAAA,EACb,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,eAAe;AACjB;AAEO,IAAM,cAAc,CAAC,SAAS;AAE9B,IAAM,iBAA6B;AAE1C,IAAM,YAAY,IAAI,IAAY,eAAe;AACjD,IAAM,aAAa,IAAI,IAAY,WAAW;AAE9C,SAAS,kBAAkB,QAA2C;AACpE,SAAO,OAAO,OAAO,OAAO,EAAE,KAAK,GAAG;AACxC;AAEO,SAAS,iBAAiB,OAAwC;AACvE,SAAO,UAAU,IAAI,KAAK;AAC5B;AAEO,SAAS,aAAa,OAAoC;AAC/D,SAAO,WAAW,IAAI,KAAK;AAC7B;AAEO,SAAS,2BAA2B,SAAyB,oBAAoB;AACtF,SAAO,aAAa,MAAM;AAC5B;AAEO,SAAS,uBAAuB,UAAsB,gBAAgB;AAC3E,SAAO,eAAe,OAAO;AAC/B;AAEO,SAAS,+BAA+B,SAAyB,oBAAoB;AAC1F,SAAO;AACT;AAEO,SAAS,gBAAgB,SAAyB,oBAAoB;AAC3E,SAAO,oBAAoB,MAAM;AACnC;AAEO,SAAS,uBAAuB,SAAyB,oBAAoB;AAClF,SAAO,2BAA2B,MAAM;AAC1C;AAEO,SAAS,+BACd,SAAyB,oBACzB,WACA;AACA,SAAO,eAAe,2BAA2B,MAAM,GAAG,SAAS;AACrE;AAEO,IAAM,kBAAkB,CAAC,WAAW,YAAY,aAAa;AAG7D,IAAM,gBAAgB,CAAC,WAAW,YAAY,OAAO;AAoB5D,IAAM,4BACJ,OAAO,WAAW,cAAoB,wBAAwB;AAEhE,SAAS,iBACP,QACA,SACA,SACA,WACA;AACA,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,OAAO,SAAS;AAEtB,QAAM,cAAc,2BAA2B,MAAM;AACrD,QAAM,eAAe,uBAAuB,OAAO;AAGnD,QAAM,eAA8C;AAAA,IAClD,oBAAoB;AAAA,IACpB,yBAAyB,+BAA+B,MAAM;AAAA,IAC9D,iBAAiB,gBAAgB,MAAM;AAAA,IACvC,qBAAqB,uBAAuB,MAAM;AAAA,IAClD,oBAAoB,YAAY,aAAa,OAAO;AAAA,IACpD,iBAAiB,cAAc,aAAa,OAAO;AAAA,EACrD;AAGA,QAAM,iBAAiB,MAAM,KAAK,KAAK,SAAS,EAAE;AAAA,IAChD,CAAC,MAAM,EAAE,WAAW,YAAY,KAAK,EAAE,WAAW,cAAc;AAAA,EAClE;AACA,QAAM,YAA2C,CAAC;AAClD,SAAO,KAAK,YAAY,EAAE,QAAQ,CAAC,QAAQ;AACzC,cAAU,GAAG,IAAI,KAAK,aAAa,GAAG;AAAA,EACxC,CAAC;AAED,iBAAe,QAAQ,CAAC,MAAM,KAAK,UAAU,OAAO,CAAC,CAAC;AACtD,OAAK,UAAU,IAAI,cAAc,WAAW;AAC5C,SAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACrD,QAAI,UAAU,KAAM,MAAK,gBAAgB,GAAG;AAAA,QACvC,MAAK,aAAa,KAAK,KAAK;AAAA,EACnC,CAAC;AAED,SAAO,MAAM;AACX,SAAK,UAAU,OAAO,cAAc,WAAW;AAC/C,mBAAe,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC;AACnD,WAAO,QAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAClD,UAAI,UAAU,KAAM,MAAK,gBAAgB,GAAG;AAAA,UACvC,MAAK,aAAa,KAAK,KAAK;AAAA,IACnC,CAAC;AAAA,EACH;AACF;AAEO,SAAS,WAAW;AAAA,EACzB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,4BAA0B,MAAM;AAC9B,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,iBAAiB,QAAQ,SAAS,SAAS,SAAS;AAAA,EAC7D,GAAG,CAAC,QAAQ,QAAQ,SAAS,SAAS,SAAS,CAAC;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT,uBAAuB,OAAO;AAAA,QAC9B,2BAA2B,MAAM;AAAA,QACjC;AAAA,MACF;AAAA,MACA,oBAAkB;AAAA,MAClB,yBAAuB,+BAA+B,MAAM;AAAA,MAC5D,iBAAe,gBAAgB,MAAM;AAAA,MACrC,qBAAmB,uBAAuB,MAAM;AAAA,MAChD,oBAAkB,YAAY,aAAa,SAAY;AAAA,MACvD,iBAAe,cAAc,aAAa,SAAY;AAAA,MAErD;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@echothink-ui/style",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": [
|
|
7
|
+
"**/*.css"
|
|
8
|
+
],
|
|
9
|
+
"main": "./dist/index.cjs",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"style": "./src/styles.css",
|
|
13
|
+
"styles": "./src/styles.css",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"require": "./dist/index.cjs"
|
|
19
|
+
},
|
|
20
|
+
"./styles.css": "./src/styles.css",
|
|
21
|
+
"./index.css": "./dist/index.css"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"src",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"react": ">=18.3.0",
|
|
30
|
+
"react-dom": ">=18.3.0"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@echothink-ui/carbon-theme": "0.2.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^24.9.1",
|
|
37
|
+
"@types/react": "^19.2.2",
|
|
38
|
+
"@types/react-dom": "^19.2.2"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsup src/index.tsx --format esm,cjs --sourcemap --clean --external react --external react-dom && tsc -p tsconfig.json --declaration --emitDeclarationOnly --noEmit false --outDir dist",
|
|
45
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
46
|
+
"test": "vitest run --config ../echothink-UI-components/vitest.config.ts --passWithNoTests",
|
|
47
|
+
"lint": "eslint src"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/* ========================================================================= *
|
|
2
|
+
* Layer 4 base — Component role-token defaults (Carbon-like).
|
|
3
|
+
*
|
|
4
|
+
* These extend the existing @echothink-ui/tokens contract with the role +
|
|
5
|
+
* state + status + density-sizing tokens it was missing. Defaults below derive
|
|
6
|
+
* from the existing --eth-color-* / --eth-radius-* contract, so an un-presetted
|
|
7
|
+
* page still resolves them to Carbon. Presets override the deltas; components
|
|
8
|
+
* consume these WITH fallbacks to the legacy tokens.
|
|
9
|
+
* ========================================================================= */
|
|
10
|
+
|
|
11
|
+
:root {
|
|
12
|
+
/* ---- Bridge-safe solid background (Carbon's --cds-background wants a color,
|
|
13
|
+
not a gradient; presets whose page bg is a gradient set this solid). */
|
|
14
|
+
--eth-bridge-bg: var(--eth-color-background);
|
|
15
|
+
|
|
16
|
+
/* ---- Focus ---- */
|
|
17
|
+
--eth-focus-ring-color: var(--eth-color-focus);
|
|
18
|
+
--eth-focus-ring-width: 2px;
|
|
19
|
+
--eth-focus-ring-offset: 2px;
|
|
20
|
+
--eth-focus-ring: var(--eth-focus-ring-width) solid var(--eth-focus-ring-color);
|
|
21
|
+
|
|
22
|
+
/* ---- Field (text input, textarea, select trigger) ---- */
|
|
23
|
+
--eth-field-bg: var(--eth-color-layer-01);
|
|
24
|
+
--eth-field-bg-hover: var(--eth-color-layer-hover);
|
|
25
|
+
--eth-field-bg-disabled: var(--eth-color-layer-02);
|
|
26
|
+
--eth-field-text: var(--eth-color-text-primary);
|
|
27
|
+
--eth-field-placeholder: var(--eth-color-text-helper);
|
|
28
|
+
--eth-field-text-disabled: var(--eth-color-text-helper);
|
|
29
|
+
--eth-field-label-text: var(--eth-color-text-secondary);
|
|
30
|
+
--eth-field-helper-text: var(--eth-color-text-helper);
|
|
31
|
+
--eth-field-border: var(--eth-control-border);
|
|
32
|
+
|
|
33
|
+
/* Bottom-emphasis border (carbon-like fields); falls back to the box border. */
|
|
34
|
+
--eth-field-border-bottom: var(--eth-field-border);
|
|
35
|
+
--eth-field-border-hover: var(--eth-border-width-1) solid var(--eth-color-border-strong);
|
|
36
|
+
--eth-field-border-strong: var(--eth-border-width-1) solid var(--eth-color-border-strong);
|
|
37
|
+
--eth-field-radius: var(--eth-radius-control);
|
|
38
|
+
--eth-field-shadow: none;
|
|
39
|
+
--eth-field-backdrop-filter: none;
|
|
40
|
+
--eth-field-invalid-border: var(--eth-border-width-2) solid var(--eth-color-danger);
|
|
41
|
+
--eth-field-warning-border: var(--eth-border-width-2) solid var(--eth-color-warning);
|
|
42
|
+
|
|
43
|
+
/* Field border placement. carbon-like uses bottom-only; others full-box. */
|
|
44
|
+
--eth-field-border-style: full;
|
|
45
|
+
|
|
46
|
+
/* ---- Buttons (per variant, with states) ---- */
|
|
47
|
+
--eth-btn-radius: var(--eth-radius-control);
|
|
48
|
+
--eth-btn-focus-ring: var(--eth-focus-ring);
|
|
49
|
+
--eth-btn-primary-bg: var(--eth-color-interactive-primary);
|
|
50
|
+
--eth-btn-primary-bg-hover: var(--eth-color-interactive-strong);
|
|
51
|
+
--eth-btn-primary-bg-active: var(--eth-color-interactive-strong);
|
|
52
|
+
--eth-btn-primary-text: #ffffff;
|
|
53
|
+
--eth-btn-secondary-bg: var(--eth-color-text-primary);
|
|
54
|
+
--eth-btn-secondary-bg-hover: var(--eth-color-text-secondary);
|
|
55
|
+
--eth-btn-secondary-bg-active: var(--eth-color-text-secondary);
|
|
56
|
+
--eth-btn-secondary-text: #ffffff;
|
|
57
|
+
--eth-btn-tertiary-bg: transparent;
|
|
58
|
+
--eth-btn-tertiary-bg-hover: var(--eth-color-layer-hover);
|
|
59
|
+
--eth-btn-tertiary-text: var(--eth-color-interactive-primary);
|
|
60
|
+
--eth-btn-ghost-bg: transparent;
|
|
61
|
+
--eth-btn-ghost-bg-hover: var(--eth-color-layer-hover);
|
|
62
|
+
--eth-btn-ghost-text: var(--eth-color-interactive-primary);
|
|
63
|
+
--eth-btn-danger-bg: var(--eth-color-danger);
|
|
64
|
+
--eth-btn-danger-bg-hover: #b81922;
|
|
65
|
+
--eth-btn-danger-bg-active: #a2191f;
|
|
66
|
+
--eth-btn-danger-text: #ffffff;
|
|
67
|
+
--eth-btn-success-bg: var(--eth-color-success);
|
|
68
|
+
--eth-btn-success-bg-hover: var(--eth-palette-green-700);
|
|
69
|
+
--eth-btn-success-text: #ffffff;
|
|
70
|
+
--eth-btn-disabled-bg: var(--eth-color-layer-02);
|
|
71
|
+
--eth-btn-disabled-text: var(--eth-color-text-helper);
|
|
72
|
+
--eth-btn-primary-border: 1px solid var(--eth-btn-primary-bg);
|
|
73
|
+
--eth-btn-secondary-border: 1px solid var(--eth-btn-secondary-bg);
|
|
74
|
+
--eth-btn-tertiary-border: var(--eth-border-width-1) solid var(--eth-btn-tertiary-text);
|
|
75
|
+
--eth-btn-ghost-border: 1px solid transparent;
|
|
76
|
+
--eth-btn-danger-border: 1px solid var(--eth-btn-danger-bg);
|
|
77
|
+
--eth-btn-success-border: 1px solid var(--eth-btn-success-bg);
|
|
78
|
+
--eth-btn-disabled-border: 1px solid var(--eth-btn-disabled-bg);
|
|
79
|
+
--eth-btn-shadow: none;
|
|
80
|
+
--eth-btn-backdrop-filter: none;
|
|
81
|
+
|
|
82
|
+
/* ---- Card ---- */
|
|
83
|
+
--eth-card-bg: var(--eth-color-card);
|
|
84
|
+
--eth-card-radius: var(--eth-radius-card);
|
|
85
|
+
--eth-card-shadow: var(--eth-shadow-card);
|
|
86
|
+
--eth-card-backdrop-filter: var(--eth-backdrop-filter);
|
|
87
|
+
--eth-card-header-bg: transparent;
|
|
88
|
+
--eth-card-footer-bg: transparent;
|
|
89
|
+
--eth-card-divider: var(--eth-divider-width) solid var(--eth-divider-color);
|
|
90
|
+
|
|
91
|
+
/* ---- Control (segmented controls, chips, triggers) ---- */
|
|
92
|
+
--eth-control-bg: var(--eth-color-control);
|
|
93
|
+
--eth-control-bg-hover: var(--eth-color-control-hover);
|
|
94
|
+
--eth-control-bg-active: var(--eth-color-layer-hover);
|
|
95
|
+
--eth-control-bg-selected: var(--eth-color-layer-selected);
|
|
96
|
+
--eth-control-bg-disabled: var(--eth-color-layer-02);
|
|
97
|
+
--eth-control-text: var(--eth-color-text-primary);
|
|
98
|
+
--eth-control-text-disabled: var(--eth-color-text-helper);
|
|
99
|
+
--eth-control-radius: var(--eth-radius-control);
|
|
100
|
+
--eth-control-focus-ring: var(--eth-focus-ring);
|
|
101
|
+
|
|
102
|
+
/* ---- Table ---- */
|
|
103
|
+
--eth-table-bg: var(--eth-color-layer-01);
|
|
104
|
+
--eth-table-border: var(--eth-card-border);
|
|
105
|
+
--eth-table-radius: var(--eth-radius-card);
|
|
106
|
+
--eth-table-shadow: var(--eth-shadow-card);
|
|
107
|
+
--eth-table-header-bg: var(--eth-color-layer-02);
|
|
108
|
+
--eth-table-header-text: var(--eth-color-text-secondary);
|
|
109
|
+
--eth-table-row-bg: var(--eth-color-layer-01);
|
|
110
|
+
--eth-table-row-bg-alt: var(--eth-color-layer-01);
|
|
111
|
+
--eth-table-row-hover-bg: var(--eth-color-layer-hover);
|
|
112
|
+
--eth-table-row-selected-bg: var(--eth-color-layer-selected);
|
|
113
|
+
--eth-table-row-selected-hover-bg: var(--eth-color-layer-selected);
|
|
114
|
+
--eth-table-row-selected-accent: var(--eth-color-interactive-primary);
|
|
115
|
+
--eth-table-cell-text: var(--eth-color-text-primary);
|
|
116
|
+
--eth-table-gridline: var(--eth-color-border-subtle);
|
|
117
|
+
--eth-table-gridline-width: var(--eth-border-width-1);
|
|
118
|
+
|
|
119
|
+
/* Which cell edges draw gridlines: both | horizontal | none */
|
|
120
|
+
--eth-table-gridline-axis: both;
|
|
121
|
+
--eth-table-row-border: var(--eth-table-gridline-width) solid var(--eth-table-gridline);
|
|
122
|
+
--eth-table-column-border: var(--eth-table-gridline-width) solid var(--eth-table-gridline);
|
|
123
|
+
--eth-table-backdrop-filter: none;
|
|
124
|
+
|
|
125
|
+
/* ---- Divider ---- */
|
|
126
|
+
--eth-divider-color: var(--eth-color-border-subtle);
|
|
127
|
+
--eth-divider-width: var(--eth-border-width-1);
|
|
128
|
+
|
|
129
|
+
/* ---- Overlay / popover (portaled) ---- */
|
|
130
|
+
--eth-overlay-bg: rgb(22 22 22 / 50%);
|
|
131
|
+
--eth-popover-bg: var(--eth-color-overlay);
|
|
132
|
+
--eth-popover-border: var(--eth-overlay-border);
|
|
133
|
+
--eth-popover-radius: var(--eth-radius-overlay);
|
|
134
|
+
--eth-popover-shadow: var(--eth-shadow-overlay);
|
|
135
|
+
--eth-popover-blur: var(--eth-backdrop-filter-overlay);
|
|
136
|
+
|
|
137
|
+
/* ---- Status / feedback (subtle: tinted bg + readable fg). Light default. */
|
|
138
|
+
--eth-status-info-bg: var(--eth-palette-blue-50);
|
|
139
|
+
--eth-status-info-text: var(--eth-palette-blue-700);
|
|
140
|
+
--eth-status-info-border: var(--eth-palette-blue-300);
|
|
141
|
+
--eth-status-info-icon: var(--eth-palette-blue-500);
|
|
142
|
+
--eth-status-success-bg: var(--eth-palette-green-50);
|
|
143
|
+
--eth-status-success-text: var(--eth-palette-green-700);
|
|
144
|
+
--eth-status-success-border: var(--eth-palette-green-300);
|
|
145
|
+
--eth-status-success-icon: var(--eth-palette-green-500);
|
|
146
|
+
--eth-status-warning-bg: var(--eth-palette-yellow-50);
|
|
147
|
+
--eth-status-warning-text: var(--eth-palette-yellow-700);
|
|
148
|
+
--eth-status-warning-border: var(--eth-palette-yellow-300);
|
|
149
|
+
--eth-status-warning-icon: var(--eth-palette-yellow-500);
|
|
150
|
+
--eth-status-danger-bg: var(--eth-palette-red-50);
|
|
151
|
+
--eth-status-danger-text: var(--eth-palette-red-700);
|
|
152
|
+
--eth-status-danger-border: var(--eth-palette-red-300);
|
|
153
|
+
--eth-status-danger-icon: var(--eth-palette-red-500);
|
|
154
|
+
--eth-status-neutral-bg: var(--eth-palette-neutral-100);
|
|
155
|
+
--eth-status-neutral-text: var(--eth-palette-neutral-700);
|
|
156
|
+
--eth-status-neutral-border: var(--eth-palette-neutral-200);
|
|
157
|
+
--eth-status-neutral-icon: var(--eth-palette-neutral-500);
|
|
158
|
+
|
|
159
|
+
/* ---- Typography choices (families/weights; sizes live in type-scale.css) */
|
|
160
|
+
--eth-font-family-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
161
|
+
--eth-font-family-mono: "IBM Plex Mono", "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
162
|
+
--eth-font-weight-title: 600;
|
|
163
|
+
--eth-font-weight-body: 400;
|
|
164
|
+
|
|
165
|
+
/* ---- Density sizing (standard defaults; variants in density.css) ---- */
|
|
166
|
+
--eth-control-height: 40px;
|
|
167
|
+
--eth-control-padding-inline: 1rem;
|
|
168
|
+
--eth-control-padding-block: 0.5rem;
|
|
169
|
+
--eth-row-height: 48px;
|
|
170
|
+
--eth-cell-padding-inline: var(--eth-space-6);
|
|
171
|
+
--eth-cell-padding-block: var(--eth-space-4);
|
|
172
|
+
--eth-field-gap: var(--eth-space-5);
|
|
173
|
+
--eth-section-gap: var(--eth-space-9);
|
|
174
|
+
--eth-card-padding: var(--eth-space-8);
|
|
175
|
+
}
|