[data-words] { --_words-gap: var(--words-gap-md); --_words-radius: var(--words-radius-md); --_words-content-px: var(--words-content-px-md); --_words-content-py: var(--words-content-py-md); --_words-content-min-block-size: var(--words-content-min-block-size-md); --_words-toolbar-px: var(--words-toolbar-px-md); --_words-toolbar-py: var(--words-toolbar-py-md); --_words-button-size: var(--words-button-size-md); --_words-font-size: var(--words-font-size-md); /* `--_words-accent-*` is TSC-emitted from `lib/recipes/base.ts > words._accent-*`. */ --_words-selection-bg: color-mix(in srgb, var(--_words-accent-solid) 78%, transparent); --_words-selection-color: var(--words-selection-color); --_words-check-size: calc(var(--_words-button-size) * 0.46); --_words-check-mark-width: calc(var(--_words-check-size) * 0.32); --_words-check-mark-height: calc(var(--_words-check-size) * 0.56); --_words-check-mark-stroke: var(--words-border-width); --_words-check-mark-offset: calc(var(--_words-check-size) * -0.05); --toolbar-gap-md: var(--words-toolbar-gap); --toolbar-padding-inline-sm: var(--_words-toolbar-px); --toolbar-padding-inline-md: var(--_words-toolbar-px); --toolbar-padding-block-sm: var(--_words-toolbar-py); --toolbar-padding-block-md: var(--_words-toolbar-py); --toolbar-control-height-sm: var(--_words-button-size); --toolbar-control-height-md: var(--_words-button-size); --toolbar-control-px-sm: var(--words-command-px); --toolbar-control-px-md: var(--words-command-px); --toolbar-control-gap-sm: var(--words-command-gap); --toolbar-control-gap-md: var(--words-command-gap); --toolbar-font-size-sm: var(--_words-font-size); --toolbar-font-size-md: var(--_words-font-size); --toolbar-bg: var(--words-toolbar-bg); --toolbar-border: transparent; --toolbar-shadow: none; --toolbar-color: var(--words-command-color); --toolbar-font-family: var(--words-font-family); --toolbar-line-height: var(--words-line-height); --toolbar-group-gap: var(--words-command-gap); --toolbar-control-border-width: var(--words-border-width); --toolbar-control-border: transparent; --toolbar-control-radius: var(--words-command-radius); --toolbar-control-bg: transparent; --toolbar-control-color: var(--words-command-color); --toolbar-control-border-hover: var(--words-command-border-hover); --toolbar-control-bg-hover: var(--words-command-bg-hover); --toolbar-control-color-hover: var(--words-command-color-hover); --toolbar-control-border-active: var(--_words-accent-border); --toolbar-control-bg-active: var(--_words-accent-track); --toolbar-control-color-active: var(--_words-accent-text); --toolbar-focus-shadow: var(--words-focus-shadow); --toolbar-disabled-opacity: var(--words-disabled-opacity); --toolbar-transition-duration: var(--words-transition-duration); --toolbar-transition-ease: var(--words-transition-ease); position: relative; display: flex; flex-direction: column; inline-size: 100%; max-inline-size: var(--words-max-inline-size); overflow: hidden; border: var(--words-border-width) solid var(--words-border); border-radius: var(--_words-radius); background: var(--words-bg); box-shadow: var(--words-shadow); color: var(--words-color); font-family: var(--words-font-family); font-size: var(--_words-font-size); line-height: var(--words-line-height); transition: border-color var(--words-transition-duration) var(--words-transition-ease), box-shadow var(--words-transition-duration) var(--words-transition-ease), background var(--words-transition-duration) var(--words-transition-ease); } [data-words][data-size='sm'] { --_words-gap: var(--words-gap-sm); --_words-radius: var(--words-radius-sm); --_words-content-px: var(--words-content-px-sm); --_words-content-py: var(--words-content-py-sm); --_words-content-min-block-size: var(--words-content-min-block-size-sm); --_words-toolbar-px: var(--words-toolbar-px-sm); --_words-toolbar-py: var(--words-toolbar-py-sm); --_words-button-size: var(--words-button-size-sm); --_words-font-size: var(--words-font-size-sm); } [data-words][data-size='lg'] { --_words-gap: var(--words-gap-lg); --_words-radius: var(--words-radius-lg); --_words-content-px: var(--words-content-px-lg); --_words-content-py: var(--words-content-py-lg); --_words-content-min-block-size: var(--words-content-min-block-size-lg); --_words-toolbar-px: var(--words-toolbar-px-lg); --_words-toolbar-py: var(--words-toolbar-py-lg); --_words-button-size: var(--words-button-size-lg); --_words-font-size: var(--words-font-size-lg); } [data-words][data-variant='outline'] { background: transparent; box-shadow: none; } [data-words][data-variant='ghost'] { border-color: transparent; background: transparent; box-shadow: none; } [data-words]:hover:not([data-disabled]):not([data-readonly]) { border-color: var(--words-border-hover); } [data-words][data-focused] { border-color: var(--_words-accent-border); box-shadow: var(--words-focus-shadow); } [data-words][data-invalid] { border-color: var(--words-invalid-border); } [data-words][data-disabled] { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words]:has([data-words-toolbar][data-orientation='vertical']) { display: grid; grid-template-columns: max-content minmax(0, 1fr); grid-template-rows: auto auto; } /* ── Companion Drawer (right-rail) ─────────────────────────────────────── Layout: when the editor host contains a [data-words-drawer], place the drawer in a dedicated right column that spans toolbar+content+ status rows. Children without a grid-area placement (BubbleMenu / SlashMenu / HiddenInput / find-replace etc.) are absolute-positioned or hidden inputs that don't participate in the visual flow. */ [data-words]:has([data-words-drawer]) { display: grid; grid-template-columns: minmax(0, 1fr) max-content; grid-template-rows: auto minmax(0, 1fr) auto; grid-template-areas: 'toolbar drawer' 'content drawer' 'status drawer'; column-gap: 0; } [data-words]:has([data-words-drawer]) > [data-words-toolbar] { grid-area: toolbar; } [data-words]:has([data-words-drawer]) > [data-words-content], [data-words]:has([data-words-drawer]) > [data-words-placeholder] { grid-area: content; } [data-words]:has([data-words-drawer]) > [data-words-status] { grid-area: status; } [data-words]:has([data-words-drawer]) > [data-words-drawer] { grid-area: drawer; } [data-words-drawer] { display: flex; flex-direction: column; inline-size: 14rem; max-inline-size: 18rem; block-size: 100%; min-block-size: 100%; padding: 0; border-inline-start: var(--words-border-width) solid var(--words-toolbar-border); background: var(--words-toolbar-bg); color: var(--words-command-color); font-size: var(--words-status-font-size); overflow: hidden; transition: inline-size 160ms ease; } [data-words-drawer]:not([data-open]) { inline-size: 2.25rem; max-inline-size: 2.25rem; } [data-words-drawer-header] { display: flex; align-items: center; gap: var(--words-command-gap); padding-block: var(--words-toolbar-py-sm); padding-inline: var(--words-toolbar-px-sm); border-block-end: var(--words-border-width) solid var(--words-toolbar-border); background: color-mix(in srgb, var(--_words-accent-solid) 5%, transparent); } [data-words-drawer-collapse] { display: inline-flex; align-items: center; justify-content: center; inline-size: 1.5rem; block-size: 1.5rem; padding: 0; border: 0; border-radius: var(--words-command-radius); background: transparent; color: var(--words-command-color); cursor: pointer; } [data-words-drawer-collapse]:hover { background: color-mix(in srgb, var(--_words-accent-solid) 12%, transparent); } [data-words-drawer-title] { font-weight: var(--words-strong-font-weight); letter-spacing: 0.02em; text-transform: uppercase; font-size: 0.7rem; color: var(--words-status-color); } [data-words-drawer-body] { display: flex; flex-direction: column; gap: 0; padding: 0; overflow-y: auto; flex: 1; } [data-words-drawer-section] { padding-block: var(--words-toolbar-py-sm); padding-inline: var(--words-toolbar-px-sm); border-block-end: var(--words-border-width) solid color-mix(in srgb, var(--words-toolbar-border) 60%, transparent); } [data-words-drawer-section]:last-child { border-block-end: 0; } [data-words-drawer-section][data-flush]:not(:last-child) { margin-block-end: var(--words-toolbar-py-sm); } [data-words-drawer-section][data-flush]:first-child { padding-block-start: 0; } /* Hierarchical panels (HIER) — each scope in the modes[] stack is a collapsible
with its own header + body. Default heuristic: the topmost (most-specific) panel is open, the rest collapsed but accessible by tapping the header chevron. */ [data-words-drawer-panel] { display: flex; flex-direction: column; border-block-end: var(--words-border-width) solid color-mix(in srgb, var(--words-toolbar-border) 60%, transparent); } [data-words-drawer-panel]:last-child { border-block-end: 0; } [data-words-drawer-panel-header] { display: flex; align-items: center; justify-content: space-between; gap: var(--words-command-gap); padding-block: 0.35rem; padding-inline: var(--words-toolbar-px-sm); border: 0; background: transparent; color: var(--words-status-color); font-size: 0.7rem; font-weight: var(--words-strong-font-weight); letter-spacing: 0.04em; text-transform: uppercase; text-align: start; cursor: pointer; } [data-words-drawer-panel-header]:hover { background: color-mix(in srgb, var(--_words-accent-solid) 5%, transparent); color: var(--_words-accent-text); } [data-words-drawer-panel][data-open] [data-words-drawer-panel-header] { background: color-mix(in srgb, var(--_words-accent-solid) 4%, transparent); color: var(--words-command-color); } /* Per-scope accent — each category of scope gets a distinct hue so the user can read the panel's *kind* at a glance: - Text scopes (format, block) → primary (project accent) - Structure scopes (cell, row, table, list, list-item) → secondary - Media scopes (image, code) → fulfill (tealish) - Default (document) → neutral Variables here resolve from the eidos color tokens, so themes re-tint everything coherently. */ [data-words-drawer-panel][data-mode='default'] { --_drawer-scope-accent: var(--words-toolbar-border); --_drawer-scope-tint: var(--words-toolbar-bg); } [data-words-drawer-panel][data-mode='format'], [data-words-drawer-panel][data-mode='block'] { --_drawer-scope-accent: var(--_words-accent-border); --_drawer-scope-tint: color-mix(in srgb, var(--_words-accent-solid) 6%, transparent); } [data-words-drawer-panel][data-mode='cell'], [data-words-drawer-panel][data-mode='row'], [data-words-drawer-panel][data-mode='table'], [data-words-drawer-panel][data-mode='list'], [data-words-drawer-panel][data-mode='list-item'] { --_drawer-scope-accent: var(--words-secondary-text); --_drawer-scope-tint: color-mix(in srgb, var(--words-secondary-text) 6%, transparent); } [data-words-drawer-panel][data-mode='image'], [data-words-drawer-panel][data-mode='code'] { --_drawer-scope-accent: var(--words-fulfill-text); --_drawer-scope-tint: color-mix(in srgb, var(--words-fulfill-text) 6%, transparent); } /* Depth indicator — leaf panel is full-strength scope accent; deeper panels render the same hue at decreasing alpha so the precedence is readable visually. */ [data-words-drawer-panel][data-depth='0'] { border-inline-start: 3px solid var(--_drawer-scope-accent); } [data-words-drawer-panel][data-depth='1'] { border-inline-start: 3px solid color-mix(in srgb, var(--_drawer-scope-accent) 65%, transparent); } [data-words-drawer-panel][data-depth='2'] { border-inline-start: 3px solid color-mix(in srgb, var(--_drawer-scope-accent) 40%, transparent); } [data-words-drawer-panel][data-depth='3'] { border-inline-start: 3px solid color-mix(in srgb, var(--_drawer-scope-accent) 25%, transparent); } /* When the panel is open, paint its header with the scope tint so the active scope reads at a glance. */ [data-words-drawer-panel][data-open] [data-words-drawer-panel-header] { background: var(--_drawer-scope-tint); color: var(--_drawer-scope-accent); } /* Action chip active state — inherit the scope accent so the selected variant matches the panel's color identity. */ [data-words-drawer-panel] [data-words-drawer-action][data-active] { background: color-mix(in srgb, var(--_drawer-scope-accent, var(--_words-accent-solid)) 20%, var(--words-bg)); border-color: var(--_drawer-scope-accent, var(--_words-accent-border)); color: var(--_drawer-scope-accent, var(--_words-accent-text)); } [data-words-drawer-panel-title] { flex: 1; } [data-words-drawer-panel-body] { display: flex; flex-direction: column; gap: 0.4rem; padding-block-end: var(--words-toolbar-py-sm); padding-inline: var(--words-toolbar-px-sm); } [data-words-drawer-section-subtitle] { color: var(--words-status-color); font-size: 0.65rem; font-weight: var(--words-strong-font-weight); letter-spacing: 0.04em; text-transform: uppercase; } /* Drawer header trail — shows the breadcrumb of stacked modes after the leaf so the user knows what scopes are stacked underneath. */ [data-words-drawer-trail] { display: inline-flex; gap: 0.2rem; margin-inline-start: 0.4rem; color: var(--words-status-color); font-size: 0.65rem; font-weight: normal; letter-spacing: 0; text-transform: none; } [data-words-drawer-trail-sep] { opacity: 0.5; } [data-words-drawer-actions][data-flush] { margin-block-start: 0.4rem; } /* Color picker — palette of swatches + a native for free-pick + a clear button when a value is set. */ [data-words-drawer-color-picker] { display: flex; flex-wrap: wrap; align-items: center; gap: 0.25rem; } [data-words-drawer-color-swatch] { inline-size: 1.25rem; block-size: 1.25rem; padding: 0; border: 1px solid color-mix(in srgb, var(--words-toolbar-border) 60%, transparent); border-radius: 999px; cursor: pointer; transition: transform 80ms ease, box-shadow 80ms ease; } [data-words-drawer-color-swatch]:hover { transform: scale(1.15); box-shadow: 0 0 0 2px color-mix(in srgb, var(--_words-accent-solid) 30%, transparent); } [data-words-drawer-color-swatch][data-active] { box-shadow: 0 0 0 2px var(--words-bg), 0 0 0 4px var(--_words-accent-solid); } [data-words-drawer-color-input] { inline-size: 1.6rem; block-size: 1.4rem; padding: 0; border: 1px dashed color-mix(in srgb, var(--words-toolbar-border) 80%, transparent); border-radius: var(--words-command-radius); background: transparent; cursor: pointer; } [data-words-drawer-color-input]:hover { border-style: solid; border-color: var(--_words-accent-border); } [data-words-drawer-color-clear] { display: inline-flex; align-items: center; justify-content: center; inline-size: 1.25rem; block-size: 1.25rem; padding: 0; border: 1px solid color-mix(in srgb, var(--words-toolbar-border) 60%, transparent); border-radius: 999px; background: transparent; color: var(--words-status-color); font-size: 0.9rem; line-height: 1; cursor: pointer; } [data-words-drawer-color-clear]:hover { border-color: var(--words-threat-text); color: var(--words-threat-text); } [data-words-drawer-section-title] { display: flex; align-items: baseline; gap: var(--words-command-gap); margin: 0 0 var(--words-toolbar-py-sm) 0; font-size: 0.7rem; font-weight: var(--words-strong-font-weight); letter-spacing: 0.04em; text-transform: uppercase; color: var(--words-status-color); } [data-words-drawer-section-count] { display: inline-flex; align-items: center; justify-content: center; min-inline-size: 1.25rem; padding-block: 0; padding-inline: 0.3rem; border-radius: 999px; background: var(--_words-accent-solid); color: var(--_words-accent-on); font-size: 0.65rem; } [data-words-drawer-empty] { margin: 0; color: var(--words-status-color); font-style: italic; font-size: 0.8rem; } [data-words-drawer-empty][data-tone='affirm'] { color: var(--words-affirm-text); font-style: normal; } [data-words-drawer-outline] { display: flex; flex-direction: column; gap: 0.25rem; margin: 0; padding: 0; list-style: none; } [data-words-drawer-outline-item] { display: flex; align-items: baseline; gap: 0.4rem; padding-inline-start: 0; font-size: 0.8rem; line-height: 1.3; } [data-words-drawer-outline-item][data-level='2'] { padding-inline-start: 0.75rem; } [data-words-drawer-outline-item][data-level='3'] { padding-inline-start: 1.5rem; } [data-words-drawer-outline-bullet] { flex-shrink: 0; min-inline-size: 1.5rem; color: var(--_words-accent-text); font-size: 0.65rem; font-weight: var(--words-strong-font-weight); letter-spacing: 0.04em; } [data-words-drawer-outline-text] { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } [data-words-drawer-stats] { display: grid; grid-template-columns: 1fr 1fr; gap: 0.25rem 0.5rem; margin: 0; } [data-words-drawer-stats] > div { display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem; font-size: 0.8rem; } [data-words-drawer-stats] dt { margin: 0; color: var(--words-status-color); font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.04em; } [data-words-drawer-stats] dd { margin: 0; font-weight: var(--words-strong-font-weight); } [data-words-drawer-warnings] { display: flex; flex-direction: column; gap: 0.4rem; margin: 0; padding: 0; list-style: none; } [data-words-drawer-warnings] li { padding-block: 0.35rem; padding-inline: 0.5rem; border-radius: var(--words-command-radius); background: color-mix(in srgb, var(--words-toolbar-border) 30%, transparent); font-size: 0.75rem; line-height: 1.35; } [data-words-drawer-warnings] li[data-severity='warn'] { background: color-mix(in srgb, var(--words-risk-text) 12%, transparent); color: var(--words-risk-text); } /* Contextual panel actions (DRAWER-2) ---------------------------------- */ [data-words-drawer-actions] { display: flex; flex-wrap: wrap; gap: 0.3rem; } [data-words-drawer-action] { display: inline-flex; align-items: center; justify-content: center; min-inline-size: 2rem; padding-block: 0.3rem; padding-inline: 0.55rem; border: var(--words-border-width) solid color-mix(in srgb, var(--words-toolbar-border) 80%, transparent); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-command-color); font-size: 0.75rem; font-weight: var(--words-strong-font-weight); cursor: pointer; transition: background-color 100ms ease, border-color 100ms ease; } [data-words-drawer-action]:hover { background: color-mix(in srgb, var(--_words-accent-solid) 8%, var(--words-bg)); border-color: var(--_words-accent-border); } [data-words-drawer-action][data-active] { background: color-mix(in srgb, var(--_words-accent-solid) 18%, var(--words-bg)); border-color: var(--_words-accent-border); color: var(--_words-accent-text); } [data-words-drawer-action][data-tone='full'] { background: var(--_words-accent-solid); border-color: var(--_words-accent-solid); color: var(--_words-accent-on); } [data-words-drawer-action][data-tone='ghost'] { background: transparent; border-style: dashed; } [data-words-drawer-action][data-tone='risk']:hover { background: color-mix(in srgb, var(--words-risk-text) 15%, var(--words-bg)); border-color: var(--words-risk-text); color: var(--words-risk-text); } [data-words-drawer-readonly-text] { margin: 0; padding-block: 0.3rem; padding-inline: 0.5rem; border-radius: var(--words-command-radius); background: color-mix(in srgb, var(--words-toolbar-border) 30%, transparent); color: var(--words-command-color); font-size: 0.75rem; line-height: 1.35; word-break: break-all; } [data-words-drawer-readonly-text][data-empty='true'] { color: var(--words-status-color); font-style: italic; } [data-words-drawer-readonly-text][data-tone='pending'] { background: color-mix(in srgb, var(--_words-accent-solid) 10%, transparent); color: var(--_words-accent-text); } [data-words-drawer-readonly-text][data-tone='error'] { background: color-mix(in srgb, var(--words-threat-text) 12%, transparent); color: var(--words-threat-text); } [data-words]:has([data-words-toolbar][data-orientation='vertical']):has([data-words-find-replace]) { grid-template-rows: auto auto auto; } [data-words-toolbar] { /* Horizontal layout: single row with horizontal scroll on narrow viewports. Was previously `flex-wrap: wrap` which produced 2-3 line wraps on mobile with orphan icons. The horizontal-scroll pattern is what Google Docs / Word / Notion use on mobile and keeps every command reachable without changing the markup. */ display: flex; flex-wrap: nowrap; align-items: center; gap: var(--words-toolbar-gap); inline-size: 100%; padding-block: var(--_words-toolbar-py); padding-inline: var(--_words-toolbar-px); border: 0; border-block-end: var(--words-border-width) solid var(--words-toolbar-border); border-radius: 0; background: var(--words-toolbar-bg); box-shadow: none; overflow-x: auto; overflow-y: clip; scrollbar-width: thin; /* Mask a soft fade on the trailing edge when content overflows so the user has a visual cue there's more. The fade lives in a mask-image rather than a real element to keep markup unchanged. */ mask-image: linear-gradient( to inline-end, black calc(100% - 1.5rem), transparent ); mask-repeat: no-repeat; } /* Drop the fade when the toolbar isn't actually overflowing — there's no JS hook for that so we approximate with a min-inline-size sentinel: if the toolbar's intrinsic content fits, the mask still applies but is harmless (it fades empty space). Keeping for simplicity. */ [data-words-toolbar][data-orientation='vertical'] { grid-column: 1; grid-row: 1; flex-direction: column; flex-wrap: nowrap; align-items: stretch; inline-size: max-content; border-block-end: 0; border-inline-end: var(--words-border-width) solid var(--words-toolbar-border); overflow-x: visible; overflow-y: auto; mask-image: none; } [data-words-toolbar-group] { display: inline-flex; flex-wrap: nowrap; align-items: center; gap: var(--words-command-gap); min-inline-size: 0; flex-shrink: 0; } [data-words-toolbar-group][data-orientation='vertical'] { flex-direction: column; flex-wrap: nowrap; align-items: stretch; } [data-words-bubble-menu] { --_words-bubble-offset: var(--words-toolbar-py-md); --_words-bubble-y-shift: calc(-100% - var(--_words-bubble-offset)); --_words-bubble-bg: var(--words-toolbar-bg); position: fixed; z-index: var(--z-index-popover); inset-block-start: var(--_words-bubble-y); inset-inline-start: var(--_words-bubble-x); display: inline-flex; align-items: center; gap: var(--words-command-gap); max-inline-size: 92vw; padding-block: var(--words-toolbar-py-sm); padding-inline: var(--words-toolbar-px-sm); border: var(--words-border-width) solid var(--_words-accent-border); border-radius: var(--words-command-radius); background: var(--_words-bubble-bg); box-shadow: var(--words-shadow); color: var(--words-command-color); transform: translate(-50%, var(--_words-bubble-y-shift)); } [data-words-bubble-menu][data-side='bottom'] { --_words-bubble-y-shift: var(--_words-bubble-offset); } [data-words-bubble-menu][hidden], [data-words-bubble-menu]:not([data-open]), [data-words-bubble-menu]:not([data-positioned]) { display: none; } [data-words-bubble-menu] [data-words-link-editor] { grid-template-columns: minmax(0, 1fr) auto; } [data-words-slash-menu] { position: fixed; z-index: var(--z-index-popover); inset-block-start: var(--_words-slash-y); inset-inline-start: var(--_words-slash-x); display: grid; gap: var(--button-gap-xs); /* Widened from 7× to 10× button-size so option descriptions ("Large section heading", "Blockquote callout") fit instead of clipping with ellipsis. Still capped at 92vw for mobile. */ inline-size: min(calc(var(--_words-button-size) * 10), 92vw); max-block-size: min(calc(var(--_words-button-size) * 10), 70vh); overflow: auto; padding: var(--words-toolbar-py-sm); border: var(--words-border-width) solid var(--_words-accent-border); border-radius: var(--words-command-radius); background: var(--words-toolbar-bg); box-shadow: var(--words-shadow); color: var(--words-command-color); transform: translateY(var(--words-toolbar-py-sm)); } [data-words-slash-menu][hidden], [data-words-slash-menu]:not([data-open]) { display: none; } [data-words-slash-option] { display: grid; grid-template-columns: var(--_words-button-size) minmax(0, 1fr); align-items: center; gap: var(--words-command-gap); inline-size: 100%; min-inline-size: 0; padding-block: var(--button-gap-xs); padding-inline: var(--words-command-px); border: var(--words-border-width) solid transparent; border-radius: var(--words-command-radius); background: transparent; color: var(--words-command-color); font: inherit; text-align: start; cursor: pointer; } [data-words-slash-option]:hover:not(:disabled):not([data-disabled]), [data-words-slash-option][data-active] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-slash-option]:focus-visible { box-shadow: var(--words-focus-shadow); outline: none; } [data-words-slash-option]:disabled, [data-words-slash-option][data-disabled] { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-slash-icon] { display: inline-flex; align-items: center; justify-content: center; inline-size: var(--_words-button-size); block-size: var(--_words-button-size); color: inherit; } [data-words-slash-copy] { display: grid; gap: var(--words-code-py); min-inline-size: 0; } [data-words-slash-label] { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: inherit; font-weight: var(--words-strong-font-weight); } /* Description wraps to up to 2 lines instead of single-line ellipsis so the user sees the full "Plain text block" / "Large section heading" description rather than a truncated tail. line-clamp keeps the menu compact regardless of unusually long custom descriptions. */ [data-words-slash-description] { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; min-inline-size: 0; overflow: hidden; color: var(--words-status-color); font-size: var(--words-status-font-size); line-height: 1.3; } [data-words-slash-option][data-active] [data-words-slash-description] { color: inherit; } [data-words-command-button] { min-inline-size: var(--_words-button-size); block-size: var(--_words-button-size); } [data-words-command-button][data-command] { display: inline-flex; flex-direction: row; inline-size: auto; border-color: var(--_button-border); border-radius: var(--_button-radius); background: var(--_button-bg); box-shadow: var(--button-shadow); overflow: visible; } [data-words-command-button][data-active], [data-words-command-button][data-state='on'] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-command-button][data-command='commit'] { border-color: var(--_words-accent-solid); background: var(--_words-accent-solid); color: var(--words-command-solid-color); } [data-words-command-button][data-command='commit']:hover:not(:disabled):not([data-disabled]) { border-color: var(--_words-accent-solid-hover); background: var(--_words-accent-solid-hover); color: var(--words-command-solid-color); } [data-words-command-button]:disabled, [data-words-command-button][data-disabled] { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-floating] { --_words-toolbar-px: var(--words-toolbar-px-md); --_words-toolbar-py: var(--words-toolbar-py-md); --_words-button-size: var(--button-height-xs); --_words-font-size: var(--words-font-size-md); --_words-accent-solid: var(--words-primary-solid); --_words-accent-solid-hover: var(--words-primary-solid-hover); --_words-accent-track: var(--words-primary-track); --_words-accent-border: var(--words-primary-border); --_words-accent-text: var(--words-primary-text); --toolbar-focus-shadow: var(--words-focus-shadow); --toolbar-disabled-opacity: var(--words-disabled-opacity); } [data-words-link-editor] { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--words-command-gap); padding: 0; background: transparent; } [data-words-link-editor][data-invalid] { background: color-mix(in srgb, var(--words-invalid-border) 8%, var(--words-toolbar-bg)); } [data-words-link-editor][data-disabled] { opacity: var(--words-disabled-opacity); } [data-words-heading-picker] { min-inline-size: var(--_words-button-size); block-size: var(--_words-button-size); } [data-words-toolbar-family] { display: inline-flex; align-items: center; justify-content: center; gap: var(--words-code-py); min-inline-size: calc(var(--_words-button-size) + 1rem); block-size: var(--_words-button-size); padding-inline: var(--button-gap-xs); border: var(--words-border-width) solid transparent; border-radius: var(--words-command-radius); background: transparent; color: var(--words-command-color); font: inherit; cursor: pointer; } [data-words-toolbar-family]:hover:not(:disabled):not([data-disabled]), [data-words-toolbar-family][data-active], [data-words-toolbar-family][data-state='open'] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-toolbar-family]:disabled, [data-words-toolbar-family][data-disabled] { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-code-language-picker] { display: inline-flex; align-items: center; justify-content: center; gap: var(--words-command-gap); min-inline-size: calc(var(--_words-button-size) + 3ch); block-size: var(--_words-button-size); padding-inline: var(--button-gap-xs); border: var(--words-border-width) solid transparent; border-radius: var(--words-command-radius); background: transparent; color: var(--words-command-color); font: inherit; cursor: pointer; } [data-words-code-language-picker]:hover:not(:disabled):not([data-disabled]), [data-words-code-language-picker][data-active] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-code-language-picker]:disabled, [data-words-code-language-picker][data-disabled] { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-code-language-value] { min-inline-size: 2.5ch; font-size: var(--words-status-font-size); font-variant-numeric: tabular-nums; text-align: start; } [data-words-find-trigger] { display: inline-flex; align-items: center; justify-content: center; align-self: flex-start; inline-size: var(--_words-button-size); min-inline-size: var(--_words-button-size); block-size: var(--_words-button-size); padding: 0; border: var(--words-border-width) solid transparent; border-radius: var(--words-command-radius); background: transparent; color: var(--words-command-color); } [data-words-find-trigger]:hover:not(:disabled):not([data-disabled]) { border-color: var(--words-command-border-hover); background: var(--words-command-bg-hover); color: var(--words-command-color-hover); } [data-words] > [data-words-find-trigger] { margin-block-start: var(--_words-toolbar-py); margin-inline-start: var(--_words-toolbar-px); } [data-words-find-trigger][data-state='open'], [data-words-find-trigger][data-has-matches] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-heading-picker-panel] { display: grid; grid-template-columns: repeat(4, var(--_words-button-size)); gap: var(--button-gap-xs); } [data-words-heading-picker-panel] [data-words-command-button] { inline-size: var(--_words-button-size); block-size: var(--_words-button-size); justify-self: stretch; } [data-words-toolbar-family-panel] { display: grid; gap: var(--button-gap-xs); inline-size: min(12.5rem, calc(100vw - var(--space-4))); max-inline-size: calc(100vw - var(--space-4)); } [data-words-toolbar-family-panel][data-family='table'] { inline-size: min(18rem, calc(100vw - var(--space-4))); gap: var(--button-gap-xs); } [data-words-toolbar-family-panel] [data-toolbar-button], [data-words-toolbar-family-panel] [data-words-command-button], [data-words-toolbar-family-panel] [data-words-code-language-picker], [data-words-toolbar-family-panel] [data-words-find-trigger] { justify-content: flex-start; inline-size: 100%; } [data-words-toolbar-family-panel] [data-words-command-button] { min-inline-size: 0; } [data-words-toolbar-family-panel] [data-words-command-button] .eidos-button-body { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [data-words-toolbar-family-panel][data-family='table'] [data-words-command-button] { min-block-size: calc(var(--_words-button-size) * 1.08); block-size: calc(var(--_words-button-size) * 1.08); padding-inline: var(--button-gap-xs); } [data-words-toolbar-family-panel][data-family='table'] [data-words-command-button] .eidos-button-body { font-size: var(--words-status-font-size); } [data-words-toolbar-family-panel][data-family='table'] [data-command='table-cell-tone-muted'] { background: color-mix(in srgb, var(--words-toolbar-bg) 86%, transparent); } [data-words-toolbar-family-panel][data-family='table'] [data-command='table-cell-tone-accent'] { background: color-mix(in srgb, var(--_words-accent-solid) 14%, var(--words-bg)); color: var(--_words-accent-text); } [data-words-toolbar-family-panel][data-family='table'] [data-command='table-cell-tone-default'] { background: var(--words-bg); } [data-words-toolbar-family-section] { display: grid; gap: var(--button-gap-xs); } [data-words-toolbar-family-panel][data-family='table'] [data-words-toolbar-family-section] { gap: var(--words-code-py); } [data-words-toolbar-family-section] + [data-words-toolbar-family-section] { padding-block-start: var(--button-gap-xs); border-block-start: var(--words-border-width) solid var(--words-toolbar-border); } [data-words-toolbar-family-panel][data-family='table'] [data-words-toolbar-family-section] + [data-words-toolbar-family-section] { padding-block-start: var(--words-code-py); } [data-words-toolbar-family-label] { color: var(--words-status-color); font-size: var(--words-status-font-size); font-weight: var(--words-strong-font-weight); line-height: var(--words-line-height); } [data-words-toolbar-family-panel][data-family='table'] [data-words-toolbar-family-label] { line-height: 1.2; } [data-words-toolbar-family-grid] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--button-gap-xs); } [data-words-toolbar-family-panel][data-family='table'] [data-words-toolbar-family-grid] { gap: var(--words-code-py); } [data-words-toolbar-family-grid][data-columns='1'] { grid-template-columns: minmax(0, 1fr); } [data-words-toolbar-family-grid][data-columns='3'] { grid-template-columns: repeat(3, minmax(0, 1fr)); } [data-words-toolbar-family-grid][data-columns='4'] { grid-template-columns: repeat(4, minmax(0, 1fr)); } [data-words-toolbar-family-panel] [data-words-code-language-picker], [data-words-toolbar-family-panel] [data-words-find-trigger] { padding-inline: var(--words-command-px); } [data-words-toolbar-family-panel] [data-words-code-language-value] { min-inline-size: auto; } [data-words-code-language-panel] { display: grid; grid-template-columns: repeat(2, minmax(8rem, 1fr)); gap: var(--button-gap-xs); } [data-words-code-language-option] { display: grid; grid-template-columns: 3.5rem minmax(0, 1fr); align-items: center; gap: var(--words-command-gap); min-inline-size: 0; block-size: var(--_words-button-size); padding-inline: var(--words-command-px); border: var(--words-border-width) solid var(--words-command-border-hover); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-command-color); font: inherit; cursor: pointer; text-align: start; } [data-words-code-language-option]:hover:not(:disabled):not([data-disabled]) { border-color: var(--words-command-border-hover); background: var(--words-command-bg-hover); color: var(--words-command-color-hover); } [data-words-code-language-option]:focus-visible { box-shadow: var(--words-focus-shadow); outline: none; } [data-words-code-language-option][data-active] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-code-language-code] { color: var(--words-status-color); font-size: var(--words-status-font-size); font-variant-numeric: tabular-nums; text-transform: uppercase; } [data-words-code-language-label] { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [data-words-link-field] { display: flex; box-sizing: border-box; align-items: center; gap: var(--words-command-gap); inline-size: 100%; min-inline-size: 0; block-size: var(--_words-button-size); padding-inline: var(--words-command-px); border: var(--words-border-width) solid var(--words-toolbar-border); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-content-color); } [data-words-link-label] { display: inline-flex; flex: 0 0 auto; align-items: center; color: var(--words-status-color); font-size: var(--words-status-font-size); } [data-words-link-field] input[type='text'] { flex: 1 1 auto; min-inline-size: 0; border: 0; background: transparent; color: var(--words-content-color); font: inherit; outline: none; } [data-words-link-field]:focus-within { border-color: var(--_words-accent-border); box-shadow: var(--words-focus-shadow); } [data-words-link-field]:has(input[aria-invalid='true']) { border-color: var(--words-invalid-border); } [data-words-link-actions] { display: inline-flex; flex: 0 0 auto; align-items: center; gap: var(--words-command-gap); } [data-words-link-actions] button { display: inline-flex; flex: 0 0 var(--_words-button-size); align-items: center; justify-content: center; inline-size: var(--_words-button-size); block-size: var(--_words-button-size); padding: 0; border: var(--words-border-width) solid var(--words-command-border-hover); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-command-color); font: inherit; cursor: pointer; } [data-words-link-actions] button[data-words-link-apply] { border-color: var(--_words-accent-solid); background: var(--_words-accent-solid); color: var(--words-command-solid-color); } [data-words-link-actions] button:disabled { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-link-error] { grid-column: 1 / -1; color: var(--words-status-error-color); font-size: var(--words-status-font-size); } [data-words]:has([data-words-toolbar][data-orientation='vertical']) [data-words-link-editor] { grid-template-columns: minmax(0, 1fr) auto; } [data-words]:has([data-words-toolbar][data-orientation='vertical']):has([data-words-link-editor]) [data-words-status] { grid-row: 3; } [data-words-placeholder] { display: block; padding-block-start: var(--_words-content-py); padding-inline: var(--_words-content-px); color: var(--words-placeholder-color); pointer-events: none; } [data-words]:has([data-words-toolbar][data-orientation='vertical']) [data-words-placeholder] { grid-column: 2; grid-row: 1; z-index: 1; } [data-words-placeholder][hidden], [data-words-hidden-input][hidden] { display: none; } [data-words-content] { min-block-size: var(--_words-content-min-block-size); padding-block: var(--_words-content-py); padding-inline: var(--_words-content-px); color: var(--words-content-color); outline: none; overflow-wrap: anywhere; white-space: pre-wrap; caret-color: var(--_words-accent-solid); user-select: text; -webkit-user-select: text; } [data-words-content] * { user-select: text; -webkit-user-select: text; } [data-words]:has([data-words-toolbar][data-orientation='vertical']) [data-words-content] { grid-column: 2; grid-row: 1; } [data-words-placeholder]:not([hidden]) + [data-words-content] { padding-block-start: var(--words-content-py-after-placeholder); } [data-words-content]::selection, [data-words-content] ::selection { background: var(--_words-selection-bg); color: var(--_words-selection-color); } [data-words-content]:focus-visible { outline: none; } [data-words-content] :where(p, h1, h2, h3, blockquote, pre, ul, ol, table) { margin-block: 0 var(--words-block-gap); } [data-words-content] :where(p, h1, h2, h3, blockquote, pre, ul, ol, table):last-child { margin-block-end: 0; } /* Headings need more breathing room above than between body blocks so the document gets a visible rhythm. The :not(:first-child) gate keeps a heading at the top of the editor flush against the toolbar instead of opening a blank top margin. */ [data-words-content] :where(h1, h2, h3):not(:first-child) { margin-block-start: calc(var(--words-block-gap) * 1.5); } [data-words-content] :where(h1, h2, h3) { color: var(--words-heading-color); font-size: var(--words-heading-font-size); font-weight: var(--words-heading-font-weight); line-height: var(--words-heading-line-height); } [data-words-content] :where(h1) { font-size: var(--words-heading-h1-font-size); } [data-words-content] :where(h2) { font-size: var(--words-heading-h2-font-size); } [data-words-content] :where(h3) { font-size: var(--words-heading-h3-font-size); } [data-words-content] :where(strong) { font-weight: var(--words-strong-font-weight); } [data-words-content] [data-words-marks~='bold'] { font-weight: var(--words-strong-font-weight); } [data-words-content] [data-words-marks~='italic'] { font-style: italic; } [data-words-content] [data-words-marks~='underline'] { text-decoration-line: underline; } [data-words-content] [data-words-marks~='strike'] { text-decoration-line: line-through; } [data-words-content] [data-words-marks~='underline'][data-words-marks~='strike'] { text-decoration-line: underline line-through; } [data-words-content] :where(code) { border-radius: var(--words-code-radius); background: var(--words-code-bg); color: var(--words-code-color); font-family: var(--words-code-font-family); padding-block: var(--words-code-py); padding-inline: var(--words-code-px); } [data-words-content] :where(pre) { overflow-x: auto; padding-block: calc(var(--words-quote-px) * 1.25); padding-inline: calc(var(--words-quote-px) * 1.25); border: var(--words-border-width) solid color-mix(in srgb, var(--_words-accent-border) 60%, var(--words-toolbar-border)); border-radius: var(--words-code-radius); background: var(--words-code-bg); color: var(--words-code-color); font-family: var(--words-code-font-family); white-space: pre-wrap; } [data-words-content] :where(pre code) { display: block; padding: 0; border-radius: 0; background: transparent; color: inherit; font: inherit; } [data-words-content] [data-words-code-token] { font: inherit; } [data-words-content] [data-words-code-token='comment'] { color: var(--words-status-color); font-style: italic; } [data-words-content] [data-words-code-token='keyword'] { color: var(--_words-accent-text); font-weight: var(--words-strong-font-weight); } [data-words-content] [data-words-code-token='string'] { color: var(--words-affirm-text); } [data-words-content] [data-words-code-token='number'], [data-words-content] [data-words-code-token='boolean'] { color: var(--words-fulfill-text); } [data-words-content] [data-words-code-token='function'] { color: var(--words-secondary-text); } [data-words-content] [data-words-code-token='tag'] { color: var(--words-threat-text); } [data-words-content] [data-words-code-token='attribute'], [data-words-content] [data-words-code-token='property'] { color: var(--words-risk-text); } [data-words-content] [data-words-code-token='operator'], [data-words-content] [data-words-code-token='punctuation'], [data-words-content] [data-words-code-token='variable'] { color: var(--words-status-color); } [data-words-content] [data-words-marks~='code'] { border-radius: var(--words-code-radius); background: var(--words-code-bg); color: var(--words-code-color); font-family: var(--words-code-font-family); padding-block: var(--words-code-py); padding-inline: var(--words-code-px); } [data-words-content] :where(blockquote) { padding-block: calc(var(--words-quote-px) * 0.5); padding-inline-start: var(--words-quote-px); border-inline-start: calc(var(--words-quote-border-width) * 1.5) solid var(--_words-accent-border); background: color-mix(in srgb, var(--_words-accent-solid) 4%, transparent); color: var(--words-quote-color); font-style: italic; } [data-words-content] :where(ul, ol) { padding-inline-start: var(--words-list-padding-inline-start); } [data-words-content] :where(table) { inline-size: 100%; border-collapse: collapse; table-layout: fixed; overflow: hidden; border: var(--words-border-width) solid var(--words-toolbar-border); border-radius: var(--words-code-radius); background: var(--words-bg); } /* Striped rows — bumped from a faint 70%-transparent overlay to a solid toolbar-bg tint so the zebra is actually discernible against the editor background. */ [data-words-content] :where(table[data-words-table-striped] tr:nth-child(even) td), [data-words-content] :where(table[data-words-table-striped] tr:nth-child(even) th) { background: var(--words-toolbar-bg); } [data-words-content] :where(table[data-words-table-compact] td), [data-words-content] :where(table[data-words-table-compact] th) { padding-block: calc(var(--words-code-py) * 0.5); padding-inline: calc(var(--words-command-px) * 0.75); } [data-words-content] :where(td, th) { min-inline-size: calc(var(--_words-button-size) * 2); padding-block: var(--words-code-py); padding-inline: var(--words-command-px); border: var(--words-border-width) solid var(--words-toolbar-border); vertical-align: top; transition: background-color 120ms ease; } /* Subtle hover for every body cell — lets the user know cells are interactive (clickable to edit). Header rows opt out below. */ [data-words-content] :where(table) tr:hover td:not([data-words-cell-header]) { background: color-mix(in srgb, var(--_words-accent-solid) 5%, transparent); } [data-words-content] :where(th), [data-words-content] [data-words-cell-header] { background: color-mix(in srgb, var(--_words-accent-solid) 12%, var(--words-bg)); color: var(--words-heading-color); font-weight: var(--words-strong-font-weight); /* Stronger bottom border under the header row so the divider with the body is unambiguous regardless of striping. */ border-block-end-width: calc(var(--words-border-width) * 2); } [data-words-content] [data-words-cell-tone='muted'] { background: color-mix(in srgb, var(--words-toolbar-bg) 82%, transparent); } /* Accent tone — was 14% solid with full accent-text recolor, which read as "this cell is broken / special-cased random". Toned down to 8% background and kept the inherited text color so the cell still draws the eye without shouting. */ [data-words-content] [data-words-cell-tone='accent'] { background: color-mix(in srgb, var(--_words-accent-solid) 8%, var(--words-bg)); } [data-words-content] [data-words-cell-vertical='middle'] { vertical-align: middle; } [data-words-content] [data-words-cell-vertical='bottom'] { vertical-align: bottom; } [data-words-content] [data-words-node='table-cell']:focus-within { background: color-mix(in srgb, var(--_words-accent-solid) 8%, transparent); } [data-words-content] [data-words-node='table-cell'][data-words-cell-tone='muted']:focus-within { background: color-mix(in srgb, var(--_words-accent-solid) 8%, var(--words-toolbar-bg)); } [data-words-content] [data-words-node='table-cell'][data-words-cell-tone='accent']:focus-within, [data-words-content] [data-words-node='table-cell'][data-words-cell-header]:focus-within { background: color-mix(in srgb, var(--_words-accent-solid) 20%, var(--words-bg)); } /* ── Image (F3) ──────────────────────────────────────────────────────── */ [data-words-content] :where(figure[data-words-block='image']) { display: flex; flex-direction: column; align-items: center; gap: var(--words-code-py); margin-inline: 0; padding: var(--words-code-py); border: var(--words-border-width) solid var(--words-toolbar-border); border-radius: var(--words-code-radius); background: var(--words-bg); } [data-words-content] :where(figure[data-words-block='image']) img { display: block; max-inline-size: 100%; block-size: auto; border-radius: var(--words-code-radius); user-select: none; } [data-words-content] :where(figure[data-words-block='image']) figcaption { max-inline-size: 100%; color: var(--words-quote-color); font-size: var(--words-status-font-size); font-style: italic; text-align: center; } [data-words-content] [data-words-block='image'][data-words-image-align='left'] { align-items: flex-start; margin-inline-end: auto; } [data-words-content] [data-words-block='image'][data-words-image-align='right'] { align-items: flex-end; margin-inline-start: auto; } [data-words-content] [data-words-block='image'][data-words-image-status='pending'] img { opacity: var(--words-disabled-opacity); filter: grayscale(0.4); } [data-words-content] [data-words-block='image'][data-words-image-status='pending']::after { content: 'Uploading…'; color: var(--words-status-color); font-size: var(--words-status-font-size); font-style: italic; } [data-words-content] [data-words-block='image'][data-words-image-status='error'] { border-color: var(--words-threat-text); } [data-words-content] [data-words-block='image'][data-words-image-status='error']::after { content: 'Upload failed'; color: var(--words-threat-text); font-size: var(--words-status-font-size); } [data-words-content] :focus-within > figure[data-words-block='image'], [data-words-content] figure[data-words-block='image']:focus, [data-words-content] figure[data-words-block='image']:focus-within { outline: 2px solid var(--_words-accent-border); outline-offset: 2px; } /* Atomic block selection — when the user clicks an image the provider flags it as the visually-selected atomic block (selectedBlockIndex). The render decorates the figure with data-words-block-selected so we can paint a strong accent border + soft glow. The drawer enters image mode in parallel. */ [data-words-content] figure[data-words-block='image'][data-words-block-selected] { outline: 3px solid var(--_words-accent-solid); outline-offset: 3px; box-shadow: 0 0 0 6px color-mix(in srgb, var(--_words-accent-solid) 18%, transparent), 0 0 24px color-mix(in srgb, var(--_words-accent-solid) 25%, transparent); } [data-words-content] figure[data-words-block='image'] { cursor: pointer; } [data-words-content] [data-words-list-kind='check'] { list-style: none; } [data-words-content] [data-words-check-toggle] { display: inline-flex; align-items: center; justify-content: center; inline-size: var(--_words-check-size); block-size: var(--_words-check-size); margin-inline-end: var(--words-command-gap); border: var(--words-border-width) solid var(--_words-accent-border); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-command-solid-color); vertical-align: text-bottom; cursor: pointer; user-select: none; -webkit-user-select: none; } [data-words-content] [data-words-check-toggle]::after { content: ''; display: block; inline-size: var(--_words-check-mark-width); block-size: var(--_words-check-mark-height); border-block-end: var(--_words-check-mark-stroke) solid currentColor; border-inline-end: var(--_words-check-mark-stroke) solid currentColor; opacity: 0; transform: rotate(45deg) translateY(var(--_words-check-mark-offset)); } [data-words-content] [data-words-check-toggle][data-words-checked='true'] { border-color: var(--_words-accent-solid); background: var(--_words-accent-solid); } [data-words-content] [data-words-check-toggle][data-words-checked='true']::after { opacity: 1; } [data-words][data-disabled] [data-words-check-toggle], [data-words][data-readonly] [data-words-check-toggle] { cursor: default; opacity: var(--words-disabled-opacity); } [data-words-content] [data-words-indent] { margin-inline-start: calc(var(--words-list-padding-inline-start) * var(--_words-indent, 1)); } [data-words-content] [data-words-indent='1'] { --_words-indent: 1; } [data-words-content] [data-words-indent='2'] { --_words-indent: 2; } [data-words-content] [data-words-indent='3'] { --_words-indent: 3; } [data-words-content] [data-words-indent='4'] { --_words-indent: 4; } [data-words-content] [data-words-indent='5'] { --_words-indent: 5; } [data-words-content] [data-words-indent='6'] { --_words-indent: 6; } [data-words-content] [data-words-indent='7'] { --_words-indent: 7; } [data-words-content] [data-words-indent='8'] { --_words-indent: 8; } [data-words-content] :where(a) { color: var(--_words-accent-text); text-decoration-color: var(--_words-accent-border); } [data-words-status] { padding-block: var(--words-status-py); padding-inline: var(--_words-content-px); border-block-start: var(--words-border-width) solid var(--words-toolbar-border); color: var(--words-status-color); font-size: var(--words-status-font-size); } [data-words]:has([data-words-toolbar][data-orientation='vertical']) [data-words-status] { grid-column: 1 / -1; grid-row: 2; } [data-words-status][data-status='error'] { color: var(--words-status-error-color); } [data-words-find-replace] { display: flex; flex-direction: column; gap: var(--words-command-gap); inline-size: 100%; padding: 0; border: 0; background: transparent; } [data-words-find-replace][data-disabled], [data-words-find-replace][data-readonly] { color: var(--words-status-color); } [data-words-find-replace][data-invalid] [data-words-find-counter] { color: var(--words-status-error-color); } [data-words-find-replace][data-disabled] { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-find-replace][data-has-matches] [data-words-find-counter] { color: var(--_words-accent-text); } [data-words]:has([data-words-toolbar][data-orientation='vertical']) [data-words-find-replace] { grid-column: 1 / -1; grid-row: 2; } [data-words]:has([data-words-toolbar][data-orientation='vertical']):has([data-words-find-replace]) [data-words-status] { grid-row: 3; } [data-words-find-row], [data-words-replace-row] { display: flex; align-items: center; gap: var(--words-command-gap); } [data-words-find-label], [data-words-replace-label] { display: inline-flex; flex: 0 0 auto; align-items: center; color: var(--words-status-color); font-size: var(--words-status-font-size); } [data-words-find-input], [data-words-replace-input] { flex: 1 1 auto; min-inline-size: 0; block-size: var(--_words-button-size); padding-inline: var(--words-command-px); border: var(--words-border-width) solid var(--words-toolbar-border); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-content-color); font: inherit; outline: none; } [data-words-find-input]:focus, [data-words-replace-input]:focus { border-color: var(--_words-accent-border); box-shadow: var(--words-focus-shadow); } [data-words-find-input][aria-invalid='true'] { border-color: var(--words-invalid-border); } [data-words-find-counter] { flex: 0 0 auto; min-inline-size: 3.5ch; color: var(--words-status-color); font-size: var(--words-status-font-size); font-variant-numeric: tabular-nums; text-align: end; } [data-words-find-prev], [data-words-find-next], [data-words-find-case], [data-words-find-whole], [data-words-find-regex], [data-words-find-selection], [data-words-replace-preserve], [data-words-replace-current], [data-words-replace-all] { display: inline-flex; flex: 0 0 var(--_words-button-size); align-items: center; justify-content: center; inline-size: var(--_words-button-size); block-size: var(--_words-button-size); padding: 0; border: var(--words-border-width) solid var(--words-command-border-hover); border-radius: var(--words-command-radius); background: var(--words-bg); color: var(--words-command-color); font: inherit; cursor: pointer; outline: none; } [data-words-find-prev]:hover:not(:disabled):not([data-disabled]), [data-words-find-next]:hover:not(:disabled):not([data-disabled]), [data-words-find-case]:hover:not(:disabled):not([data-disabled]), [data-words-find-whole]:hover:not(:disabled):not([data-disabled]), [data-words-find-regex]:hover:not(:disabled):not([data-disabled]), [data-words-find-selection]:hover:not(:disabled):not([data-disabled]), [data-words-replace-preserve]:hover:not(:disabled):not([data-disabled]), [data-words-replace-current]:hover:not(:disabled):not([data-disabled]), [data-words-replace-all]:hover:not(:disabled):not([data-disabled]) { border-color: var(--words-command-border-hover); background: var(--words-command-bg-hover); color: var(--words-command-color-hover); } [data-words-find-prev]:focus-visible, [data-words-find-next]:focus-visible, [data-words-find-case]:focus-visible, [data-words-find-whole]:focus-visible, [data-words-find-regex]:focus-visible, [data-words-find-selection]:focus-visible, [data-words-replace-preserve]:focus-visible, [data-words-replace-current]:focus-visible, [data-words-replace-all]:focus-visible { box-shadow: var(--words-focus-shadow); } [data-words-find-prev]:disabled, [data-words-find-next]:disabled, [data-words-find-case]:disabled, [data-words-find-whole]:disabled, [data-words-find-regex]:disabled, [data-words-find-selection]:disabled, [data-words-replace-preserve]:disabled, [data-words-replace-current]:disabled, [data-words-replace-all]:disabled { cursor: not-allowed; opacity: var(--words-disabled-opacity); } [data-words-find-case][data-active], [data-words-find-whole][data-active], [data-words-find-regex][data-active], [data-words-find-selection][data-active], [data-words-replace-preserve][data-active] { border-color: var(--_words-accent-border); background: var(--_words-accent-track); color: var(--_words-accent-text); } [data-words-replace-all] { border-color: var(--_words-accent-solid); background: var(--_words-accent-solid); color: var(--words-command-solid-color); } [data-words-replace-all]:hover:not(:disabled):not([data-disabled]) { border-color: var(--_words-accent-solid-hover); background: var(--_words-accent-solid-hover); color: var(--words-command-solid-color); } [data-words-content] mark[data-words-find-match] { border-radius: var(--words-code-radius); background: color-mix(in srgb, var(--_words-accent-solid) 22%, transparent); color: var(--_words-accent-text); padding-block: var(--words-code-py); padding-inline: var(--words-code-px); } [data-words-content] mark[data-words-find-match][data-words-find-active] { background: color-mix(in srgb, var(--_words-accent-solid) 55%, transparent); outline: 1px solid var(--_words-accent-border); } @media (prefers-reduced-motion: reduce) { [data-words], [data-words-command-button] { transition: none; } }