@cplieger/web-terminal-ui 7.3.1 → 7.3.2

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.
Files changed (2) hide show
  1. package/css/30-tabs.css +31 -13
  2. package/package.json +1 -1
package/css/30-tabs.css CHANGED
@@ -1008,27 +1008,45 @@
1008
1008
  what a reader sees is the hole morphing between a square and the circle inscribed
1009
1009
  in it — the ring survives the peak.
1010
1010
 
1011
- The divisor is the arithmetic rather than a literal, for the reason the footprint
1012
- cancel above is: the size is a variable and the band is now one too, so a literal
1013
- would be right until either moved. Ported from vibekit's `.tab-run-dot`
1014
- (`12-tabs.css`, "THE GLOW BEAT"), which is the same mark solving the same problem
1015
- and had the mask from the start.
1011
+ EVERY NUMBER HERE IS A RELATION, and the port that copied vibekit's LITERALS is
1012
+ what left this rule running with nothing visible to show. Two of them were
1013
+ arithmetic for an 8px mark with a 2px band: `inset: -1px` put the overlay on that
1014
+ mark's own border box, and the core stop `70%` is where the core reaches the
1015
+ hole's CORNER there — sqrt(2) * (size / 2 - band) / (size / 2) = 70.71%. At 9px
1016
+ and 2px the same relation is 78.57%, so the copied 70% ended the solid core at
1017
+ 2.45px while the mask opens only at 2.5px: core and visible mask did not
1018
+ intersect at all, the beat lit nothing the mask kept, and 4 pixels of a 9x9 mark
1019
+ moved between trough and peak against vibekit's 20 (measured at dpr 1, both
1020
+ marks, sRGB). Written as relations they survive any size: the inset IS the band,
1021
+ the core stop IS the hole's corner radius, the mask's hole IS its inradius. So
1022
+ port vibekit's `.tab-run-dot` (`12-tabs.css`, "THE GLOW BEAT") — the same mark
1023
+ solving the same problem, with the mask from the start — by its relations, never
1024
+ by its numbers. sqrt(2) is spelled to four decimals because the synced stylelint
1025
+ sets `number-max-precision: 4` outside colour functions.
1016
1026
 
1017
1027
  NOTHING HERE EXTENDS PAST THE MARK. `box-sizing: border-box` (01-scope.css) puts
1018
1028
  the padding box — an absolutely positioned child's containing block — INSIDE the
1019
- band, so on a 9px mark with a 2px band that box is 5x5 and `inset: -1px` resolves
1020
- to 7x7, still inside the border box. Read it as "fill the mark", not as "overhang
1021
- it": the same declaration on a mark with no band would reach outside, where a
1022
- feathered edge's visible radius moves with the beat and renders differently at
1023
- every pixel density. */
1029
+ band, so `inset: calc(-1 * var(--wt-mark-band))` grows the overlay back out to
1030
+ exactly the mark's own border box and no further. Read it as "fill the mark", not
1031
+ as "overhang it": a larger inset would reach outside, where a feathered edge's
1032
+ visible radius moves with the beat and renders differently at every pixel
1033
+ density. `border-radius: 50%` is the same discipline on the last literal, and it
1034
+ is inert BY CONSTRUCTION rather than by measurement, which is why no assertion
1035
+ pins it: for side S and radius r the clip's 45° boundary is (S/2 - r) * sqrt(2) + r,
1036
+ monotonically decreasing in r, so the inscribed circle is the WORST case for
1037
+ reaching the hole's corners — and it still clears them for any band at or above
1038
+ S/2 * (1 - 1/sqrt(2)), 1.32px here against 2px. Do not assert it, and do not drop
1039
+ it either: it is what keeps a literal radius out of a rule whose whole defect was
1040
+ literals. */
1024
1041
  :where(.wt-root) .wt-activity-mark[data-activity="working"]::before {
1025
1042
  content: "";
1026
1043
  position: absolute;
1027
- inset: -1px;
1028
- border-radius: 4px;
1044
+ inset: calc(-1 * var(--wt-mark-band));
1045
+ border-radius: 50%;
1029
1046
  background: radial-gradient(
1030
1047
  closest-side,
1031
- color-mix(in oklch, var(--wt-mark-ink) 78%, #fff) 0 70%,
1048
+ color-mix(in oklch, var(--wt-mark-ink) 78%, #fff) 0
1049
+ calc(1.4142 * (var(--wt-mark-size) / 2 - var(--wt-mark-band))),
1032
1050
  transparent 92%
1033
1051
  );
1034
1052
  opacity: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cplieger/web-terminal-ui",
3
- "version": "7.3.1",
3
+ "version": "7.3.2",
4
4
  "type": "module",
5
5
  "description": "Reference touch-first browser UI for @cplieger/web-terminal-engine: a composable kernel + feature modules (tabs, activity monitor, mobile toolbar, context menu, IME, predictive echo, viewport handling) and CSS. One createTerminal() call.",
6
6
  "license": "MPL-2.0",