@justai/cuts 0.148.0 → 0.149.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justai/cuts",
3
- "version": "0.148.0",
3
+ "version": "0.149.0",
4
4
  "description": "A persona's named parts — the page shell that holds them, and the cuts themselves.",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -13,8 +13,10 @@
13
13
  // THE TWO MARKS ARE SIBLINGS, DRAWN THE SAME WAY. app.zone is four separated corner brackets around a
14
14
  // centre — a zone is the space the corners enclose. pin.games is three vertex brackets around a play
15
15
  // triangle, drawn with app.zone's own part (pin-games, 2026-08-25). The zone has four corners; the
16
- // play has three. Same radii, same palette, same idea of a figure assembled from pieces, which is
17
- // what keeps them reading as one family at 20px.
16
+ // play has three. City in Motion is a marker: two chevrons, the circle its head (app-zone,
17
+ // the-family-of-marks). Same
18
+ // radii, same palette, same idea of a figure assembled from pieces, which is what keeps them reading
19
+ // as one family at 20px.
18
20
  //
19
21
  // Home affordance → the apex (the platform / App Store home). Standard on every app:
20
22
  // always visible at the top-left of the toolbar. Also tidies the ?ref / ?lang hints
@@ -83,7 +85,11 @@ const href = `https://${apex}`;
83
85
  * It self-corrects: the day a household has a mark here, every persona under it grows the affordance
84
86
  * on its next build, with no persona-level change anywhere.
85
87
  */
86
- const MARKS = ["app.zone", "pin.games"];
88
+ //
89
+ // cityinmotion.nl joined the table on 2026-10-05. For six weeks its personas had declined the control,
90
+ // exactly as written above — the honest outcome while there was no mark here, and a missing way home
91
+ // once there was one: every CiM persona already passed apex="cityinmotion.nl" and was waiting for it.
92
+ const MARKS = ["app.zone", "pin.games", "cityinmotion.nl"];
87
93
  const drawable = MARKS.includes(apex);
88
94
 
89
95
  // queries: the home mark is missing arms · the mark is the wrong size · 36px · scoped styles do
@@ -113,6 +119,18 @@ const drawable = MARKS.includes(apex);
113
119
  <path class="arm a3" d="M550.15 91.57L399.09 170.67A17.93 17.93 0 0 1 374.89 163.1L346.57 109.02A17.93 17.93 0 0 1 354.14 84.82L505.19 5.72A6.45 6.45 0 0 0 505.19 -5.72L354.14 -84.82A17.93 17.93 0 0 1 346.57 -109.02L374.89 -163.1A17.93 17.93 0 0 1 399.09 -170.67L550.15 -91.57A103.36 103.36 0 0 1 550.15 91.57Z"/>
114
120
  <path class="ctr" d="M158.3 -92.3Q143.0 -100.3 143.0 -83.1L143.0 83.1Q143.0 100.3 158.3 92.3L319.3 8.0Q334.6 0.0 319.3 -8.0Z"/>
115
121
  </svg>
122
+ ) : apex === "cityinmotion.nl" ? (
123
+ <svg class="cimmark" viewBox="-353.2 -386.42 706.39 725.18" aria-hidden="true">
124
+ <g transform="scale(1.04)">
125
+ <path class="arm a1" d="M-110.04 -35.11L-333.8 -240.15A17.93 17.93 0 0 1 -334.9 -265.48L-293.66 -310.49A17.93 17.93 0 0 1 -268.33 -311.6L-44.57 -106.56A65.97 65.97 0 0 0 44.57 -106.56L268.33 -311.6A17.93 17.93 0 0 1 293.66 -310.49L334.9 -265.48A17.93 17.93 0 0 1 333.8 -240.15L110.04 -35.11A162.88 162.88 0 0 1 -110.04 -35.11Z"/>
126
+ <path class="arm a2" d="M-110.04 282.94L-333.8 77.9A17.93 17.93 0 0 1 -334.9 52.57L-293.66 7.56A17.93 17.93 0 0 1 -268.33 6.46L-44.57 211.49A65.97 65.97 0 0 0 44.57 211.49L268.33 6.46A17.93 17.93 0 0 1 293.66 7.56L334.9 52.57A17.93 17.93 0 0 1 333.8 77.9L110.04 282.94A162.88 162.88 0 0 1 -110.04 282.94Z"/>
127
+ <circle class="ctr" cx="0" cy="-278.85" r="92.71"/>
128
+ </g>
129
+ <defs>
130
+ <linearGradient id="cimHome1" x1="0" y1="-287.99" x2="0" y2="96.91" gradientUnits="userSpaceOnUse"><stop stop-color="#5285DC"/><stop offset="1" stop-color="#2E62C6"/></linearGradient>
131
+ <linearGradient id="cimHome2" x1="0" y1="30.07" x2="0" y2="414.96" gradientUnits="userSpaceOnUse"><stop stop-color="#F2694A"/><stop offset="1" stop-color="#E04A30"/></linearGradient>
132
+ </defs>
133
+ </svg>
116
134
  ) : (
117
135
  <svg class="azmark" viewBox="-8.5 0 928 928" aria-hidden="true">
118
136
  <path class="arm a1" d="M360.365 0C372.599 0 382.517 9.91778 382.517 22.152V97.7555C382.517 109.99 372.599 119.907 360.365 119.907H203.398C157.082 119.907 119.537 157.453 119.537 203.769V353.64C119.537 370.244 106.077 383.704 89.4732 383.704H22.152C9.91778 383.704 0 373.786 0 361.552V175.633C0 78.6337 78.6338 0 175.634 0H360.365Z"/>
@@ -167,6 +185,19 @@ const drawable = MARKS.includes(apex);
167
185
  :global(html:not([data-theme="dark"])) .home:hover .pgmark .ctr, :global(html:not([data-theme="dark"])) .home:focus-visible .pgmark .ctr { fill: #2B2724; }
168
186
  }
169
187
 
188
+ /* queries: City in Motion's mark in the toolbar · cimmark · the CiM home control
189
+ cityinmotion.nl's own public/mark.svg, unlit, by the same rules: a marker, two chevrons and the
190
+ circle for its head, the viewBox the ink's own bounds (measured with the arcs and the 1.04 scale the apex draws
191
+ at), ink at rest, its own gradients and the ground's centre when engaged. */
192
+ .cimmark .arm,
193
+ .cimmark .ctr { fill: currentColor; }
194
+ .home:hover .cimmark .a1, .home:focus-visible .cimmark .a1 { fill: url(#cimHome1); }
195
+ .home:hover .cimmark .a2, .home:focus-visible .cimmark .a2 { fill: url(#cimHome2); }
196
+ .home:hover .cimmark .ctr, .home:focus-visible .cimmark .ctr { fill: #F5F1E8; }
197
+ @media (prefers-color-scheme: light) {
198
+ :global(html:not([data-theme="dark"])) .home:hover .cimmark .ctr, :global(html:not([data-theme="dark"])) .home:focus-visible .cimmark .ctr { fill: #2B2724; }
199
+ }
200
+
170
201
  .home:hover .azmark .a1, .home:focus-visible .azmark .a1 { fill: url(#azHome1); }
171
202
  .home:hover .azmark .a2, .home:focus-visible .azmark .a2 { fill: url(#azHome2); }
172
203
  .home:hover .azmark .a3, .home:focus-visible .azmark .a3 { fill: url(#azHome3); }