diff --git a/AGENTS.md b/AGENTS.md
index 3ced140..efb0ab8 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -66,3 +66,23 @@ records. Preserve existing source ownership and historical records.
## Validation
Run actionlint for workflow changes and test a pinned workflow from a consumer.
+
+## Code Review Rules
+
+### Shared policy and ownership
+
+- Flag shared policy that fixes a package-specific version, platform window or
+ toolchain outside the owning package. Safe path: derive variable values from
+ caller configuration and state only the shared invariant here.
+
+### Workflow compatibility
+
+- Flag a reusable workflow interface change without a compatible caller path
+ and consuming-repository evidence. Safe path: validate the pinned workflow
+ in a caller and document the adoption requirements.
+
+### Claims and release integrity
+
+- Flag an acceptance or release claim without evidence for the identified
+ source, or instructions that could replace an immutable published identity.
+ Safe path: report the actual validation state and follow `VERSIONING.md`.
diff --git a/Brand/Avatar/Bird.svg b/Brand/Avatar/Bird.svg
new file mode 100644
index 0000000..7b64c0f
--- /dev/null
+++ b/Brand/Avatar/Bird.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/Brand/Avatar/Dots.svg b/Brand/Avatar/Dots.svg
new file mode 100644
index 0000000..cb9eb3e
--- /dev/null
+++ b/Brand/Avatar/Dots.svg
@@ -0,0 +1 @@
+
diff --git a/Brand/Avatar/README.md b/Brand/Avatar/README.md
new file mode 100644
index 0000000..4f0f90d
--- /dev/null
+++ b/Brand/Avatar/README.md
@@ -0,0 +1,17 @@
+# Organization avatar sources
+
+[DESIGN.md](../../DESIGN.md#iconography) owns the background, layer order,
+and material settings. `Bird.svg` and `Dots.svg` are flat source layers for
+Icon Composer; native effects and masks are applied during generation.
+
+The Swift bird is supplied brand artwork from
+[Swift.org](https://www.swift.org/assets/images/swift.svg), positioned on a
+transparent canvas. Swift and the Swift logo are trademarks of Apple Inc.
+The dot field, native material treatment, and organization palette belong
+to this avatar composition. This artwork is not used as a package glyph or
+as a generic icon skill example.
+
+Generate the `swift-library` app entry with `apple-app-icon-design`, review
+all native appearances and the web set, and verify drift before replacing
+delivered assets. Repository README and documentation logos use the separate
+framework-style entry in the same design document.
diff --git a/DESIGN.md b/DESIGN.md
index c02e94c..2f49f2a 100644
--- a/DESIGN.md
+++ b/DESIGN.md
@@ -137,9 +137,11 @@ social cards.
## Shapes
-Icons are rounded squares with a corner radius of 0.19 of the side, drawn at
-an isometric angle with a vertical squash of 0.75 and a stack depth of 0.36
-of the icon width. Terminal windows have 10 px corners; cards are square.
+Repository icons use continuous corners at an isometric angle, with a
+vertical squash of 0.75 and a stack depth of 0.36 of the icon width. The
+framework icon generator owns the shared corner geometry. Native avatar
+masks come from Icon Composer. Terminal windows have 10 px corners; cards
+are square.
## Components
@@ -157,23 +159,54 @@ of the icon width. Terminal windows have 10 px corners; cards are square.
marks along the face axes (rotation 0).
- Do derive banner and social preview art from the icons, never redraw them.
- Don't use Apple system fonts, SF Symbols, or other restricted glyph sets.
-- Don't include, modify, or imitate another company's or project's logo.
+- Repository glyphs are original. The organization's supplied Swift bird is
+ limited to its avatar; its source ownership is recorded in
+ [Brand/Avatar/README.md](Brand/Avatar/README.md).
- Don't put text inside icons or banners.
## Iconography
-Each entry renders one repository icon at 1024 px. Fields follow the
-generator's icon specification; colors are OKLCH. Regenerate an icon after
-changing its entry and replace the repository's `Logo.svg` and `Logo.png`.
+Entries under `icons` render repository logos at 1024 px with
+`apple-framework-icon-design`. Colors are OKLCH. Regenerate after changing
+an entry and replace the owning repository’s `Logo.svg` and `Logo.png`.
+
+The `app_icons` entry supplies `apple-app-icon-design` with the organization
+avatar’s background, material groups, and source layers. Its dot field uses
+Primary Light over Primary, and the bird receives native relief and lighting.
+The avatar and repository logo serve different surfaces. All native
+appearances and web sizes derive from these layers and this entry.
```json
{
"icons": {
+ "swift-userdefault": {
+ "hue": 10,
+ "face_colors": [
+ "oklch(0.72 0.18 8)",
+ "oklch(0.64 0.21 14)"
+ ],
+ "band_colors": [
+ "oklch(0.58 0.21 18)",
+ "oklch(0.67 0.2 10)",
+ "oklch(0.8 0.11 2)"
+ ],
+ "glyph": "toggle",
+ "texture": "dots",
+ "glyph_rotation": -45
+ },
"swift-library": {
"hue": 40,
"bands": 4,
- "face_colors": ["oklch(0.78 0.16 62)", "oklch(0.62 0.23 30)"],
- "band_colors": ["oklch(0.6 0.23 28)", "oklch(0.66 0.21 38)", "oklch(0.74 0.18 52)", "oklch(0.83 0.14 68)"],
+ "face_colors": [
+ "oklch(0.78 0.16 62)",
+ "oklch(0.62 0.23 30)"
+ ],
+ "band_colors": [
+ "oklch(0.6 0.23 28)",
+ "oklch(0.66 0.21 38)",
+ "oklch(0.74 0.18 52)",
+ "oklch(0.83 0.14 68)"
+ ],
"glyph": "tiles",
"texture": "dots",
"glyph_rotation": 0
@@ -181,13 +214,44 @@ changing its entry and replace the repository's `Logo.svg` and `Logo.png`.
"swift-benchmark": {
"hue": 40,
"texture": "grid",
- "face_colors": ["oklch(0.82 0.14 52)", "oklch(0.68 0.19 34)"],
- "band_colors": ["oklch(0.66 0.18 33)", "oklch(0.5 0.012 50)", "oklch(0.37 0.01 50)"],
+ "face_colors": [
+ "oklch(0.82 0.14 52)",
+ "oklch(0.68 0.19 34)"
+ ],
+ "band_colors": [
+ "oklch(0.66 0.18 33)",
+ "oklch(0.5 0.012 50)",
+ "oklch(0.37 0.01 50)"
+ ],
"objects": [
- {"kind": "cube", "x": 0.04, "y": 0.3, "s": 0.07, "h": 0.14},
- {"kind": "cube", "x": 0.04, "y": 0.1, "s": 0.07, "h": 0.24},
- {"kind": "cube", "x": 0.04, "y": -0.1, "s": 0.07, "h": 0.36},
- {"kind": "cube", "x": 0.04, "y": -0.3, "s": 0.07, "h": 0.5}
+ {
+ "kind": "cube",
+ "x": 0.04,
+ "y": 0.3,
+ "s": 0.07,
+ "h": 0.14
+ },
+ {
+ "kind": "cube",
+ "x": 0.04,
+ "y": 0.1,
+ "s": 0.07,
+ "h": 0.24
+ },
+ {
+ "kind": "cube",
+ "x": 0.04,
+ "y": -0.1,
+ "s": 0.07,
+ "h": 0.36
+ },
+ {
+ "kind": "cube",
+ "x": 0.04,
+ "y": -0.3,
+ "s": 0.07,
+ "h": 0.5
+ }
]
},
"swift-package-template": {
@@ -207,6 +271,34 @@ changing its entry and replace the repository's `Logo.svg` and `Logo.png`.
"texture": "dots",
"glyph_rotation": -45
},
+ "swift-appstoreconnect": {
+ "hue": 106,
+ "mode": "deepen",
+ "bands": 3,
+ "texture": "dots",
+ "glyph_rotation": -45,
+ "glyph_scale": 0.32,
+ "custom_glyph": {
+ "style": "stroke",
+ "width": 0.15,
+ "d": "M-0.38 -0.48 H0.16 Q0.58 -0.48 0.58 -0.06 V0.36 M-0.62 -0.26 V0.10 Q-0.62 0.50 -0.22 0.50 H0.16",
+ "rects": [
+ [
+ -0.88,
+ -0.82,
+ 0.58,
+ 0.58
+ ],
+ [
+ 0.28,
+ 0.2,
+ 0.58,
+ 0.58
+ ]
+ ],
+ "round": 0.12
+ }
+ },
"swift-semver": {
"hue": 128,
"mode": "deepen",
@@ -222,18 +314,25 @@ changing its entry and replace the repository's `Logo.svg` and `Logo.png`.
"glyph_hue": 160,
"texture": "lines",
"texture_opacity": 0.15,
- "face_colors": ["oklch(0.42 0.07 168)", "oklch(0.27 0.05 172)"],
- "band_colors": ["oklch(0.36 0.07 170)", "oklch(0.5 0.11 166)", "oklch(0.66 0.14 162)", "oklch(0.82 0.15 158)"],
+ "face_colors": [
+ "oklch(0.42 0.07 168)",
+ "oklch(0.27 0.05 172)"
+ ],
+ "band_colors": [
+ "oklch(0.36 0.07 170)",
+ "oklch(0.5 0.11 166)",
+ "oklch(0.66 0.14 162)",
+ "oklch(0.82 0.15 158)"
+ ],
"glyph_rotation": -45
},
- "swift-codex": {
- "hue": 272,
+ "swift-gyb": {
+ "hue": 195,
+ "mode": "deepen",
"bands": 3,
- "glyph": "prompt",
- "texture": "constellation",
- "glyph_rotation": -45,
- "face_colors": ["oklch(0.8 0.11 290)", "oklch(0.6 0.19 272)"],
- "band_colors": ["oklch(0.64 0.17 272)", "oklch(0.72 0.14 282)", "oklch(0.81 0.1 292)"]
+ "glyph": "braces",
+ "texture": "lines",
+ "glyph_rotation": -45
},
"swift-data-writable": {
"hue": 232,
@@ -243,41 +342,132 @@ changing its entry and replace the repository's `Logo.svg` and `Logo.png`.
"texture": "grid",
"glyph_rotation": -45
},
- "swift-gyb": {
- "hue": 195,
- "mode": "deepen",
+ "skills": {
+ "hue": 260,
+ "face_colors": [
+ "oklch(0.4 0.01 260)",
+ "oklch(0.33 0.01 260)"
+ ],
+ "neutral_bands": "glow",
"bands": 3,
- "glyph": "braces",
- "texture": "lines",
+ "glyph": "spark",
+ "glyph_hue": 92,
+ "texture": "constellation",
"glyph_rotation": -45
},
+ "swift-codex": {
+ "hue": 272,
+ "bands": 3,
+ "glyph": "prompt",
+ "texture": "constellation",
+ "glyph_rotation": -45,
+ "face_colors": [
+ "oklch(0.8 0.11 290)",
+ "oklch(0.6 0.19 272)"
+ ],
+ "band_colors": [
+ "oklch(0.64 0.17 272)",
+ "oklch(0.72 0.14 282)",
+ "oklch(0.81 0.1 292)"
+ ]
+ },
+ "swift-json-schema": {
+ "hue": 292,
+ "mode": "glow",
+ "bands": 3,
+ "texture": "grid",
+ "texture_opacity": 0.16,
+ "face_colors": [
+ "oklch(0.47 0.16 295)",
+ "oklch(0.34 0.13 290)"
+ ],
+ "band_colors": [
+ "oklch(0.42 0.16 292)",
+ "oklch(0.57 0.19 292)",
+ "oklch(0.73 0.14 292)"
+ ],
+ "glyph_rotation": -45,
+ "glyph_scale": 0.32,
+ "custom_glyph": {
+ "style": "stroke",
+ "width": 0.16,
+ "d": "M-0.44 -0.76 H-0.62 Q-0.78 -0.76 -0.78 -0.52 V-0.22 Q-0.78 0 -0.98 0 Q-0.78 0 -0.78 0.22 V0.52 Q-0.78 0.76 -0.62 0.76 H-0.44 M0.44 -0.76 H0.62 Q0.78 -0.76 0.78 -0.52 V-0.22 Q0.78 0 0.98 0 Q0.78 0 0.78 0.22 V0.52 Q0.78 0.76 0.62 0.76 H0.44",
+ "extra": "M-0.28 0.02 L-0.06 0.24 L0.34 -0.24"
+ }
+ },
"swift-redux": {
"hue": 312,
- "face_colors": ["oklch(1 0 0)", "oklch(0.95 0.004 312)"],
- "band_colors": ["oklch(0.92 0.004 312)", "oklch(0.66 0.15 316)", "oklch(0.57 0.15 306)"],
+ "face_colors": [
+ "oklch(1 0 0)",
+ "oklch(0.95 0.004 312)"
+ ],
+ "band_colors": [
+ "oklch(0.92 0.004 312)",
+ "oklch(0.66 0.15 316)",
+ "oklch(0.57 0.15 306)"
+ ],
"glyph": "loop3",
"glyph_rotation": -45,
"glyph_color": "oklch(0.6 0.18 314)",
"glyph_side": "oklch(0.46 0.15 308)",
"texture": "none"
},
- "swift-userdefault": {
- "hue": 10,
- "face_colors": ["oklch(0.72 0.18 8)", "oklch(0.64 0.21 14)"],
- "band_colors": ["oklch(0.58 0.21 18)", "oklch(0.67 0.2 10)", "oklch(0.8 0.11 2)"],
- "glyph": "toggle",
- "texture": "dots",
- "glyph_rotation": -45
- },
- "skills": {
- "hue": 260,
- "face_colors": ["oklch(0.4 0.01 260)", "oklch(0.33 0.01 260)"],
- "neutral_bands": "glow",
+ "swift-pdf": {
+ "hue": 338,
+ "mode": "deepen",
"bands": 3,
- "glyph": "spark",
- "glyph_hue": 92,
- "texture": "constellation",
- "glyph_rotation": -45
+ "texture": "lines",
+ "glyph_rotation": -45,
+ "glyph_scale": 0.33,
+ "drift": 0,
+ "vivid": 1.1,
+ "custom_glyph": {
+ "style": "stroke",
+ "width": 0.14,
+ "d": "M-0.58 -0.86 H0.22 L0.60 -0.48 V0.86 H-0.58 Z M0.22 -0.86 V-0.48 H0.60 M-0.32 -0.10 H0.34 M-0.32 0.20 H0.34 M-0.32 0.50 H0.10"
+ }
+ }
+ },
+ "app_icons": {
+ "swift-library": {
+ "background": "#f12e1d",
+ "gradient": true,
+ "groups": [
+ {
+ "name": "Warm dot field",
+ "layers": [
+ {
+ "source": "Brand/Avatar/Dots.svg",
+ "name": "Dots"
+ }
+ ],
+ "shadow": {
+ "kind": "neutral",
+ "opacity": 0
+ },
+ "translucency": {
+ "enabled": false,
+ "value": 0
+ }
+ },
+ {
+ "name": "Swift bird",
+ "layers": [
+ {
+ "source": "Brand/Avatar/Bird.svg",
+ "name": "Bird"
+ }
+ ],
+ "shadow": {
+ "kind": "neutral",
+ "opacity": 0.5
+ },
+ "translucency": {
+ "enabled": false,
+ "value": 0
+ }
+ }
+ ]
}
}
}
@@ -298,3 +488,49 @@ the color comes from the icon hue:
| 115 to 185 | `green` |
| 185 to 265 | `blue` |
| 265 to 330 | `purple` |
+
+## Website
+
+The project catalog gives the icon family space to carry the color. Page
+surfaces, navigation, borders, and typography stay neutral. The homepage uses
+a 128 px organization app icon above its name and purpose, followed by grouped
+project cards. Repository names, descriptions, versions, documentation links,
+and installation commands remain the primary content.
+
+### Typography and layout
+
+- Self-host the unmodified Inter 4.1 variable WOFF2 with its SIL Open Font
+ License. Use optical sizing, regular body copy, and semibold headings.
+- Limit the main content to 1120 px. Use a two-column catalog with 20 px gaps;
+ below 760 px use one column and 20 px page margins.
+- The hero heading scales from 44 to 72 px. Card headings use 21 px, body copy
+ 15 px, and supplementary labels at least 12 px. Installation commands use a
+ system monospace face and horizontal overflow within their own region.
+- Cards use a 20 px corner radius, a subtle border, and a solid surface. Their
+ repository icon is 64 px. Avoid extra decorative artwork around the family.
+- Navigation stays on one line. Put license, contributors, and versioning links
+ in the footer; the header links to contributing and GitHub.
+
+### Appearance tokens
+
+Use the system color preference with CSS. Clipboard copying is the only
+JavaScript behavior. Content and installation commands remain available
+without JavaScript or clipboard permission.
+
+| Role | Light | Dark |
+| --- | --- | --- |
+| Canvas | `#fbfbfd` | `#141417` |
+| Card | `#ffffff` | `#1d1d21` |
+| Command background | `#f0f0f3` | `#28282d` |
+| Main text | `#1d1d1f` | `#f5f5f7` |
+| Secondary text | `#424245` | `#d1d1d7` |
+| Supplementary text | `#606068` | `#aaaab3` |
+| Decorative border | `#d9d9df` | `#393940` |
+| Control border | `#76767c` | `#82828c` |
+| Focus ring | `#005cc5` | `#8eb8ff` |
+
+Text must meet WCAG AA contrast against its actual background. Controls retain
+visible keyboard focus, copy outcomes are announced through a status region,
+and motion respects reduced-motion preferences. Check the homepage,
+contributing page, and error page at desktop, intermediate, and mobile widths
+in both appearances before publishing.
diff --git a/Documentation/Assets/Logo.png b/Documentation/Assets/Logo.png
index 7922df5..b47aa53 100644
Binary files a/Documentation/Assets/Logo.png and b/Documentation/Assets/Logo.png differ
diff --git a/Documentation/Assets/Logo.svg b/Documentation/Assets/Logo.svg
index e315f4e..0773d97 100644
--- a/Documentation/Assets/Logo.svg
+++ b/Documentation/Assets/Logo.svg
@@ -1 +1 @@
-
+
diff --git a/profile/Assets/Logo.svg b/profile/Assets/Logo.svg
index e315f4e..0773d97 100644
--- a/profile/Assets/Logo.svg
+++ b/profile/Assets/Logo.svg
@@ -1 +1 @@
-
+