|
985 | 985 | #composer.focused { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); } |
986 | 986 |
|
987 | 987 | /* ---- the working aura: a light that travels round the message box while LevelCode works ---- |
988 | | - Thinking, streaming, running a command, verifying: a short bright arc circles the box, trailing a soft |
989 | | - glow over a faint whole ring. Waiting on you (a command to approve, a question to answer) it stops and |
990 | | - dims to a thin ring with no glow — paused, because nothing happens until you act. Off: nothing at all. |
991 | | - Two rings on the box's own edge, cut to a band by a mask so the box's inside is untouched: ::after is |
992 | | - the sharp line, ::before the blurred glow under it. Both turn on one angle, so the glow never lags. |
| 988 | + Thinking, streaming, running a command, verifying: a short arc of light slides along the box's own |
| 989 | + border, a hairline with a faint soft edge. Waiting on you (a command to approve, a question to answer) |
| 990 | + it stops and becomes a dim, still border, because nothing happens until you act. Off: nothing at all. |
| 991 | + Two rings on the box's border, cut to a band by a mask so the box's inside is untouched: ::after is the |
| 992 | + 1px line, ::before a 2px blurred band under it. Both turn on one angle, so the soft edge never lags. |
| 993 | + No ring of its own behind the arc: the box's border is the track, and while the light turns the focus |
| 994 | + ring steps back (below), as in VS Code's chat, or a hairline in the accent colour is lost on it. |
993 | 995 | Colours come from the theme: the progress colour while working (the theme's own "busy"), the focus |
994 | 996 | colour while waiting. The speed is set per box (syncAura) so a wide panel does not look frantic. */ |
995 | 997 | @property --aura-angle { syntax: '<angle>'; inherits: false; initial-value: 0deg; } |
996 | 998 | @keyframes aura-turn { to { --aura-angle: 360deg; } } |
997 | 999 | #composer { |
998 | 1000 | position: relative; |
999 | 1001 | --aura-color: var(--vscode-progressBar-background, var(--accent)); |
1000 | | - --aura-head: color-mix(in srgb, var(--aura-color) 62%, var(--vscode-foreground, #fff)); |
1001 | 1002 | } |
1002 | 1003 | #composer::before, #composer::after { |
1003 | | - content: ''; position: absolute; border-radius: inherit; pointer-events: none; opacity: 0; |
| 1004 | + content: ''; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none; opacity: 0; |
1004 | 1005 | transition: opacity .4s ease; |
1005 | 1006 | -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; |
1006 | 1007 | mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); mask-composite: exclude; |
1007 | 1008 | } |
1008 | 1009 | #composer::before { |
1009 | | - inset: -6px; padding: 6px; filter: blur(5px); |
1010 | | - background: conic-gradient(from var(--aura-angle), transparent 0deg 255deg, |
1011 | | - color-mix(in srgb, var(--aura-color) 38%, transparent) 318deg, color-mix(in srgb, var(--aura-head) 80%, transparent) 354deg, transparent 360deg); |
| 1010 | + padding: 2px; filter: blur(1.5px); |
| 1011 | + background: conic-gradient(from var(--aura-angle), transparent 0deg 285deg, |
| 1012 | + color-mix(in srgb, var(--aura-color) 45%, transparent) 335deg, transparent 360deg); |
1012 | 1013 | } |
1013 | 1014 | #composer::after { |
1014 | | - inset: -1px; padding: 2px; |
1015 | | - /* A faint whole ring (the box is busy) with the bright arc travelling over it. */ |
1016 | | - background: conic-gradient(from var(--aura-angle), color-mix(in srgb, var(--aura-color) 22%, transparent) 0deg 262deg, |
1017 | | - color-mix(in srgb, var(--aura-color) 60%, transparent) 320deg, var(--aura-head) 355deg, color-mix(in srgb, var(--aura-color) 22%, transparent) 360deg); |
| 1015 | + padding: 1px; |
| 1016 | + background: conic-gradient(from var(--aura-angle), transparent 0deg 275deg, |
| 1017 | + color-mix(in srgb, var(--aura-color) 55%, transparent) 318deg, var(--aura-color) 338deg, transparent 360deg); |
1018 | 1018 | } |
1019 | 1019 | body.aura-working #composer::before, body.aura-working #composer::after { opacity: 1; animation: aura-turn var(--aura-turn, 2.4s) linear infinite; } |
1020 | | - /* Waiting on you: paused — a thin, dim ring with no glow, weaker than working and than the box's own focus. */ |
1021 | | - body.aura-waiting #composer::after { opacity: 1; padding: 1px; background: color-mix(in srgb, var(--accent) 45%, transparent); } |
| 1020 | + body.aura-working #composer.focused { border-color: color-mix(in srgb, var(--accent) 40%, var(--border)); box-shadow: none; } |
| 1021 | + /* Waiting on you: paused — a dim, still border with no glow, weaker than working and than the box's own focus. */ |
| 1022 | + body.aura-waiting #composer::after { opacity: 1; background: color-mix(in srgb, var(--accent) 45%, transparent); } |
1022 | 1023 | @media (prefers-reduced-motion: reduce) { |
1023 | | - /* No motion: working is a whole, bright ring with its glow — still distinct from waiting's dim one. */ |
| 1024 | + /* No motion: working is a whole, still border in the progress colour — brighter than waiting's dim one. */ |
1024 | 1025 | body.aura-working #composer::before, body.aura-working #composer::after { animation: none; } |
1025 | 1026 | body.aura-working #composer::after { background: color-mix(in srgb, var(--aura-color) 75%, transparent); } |
1026 | | - body.aura-working #composer::before { background: color-mix(in srgb, var(--aura-color) 35%, transparent); } |
| 1027 | + body.aura-working #composer::before { opacity: 0; } |
1027 | 1028 | } |
1028 | 1029 | /* High contrast draws its own borders; a soft glow there is noise. The working bar still says it. */ |
1029 | 1030 | @media (forced-colors: active) { #composer::before, #composer::after { display: none; } } |
|
0 commit comments