> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/public-website/docs/archive-docs_public-website/media-assets.md).

# Public Website Media Assets

This document records the package-local media inventory and release policy for `public-website/`. It replaces the spec-session asset provenance record.

## Media Boundary

The website uses two asset locations:

| Location      | Purpose                                                                                      |
| ------------- | -------------------------------------------------------------------------------------------- |
| `src/assets/` | Page media imported and optimized by Astro.                                                  |
| `public/`     | Pass-through browser files such as favicon, robots, manifest, and future approved downloads. |

Use `src/assets/` for visible page images. Use `public/press/` only for intentional downloads that have release-ready evidence.

## Status Vocabulary

| Status         | Meaning                                                                                            |
| -------------- | -------------------------------------------------------------------------------------------------- |
| `launch-ready` | Approved for scoped static website use with source and destination recorded.                       |
| `conditional`  | May be used for scoped preview/example purposes, but broad release or press claims remain blocked. |
| `blocked`      | Do not copy, import, transform, reference, or link as runtime website media.                       |

The current TypeScript media registry uses `launch-ready` and `conditional`. Blocked items are documented here as policy.

## Media Registry

Authoritative registry:

```
public-website/src/lib/media.ts
```

Each record contains:

* key
* kind
* Astro image import
* alt text
* dimensions
* source path
* website path
* source byte size
* SHA-256
* status
* intended use
* provenance note
* loading strategy
* priority
* responsive widths
* sizes
* quality
* fit
* performance notes
* fallback key where needed

Use `getWebsiteMediaAsset()` or `websiteMediaByKey` rather than hard-coding asset metadata in page components.

## Rendering Component

Preferred rendered media component:

```
src/components/media/OptimizedMedia.astro
```

It enforces:

* non-empty alt text
* bounded responsive widths
* Astro image optimization
* explicit loading behavior
* reduced-motion fallback when the registry provides a fallback asset
* optional provenance caption output

## Brand Asset Inventory

| Key                | Source                                    | Website path                                                 | Status       | SHA-256                                                            |
| ------------------ | ----------------------------------------- | ------------------------------------------------------------ | ------------ | ------------------------------------------------------------------ |
| `brand.logo`       | `assets/brand/factionos-logo.webp`        | `public-website/src/assets/brand/factionos-logo.webp`        | launch-ready | `54f8f63f53d21bd67b92db256b944253fa5d528953a83bbc70ba682148a992b6` |
| `brand.logoSquare` | `assets/brand/factionos-logo-square.webp` | `public-website/src/assets/brand/factionos-logo-square.webp` | launch-ready | `a20c28d4af4bbf09c0102823d15202269c089ef5079a36d6cc0d7987f794c067` |
| `brand.ogDefault`  | `assets/brand/factionos-logo.webp`        | `public-website/src/assets/brand/og-default.png`             | launch-ready | `3726c6195b1a8f466dfbde0724b869fa195acbc0cd36775685bfd1fb5e8eb817` |

Notes:

* Brand media is approved for scoped website identity use.
* `brand.ogDefault` is a 1200x630 PNG generated with Sharp from the approved brand logo source.
* Brand approval here is not a broader press-kit, trademark, certification, or production-hosted claim.

## Showcase Asset Inventory

| Key                                | Source                                              | Website path                                                           | Status      | SHA-256                                                            |
| ---------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------ |
| `showcase.strip`                   | `assets/showcase/factionos-strip.webp`              | `public-website/src/assets/showcase/factionos-strip.webp`              | conditional | `0bd17bb031b66797c1d78325c3533c3e332722033feff5a0997b8e291a5ab15f` |
| `showcase.stripCover`              | `assets/showcase/factionos-strip-cover.jpg`         | `public-website/src/assets/showcase/factionos-strip-cover.jpg`         | conditional | `d1854d7146aea1e0166084a9f6f3a6c0c0c3c9059855ef96ed197e1cc147618f` |
| `showcase.heroesBanner`            | `assets/showcase/heroes-banner.jpg`                 | `public-website/src/assets/showcase/heroes-banner-preview.webp`        | conditional | `df2d9b25bad868a76e99542f25fac4f8ae0dbe3c5bf8c50e559b9f756ebaa358` |
| `showcase.stripFrameDuskMuster`    | `assets/showcase/strip-frames/1-dusk_muster.jpg`    | `public-website/src/assets/showcase/strip-frames/1-dusk_muster.jpg`    | conditional | `4e1ac5e417a238636091cba229f7383124d036b5fb3ac7c6fb179000e98b686c` |
| `showcase.stripFrameMidCombat`     | `assets/showcase/strip-frames/2-mid_combat.jpg`     | `public-website/src/assets/showcase/strip-frames/2-mid_combat.jpg`     | conditional | `29c12e74471580ffc5485b1e6470c2e31aecccd3e75a879f240c8126a65c4457` |
| `showcase.stripFrameVictoryChorus` | `assets/showcase/strip-frames/3-victory_chorus.jpg` | `public-website/src/assets/showcase/strip-frames/3-victory_chorus.jpg` | conditional | `e0936c34900f798d5194ca00a672db9b7776de0716d61df7309985a8853bee74` |
| `showcase.stripFrameNightWatch`    | `assets/showcase/strip-frames/4-night_watch.jpg`    | `public-website/src/assets/showcase/strip-frames/4-night_watch.jpg`    | conditional | `34cfcb9d0f7e4952e7eef7cfcd99f3cf396a728e46a6927b8d3e80c4815136af` |

Notes:

* Showcase media remains conditional for broad release or press claims.
* The animated strip uses `showcase.stripCover` as a reduced-motion fallback.
* `showcase.heroesBanner` uses a launch WebP derivative. The original tracked source is high byte size and should not be emitted directly for previews.

## Pass-Through Press Policy

Current folder:

```
public-website/public/press/
```

Current launch state:

* No downloadable press files are launch-ready.
* `public/press/README.md` is policy-only.
* Press page previews use media registry assets, not downloadable files.

Before adding any downloadable file under `public/press/`, record:

* source path
* destination path
* SHA-256
* type
* dimensions or duration
* byte size
* launch reason
* owning page or download surface
* provenance
* rights
* attribution
* metadata status
* accessibility status
* privacy status
* byte budget
* explicit release status

Only launch-ready files may be publicly linked as downloads. Conditional files may be tracked only with visible blocker context and without public download links.

## Blocked Media

Do not import, copy, transform, or link these as runtime website media:

* `EXAMPLES/` quarantined legacy media.
* Generated-draft media without promotion evidence.
* Unknown-provenance media.
* Absent planned mockups.
* Audio or video files outside a scoped media decision.
* Any file whose rights, attribution, metadata, accessibility, privacy, or byte budget status is unresolved for public website use.

The planned path `assets/showcase/factionos-website-mockup.png` is absent. Do not reference it as canonical design proof.

## Adding Website Media

1. Confirm the source is tracked and appropriate for public website use.
2. Record source path, dimensions, bytes, and SHA-256.
3. Copy or derive the asset into `public-website/src/assets/`.
4. Add a typed registry entry in `src/lib/media.ts`.
5. Provide useful alt text.
6. Set status to `launch-ready` or `conditional`.
7. Add performance notes and responsive widths.
8. Add a reduced-motion fallback for animated media.
9. Render via `OptimizedMedia.astro` where practical.
10. Update this document.
11. Build and run `check:links`.

## Performance Rules

* Use lazy loading unless the media is truly first-viewport and important.
* Bound generated widths to rendered size and source dimensions.
* Avoid emitting high-byte source images directly.
* Prefer static fallback for animated media when reduced motion is requested.
* Keep captions or provenance visible when conditional status matters.

## Validation

Run:

```bash
npm --workspace @factionos/public-website run typecheck
npm --workspace @factionos/public-website run build
npm --workspace @factionos/public-website run check:links
```

For broader repo media work, root media gates may apply, but this document only defines the public website package-local media policy.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/public-website/docs/archive-docs_public-website/media-assets.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
