diff --git a/README.md b/README.md index 639b6b5f..6457fd8a 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ The public site owns: - Codex signal cards - release-delta presentation -- recommended config artifacts +- continuous Radar status presentation - static assets and public page rendering The public site does not own: diff --git a/dev/skills/README.md b/dev/skills/README.md index e8c1c48d..a99f0443 100644 --- a/dev/skills/README.md +++ b/dev/skills/README.md @@ -21,6 +21,8 @@ follow-up work: `analysis_draft` JSON consumed by `scripts/github/render_signal_entry.py`. 5. `x-post-draft`: turn evidence-backed Radar output into a reviewable `social_post_draft/v1` artifact for `@decodexspace`. +6. `rate-limit-reset-watch`: review today's `@thsottiaux` X posts with AI semantic + judgment and refresh the homepage `reset_status/v1` artifact. Use only the skills needed for the current artifact. Do not create a social draft just because a signal exists. @@ -37,6 +39,6 @@ explain what changed by themselves. Only the existing checked-in contracts are durable artifacts today: `github_change_bundle/v1`, `analysis_draft`, `signal_entry/v1`, `upstream_impact/v1`, -`release_delta/v1`, and `social_post_draft/v1`. The triage, code-analysis, and -release-analysis skills are reasoning passes unless their conclusions are promoted -into one of those contracts. +`release_delta/v1`, `social_post_draft/v1`, and `reset_status/v1`. The triage, +code-analysis, release-analysis, and reset-watch skills are reasoning passes unless +their conclusions are promoted into one of those contracts. diff --git a/dev/skills/rate-limit-reset-watch/SKILL.md b/dev/skills/rate-limit-reset-watch/SKILL.md new file mode 100644 index 00000000..e24ca5f8 --- /dev/null +++ b/dev/skills/rate-limit-reset-watch/SKILL.md @@ -0,0 +1,59 @@ +--- +name: rate-limit-reset-watch +description: Use when checking whether today's @thsottiaux X posts semantically indicate a rate-limit reset, quota reset, message-cap recovery, or reset window, and when writing the Decodex homepage reset_status/v1 artifact under site/src/content/reset-status/. +--- + +# Rate Limit Reset Watch + +Use this repo-local skill to refresh the homepage `Are we reset today?` signal. +The job is semantic judgment, not keyword matching. + +## Inputs + +- Source account: `https://x.com/thsottiaux` +- Artifact: `site/src/content/reset-status/latest.json` +- Spec: `docs/spec/reset-status.md` +- Default timezone for "today": `Asia/Shanghai`, unless the user gives another one. + +## Workflow + +1. Determine the `observed_for_date` in the selected timezone. +2. Collect today's visible `@thsottiaux` candidates from X. + - Prefer `@Chrome` when logged-in X access is needed. + - Use profile results and X search such as `from:thsottiaux since:YYYY-MM-DD until:YYYY-MM-DD`. + - If exact keyword search is useful, use it only as supporting evidence, not as the decision. +3. Read the candidate posts, quotes, and immediate thread context needed to understand them. +4. Decide semantically whether any candidate says rate limits reset, quota windows reset, + message caps recovered, or users should wait for a reset window. +5. Write `site/src/content/reset-status/latest.json` with `schema = "reset_status/v1"`. +6. Run the site content/type validation after updating the artifact. + +## Decision Rules + +Return `yes` when the reviewed content semantically points to reset behavior, even if the +post never says the exact phrase `rate limit reset`. + +Return `no` when today's visible posts were reviewable and none are about reset behavior. + +Return `unknown` when X access, search, timeline loading, deleted posts, login state, or +insufficient visible candidates make the judgment unreliable. + +Do not mark `yes` for generic use of words like `reset`, `limit`, `rate`, `quota`, +or `window` unless the surrounding meaning is rate-limit reset behavior. + +Do not mark `yes` for unrelated posts about releases, performance, browser improvements, +model quality, screenshots, or product announcements. + +## Artifact Guidance + +Keep `rationale` short and evidence-based. Summarize reviewed posts instead of copying +long X text into the artifact. + +Use `evidence_posts[].relevance` as: + +- `related`: supports a `yes` judgment +- `not_related`: reviewed but does not support reset +- `uncertain`: could not be interpreted confidently + +If the artifact is `unknown`, explain the blocker in `rationale` and include any partial +candidate summaries that were visible. diff --git a/dev/skills/rate-limit-reset-watch/agents/openai.yaml b/dev/skills/rate-limit-reset-watch/agents/openai.yaml new file mode 100644 index 00000000..88d5fdd5 --- /dev/null +++ b/dev/skills/rate-limit-reset-watch/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Rate Limit Reset Watch" + short_description: "Judge whether today contains a semantic rate-limit-reset post." + default_prompt: "Check today’s @thsottiaux X posts and write a reset-status artifact." diff --git a/docs/spec/reset-status.md b/docs/spec/reset-status.md index a897b93d..f986474f 100644 --- a/docs/spec/reset-status.md +++ b/docs/spec/reset-status.md @@ -1,75 +1,86 @@ # Reset Status -Purpose: Define the runtime behavior for the homepage reset-status widget. +Purpose: Define the artifact and homepage behavior for the reset-status widget. Status: normative Read this when: - You are changing the homepage reset-status widget. -- You are changing how the client fetches OpenAI status data. -- You need to know the current Are-we-reset heuristic. +- You are changing how Decodex decides whether "Are we reset today?" is `Yes`, `No`, or `Unknown`. +- You are producing or reviewing the reset-status artifact. + +Not this document: +- The general social publishing workflow. +- The Codex upstream signal-entry contract. Defines: -- The upstream source used by the homepage widget. -- The one-fetch-per-page-load rule. -- The current 24-hour alert heuristic for `Yes` versus `No`. +- The X account used as the reset-status source. +- The `reset_status/v1` artifact consumed by the static site. +- The AI semantic judgment rule for reset status. ## Source -The widget uses the OpenAI public status page: +The reset-status source is the X account: + +- account: `@thsottiaux` +- profile URL: `https://x.com/thsottiaux` -- source URL: `https://status.openai.com/incidents/01KK9JA8JKQKDW1W24T09NHBYH` -- API URL: `https://status.openai.com/api/v2/incidents.json` -- incident id: `01KK9JA8JKQKDW1W24T09NHBYH` +The static site must not fetch X, OpenAI Status, or another live API from the browser for +this widget. The site reads the latest checked-in reset-status artifact under: -The homepage must fetch this API directly from the browser. Do not route this -through a repo-owned static artifact, scheduled workflow, or generated content -collection. +- `site/src/content/reset-status/*.json` -## Runtime fetch rule +## Artifact -The reset-status widget must fetch status data: +The artifact schema is: -- once per page open -- from the client -- without background polling +- `schema`: must be `reset_status/v1` +- `question`: must be the rendered question, currently `Are we reset today?` +- `answer`: one of `yes`, `no`, or `unknown` +- `confidence`: one of `confirmed`, `likely`, or `weak` +- `observed_for_date`: the date being judged, formatted as `YYYY-MM-DD` +- `timezone`: the timezone used to interpret "today" +- `generated_at`: generation timestamp +- `source_account`: the X handle that was reviewed +- `source_url`: the reviewed profile URL +- `search_url`: optional X search URL used during review +- `judgment_mode`: must be `ai_semantic_review` +- `rationale`: short explanation for the decision +- `evidence_posts`: reviewed candidate posts or summaries, each marked as `related`, + `not_related`, or `uncertain` -If multiple reset-status widgets are rendered on one page, they should share -the same in-page request instead of issuing duplicate fetches. +## Judgment Rule -## Heuristic +The reset answer is an AI semantic judgment over today's visible `@thsottiaux` posts. +It must not be a keyword-only check. -The homepage question remains: +Set `answer` to `yes` when at least one reviewed post, quote, or directly linked context +semantically says that rate limits reset, message caps recovered, quota windows reset, or +users should wait for a reset window. The exact phrase `rate limit reset` is not required. -- `Are we reset today?` +Set `answer` to `no` when today's reviewed posts are sufficiently visible and none of +them semantically indicates a rate-limit reset event. -The current decision rule is: +Set `answer` to `unknown` when X access, search, login state, timeline loading, or post +visibility prevents a useful judgment. -- `Yes` when the `Codex unresponsive` incident shows at least one alert within - the last `24` hours -- `No` otherwise +## Review Rule -For this purpose, the client must first select the incident with id -`01KK9JA8JKQKDW1W24T09NHBYH`. An alert is any incident-level or update-level -timestamp on that incident in the last 24 hours. The client should inspect: +The reviewer must collect today's candidate posts first, then make the semantic decision. +Good evidence can come from X profile results, X search results, quoted context, or visible +thread context. -- `incident.created_at` -- `incident.updated_at` -- `incident.monitoring_at` -- `incident.resolved_at` -- `incident_updates[].display_at` -- `incident_updates[].created_at` -- `incident_updates[].updated_at` +Do not mark `yes` from generic words such as `reset`, `limit`, `fast`, `quota`, or +`rate` unless the surrounding context is about rate-limit reset behavior. -## Failure behavior +Do not mark `yes` from unrelated release, browser, performance, or product-quality posts. -If the status fetch fails or the payload is malformed: +## Homepage Rule -- keep the widget link pointing at the OpenAI incident page -- render the answer as `No` -- render the widget in the muted state +The homepage renders the checked-in artifact directly: -## Source framing rule +- `yes` renders `Yes` in the positive tone +- `no` renders `No` in the neutral tone +- `unknown` renders `Unknown` in the muted tone -The widget remains a heuristic. It must not claim that the OpenAI status page -directly confirms a Codex quota or usage reset event. +The widget links to the artifact's `search_url` when present, otherwise to `source_url`. diff --git a/site/.astro/collections/recommendedConfigs.schema.json b/site/.astro/collections/recommendedConfigs.schema.json deleted file mode 100644 index e081921c..00000000 --- a/site/.astro/collections/recommendedConfigs.schema.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "schema": { - "type": "string", - "const": "recommended_config/v1" - }, - "repo": { - "type": "string", - "minLength": 1 - }, - "id": { - "type": "string", - "minLength": 1 - }, - "title": { - "type": "string", - "minLength": 1 - }, - "curator_name": { - "type": "string", - "minLength": 1 - }, - "curator_url": { - "type": "string", - "pattern": "^https:\\/\\/" - }, - "subtitle": { - "type": "string", - "minLength": 1 - }, - "audience_note": { - "type": "string", - "minLength": 1 - }, - "warning": { - "type": "string", - "minLength": 1 - }, - "config_toml": { - "type": "string", - "minLength": 1 - }, - "flags": { - "minItems": 1, - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "description": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "name", - "description" - ] - } - }, - "$schema": { - "type": "string" - } - }, - "required": [ - "schema", - "repo", - "id", - "title", - "curator_name", - "curator_url", - "subtitle", - "audience_note", - "warning", - "config_toml", - "flags" - ] -} \ No newline at end of file diff --git a/site/.astro/content.d.ts b/site/.astro/content.d.ts index 38ea166d..074efa80 100644 --- a/site/.astro/content.d.ts +++ b/site/.astro/content.d.ts @@ -120,19 +120,19 @@ declare module 'astro:content' { : any; type DataEntryMap = { - "recommendedConfigs": Record; + collection: "releaseDeltas"; + data: InferEntrySchema<"releaseDeltas">; rendered?: RenderedContent; filePath?: string; }>; -"releaseDeltas": Record; + collection: "resetStatus"; + data: InferEntrySchema<"resetStatus">; rendered?: RenderedContent; filePath?: string; }>; diff --git a/site/package-lock.json b/site/package-lock.json index b5dd5d43..ea7262ae 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -13,7 +13,11 @@ "astro": "^6.3.1", "marked": "^18.0.3", "tailwindcss": "4.2.2", + "three": "^0.184.0", "typescript": "^5.9.3" + }, + "devDependencies": { + "@types/three": "^0.184.1" } }, "node_modules/@astrojs/check": { @@ -261,6 +265,13 @@ "sisteransi": "^1.0.5" } }, + "node_modules/@dimforge/rapier3d-compat": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz", + "integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@emmetio/abbreviation": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", @@ -2306,6 +2317,13 @@ "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, + "node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", + "dev": true, + "license": "MIT" + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -2364,12 +2382,41 @@ "@types/unist": "*" } }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.184.1", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.184.1.tgz", + "integrity": "sha512-6q4VdiqVsrTRqmk62/BnlcAvIrnDM0zf2ZDVKI5kZiniWrSaOHaQzmbp+BNzoggc/8tgW412pL//wZIxu2PPTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@dimforge/rapier3d-compat": "~0.12.0", + "@tweenjs/tween.js": "~23.1.3", + "@types/stats.js": "*", + "@types/webxr": ">=0.5.17", + "fflate": "~0.8.2", + "meshoptimizer": "~1.1.1" + } + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "dev": true, + "license": "MIT" + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -3336,6 +3383,13 @@ } } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, "node_modules/flattie": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", @@ -4308,6 +4362,13 @@ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", "license": "CC0-1.0" }, + "node_modules/meshoptimizer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.1.1.tgz", + "integrity": "sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g==", + "dev": true, + "license": "MIT" + }, "node_modules/micromark": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", @@ -5743,6 +5804,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/three": { + "version": "0.184.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.184.0.tgz", + "integrity": "sha512-wtTRjG92pM5eUg/KuUnHsqSAlPM296brTOcLgMRqEeylYTh/CdtvKUvCyyCQTzFuStieWxvZb8mVTMvdPyUpxg==", + "license": "MIT" + }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", diff --git a/site/package.json b/site/package.json index 5a1d3b13..fdf2a2d0 100644 --- a/site/package.json +++ b/site/package.json @@ -16,9 +16,13 @@ "astro": "^6.3.1", "marked": "^18.0.3", "tailwindcss": "4.2.2", + "three": "^0.184.0", "typescript": "^5.9.3" }, "overrides": { "yaml": "2.8.4" + }, + "devDependencies": { + "@types/three": "^0.184.1" } } diff --git a/site/src/components/AppcastDownloadWidget.astro b/site/src/components/AppcastDownloadWidget.astro index f7a02e5e..551fb23c 100644 --- a/site/src/components/AppcastDownloadWidget.astro +++ b/site/src/components/AppcastDownloadWidget.astro @@ -1,7 +1,7 @@ --- const appcastUrl = "https://persistent.oaistatic.com/codex-app-beta/appcast.xml"; const appName = "Codex (Beta).app"; -const appDownloadLabel = "Download Codex Beta"; +const appDownloadLabel = "Download Codex beta"; ---
@@ -12,16 +12,16 @@ const appDownloadLabel = "Download Codex Beta"; target="_blank" rel="noreferrer" aria-label={`Download ${appName}`} + aria-haspopup="menu" + aria-expanded="false" data-appcast-primary > - - Public beta + + Latest Codex app + Checking latest build - - {appDownloadLabel} - - Checking latest build + {appDownloadLabel} @@ -102,6 +102,10 @@ const appDownloadLabel = "Download Codex Beta"; function appcastSetOpenState(root, isOpen) { root.dataset.appcastOpen = isOpen ? "true" : "false"; + const primary = root.querySelector("[data-appcast-primary]"); + if (primary instanceof HTMLElement) { + primary.setAttribute("aria-expanded", isOpen ? "true" : "false"); + } } function appcastCancelClose(root) { @@ -129,7 +133,7 @@ const appDownloadLabel = "Download Codex Beta"; primary.href = latest.url; primary.setAttribute("aria-label", `Download ${appName} ${latest.shortVersion}`); const dateLabel = appcastFormatDate(latest.pubDate); - meta.textContent = dateLabel.length > 0 ? `Latest ${latest.shortVersion} · ${dateLabel}` : `Latest ${latest.shortVersion}`; + meta.textContent = dateLabel.length > 0 ? `${latest.shortVersion} · ${dateLabel}` : latest.shortVersion; } function appcastRenderList(root, items, appName) { diff --git a/site/src/components/EmptyFeedState.astro b/site/src/components/EmptyFeedState.astro index 52d3414a..a5b05fa9 100644 --- a/site/src/components/EmptyFeedState.astro +++ b/site/src/components/EmptyFeedState.astro @@ -17,12 +17,12 @@ const messages: Record = { body: "The current collection is empty or still waiting for the first rendered GitHub-backed signal.", }, "try-now": { - title: "No try-now entries match yet.", + title: "No try paths match yet.", body: "This filter only shows signals with a concrete user test path.", }, "high-impact": { - title: "No high-impact entries yet.", - body: "High-impact is reserved for the smaller set of changes that clearly alter how users should think about Codex.", + title: "No high impact signals yet.", + body: "High impact is reserved for the smaller set of changes that clearly alter how users should think about Codex.", }, }; @@ -31,18 +31,12 @@ const messagesJson = JSON.stringify(messages); --- diff --git a/site/src/components/ReleaseDeltaPanel.astro b/site/src/components/ReleaseDeltaPanel.astro index 6b234000..78023f6d 100644 --- a/site/src/components/ReleaseDeltaPanel.astro +++ b/site/src/components/ReleaseDeltaPanel.astro @@ -1,8 +1,6 @@ --- import { renderMarkdownInline } from "@/lib/render-markdown"; -import { resolveFeatureToggleByName } from "@/lib/config-flags"; import { - comparisonKey, defaultComparison, releaseLabel, trackedSignalsForSlugs, @@ -13,25 +11,9 @@ import { formatPublishedAt, kindLabel, type SignalCardData } from "@/lib/signal- type Props = { delta: ReleaseDeltaData; trackedSignals: SignalCardData[]; - recommendedConfig: { - schema: "recommended_config/v1"; - repo: string; - id: string; - title: string; - curator_name: string; - curator_url: string; - subtitle: string; - audience_note: string; - warning: string; - config_toml: string; - flags: Array<{ - name: string; - description: string; - }>; - } | null; }; -const { delta, trackedSignals, recommendedConfig } = Astro.props; +const { delta, trackedSignals } = Astro.props; const stableOptions = delta.release_options.stable; const previewOptions = delta.release_options.preview; @@ -42,8 +24,9 @@ const latestComparison = delta.comparisons.find( comparison.stable_tag_name === delta.stable_release.tag_name && comparison.prerelease_tag_name === delta.prerelease.tag_name, ); -const latestComparisonTrackedCount = latestComparison?.tracked_signal_slugs.length ?? 0; const activeComparison = latestComparison ?? defaultComparison(delta); +const activeStable = stableByTag.get(activeComparison.stable_tag_name) ?? delta.stable_release; +const activePreview = previewByTag.get(activeComparison.prerelease_tag_name) ?? delta.prerelease; function hasConcreteTryPath(signal: SignalCardData): boolean { return Boolean(signal.how_to_try && signal.expected_effect); @@ -56,491 +39,132 @@ function isHomepageHighlightSignal(signal: SignalCardData): boolean { return signal.kind === "behavior_change" && signal.impact !== "low"; } -type RecommendedConfigToggle = { - name: string; - display: string; - configPath: string; - cliEnableFlag?: string; - description: string; - schemaUrl?: string; - referenceUrl?: string; - referenceDescription?: string | null; - githubSearchUrl?: string; -}; - -function buildRecommendedConfig(profile: Props["recommendedConfig"]): { - title: string; - curatorName: string; - curatorUrl: string; - subtitle: string; - audienceNote: string; - warning: string; - toggles: RecommendedConfigToggle[]; - tomlSnippet: string | null; -} { - if (!profile) { - return { - title: "", - curatorName: "", - curatorUrl: "", - subtitle: "", - audienceNote: "", - warning: "", - toggles: [], - tomlSnippet: null, - }; - } - - const toggles: RecommendedConfigToggle[] = []; - for (const flag of profile.flags) { - const resolved = resolveFeatureToggleByName(flag.name); - if (!resolved || !resolved.configPath) continue; - toggles.push({ - name: flag.name, - display: resolved.display, - configPath: resolved.configPath, - cliEnableFlag: resolved.cliEnableFlag, - description: flag.description, - schemaUrl: resolved.schemaUrl, - referenceUrl: resolved.referenceUrl, - referenceDescription: resolved.referenceDescription, - githubSearchUrl: resolved.githubSearchUrl, - }); - } - - return { - title: profile.title, - curatorName: profile.curator_name, - curatorUrl: profile.curator_url, - subtitle: profile.subtitle, - audienceNote: profile.audience_note, - warning: profile.warning, - toggles, - tomlSnippet: profile.config_toml.trimEnd(), - }; -} - -const manualRecommendedConfig = buildRecommendedConfig(recommendedConfig); - -const comparisonEntries = delta.comparisons - .map((comparison) => { - const stable = stableByTag.get(comparison.stable_tag_name); - const preview = previewByTag.get(comparison.prerelease_tag_name); - if (!stable || !preview) { - return null; - } - const featuredSignals = trackedSignalsForSlugs(comparison.tracked_signal_slugs, trackedSignals); - const highlightSignals = featuredSignals.filter(isHomepageHighlightSignal); - const latestTrackedAt = featuredSignals.reduce((latest, signal) => { - if (!latest || signal.published_at > latest) return signal.published_at; - return latest; - }, null); - const isLatestPair = - comparison.stable_tag_name === delta.stable_release.tag_name && - comparison.prerelease_tag_name === delta.prerelease.tag_name; - return { - ...comparison, - stable, - preview, - featuredSignals, - highlightSignals, - latestTrackedAt, - isLatestPair, - key: comparisonKey(comparison.stable_tag_name, comparison.prerelease_tag_name), - }; - }) - .filter((entry): entry is NonNullable => Boolean(entry)); - -const comparisonKeysByStable = Object.fromEntries( - stableOptions.map((stable) => [ - stable.tag_name, - comparisonEntries - .filter((entry) => entry.stable_tag_name === stable.tag_name) - .map((entry) => entry.prerelease_tag_name), - ]), -); +const featuredSignals = trackedSignalsForSlugs(activeComparison.tracked_signal_slugs, trackedSignals); +const publicHighlightSignals = trackedSignals.filter(isHomepageHighlightSignal).slice(0, 3); +const latestWindowTrackedAt = featuredSignals.reduce((latest, signal) => { + if (!latest || signal.published_at > latest) return signal.published_at; + return latest; +}, null); +const latestPublicSignalAt = trackedSignals.reduce((latest, signal) => { + if (!latest || signal.published_at > latest) return signal.published_at; + return latest; +}, null); +const tryPathCount = trackedSignals.filter(hasConcreteTryPath).length; --- -
-
- - - From - - to - - +
+
+

Latest upstream window

+ + {releaseLabel(activeStable, delta.tag_prefix)} + + {releaseLabel(activePreview, delta.tag_prefix)} + + View upstream diff +
- {comparisonEntries.map((entry) => ( -
diff --git a/site/src/components/ResetStatusWidget.astro b/site/src/components/ResetStatusWidget.astro index 23e063ba..b7d5bcc3 100644 --- a/site/src/components/ResetStatusWidget.astro +++ b/site/src/components/ResetStatusWidget.astro @@ -1,148 +1,56 @@ --- import { - RESET_STATUS_API_URL, - RESET_STATUS_INCIDENT_ID, RESET_STATUS_QUESTION, RESET_STATUS_SOURCE_URL, - RESET_STATUS_WINDOW_MS, + resetStatusAnswerLabel, + resetStatusTone, + type ResetStatusData, } from "@/lib/reset-status"; type Props = { + status?: ResetStatusData | null; variant?: "inline" | "stack"; }; const variant = Astro.props.variant ?? "inline"; -const question = RESET_STATUS_QUESTION; -const statusUrl = RESET_STATUS_SOURCE_URL; -const statusApiUrl = RESET_STATUS_API_URL; -const initialTone = "muted"; -const initialAnswer = "Checking..."; +const status = Astro.props.status ?? null; +const question = status?.question ?? RESET_STATUS_QUESTION; +const statusUrl = status?.search_url ?? status?.source_url ?? RESET_STATUS_SOURCE_URL; +const answer = resetStatusAnswerLabel(status?.answer ?? "unknown"); +const tone = resetStatusTone(status?.answer ?? "unknown"); +const title = status + ? `${status.source_account} on ${status.observed_for_date}: ${status.rationale}` + : "Rate limit reset status has not been generated yet."; --- { variant === "stack" ? ( <> {question} - + - {initialAnswer} + {answer} ) : ( <> {question} - + - {initialAnswer} + {answer} ) } - - diff --git a/site/src/components/SignalCard.astro b/site/src/components/SignalCard.astro index 19083991..b6fc53d0 100644 --- a/site/src/components/SignalCard.astro +++ b/site/src/components/SignalCard.astro @@ -43,6 +43,7 @@ const sourceItems: SourceRefItem[] = url, })), ]; +const primarySource = sourceItems.find((source) => source.kind === "pull_request") ?? sourceItems[0]; ---
- - -
-
- {signal.previewLabel ? ( -

- {signal.previewLabel} -

- ) : null} - -

-

- -

- - + {signal.expected_effect ? ( +

+ Expected effect +

-

- -
-

- - - {renderedHowToTry ? ( - <> - Try now{" "} - - - ) : ( - "Watch only. No safe try path is published for this signal yet." - )} - -

- - {signal.expected_effect ? ( -

- - -

- ) : null} - - {configToggleFlags.length > 0 ? ( -
- -

- Add to $CODEX_HOME/config.toml. -

-
- {configToggleFlags.map((flag) => ( - - {flag.display} - - ))} -
-
- ) : null} - - {visibleFlags.length > 0 ? ( -
- {visibleFlags.map((flag) => ( - - {flag.display} - - ))} -
- ) : null} -
+ ) : null} + + {configToggleFlags.length > 0 || visibleFlags.length > 0 ? ( +
+ {configToggleFlags.length > 0 ? Add to $CODEX_HOME/config.toml : null} + {configToggleFlags.map((flag) => ( + + {flag.display} + + ))} + {visibleFlags.map((flag) => ( + + {flag.display} + + ))} +
+ ) : null} -
- - Sources and evidence +
+ + Evidence {signal.proof_points.length} proof point{signal.proof_points.length === 1 ? "" : "s"} -
-
    +
    +
      {signal.proof_points.map((point) => (
    • @@ -156,9 +133,9 @@ const sourceItems: SourceRefItem[] =
    {signal.caveats.length > 0 ? ( -
    - -
      +
      +

      Caveats

      +
        {signal.caveats.map((caveat) => (
      • @@ -168,23 +145,21 @@ const sourceItems: SourceRefItem[] =
      ) : null} - {renderedWatchState ? ( -

      - {" "} + {renderedWatchState && renderedHowToTry ? ( +

      + Watch state

      ) : null} -
        +
          {sourceItems.map((source) => ( -
        1. - - {source.kind === "pull_request" ? "PR" : "Commit"} - - +
        2. + {source.kind === "pull_request" ? "PR" : "Commit"} + {source.title} - {source.meta ? {source.meta} : null} + {source.meta ? {source.meta} : null}
        3. ))}
        diff --git a/site/src/components/SignalSymphony.astro b/site/src/components/SignalSymphony.astro new file mode 100644 index 00000000..e46da215 --- /dev/null +++ b/site/src/components/SignalSymphony.astro @@ -0,0 +1,233 @@ +--- +type Props = { + totalSignals: number; + tryPathCount: number; + highImpactCount: number; +}; + +const { totalSignals, tryPathCount, highImpactCount } = Astro.props; +--- + + + + diff --git a/site/src/content.config.ts b/site/src/content.config.ts index 089fc07b..e43c8b7f 100644 --- a/site/src/content.config.ts +++ b/site/src/content.config.ts @@ -159,21 +159,27 @@ const releaseDeltaSchema = z }); }); -const recommendedConfigSchema = z.object({ - schema: z.literal("recommended_config/v1"), - repo: z.string().min(1), - id: z.string().min(1), - title: z.string().min(1), - curator_name: z.string().min(1), - curator_url: z.string().regex(/^https:\/\//, "curator_url must be an https URL"), - subtitle: z.string().min(1), - audience_note: z.string().min(1), - warning: z.string().min(1), - config_toml: z.string().min(1), - flags: z.array(z.object({ - name: z.string().min(1), - description: z.string().min(1), - })).min(1), +const resetStatusEvidencePostSchema = z.object({ + published_at_label: z.string().min(1).optional(), + relevance: z.enum(["related", "not_related", "uncertain"]), + summary: z.string().min(1), + url: z.string().regex(/^https:\/\//, "post url must be an https URL").optional(), +}); + +const resetStatusSchema = z.object({ + schema: z.literal("reset_status/v1"), + question: z.string().min(1), + answer: z.enum(["yes", "no", "unknown"]), + confidence: z.enum(["confirmed", "likely", "weak"]), + observed_for_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "observed_for_date must be YYYY-MM-DD"), + timezone: z.string().min(1), + generated_at: z.string().min(1), + source_account: z.string().min(1), + source_url: z.string().regex(/^https:\/\//, "source_url must be an https URL"), + search_url: z.string().regex(/^https:\/\//, "search_url must be an https URL").optional(), + judgment_mode: z.literal("ai_semantic_review"), + rationale: z.string().min(1), + evidence_posts: z.array(resetStatusEvidencePostSchema).default([]), }); const signals = defineCollection({ @@ -192,16 +198,16 @@ const releaseDeltas = defineCollection({ schema: releaseDeltaSchema, }); -const recommendedConfigs = defineCollection({ +const resetStatus = defineCollection({ loader: glob({ pattern: "**/*.json", - base: "./src/content/recommended-configs", + base: "./src/content/reset-status", }), - schema: recommendedConfigSchema, + schema: resetStatusSchema, }); export const collections = { signals, releaseDeltas, - recommendedConfigs, + resetStatus, }; diff --git a/site/src/content/recommended-configs/openai-codex-prerelease.json b/site/src/content/recommended-configs/openai-codex-prerelease.json deleted file mode 100644 index a45c160d..00000000 --- a/site/src/content/recommended-configs/openai-codex-prerelease.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "schema": "recommended_config/v1", - "repo": "openai/codex", - "id": "xavier-prerelease-profile", - "title": "Recommended profile", - "curator_name": "Yvette", - "curator_url": "https://x.com/YvetteCipher", - "subtitle": "Hand-picked for adventurous preview users.", - "audience_note": "Not AI-generated.", - "warning": "Pre-release only; not for stable.", - "config_toml": "[features]\napply_patch_freeform = true\nartifact = true\ncodex_hooks = true\nenable_fanout = true\nmulti_agent_v2 = true\nplugins = true\nprevent_idle_sleep = true\nrealtime_conversation = true\nruntime_metrics = true\ntool_call_mcp_elicitation = true\ntool_search = true\ntool_suggest = true\nundo = true\nvoice_transcription = true\n", - "flags": [ - { - "name": "apply_patch_freeform", - "description": "Use the freeform apply-patch path so pre-release editing behavior stays on." - }, - { - "name": "artifact", - "description": "Turn on artifact outputs and file-producing flows." - }, - { - "name": "codex_hooks", - "description": "Enable hook execution support." - }, - { - "name": "enable_fanout", - "description": "Allow fanout-style multi-lane agent execution." - }, - { - "name": "multi_agent_v2", - "description": "Use the newer multi-agent implementation." - }, - { - "name": "plugins", - "description": "Enable plugin discovery and plugin-backed tooling." - }, - { - "name": "prevent_idle_sleep", - "description": "Prevent idle sleep so long-running sessions stay alive." - }, - { - "name": "realtime_conversation", - "description": "Enable realtime conversation surfaces." - }, - { - "name": "runtime_metrics", - "description": "Expose runtime metrics and instrumentation surfaces." - }, - { - "name": "tool_call_mcp_elicitation", - "description": "Allow MCP elicitation during tool calls." - }, - { - "name": "tool_search", - "description": "Enable the tool-search UI for discovering available tools." - }, - { - "name": "tool_suggest", - "description": "Enable tool suggestion UX." - }, - { - "name": "undo", - "description": "Enable undo support." - }, - { - "name": "voice_transcription", - "description": "Enable voice transcription input." - } - ] -} diff --git a/site/src/content/reset-status/latest.json b/site/src/content/reset-status/latest.json new file mode 100644 index 00000000..9127db39 --- /dev/null +++ b/site/src/content/reset-status/latest.json @@ -0,0 +1,31 @@ +{ + "schema": "reset_status/v1", + "question": "Rate limit reset today?", + "answer": "no", + "confidence": "likely", + "observed_for_date": "2026-05-13", + "timezone": "Asia/Shanghai", + "generated_at": "2026-05-13T15:27:51Z", + "source_account": "@thsottiaux", + "source_url": "https://x.com/thsottiaux", + "search_url": "https://x.com/search?q=from%3Athsottiaux%20since%3A2026-05-13%20until%3A2026-05-14&src=typed_query&f=live", + "judgment_mode": "ai_semantic_review", + "rationale": "AI semantic review of today's visible @thsottiaux posts did not find a post about rate limit quota reset, cap recovery, or reset timing.", + "evidence_posts": [ + { + "published_at_label": "9h", + "relevance": "not_related", + "summary": "Post about using ChatGPT more after GPT-5.5 Instant." + }, + { + "published_at_label": "12h", + "relevance": "not_related", + "summary": "Post about in-app browser improvements in the Codex app." + }, + { + "published_at_label": "13h", + "relevance": "not_related", + "summary": "Short reply to another X user without rate-limit reset content." + } + ] +} diff --git a/site/src/lib/reset-status.ts b/site/src/lib/reset-status.ts index ab72fb6a..96e53346 100644 --- a/site/src/lib/reset-status.ts +++ b/site/src/lib/reset-status.ts @@ -1,5 +1,51 @@ -export const RESET_STATUS_QUESTION = "Are we reset today?"; -export const RESET_STATUS_INCIDENT_ID = "01KK9JA8JKQKDW1W24T09NHBYH"; -export const RESET_STATUS_SOURCE_URL = `https://status.openai.com/incidents/${RESET_STATUS_INCIDENT_ID}`; -export const RESET_STATUS_API_URL = "https://status.openai.com/api/v2/incidents.json"; -export const RESET_STATUS_WINDOW_MS = 24 * 60 * 60 * 1000; +export const RESET_STATUS_QUESTION = "Rate limit reset today?"; +export const RESET_STATUS_SOURCE_ACCOUNT = "@thsottiaux"; +export const RESET_STATUS_SOURCE_URL = "https://x.com/thsottiaux"; + +export type ResetStatusAnswer = "yes" | "no" | "unknown"; +export type ResetStatusConfidence = "confirmed" | "likely" | "weak"; + +export type ResetStatusEvidencePost = { + published_at_label?: string; + relevance: "related" | "not_related" | "uncertain"; + summary: string; + url?: string; +}; + +export type ResetStatusData = { + answer: ResetStatusAnswer; + confidence: ResetStatusConfidence; + evidence_posts: ResetStatusEvidencePost[]; + generated_at: string; + judgment_mode: "ai_semantic_review"; + observed_for_date: string; + question: string; + rationale: string; + schema: "reset_status/v1"; + search_url?: string; + source_account: string; + source_url: string; + timezone: string; +}; + +export function resetStatusAnswerLabel(answer: ResetStatusAnswer): string { + switch (answer) { + case "yes": + return "Yes"; + case "no": + return "No"; + case "unknown": + return "Unknown"; + } +} + +export function resetStatusTone(answer: ResetStatusAnswer): "muted" | "neutral" | "positive" { + switch (answer) { + case "yes": + return "positive"; + case "no": + return "neutral"; + case "unknown": + return "muted"; + } +} diff --git a/site/src/lib/signal-feed.ts b/site/src/lib/signal-feed.ts index c18d8c26..8dd45660 100644 --- a/site/src/lib/signal-feed.ts +++ b/site/src/lib/signal-feed.ts @@ -6,17 +6,17 @@ export const FILTERS = [ }, { id: "github", - label: "GitHub", - description: "PR-first GitHub change signals.", + label: "Upstream", + description: "Source-backed upstream change signals.", }, { id: "try-now", - label: "Try Now", + label: "Try paths", description: "Signals with an actionable try path.", }, { id: "high-impact", - label: "High Impact", + label: "High impact", description: "Directional or high-value shifts worth watching.", }, ] as const; @@ -162,20 +162,20 @@ export function kindLabel(kind: SignalKind): string { case "capability": return "Capability"; case "behavior_change": - return "Behavior Change"; + return "Behavior change"; case "try_now": - return "Try Now"; + return "Try now"; } } export function impactLabel(impact: SignalImpact): string { switch (impact) { case "low": - return "Low Impact"; + return "Low impact"; case "medium": - return "Medium Impact"; + return "Medium impact"; case "high": - return "High Impact"; + return "High impact"; } } diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro index fa3f8237..959e254b 100644 --- a/site/src/pages/index.astro +++ b/site/src/pages/index.astro @@ -1,19 +1,28 @@ --- import { getCollection } from "astro:content"; -import EmptyFeedState from "@/components/EmptyFeedState.astro"; import AppcastDownloadWidget from "@/components/AppcastDownloadWidget.astro"; +import EmptyFeedState from "@/components/EmptyFeedState.astro"; import FilterBar from "@/components/FilterBar.astro"; -import ReleaseDeltaPanel from "@/components/ReleaseDeltaPanel.astro"; import ResetStatusWidget from "@/components/ResetStatusWidget.astro"; import SignalCard from "@/components/SignalCard.astro"; +import SignalSymphony from "@/components/SignalSymphony.astro"; import ThemeToggle from "@/components/ThemeToggle.astro"; import BaseLayout from "@/layouts/BaseLayout.astro"; -import { type ReleaseDeltaData } from "@/lib/release-delta"; +import { + defaultComparison, + releaseLabel, + type ReleaseDeltaData, +} from "@/lib/release-delta"; +import { renderMarkdownInline } from "@/lib/render-markdown"; +import { type ResetStatusData } from "@/lib/reset-status"; import { FILTERS, + formatPublishedAt, groupSignalsByMonth, homepageSignals, + impactLabel, isFilterId, + kindLabel, sortSignals, type FilterId, type SignalCardData, @@ -21,9 +30,12 @@ import { const rawFilter = Astro.url.searchParams.get("filter"); const activeFilter: FilterId = isFilterId(rawFilter) ? rawFilter : "all"; +const decodexGitHubUrl = "https://github.com/hack-ink/decodex"; +const primaryXUrl = "https://x.com/YvetteCipher"; +const signalBotXUrl = "https://x.com/decodexspace"; const collectionEntries = await getCollection("signals"); const releaseDeltaEntries = await getCollection("releaseDeltas"); -const recommendedConfigEntries = await getCollection("recommendedConfigs"); +const resetStatusEntries = await getCollection("resetStatus"); const allSignals: SignalCardData[] = sortSignals( collectionEntries.map((entry) => ({ id: entry.id, @@ -35,20 +47,10 @@ const releaseDelta: ReleaseDeltaData | null = releaseDeltaEntries .map((entry) => entry.data as ReleaseDeltaData) .find((entry) => entry.repo === "openai/codex") ?? null; -const recommendedConfig = - recommendedConfigEntries - .map((entry) => entry.data) - .find((entry) => entry.repo === "openai/codex") ?? null; -const hasPublishedSignals = signals.length > 0; -const groupedSignals = groupSignalsByMonth(signals); -const showGroupLabels = groupedSignals.length > 1; -const clientFilterIds = FILTERS.map((filter) => filter.id); -const tryPathCount = signals.filter((signal) => Boolean(signal.how_to_try)).length; -const archivedSignalCount = Math.max(0, allSignals.length - signals.length); -const sourceLinkedCount = signals.filter((signal) => { - const refs = signal.source_refs; - return Boolean(refs.pr_url || refs.items?.length || refs.commit_urls.length); -}).length; +const resetStatus: ResetStatusData | null = + resetStatusEntries + .map((entry) => entry.data as ResetStatusData) + .sort((left, right) => right.generated_at.localeCompare(left.generated_at))[0] ?? null; const previewSignal: SignalCardData = { id: "preview-shell", @@ -71,8 +73,8 @@ const previewSignal: SignalCardData = { expected_effect: "The homepage feed will render real GitHub signals without another route-level refactor.", proof_points: [ - "The homepage already exposes title, published date, impact, confidence, summary, and why-it-matters on card.", - "The filter bar is constrained to all, github, try-now, and high-impact.", + "The homepage already exposes title, published date, impact, confidence, summary, and why it matters on each card.", + "The filter bar is constrained to all signals, upstream signals, try paths, and high impact.", "The utility slot is visually present but intentionally subordinate to the feed.", ], source_refs: { @@ -80,9 +82,94 @@ const previewSignal: SignalCardData = { commit_urls: ["https://docs.astro.build/en/guides/content-collections/"], pr_url: "https://docs.github.com/en/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages", }, - previewLabel: "Scaffold Preview", + previewLabel: "Scaffold preview", }; +const visibleSignals = signals.length > 0 ? signals : [previewSignal]; +const hasPublishedSignals = signals.length > 0; +const groupedSignals = groupSignalsByMonth(signals); +const showGroupLabels = groupedSignals.length > 1; +const clientFilterIds = FILTERS.map((filter) => filter.id); + +function hasConcreteTryPath(signal: SignalCardData): boolean { + return Boolean(signal.how_to_try && signal.expected_effect); +} + +function primarySourceLabel(signal: SignalCardData): string { + const pullRequest = signal.source_refs.items?.find((item) => item.kind === "pull_request"); + if (pullRequest?.meta) return pullRequest.meta; + if (signal.source_refs.pr_url) { + const match = signal.source_refs.pr_url.match(/\/pull\/(\d+)$/); + if (match) return `#${match[1]}`; + } + return signal.source_refs.repo; +} + +const tryPathSignals = visibleSignals.filter(hasConcreteTryPath); +const prioritySignals = [ + ...tryPathSignals, + ...visibleSignals.filter((signal) => !hasConcreteTryPath(signal)), +].slice(0, 3); +const leadSignal = + visibleSignals.find((signal) => signal.impact === "high") ?? + tryPathSignals[0] ?? + visibleSignals[0]; +const watchSignals = visibleSignals + .filter((signal) => signal.watch_state || signal.caveats.length > 0) + .slice(0, 3); +const highImpactCount = visibleSignals.filter((signal) => signal.impact === "high").length; +const tryPathCount = visibleSignals.filter(hasConcreteTryPath).length; +const latestSignalAt = visibleSignals.reduce((latest, signal) => { + if (!latest || signal.published_at > latest) return signal.published_at; + return latest; +}, null); + +const activeComparison = releaseDelta ? defaultComparison(releaseDelta) : null; +const stableByTag = releaseDelta + ? new Map(releaseDelta.release_options.stable.map((release) => [release.tag_name, release])) + : new Map(); +const previewByTag = releaseDelta + ? new Map(releaseDelta.release_options.preview.map((release) => [release.tag_name, release])) + : new Map(); +const activeStable = + releaseDelta && activeComparison + ? stableByTag.get(activeComparison.stable_tag_name) ?? releaseDelta.stable_release + : null; +const activePreview = + releaseDelta && activeComparison + ? previewByTag.get(activeComparison.prerelease_tag_name) ?? releaseDelta.prerelease + : null; +const releaseWindow = + releaseDelta && activeComparison && activeStable && activePreview + ? { + stable: releaseLabel(activeStable, releaseDelta.tag_prefix), + preview: releaseLabel(activePreview, releaseDelta.tag_prefix), + compareUrl: activeComparison.compare.url, + commits: activeComparison.compare.total_commits, + status: activeComparison.compare.status, + updatedAt: formatPublishedAt(releaseDelta.generated_at), + } + : null; + +const productLoops = [ + { + title: "Control plane", + body: "Project registry, identity routing, signing policy, review handoff, and landing rules.", + }, + { + title: "Retained execution", + body: "Issue intake, context preservation, progress checkpoints, and verified handoff.", + }, + { + title: "Upstream radar", + body: "Commit and PR analysis translated into product follow-up.", + }, + { + title: "Publisher", + body: "X posts, release rollups, and migration notes with source links intact.", + }, +]; + const filterRuntimeScript = `(function () { var validFilters = ${JSON.stringify(clientFilterIds)}; var defaultFilter = "all"; @@ -196,114 +283,451 @@ const filterRuntimeScript = `(function () { }); })();`; +const interactionRuntimeScript = `(function () { + var reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)"); + var revealSelector = [ + ".utility-strip", + ".site-section", + ".system-loop li", + ".lead-brief", + ".brief-list", + ".watch-list", + ".publisher-note", + ".publisher-flow span", + ".signal-card", + ".hero-bottom div" + ].join(","); + var pressSelector = [ + ".hero-actions a", + ".lead-brief__link", + ".filter-chip", + ".appcast-download__primary", + ".appcast-download__version", + ".brief-list a", + ".utility-row--window a", + ".signal-card__index a", + ".signal-source-list a" + ].join(","); + var revealObserver = null; + var navObserver = null; + var revealGeometryBound = false; + var revealFrame = 0; + + function all(selector) { + return Array.prototype.slice.call(document.querySelectorAll(selector)); + } + + function revealByGeometry() { + revealFrame = 0; + all(".reveal-ready:not(.is-visible)").forEach(function (node) { + if (!(node instanceof HTMLElement) || node.hidden) return; + var rect = node.getBoundingClientRect(); + if (rect.top < window.innerHeight * 0.96 && rect.bottom > window.innerHeight * -0.1) { + node.classList.add("is-visible"); + } + }); + } + + function revealAllReady() { + all(".reveal-ready:not(.is-visible)").forEach(function (node) { + if (node instanceof HTMLElement && !node.hidden) node.classList.add("is-visible"); + }); + } + + function scheduleGeometryReveal() { + if (revealFrame) return; + revealFrame = window.requestAnimationFrame(revealByGeometry); + } + + function bindGeometryReveal() { + if (revealGeometryBound || reduceMotion.matches) return; + revealGeometryBound = true; + window.addEventListener("scroll", scheduleGeometryReveal, { passive: true }); + window.addEventListener("resize", scheduleGeometryReveal); + } + + function bindReveals() { + var nodes = all(revealSelector).filter(function (node) { + return node instanceof HTMLElement && node.dataset.revealBound !== "true"; + }); + if (nodes.length === 0) return; + + nodes.forEach(function (node, index) { + node.dataset.revealBound = "true"; + node.style.setProperty("--reveal-delay", String(Math.min(index % 7, 6) * 36) + "ms"); + node.classList.add("reveal-ready"); + }); + + if (reduceMotion.matches || !("IntersectionObserver" in window)) { + nodes.forEach(function (node) { + node.classList.add("is-visible"); + }); + return; + } + + if (!revealObserver) { + revealObserver = new IntersectionObserver(function (entries) { + entries.forEach(function (entry) { + if (!entry.isIntersecting) return; + entry.target.classList.add("is-visible"); + revealObserver.unobserve(entry.target); + }); + }, { rootMargin: "0px 0px -8% 0px", threshold: 0.12 }); + } + + nodes.forEach(function (node) { + revealObserver.observe(node); + }); + bindGeometryReveal(); + scheduleGeometryReveal(); + window.setTimeout(scheduleGeometryReveal, 360); + window.setTimeout(revealAllReady, 520); + } + + function syncNav(id) { + all(".site-nav a[href^='#']").forEach(function (link) { + var active = link.hash === "#" + id; + link.dataset.current = active ? "true" : "false"; + if (active) link.setAttribute("aria-current", "location"); + else if (link.getAttribute("aria-current") === "location") link.removeAttribute("aria-current"); + }); + } + + function bindNav() { + var links = all(".site-nav a[href^='#']"); + if (links.length === 0 || navObserver || !("IntersectionObserver" in window)) return; + var sections = links + .map(function (link) { + return document.getElementById(link.hash.slice(1)); + }) + .filter(function (section) { + return section instanceof HTMLElement; + }); + if (sections.length === 0) return; + + navObserver = new IntersectionObserver(function (entries) { + var visible = entries + .filter(function (entry) { return entry.isIntersecting; }) + .sort(function (left, right) { return right.intersectionRatio - left.intersectionRatio; })[0]; + if (visible && visible.target.id) syncNav(visible.target.id); + }, { rootMargin: "-22% 0px -55% 0px", threshold: [0.18, 0.35, 0.58] }); + + sections.forEach(function (section) { + navObserver.observe(section); + }); + if (window.location.hash) syncNav(window.location.hash.slice(1)); + } + + function bindDetails() { + all(".signal-card__evidence").forEach(function (details) { + if (!(details instanceof HTMLDetailsElement) || details.dataset.evidenceBound === "true") return; + details.dataset.evidenceBound = "true"; + details.addEventListener("toggle", function () { + var card = details.closest("[data-signal-card]"); + if (card instanceof HTMLElement) { + card.dataset.evidenceOpen = details.open ? "true" : "false"; + } + }); + }); + } + + function bindPressStates() { + all(pressSelector).forEach(function (target) { + if (!(target instanceof HTMLElement) || target.dataset.pressBound === "true") return; + target.dataset.pressBound = "true"; + var clear = function () { + target.dataset.pressed = "false"; + }; + target.addEventListener("pointerdown", function () { + target.dataset.pressed = "true"; + }); + target.addEventListener("pointerup", clear); + target.addEventListener("pointercancel", clear); + target.addEventListener("pointerleave", clear); + target.addEventListener("blur", clear); + target.addEventListener("keydown", function (event) { + if (event.key === "Enter" || event.key === " ") target.dataset.pressed = "true"; + }); + target.addEventListener("keyup", clear); + }); + } + + function bindHeroPointer() { + var hero = document.querySelector(".official-hero"); + if (!(hero instanceof HTMLElement) || hero.dataset.pointerBound === "true" || reduceMotion.matches) return; + hero.dataset.pointerBound = "true"; + var frame = 0; + var nextX = 0; + var nextY = 0; + function applyShift() { + hero.style.setProperty("--hero-shift-x", nextX.toFixed(2) + "px"); + hero.style.setProperty("--hero-shift-y", nextY.toFixed(2) + "px"); + frame = 0; + } + hero.addEventListener("pointermove", function (event) { + var rect = hero.getBoundingClientRect(); + if (rect.width === 0 || rect.height === 0) return; + nextX = ((event.clientX - rect.left) / rect.width - 0.5) * -12; + nextY = ((event.clientY - rect.top) / rect.height - 0.5) * -10; + if (!frame) frame = window.requestAnimationFrame(applyShift); + }); + hero.addEventListener("pointerleave", function () { + nextX = 0; + nextY = 0; + if (!frame) frame = window.requestAnimationFrame(applyShift); + }); + } + + function bindInteractions() { + bindReveals(); + bindNav(); + bindDetails(); + bindPressStates(); + bindHeroPointer(); + } + + document.addEventListener("astro:page-load", bindInteractions); + document.addEventListener("DOMContentLoaded", bindInteractions); + bindInteractions(); +})();`; --- -
        -
        -
        - +
        +
        + -
        -
        - + + +
        +
        +

        Decodex

        +

        + One control loop for projects, retained lanes, signed delivery, upstream radar, and public updates. +

        + +
        -
        -
          -
        • - Try paths - {tryPathCount} -
        • -
        • - Source links - {sourceLinkedCount}/{signals.length} -
        • -
        • - Archive - {archivedSignalCount} -
        • -
        +
        +
        +
        + +
        + { + releaseWindow ? ( +
        + + Upstream + · + {releaseWindow.commits} commits + + + + {releaseWindow.stable} {releaseWindow.preview} + + +
        + ) : null + } +
        + Rate limit reset + +
        +
        +
        + +
        +
        + {visibleSignals.length} + curated signals +
        +
        + {tryPathCount} + try paths
        +
        + {highImpactCount} + high impact +
        +
        + {formatPublishedAt(latestSignalAt ?? leadSignal.published_at)} + latest analysis +
        +
        +
        -

        - Signal layer for Codex. GitHub-first, release-aware, and optimized for what is worth trying next. +

        +
        +

        Automation map

        +

        + Four loops behind the product surface.

        - -
        - +
        +
        +
        + Decodex software + Operate work, track impact, and keep delivery policy explicit.
        +
          + {productLoops.map((item, index) => ( +
        1. + {String(index + 1).padStart(2, "0")} +
          +

          {item.title}

          +

          {item.body}

          +
          +
        2. + ))} +
        +
        +
        - +
        +
        +

        Decodex radar

        +

        + Prioritized changes with an action path or watch note attached. +

        +
        -
        - -
        +
        +
        +
        + {primarySourceLabel(leadSignal)} + {kindLabel(leadSignal.kind)} + {impactLabel(leadSignal.impact)} +
        +

        +

        +

        + {leadSignal.how_to_try ? "Try path" : "Watch note"} +

        +

        + Open evidence +

        +
        +
        +

        Next useful reads

        +
          + {prioritySignals.map((signal) => ( +
        1. + + {primarySourceLabel(signal)} + + +
        2. + ))} +
        +
        + +
        +

        Watch notes

        +
          + {(watchSignals.length > 0 ? watchSignals : prioritySignals).map((signal) => ( +
        • + {primarySourceLabel(signal)} +

          +

        • + ))} +
        +
        +
        -
        - - {releaseDelta ? ( - - ) : null} - -
        -
        -

        Latest signals

        -

        - {signals.length} community-ready signals from {allSignals.length} analyzed upstream changes. - {archivedSignalCount > 0 ? ` ${archivedSignalCount} low-level watch items stay out of the public feed.` : ""} +

        + +
        +
        +

        Publisher output

        +

        + Source-backed updates for the community channel.

        +
        +
        + Output path +

        + Commit evidence becomes short X posts, release rollups, and B-side follow-up notes. Bot channel: @decodexspace. +

        +
        +
        + Commit evidence + Human-grade analysis + X post + Release rollup +
        +
        +
        -
        +
        +
        +
        +

        Evidence feed

        +

        + Source-backed cards. Filter for try paths or high-impact shifts. +

        +
        -
        -
        - {!hasPublishedSignals ? : null} - {hasPublishedSignals ? : null} +
        + {!hasPublishedSignals ? : null} + {hasPublishedSignals ? : null} - {groupedSignals.map((group) => ( -
        - {showGroupLabels ? ( -
        - {group.label} + {groupedSignals.map((group) => ( +
        + {showGroupLabels ?

        {group.label}

        : null} +
        + {group.items.map((signal) => )}
        - ) : null} - -
        - {group.items.map((signal) => )} -
        -
        - ))} +
        + ))} +
        {hasPublishedSignals ? : null} +
        diff --git a/site/src/styles/global.css b/site/src/styles/global.css index 67d45bf0..d73a3e86 100644 --- a/site/src/styles/global.css +++ b/site/src/styles/global.css @@ -1,92 +1,179 @@ @import "tailwindcss"; :root, -:root[data-theme="light"] { - --bg: #f7f8fc; - --bg-soft: #eef1f7; - --bg-subtle: #e6e9f2; - --panel: #ffffff; - --ink: #1f2335; - --ink-soft: #3b4261; - --muted: #6b7394; - --muted-soft: #8c93b8; - --border: #d5d6db; - --border-strong: #c4c8da; - --accent: #2959aa; - --accent-soft: #e9eefb; - --link: #2e7de9; - --success: #587539; - --success-soft: #eff7e8; - --success-border: #c8dcb1; - --code-bg: #edf2fa; - --code-border: #c8d4f0; - --link-underline: #c4c8da; -} - -@media (prefers-color-scheme: dark) { - :root:not([data-theme]), - :root[data-theme="system"] { - --bg: #1a1b26; - --bg-soft: #1f2335; - --bg-subtle: #24283b; - --panel: #1f2335; - --ink: #c0caf5; - --ink-soft: #a9b1d6; - --muted: #7a849e; - --muted-soft: #565f89; - --border: #2f3549; - --border-strong: #414868; - --accent: #7aa2f7; - --accent-soft: #1b2440; - --link: #7aa2f7; - --success: #9ece6a; - --success-soft: #223128; - --success-border: #364a30; - --code-bg: #24283b; - --code-border: #414868; - --link-underline: #414868; - } -} - -:root[data-theme="dark"] { - color-scheme: dark; - --bg: #1a1b26; - --bg-soft: #1f2335; - --bg-subtle: #24283b; - --panel: #1f2335; - --ink: #c0caf5; - --ink-soft: #a9b1d6; - --muted: #7a849e; - --muted-soft: #565f89; - --border: #2f3549; - --border-strong: #414868; - --accent: #7aa2f7; - --accent-soft: #1b2440; - --link: #7aa2f7; - --success: #9ece6a; - --success-soft: #223128; - --success-border: #364a30; - --code-bg: #24283b; - --code-border: #414868; - --link-underline: #414868; -} - :root[data-theme="light"] { color-scheme: light; + --font-sans: "Inter", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --font-display: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --font-mono: "SFMono-Regular", "SF Mono", ui-monospace, Menlo, Monaco, Consolas, monospace; + --bg: #f3f5f7; + --panel: #ffffff; + --panel-soft: #edf1f6; + --ink: #111720; + --ink-soft: #3c4656; + --muted: #697486; + --muted-soft: #8b95a6; + --border: #d4dae3; + --border-strong: #b7c0cc; + --accent: #2563eb; + --accent-strong: #1748b5; + --accent-soft: #e7efff; + --signal: #b6f13a; + --signal-ink: #203300; + --success: #4f7b35; + --success-soft: #ecf6e7; + --success-border: #c8dfbc; + --code-bg: #e8edf4; + --code-border: #c9d2df; + --stage-bg: #f5f8ff; + --stage-ink: #07111e; + --stage-soft: #33445d; + --stage-muted: #6f7b8f; + --stage-border: rgba(12, 22, 38, 0.14); + --stage-control-bg: rgba(255, 255, 255, 0.58); + --stage-control-border: rgba(12, 22, 38, 0.14); + --stage-control-hover: rgba(12, 22, 38, 0.06); + --stage-action-hover-bg: rgba(12, 22, 38, 0.075); + --stage-action-hover-border: rgba(12, 22, 38, 0.22); + --stage-action-hover-ink: var(--stage-ink); + --stage-primary-action-hover-bg: var(--signal); + --stage-primary-action-hover-ink: var(--signal-ink); + --stage-glass-bg: rgba(255, 255, 255, 0.48); + --stage-glass-bg-hover: rgba(255, 255, 255, 0.64); + --stage-selected-bg: #0d1726; + --stage-selected-ink: #f7fbff; + --appcast-menu-bg: rgba(255, 255, 255, 0.98); + --appcast-menu-ink: var(--ink); + --appcast-menu-muted: var(--muted); + --appcast-menu-border: rgba(12, 22, 38, 0.14); + --appcast-menu-hover: rgba(37, 99, 235, 0.08); + --appcast-menu-accent: var(--accent-strong); + --appcast-menu-shadow: 0 22px 60px rgba(20, 32, 52, 0.16); + --hero-background: + radial-gradient(circle at 72% 36%, rgba(37, 99, 235, 0.22), transparent 24rem), + radial-gradient(circle at 82% 12%, rgba(182, 241, 58, 0.16), transparent 18rem), + linear-gradient(135deg, #f9fbff, #e8f0ff 58%, #f3fbf5); + --hero-veil: + linear-gradient(90deg, rgba(248, 251, 255, 0.88) 0%, rgba(248, 251, 255, 0.58) 42%, rgba(248, 251, 255, 0.06) 78%), + linear-gradient(180deg, rgba(248, 251, 255, 0.02), rgba(232, 240, 255, 0.24)); + --hero-grid-line: rgba(12, 22, 38, 0.065); + --hero-scene-filter: saturate(1.16) contrast(1.08) drop-shadow(0 0 22px rgba(37, 99, 235, 0.18)); + --hero-scene-opacity: 1; } @media (prefers-color-scheme: dark) { :root:not([data-theme]), :root[data-theme="system"] { color-scheme: dark; + --bg: #0d1117; + --panel: #141a22; + --panel-soft: #10161f; + --ink: #edf2ff; + --ink-soft: #bac4d5; + --muted: #8792a4; + --muted-soft: #687489; + --border: #27303d; + --border-strong: #394556; + --accent: #8ab4ff; + --accent-strong: #aecbff; + --accent-soft: #16243b; + --signal: #b6f13a; + --signal-ink: #162300; + --success: #a7d46f; + --success-soft: #1e2d20; + --success-border: #344c31; + --code-bg: #1e2632; + --code-border: #344154; + --stage-bg: #0c1118; + --stage-ink: #f5f7ff; + --stage-soft: #b9c2d4; + --stage-muted: #778397; + --stage-border: rgba(255, 255, 255, 0.14); + --stage-control-bg: rgba(15, 22, 32, 0.72); + --stage-control-border: rgba(255, 255, 255, 0.14); + --stage-control-hover: rgba(255, 255, 255, 0.08); + --stage-action-hover-bg: rgba(182, 241, 58, 0.1); + --stage-action-hover-border: rgba(182, 241, 58, 0.48); + --stage-action-hover-ink: var(--signal); + --stage-primary-action-hover-bg: var(--signal); + --stage-primary-action-hover-ink: var(--signal-ink); + --stage-glass-bg: rgba(10, 15, 23, 0.38); + --stage-glass-bg-hover: rgba(10, 15, 23, 0.54); + --stage-selected-bg: #f5f7ff; + --stage-selected-ink: #111720; + --appcast-menu-bg: rgba(11, 17, 26, 0.98); + --appcast-menu-ink: #f5f7ff; + --appcast-menu-muted: #778397; + --appcast-menu-border: rgba(255, 255, 255, 0.14); + --appcast-menu-hover: rgba(255, 255, 255, 0.08); + --appcast-menu-accent: var(--signal); + --appcast-menu-shadow: 0 22px 60px rgba(0, 0, 0, 0.38); + --hero-background: + radial-gradient(circle at 68% 38%, rgba(138, 180, 255, 0.2), transparent 24rem), + linear-gradient(135deg, #0a0f16, #111923 58%, #071018); + --hero-veil: + linear-gradient(90deg, rgba(10, 15, 22, 0.72) 0%, rgba(10, 15, 22, 0.42) 44%, rgba(10, 15, 22, 0.08) 78%), + linear-gradient(180deg, rgba(10, 15, 22, 0.02), rgba(10, 15, 22, 0.42)); + --hero-grid-line: rgba(255, 255, 255, 0.035); + --hero-scene-filter: saturate(1.12) contrast(1.08) drop-shadow(0 0 20px rgba(182, 241, 58, 0.12)); + --hero-scene-opacity: 1; } } -@media (prefers-color-scheme: light) { - :root:not([data-theme]), - :root[data-theme="system"] { - color-scheme: light; - } +:root[data-theme="dark"] { + color-scheme: dark; + --bg: #0d1117; + --panel: #141a22; + --panel-soft: #10161f; + --ink: #edf2ff; + --ink-soft: #bac4d5; + --muted: #8792a4; + --muted-soft: #687489; + --border: #27303d; + --border-strong: #394556; + --accent: #8ab4ff; + --accent-strong: #aecbff; + --accent-soft: #16243b; + --signal: #b6f13a; + --signal-ink: #162300; + --success: #a7d46f; + --success-soft: #1e2d20; + --success-border: #344c31; + --code-bg: #1e2632; + --code-border: #344154; + --stage-bg: #0c1118; + --stage-ink: #f5f7ff; + --stage-soft: #b9c2d4; + --stage-muted: #778397; + --stage-border: rgba(255, 255, 255, 0.14); + --stage-control-bg: rgba(15, 22, 32, 0.72); + --stage-control-border: rgba(255, 255, 255, 0.14); + --stage-control-hover: rgba(255, 255, 255, 0.08); + --stage-action-hover-bg: rgba(182, 241, 58, 0.1); + --stage-action-hover-border: rgba(182, 241, 58, 0.48); + --stage-action-hover-ink: var(--signal); + --stage-primary-action-hover-bg: var(--signal); + --stage-primary-action-hover-ink: var(--signal-ink); + --stage-glass-bg: rgba(10, 15, 23, 0.38); + --stage-glass-bg-hover: rgba(10, 15, 23, 0.54); + --stage-selected-bg: #f5f7ff; + --stage-selected-ink: #111720; + --appcast-menu-bg: rgba(11, 17, 26, 0.98); + --appcast-menu-ink: #f5f7ff; + --appcast-menu-muted: #778397; + --appcast-menu-border: rgba(255, 255, 255, 0.14); + --appcast-menu-hover: rgba(255, 255, 255, 0.08); + --appcast-menu-accent: var(--signal); + --appcast-menu-shadow: 0 22px 60px rgba(0, 0, 0, 0.38); + --hero-background: + radial-gradient(circle at 68% 38%, rgba(138, 180, 255, 0.2), transparent 24rem), + linear-gradient(135deg, #0a0f16, #111923 58%, #071018); + --hero-veil: + linear-gradient(90deg, rgba(10, 15, 22, 0.72) 0%, rgba(10, 15, 22, 0.42) 44%, rgba(10, 15, 22, 0.08) 78%), + linear-gradient(180deg, rgba(10, 15, 22, 0.02), rgba(10, 15, 22, 0.42)); + --hero-grid-line: rgba(255, 255, 255, 0.035); + --hero-scene-filter: saturate(1.12) contrast(1.08) drop-shadow(0 0 20px rgba(182, 241, 58, 0.12)); + --hero-scene-opacity: 1; } * { @@ -97,6 +184,7 @@ html { min-height: 100%; background: var(--bg); scroll-behavior: smooth; + scroll-padding-top: 1.25rem; } body { @@ -104,575 +192,631 @@ body { margin: 0; background: var(--bg); color: var(--ink); - font-family: - ui-sans-serif, - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - sans-serif; + font-family: var(--font-sans); + font-size: 16px; + line-height: 1.5; text-rendering: optimizeLegibility; - transition: - background-color 180ms ease, - color 180ms ease, - border-color 180ms ease; + -webkit-font-smoothing: antialiased; } h1, h2, h3, -h4, -h5, -h6 { - margin: 0; - font-weight: 800; - letter-spacing: -0.04em; -} - p, ul, -ol, -dl { +ol { margin: 0; } +h1, +h2, +h3 { + font-family: var(--font-display); + letter-spacing: 0; +} + a { color: inherit; text-decoration: none; } -code { - font-family: - ui-monospace, - "SFMono-Regular", - Menlo, - Monaco, - monospace; +a, +button, +summary { + transition: + background-color 180ms ease, + border-color 180ms ease, + box-shadow 180ms ease, + color 180ms ease, + opacity 180ms ease, + transform 180ms ease; } -.site-shell { - background: var(--bg); +:focus-visible { + outline: 2px solid color-mix(in srgb, var(--accent) 72%, transparent); + outline-offset: 0.2rem; } -.site-frame { - width: 100%; - max-width: 72rem; - min-height: 100vh; - margin: 0 auto; - padding: 1.25rem 1.1rem 5rem; +button, +input, +select, +textarea { + font: inherit; } -.site-topbar { - display: flex; - flex-direction: column; - gap: 0.95rem; - padding-bottom: 1.15rem; - border-bottom: 1px solid var(--border); +code { + padding: 0.08rem 0.28rem; + border: 1px solid var(--code-border); + border-radius: 0.28rem; + background: var(--code-bg); + color: var(--ink); + font-family: var(--font-mono); + font-size: 0.88em; } -.site-topbar__head { - display: grid; - gap: 0.54rem; +.official-site { + min-height: 100vh; + background: + linear-gradient(180deg, transparent 0, transparent 46rem, var(--bg) 46rem), + radial-gradient(circle at 85% 2%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 28rem), + var(--bg); } -.site-head__logo, -.site-head__utility, -.site-head__theme, -.site-head__cues, -.site-head__actions, -.site-head__status { - min-width: 0; +.official-hero { + position: relative; + --hero-shift-x: 0px; + --hero-shift-y: 0px; + display: grid; + grid-template-rows: auto minmax(0, 1fr) auto; + min-height: min(45rem, 100vh); + overflow: hidden; + background: var(--hero-background); + color: var(--stage-ink); } -.site-head__logo { - display: flex; - justify-content: flex-start; - align-items: flex-start; +.official-hero::before { + content: ""; + position: absolute; + inset: 0; + z-index: 0; + background: var(--hero-veil); + pointer-events: none; } -.site-head__utility { - display: grid; - justify-items: end; - align-content: start; - gap: 0.45rem; +.official-hero::after { + content: ""; + position: absolute; + inset: 0; + z-index: 1; + background: + linear-gradient(var(--hero-grid-line) 1px, transparent 1px), + linear-gradient(90deg, var(--hero-grid-line) 1px, transparent 1px); + background-size: 2.4rem 2.4rem; + mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.68), transparent 78%); + pointer-events: none; + transform: translate3d(var(--hero-shift-x), var(--hero-shift-y), 0); + transition: transform 220ms ease-out; } -.site-head__theme { - display: flex; - justify-content: flex-end; - align-items: flex-start; +.symphony-scene { + position: absolute; + inset: 0; + z-index: 1; + filter: var(--hero-scene-filter); + opacity: var(--hero-scene-opacity); } -.site-head__cues { - display: flex; - justify-content: flex-end; - align-items: center; +.symphony-scene canvas { + display: block; + width: 100%; + height: 100%; } -.site-head__actions { - display: flex; - justify-content: flex-end; +.site-header { + position: relative; + z-index: 2; + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + gap: 1rem; align-items: center; - align-self: stretch; + width: min(100%, 82rem); + margin: 0 auto; + padding: 1.1rem 1.15rem; } -.site-head__status { - display: flex; - justify-content: flex-end; +.site-logo { + display: inline-flex; + width: fit-content; align-items: center; } -.site-chrome { - display: flex; - justify-content: flex-start; - flex-shrink: 0; +.site-logo__image { + display: block; + width: auto; + height: 2.35rem; + transition: + filter 180ms ease, + transform 180ms ease; } -.site-brand { - display: grid; - align-content: start; - gap: 0.95rem; - min-width: 0; +.site-logo:hover .site-logo__image, +.site-logo:focus-visible .site-logo__image { + filter: drop-shadow(0 0 14px rgba(182, 241, 58, 0.2)); + transform: translateY(-0.05rem); } -.site-brand__bar { - display: flex; - align-items: flex-start; - justify-content: flex-start; +.site-nav { + display: none; + align-items: center; + justify-content: center; + gap: 1rem; + min-width: 0; } -.site-brand__wordmark { - display: inline-flex; - width: fit-content; - align-items: center; +.site-nav a { + position: relative; + color: var(--stage-soft); + font-size: 0.84rem; + font-weight: 740; + line-height: 1; + padding-block: 0.46rem; } -.site-brand__wordmark-image { - display: block; - width: auto; - height: 3rem; +.site-nav a::after { + content: ""; + position: absolute; + right: 0; + bottom: 0.2rem; + left: 0; + height: 1px; + background: var(--signal); + opacity: 0; + transform: scaleX(0); + transform-origin: right; + transition: + opacity 180ms ease, + transform 180ms ease; } -.site-brand__note { - max-width: 35rem; - font-size: 0.94rem; - line-height: 1.5; - color: var(--ink-soft); +.site-nav a:hover, +.site-nav a:focus-visible, +.site-nav a[data-current="true"] { + color: var(--stage-ink); } -.site-brand__meta { - display: grid; - gap: 0.58rem; +.site-nav a:hover::after, +.site-nav a:focus-visible::after, +.site-nav a[data-current="true"]::after { + opacity: 1; + transform: scaleX(1); + transform-origin: left; } -.site-brand__signals { - display: flex; - flex-wrap: wrap; +.theme-toggle { + display: inline-flex; align-items: center; - gap: 0.7rem 1rem; + gap: 0.18rem; + width: fit-content; + padding: 0.18rem; + border: 1px solid var(--stage-control-border); + border-radius: 0.42rem; + background: var(--stage-control-bg); + backdrop-filter: blur(16px); + transition: + border-color 180ms ease, + background-color 180ms ease, + box-shadow 180ms ease; } -.site-brand__cues { - display: flex; - flex-wrap: wrap; - gap: 0.42rem; - padding: 0; - margin: 0; - list-style: none; +.theme-toggle__button { + min-height: 1.8rem; + padding: 0.35rem 0.7rem; + border: 0; + border-radius: 0.28rem; + background: transparent; + color: var(--stage-muted); + cursor: pointer; + font-size: 0.72rem; + font-weight: 760; + line-height: 1; } -.site-brand__cue { - display: inline-flex; - align-items: center; - gap: 0.4rem; - padding: 0.34rem 0.66rem; - border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border)); - border-radius: 999px; - background: color-mix(in srgb, var(--accent-soft) 78%, var(--panel)); - color: var(--muted); - font-family: - ui-monospace, - "SFMono-Regular", - Menlo, - Monaco, - monospace; - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.06em; - line-height: 1.1; - min-height: 1.5rem; +.theme-toggle__button:hover { + background: var(--stage-control-hover); + color: var(--stage-ink); } -.site-brand__cue-label { - color: var(--muted-soft); - text-transform: uppercase; +.theme-toggle__button[aria-pressed="true"] { + background: var(--stage-selected-bg); + box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08); + color: var(--stage-selected-ink); } -.site-brand__cue-value { - color: var(--accent); - font-size: 0.68rem; - font-weight: 800; - letter-spacing: 0.02em; - text-transform: none; +.hero-grid { + position: relative; + z-index: 2; + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 1.4rem; + align-items: center; + width: min(100%, 82rem); + margin: 0 auto; + padding: 2.2rem 1.15rem 1.8rem; } -.site-brand__status { - display: flex; - align-items: center; - justify-content: flex-start; - min-width: 0; - padding: 0.1rem 0 0; +.hero-grid:has(.appcast-download:hover), +.hero-grid:has(.appcast-download:focus-within), +.hero-grid:has(.appcast-download[data-appcast-open="true"]) { + z-index: 30; } -.site-brand__social { +.hero-copy { display: grid; + gap: 1.05rem; align-content: center; - align-self: stretch; - gap: 0.16rem; - width: fit-content; - height: 100%; - color: var(--ink-soft); - transition: color 160ms ease; + min-width: 0; } -.site-brand__social:hover { - color: var(--ink); +.hero-copy h1 { + color: var(--stage-ink); + font-size: clamp(4.25rem, 13vw, 9.5rem); + font-weight: 850; + line-height: 0.82; } -.site-brand__social-handle { - font-size: 0.92rem; - font-weight: 700; - letter-spacing: -0.02em; - color: var(--accent); +.hero-copy p { + max-width: 47rem; + color: var(--stage-soft); + font-size: clamp(1rem, 1.55vw, 1.24rem); + line-height: 1.62; } -.site-brand__social-copy { - max-width: 18rem; - font-size: 0.73rem; - line-height: 1.35; - color: var(--muted); +.hero-actions { + display: flex; + flex-wrap: wrap; + gap: 0.55rem; } -.site-sidecard { - display: grid; - align-content: start; - justify-items: end; - gap: 0.95rem; - min-width: 0; - text-align: right; +.hero-actions a, +.lead-brief__link { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 2.18rem; + padding: 0.52rem 0.72rem; + border: 1px solid var(--stage-control-border); + border-radius: 0.28rem; + color: var(--stage-ink); + font-size: 0.84rem; + font-weight: 780; + line-height: 1; + backdrop-filter: none; + will-change: transform; } -.site-sidecard__chrome { - display: flex; - justify-content: flex-end; - width: 100%; +.hero-actions a:first-child { + border-color: color-mix(in srgb, var(--signal) 84%, transparent); + background: color-mix(in srgb, var(--signal) 12%, transparent); + color: var(--stage-ink); } -.site-sidecard__status { - display: flex; - justify-content: flex-end; - align-items: center; - min-width: 0; - width: 100%; +.hero-actions a:hover, +.hero-actions a:focus-visible { + border-color: var(--stage-action-hover-border); + background: var(--stage-action-hover-bg); + color: var(--stage-action-hover-ink); + transform: translateY(-0.08rem); } -.feed-toolbar__label, -.feed-group__label span, -.signal-entry-date, -.signal-entry__taxonomy-item, -.signal-entry-label, -.signal-entry-details__summary, -.release-delta__eyebrow, -.release-delta__panel-label, -.release-highlight__meta, -.release-highlight__try-label, -.signal-source-timeline__kind, -.signal-source-timeline__meta { - font-family: - ui-monospace, - "SFMono-Regular", - Menlo, - Monaco, - monospace; +.hero-actions a:first-child:hover, +.hero-actions a:first-child:focus-visible { + border-color: var(--stage-primary-action-hover-bg); + background: var(--stage-primary-action-hover-bg); + color: var(--stage-primary-action-hover-ink); } -.theme-toggle { - display: inline-flex; - align-items: center; - gap: 0.15rem; - width: fit-content; - padding: 0.08rem; - border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border)); - border-radius: 999px; - background: color-mix(in srgb, var(--accent-soft) 78%, var(--panel)); - min-height: 1.5rem; +.hero-actions a[data-pressed="true"], +.lead-brief__link[data-pressed="true"] { + transform: translateY(0) scale(0.985); } -.theme-toggle__button { - border: 0; - border-radius: 999px; - background: transparent; +.hero-bottom span, +.system-loop span, +.publisher-note span, +.publisher-flow span, +.lead-brief__meta span, +.signal-card__taxonomy span, +.signal-card__readout h3, +.signal-card__effect > span:first-child, +.signal-card__flags > span, +.signal-card__caveats h3, +.signal-card__watch > span:first-child { color: var(--muted); - padding: 0.3rem 0.66rem; - font: inherit; - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.06em; - line-height: 1.1; - font-family: - ui-monospace, - "SFMono-Regular", - Menlo, - Monaco, - monospace; + font-size: 0.72rem; + font-weight: 780; + line-height: 1.2; text-transform: uppercase; - cursor: pointer; +} + +.official-hero .hero-bottom span { + color: var(--stage-muted); +} + +.hero-bottom { + position: relative; + z-index: 2; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + width: min(100%, 82rem); + margin: 0 auto; + padding: 0 1.15rem 1.2rem; +} + +.hero-bottom div { + display: grid; + gap: 0.25rem; + min-width: 0; + padding: 0.78rem 0.65rem; + background: var(--stage-glass-bg); + backdrop-filter: blur(16px); transition: background-color 180ms ease, - color 180ms ease; + transform 180ms ease; } -.theme-toggle__button:hover { - color: var(--ink); +.hero-bottom div:hover { + background: var(--stage-glass-bg-hover); + transform: translateY(-0.08rem); } -.theme-toggle__button[aria-pressed="true"] { - background: var(--accent-soft); - color: var(--accent); +.hero-bottom strong { + color: var(--stage-ink); + font-size: 1.08rem; + font-weight: 820; + line-height: 1; } .appcast-download { position: relative; - display: flex; - align-items: center; - height: 100%; + display: block; + width: 100%; min-width: 0; } .appcast-download__surface { position: relative; - display: flex; - align-items: center; - height: 100%; + display: grid; + gap: 0; + width: 100%; + min-width: 0; } .appcast-download__primary { - display: inline-flex; - align-items: center; - justify-content: center; + display: flex; + align-items: baseline; + justify-content: space-between; + width: 100%; min-width: 0; padding: 0; border: 0; - border-radius: 0; - background: none; - color: var(--ink); - transition: - color 180ms ease, - opacity 180ms ease; + background: transparent; + color: inherit; + text-align: left; + will-change: transform; } -.appcast-download__body { - display: inline-flex; - flex-direction: column; - align-items: flex-end; - justify-content: center; - gap: 0.1rem; -} - -.appcast-download__eyebrow, -.appcast-download__version-meta { - font-family: - ui-monospace, - "SFMono-Regular", - Menlo, - Monaco, - monospace; +.appcast-download__primary:focus-visible { + border-radius: 0.38rem; + outline: 1.5px solid color-mix(in srgb, var(--signal) 75%, transparent); + outline-offset: 0.18rem; } -.appcast-download__kicker { - display: inline-flex; - align-items: baseline; - justify-content: flex-end; +.appcast-download__body { + display: grid; + gap: 0.16rem; + min-width: 0; } -.appcast-download__eyebrow { - font-size: 0.58rem; - font-weight: 700; - letter-spacing: 0.08em; - line-height: 1; - text-transform: uppercase; - color: var(--accent); +.appcast-download__title-row { + display: flex; + min-width: 0; } .appcast-download__title { - font-size: 0.86rem; - font-weight: 800; - letter-spacing: -0.03em; - line-height: 1; - color: var(--ink); -} - -.appcast-download__title-row { - display: inline-flex; - align-items: center; - justify-content: flex-end; - gap: 0; + color: var(--stage-ink); + font-size: 0.88rem; + font-weight: 780; + line-height: 1.15; } .appcast-download__meta { - font-size: 0.62rem; - line-height: 1.05; - text-align: right; - color: var(--muted); -} - -.appcast-download__surface[data-appcast-disabled="true"] .appcast-download__primary { - opacity: 0.72; -} - -.appcast-download__primary:hover, -.appcast-download[data-appcast-open="true"] .appcast-download__primary, -.appcast-download__primary:focus-visible { - color: var(--accent); - opacity: 1; + color: var(--stage-soft); + font-size: 0.74rem; + line-height: 1.25; } .appcast-download__primary:hover .appcast-download__title, .appcast-download[data-appcast-open="true"] .appcast-download__title, +.appcast-download:hover .appcast-download__title, +.appcast-download:focus-within .appcast-download__title, .appcast-download__primary:focus-visible .appcast-download__title { - color: var(--accent); + color: var(--stage-action-hover-ink); +} + +.appcast-download__primary[data-pressed="true"] { + transform: translateY(0.04rem); } .appcast-download__panel { position: absolute; - top: calc(100% + 0.55rem); right: 0; - z-index: 12; + top: calc(100% + 0.54rem); + bottom: auto; + z-index: 120; display: grid; - gap: 0.3rem; - width: max-content; - max-width: calc(100vw - 1.5rem); - min-width: 0; - padding: 0.55rem; - border: 1px solid var(--border); - border-radius: 1rem; - background: color-mix(in srgb, var(--panel) 94%, var(--bg-soft)); - box-shadow: 0 20px 45px color-mix(in srgb, var(--ink) 12%, transparent); + gap: 0.42rem; + width: min(13.6rem, calc(100vw - 2rem)); + min-width: min(13rem, calc(100vw - 2rem)); + max-height: none; + padding: 0.62rem; + border: 1px solid var(--appcast-menu-border); + border-radius: 0.65rem; + background: var(--appcast-menu-bg); + box-shadow: var(--appcast-menu-shadow); + color: var(--appcast-menu-ink); + text-align: left; + clip-path: inset(0 0 7% 0 round 0.65rem); + filter: blur(2px) saturate(0.92); opacity: 0; + overflow: visible; pointer-events: none; - transform: translateY(-0.18rem); + transform: translateY(-0.22rem) scale(0.985); + transform-origin: top right; transition: + clip-path 220ms cubic-bezier(0.2, 0.8, 0.2, 1), + filter 220ms ease, opacity 160ms ease, - transform 160ms ease; + transform 220ms cubic-bezier(0.2, 0.8, 0.2, 1); } .appcast-download[data-appcast-open="true"] .appcast-download__panel { + clip-path: inset(0 0 0 0 round 0.65rem); + filter: blur(0) saturate(1); opacity: 1; pointer-events: auto; - transform: translateY(0); + transform: translateY(0) scale(1); +} + +.appcast-download:hover .appcast-download__panel, +.appcast-download:focus-within .appcast-download__panel { + clip-path: inset(0 0 0 0 round 0.65rem); + filter: blur(0) saturate(1); + opacity: 1; + pointer-events: auto; + transform: translateY(0) scale(1); } .appcast-download__panel-label { - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.08em; - line-height: 1.1; + color: var(--appcast-menu-muted); + font-size: 0.72rem; + font-weight: 780; + line-height: 1.2; text-transform: uppercase; - color: var(--muted-soft); - margin-bottom: 0.1rem; } .appcast-download__list { display: grid; gap: 0.12rem; + max-height: 10.4rem; margin: 0; - padding: 0; + padding: 0 0.18rem 0 0; + overflow-y: auto; list-style: none; + scrollbar-width: thin; } -.appcast-download__version { - display: grid; - gap: 0.02rem; - padding: 0.36rem 0.42rem; - border-radius: 0.8rem; - border: 1px solid transparent; +.appcast-download__list::-webkit-scrollbar { + width: 0.36rem; +} + +.appcast-download__list::-webkit-scrollbar-track { background: transparent; - transition: - border-color 160ms ease, - background-color 160ms ease, - transform 160ms ease; +} + +.appcast-download__list::-webkit-scrollbar-thumb { + border-radius: 999px; + background: color-mix(in srgb, var(--appcast-menu-muted) 36%, transparent); +} + +.appcast-download__version { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 0.8rem; + min-width: 0; + min-height: 2rem; + padding: 0.32rem 0.4rem; + border-radius: 0.45rem; + line-height: 1.2; + will-change: transform; } .appcast-download__version:hover, .appcast-download__version:focus-visible { - border-color: color-mix(in srgb, var(--accent) 18%, var(--border)); - background: color-mix(in srgb, var(--accent-soft) 82%, var(--panel)); - transform: translateX(0.08rem); + background: var(--appcast-menu-hover); + color: var(--appcast-menu-accent); + transform: translateX(-0.1rem); } -.appcast-download__version-title { - font-size: 0.82rem; - font-weight: 800; - letter-spacing: -0.02em; - line-height: 1.1; - color: var(--ink); +.appcast-download__version[data-pressed="true"] { + transform: translateX(-0.04rem) scale(0.99); } -.appcast-download__version-meta { - font-size: 0.61rem; - line-height: 1.3; - color: var(--muted); +.appcast-download__version-title { + font-size: 0.9rem; + font-weight: 780; + white-space: nowrap; } +.appcast-download__version-meta, .appcast-download__empty { - padding: 0.1rem 0.05rem; - font-size: 0.72rem; - line-height: 1.4; - color: var(--muted); + color: var(--appcast-menu-muted); + font-size: 0.78rem; } .reset-inline { display: inline-flex; + flex-wrap: wrap; align-items: center; - justify-content: flex-start; - gap: 0.9rem; - width: fit-content; + gap: 0.45rem 0.7rem; max-width: 100%; - min-width: 0; - font-size: 0.94rem; - line-height: 1.45; - color: var(--muted); + color: var(--stage-soft); + font-size: 0.92rem; + line-height: 1.25; + transition: + color 180ms ease, + transform 180ms ease; +} + +.reset-inline:hover, +.reset-inline:focus-visible { + transform: translateY(-0.04rem); } .reset-inline__question { - min-width: 0; - color: var(--ink); - font-size: 0.86rem; - font-weight: 800; - letter-spacing: -0.03em; - line-height: 1.1; + color: var(--stage-ink); + font-weight: 760; +} + +.reset-inline:hover .reset-inline__question, +.reset-inline:focus-visible .reset-inline__question { + color: var(--accent-strong); } .reset-inline__answer { display: inline-flex; align-items: center; - gap: 0.34rem; - flex-shrink: 0; - padding: 0; - border: 0; - background: none; - font-size: 0.86rem; - font-weight: 800; - letter-spacing: -0.03em; - color: var(--ink); - white-space: nowrap; + gap: 0.35rem; + color: var(--stage-soft); + font-weight: 760; } .reset-inline__dot { - width: 0.54rem; - height: 0.54rem; - border-radius: 999px; - background: var(--muted-soft); - box-shadow: 0 0 0 0.18rem color-mix(in srgb, var(--muted-soft) 18%, transparent); + width: 0.48rem; + height: 0.48rem; + border-radius: 50%; + background: var(--stage-muted); + box-shadow: 0 0 0 0.18rem rgba(119, 131, 151, 0.18); + transition: + background-color 180ms ease, + box-shadow 180ms ease, + transform 180ms ease; +} + +.reset-inline:hover .reset-inline__dot, +.reset-inline:focus-visible .reset-inline__dot { + transform: scale(1.12); } .reset-inline--positive .reset-inline__answer { @@ -685,909 +829,750 @@ code { } .reset-inline--neutral .reset-inline__answer { - color: var(--accent); + color: var(--stage-soft); } .reset-inline--neutral .reset-inline__dot { - background: var(--accent); - box-shadow: 0 0 0 0.18rem color-mix(in srgb, var(--accent) 20%, transparent); -} - -.reset-inline--muted .reset-inline__answer { - color: var(--ink-soft); + background: var(--stage-muted); + box-shadow: 0 0 0 0.18rem rgba(119, 131, 151, 0.18); } -.reset-stack { - display: flex; - align-items: center; - gap: 0.65rem; - width: fit-content; - max-width: 100%; - min-width: 0; - padding: 0.35rem 0; - justify-self: end; - margin-left: auto; - color: var(--ink); +.utility-strip { + position: relative; + z-index: 20; + width: 100%; + margin: 0; + padding: 0; + overflow: visible; } -.reset-stack__question { - font-size: 1.28rem; - font-weight: 800; - letter-spacing: -0.045em; - line-height: 1.02; - color: var(--ink); +.utility-row__label, +.appcast-download__kicker { + color: var(--stage-muted); + font-size: 0.66rem; + font-weight: 780; + line-height: 1.2; + text-transform: uppercase; } -.reset-stack__answer { +.utility-row__label { display: inline-flex; - align-items: center; - gap: 0.4rem; - width: fit-content; - padding: 0.3rem 0.62rem; - border: 1px solid var(--border); - border-radius: 999px; - background: var(--bg-soft); - font-size: 0.82rem; - font-weight: 800; - letter-spacing: -0.01em; - color: var(--ink); + align-items: baseline; + justify-content: flex-end; + max-width: 100%; white-space: nowrap; } -.reset-stack__dot { - width: 0.46rem; - height: 0.46rem; - border-radius: 999px; - background: var(--muted-soft); - box-shadow: 0 0 0 0.16rem color-mix(in srgb, var(--muted-soft) 18%, transparent); -} - -.reset-stack--positive .reset-stack__answer { - border-color: var(--success-border); - background: var(--success-soft); - color: var(--success); -} - -.reset-stack--positive .reset-stack__dot { - background: var(--success); - box-shadow: 0 0 0 0.16rem color-mix(in srgb, var(--success) 18%, transparent); -} - -.reset-stack--neutral .reset-stack__answer { - border-color: color-mix(in srgb, var(--accent) 28%, var(--border)); - background: color-mix(in srgb, var(--accent-soft) 86%, var(--panel)); - color: var(--accent); +.utility-row__label-meta { + color: var(--stage-soft); + font-weight: 700; + text-transform: none; } -.signal-source-timeline { +.utility-strip__items { display: grid; - gap: 0.65rem; - margin: 1rem 0 0; - padding: 0; - list-style: none; + grid-template-columns: repeat(auto-fit, minmax(9.4rem, 1fr)); + justify-items: stretch; + gap: 0.18rem; + min-width: 0; } -.signal-source-timeline__item { - display: grid; - grid-template-columns: auto minmax(0, 1fr) auto; - align-items: start; - column-gap: 0.75rem; - row-gap: 0.15rem; - padding-left: 1rem; +.utility-row { position: relative; + z-index: 1; + display: grid; + grid-template-columns: minmax(0, 1fr); + justify-items: end; + gap: 0.18rem; + align-content: center; + justify-self: end; + min-width: 0; + width: 100%; + height: 2.55rem; + padding: 0.24rem 0; + border-radius: 0.34rem; + background: transparent; + backdrop-filter: none; + text-align: right; + transition: + background-color 180ms ease, + transform 180ms ease; } -.signal-source-timeline__item::before { - content: ""; - position: absolute; - left: 0.15rem; - top: 0.25rem; - width: 0.4rem; - height: 0.4rem; - border-radius: 999px; - background: var(--accent); - box-shadow: 0 0 0 0.18rem color-mix(in srgb, var(--accent) 16%, transparent); -} - -.signal-source-timeline__item::after { - content: ""; - position: absolute; - left: 0.34rem; - top: 0.9rem; - bottom: -0.8rem; - width: 1px; - background: var(--border); -} - -.signal-source-timeline__item:last-child::after { - display: none; -} - -.signal-source-timeline__kind { - font-size: 0.68rem; - line-height: 1.4; - text-transform: uppercase; - letter-spacing: 0.04em; - color: var(--muted); +.utility-row--download { + z-index: 3; } -.signal-source-timeline__title { +.utility-row--reset { min-width: 0; - font-size: 0.9rem; - line-height: 1.45; - color: var(--ink-soft); } -.signal-source-timeline__title:hover { - color: var(--ink); +.utility-row--download:hover, +.utility-row--download:focus-within, +.utility-row--download:has(.appcast-download[data-appcast-open="true"]) { + z-index: 80; } -.signal-source-timeline__meta { - font-size: 0.7rem; - line-height: 1.45; - color: var(--muted-soft); - white-space: nowrap; +.utility-row::before { + content: ""; + position: absolute; + right: 0; + bottom: 0.1rem; + width: min(100%, 13rem); + height: 1px; + background: color-mix(in srgb, var(--stage-muted) 24%, transparent); + opacity: 0; + pointer-events: none; + transform: scaleX(0.72); + transform-origin: right; + transition: + opacity 180ms ease, + transform 180ms ease; } -.reset-stack--neutral .reset-stack__dot { - background: var(--accent); - box-shadow: 0 0 0 0.16rem color-mix(in srgb, var(--accent) 20%, transparent); +.utility-row > * { + position: relative; } -.reset-stack--muted .reset-stack__answer { - color: var(--ink-soft); +.utility-row:hover::before, +.utility-row:focus-within::before { + opacity: 1; + transform: scaleX(1); } -.release-delta { - display: grid; - gap: 1.3rem; - margin-top: 1.15rem; - padding: 1.25rem 1.15rem 1.15rem; - border: 1px solid var(--border); - border-radius: 1rem; - background: var(--panel); +.utility-row:first-child { + padding-top: 0.24rem; } -.release-delta__hero { - display: grid; - gap: 0.45rem; - padding: 0; +.utility-row:last-child { + padding-bottom: 0.24rem; } -.release-delta__hero-head { - display: grid; - gap: 0; +.utility-row .appcast-download__primary { + justify-content: flex-end; + text-align: right; } -.release-delta__hero-copy { +.utility-row .appcast-download__body { display: grid; - gap: 0; -} - -.release-delta__eyebrow { - color: var(--muted-soft); - font-size: 0.7rem; - font-weight: 700; - letter-spacing: 0.12em; - line-height: 1.2; - text-transform: uppercase; -} - -.release-delta__chooser { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 0.45rem; - color: var(--muted); - font-size: 0.88rem; - line-height: 1.5; + justify-items: end; + gap: 0.18rem; + max-width: 100%; + white-space: nowrap; } -.release-delta__inline-select { +.appcast-download__meta-row { display: inline-flex; - align-items: center; + align-items: baseline; + justify-content: flex-end; + max-width: 100%; + white-space: nowrap; } -.release-delta__select { - appearance: none; - min-width: 0; - border: 0; - border-bottom: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border)); - padding: 0 1rem 0.08rem 0; - background: transparent; - color: var(--ink); - font: inherit; - line-height: 1.25; +.appcast-download__meta-row .appcast-download__meta::before { + margin-inline: 0.35rem; + color: var(--stage-muted); + content: "·"; } -.release-delta__select--inline { - font-size: 1rem; - font-weight: 700; - letter-spacing: -0.02em; - padding-right: 0.15rem; +.utility-row .appcast-download__title, +.utility-row .reset-inline__question, +.utility-row .reset-inline__answer, +.utility-row--window strong { + color: var(--stage-ink); + font-size: 0.92rem; + line-height: 1.18; } -.release-delta__comparison { - display: grid; - gap: 1.15rem; +.appcast-download__meta, +.utility-row small { + color: var(--stage-soft); + font-size: 0.82rem; + line-height: 1.18; + white-space: nowrap; } -.release-delta__content-grid { - display: grid; - gap: 0.85rem; +.utility-row--reset .reset-inline { + justify-content: flex-end; } -.release-delta__config { - display: grid; - gap: 0.45rem; - padding-bottom: 0.1rem; - border-bottom: 1px solid var(--border); +.utility-row--reset .reset-inline__question { + display: none; } -.release-delta__config-head { - display: grid; - gap: 0.2rem; +.utility-row--reset .reset-inline__answer { + font-size: 0.92rem; + font-weight: 820; } -.release-delta__config-badges { +.utility-row--window a { display: flex; - flex-wrap: wrap; - gap: 0.45rem; + align-items: baseline; + justify-content: flex-end; + text-align: right; + white-space: nowrap; + will-change: transform; } -.release-delta__config-badge { - display: inline-flex; - align-items: center; - border-radius: 999px; - border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--border)); - background: color-mix(in srgb, var(--accent) 5%, var(--panel)); - padding: 0.18rem 0.52rem; - color: var(--muted); - font-size: 0.7rem; - font-weight: 700; - letter-spacing: 0.04em; +.utility-row--window strong { + white-space: nowrap; } -.release-delta__config-warning { - margin: 0; - max-width: none; - color: var(--ink-soft); - font-size: 0.88rem; - line-height: 1.5; +.utility-row--window a:hover, +.utility-row--window a:focus-visible { + transform: translateY(-0.04rem); } -.release-delta__config-warning code { - border: 1px solid var(--code-border); - border-radius: 0.5rem; - background: var(--code-bg); - padding: 0.12rem 0.38rem; - color: var(--accent); - font-size: 0.92em; +.utility-row--window a:hover strong, +.utility-row--window a:focus-visible strong { + color: var(--accent-strong); } -.release-delta__config-sources { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 0.2rem; - margin: 0; - color: var(--muted); - font-size: 0.84rem; - line-height: 1.22; +.release-arrow { + display: inline-block; + color: var(--stage-muted); + font-weight: 760; + transform: translateY(-0.02em); } -.release-delta__config-toolbar { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - align-items: center; - column-gap: 1.25rem; - row-gap: 0.5rem; - margin-top: 0.36rem; - padding: 0 0 0; +.utility-separator { + margin-inline: 0.24rem; + color: var(--stage-muted); + font-weight: 760; } -.release-delta__config-summary { - max-width: 42rem; - color: var(--ink-soft); - font-size: 0.96rem; - line-height: 1.64; +.utility-inline-meta { + color: var(--stage-soft); + font-size: 0.88em; + font-weight: 680; } -.release-delta__config-actions { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 0.85rem; - justify-self: end; +.utility-row--window small { + flex: 0 0 auto; + font-size: 0.78rem; + line-height: 1.18; } -.release-delta__copy-button { - display: inline-flex; - align-items: center; - justify-content: flex-end; - min-width: 0; - border: 0; - border-radius: 0; - background: transparent; - padding: 0; - color: var(--muted); - font-size: 0.78rem; - font-weight: 600; - letter-spacing: 0.04em; - line-height: 1.22; - text-align: right; - text-transform: uppercase; - cursor: pointer; - transition: - color 140ms ease; +.site-section { + width: min(100%, 82rem); + margin: 0 auto; + padding: 3.25rem 1.15rem 0; + scroll-margin-top: 1.25rem; } -.release-delta__config-toggle:hover, -.release-delta__copy-button:hover { - color: var(--link); +.section-heading { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 0.65rem; + margin-bottom: 1.05rem; } -.release-delta__config-divider-toggle { - display: flex; - align-items: center; - width: 100%; - gap: 0; - border: 0; - background: transparent; - margin: -0.38rem 0 -0.34rem; - padding: 0.46rem 0 0.36rem; - color: var(--muted-soft); - cursor: pointer; - transition: color 140ms ease; +.section-heading h2 { + color: var(--ink); + font-size: clamp(2rem, 3.6vw, 3.6rem); + font-weight: 830; + line-height: 0.98; } -.release-delta__config-divider-toggle:hover { +.section-heading p { + max-width: 42rem; color: var(--ink-soft); + font-size: 1rem; + line-height: 1.58; } -.release-delta__config-divider-rule { +.system-panel { position: relative; - flex: 1 1 auto; - height: 1px; - background: color-mix(in srgb, var(--border) 84%, transparent); - overflow: hidden; - transition: - height 180ms ease, - background 180ms ease, - box-shadow 180ms ease; + display: grid; + gap: 0.9rem; + padding: 1rem 0 1rem 0.95rem; + border-block: 1px solid color-mix(in srgb, var(--border) 58%, transparent); } -.release-delta__config-divider-rule::after { - content: ""; +.system-panel::before, +.radar-layout::before, +.publisher-board::before { position: absolute; - inset: 0; - background: linear-gradient( - 90deg, - transparent 0%, - transparent 28%, - color-mix(in srgb, var(--accent) 18%, transparent) 42%, - color-mix(in srgb, var(--accent) 52%, transparent) 50%, - color-mix(in srgb, var(--accent) 18%, transparent) 58%, - transparent 72%, - transparent 100% - ); - background-size: 220% 100%; - background-repeat: no-repeat; - background-position: 200% 0; - opacity: 0.82; - animation: release-delta-divider-shimmer 2.8s linear infinite; -} - -.release-delta__config-divider-toggle:hover .release-delta__config-divider-rule, -.release-delta__config-divider-toggle:focus-visible .release-delta__config-divider-rule { - height: 2px; - background: color-mix(in srgb, var(--accent) 26%, var(--border)); - box-shadow: 0 0 0.55rem color-mix(in srgb, var(--accent) 18%, transparent); -} - -.release-delta__config-divider-toggle:hover .release-delta__config-divider-rule::after, -.release-delta__config-divider-toggle:focus-visible .release-delta__config-divider-rule::after, -.release-delta__config-divider-toggle[aria-expanded="false"] .release-delta__config-divider-rule::after { - opacity: 1; - animation-duration: 1.5s; -} - -:root[data-theme="light"] { - .release-delta__config-divider-rule { - background: color-mix(in srgb, var(--accent) 56%, var(--border)); - } - - .release-delta__config-divider-rule::after { - background-image: linear-gradient( - 90deg, - transparent 0%, - transparent 24%, - color-mix(in srgb, var(--link) 72%, transparent) 38%, - color-mix(in srgb, var(--link) 100%, transparent) 46%, - color-mix(in srgb, #ffffff 78%, var(--link)) 50%, - color-mix(in srgb, var(--link) 100%, transparent) 54%, - color-mix(in srgb, var(--link) 72%, transparent) 62%, - transparent 76%, - transparent 100% - ); - opacity: 0.92; - } - - .release-delta__config-divider-toggle:hover .release-delta__config-divider-rule, - .release-delta__config-divider-toggle:focus-visible .release-delta__config-divider-rule { - background: color-mix(in srgb, var(--link) 62%, var(--border)); - box-shadow: 0 0 0.65rem color-mix(in srgb, var(--link) 26%, transparent); - } -} - -@media (prefers-color-scheme: light) { - :root:not([data-theme]), - :root[data-theme="system"] { - .release-delta__config-divider-rule { - background: color-mix(in srgb, var(--accent) 56%, var(--border)); - } - - .release-delta__config-divider-rule::after { - background-image: linear-gradient( - 90deg, - transparent 0%, - transparent 24%, - color-mix(in srgb, var(--link) 72%, transparent) 38%, - color-mix(in srgb, var(--link) 100%, transparent) 46%, - color-mix(in srgb, #ffffff 78%, var(--link)) 50%, - color-mix(in srgb, var(--link) 100%, transparent) 54%, - color-mix(in srgb, var(--link) 72%, transparent) 62%, - transparent 76%, - transparent 100% - ); - opacity: 0.92; - } - - .release-delta__config-divider-toggle:hover .release-delta__config-divider-rule, - .release-delta__config-divider-toggle:focus-visible .release-delta__config-divider-rule { - background: color-mix(in srgb, var(--link) 62%, var(--border)); - box-shadow: 0 0 0.65rem color-mix(in srgb, var(--link) 26%, transparent); - } - } + top: 1rem; + bottom: 1rem; + left: 0; + width: 2px; + background: linear-gradient(180deg, var(--accent), color-mix(in srgb, var(--accent) 8%, transparent)); + content: ""; + opacity: 0.46; } -@keyframes release-delta-divider-shimmer { - 0% { - background-position: 200% 0; - } - - 100% { - background-position: -20% 0; - } +.system-panel__lead { + display: grid; + align-content: start; + gap: 0.45rem; + min-width: 0; } -.release-delta__config-table-shell { - overflow: hidden; - max-height: none; - opacity: 1; - transition: - max-height 260ms ease, - opacity 220ms ease; +.system-panel__lead span { + color: var(--muted); + font-size: 0.72rem; + font-weight: 780; + line-height: 1.2; + text-transform: uppercase; } -.release-delta__config-table-shell[data-collapsed="true"] { - opacity: 0; +.system-panel__lead strong { + max-width: 32rem; + color: var(--ink); + font-size: clamp(1.15rem, 2vw, 1.55rem); + font-weight: 820; + line-height: 1.12; } -.release-delta__config-table { - width: 100%; - border-top: 0; - border-collapse: collapse; - table-layout: auto; +.publisher-note a::after { + content: ""; + position: absolute; + right: 0; + bottom: -0.1rem; + left: 0; + height: 1px; + background: currentColor; + opacity: 0.45; + transform: scaleX(0); + transform-origin: right; + transition: + opacity 180ms ease, + transform 180ms ease; } -.release-delta__config-table-head th { - padding: 0.22rem 0 0.38rem 0; - vertical-align: bottom; - text-align: left; +.publisher-note a:hover, +.publisher-note a:focus-visible { + color: var(--ink); } -.release-delta__config-table-label { - color: var(--muted-soft); - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.12em; - line-height: 1.2; - text-transform: uppercase; +.publisher-note a:hover::after, +.publisher-note a:focus-visible::after { + opacity: 0.85; + transform: scaleX(1); + transform-origin: left; } -.release-delta__config-col--feature, -.release-delta__config-col--ref { - width: 1%; - white-space: nowrap; +.system-loop { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 0.38rem; + margin: 0; + padding: 0; + list-style: none; } -.release-delta__config-table-head .release-delta__config-col--feature { - padding-right: 1.1rem; +.system-loop li { + position: relative; + display: grid; + grid-template-columns: 1.85rem minmax(0, 1fr); + gap: 0.68rem; + align-items: baseline; + min-width: 0; + padding: 0.58rem 0.68rem; + border-radius: 0.34rem; + background: color-mix(in srgb, var(--panel-soft) 24%, transparent); + transition: + background-color 180ms ease, + transform 180ms ease; } -.release-delta__config-table-head .release-delta__config-col--ref { - padding-left: 1.1rem; +.system-loop li::before { + content: ""; + position: absolute; + top: 0.74rem; + bottom: 0.74rem; + left: 0; + width: 2px; + background: var(--accent); + opacity: 0; + transform: scaleY(0.45); + transition: + opacity 180ms ease, + transform 180ms ease; } -.release-delta__config-item + .release-delta__config-item .release-delta__config-cell { - border-top: 1px solid var(--border); +.system-loop li:hover { + background: color-mix(in srgb, var(--accent-soft) 24%, transparent); + transform: translateX(0.1rem); } -.release-delta__config-cell { - min-width: 0; - padding: 0.9rem 0; - vertical-align: top; +.system-loop li:hover::before { + opacity: 1; + transform: scaleY(1); } -.release-delta__config-cell--feature { - width: 19rem; - padding-right: 1.1rem; +.system-loop li:hover > span { + color: var(--accent-strong); } -.release-delta__config-cell--ref { - width: 6.5rem; - padding-left: 1.1rem; - white-space: nowrap; +.system-loop h3 { + color: var(--ink); + font-size: 0.98rem; + font-weight: 800; + line-height: 1.18; } -.release-delta__config-cell > * { - margin: 0; +.system-loop p { + color: var(--ink-soft); + font-size: 0.88rem; + line-height: 1.42; } -.release-delta__config-cell > * + * { - margin-top: 0.32rem; +.radar-layout { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 0.9rem; + align-items: start; + padding: 1rem 0 1rem 0.95rem; + border-block: 1px solid color-mix(in srgb, var(--border) 58%, transparent); } -.release-delta__config-primary { - width: fit-content; - max-width: 100%; - border: 1px solid var(--border); - border-radius: 0.68rem; - background: color-mix(in srgb, var(--bg-soft) 82%, var(--panel)); - padding: 0.34rem 0.58rem; - color: var(--ink); - font-size: 0.78rem; - line-height: 1.45; - overflow-wrap: anywhere; +.lead-brief { + position: relative; + display: grid; + align-content: start; + gap: 0.75rem; + min-width: 0; + padding: 0.9rem 0.95rem 1rem; + border-radius: 0.36rem; + background: + linear-gradient(90deg, color-mix(in srgb, var(--panel-soft) 58%, transparent), transparent 88%), + color-mix(in srgb, var(--panel-soft) 18%, transparent); } -.release-delta__config-meta { +.lead-brief__meta, +.signal-card__taxonomy { display: flex; - flex-wrap: nowrap; - align-items: center; + flex-wrap: wrap; gap: 0.42rem; - min-width: 0; + align-items: center; } -.release-delta__config-meta-label { - display: inline-block; - width: 4.6ch; - flex: 0 0 4.6ch; - text-align: right; - white-space: nowrap; - color: var(--muted-soft); - font-size: 0.62rem; - font-weight: 700; - letter-spacing: 0.1em; - line-height: 1.2; - text-transform: uppercase; +.lead-brief__meta span, +.signal-card__taxonomy span { + display: inline-flex; + align-items: center; + min-height: auto; + padding: 0; + border: 0; + border-radius: 0; + color: var(--muted); + line-height: 1; } -.release-delta__config-meta-code { - color: var(--muted); - font-size: 0.72rem; - line-height: 1.45; - white-space: nowrap; +.lead-brief__meta span:not(:first-child)::before, +.signal-card__taxonomy span:not(:first-child)::before { + width: 0.22rem; + height: 0.22rem; + margin-right: 0.42rem; + border-radius: 50%; + background: var(--muted-soft); + content: ""; } -.release-delta__config-cli, -.release-delta__config-inline-link { - color: var(--muted); - font-size: 0.74rem; - line-height: 1.45; +.lead-brief h3 { + max-width: 20ch; + color: var(--ink); + font-size: clamp(1.65rem, 2.8vw, 2.4rem); + font-weight: 820; + line-height: 1.04; } -.release-delta__config-item-copy { +.lead-brief__summary { + max-width: 44rem; color: var(--ink-soft); - font-size: 0.86rem; - line-height: 1.56; + font-size: 0.96rem; + line-height: 1.5; } -.release-delta__config-item-note { - color: var(--muted); - font-size: 0.8rem; - line-height: 1.55; +.lead-brief__action { + display: grid; + gap: 0.35rem; + padding-top: 0.3rem; } -.release-delta__config-item-note-label { - margin-right: 0.35rem; - color: var(--muted-soft); - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; +.lead-brief__action p { + color: var(--ink); + font-size: 0.9rem; + line-height: 1.48; } -.release-delta__config-item-links { - color: var(--muted); - font-size: 0.78rem; - line-height: 1.5; +.lead-brief__link { width: fit-content; - white-space: nowrap; + min-height: auto; + padding: 0 0 0.18rem; + border: 0; + border-bottom: 2px solid color-mix(in srgb, var(--accent) 68%, transparent); + border-radius: 0; + color: var(--accent-strong); + backdrop-filter: none; } -.release-delta__overview { +.lead-brief__link:hover, +.lead-brief__link:focus-visible { + border-bottom-color: var(--ink); + color: var(--ink); + transform: translateY(-0.08rem); +} + +.radar-stack { display: grid; - gap: 0.85rem; - padding: 0; + gap: 0.75rem; + min-width: 0; } -.release-delta__overview-head { +.brief-list, +.watch-list { display: grid; - gap: 0.3rem; - padding-bottom: 0.2rem; + gap: 0.55rem; + min-width: 0; } -.release-delta__overview-title { +.brief-list h3, +.watch-list h3, +.feed-toolbar__copy h2 { + color: var(--ink); font-size: 1rem; font-weight: 800; - line-height: 1.22; - letter-spacing: -0.03em; - color: var(--ink); + line-height: 1.2; } -.release-delta__overview-list { +.brief-list ol, +.watch-list ul { display: grid; - gap: 0.75rem; + gap: 0.36rem; margin: 0; padding: 0; list-style: none; } -.release-overview-card { - display: grid; - gap: 0.7rem; - padding-top: 0.9rem; - border-top: 1px solid var(--border); -} - -.release-overview-card:first-child { - padding-top: 0; - border-top: 0; +.brief-list li, +.watch-list li { + position: relative; + min-width: 0; + padding: 0.48rem 0.55rem; + border-radius: 0.3rem; + background: color-mix(in srgb, var(--panel-soft) 24%, transparent); + transition: + background-color 180ms ease, + transform 180ms ease; } -.release-overview-card { - grid-template-columns: minmax(0, 1fr); - align-items: start; +.brief-list a, +.watch-list li { + display: grid; + gap: 0.28rem; } -.release-overview-card__body { - display: grid; - gap: 0.4rem; - min-width: 0; +.brief-list li:hover, +.watch-list li:hover { + background: color-mix(in srgb, var(--accent-soft) 20%, transparent); + transform: translateX(0.08rem); } -.release-overview-card__meta { - color: var(--muted-soft); - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.12em; +.brief-list span, +.watch-list span { + color: var(--muted); + font-size: 0.72rem; + font-weight: 780; + line-height: 1.2; text-transform: uppercase; } -.release-overview-card__title { - width: fit-content; +.brief-list strong { color: var(--ink); - font-size: 1rem; - line-height: 1.26; + font-size: 0.96rem; + font-weight: 760; + line-height: 1.38; } -.release-overview-card__title:hover { - color: var(--link); +.brief-list a:hover strong, +.brief-list a:focus-visible strong { + color: var(--accent-strong); } -.release-overview-card__why { - max-width: 42rem; +.watch-list p { + display: -webkit-box; + overflow: hidden; color: var(--ink-soft); - font-size: 0.88rem; - line-height: 1.58; + font-size: 0.9rem; + line-height: 1.5; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; } -.release-overview-card__details { +.publisher-board { + position: relative; display: grid; - gap: 0.85rem 1.35rem; - grid-template-columns: repeat(2, minmax(0, 1fr)); - padding-top: 0.1rem; + grid-template-columns: minmax(0, 1fr); + gap: 0.8rem; + align-items: start; + padding: 0.82rem 0.9rem; + border-radius: 0.42rem; + border: 1px solid color-mix(in srgb, var(--border) 58%, transparent); + background: color-mix(in srgb, var(--panel-soft) 34%, transparent); } -.release-overview-card__detail { +.publisher-note { display: grid; gap: 0.28rem; + min-width: 0; padding: 0; } -.release-overview-card__label { - color: var(--muted-soft); - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; -} - -.release-overview-card__detail-body { +.publisher-note p { + max-width: 42rem; color: var(--ink-soft); - font-size: 0.85rem; - line-height: 1.58; + font-size: 0.94rem; + line-height: 1.48; } -.release-overview-card__action { - width: fit-content; - margin-top: 0.2rem; - font-size: 0.84rem; - line-height: 1.45; +.publisher-note a { + position: relative; + color: var(--accent-strong); + font-weight: 760; } -.release-delta__summary-rail { +.publisher-flow { display: flex; flex-wrap: wrap; - gap: 0.72rem 1.3rem; - align-items: center; - padding: 0.45rem 0 0.8rem; - border-top: 1px solid var(--border); - border-bottom: 1px solid var(--border); -} - -.release-delta__summary-rail--hero { - padding: 0.2rem 0 0.75rem; - border-top: 0; - border-bottom: 1px solid var(--border); -} - -.release-delta__summary-item { - display: inline-flex; - align-items: center; - gap: 0.25rem; - color: var(--muted); - font-size: 0.88rem; - line-height: 1.5; - white-space: nowrap; + gap: 0.38rem; + min-width: 0; } -.release-delta__summary-item--pair { +.publisher-flow span { + position: relative; display: inline-flex; align-items: center; - min-width: 0; -} - -.release-delta__summary-item strong { + min-height: 2.25rem; + padding: 0.42rem 0.62rem; + border-radius: 0.32rem; + background: var(--panel); color: var(--ink); - font-size: 1rem; - font-weight: 800; - letter-spacing: -0.03em; + font-size: 0.84rem; + font-weight: 760; + text-transform: none; + transition: + background-color 180ms ease, + color 180ms ease, + transform 180ms ease; } -.release-delta__panel-label { - color: var(--muted-soft); - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; +.publisher-flow span::before { + content: none; } -.release-delta__empty { - font-size: 0.84rem; - line-height: 1.5; - color: var(--muted); +.publisher-flow span:hover { + background: color-mix(in srgb, var(--accent-soft) 22%, transparent); + color: var(--accent-strong); + transform: translateX(0.1rem); } -.release-delta__summary-link { - margin-left: auto; - padding-left: 0.2rem; - font-size: 0.82rem; - line-height: 1.4; - white-space: nowrap; +.publisher-flow span:hover::before { + content: none; } -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; +.feed-section { + padding-bottom: 5rem; } .feed-toolbar { - display: flex; - flex-direction: column; - gap: 0.9rem; - align-items: flex-start; - justify-content: space-between; - margin-top: 1.2rem; - padding: 0.95rem 0 0.85rem; - border-top: 1px solid var(--border); - border-bottom: 1px solid var(--border); + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 1rem; + align-items: end; + padding-top: 1.1rem; } -.feed-toolbar__intro { - display: flex; - flex-direction: column; - gap: 0.5rem; - align-items: flex-start; +.feed-toolbar__copy { + display: grid; + gap: 0.3rem; } -.feed-toolbar__controls { - display: flex; - flex-direction: column; - gap: 0.7rem; - align-items: flex-start; +.feed-toolbar__copy p { + max-width: 44rem; + color: var(--ink-soft); + font-size: 0.95rem; + line-height: 1.55; } .filter-bar { display: flex; flex-wrap: wrap; - align-items: center; - gap: 0.45rem 1.25rem; + gap: 0.35rem 0.7rem; + padding-bottom: 0.1rem; } .filter-chip { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + min-height: auto; + padding: 0 0 0.22rem; + border: 0; border-bottom: 2px solid transparent; - padding: 0 0 0.5rem; + border-radius: 0; color: var(--muted); - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.14em; - text-transform: uppercase; - transition: - color 160ms ease, - border-color 160ms ease, - transform 180ms ease; + font-size: 0.78rem; + font-weight: 760; + line-height: 1.2; + will-change: transform; } -.filter-chip:hover { - color: var(--ink); - border-color: var(--border-strong); +.filter-chip::after { + content: ""; + position: absolute; + right: 0; + bottom: -2px; + left: 0; + height: 2px; + background: currentColor; + opacity: 0; + transform: scaleX(0); + transform-origin: right; + transition: + opacity 180ms ease, + transform 180ms ease; } +.filter-chip:hover, +.filter-chip:focus-visible, .filter-chip[data-active="true"] { - color: var(--ink); border-color: var(--ink); + background: transparent; + color: var(--ink); + transform: translateY(-0.04rem); } -.feed-toolbar__label { - color: var(--muted); - font-size: 0.7rem; - font-weight: 600; - letter-spacing: 0.12em; - text-transform: uppercase; +.filter-chip:hover::after, +.filter-chip:focus-visible::after, +.filter-chip[data-active="true"]::after { + opacity: 1; + transform: scaleX(1); + transform-origin: left; } -.feed-toolbar__summary { - max-width: 42rem; - color: var(--ink-soft); - font-size: 0.88rem; - line-height: 1.55; +.filter-chip[data-pressed="true"] { + transform: translateY(0) scale(0.98); } .feed-region { - margin-top: 1rem; - display: flex; - flex-direction: column; - gap: 1.8rem; + display: grid; + gap: 1.6rem; + margin-top: 1.1rem; } .feed-region--filtering { - animation: feed-filter-shift 180ms ease; + animation: feed-filter-shift 220ms cubic-bezier(0.2, 0.8, 0.2, 1); } @keyframes feed-filter-shift { 0% { - opacity: 0.72; - transform: translateY(4px); + opacity: 0.55; + transform: translateY(0.2rem); } 100% { @@ -1597,493 +1582,579 @@ code { } .feed-group { - display: flex; - flex-direction: column; - gap: 0.9rem; -} - -.feed-group__label { - display: flex; - align-items: center; - gap: 0.85rem; + display: grid; + gap: 0.75rem; } -.feed-group__label::after { - flex: 1; - height: 1px; - background: var(--border); - content: ""; +.feed-group__label { + color: var(--muted); + font-size: 0.78rem; + font-weight: 780; + line-height: 1.2; + text-transform: uppercase; } -.feed-group__label span { - color: var(--muted-soft); - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; +.feed-group__items { + display: grid; + gap: 0.72rem; } .signal-card { + position: relative; + isolation: isolate; display: grid; - gap: 0.9rem; - padding: 1.15rem 0; - border-top: 1px solid var(--border); - scroll-margin-top: 1.5rem; + grid-template-columns: minmax(0, 1fr); + gap: 0.75rem; + min-width: 0; + padding: 1.1rem 0.9rem 1.2rem; + border-radius: 0.42rem; + scroll-margin-top: 1rem; transition: - background-color 180ms ease, - border-color 180ms ease, - box-shadow 180ms ease, + background-color 220ms ease, + transform 180ms ease; +} + +.signal-card::before { + content: ""; + position: absolute; + inset: 0 -0.72rem; + z-index: -1; + border-radius: 0.5rem; + background: color-mix(in srgb, var(--panel-soft) 48%, transparent); + opacity: 0.42; + transform: scaleY(0.985); + transition: + opacity 180ms ease, transform 180ms ease; } -.signal-card:first-child { - border-top: 0; - padding-top: 0; +.signal-card[hidden], +.feed-group[hidden], +.empty-feed-state[hidden] { + display: none; } -.signal-card:target { - margin-inline: -0.85rem; - padding: 1rem 0.85rem; - border-top-color: color-mix(in srgb, var(--accent) 35%, var(--border)); - border-radius: 0.8rem; - background: color-mix(in srgb, var(--accent-soft) 52%, var(--panel)); - box-shadow: - inset 0 0 0 1px color-mix(in srgb, var(--accent) 28%, transparent), - 0 10px 24px color-mix(in srgb, var(--accent) 8%, transparent); +.signal-card:hover::before, +.signal-card[data-evidence-open="true"]::before, +.signal-card:target::before { + opacity: 0.72; + transform: scaleY(1); } -.signal-card:target .signal-entry__title { - color: color-mix(in srgb, var(--accent) 74%, var(--ink)); +.signal-card__index { + display: flex; + flex-wrap: wrap; + gap: 0.45rem 0.75rem; + align-content: start; + color: var(--muted); + font-size: 0.78rem; + font-weight: 760; + line-height: 1.3; } -.signal-card:target .signal-entry-date, -.signal-card:target .signal-entry__taxonomy-item--accent { - color: var(--accent); +.signal-card__index a { + color: var(--accent-strong); } -.signal-entry__rail { - display: flex; - flex-direction: column; - gap: 0.55rem; +.signal-card__index a:hover, +.signal-card__index a:focus-visible { + color: var(--ink); } -.signal-entry-date { - color: var(--muted); - font-size: 0.68rem; - font-weight: 600; - letter-spacing: 0.12em; - text-transform: uppercase; +.signal-card__body { + display: grid; + gap: 0.9rem; + min-width: 0; } -.signal-entry__taxonomy { - display: flex; - flex-wrap: wrap; - gap: 0.4rem; +.signal-card__header { + display: grid; + gap: 0.5rem; } -.signal-entry__taxonomy-item { - color: var(--muted-soft); - font-size: 0.68rem; - font-weight: 600; - letter-spacing: 0.08em; +.signal-card__preview { + color: var(--accent-strong); + font-size: 0.72rem; + font-weight: 780; + line-height: 1.2; text-transform: uppercase; } -.signal-entry__taxonomy-item--accent { +.signal-card__header h2 { + max-width: 54rem; color: var(--ink); + font-size: clamp(1.28rem, 2.2vw, 1.8rem); + font-weight: 800; + line-height: 1.12; +} + +.signal-card__summary { + max-width: 55rem; + color: var(--ink-soft); + font-size: 0.98rem; + line-height: 1.62; +} + +.signal-card__readout { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 0.75rem; + padding: 0.35rem 0; } -.signal-entry__content { +.signal-card__readout section { + display: grid; + gap: 0.32rem; min-width: 0; + transition: transform 180ms ease; } -.signal-entry__preview { - color: var(--link); - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; +.signal-card__readout section:hover { + transform: translateY(-0.04rem); } -.signal-entry__title { - max-width: 48rem; - font-size: 1.35rem; - line-height: 1.14; - color: var(--ink); +.signal-card__readout p { + color: var(--ink-soft); + font-size: 0.92rem; + line-height: 1.55; } -.signal-entry__summary { - max-width: 46rem; - font-size: 0.95rem; - line-height: 1.68; +.signal-card__effect, +.signal-card__watch { + display: grid; + gap: 0.3rem; color: var(--ink-soft); + font-size: 0.9rem; + line-height: 1.55; } -.signal-entry__why { +.signal-card__flags { display: flex; - flex-direction: column; - gap: 0.28rem; - max-width: 46rem; - font-size: 0.92rem; - line-height: 1.65; - color: var(--ink); + flex-wrap: wrap; + gap: 0.42rem; + align-items: center; } -.signal-entry-label { - color: var(--muted-soft); - font-size: 0.66rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; +.signal-flag { + display: inline-flex; + max-width: 100%; + min-height: 1.8rem; + align-items: center; + padding: 0.32rem 0.5rem; + overflow-wrap: anywhere; } -.signal-entry-action { - margin-top: 0.9rem; - padding-top: 0.9rem; - border-top: 1px solid var(--border); +.signal-card__evidence { + padding-top: 0.65rem; } -.signal-entry-action__row, -.signal-entry-action__effect { +.signal-card__evidence summary { display: flex; - flex-direction: column; - gap: 0.28rem; -} - -.signal-entry-action__row { - color: var(--ink); - font-size: 0.92rem; - line-height: 1.65; + align-items: center; + justify-content: space-between; + gap: 0.8rem; + color: var(--muted); + cursor: pointer; + font-size: 0.82rem; + font-weight: 760; + line-height: 1.25; + list-style: none; + transition: + color 180ms ease, + transform 180ms ease; } -.signal-entry-action__body { - display: inline; +.signal-card__evidence summary::-webkit-details-marker { + display: none; } -.signal-entry-action__effect { - margin-top: 0.6rem; - color: var(--muted); - font-size: 0.88rem; - line-height: 1.58; +.signal-card__evidence summary span:last-child { + margin-left: auto; + color: var(--muted-soft); + font-size: 0.76rem; + font-weight: 700; } -.signal-entry-config { - margin-top: 0.8rem; +.signal-card__evidence summary::after { + content: ""; + width: 0.46rem; + height: 0.46rem; + border-right: 1.5px solid currentColor; + border-bottom: 1.5px solid currentColor; + opacity: 0.66; + transform: rotate(45deg) translateY(-0.08rem); + transform-origin: center; + transition: + opacity 180ms ease, + transform 180ms ease; } -.signal-entry-config__hint { - margin-top: 0.28rem; - color: var(--muted); - font-size: 0.84rem; - line-height: 1.5; +.signal-card__evidence summary:hover, +.signal-card__evidence summary:focus-visible { + color: var(--accent-strong); } -.terminal-inline { - display: inline-flex; - align-items: center; - border-radius: 999px; - border: 1px solid var(--success-border); - background: var(--success-soft); - padding: 0.12rem 0.45rem; - color: var(--success); - font-family: - ui-monospace, - "SFMono-Regular", - Menlo, - Monaco, - monospace; - font-size: 0.7rem; - font-weight: 700; - letter-spacing: 0.04em; +.signal-card__evidence[open] summary { + color: var(--ink); } -.signal-flag { - border: 1px solid var(--border); - border-radius: 999px; - background: var(--bg-soft); - padding: 0.2rem 0.58rem; - color: var(--muted); - font-size: 0.74rem; +.signal-card__evidence[open] summary::after { + opacity: 0.92; + transform: rotate(225deg) translateY(-0.02rem); } -.signal-entry-details { - margin-top: 0.9rem; +.signal-card__evidence-body { + display: grid; + gap: 0.9rem; padding-top: 0.85rem; - border-top: 1px solid var(--border); - color: var(--ink-soft); } -.signal-entry-details__summary { - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; - cursor: pointer; - list-style: none; - color: var(--muted); - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; +.signal-card__evidence[open] .signal-card__evidence-body { + animation: evidence-reveal 240ms cubic-bezier(0.2, 0.8, 0.2, 1); } -.signal-entry-details__summary::-webkit-details-marker { - display: none; +@keyframes evidence-reveal { + from { + opacity: 0; + transform: translateY(-0.3rem); + } + + to { + opacity: 1; + transform: translateY(0); + } } -.signal-entry-details__body { - padding-top: 0.8rem; +.signal-proof-list { + display: grid; + gap: 0.5rem; + margin: 0; + padding: 0; + list-style: none; } .signal-proof-item { position: relative; padding-left: 0.9rem; + color: var(--ink-soft); + font-size: 0.9rem; + line-height: 1.55; } .signal-proof-item::before { + content: ""; position: absolute; + top: 0.64em; left: 0; - top: 0.72rem; - width: 0.24rem; - height: 0.24rem; + width: 0.32rem; + height: 0.32rem; border-radius: 999px; - background: var(--ink); - content: ""; + background: var(--accent); + transition: + background-color 180ms ease, + transform 180ms ease; } -.signal-link { - color: var(--link); - font-weight: 600; +.signal-proof-item:hover::before { + background: var(--signal); + transform: scale(1.18); } -.signal-link:hover { - text-decoration: underline; - text-underline-offset: 0.18em; +.signal-card__caveats { + display: grid; + gap: 0.45rem; } -.signal-markdown code { - border: 1px solid var(--code-border); - border-radius: 0.42rem; - background: var(--code-bg); - padding: 0.12rem 0.34rem; - color: var(--accent); - font-size: 0.9em; +.signal-source-list { + display: grid; + gap: 0.45rem; + margin: 0; + padding: 0.75rem 0 0; + list-style: none; } -.signal-markdown a { - color: var(--link); - text-decoration: underline; - text-decoration-color: var(--link-underline); - text-underline-offset: 0.18em; +.signal-source-list li { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + gap: 0.55rem; + align-items: baseline; + color: var(--muted); + font-size: 0.82rem; + line-height: 1.35; +} + +.signal-source-list span, +.signal-source-list small { + color: var(--muted); + font-size: 0.72rem; + font-weight: 780; + text-transform: uppercase; +} + +.signal-source-list a { + color: var(--ink-soft); +} + +.signal-source-list a:hover, +.signal-source-list a:focus-visible { + color: var(--accent-strong); } -.signal-markdown strong { +.empty-feed-state { + display: grid; + gap: 0.45rem; + padding: 1.1rem; + border: 1px dashed var(--border-strong); + border-radius: 0.7rem; + background: var(--panel); +} + +.empty-feed-state > p:first-child { + color: var(--muted); + font-size: 0.72rem; + font-weight: 780; + text-transform: uppercase; +} + +.empty-feed-state h2 { color: var(--ink); + font-size: 1.35rem; + font-weight: 800; + line-height: 1.15; +} + +.empty-feed-state p { + color: var(--ink-soft); + font-size: 0.95rem; + line-height: 1.55; +} + +.signal-markdown a, +.signal-link { + color: var(--accent-strong); + text-decoration: underline; + text-decoration-color: color-mix(in srgb, var(--accent) 38%, transparent); + text-underline-offset: 0.18em; } .signal-markdown--title code { - font-size: 0.74em; + font-size: 0.82em; } -@media (min-width: 768px) { - .site-frame { - padding: 1.45rem 1.5rem 5.5rem; - } +.signal-markdown--inline code { + white-space: normal; +} - .site-topbar { - gap: 1rem; - } +.reveal-ready { + opacity: 0; + filter: blur(3px); + transform: translate3d(0, 0.82rem, 0); + transition: + filter 520ms cubic-bezier(0.2, 0.8, 0.2, 1), + opacity 520ms cubic-bezier(0.2, 0.8, 0.2, 1), + transform 520ms cubic-bezier(0.2, 0.8, 0.2, 1); + transition-delay: var(--reveal-delay, 0ms); + will-change: filter, opacity, transform; +} - .site-topbar__head { - grid-template-columns: repeat(2, minmax(0, 1fr)); - align-items: stretch; - column-gap: 2rem; +.reveal-ready.is-visible { + opacity: 1; + filter: blur(0); + transform: translate3d(0, 0, 0); +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 1ms !important; + animation-iteration-count: 1 !important; + scroll-behavior: auto !important; + transition-duration: 1ms !important; } - .site-brand__wordmark-image { - height: 3.35rem; + .reveal-ready { + opacity: 1; + filter: none; + transform: none; } +} - .site-brand__meta { - grid-template-rows: repeat(2, auto); - gap: 0.72rem; +@media (min-width: 720px) { + .site-nav { + display: flex; } - .site-brand__note { - max-width: 40rem; + .hero-grid { + grid-template-columns: minmax(0, 1fr) minmax(19rem, 25rem); + gap: 2rem; + padding-top: 2.8rem; } - .site-brand__social { - min-width: 0; - padding-top: 0; + .hero-bottom { + grid-template-columns: repeat(4, minmax(0, 1fr)); } - .site-brand__social-copy { - white-space: nowrap; + .utility-strip { + align-self: end; + justify-self: end; + width: min(100%, 22rem); } - .site-head__utility { - min-height: 3.35rem; - align-content: space-between; + .utility-strip__items { + grid-template-columns: minmax(0, 1fr); justify-items: end; } - .site-head__actions { + .utility-row { + width: 100%; } - .site-brand__cues { - justify-content: flex-end; + .system-panel { + grid-template-columns: minmax(15rem, 0.68fr) minmax(0, 1.32fr); + gap: 1rem; + align-items: start; + padding: 1rem 0 1rem 0.95rem; } - .release-delta { - margin-top: 1.1rem; - padding: 1.25rem; + .system-panel__lead { + position: static; } - .release-delta__hero-head { - grid-template-columns: minmax(0, 1fr); + .system-loop { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.5rem; } - .release-delta__content-grid { - grid-template-columns: minmax(0, 1fr); - align-items: start; + .system-loop li { + grid-template-columns: 2rem minmax(0, 1fr); + padding: 0.58rem 0.68rem; } - .release-delta__config-cell--feature { - width: 18rem; + .radar-layout { + grid-template-columns: minmax(0, 0.9fr) minmax(28rem, 1.1fr); + gap: 1.1rem; } - .feed-toolbar { - flex-direction: row; - align-items: center; + .radar-stack { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.72rem; } - .feed-toolbar__intro { - flex-direction: row; - align-items: center; - gap: 0.8rem; + .brief-list, + .watch-list { + align-content: start; } - .feed-toolbar__controls { - flex-direction: row; - align-items: center; - gap: 1rem; + .brief-list strong { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; } - .signal-card { - grid-template-columns: 9.25rem minmax(0, 1fr); - gap: 1.75rem; + .publisher-board { + grid-template-columns: minmax(18rem, 0.9fr) minmax(0, 1.1fr); + gap: 1rem; + align-items: center; } - .signal-entry__taxonomy { - flex-direction: column; - align-items: flex-start; + .feed-toolbar { + grid-template-columns: minmax(0, 1fr) auto; } -} -@media (max-width: 52rem) { - .site-topbar__head { - grid-template-columns: minmax(0, 1fr); - gap: 0.85rem; + .signal-card { + grid-template-columns: 9.5rem minmax(0, 1fr); + gap: 1.4rem; + padding: 1.25rem 1rem 1.35rem; } - .site-brand__note { - max-width: none; + .signal-card__index { + display: grid; + gap: 0.4rem; } - .site-head__theme, - .site-head__utility, - .site-head__cues, - .site-head__actions, - .site-head__status { - justify-content: flex-start; + .signal-card__readout { + grid-template-columns: repeat(2, minmax(0, 1fr)); } +} - .site-head__utility { - justify-items: start; +@media (min-width: 1040px) { + .official-hero { + min-height: min(48rem, 100vh); } - .site-brand__social-copy { - white-space: normal; + .hero-grid { + grid-template-columns: minmax(0, 1fr) minmax(22rem, 28rem); + padding-top: 3.2rem; } - .site-brand__cues { - justify-content: flex-start; + .hero-copy h1 { + font-size: clamp(7rem, 11vw, 10.8rem); } - .reset-inline { - flex-wrap: wrap; - justify-content: flex-start; + .lead-brief { + padding: 1.05rem; } +} - .appcast-download { - width: 100%; +@media (max-width: 520px) { + .official-hero { + min-height: 100vh; } - .appcast-download__primary { - align-items: flex-start; - width: fit-content; + .site-header { + grid-template-columns: minmax(0, 1fr) auto; + padding: 0.85rem 0.9rem; } - .appcast-download__kicker, - .appcast-download__title-row { - justify-content: flex-start; + .site-logo__image { + height: 2.05rem; } - .appcast-download__meta { - text-align: left; + .theme-toggle { + max-width: 10.2rem; + overflow-x: auto; } - .appcast-download__panel { - left: 0; - right: auto; - min-width: min(18rem, calc(100vw - 3rem)); + .theme-toggle__button { + padding-inline: 0.56rem; } - .release-overview-card__details { - grid-template-columns: minmax(0, 1fr); + .hero-grid { + padding: 2.6rem 0.9rem 1rem; } - .release-delta__config-toolbar { - grid-template-columns: minmax(0, 1fr); - align-items: stretch; + .hero-copy h1 { + font-size: 4.2rem; } - .release-delta__config-actions { - justify-self: start; - justify-content: flex-start; + .hero-copy p { + font-size: 1rem; } - .release-delta__config-table, - .release-delta__config-table-head, - .release-delta__config-list, - .release-delta__config-item, - .release-delta__config-cell { - display: block; - width: 100%; + .hero-bottom { + padding: 0 0.9rem 0.9rem; } - .release-delta__config-table-head { - display: none; + .site-section { + padding: 3rem 0.9rem 0; } - .release-delta__config-item { - padding: 0.9rem 0; + .section-heading h2 { + font-size: 2.2rem; } - .release-delta__config-cell { - padding: 0; - border-top: 0; + .lead-brief { + padding: 1rem; } - .release-delta__config-cell + .release-delta__config-cell { - margin-top: 0.7rem; + .lead-brief h3 { + font-size: 2.1rem; } - .release-delta__config-cell--feature, - .release-delta__config-cell--ref { - width: auto; - padding-left: 0; - padding-right: 0; + .signal-source-list li { + grid-template-columns: minmax(0, 1fr); + gap: 0.2rem; } }