@bongos/core 1.17.1 → 1.17.3
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/.bongos-core.json +521 -281
- package/.claude/skills/blocker-review/SKILL.md +1 -1
- package/.claude/skills/builder-claim/SKILL.md +2 -0
- package/.claude/skills/builder-exit/SKILL.md +2 -2
- package/.claude/skills/builder-redteam/SKILL.md +3 -3
- package/.claude/skills/builder-setup/SKILL.md +2 -2
- package/.claude/skills/builder-start/SKILL.md +1 -1
- package/.claude/skills/dev/SKILL.md +1 -1
- package/.claude/skills/idea-triage/SKILL.md +2 -2
- package/.claude/skills/ideate/SKILL.md +1 -1
- package/.claude/skills/merge-mode/SKILL.md +1 -1
- package/.claude/skills/new-project/SKILL.md +3 -0
- package/.claude/skills/paint/SKILL.md +1 -1
- package/GOVERNANCE.md +1 -1
- package/README.md +1 -1
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +2 -0
- package/clients/bongos-client/index.cjs +2 -0
- package/clients/bongos-client/index.d.ts +4 -2
- package/clients/bongos-client/index.mjs +2 -0
- package/docs/adr/0001-stack-choice-single-vps.md +1 -1
- package/docs/adr/0008-google-chat-oauth-user-auth.md +1 -1
- package/docs/adr/0019-red-team-bounty-payout-table.md +3 -3
- package/docs/adr/0020-security-model-public-stub.md +1 -1
- package/docs/adr/0023-kind-multipliers-and-idea-bonus.md +1 -1
- package/docs/adr/0024-cloneable-repo-local-first-memory.md +1 -1
- package/docs/adr/0026-bfg-memory-hygiene-and-cross-builder-learning.md +4 -4
- package/docs/adr/0027-bfg-session-inefficiency-evaluator.md +3 -3
- package/docs/adr/0030-builders-hall-live-updates.md +1 -1
- package/docs/adr/0031-cloud-dev-environments-for-builders.md +4 -4
- package/docs/adr/0032-discord-mirror-of-gds.md +2 -2
- package/docs/adr/0034-thetes-graduated-newcomer-rank.md +1 -1
- package/docs/adr/0044-mediterranean-palette-replacement.md +1 -1
- package/docs/adr/0044-per-box-live-game-preview.md +1 -1
- package/docs/adr/0054-session-token-reward-cost-plus.md +10 -10
- package/docs/adr/0057-container-cost-ledger.md +3 -3
- package/docs/adr/0062-medusa-instance-model-decoupling.md +4 -4
- package/docs/adr/0065-agpl-nonprofit-ai-first-governance.md +2 -2
- package/docs/adr/0085-remove-default-per-builder-spend-cap.md +1 -1
- package/docs/adr/0086-goal-scoped-work-hierarchy.md +1 -1
- package/docs/adr/0096-require-reward-before-workable.md +9 -9
- package/docs/adr/0097-retroactive-reward-backfill.md +3 -3
- package/docs/adr/0100-two-repo-instance-model.md +1 -1
- package/docs/adr/0101-goal-hierarchy-phase-5-judge-membership-reward.md +3 -3
- package/docs/adr/0103-core-first-extraction-cloud-bongos-trunk.md +3 -3
- package/docs/adr/0107-module-upstreaming-contribution-to-core-catalog.md +1 -1
- package/docs/adr/0120-pay-on-land-and-builder-owned-rebase-gate.md +6 -6
- package/docs/adr/0136-update-channel-subscription-policy.md +51 -0
- package/docs/adr/0137-upstream-publish-policy-manual-owner-gated.md +40 -0
- package/docs/adr/0138-bundled-module-deps-declared-per-module.md +45 -0
- package/docs/adr/README.md +9 -6
- package/docs/api/openapi.json +65 -26
- package/docs/api-reference.md +3 -2
- package/docs/architecture.md +2 -2
- package/docs/branding-contract.md +5 -4
- package/docs/canonical-permissions.md +1 -1
- package/docs/design/vanilla-hall-ui-redesign-scope.md +1 -1
- package/docs/file-map.md +18 -17
- package/docs/handoff-template.md +2 -2
- package/docs/modules-contract.md +6 -1
- package/docs/onboarding/diagrams/README.md +7 -7
- package/docs/onboarding/drachmae-and-karma.md +18 -18
- package/docs/onboarding/primer.md +9 -9
- package/docs/recipes/audit-replay.md +2 -2
- package/docs/recipes/builder-box-lifecycle.md +2 -2
- package/docs/recipes/claude-design-loop.md +1 -1
- package/docs/recipes/ops-gotchas.md +1 -1
- package/docs/recipes/private-npm-distribution.md +17 -0
- package/docs/recipes/staging-environment.md +1 -1
- package/docs/recipes/upgrading-the-core.md +55 -0
- package/docs/research/cursor-competitive-analysis.md +1 -1
- package/docs/research/llm-model-agnostic-and-cheaper-grader.md +1 -1
- package/modules/discord/module.json +2 -1
- package/modules/economy/achievements.js +9 -1
- package/modules/economy/credits.js +10 -1
- package/modules/hall-ui/public/builders.js +137 -620
- package/modules/hall-ui/public/goal-inbox.js +232 -0
- package/modules/hall-ui/public/goals-page.js +4 -1
- package/modules/hall-ui/public/goals.html +8 -0
- package/modules/hall-ui/public/hall-kit.js +474 -0
- package/modules/hall-ui/public/hall-widgets.js +14 -5
- package/modules/hall-ui/public/index.html +3 -0
- package/modules/hall-ui/public/instances-panel.js +24 -3
- package/modules/hall-ui/public/new-project-wizard.js +7 -5
- package/modules/hall-ui/public/style.css +168 -0
- package/modules/hall-ui/public/work.css +194 -0
- package/modules/hall-ui/public/work.html +46 -374
- package/modules/hall-ui/public/work.js +137 -102
- package/modules/lifecycle/criterion-suggest.js +80 -0
- package/modules/lifecycle/db.js +42 -5
- package/modules/lifecycle/routes/goals.js +26 -0
- package/modules/lifecycle/routes/tasks.js +21 -0
- package/modules/provisioning/CLAUDE.md +15 -0
- package/modules/provisioning/migrations/provisioning_001_tables.sql +160 -0
- package/modules/provisioning/migrations/provisioning_002_standalone_shape.sql +11 -0
- package/modules/provisioning/migrations/provisioning_003_github_app_manifest.sql +95 -0
- package/modules/provisioning/module.json +17 -0
- package/modules/provisioning/onboard-plan.js +37 -0
- package/modules/provisioning/provisioning.js +539 -0
- package/modules/provisioning/rate-limit.js +35 -0
- package/modules/provisioning/routes/provisioning.js +607 -0
- package/modules/provisioning/tests/provisioning.mjs +232 -0
- package/modules/provisioning/ui/.gitkeep +0 -0
- package/modules/security/secret-scrub.js +10 -0
- package/package-lock.json +2 -2
- package/package.json +7 -2
- package/scripts/discord/README.md +1 -1
- package/scripts/gds/claim.js +98 -48
- package/scripts/gds/claude-materialize.js +30 -9
- package/scripts/gds/cutover-codemod.js +241 -0
- package/scripts/gds/fitness.js +54 -0
- package/scripts/gds/init.js +59 -3
- package/scripts/gds/lint-infra-exec.js +70 -0
- package/scripts/gds/lint-workflow-exec.js +63 -0
- package/scripts/gds/mirror-lineage-check.js +14 -5
- package/scripts/gds/mirror-redact.js +8 -0
- package/scripts/gds/onboard.js +4 -0
- package/scripts/gds/package-core.js +18 -3
- package/scripts/gds/publish-manifest.js +60 -2
- package/scripts/gds/run-routine.js +51 -13
- package/scripts/gds/run-unit-tests.js +4 -0
- package/scripts/gds/update-channel.js +186 -0
- package/scripts/gds/upgrade.js +116 -9
- package/scripts/hall-preview/README.md +103 -0
- package/scripts/hall-preview/fixtures/access-requests.json +1 -0
- package/scripts/hall-preview/fixtures/achievements.json +76 -0
- package/scripts/hall-preview/fixtures/analytics__builder.json +251 -0
- package/scripts/hall-preview/fixtures/audit-log.json +1 -0
- package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +1 -0
- package/scripts/hall-preview/fixtures/builders__active-claims.json +1 -0
- package/scripts/hall-preview/fixtures/builders__directory.json +81 -0
- package/scripts/hall-preview/fixtures/builders__roster.json +1 -0
- package/scripts/hall-preview/fixtures/goals.json +502 -0
- package/scripts/hall-preview/fixtures/goals__25.json +96 -0
- package/scripts/hall-preview/fixtures/goals__26.json +67 -0
- package/scripts/hall-preview/fixtures/goals__3.json +103 -0
- package/scripts/hall-preview/fixtures/goals__35.json +49 -0
- package/scripts/hall-preview/fixtures/goals__conflicts.json +154 -0
- package/scripts/hall-preview/fixtures/goals__detail.json +96 -0
- package/scripts/hall-preview/fixtures/goals__inbox.json +5 -0
- package/scripts/hall-preview/fixtures/goals__requests.json +3 -0
- package/scripts/hall-preview/fixtures/grades__by-builder.json +1 -0
- package/scripts/hall-preview/fixtures/inbox.json +330 -0
- package/scripts/hall-preview/fixtures/instance.json +124 -0
- package/scripts/hall-preview/fixtures/leaderboard.json +184 -0
- package/scripts/hall-preview/fixtures/me.json +476 -0
- package/scripts/hall-preview/fixtures/me__recent-ships.json +304 -0
- package/scripts/hall-preview/fixtures/override-requests.json +1 -0
- package/scripts/hall-preview/fixtures/provisioning__fleet.json +1 -0
- package/scripts/hall-preview/fixtures/provisioning__fleet__cost-ledger.json +1 -0
- package/scripts/hall-preview/fixtures/provisioning__instances.json +1 -0
- package/scripts/hall-preview/fixtures/public__analytics__ecosystem.json +516 -0
- package/scripts/hall-preview/fixtures/public__bounty-table.json +37 -0
- package/scripts/hall-preview/fixtures/public__cost-summary.json +742 -0
- package/scripts/hall-preview/fixtures/public__estimation-drift.json +41 -0
- package/scripts/hall-preview/fixtures/public__grades.json +50 -0
- package/scripts/hall-preview/fixtures/public__progress.json +124 -0
- package/scripts/hall-preview/fixtures/public__recent-shipped.json +426 -0
- package/scripts/hall-preview/fixtures/public__repo-health.json +160 -0
- package/scripts/hall-preview/fixtures/public__repo-info.json +5 -0
- package/scripts/hall-preview/fixtures/security__docs.json +1 -0
- package/scripts/hall-preview/fixtures/security__reports.json +1 -0
- package/scripts/hall-preview/fixtures/sessions__search.json +1 -0
- package/scripts/hall-preview/fixtures/tasks.json +2420 -0
- package/scripts/hall-preview/fixtures/tasks__claimable.json +2555 -0
- package/scripts/hall-preview/fixtures/tasks__detail.json +111 -0
- package/scripts/hall-preview/fixtures/tasks__peer-votes__feed.json +330 -0
- package/scripts/hall-preview/fixtures/versions.json +89 -0
- package/scripts/hall-preview/refresh-fixtures.js +77 -0
- package/scripts/hall-preview/server.js +178 -0
- package/scripts/migrate.sh +29 -4
- package/src/bongos/auth.js +14 -1
- package/src/bongos/optimizer.js +37 -2
- package/src/bongos/serve-internal.js +10 -1
- package/src/branding.js +1 -0
- package/src/module-api.js +12 -1
- package/src/module-loader/loader.js +36 -4
- package/src/module-loader/manifest-schema.js +16 -1
- package/tests/branding.mjs +11 -0
- package/tests/claim_error_surface.mjs +107 -0
- package/tests/claude_materialize.mjs +20 -0
- package/tests/consumer_layout_boot.mjs +302 -0
- package/tests/criterion_suggest.mjs +106 -0
- package/tests/cutover_codemod.mjs +184 -0
- package/tests/device_flow_start.mjs +25 -2
- package/tests/hook_core_resolve.mjs +125 -0
- package/tests/infra_exec_paths.mjs +104 -0
- package/tests/init.mjs +47 -0
- package/tests/migrate_root_resolution.mjs +97 -0
- package/tests/mirror_lineage_proof.mjs +14 -0
- package/tests/module_loader.mjs +42 -0
- package/tests/module_manifest.mjs +19 -0
- package/tests/onboard.mjs +13 -0
- package/tests/package_core.mjs +8 -0
- package/tests/provisioning_github_app_routes.mjs +15 -0
- package/tests/publish_manifest.mjs +52 -1
- package/tests/run_routine.mjs +26 -1
- package/tests/run_routine_two_root.mjs +77 -0
- package/tests/scrubber_corpus.mjs +17 -0
- package/tests/update_channel.mjs +186 -0
- package/tests/upgrade.mjs +131 -0
- package/tests/workflow_exec_paths.mjs +98 -0
- package/docs/design/container-exterior-tiles.md +0 -49
- package/docs/design/container-exterior.md +0 -81
- package/docs/design/container-interior.md +0 -77
- package/docs/design/world-map-scroll.md +0 -41
- package/docs/recipes/claude-gemini-bongos-doors.md +0 -155
- package/docs/recipes/cloudbongos-staging-gate.md +0 -139
- package/docs/recipes/cloudbongos-standup.md +0 -111
- package/docs/recipes/parallel-load-results-2026-05-30.md +0 -63
- package/docs/recipes/parallel-load-test.md +0 -32
- package/docs/recipes/pixel-art-pipeline.md +0 -411
- package/docs/recipes/staging-data.md +0 -50
- package/migrations/instance/018_pms_v3_planning_seed.sql +0 -131
- package/migrations/instance/080_gds_v4_planning_seed.sql +0 -75
- package/migrations/instance/110_medusa_planning_seed.sql +0 -70
- package/migrations/instance/120_bongos_v1_planning_seed.sql +0 -69
- package/migrations/instance/144_bongos_v1_module_system_criterion.sql +0 -26
- package/migrations/instance/159_bongos_v1_goal_hierarchy_criterion.sql +0 -29
- package/migrations/instance/172_v2_world_planning_seed.sql +0 -163
- package/migrations/instance/173_bongos_v1_c7_core_modularized.sql +0 -33
- package/migrations/instance/182_gdsv4_bongos_consolidation.sql +0 -132
- package/migrations/instance/183_gdsv4_carryover_themed_goals.sql +0 -116
- package/migrations/instance/186_bongos_v1_governance_planning_seed.sql +0 -69
- package/scripts/gds/art-stage.js +0 -152
- package/server.js +0 -212
- package/tests/art_key.mjs +0 -121
- package/tests/day_cycle.mjs +0 -197
- package/tests/snapshot_picker.mjs +0 -233
- package/tests/sprite_facing.mjs +0 -35
- package/tests/terrain_picker.mjs +0 -298
- package/tests/turn_in_place.mjs +0 -280
- package/tests/walkability.mjs +0 -188
|
@@ -105,6 +105,22 @@ html[data-theme="dark"] body { background: var(--bg); }
|
|
|
105
105
|
html:not([data-theme]) body { background: var(--bg); }
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
/* ---------- table of contents (task 2166) ----------
|
|
109
|
+
Section banners in file order — grep "----------" to jump:
|
|
110
|
+
tokens + dark theme (ABOVE — the theming contract; never move/rename)
|
|
111
|
+
base · app shell · responsive shell · cards (.scroll) · stat tiles
|
|
112
|
+
Standing layout (section rail) · legacy page chrome compat
|
|
113
|
+
ledger tables · filters / pager / buttons · profile / standing
|
|
114
|
+
rank badges + tooltip · karma / acclaim · achievements · dev curve
|
|
115
|
+
onboarding checklist · welcome panel + setup selector · landing
|
|
116
|
+
goals · work-board task cards · ranks page
|
|
117
|
+
security / roster / admin leftovers (dead — removed by task 2179)
|
|
118
|
+
toast + overlays · misc shared bits · widget one-offs (wizard, triage,
|
|
119
|
+
goal inbox) · hall-kit components (END — the shared kit, task 2166).
|
|
120
|
+
New page-SPECIFIC styles belong in that page's own <page>.css (the
|
|
121
|
+
primer.css precedent), not here; new SHARED components join the kit
|
|
122
|
+
section at the end. */
|
|
123
|
+
|
|
108
124
|
/* ---------- base ---------- */
|
|
109
125
|
|
|
110
126
|
* { box-sizing: border-box; }
|
|
@@ -1746,3 +1762,155 @@ main [id] { scroll-margin-top: calc(var(--topbar-h) + 16px); }
|
|
|
1746
1762
|
.np-kv span { color: var(--ink-faint); font-size: 0.85rem; min-width: 12rem; }
|
|
1747
1763
|
.np-kv code, .np-steps code { background: var(--surface-2); padding: 0.1rem 0.35rem; border-radius: 4px; word-break: break-all; }
|
|
1748
1764
|
.np-done { margin-top: 0.5rem; }
|
|
1765
|
+
|
|
1766
|
+
/* ---- task 1471: idea-inbox triage cue (Home widget, Metic+) ---- */
|
|
1767
|
+
/* Shared .count-pill — work.html defines its own page-scoped copy; the hall
|
|
1768
|
+
index widget needs the same look, so it lives in the shared sheet now. */
|
|
1769
|
+
.count-pill {
|
|
1770
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
1771
|
+
min-width: 20px; height: 18px; padding: 0 6px; margin-left: 8px;
|
|
1772
|
+
border-radius: 999px; background: var(--surface-2); color: var(--ink-soft);
|
|
1773
|
+
font-size: 11px; font-weight: 600; font-variant-numeric: tabular-nums;
|
|
1774
|
+
vertical-align: 2px;
|
|
1775
|
+
}
|
|
1776
|
+
.triage-inbox { list-style: none; margin: 0; padding: 0; }
|
|
1777
|
+
.triage-inbox__item {
|
|
1778
|
+
display: flex; align-items: baseline; gap: 0.5rem;
|
|
1779
|
+
padding: 0.3rem 0; border-top: 1px solid var(--rule-soft);
|
|
1780
|
+
}
|
|
1781
|
+
.triage-inbox__item:first-child { border-top: 0; }
|
|
1782
|
+
.triage-inbox__link { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1783
|
+
.triage-inbox__kind {
|
|
1784
|
+
flex: 0 0 auto; font-size: 11px; color: var(--ink-faint);
|
|
1785
|
+
text-transform: uppercase; letter-spacing: 0.04em;
|
|
1786
|
+
}
|
|
1787
|
+
.triage-inbox__empty { color: var(--ink-faint); padding: 0.3rem 0; }
|
|
1788
|
+
|
|
1789
|
+
/* Goal inbox (task 1954, ADR 0112) — the home-page two-sided membership queue:
|
|
1790
|
+
invitations to accept + join-requests to approve. Matches the home widgets'
|
|
1791
|
+
card language (.scroll host); each row is body-left / actions-right. */
|
|
1792
|
+
.ginbox { list-style: none; margin: 0 0 4px; padding: 0; }
|
|
1793
|
+
.ginbox__sec-h {
|
|
1794
|
+
margin: 14px 0 6px; font-size: 12px; font-weight: 600;
|
|
1795
|
+
text-transform: uppercase; letter-spacing: 0.04em; color: var(--ink-faint);
|
|
1796
|
+
}
|
|
1797
|
+
.ginbox__item {
|
|
1798
|
+
display: flex; align-items: flex-start; gap: 12px;
|
|
1799
|
+
padding: 9px 0; border-top: 1px solid var(--rule-soft);
|
|
1800
|
+
}
|
|
1801
|
+
.ginbox__item:first-child { border-top: 0; }
|
|
1802
|
+
.ginbox__body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
1803
|
+
.ginbox__goal { font-weight: 600; font-size: 13.5px; }
|
|
1804
|
+
.ginbox__sub { font-size: 12.5px; color: var(--ink-soft); }
|
|
1805
|
+
.ginbox__note { margin: 3px 0 0; font-size: 12.5px; color: var(--ink-soft); font-style: italic; }
|
|
1806
|
+
.ginbox__actions { flex: 0 0 auto; display: flex; gap: 6px; }
|
|
1807
|
+
.ginbox__pending { font-size: 12.5px; margin: 10px 0 0; color: var(--ink-soft); }
|
|
1808
|
+
|
|
1809
|
+
/* ---------- hall-kit components (task 2166) ----------
|
|
1810
|
+
Styles for the shared kit (hall-kit.js / window.OTBKit): pager bar,
|
|
1811
|
+
filter-bar disclosure + chips, tab strip, empty state, skeleton shimmer,
|
|
1812
|
+
collapsible card. The kit reuses .ledger/.pager/.filters/.setup__tab/
|
|
1813
|
+
.rail-link defined above; only what is new lives here. The .pager--paged
|
|
1814
|
+
block is promoted VERBATIM from work.html's page-local <style> (task 1931)
|
|
1815
|
+
so every page can render the standard bar — work.html's identical copy
|
|
1816
|
+
retires with task 2170 (duplicate rules, no visual change meanwhile). */
|
|
1817
|
+
|
|
1818
|
+
.pager--paged { justify-content: space-between; flex-wrap: wrap; gap: 10px 16px; }
|
|
1819
|
+
.pager__nav { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
|
|
1820
|
+
.pager__perpage {
|
|
1821
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
1822
|
+
font-size: 12px; color: var(--ink-faint);
|
|
1823
|
+
}
|
|
1824
|
+
.pager__perpage select { height: 30px; padding: 2px 8px; font-size: 13px; }
|
|
1825
|
+
.pager__page {
|
|
1826
|
+
font-size: 12.5px; color: var(--ink-soft);
|
|
1827
|
+
font-variant-numeric: tabular-nums; min-width: 6.5em; text-align: center;
|
|
1828
|
+
}
|
|
1829
|
+
.pager__nav .pager__btn:disabled { opacity: 0.4; cursor: default; }
|
|
1830
|
+
|
|
1831
|
+
/* filter-bar disclosure ("Filters" button) + removable active-filter chips */
|
|
1832
|
+
.filters__more-count { margin-left: 6px; }
|
|
1833
|
+
.filters--overflow {
|
|
1834
|
+
padding: 10px 12px;
|
|
1835
|
+
border: 1px dashed var(--border-strong);
|
|
1836
|
+
border-radius: var(--radius-sm);
|
|
1837
|
+
background: var(--surface-2);
|
|
1838
|
+
margin-bottom: 14px;
|
|
1839
|
+
}
|
|
1840
|
+
.filter-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 12px; }
|
|
1841
|
+
.chip {
|
|
1842
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
1843
|
+
padding: 3px 10px;
|
|
1844
|
+
font-size: 12.5px;
|
|
1845
|
+
color: var(--accent-text);
|
|
1846
|
+
background: var(--accent-weak);
|
|
1847
|
+
border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--border));
|
|
1848
|
+
border-radius: 999px;
|
|
1849
|
+
cursor: pointer;
|
|
1850
|
+
}
|
|
1851
|
+
.chip:hover { background: color-mix(in srgb, var(--accent) 16%, var(--bg-card)); }
|
|
1852
|
+
|
|
1853
|
+
/* tab strip — the .setup__tab idiom in the .setup__toggle frame, promoted */
|
|
1854
|
+
.kit-tabs {
|
|
1855
|
+
display: inline-flex;
|
|
1856
|
+
max-width: 100%;
|
|
1857
|
+
overflow-x: auto;
|
|
1858
|
+
border: 1px solid var(--border-strong);
|
|
1859
|
+
border-radius: var(--radius-sm);
|
|
1860
|
+
margin: 0 0 14px;
|
|
1861
|
+
}
|
|
1862
|
+
.kit-tabs .setup__tab { white-space: nowrap; }
|
|
1863
|
+
.kit-tabs .setup__tab .count-pill { margin-left: 6px; }
|
|
1864
|
+
|
|
1865
|
+
/* empty state — one short line + at most one action link */
|
|
1866
|
+
.empty-state { padding: 6px 0; }
|
|
1867
|
+
.empty-state p { margin: 0; font-size: 13px; color: var(--ink-faint); }
|
|
1868
|
+
.empty-state__action { display: inline-block; margin-top: 6px; font-size: 13px; }
|
|
1869
|
+
|
|
1870
|
+
/* skeleton shimmer — standard-height placeholder rows while data loads, so
|
|
1871
|
+
cards don't jump; derives from the ink/bg tokens like everything else */
|
|
1872
|
+
.kit-skel {
|
|
1873
|
+
display: inline-block;
|
|
1874
|
+
width: 60%;
|
|
1875
|
+
min-width: 80px;
|
|
1876
|
+
height: 12px;
|
|
1877
|
+
border-radius: 6px;
|
|
1878
|
+
background: linear-gradient(90deg,
|
|
1879
|
+
color-mix(in srgb, var(--ink) 7%, var(--bg-card)) 25%,
|
|
1880
|
+
color-mix(in srgb, var(--ink) 13%, var(--bg-card)) 45%,
|
|
1881
|
+
color-mix(in srgb, var(--ink) 7%, var(--bg-card)) 65%);
|
|
1882
|
+
background-size: 200% 100%;
|
|
1883
|
+
animation: kit-skel-shimmer 1.2s ease-in-out infinite;
|
|
1884
|
+
}
|
|
1885
|
+
.kit-skel-row td { border-bottom: 1px solid var(--rule-soft); }
|
|
1886
|
+
@keyframes kit-skel-shimmer {
|
|
1887
|
+
from { background-position: 120% 0; }
|
|
1888
|
+
to { background-position: -80% 0; }
|
|
1889
|
+
}
|
|
1890
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1891
|
+
.kit-skel { animation: none; }
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1894
|
+
/* collapsible card body — the Work-backlog <details> idiom, generalized */
|
|
1895
|
+
.kit-collapse__summary {
|
|
1896
|
+
cursor: pointer;
|
|
1897
|
+
display: flex;
|
|
1898
|
+
align-items: baseline;
|
|
1899
|
+
gap: 8px;
|
|
1900
|
+
}
|
|
1901
|
+
.kit-collapse__summary .scroll__h { display: inline; margin: 0; }
|
|
1902
|
+
.kit-collapse__body { margin-top: 12px; }
|
|
1903
|
+
|
|
1904
|
+
/* ---- Home dashboard (task 2169) ---- */
|
|
1905
|
+
/* Stat tiles are links now — inherit ink, reveal affordance on hover. */
|
|
1906
|
+
a.stat-tile { color: inherit; }
|
|
1907
|
+
a.stat-tile:hover {
|
|
1908
|
+
text-decoration: none;
|
|
1909
|
+
border-color: color-mix(in srgb, var(--accent) 35%, var(--border));
|
|
1910
|
+
background: color-mix(in srgb, var(--accent) 3%, var(--surface));
|
|
1911
|
+
}
|
|
1912
|
+
/* Projects card header: title left, "Start a project" disclosure right. */
|
|
1913
|
+
.proj-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
|
|
1914
|
+
.proj-head .scroll__h { margin: 0; }
|
|
1915
|
+
/* The over-budget "More" row — one quiet line, not a card. */
|
|
1916
|
+
.home-more { margin: 0; font-size: 13px; color: var(--ink-soft); }
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/* work.css — page-local styles for the Work Board (task 2170; extracted from
|
|
2
|
+
work.html's old inline <style> per the hall placement rules). Only what the
|
|
3
|
+
shared kit doesn't carry lives here: in-flight actions, claimable task
|
|
4
|
+
cards (dense 2-line layout), history list, bulk toolbar. Shared pieces —
|
|
5
|
+
.pager--paged, .count-pill, .kit-tabs, .filters overflow — are in
|
|
6
|
+
style.css. Everything derives from the shared design tokens so instance
|
|
7
|
+
packs reskin this page along with the rest of the hall. */
|
|
8
|
+
|
|
9
|
+
.kbd {
|
|
10
|
+
display: inline-block;
|
|
11
|
+
padding: 0 6px;
|
|
12
|
+
border: 1px solid var(--border-strong);
|
|
13
|
+
border-radius: 5px;
|
|
14
|
+
background: var(--surface-2);
|
|
15
|
+
font-size: 0.85em;
|
|
16
|
+
font-weight: 600;
|
|
17
|
+
color: var(--ink-soft);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.wip-builder { color: var(--ink); font-weight: 600; }
|
|
21
|
+
.wip-builder small { color: var(--ink-soft); font-weight: 400; }
|
|
22
|
+
|
|
23
|
+
/* Filtered-count line under the filter bar. */
|
|
24
|
+
.claim-count-line {
|
|
25
|
+
margin: 0 0 10px;
|
|
26
|
+
font-size: 12.5px;
|
|
27
|
+
color: var(--ink-faint);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* ---- #616 / task 2170: claim/release actions + the dense task card ---- */
|
|
31
|
+
|
|
32
|
+
/* task 2170 (owner call 2026-07-10): denser 2-line cards. The card keeps its
|
|
33
|
+
grid but tightens padding and type, actions go horizontal, and the touches
|
|
34
|
+
path-dump becomes a "✎ N files" chip with the full list in the tooltip. */
|
|
35
|
+
.task { padding: 8px 12px; gap: 2px 12px; }
|
|
36
|
+
.task__title { font-size: 13px; line-height: 1.35; }
|
|
37
|
+
.task__meta { margin-top: 1px; row-gap: 2px; }
|
|
38
|
+
|
|
39
|
+
.task__actions {
|
|
40
|
+
display: flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
gap: 6px;
|
|
43
|
+
}
|
|
44
|
+
/* Claim is the primary action — filled accent so it reads above Copy. */
|
|
45
|
+
.task__claim {
|
|
46
|
+
background: var(--accent);
|
|
47
|
+
border: 1px solid var(--accent-deep);
|
|
48
|
+
color: #fff;
|
|
49
|
+
border-radius: var(--radius-sm);
|
|
50
|
+
font-size: 12.5px;
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
padding: 5px 14px;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
transition: background 150ms, opacity 150ms;
|
|
56
|
+
}
|
|
57
|
+
.task__claim:hover { background: var(--accent-deep); }
|
|
58
|
+
.task__claim:disabled { opacity: 0.55; cursor: default; }
|
|
59
|
+
|
|
60
|
+
/* Files a claimable task is responsible for — a compact count chip in the
|
|
61
|
+
meta row; the full path list rides the tooltip (task 2170 density pass). */
|
|
62
|
+
.task__touches {
|
|
63
|
+
color: var(--ink-faint);
|
|
64
|
+
font-size: 12px;
|
|
65
|
+
white-space: nowrap;
|
|
66
|
+
cursor: help;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.task__tag--newcomer {
|
|
70
|
+
background: var(--ok-weak);
|
|
71
|
+
color: var(--ok);
|
|
72
|
+
border-color: color-mix(in srgb, var(--ok) 30%, transparent);
|
|
73
|
+
}
|
|
74
|
+
.task__tag--mine {
|
|
75
|
+
background: var(--accent-weak);
|
|
76
|
+
color: var(--accent-text);
|
|
77
|
+
border-color: color-mix(in srgb, var(--accent) 35%, transparent);
|
|
78
|
+
}
|
|
79
|
+
/* task 1498 / ADR 0084: per-task rank floor. Outlined + emphasized (not a
|
|
80
|
+
filled tag) so a gated task reads as "authority required", distinct from
|
|
81
|
+
the filled newcomer tag. */
|
|
82
|
+
.task__tag--rank {
|
|
83
|
+
background: transparent;
|
|
84
|
+
color: var(--warn);
|
|
85
|
+
border-color: color-mix(in srgb, var(--warn) 45%, transparent);
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
letter-spacing: 0.02em;
|
|
88
|
+
}
|
|
89
|
+
/* task 1752: the open (no floor) state — muted/neutral so "Any rank" reads as
|
|
90
|
+
"open to all", not as a warning like the gated --rank tag above. */
|
|
91
|
+
.task__tag--rank-open {
|
|
92
|
+
background: transparent;
|
|
93
|
+
color: var(--ink-faint);
|
|
94
|
+
border-color: var(--border);
|
|
95
|
+
}
|
|
96
|
+
/* task 1753: the whole card is clickable → toggles selection (task 1869). */
|
|
97
|
+
.task { cursor: pointer; }
|
|
98
|
+
.backlog-count { font-size: 13px; color: var(--ink-faint); margin-left: 8px; }
|
|
99
|
+
#backlog-list .history__row { cursor: pointer; }
|
|
100
|
+
|
|
101
|
+
/* In-flight table: release action on the viewer's own claims. */
|
|
102
|
+
.wip__action { text-align: right; white-space: nowrap; }
|
|
103
|
+
.wip__release {
|
|
104
|
+
background: var(--surface);
|
|
105
|
+
border: 1px solid var(--border-strong);
|
|
106
|
+
color: var(--ink-soft);
|
|
107
|
+
border-radius: var(--radius-sm);
|
|
108
|
+
font-size: 12px;
|
|
109
|
+
font-weight: 600;
|
|
110
|
+
padding: 4px 11px;
|
|
111
|
+
cursor: pointer;
|
|
112
|
+
transition: background 150ms, color 150ms, border-color 150ms;
|
|
113
|
+
}
|
|
114
|
+
.wip__release:hover:not(:disabled) {
|
|
115
|
+
background: var(--danger-weak);
|
|
116
|
+
color: var(--danger);
|
|
117
|
+
border-color: color-mix(in srgb, var(--danger) 40%, transparent);
|
|
118
|
+
}
|
|
119
|
+
.wip__release:disabled { opacity: 0.55; cursor: default; }
|
|
120
|
+
.wip__mine-none { color: var(--ink-faint); }
|
|
121
|
+
.wip__row--mine { background: var(--accent-weak); }
|
|
122
|
+
|
|
123
|
+
/* Recently-shipped history. */
|
|
124
|
+
.history { display: flex; flex-direction: column; gap: 2px; margin-top: 6px; }
|
|
125
|
+
.history__row {
|
|
126
|
+
display: flex; align-items: baseline; gap: 12px;
|
|
127
|
+
padding: 6px 4px;
|
|
128
|
+
border-bottom: 1px solid var(--rule-soft);
|
|
129
|
+
}
|
|
130
|
+
.history__row:last-child { border-bottom: none; }
|
|
131
|
+
.history__id {
|
|
132
|
+
font-weight: 600; color: var(--ink-soft);
|
|
133
|
+
font-variant-numeric: tabular-nums; min-width: 3.2em;
|
|
134
|
+
}
|
|
135
|
+
.history__title { flex: 1 1 auto; color: var(--ink); min-width: 0; }
|
|
136
|
+
.history__when { color: var(--ink-faint); font-size: 12.5px; white-space: nowrap; }
|
|
137
|
+
|
|
138
|
+
@media (max-width: 640px) {
|
|
139
|
+
.task__actions { grid-column: 2; justify-self: start; }
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* ---- task 1759: multi-select + the bottom bulk-action toolbar ---- */
|
|
143
|
+
|
|
144
|
+
.wip__select-cell { width: 1%; text-align: center; }
|
|
145
|
+
.wip__select { width: 15px; height: 15px; cursor: pointer; accent-color: var(--accent); }
|
|
146
|
+
|
|
147
|
+
.bulk-toolbar {
|
|
148
|
+
position: fixed;
|
|
149
|
+
left: 50%;
|
|
150
|
+
bottom: 20px;
|
|
151
|
+
transform: translateX(-50%);
|
|
152
|
+
z-index: 120;
|
|
153
|
+
display: flex;
|
|
154
|
+
align-items: center;
|
|
155
|
+
gap: 14px;
|
|
156
|
+
flex-wrap: wrap;
|
|
157
|
+
background: var(--ink);
|
|
158
|
+
color: var(--bg-card);
|
|
159
|
+
padding: 10px 16px;
|
|
160
|
+
border-radius: var(--radius);
|
|
161
|
+
box-shadow: var(--shadow-pop);
|
|
162
|
+
max-width: min(92vw, 720px);
|
|
163
|
+
}
|
|
164
|
+
.bulk-toolbar[hidden] { display: none; }
|
|
165
|
+
.bulk-toolbar__count { font-size: 13px; font-weight: 600; white-space: nowrap; }
|
|
166
|
+
.bulk-toolbar__actions { display: flex; gap: 8px; flex-wrap: wrap; }
|
|
167
|
+
.bulk-toolbar__btn {
|
|
168
|
+
background: rgba(255, 255, 255, 0.12);
|
|
169
|
+
border: 1px solid rgba(255, 255, 255, 0.25);
|
|
170
|
+
color: var(--bg-card);
|
|
171
|
+
border-radius: var(--radius-sm);
|
|
172
|
+
font-size: 12.5px;
|
|
173
|
+
font-weight: 600;
|
|
174
|
+
padding: 6px 12px;
|
|
175
|
+
cursor: pointer;
|
|
176
|
+
white-space: nowrap;
|
|
177
|
+
transition: background 150ms, opacity 150ms;
|
|
178
|
+
}
|
|
179
|
+
.bulk-toolbar__btn:hover:not(:disabled) { background: rgba(255, 255, 255, 0.22); }
|
|
180
|
+
.bulk-toolbar__btn:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
181
|
+
.bulk-toolbar__clear {
|
|
182
|
+
background: transparent;
|
|
183
|
+
border: none;
|
|
184
|
+
color: var(--bg-card);
|
|
185
|
+
opacity: 0.75;
|
|
186
|
+
font-size: 12.5px;
|
|
187
|
+
cursor: pointer;
|
|
188
|
+
padding: 4px 6px;
|
|
189
|
+
}
|
|
190
|
+
.bulk-toolbar__clear:hover { opacity: 1; }
|
|
191
|
+
|
|
192
|
+
@media (max-width: 640px) {
|
|
193
|
+
.bulk-toolbar { left: 12px; right: 12px; bottom: 12px; transform: none; max-width: none; }
|
|
194
|
+
}
|