great-cto 2.98.0 → 2.98.1
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.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "great_cto",
|
|
3
3
|
"id": "great_cto",
|
|
4
4
|
"description": "Engineering process for solo founders and teams up to 50 engineers. Agents do architecture, code review, QA, and security. You make two decisions per feature.",
|
|
5
|
-
"version": "2.98.
|
|
5
|
+
"version": "2.98.1",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Great CTO",
|
|
8
8
|
"url": "https://github.com/avelikiy/great_cto"
|
|
@@ -564,11 +564,7 @@ button { font-family: inherit; cursor: pointer; }
|
|
|
564
564
|
cannot be un-advanced. Scoped to `pointer: coarse` so the desktop density that
|
|
565
565
|
makes a long gate list scannable is left exactly as it is. 44px is the iOS
|
|
566
566
|
minimum; Android asks for 48dp, and the gap does the rest. */
|
|
567
|
-
|
|
568
|
-
.gate-btn { height: 44px; font-size: 13px; }
|
|
569
|
-
.inbox-row .actions .gate-btn { height: 44px; font-size: 13px; }
|
|
570
|
-
.gate-actions, .side-gate-actions, .inbox-row .actions { gap: 12px; }
|
|
571
|
-
}
|
|
567
|
+
|
|
572
568
|
.gate-approve { color: var(--status-review); border-color: rgba(22, 163, 74, 0.35); }
|
|
573
569
|
.gate-approve:hover { background: rgba(22, 163, 74, 0.08); border-color: var(--status-review); }
|
|
574
570
|
/* Agent runner (launch control) */
|
|
@@ -2241,8 +2237,16 @@ button { font-family: inherit; cursor: pointer; }
|
|
|
2241
2237
|
.sidebar-scrim.open { opacity: 1; pointer-events: auto; }
|
|
2242
2238
|
.menu-btn { display: inline-flex; }
|
|
2243
2239
|
.topbar { padding: 0 10px; gap: 8px; }
|
|
2240
|
+
/* Raising every control to 44px gave the actions 223px of a 375px bar and
|
|
2241
|
+
crushed the breadcrumb to "g… / B." — present, unreadable, worse than absent.
|
|
2242
|
+
The project name is already at the top of the drawer and the tab name is the
|
|
2243
|
+
row you tapped to get here, so the phone keeps only where you are. */
|
|
2244
2244
|
.topbar .crumbs { min-width: 0; overflow: hidden; white-space: nowrap; }
|
|
2245
2245
|
.topbar .crumbs > span { overflow: hidden; text-overflow: ellipsis; }
|
|
2246
|
+
.topbar .crumbs .proj-icon,
|
|
2247
|
+
.topbar .crumbs .sep,
|
|
2248
|
+
.topbar .crumbs #crumb-project { display: none; }
|
|
2249
|
+
.topbar .crumbs .here { color: var(--text); font-weight: 600; }
|
|
2246
2250
|
.topbar-actions { flex-shrink: 0; }
|
|
2247
2251
|
/* The search box is the one topbar item that can give up its width; ⌘K still
|
|
2248
2252
|
reaches it, and on a phone there is no ⌘K but there is the Search tab. */
|
|
@@ -2252,6 +2256,34 @@ button { font-family: inherit; cursor: pointer; }
|
|
|
2252
2256
|
/* Icon-only, with the name moved to aria-label/title rather than deleted. */
|
|
2253
2257
|
.btn-label { display: none; }
|
|
2254
2258
|
|
|
2259
|
+
/* The row's own arithmetic, measured rather than eyeballed: the page gives
|
|
2260
|
+
64px to its side padding and the row another 30px to border and padding,
|
|
2261
|
+
leaving 281px for the tracks. The fixed ones — id 110, two 14px gaps, and a
|
|
2262
|
+
44px Approve/Reject pair at about 156 — come to 294. The 1fr title column
|
|
2263
|
+
resolves to ZERO and the row overflows its own border box.
|
|
2264
|
+
Raising the buttons to a real touch target is what finished it off: at 24px
|
|
2265
|
+
they fit, at 44px they do not. Fixing one defect deepened its neighbour.
|
|
2266
|
+
So on a phone the row stops being three columns and becomes three rows:
|
|
2267
|
+
title first at full width, the id demoted to a meta line, the actions
|
|
2268
|
+
spanning the bottom. CSS only — the markup this renders from is shared with
|
|
2269
|
+
the desktop layout, and the desktop layout is fine. */
|
|
2270
|
+
.inbox-page { padding: 16px 16px 48px; }
|
|
2271
|
+
.inbox-row {
|
|
2272
|
+
display: flex; flex-wrap: wrap;
|
|
2273
|
+
gap: 8px 10px; align-items: baseline;
|
|
2274
|
+
}
|
|
2275
|
+
.inbox-row .ttl { order: 1; flex: 1 1 100%; font-size: 14px; }
|
|
2276
|
+
/* Two lines, wrapped — a phone has the vertical room it lacks sideways. */
|
|
2277
|
+
.inbox-row .ttl > :first-child { -webkit-line-clamp: 2; white-space: normal; }
|
|
2278
|
+
/* The id and the status share a line: stacked, each took a full row of its
|
|
2279
|
+
own and a four-line card said three things. */
|
|
2280
|
+
.inbox-row .id { order: 2; flex: 0 1 auto; padding-top: 0; }
|
|
2281
|
+
.inbox-row .actions { order: 3; margin-left: auto; }
|
|
2282
|
+
/* Except on a gate, where the line is a pair of 44px buttons and wants the
|
|
2283
|
+
whole width — the one row on this screen where the target size is the point. */
|
|
2284
|
+
.inbox-row .actions:has(.gate-btn) { flex: 1 0 100%; margin-left: 0; }
|
|
2285
|
+
.inbox-row .actions .gate-btn { flex: 1; }
|
|
2286
|
+
|
|
2255
2287
|
/* Four columns of numbers do not fit in 375px; they were being clipped, which
|
|
2256
2288
|
silently dropped the fourth stat rather than wrapping it. */
|
|
2257
2289
|
.inbox-summary { grid-template-columns: repeat(2, 1fr); }
|
|
@@ -2259,6 +2291,29 @@ button { font-family: inherit; cursor: pointer; }
|
|
|
2259
2291
|
.mp-hero { grid-template-columns: 1fr; }
|
|
2260
2292
|
.mp-row { grid-template-columns: 1fr; }
|
|
2261
2293
|
}
|
|
2294
|
+
@media (pointer: coarse) {
|
|
2295
|
+
/* A floor, not a list.
|
|
2296
|
+
Placed here, at the END of the stylesheet, for the same reason the
|
|
2297
|
+
phone-width block is: at equal specificity the later rule wins. Written
|
|
2298
|
+
higher up, its `.inbox-row .actions { gap: 12px }` lost to the base rule's
|
|
2299
|
+
4px declared 900 lines below it — so Approve and Reject sat 4px apart on a
|
|
2300
|
+
touch screen while a block that read as correct sat above saying 12.
|
|
2301
|
+
A declaration that loses is not a declaration.
|
|
2302
|
+
The first version of this block named .gate-btn and stopped there, because
|
|
2303
|
+
those were the buttons a review had pointed at. Two controls this same file
|
|
2304
|
+
had just added — the drawer's own hamburger at 40px and the topbar's icon
|
|
2305
|
+
buttons at ~32px — sat under the minimum from the day they were written,
|
|
2306
|
+
and nothing objected, because the rule was a list of what somebody had
|
|
2307
|
+
remembered rather than a property of the page.
|
|
2308
|
+
So: every control gets the floor, and the ones with something to say about
|
|
2309
|
+
their own size say it after. A button added tomorrow is covered by default;
|
|
2310
|
+
one that must stay small has to opt out in writing. */
|
|
2311
|
+
button, [role="button"], .nav-item, .toggle, summary { min-height: 44px; }
|
|
2312
|
+
.gate-btn, .inbox-row .actions .gate-btn { height: 44px; font-size: 13px; }
|
|
2313
|
+
.menu-btn { width: 44px; height: 44px; }
|
|
2314
|
+
.btn-bell { min-width: 44px; justify-content: center; }
|
|
2315
|
+
.gate-actions, .side-gate-actions, .inbox-row .actions { gap: 12px; }
|
|
2316
|
+
}
|
|
2262
2317
|
@keyframes pulse-glow { 0% { box-shadow: 0 0 0 0 rgba(76,175,80,.6);} 100% { box-shadow: 0 0 0 6px rgba(76,175,80,0);} }
|
|
2263
2318
|
/* ── Scrollbar ────────────────────────────────────────────────────────────── */
|
|
2264
2319
|
::-webkit-scrollbar { width: 10px; height: 10px; }
|
package/package.json
CHANGED