PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.12
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.12
1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 All 36 releases
← All changes | assets/css/ai-assistant.css +99 -99 1.1.7 → 1.1.12 View file →
@@ -3,10 +3,20 @@
3 3 *
4 4 * A system-level command palette that floats above the entire shell,
5 5 * including the WP admin bar. Visually modeled on macOS Spotlight and
6 6 * Linear's command menu — frosted-glass backdrop, spring-physics panel
7 - * entrance, large search input, accent-tinted header.
7 + * entrance, large search input.
8 8 *
9 + * ## How much accent the chrome shows
10 + *
11 + * Every accent-derived surface below (the header tint and its mark, the
12 + * search icon, a selected or hovered row, the icon tiles) mixes the
13 + * accent by --os-ai-accent towards a neutral. Unset that is 100%, the
14 + * accent-tinted panel this has always been; the OpenStation palette
15 + * answers 0% and lifts rows and tiles with --os-ai-row-fill and
16 + * --os-ai-tile-fill instead. The command icons themselves are not part
17 + * of it: they read the accent directly, in every palette.
18 + *
9 19 * z-index 10000 puts this above --os-z-adminbar (9991) so the
10 20 * overlay truly covers the full viewport.
11 21 *
12 22 * ## Desktop-theme awareness
@@ -100,8 +110,9 @@
100 110 background-repeat: var( --os-ui-dialog-bg-image-repeat, repeat );
101 111 background-size: var( --os-ui-dialog-bg-image-size, auto );
102 112 background-position: var( --os-ui-dialog-bg-image-position, center );
103 113 color: var( --os-ui-fg, #1d2327 );
114 + font-family: var( --os-ui-font, inherit );
104 115 border-radius: 16px;
105 116 overflow: hidden;
106 117
107 118 /* Tight under-shadow + wide atmospheric shadow. The hairline ring
@@ -123,49 +134,12 @@
123 134 .os-ai.is-open .os-ai__panel {
124 135 transform: scale( 1 ) translateY( 0 );
125 136 }
126 137
127 -/* ---------------------------------------------------------------------------
128 - * Header — accent-tinted identity strip
129 - * ------------------------------------------------------------------------- */
130 -
131 -.os-ai__header {
132 - display: flex;
133 - align-items: center;
134 - gap: 8px;
135 - padding: 10px 14px;
136 - /* Gradient fades from a very faint accent tint to white — visible
137 - on fresh/blue schemes, subtle on light schemes. */
138 - background: linear-gradient(
139 - to bottom,
140 - color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 8%, var( --os-ui-surface, #fff ) ),
141 - var( --os-ui-surface, #fff )
142 - );
143 - border-bottom: 1px solid var( --os-ui-border, rgba( 0, 0, 0, 0.06 ) );
144 -}
145 -
146 -.os-ai__header-icon {
147 - display: flex;
148 - align-items: center;
149 - color: var( --wp-admin-theme-color, #2271b1 );
150 - /* Glow so the sparkle feels alive on dark or saturated themes */
151 - filter: drop-shadow(
152 - 0 0 5px color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 55%, transparent )
153 - );
154 -}
155 -
156 -.os-ai__header-label {
157 - flex: 1;
158 - font-size: 11px;
159 - font-weight: 700;
160 - letter-spacing: 0.09em;
161 - text-transform: uppercase;
162 - color: var( --wp-admin-theme-color, #2271b1 );
163 -}
164 -
165 -/* Mode switch (Commands ↔ AI) — a small segmented pill in the header.
166 - Shown only when AI is available; replaces the `/` shortcut. */
138 +/* Mode switch (Commands ↔ AI) — a small segmented pill at the end of
139 + the input row. Always shown; replaces the `/` shortcut. */
167 140 .os-ai__modes {
141 + flex-shrink: 0;
168 142 display: inline-flex;
169 143 gap: 2px;
170 144 padding: 2px;
171 145 border-radius: 999px;
@@ -171,12 +145,8 @@
171 145 border-radius: 999px;
172 146 background: var( --os-ui-hover, rgba( 0, 0, 0, 0.05 ) );
173 147 }
174 148
175 -.os-ai__modes[hidden] {
176 - display: none;
177 -}
178 -
179 149 .os-ai__mode {
180 150 appearance: none;
181 151 border: 0;
182 152 cursor: pointer;
@@ -193,9 +163,9 @@
193 163 color: var( --os-ui-fg, #1d2327 );
194 164 }
195 165
196 166 .os-ai__mode.is-active {
197 - /* Elevated first: the pill sits ON the header, which is already
167 + /* Elevated first: the pill sits ON the panel, which is already
198 168 `--os-ui-surface`, so a theme that distinguishes the two keeps the
199 169 active segment readable. Falls through to plain surface, which is
200 170 the default look. */
201 171 background: var( --os-ui-surface-elevated, var( --os-ui-surface, #fff ) );
@@ -207,10 +177,8 @@
207 177 outline: 2px solid var( --wp-admin-theme-color, #2271b1 );
208 178 outline-offset: 1px;
209 179 }
210 180
211 -/* .os-ai__close styles moved to the bottom results section */
212 -
213 181 /* ---------------------------------------------------------------------------
214 182 * Input row — the main interaction surface
215 183 * ------------------------------------------------------------------------- */
216 184
@@ -227,21 +195,29 @@
227 195 .os-ai__input-wrap:has( .os-ai__input:focus ) {
228 196 border-bottom-color: var( --os-ui-border, rgba( 0, 0, 0, 0.06 ) );
229 197 }
230 198
231 -/* Input-row sparkle — visible always, tints toward the accent on focus
232 - so the panel reads as "AI assistant" rather than "search box". */
199 +/* Input-row icon: dim at rest, full strength on focus. At rest it is
200 + the accent at 55% alpha, mixed by --os-ai-accent towards the faint
201 + text colour; focused, the accent mixed towards the text colour. */
233 202 .os-ai__input-icon {
234 203 flex-shrink: 0;
235 204 display: flex;
236 205 align-items: center;
237 - color: var( --wp-admin-theme-color, #2271b1 );
238 - opacity: 0.55;
239 - transition: opacity 0.18s ease, transform 0.18s ease;
206 + color: color-mix(
207 + in srgb,
208 + color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 55%, transparent ) var( --os-ai-accent, 100% ),
209 + var( --os-ui-fg-faint, #c3c4c7 )
210 + );
211 + transition: color 0.18s ease, transform 0.18s ease;
240 212 }
241 213
242 214 .os-ai__input-wrap:has( .os-ai__input:focus ) .os-ai__input-icon {
243 - opacity: 1;
215 + color: color-mix(
216 + in srgb,
217 + var( --wp-admin-theme-color, #2271b1 ) var( --os-ai-accent, 100% ),
218 + var( --os-ui-fg, #1d2327 )
219 + );
244 220 transform: scale( 1.08 );
245 221 }
246 222
247 223 /*
@@ -307,10 +283,25 @@
307 283 width: 30px;
308 284 height: 30px;
309 285 border: none;
310 286 border-radius: 8px;
311 - background: var( --wp-admin-theme-color, #2271b1 );
312 - color: var( --os-ui-fg-on-accent, #fff );
287 + /* An accent key at --os-ai-accent's strength. At 0 it is an icon tile
288 + like the command rows' (the neutral fill, the glyph in the accent);
289 + at 100% the filled accent button with its ink. */
290 + background-color: color-mix(
291 + in srgb,
292 + var( --wp-admin-theme-color, #2271b1 ) var( --os-ai-accent, 100% ),
293 + transparent
294 + );
295 + background-image: linear-gradient(
296 + var( --os-ai-tile-fill, transparent ),
297 + var( --os-ai-tile-fill, transparent )
298 + );
299 + color: color-mix(
300 + in srgb,
301 + var( --os-ui-accent-ink, var( --os-ui-fg-on-accent, #fff ) ) var( --os-ai-accent, 100% ),
302 + var( --wp-admin-theme-color, #2271b1 )
303 + );
313 304 cursor: pointer;
314 305 padding: 0;
315 306 opacity: 0;
316 307 transform: scale( 0.7 );
@@ -368,40 +359,8 @@
368 359 /* (The admin-bar button styles are added inline in PHP to keep them
369 360 on the admin-bar handle so they load even before os.js.) */
370 361
371 362 /* ---------------------------------------------------------------------------
372 - * Close button — × icon, top-right of header
373 - * ------------------------------------------------------------------------- */
374 -
375 -.os-ai__close {
376 - display: inline-flex;
377 - align-items: center;
378 - justify-content: center;
379 - width: 28px;
380 - height: 28px;
381 - appearance: none;
382 - background: var( --os-ui-hover, rgba( 0, 0, 0, 0.05 ) );
383 - border: 1px solid var( --os-ui-border, rgba( 0, 0, 0, 0.1 ) );
384 - border-radius: 6px;
385 - cursor: pointer;
386 - color: var( --os-ui-fg-muted, #646970 );
387 - padding: 0;
388 - flex-shrink: 0;
389 - transition: background 0.1s, color 0.1s, border-color 0.1s;
390 -}
391 -
392 -.os-ai__close:hover {
393 - background: var( --os-ui-hover, rgba( 0, 0, 0, 0.09 ) );
394 - border-color: var( --os-ui-border-strong, rgba( 0, 0, 0, 0.2 ) );
395 - color: var( --os-ui-fg, #1d2327 );
396 -}
397 -
398 -.os-ai__close:focus-visible {
399 - outline: 2px solid var( --wp-admin-theme-color, #2271b1 );
400 - outline-offset: 2px;
401 -}
402 -
403 -/* ---------------------------------------------------------------------------
404 363 * Results / conversation area — three render modes:
405 364 * • Suggestions (empty state, example prompts)
406 365 * • Thinking (spinner + "Thinking…")
407 366 * • Response (assistant bubble + entity card | admin links | nothing)
@@ -489,10 +448,12 @@
489 448 text-decoration: underline;
490 449 text-underline-offset: 2px;
491 450 }
492 451
452 +/* Keeps the underline and nudges the colour toward the foreground, so
453 + hovering reads as a response rather than the link going away. */
493 454 .os-ai__settings-link:hover {
494 - text-decoration: none;
455 + color: color-mix( in srgb, currentColor 65%, var( --os-ui-fg, #1d2327 ) );
495 456 }
496 457
497 458 /* The shell forces `cursor: default !important` on every clickable
498 459 * surface (see the cursor policy at the top of desktop.css). This
@@ -652,9 +613,9 @@
652 613 padding: 6px 14px;
653 614 border: none;
654 615 border-radius: 8px;
655 616 background: var( --wp-admin-theme-color, #2271b1 );
656 - color: var( --os-ui-fg-on-accent, #fff );
617 + color: var( --os-ui-accent-ink, var( --os-ui-fg-on-accent, #fff ) );
657 618 font: inherit;
658 619 font-size: 12px;
659 620 font-weight: 500;
660 621 cursor: pointer;
@@ -804,12 +765,38 @@
804 765 .os-ai__cmd-item:not(:has(.os-ai__cmd-desc)) {
805 766 align-items: center;
806 767 }
807 768
769 +/* The lit row: an accent wash and edge at --os-ai-accent's strength,
770 + over the row fill the palette names. Shared with the args-mode rows
771 + below through the same two custom properties. */
772 +.os-ai {
773 + --_row-wash: color-mix(
774 + in srgb,
775 + var( --wp-admin-theme-color, #2271b1 ) calc( var( --os-ai-accent, 100% ) * 0.08 ),
776 + var( --os-ui-surface, #fff )
777 + );
778 + --_row-edge: color-mix(
779 + in srgb,
780 + color-mix(
781 + in srgb,
782 + var( --wp-admin-theme-color, #2271b1 ) 25%,
783 + var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) )
784 + )
785 + var( --os-ai-accent, 100% ),
786 + transparent
787 + );
788 + --_row-fill: linear-gradient(
789 + var( --os-ai-row-fill, transparent ),
790 + var( --os-ai-row-fill, transparent )
791 + );
792 +}
793 +
808 794 .os-ai__cmd-item:hover,
809 795 .os-ai__cmd-item.is-selected {
810 - background: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 8%, var( --os-ui-surface, #fff ) );
811 - border-color: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 25%, var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ) );
796 + background-color: var( --_row-wash );
797 + background-image: var( --_row-fill );
798 + border-color: var( --_row-edge );
812 799 }
813 800
814 801 /*
815 802 * When keyboard navigation is driving selection, suppress the :hover
@@ -823,10 +810,11 @@
823 810 background: transparent;
824 811 border-color: transparent;
825 812 }
826 813 .os-ai__cmd-list--kb-nav .os-ai__cmd-item.is-selected:hover {
827 - background: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 8%, var( --os-ui-surface, #fff ) );
828 - border-color: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 25%, var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ) );
814 + background-color: var( --_row-wash );
815 + background-image: var( --_row-fill );
816 + border-color: var( --_row-edge );
829 817 }
830 818
831 819 .os-ai__cmd-item:focus-visible {
832 820 outline: 2px solid var( --wp-admin-theme-color, #2271b1 );
@@ -840,10 +828,20 @@
840 828 justify-content: center;
841 829 width: 36px;
842 830 height: 36px;
843 831 font-size: 20px;
832 + /* The glyph is the accent in every palette; only its tile follows
833 + --os-ai-accent. */
844 834 color: var( --wp-admin-theme-color, #2271b1 );
845 - background: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 10%, var( --os-ui-surface, #fff ) );
835 + background-color: color-mix(
836 + in srgb,
837 + var( --wp-admin-theme-color, #2271b1 ) calc( var( --os-ai-accent, 100% ) * 0.1 ),
838 + var( --os-ui-surface, #fff )
839 + );
840 + background-image: linear-gradient(
841 + var( --os-ai-tile-fill, transparent ),
842 + var( --os-ai-tile-fill, transparent )
843 + );
846 844 border-radius: 7px;
847 845 }
848 846
849 847 /*
@@ -915,10 +913,11 @@
915 913 display: flex;
916 914 align-items: flex-start;
917 915 gap: 10px;
918 916 padding: 10px 12px;
919 - background: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 10%, var( --os-ui-surface, #fff ) );
920 - border: 1px solid color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 30%, var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ) );
917 + background-color: var( --_row-wash );
918 + background-image: var( --_row-fill );
919 + border: 1px solid var( --_row-edge );
921 920 border-radius: 8px;
922 921 }
923 922
924 923 .os-ai__cmd-enter-hint {
@@ -966,10 +965,11 @@
966 965 }
967 966
968 967 .os-ai__cmd-suggest-item:hover,
969 968 .os-ai__cmd-suggest-item.is-selected {
970 - background: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 8%, var( --os-ui-surface, #fff ) );
971 - border-color: color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 25%, var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ) );
969 + background-color: var( --_row-wash );
970 + background-image: var( --_row-fill );
971 + border-color: var( --_row-edge );
972 972 }
973 973
974 974 .os-ai__cmd-suggest-label {
975 975 font-size: 13px;