@bongos/core 1.19.726 → 1.19.727
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 +176 -491
- package/.devcontainer/Dockerfile +1 -1
- package/.devcontainer/devcontainer.json +2 -2
- package/.devcontainer/healthcheck.sh +1 -1
- package/.devcontainer/init-firewall.sh +1 -1
- package/.devcontainer/post-create.sh +2 -2
- package/.env.local.example +1 -1
- package/Dockerfile +1 -1
- package/docs/copy-inventory.md +1 -1
- package/docs/copy-registry.json +9 -9
- package/docs/module-api-changelog.md +2 -0
- package/docs/recipes/devbox-app-release.md +4 -4
- package/modules/dev-box/app/scripts/dmgbuild-settings.py +5 -5
- package/modules/dev-box/app/scripts/gen-brand.js +1 -1
- package/modules/dev-box/app/src/brand.js +1 -1
- package/modules/dev-box/app/test/unit.mjs +16 -16
- package/modules/dev-box/box-access.js +1 -1
- package/modules/dev-box/routes/box.js +1 -1
- package/modules/discord/discord-approvals.js +1 -1
- package/modules/grading/grader-model.js +1 -1
- package/modules/grading/grader-prompt.js +1 -1
- package/modules/grading/grader-workers/quality.js +1 -1
- package/modules/hall-ui/module.json +1 -1
- package/modules/hall-ui/public/brand-apply.js +1 -1
- package/modules/hall-ui/public/shell.js +1 -1
- package/modules/hall-ui/public/work.js +1 -1
- package/modules/lifecycle/conflict-resolve.js +1 -1
- package/modules/lifecycle/db-analytics.js +1 -1
- package/modules/lifecycle/routes/analytics.js +1 -1
- package/modules/onboarding/approval-broadcast.js +1 -1
- package/modules/onboarding/onboarding.js +1 -1
- package/modules/provisioning/tests/liveness.mjs +1 -1
- package/modules/public-landing/public/index.html +1 -1
- package/modules/public-landing/public/projects-floor.states.json +2 -2
- package/modules/public-landing/public/projects.probes.json +4 -4
- package/modules/public-landing/public/projects.states.json +2 -2
- package/modules/status-ui/module.json +1 -1
- package/modules/status-ui/public/status.js +4 -4
- package/modules/status-ui/public/style.css +1 -1
- package/modules/ui-design/kit/fixtures/cost-summary.json +1 -1
- package/modules/ui-design/kit/fixtures/featured-hub.json +1 -1
- package/modules/ui-design/kit/fixtures/featured.json +1 -1
- package/modules/ui-design/kit/fixtures/leaderboard.json +1 -1
- package/modules/ui-design/kit/fixtures/my-projects.json +1 -1
- package/modules/ui-design/kit/fixtures/progress.json +1 -1
- package/modules/ui-design/kit/fixtures/recent-shipped.json +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/cron/style_guide_audit.sh +1 -1
- package/scripts/discord/lib.js +1 -1
- package/scripts/discord/post.js +1 -1
- package/scripts/gds/audit-authorship.sh +1 -1
- package/scripts/gds/audit-replay.sh +29 -2
- package/scripts/gds/audit-ships.js +1 -1
- package/scripts/gds/backfill-sessions.js +2 -2
- package/scripts/gds/cf-tunnel.js +4 -4
- package/scripts/gds/claude-materialize.js +2 -2
- package/scripts/gds/cli-lib.js +6 -6
- package/scripts/gds/cutover-codemod.js +1 -1
- package/scripts/gds/dev-lib.js +2 -2
- package/scripts/gds/diagnose-achievements.js +2 -2
- package/scripts/gds/fitness-checks-identity.js +6 -4
- package/scripts/gds/gen-diagrams.js +1 -1
- package/scripts/gds/leak-scan-allowlist.js +293 -0
- package/scripts/gds/learning-capture.js +1 -1
- package/scripts/gds/linkify-refs.js +2 -2
- package/scripts/gds/local-preview-lib.js +1 -1
- package/scripts/gds/mirror-lineage-check.js +1 -1
- package/scripts/gds/mirror-redact.js +17 -2
- package/scripts/gds/newcomer-floor.templates.json +1 -1
- package/scripts/gds/package-core.js +18 -1
- package/scripts/gds/paste-token.js +1 -1
- package/scripts/gds/provision-units.js +2 -2
- package/scripts/gds/publish-manifest.js +15 -0
- package/scripts/gds/repo-metrics.js +1 -1
- package/scripts/gds/sandbox-stage.js +1 -1
- package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +1 -1
- package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +1 -1
- package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +1 -1
- package/scripts/gds/seed-bongos-tasks.js +2 -2
- package/scripts/gds/seed-gds-v4-tasks.js +1 -1
- package/scripts/gds/seed-medusa-tasks.js +10 -10
- package/scripts/gds/seed-module-upstreaming.js +1 -1
- package/scripts/gds/seed-productization-tasks.js +6 -6
- package/scripts/gds/seed-provisioning-tasks.js +2 -2
- package/scripts/gds/seed-staging.sh +19 -6
- package/scripts/gds/ship-deploy-target.js +1 -1
- package/scripts/gds/ship-flow.js +1 -1
- package/scripts/gds/smoke-gds.js +1 -1
- package/scripts/status-probe.mjs +2 -2
- package/src/bongos/auth-discord.js +2 -2
- package/src/bongos/live-channel.js +1 -1
- package/src/bongos/pool.js +1 -1
- package/src/bongos/routes/auth.js +11 -11
- package/src/bongos/routes/security.js +1 -1
- package/src/bongos/routes.js +1 -1
- package/src/branding.js +1 -1
- package/src/devbox-downloads.js +1 -1
- package/src/instance-config.js +2 -2
- package/src/module-api.js +1 -1
- package/src/module-loader/provenance.js +2 -2
- package/tests/art_stage.mjs +2 -2
- package/tests/auth_anthropic_identity.mjs +1 -1
- package/tests/auth_duplicate_cookie.mjs +1 -1
- package/tests/auth_error_brand.mjs +1 -1
- package/tests/auth_inactive_builder.mjs +1 -1
- package/tests/backup_cli.mjs +4 -4
- package/tests/bongos_box_connect.mjs +2 -2
- package/tests/bongos_downloads.mjs +2 -2
- package/tests/bongos_login.mjs +5 -5
- package/tests/box_connect_e2e.mjs +2 -2
- package/tests/box_dns_repoint.mjs +10 -10
- package/tests/box_host_keys.mjs +1 -1
- package/tests/box_onboard.mjs +9 -9
- package/tests/box_scope_session.mjs +1 -1
- package/tests/box_terminal_ssrf.mjs +7 -7
- package/tests/boxes.mjs +9 -9
- package/tests/branding.mjs +2 -2
- package/tests/bump_version.mjs +2 -2
- package/tests/cf_tunnel.mjs +40 -40
- package/tests/cli_token_reissue.mjs +7 -7
- package/tests/cloud_bongos_pack.mjs +1 -1
- package/tests/currency_label.mjs +8 -8
- package/tests/dev_lib.mjs +4 -4
- package/tests/devbox_dmg_backdrop.mjs +1 -1
- package/tests/devbox_downloads.mjs +2 -2
- package/tests/devbox_icons.mjs +1 -1
- package/tests/discord_approvals.mjs +1 -1
- package/tests/discord_oauth.mjs +2 -2
- package/tests/executed_closure.mjs +6 -1
- package/tests/first_admin_bootstrap.mjs +1 -1
- package/tests/gate_approvals.mjs +5 -5
- package/tests/grade_aggregates_unavailable.mjs +1 -1
- package/tests/hook_user_agents.mjs +2 -2
- package/tests/init.mjs +6 -6
- package/tests/instance_config.mjs +1 -1
- package/tests/instance_manifest.mjs +5 -5
- package/tests/instance_mismatch_guard.mjs +13 -13
- package/tests/leak_scan_allowlist.mjs +94 -0
- package/tests/migrate_root_resolution.mjs +4 -4
- package/tests/mirror_redact.mjs +28 -4
- package/tests/module_catalog.mjs +5 -5
- package/tests/module_submissions.mjs +3 -3
- package/tests/package_core.mjs +1 -1
- package/tests/parallel-load.mjs +6 -6
- package/tests/projects_hub.mjs +2 -2
- package/tests/provision.mjs +50 -50
- package/tests/provisioning_github_app_routes.mjs +1 -1
- package/tests/provisioning_onboard_mode.mjs +2 -2
- package/tests/publish_reconciler.mjs +4 -4
- package/tests/sandbox_stage.mjs +1 -1
- package/tests/scrubber_corpus.mjs +3 -3
- package/tests/search_isolation.mjs +1 -1
- package/tests/session_records.mjs +1 -1
- package/tests/ship_card.mjs +6 -6
- package/tests/ship_ci_deploy.mjs +1 -1
- package/tests/single_host_hall.mjs +9 -9
- package/tests/smoke_preflight.mjs +1 -1
- package/tests/smoke_target.mjs +1 -1
- package/tests/status-probe.mjs +1 -1
- package/tests/status_mirror_sync.mjs +1 -1
- package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +0 -45
- package/docs/design/mocks/_schemes.css +0 -604
- package/docs/design/mocks/component-sheet.html +0 -428
- package/docs/design/mocks/hall/_tokens.css +0 -370
- package/docs/design/mocks/hall/board/v1.html +0 -846
- package/docs/design/mocks/hall/board/v2.html +0 -858
- package/docs/design/mocks/hall/board/v3.html +0 -884
- package/docs/design/mocks/hall/goals/v1.html +0 -1212
- package/docs/design/mocks/hall/goals/v2.html +0 -1192
- package/docs/design/mocks/hall/goals/v3.html +0 -1205
- package/docs/design/mocks/hall/hall-sheet.html +0 -244
- package/docs/design/mocks/hall/reading/v1.html +0 -1125
- package/docs/design/mocks/hall/reading/v2.html +0 -1177
- package/docs/design/mocks/hall/reading/v3.html +0 -1150
- package/docs/design/mocks/hall/settings/v1.html +0 -1238
- package/docs/design/mocks/hall/settings/v2.html +0 -1235
- package/docs/design/mocks/hall/settings/v3.html +0 -1299
- package/docs/design/mocks/hall/task/v1.html +0 -633
- package/docs/design/mocks/hall/task/v2.html +0 -646
- package/docs/design/mocks/hall/task/v3.html +0 -647
- package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-deepfield-half.jpg.json +0 -13
- package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-dust-half.jpg.json +0 -13
- package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-nebula-half.jpg.json +0 -13
- package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg +0 -0
- package/docs/design/mocks/hub/assets/r3-space-starfield-half.jpg.json +0 -13
- package/docs/design/mocks/hub/hub-sheet.html +0 -192
- package/docs/design/mocks/hub/mine.html +0 -465
- package/docs/design/mocks/hub/picker.html +0 -421
- package/docs/design/mocks/hub/planets.html +0 -356
- package/docs/design/mocks/hub/v1.html +0 -1209
- package/docs/design/mocks/hub/v2.html +0 -1257
- package/docs/design/mocks/hub/v3.html +0 -1496
- package/docs/design/mocks/hub/wizard.html +0 -421
- package/docs/design/mocks/landing/landing-sheet.html +0 -131
- package/docs/design/mocks/landing/v1.html +0 -956
- package/docs/design/mocks/landing/v2.html +0 -708
- package/docs/design/mocks/landing/v3.html +0 -911
- package/docs/design/mocks/landing-page-mock.html +0 -687
- package/docs/design/mocks/landing-palettes.html +0 -103
- package/docs/design/mocks/projects-hub-mock.html +0 -991
- package/docs/design/mocks/projects-hub-variants.html +0 -146
- package/docs/design/mocks/projects-page-mock.html +0 -167
- package/docs/design/mocks/world/blue-hud/_tokens.css +0 -246
- package/docs/design/mocks/world/blue-hud/hall.html +0 -595
- package/docs/design/mocks/world/blue-hud/landing.html +0 -424
- package/docs/design/mocks/world/blue-hud/status.html +0 -410
- package/docs/design/mocks/world/chrome-blobs/_tokens.css +0 -479
- package/docs/design/mocks/world/chrome-blobs/hall.html +0 -553
- package/docs/design/mocks/world/chrome-blobs/landing-b.html +0 -581
- package/docs/design/mocks/world/chrome-blobs/landing.html +0 -328
- package/docs/design/mocks/world/chrome-blobs/status.html +0 -416
- package/docs/design/mocks/world/natgeo-editorial/_tokens.css +0 -377
- package/docs/design/mocks/world/natgeo-editorial/hall.html +0 -649
- package/docs/design/mocks/world/natgeo-editorial/landing-b.html +0 -743
- package/docs/design/mocks/world/natgeo-editorial/landing.html +0 -475
- package/docs/design/mocks/world/natgeo-editorial/status.html +0 -437
- package/docs/design/mocks/world/organic-cards/_tokens.css +0 -462
- package/docs/design/mocks/world/organic-cards/hall.html +0 -625
- package/docs/design/mocks/world/organic-cards/landing-b.html +0 -736
- package/docs/design/mocks/world/organic-cards/landing.html +0 -420
- package/docs/design/mocks/world/organic-cards/status.html +0 -458
- package/docs/design/mocks/world/world-sheet.html +0 -156
|
@@ -1,743 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<script>
|
|
6
|
-
(function(){try{var q=new URLSearchParams(location.search).get('mode');var m=(q==='light'||q==='dark')?q:localStorage.getItem('cb-color-mode');if(m==='light'||m==='dark')document.documentElement.setAttribute('data-mode',m);}catch(e){}})();
|
|
7
|
-
</script>
|
|
8
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
9
|
-
<title>Cloud Bongos</title>
|
|
10
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
11
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
12
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@300;400;500;600;700&display=swap">
|
|
13
|
-
<link rel="stylesheet" href="_tokens.css">
|
|
14
|
-
<style>
|
|
15
|
-
/* landing-b, natgeo-editorial. The template's framed plate rather than a split headline: one
|
|
16
|
-
bordered plate inset in the viewport, the pipeline as a vertical ladder down its left gutter,
|
|
17
|
-
the headline whole at the top left, the joined door pill at the plate's foot where the template
|
|
18
|
-
puts its round yellow button, and the planet limb entering from the lower right and bleeding
|
|
19
|
-
out over the plate's own frame, annotated with leader lines like an expedition photograph.
|
|
20
|
-
The limb, the specimen bongos and the mark all come from _tokens.css as they stand. Page-local
|
|
21
|
-
DERIVED tokens only, never a contract token; each mode-aware one is written once as the light
|
|
22
|
-
default on html and twice, byte identical, in the two dark twins. */
|
|
23
|
-
|
|
24
|
-
html {
|
|
25
|
-
--bar-h: 68px;
|
|
26
|
-
--stage-pad: 40px;
|
|
27
|
-
--panel-pad: 46px;
|
|
28
|
-
--rail-w: 118px;
|
|
29
|
-
--step-gap: 30px;
|
|
30
|
-
|
|
31
|
-
/* a real control needs a boundary that clears 3:1 against its own ground */
|
|
32
|
-
--door-edge: rgba(20, 20, 18, .5);
|
|
33
|
-
/* the plate's frame, crisper than a body hairline */
|
|
34
|
-
--plate-edge: rgba(20, 20, 18, .22);
|
|
35
|
-
/* the ground's column hairlines, half the weight of the hall's rules */
|
|
36
|
-
--col-line: rgba(20, 20, 18, .045);
|
|
37
|
-
/* the annotation leaders and the rings they end in */
|
|
38
|
-
--lead: rgba(20, 20, 18, .5);
|
|
39
|
-
--note-shadow: none;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
:root[data-mode="dark"] {
|
|
43
|
-
--door-edge: rgba(255, 255, 255, .34);
|
|
44
|
-
--plate-edge: rgba(255, 255, 255, .15);
|
|
45
|
-
--col-line: rgba(255, 255, 255, .04);
|
|
46
|
-
--lead: rgba(255, 255, 255, .46);
|
|
47
|
-
--note-shadow: drop-shadow(0 1px 3px rgba(0, 0, 0, .92));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
@media (prefers-color-scheme: dark) {
|
|
51
|
-
:root:not([data-mode="light"]) {
|
|
52
|
-
--door-edge: rgba(255, 255, 255, .34);
|
|
53
|
-
--plate-edge: rgba(255, 255, 255, .15);
|
|
54
|
-
--col-line: rgba(255, 255, 255, .04);
|
|
55
|
-
--lead: rgba(255, 255, 255, .46);
|
|
56
|
-
--note-shadow: drop-shadow(0 1px 3px rgba(0, 0, 0, .92));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
*, *::before, *::after { box-sizing: border-box; }
|
|
61
|
-
|
|
62
|
-
body {
|
|
63
|
-
margin: 0;
|
|
64
|
-
background: var(--bg);
|
|
65
|
-
color: var(--ink);
|
|
66
|
-
font-family: var(--font-body);
|
|
67
|
-
font-size: 16px;
|
|
68
|
-
-webkit-font-smoothing: antialiased;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
::selection { background: var(--sel-bg); color: var(--sel-ink); }
|
|
72
|
-
|
|
73
|
-
a { color: inherit; }
|
|
74
|
-
|
|
75
|
-
:focus-visible {
|
|
76
|
-
outline: 2px solid var(--focus);
|
|
77
|
-
outline-offset: 3px;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/* ---------- top bar: a real surface with its own ground and a bottom edge ---------- */
|
|
81
|
-
|
|
82
|
-
.topbar {
|
|
83
|
-
display: flex;
|
|
84
|
-
align-items: center;
|
|
85
|
-
justify-content: space-between;
|
|
86
|
-
gap: 20px;
|
|
87
|
-
height: var(--bar-h);
|
|
88
|
-
padding: 0 var(--stage-pad);
|
|
89
|
-
background: var(--bg-deep);
|
|
90
|
-
border-bottom: 1px solid var(--rule);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.brand {
|
|
94
|
-
display: inline-flex;
|
|
95
|
-
align-items: center;
|
|
96
|
-
gap: 12px;
|
|
97
|
-
text-decoration: none;
|
|
98
|
-
padding: 4px 2px;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/* the inherited mark: a hairline lamp yellow frame with the pair drawn inside it */
|
|
102
|
-
.mark {
|
|
103
|
-
display: inline-flex;
|
|
104
|
-
align-items: center;
|
|
105
|
-
justify-content: center;
|
|
106
|
-
width: 36px;
|
|
107
|
-
height: 42px;
|
|
108
|
-
border: 1.5px solid var(--mark-bg);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.bongos { width: 27px; height: auto; display: block; }
|
|
112
|
-
.bongos .glow { display: none; }
|
|
113
|
-
.bongos .ring { opacity: .3; }
|
|
114
|
-
|
|
115
|
-
.wordmark {
|
|
116
|
-
font-family: var(--font-display);
|
|
117
|
-
font-size: 15.5px;
|
|
118
|
-
font-weight: 600;
|
|
119
|
-
letter-spacing: -.014em;
|
|
120
|
-
color: var(--ink);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.bar-right { display: flex; align-items: center; gap: 8px; }
|
|
124
|
-
|
|
125
|
-
.bar-nav {
|
|
126
|
-
display: flex;
|
|
127
|
-
align-items: center;
|
|
128
|
-
gap: 2px;
|
|
129
|
-
margin-right: 6px;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
.bar-nav a {
|
|
133
|
-
display: inline-flex;
|
|
134
|
-
align-items: center;
|
|
135
|
-
height: 34px;
|
|
136
|
-
padding: 0 11px;
|
|
137
|
-
font-size: 13.5px;
|
|
138
|
-
font-weight: 500;
|
|
139
|
-
color: var(--ink-soft);
|
|
140
|
-
text-decoration: none;
|
|
141
|
-
border-radius: var(--radius-pill);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.bar-nav a:hover { color: var(--ink); }
|
|
145
|
-
|
|
146
|
-
.mode-toggle {
|
|
147
|
-
display: inline-flex;
|
|
148
|
-
align-items: center;
|
|
149
|
-
justify-content: center;
|
|
150
|
-
width: 34px;
|
|
151
|
-
height: 34px;
|
|
152
|
-
padding: 0;
|
|
153
|
-
border: 1px solid var(--door-edge);
|
|
154
|
-
border-radius: var(--radius-pill);
|
|
155
|
-
background: var(--chip-fill);
|
|
156
|
-
color: var(--ink-soft);
|
|
157
|
-
cursor: pointer;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.mode-toggle:hover { color: var(--ink); }
|
|
161
|
-
.mode-toggle svg { width: 16px; height: 16px; display: block; }
|
|
162
|
-
.mode-toggle .moon { display: var(--moon-display); }
|
|
163
|
-
.mode-toggle .sun { display: var(--sun-display); }
|
|
164
|
-
|
|
165
|
-
.chip {
|
|
166
|
-
display: inline-flex;
|
|
167
|
-
align-items: center;
|
|
168
|
-
height: 34px;
|
|
169
|
-
padding: 0 17px;
|
|
170
|
-
font-family: var(--font-body);
|
|
171
|
-
font-size: 13.5px;
|
|
172
|
-
font-weight: 600;
|
|
173
|
-
color: var(--ink);
|
|
174
|
-
background: var(--chip-fill);
|
|
175
|
-
border: 1px solid var(--door-edge);
|
|
176
|
-
border-radius: var(--radius-pill);
|
|
177
|
-
cursor: pointer;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.chip:hover { background: var(--row-hover); }
|
|
181
|
-
|
|
182
|
-
/* ---------- the stage: near black ground, halftone screen, faint column hairlines ---------- */
|
|
183
|
-
|
|
184
|
-
.stage {
|
|
185
|
-
position: relative;
|
|
186
|
-
display: flex;
|
|
187
|
-
flex-direction: column;
|
|
188
|
-
min-height: calc(100dvh - var(--bar-h));
|
|
189
|
-
padding: var(--stage-pad);
|
|
190
|
-
overflow: hidden;
|
|
191
|
-
background-color: var(--bg);
|
|
192
|
-
background-image:
|
|
193
|
-
radial-gradient(var(--dots) var(--dot-r), transparent calc(var(--dot-r) + .1px)),
|
|
194
|
-
linear-gradient(to right, var(--col-line) 1px, transparent 1px);
|
|
195
|
-
background-size: var(--dot-pitch) var(--dot-pitch), calc(100% / 12) 100%;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/* ---------- the framed plate ---------- */
|
|
199
|
-
|
|
200
|
-
.panel {
|
|
201
|
-
position: relative;
|
|
202
|
-
z-index: 1;
|
|
203
|
-
flex: 1 1 auto;
|
|
204
|
-
display: grid;
|
|
205
|
-
grid-template-columns: var(--rail-w) minmax(0, 1fr);
|
|
206
|
-
border: 1px solid var(--plate-edge);
|
|
207
|
-
background-color: var(--bg-card);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/* the left gutter: the pipeline as a vertical ladder of stations */
|
|
211
|
-
|
|
212
|
-
.rail {
|
|
213
|
-
display: flex;
|
|
214
|
-
flex-direction: column;
|
|
215
|
-
gap: var(--step-gap);
|
|
216
|
-
margin: 0;
|
|
217
|
-
padding: var(--panel-pad) 0 var(--panel-pad) 28px;
|
|
218
|
-
list-style: none;
|
|
219
|
-
border-right: 1px solid var(--rule-soft);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
.rail li {
|
|
223
|
-
position: relative;
|
|
224
|
-
padding-left: 19px;
|
|
225
|
-
font-size: 11px;
|
|
226
|
-
font-weight: 500;
|
|
227
|
-
line-height: 1.2;
|
|
228
|
-
letter-spacing: .13em;
|
|
229
|
-
color: var(--ink-soft);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
.rail li::before {
|
|
233
|
-
content: "";
|
|
234
|
-
position: absolute;
|
|
235
|
-
left: 0;
|
|
236
|
-
top: 3px;
|
|
237
|
-
width: 7px;
|
|
238
|
-
height: 7px;
|
|
239
|
-
border: 1px solid var(--lead);
|
|
240
|
-
border-radius: 50%;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
.rail li::after {
|
|
244
|
-
content: "";
|
|
245
|
-
position: absolute;
|
|
246
|
-
left: 3px;
|
|
247
|
-
top: 12px;
|
|
248
|
-
width: 1px;
|
|
249
|
-
height: calc(var(--step-gap) + 6px);
|
|
250
|
-
background: var(--rule);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
.rail li:last-child::after { display: none; }
|
|
254
|
-
|
|
255
|
-
.rail .lit { color: var(--accent-text); font-weight: 600; }
|
|
256
|
-
.rail .lit::before { border-color: var(--accent); }
|
|
257
|
-
|
|
258
|
-
.rail .lamp {
|
|
259
|
-
position: absolute;
|
|
260
|
-
left: 1.5px;
|
|
261
|
-
top: 4.5px;
|
|
262
|
-
width: 6px;
|
|
263
|
-
height: 6px;
|
|
264
|
-
border-radius: 50%;
|
|
265
|
-
background: var(--accent);
|
|
266
|
-
animation: warm 900ms cubic-bezier(.16, 1, .3, 1) both;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
@keyframes warm {
|
|
270
|
-
from { opacity: 0; transform: scale(.3); }
|
|
271
|
-
to { opacity: 1; transform: scale(1); }
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/* the plate's own column: headline at the top, doors at the foot */
|
|
275
|
-
|
|
276
|
-
.plate-body {
|
|
277
|
-
display: grid;
|
|
278
|
-
grid-template-rows: auto 1fr auto;
|
|
279
|
-
padding: var(--panel-pad) var(--panel-pad) calc(var(--panel-pad) - 8px) 42px;
|
|
280
|
-
min-width: 0;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
h1 {
|
|
284
|
-
margin: 0;
|
|
285
|
-
font-family: var(--font-display);
|
|
286
|
-
font-size: clamp(30px, 4.35vw, 62px);
|
|
287
|
-
font-weight: 700;
|
|
288
|
-
line-height: 1.04;
|
|
289
|
-
letter-spacing: -.033em;
|
|
290
|
-
color: var(--ink);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
.lede {
|
|
294
|
-
margin: 24px 0 0;
|
|
295
|
-
font-size: clamp(15px, 1.2vw, 17.5px);
|
|
296
|
-
line-height: 1.55;
|
|
297
|
-
color: var(--ink-soft);
|
|
298
|
-
max-width: 40ch;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/* the joined door pill: one object, two equal halves, the accent on the primary */
|
|
302
|
-
|
|
303
|
-
.doors {
|
|
304
|
-
grid-row: 3;
|
|
305
|
-
display: flex;
|
|
306
|
-
align-items: stretch;
|
|
307
|
-
width: 100%;
|
|
308
|
-
max-width: 520px;
|
|
309
|
-
border: 1px solid var(--door-edge);
|
|
310
|
-
border-radius: var(--radius-pill);
|
|
311
|
-
overflow: hidden;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
.door {
|
|
315
|
-
flex: 1 1 0;
|
|
316
|
-
display: inline-flex;
|
|
317
|
-
align-items: center;
|
|
318
|
-
justify-content: center;
|
|
319
|
-
min-height: 50px;
|
|
320
|
-
padding: 0 20px;
|
|
321
|
-
font-family: var(--font-body);
|
|
322
|
-
font-size: 15px;
|
|
323
|
-
font-weight: 600;
|
|
324
|
-
letter-spacing: -.005em;
|
|
325
|
-
text-align: center;
|
|
326
|
-
text-decoration: none;
|
|
327
|
-
white-space: nowrap;
|
|
328
|
-
color: var(--ink);
|
|
329
|
-
transition: background-color .2s cubic-bezier(.16, 1, .3, 1);
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
.door-join:hover { background: var(--row-hover); }
|
|
333
|
-
|
|
334
|
-
.door-start {
|
|
335
|
-
background: var(--accent);
|
|
336
|
-
color: var(--ink-on-accent);
|
|
337
|
-
border-left: 1px solid var(--door-edge);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
.door-start:hover { background: color-mix(in srgb, var(--accent) 88%, #fff); }
|
|
341
|
-
|
|
342
|
-
/* ---------- the limb, bleeding out of the plate and past its frame ---------- */
|
|
343
|
-
|
|
344
|
-
.limb {
|
|
345
|
-
position: absolute;
|
|
346
|
-
z-index: 2;
|
|
347
|
-
right: -44.6%;
|
|
348
|
-
bottom: -4.6%;
|
|
349
|
-
width: 100%;
|
|
350
|
-
aspect-ratio: 1060 / 592;
|
|
351
|
-
pointer-events: none;
|
|
352
|
-
opacity: var(--limb-op);
|
|
353
|
-
background-image: var(--limb-plate);
|
|
354
|
-
background-size: cover;
|
|
355
|
-
background-position: 50% 50%;
|
|
356
|
-
filter: var(--limb-filter);
|
|
357
|
-
mix-blend-mode: var(--limb-blend);
|
|
358
|
-
/* the plate carries its own vignette frame: dissolve the two edges that stay on screen
|
|
359
|
-
(left and top) so the photograph bleeds instead of reading as a rectangle */
|
|
360
|
-
-webkit-mask-image:
|
|
361
|
-
linear-gradient(to right, transparent 0, #000 12%),
|
|
362
|
-
linear-gradient(to bottom, transparent 0, #000 15%);
|
|
363
|
-
mask-image:
|
|
364
|
-
linear-gradient(to right, transparent 0, #000 12%),
|
|
365
|
-
linear-gradient(to bottom, transparent 0, #000 15%);
|
|
366
|
-
mask-composite: intersect;
|
|
367
|
-
-webkit-mask-composite: source-in;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
/* ---------- leader line callouts, annotating the plate with real ledger figures ---------- */
|
|
371
|
-
|
|
372
|
-
.notes {
|
|
373
|
-
position: absolute;
|
|
374
|
-
z-index: 3;
|
|
375
|
-
inset: 0;
|
|
376
|
-
margin: 0;
|
|
377
|
-
padding: 0;
|
|
378
|
-
list-style: none;
|
|
379
|
-
pointer-events: none;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
.note {
|
|
383
|
-
position: absolute;
|
|
384
|
-
text-align: right;
|
|
385
|
-
filter: var(--note-shadow);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
.note::after {
|
|
389
|
-
content: "";
|
|
390
|
-
position: absolute;
|
|
391
|
-
top: 52%;
|
|
392
|
-
left: 100%;
|
|
393
|
-
width: var(--len);
|
|
394
|
-
height: 1px;
|
|
395
|
-
background: var(--lead);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
.note::before {
|
|
399
|
-
content: "";
|
|
400
|
-
position: absolute;
|
|
401
|
-
top: 52%;
|
|
402
|
-
left: calc(100% + var(--len));
|
|
403
|
-
width: 7px;
|
|
404
|
-
height: 7px;
|
|
405
|
-
margin: -3.5px 0 0 -3.5px;
|
|
406
|
-
border: 1px solid var(--lead);
|
|
407
|
-
border-radius: 50%;
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
.fig {
|
|
411
|
-
display: block;
|
|
412
|
-
font-family: var(--font-display);
|
|
413
|
-
font-size: 21px;
|
|
414
|
-
font-weight: 600;
|
|
415
|
-
line-height: 1.1;
|
|
416
|
-
letter-spacing: -.022em;
|
|
417
|
-
font-variant-numeric: tabular-nums;
|
|
418
|
-
color: var(--ink);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
.cap {
|
|
422
|
-
display: block;
|
|
423
|
-
margin-top: 4px;
|
|
424
|
-
font-size: 10.5px;
|
|
425
|
-
font-weight: 500;
|
|
426
|
-
letter-spacing: .12em;
|
|
427
|
-
text-transform: uppercase;
|
|
428
|
-
color: var(--ink-soft);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
.n1 { --len: 118px; top: 36%; right: 19%; }
|
|
432
|
-
.n2 { --len: 100px; top: 56%; right: 35%; }
|
|
433
|
-
.n3 { --len: 82px; top: 75%; right: 44%; }
|
|
434
|
-
|
|
435
|
-
/* ---------- the one quiet band, then the footer line ---------- */
|
|
436
|
-
|
|
437
|
-
.band {
|
|
438
|
-
position: relative;
|
|
439
|
-
overflow: hidden;
|
|
440
|
-
padding: 48px var(--stage-pad);
|
|
441
|
-
background-color: var(--bg);
|
|
442
|
-
background-image: var(--band-hatch);
|
|
443
|
-
border-top: 1px solid var(--rule);
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
/* the rendered pair, printed as a specimen at the band's edge */
|
|
447
|
-
.band::before {
|
|
448
|
-
content: "";
|
|
449
|
-
position: absolute;
|
|
450
|
-
z-index: 0;
|
|
451
|
-
right: 2%;
|
|
452
|
-
top: 50%;
|
|
453
|
-
width: 330px;
|
|
454
|
-
height: 330px;
|
|
455
|
-
margin-top: -165px;
|
|
456
|
-
opacity: var(--bongo-op);
|
|
457
|
-
background-image: var(--bongo-plate);
|
|
458
|
-
background-size: cover;
|
|
459
|
-
filter: var(--bongo-filter);
|
|
460
|
-
mix-blend-mode: var(--bongo-blend);
|
|
461
|
-
-webkit-mask-image: radial-gradient(60% 60% at 50% 52%, #000 34%, transparent 100%);
|
|
462
|
-
mask-image: radial-gradient(60% 60% at 50% 52%, #000 34%, transparent 100%);
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
.band p {
|
|
466
|
-
position: relative;
|
|
467
|
-
z-index: 1;
|
|
468
|
-
margin: 0;
|
|
469
|
-
max-width: 54ch;
|
|
470
|
-
font-size: 15px;
|
|
471
|
-
line-height: 1.6;
|
|
472
|
-
color: var(--ink-soft);
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
.pagefoot {
|
|
476
|
-
display: flex;
|
|
477
|
-
flex-wrap: wrap;
|
|
478
|
-
align-items: baseline;
|
|
479
|
-
gap: 8px 22px;
|
|
480
|
-
padding: 24px var(--stage-pad) 34px;
|
|
481
|
-
background: var(--bg-deep);
|
|
482
|
-
border-top: 1px solid var(--rule);
|
|
483
|
-
font-size: 13px;
|
|
484
|
-
color: var(--ink-soft);
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
.pagefoot a {
|
|
488
|
-
color: var(--ink);
|
|
489
|
-
text-decoration: none;
|
|
490
|
-
border-bottom: 1px solid var(--rule);
|
|
491
|
-
padding-bottom: 2px;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
.pagefoot a:hover { border-bottom-color: var(--accent); }
|
|
495
|
-
|
|
496
|
-
/* ---------- narrow: single column, the ladder lies down, the doors stack ---------- */
|
|
497
|
-
|
|
498
|
-
@media (max-width: 1180px) {
|
|
499
|
-
.n1 { --len: 84px; right: 16%; }
|
|
500
|
-
.n2 { --len: 72px; right: 32%; }
|
|
501
|
-
.n3 { --len: 58px; right: 42%; }
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
@media (max-width: 900px) {
|
|
505
|
-
html { --stage-pad: 22px; --panel-pad: 26px; }
|
|
506
|
-
|
|
507
|
-
.panel { grid-template-columns: minmax(0, 1fr); flex: 0 0 auto; }
|
|
508
|
-
|
|
509
|
-
.rail {
|
|
510
|
-
flex-direction: row;
|
|
511
|
-
flex-wrap: wrap;
|
|
512
|
-
gap: 8px 22px;
|
|
513
|
-
padding: 22px 22px 18px;
|
|
514
|
-
border-right: 0;
|
|
515
|
-
border-bottom: 1px solid var(--rule-soft);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
.rail li { padding-left: 14px; }
|
|
519
|
-
.rail li::after { display: none; }
|
|
520
|
-
.rail .lamp { left: 1.5px; }
|
|
521
|
-
|
|
522
|
-
.plate-body { padding: 26px 22px 26px; }
|
|
523
|
-
.hbreak { display: none; }
|
|
524
|
-
|
|
525
|
-
.notes {
|
|
526
|
-
position: static;
|
|
527
|
-
display: flex;
|
|
528
|
-
flex-wrap: wrap;
|
|
529
|
-
gap: 16px 34px;
|
|
530
|
-
margin-top: 24px;
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
.note { position: static; text-align: left; filter: none; }
|
|
534
|
-
.note::before, .note::after { display: none; }
|
|
535
|
-
.fig { font-size: 19px; }
|
|
536
|
-
|
|
537
|
-
.limb { right: -85%; bottom: -4%; width: 190%; }
|
|
538
|
-
|
|
539
|
-
.band::before { right: -14%; width: 260px; height: 260px; margin-top: -130px; }
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
@media (max-width: 560px) {
|
|
543
|
-
html { --bar-h: 60px; --stage-pad: 14px; }
|
|
544
|
-
|
|
545
|
-
.topbar { padding: 0 14px; gap: 8px; }
|
|
546
|
-
.brand { gap: 9px; padding: 4px 0; }
|
|
547
|
-
.mark { width: 30px; height: 36px; }
|
|
548
|
-
.bongos { width: 22px; }
|
|
549
|
-
.wordmark { font-size: 13.5px; }
|
|
550
|
-
.bar-nav { gap: 0; margin-right: 2px; }
|
|
551
|
-
.bar-nav a { padding: 0 7px; font-size: 12px; }
|
|
552
|
-
.mode-toggle { width: 32px; height: 32px; }
|
|
553
|
-
.chip { height: 32px; padding: 0 12px; font-size: 12px; }
|
|
554
|
-
|
|
555
|
-
.rail { gap: 6px 13px; padding: 20px 18px 16px; }
|
|
556
|
-
.rail li { font-size: 10.5px; letter-spacing: .1em; padding-left: 13px; }
|
|
557
|
-
|
|
558
|
-
.doors {
|
|
559
|
-
flex-direction: column;
|
|
560
|
-
max-width: none;
|
|
561
|
-
gap: 10px;
|
|
562
|
-
border: 0;
|
|
563
|
-
border-radius: 0;
|
|
564
|
-
overflow: visible;
|
|
565
|
-
margin-top: 26px;
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
.door {
|
|
569
|
-
min-height: 48px;
|
|
570
|
-
border: 1px solid var(--door-edge);
|
|
571
|
-
border-radius: var(--radius-pill);
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
.plate-body { grid-template-rows: auto auto auto; }
|
|
575
|
-
.lede { margin-top: 18px; }
|
|
576
|
-
.notes { gap: 14px 26px; margin-top: 22px; }
|
|
577
|
-
.band { padding: 36px 14px; }
|
|
578
|
-
.pagefoot { padding: 20px 14px 28px; }
|
|
579
|
-
}
|
|
580
|
-
</style>
|
|
581
|
-
</head>
|
|
582
|
-
<body>
|
|
583
|
-
|
|
584
|
-
<header class="topbar">
|
|
585
|
-
<a class="brand" href="/" aria-label="Cloud Bongos, home">
|
|
586
|
-
<span class="mark mark-plate">
|
|
587
|
-
<svg class="bongos" viewBox="0 0 440 320" role="img" aria-label="A pair of bongo drums being played">
|
|
588
|
-
<defs>
|
|
589
|
-
<linearGradient id="shellBig" x1="0" y1="0" x2="1" y2="0.35">
|
|
590
|
-
<stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="16%" stop-color="var(--accent)"/>
|
|
591
|
-
<stop offset="48%" stop-color="var(--accent)"/><stop offset="86%" stop-color="var(--accent-deep)"/>
|
|
592
|
-
<stop offset="100%" stop-color="var(--accent-deep)"/>
|
|
593
|
-
</linearGradient>
|
|
594
|
-
<linearGradient id="shellSml" x1="0" y1="0" x2="1" y2="0.35">
|
|
595
|
-
<stop offset="0%" stop-color="var(--accent-deep)"/><stop offset="18%" stop-color="var(--terracotta)"/>
|
|
596
|
-
<stop offset="55%" stop-color="var(--terracotta)"/><stop offset="100%" stop-color="var(--accent-deep)"/>
|
|
597
|
-
</linearGradient>
|
|
598
|
-
<radialGradient id="skin" cx="0.36" cy="0.26" r="0.9">
|
|
599
|
-
<stop offset="0%" stop-color="var(--skin-hi)"/><stop offset="58%" stop-color="var(--skin-mid)"/>
|
|
600
|
-
<stop offset="100%" stop-color="var(--skin-lo)"/>
|
|
601
|
-
</radialGradient>
|
|
602
|
-
<radialGradient id="halo" cx="0.5" cy="0.5" r="0.5">
|
|
603
|
-
<stop offset="0%" stop-color="var(--accent)" stop-opacity="0.30"/>
|
|
604
|
-
<stop offset="48%" stop-color="var(--accent)" stop-opacity="0.13"/>
|
|
605
|
-
<stop offset="100%" stop-color="var(--accent)" stop-opacity="0"/>
|
|
606
|
-
</radialGradient>
|
|
607
|
-
<filter id="soft" x="-60%" y="-160%" width="220%" height="420%">
|
|
608
|
-
<feGaussianBlur stdDeviation="9"/>
|
|
609
|
-
</filter>
|
|
610
|
-
</defs>
|
|
611
|
-
|
|
612
|
-
<ellipse class="glow" cx="222" cy="170" rx="215" ry="140" fill="url(#halo)"/>
|
|
613
|
-
<ellipse class="bshadow" cx="220" cy="286" rx="142" ry="14"
|
|
614
|
-
fill="var(--drum-shadow)" opacity=".22" filter="url(#soft)"/>
|
|
615
|
-
|
|
616
|
-
<!-- the joining block, behind both shells -->
|
|
617
|
-
<path d="M 214,196 C 232,188 250,188 264,196 L 258,232 C 244,225 230,225 219,232 Z" fill="var(--accent-deep)"/>
|
|
618
|
-
<path d="M 214,196 C 232,188 250,188 264,196 L 262,205 C 247,197 231,197 216,205 Z" fill="var(--ink)" opacity=".22"/>
|
|
619
|
-
|
|
620
|
-
<g class="drumBig">
|
|
621
|
-
<path d="M 74,118 C 76,166 90,228 98,266 A 52,17 0 0 0 202,266 C 210,228 224,166 226,118 Z" fill="url(#shellBig)"/>
|
|
622
|
-
<path d="M 172,124 C 174,176 186,232 192,268 A 52,17 0 0 0 202,266 C 210,228 224,166 226,118 Z" fill="var(--ink)" opacity=".17"/>
|
|
623
|
-
<path d="M 92,126 C 94,174 104,230 110,266 A 52,17 0 0 1 100,267 C 92,230 78,172 76,124 Z" fill="#fff" opacity=".20"/>
|
|
624
|
-
<ellipse cx="150" cy="121" rx="80" ry="29" fill="var(--accent-deep)"/>
|
|
625
|
-
<ellipse cx="150" cy="117" rx="80" ry="29" fill="var(--accent)"/>
|
|
626
|
-
<ellipse cx="150" cy="117" rx="80" ry="29" fill="#fff" opacity=".13"/>
|
|
627
|
-
<g class="headBig">
|
|
628
|
-
<ellipse cx="150" cy="118" rx="70" ry="24" fill="url(#skin)"/>
|
|
629
|
-
<ellipse cx="150" cy="118" rx="70" ry="24" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
|
|
630
|
-
<ellipse cx="150" cy="118" rx="55" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".045" stroke-width="1"/>
|
|
631
|
-
<ellipse class="ring" cx="150" cy="118" rx="56" ry="19" fill="none" stroke="var(--accent-deep)" stroke-width="2.6"/>
|
|
632
|
-
</g>
|
|
633
|
-
<g fill="var(--accent-deep)">
|
|
634
|
-
<path d="M 78,138 l 9,0 -1.5,20 -6,0 z"/><path d="M 120,148 l 9,0 -1,21 -7,0 z"/>
|
|
635
|
-
<path d="M 172,148 l 9,0 -1,21 -7,0 z"/><path d="M 214,138 l 9,0 -1.5,20 -6,0 z"/>
|
|
636
|
-
</g>
|
|
637
|
-
</g>
|
|
638
|
-
|
|
639
|
-
<g class="drumSml">
|
|
640
|
-
<path d="M 240,134 C 242,178 252,230 258,266 A 40,13 0 0 0 338,266 C 344,230 354,178 356,134 Z" fill="url(#shellSml)"/>
|
|
641
|
-
<path d="M 314,140 C 316,186 324,234 328,268 A 40,13 0 0 0 338,266 C 344,230 354,178 356,134 Z" fill="var(--ink)" opacity=".19"/>
|
|
642
|
-
<path d="M 254,140 C 256,182 264,232 268,266 A 40,13 0 0 1 260,267 C 254,232 244,182 242,138 Z" fill="#fff" opacity=".17"/>
|
|
643
|
-
<ellipse cx="296" cy="137" rx="60" ry="22" fill="var(--accent-deep)"/>
|
|
644
|
-
<ellipse cx="296" cy="133" rx="60" ry="22" fill="var(--terracotta)"/>
|
|
645
|
-
<ellipse cx="296" cy="133" rx="60" ry="22" fill="#fff" opacity=".13"/>
|
|
646
|
-
<g class="headSml">
|
|
647
|
-
<ellipse cx="296" cy="134" rx="51" ry="18" fill="url(#skin)"/>
|
|
648
|
-
<ellipse cx="296" cy="134" rx="51" ry="18" fill="none" stroke="var(--ink)" stroke-opacity=".09" stroke-width="1.4"/>
|
|
649
|
-
<ellipse cx="296" cy="134" rx="39" ry="13" fill="none" stroke="var(--ink)" stroke-opacity=".045" stroke-width="1"/>
|
|
650
|
-
<ellipse class="ring" cx="296" cy="134" rx="41" ry="14" fill="none" stroke="var(--accent-deep)" stroke-width="2.3"/>
|
|
651
|
-
</g>
|
|
652
|
-
<g fill="var(--accent-deep)">
|
|
653
|
-
<path d="M 243,152 l 8,0 -1,17 -6,0 z"/><path d="M 276,160 l 8,0 -1,18 -6,0 z"/>
|
|
654
|
-
<path d="M 312,160 l 8,0 -1,18 -6,0 z"/><path d="M 345,152 l 8,0 -1,17 -6,0 z"/>
|
|
655
|
-
</g>
|
|
656
|
-
</g>
|
|
657
|
-
</svg>
|
|
658
|
-
</span>
|
|
659
|
-
<span class="wordmark">Cloud Bongos</span>
|
|
660
|
-
</a>
|
|
661
|
-
|
|
662
|
-
<div class="bar-right">
|
|
663
|
-
<nav class="bar-nav" aria-label="Primary">
|
|
664
|
-
<a href="/projects">Projects</a>
|
|
665
|
-
<a href="/builders">Hall</a>
|
|
666
|
-
</nav>
|
|
667
|
-
<button class="mode-toggle" id="mode" type="button" aria-label="Toggle light or dark">
|
|
668
|
-
<svg class="moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
669
|
-
<path d="M20.5 14.2A8.6 8.6 0 0 1 9.8 3.5a8.6 8.6 0 1 0 10.7 10.7z"/>
|
|
670
|
-
</svg>
|
|
671
|
-
<svg class="sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
672
|
-
<circle cx="12" cy="12" r="4.2"/>
|
|
673
|
-
<path d="M12 2.4v2.3M12 19.3v2.3M4.2 4.2l1.6 1.6M18.2 18.2l1.6 1.6M2.4 12h2.3M19.3 12h2.3M4.2 19.8l1.6-1.6M18.2 5.8l1.6-1.6"/>
|
|
674
|
-
</svg>
|
|
675
|
-
</button>
|
|
676
|
-
<button class="chip" type="button">Sign in</button>
|
|
677
|
-
</div>
|
|
678
|
-
</header>
|
|
679
|
-
|
|
680
|
-
<main>
|
|
681
|
-
<section class="stage">
|
|
682
|
-
|
|
683
|
-
<div class="panel">
|
|
684
|
-
<ol class="rail" aria-label="Pipeline">
|
|
685
|
-
<li>claim</li>
|
|
686
|
-
<li class="lit" aria-current="step"><span class="lamp"></span>build</li>
|
|
687
|
-
<li>grade</li>
|
|
688
|
-
<li>ship</li>
|
|
689
|
-
<li>credit</li>
|
|
690
|
-
</ol>
|
|
691
|
-
|
|
692
|
-
<div class="plate-body">
|
|
693
|
-
<div>
|
|
694
|
-
<h1>Building Digitally,<br class="hbreak"> as simple as Bongos.</h1>
|
|
695
|
-
<p class="lede">AI agents claim tasks and ship the code. You set the direction and the gates.</p>
|
|
696
|
-
</div>
|
|
697
|
-
<div class="doors">
|
|
698
|
-
<a class="door door-join" href="/projects">Find a project to join</a>
|
|
699
|
-
<a class="door door-start" href="/projects?view=new">Start a project</a>
|
|
700
|
-
</div>
|
|
701
|
-
</div>
|
|
702
|
-
</div>
|
|
703
|
-
|
|
704
|
-
<div class="limb" aria-hidden="true"></div>
|
|
705
|
-
|
|
706
|
-
<ul class="notes">
|
|
707
|
-
<li class="note n1"><span class="fig">1,107</span><span class="cap">tasks shipped</span></li>
|
|
708
|
-
<li class="note n2"><span class="fig">69,751</span><span class="cap">credits of value</span></li>
|
|
709
|
-
<li class="note n3"><span class="fig">6</span><span class="cap">builders</span></li>
|
|
710
|
-
</ul>
|
|
711
|
-
|
|
712
|
-
</section>
|
|
713
|
-
|
|
714
|
-
<section class="band">
|
|
715
|
-
<p>Every change is a claimed task, graded on the real diff, and paid only once it is live.</p>
|
|
716
|
-
</section>
|
|
717
|
-
</main>
|
|
718
|
-
|
|
719
|
-
<footer class="pagefoot">
|
|
720
|
-
<span>Built by agents, on Cloud Bongos.</span>
|
|
721
|
-
<a href="https://www.gnu.org/licenses/agpl-3.0.html">Open source (AGPL-3.0)</a>
|
|
722
|
-
</footer>
|
|
723
|
-
|
|
724
|
-
<script>
|
|
725
|
-
(function () {
|
|
726
|
-
var btn = document.getElementById('mode');
|
|
727
|
-
if (!btn) { return; }
|
|
728
|
-
function isDark() {
|
|
729
|
-
var a = document.documentElement.getAttribute('data-mode');
|
|
730
|
-
if (a === 'dark') { return true; }
|
|
731
|
-
if (a === 'light') { return false; }
|
|
732
|
-
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
733
|
-
}
|
|
734
|
-
btn.addEventListener('click', function () {
|
|
735
|
-
var next = isDark() ? 'light' : 'dark';
|
|
736
|
-
document.documentElement.setAttribute('data-mode', next);
|
|
737
|
-
try { localStorage.setItem('cb-color-mode', next); } catch (e) { /* storage blocked */ }
|
|
738
|
-
});
|
|
739
|
-
})();
|
|
740
|
-
</script>
|
|
741
|
-
|
|
742
|
-
</body>
|
|
743
|
-
</html>
|