diff --git a/docs/THEMING.md b/docs/THEMING.md
index b3e57e6..9fa9cb2 100644
--- a/docs/THEMING.md
+++ b/docs/THEMING.md
@@ -6,16 +6,27 @@ How color, light/dark mode, section tone, and animation work on this site.
## Palette
-From the spec, exposed as CSS variables in `src/styles/themes.css` and mapped to
-Tailwind utilities in `src/styles/global.css`:
+The site uses the Patiun LLC brand palette (shared by Patiun and Greg Kilmer),
+exposed as CSS variables in `src/styles/global.css` under `@theme`:
| Token | Value | Meaning |
|---|---|---|
-| `--color-slate` | `#1E293B` | Professional confidence (primary) |
-| `--color-amber` | `#F59E0B` | Warm accent (the making/creative side) |
-| `--color-teal` | `#699a94` | Soft teal (secondary, favorite) |
-| `--color-ink` | `#0F172A` | Near-black text on light |
-| `--color-cream` | `#FFFBEB` | Cream-white text on dark |
+| `--color-teal` | `#14A39A` | Patiun Teal, primary: buttons, fills, the glyph |
+| `--color-teal-bright` | `#2BC2B7` | Teal text and links on dark grounds |
+| `--color-teal-deep` | `#0F8C84` | Teal marks on light grounds |
+| `--color-slate-teal` | `#2D4A58` | Dark end of the Tide gradient |
+| `--color-gold` | `#C9A24A` | Alchemist Gold: stars, rules, seal lines (never a large fill) |
+| `--color-gold-bright` | `#D8B35A` | Gold text on dark grounds |
+| `--color-gold-deep` | `#8A6516` | Gold text under 24px on Starlight |
+| `--color-violet` / `--color-indigo` | `#6A2FE0` / `#3B1F8F` | Nebula light only, never text |
+| `--color-midnight` | `#131C2B` | Panels, tiles, browser theme color |
+| `--color-sky` | `#0E1522` | Night-sky ground |
+| `--color-starlight` | `#F4F2ED` | Text on dark; paper ground |
+
+The semantic Tailwind tokens (`--color-accent`, `--color-surface`, ...) resolve
+at `:root`, so content sections render with the Starlight values in
+`themes.css`. Night-sky bands (the nav and page heroes) carry the `.on-sky`
+class, which re-points accent and gold to their on-dark values.
Brand colors are fixed. **Semantic** tokens (`--surface`, `--text`, `--accent`,
`--secondary`, `--border`, ...) resolve differently per theme + section, and are
@@ -118,9 +129,11 @@ reduce)')` before drawing, so even JS-driven motion is skipped.
Self-hosted variable fonts via Fontsource (woff2, no external requests):
-- **Headings / UI:** Plus Jakarta Sans Variable (geometric sans)
-- **Body:** Inter Variable
-- **Mono / kickers / quotes:** JetBrains Mono Variable
+- **Headings, names, card titles:** Cinzel Variable (`font-display`, used by
+ `h1`-`h4` automatically). Open tracking, never for paragraphs.
+- **Body and UI:** Montserrat Variable (`font-sans`, `font-body`).
+- **Eyebrows / kickers:** Montserrat uppercase with wide tracking (`font-eyebrow`).
+- **Code-like blocks only:** JetBrains Mono Variable (`font-mono`).
Font sizes use `clamp()` for fluid scaling (see the `h1`-`h4` rules in
`global.css`).
diff --git a/package-lock.json b/package-lock.json
index 777e9dd..11d5bf2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,9 +12,9 @@
"@astrojs/mdx": "^7.0.2",
"@astrojs/node": "^11.0.2",
"@astrojs/react": "^6.0.2",
- "@fontsource-variable/inter": "^5.2.8",
+ "@fontsource-variable/cinzel": "^5.3.0",
"@fontsource-variable/jetbrains-mono": "^5.2.8",
- "@fontsource-variable/plus-jakarta-sans": "^5.2.8",
+ "@fontsource-variable/montserrat": "^5.3.0",
"@iconify-json/mdi": "^1.2.3",
"@tailwindcss/vite": "^4.3.2",
"@types/nodemailer": "^8.0.1",
@@ -1389,10 +1389,10 @@
"node": ">=18"
}
},
- "node_modules/@fontsource-variable/inter": {
+ "node_modules/@fontsource-variable/cinzel": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.3.0.tgz",
- "integrity": "sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/cinzel/-/cinzel-5.3.0.tgz",
+ "integrity": "sha512-eFcU0TwaAP5QESF2pV8VoOPJJXJ6sSGm/6mXMwqTdMBPAJMaLhfa6oISHuOtFeddsoHP9RYm4Io0j1j3mNEz2Q==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
@@ -1407,10 +1407,10 @@
"url": "https://github.com/sponsors/ayuhito"
}
},
- "node_modules/@fontsource-variable/plus-jakarta-sans": {
+ "node_modules/@fontsource-variable/montserrat": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/plus-jakarta-sans/-/plus-jakarta-sans-5.3.0.tgz",
- "integrity": "sha512-/l/4r0yyWK9JzAlmA0LiYgGgmJe/Gswt4jTJEzr5QhJfwMbvJZDmYWyW0M4X7yCK69BajMVlV/Lx8g7WDc1+sw==",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/montserrat/-/montserrat-5.3.0.tgz",
+ "integrity": "sha512-7PaZoxaxrWLAyrhO46v65An9LhUhfkTExWLhfbywYZCnZEgg/W1rEHnlNmZKjNZ3nJTVYyicqxlJt10z/26yTA==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
diff --git a/package.json b/package.json
index d26a1b1..f432565 100644
--- a/package.json
+++ b/package.json
@@ -19,9 +19,9 @@
"@astrojs/mdx": "^7.0.2",
"@astrojs/node": "^11.0.2",
"@astrojs/react": "^6.0.2",
- "@fontsource-variable/inter": "^5.2.8",
+ "@fontsource-variable/cinzel": "^5.3.0",
"@fontsource-variable/jetbrains-mono": "^5.2.8",
- "@fontsource-variable/plus-jakarta-sans": "^5.2.8",
+ "@fontsource-variable/montserrat": "^5.3.0",
"@iconify-json/mdi": "^1.2.3",
"@tailwindcss/vite": "^4.3.2",
"@types/nodemailer": "^8.0.1",
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
deleted file mode 100644
index eb0469d..0000000
Binary files a/public/android-chrome-192x192.png and /dev/null differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
deleted file mode 100644
index 9f5102f..0000000
Binary files a/public/android-chrome-512x512.png and /dev/null differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
index d235de2..30ffa99 100644
Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ
diff --git a/public/favicon-16.png b/public/favicon-16.png
new file mode 100644
index 0000000..15b45bd
Binary files /dev/null and b/public/favicon-16.png differ
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
deleted file mode 100644
index d500618..0000000
Binary files a/public/favicon-16x16.png and /dev/null differ
diff --git a/public/favicon-32.png b/public/favicon-32.png
new file mode 100644
index 0000000..832fc93
Binary files /dev/null and b/public/favicon-32.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
deleted file mode 100644
index 307e061..0000000
Binary files a/public/favicon-32x32.png and /dev/null differ
diff --git a/public/favicon-48.png b/public/favicon-48.png
new file mode 100644
index 0000000..c61adc2
Binary files /dev/null and b/public/favicon-48.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
index d698140..46e2cb4 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/favicon.svg b/public/favicon.svg
index f7aa549..d9761cb 100644
--- a/public/favicon.svg
+++ b/public/favicon.svg
@@ -1,15 +1 @@
-
+
\ No newline at end of file
diff --git a/public/icon-192.png b/public/icon-192.png
new file mode 100644
index 0000000..25a1055
Binary files /dev/null and b/public/icon-192.png differ
diff --git a/public/icon-512.png b/public/icon-512.png
new file mode 100644
index 0000000..fcada0b
Binary files /dev/null and b/public/icon-512.png differ
diff --git a/public/icon-maskable-192.png b/public/icon-maskable-192.png
new file mode 100644
index 0000000..2d0d1da
Binary files /dev/null and b/public/icon-maskable-192.png differ
diff --git a/public/icon-maskable-512.png b/public/icon-maskable-512.png
new file mode 100644
index 0000000..c44a1c1
Binary files /dev/null and b/public/icon-maskable-512.png differ
diff --git a/public/site.webmanifest b/public/site.webmanifest
index 45dc8a2..0c8d74d 100644
--- a/public/site.webmanifest
+++ b/public/site.webmanifest
@@ -1 +1,33 @@
-{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
+{
+ "name": "Greg Kilmer Web Development",
+ "short_name": "Greg Kilmer",
+ "description": "Web development by Greg Kilmer, a Patiun LLC company.",
+ "icons": [
+ {
+ "src": "/icon-192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/icon-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ },
+ {
+ "src": "/icon-maskable-192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/icon-maskable-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ],
+ "theme_color": "#131C2B",
+ "background_color": "#131C2B",
+ "display": "standalone",
+ "start_url": "/"
+}
diff --git a/src/components/brand/PatiunGlyph.astro b/src/components/brand/PatiunGlyph.astro
new file mode 100644
index 0000000..fe68e2f
--- /dev/null
+++ b/src/components/brand/PatiunGlyph.astro
@@ -0,0 +1,40 @@
+---
+/**
+ * PatiunGlyph.astro
+ * ---------------------------------------------------------------------------
+ * The Patiun LLC main mark: the alchemical symbol for platinum (the moon of
+ * silver joined to the sun of gold). Used small as the maker's mark in the
+ * Greg Kilmer lockup. Geometry is copied unchanged from the brand file
+ * patiun-symbol-A-exact-teal.svg; only the color is themable.
+ *
+ * Brand rules: Patiun Teal by default (gold, black or white are the only
+ * other allowed colors), no rings around it at small sizes, minimum 16px, and
+ * text sits beside it, never over it.
+ *
+ * Usage:
{blurb}
diff --git a/src/components/cards/InterestCard.astro b/src/components/cards/InterestCard.astro
index 7575e67..77181e9 100644
--- a/src/components/cards/InterestCard.astro
+++ b/src/components/cards/InterestCard.astro
@@ -41,7 +41,7 @@ const { icon, title, status, currently = false, class: className = '' } = Astro.
+
{siteIdentity.name}
-+
{footerMicrocopy}
{tagline}
diff --git a/src/components/layout/Placeholder.astro b/src/components/layout/Placeholder.astro index 84a3ced..70d421c 100644 --- a/src/components/layout/Placeholder.astro +++ b/src/components/layout/Placeholder.astro @@ -40,7 +40,7 @@ const { label, hint, class: className = '' } = Astro.props;{hint}
} diff --git a/src/components/layout/RelatedInterests.astro b/src/components/layout/RelatedInterests.astro index f3f6178..6e875cf 100644 --- a/src/components/layout/RelatedInterests.astro +++ b/src/components/layout/RelatedInterests.astro @@ -23,7 +23,7 @@ const { items } = Astro.props; ---{c.issuer}
{c.year} diff --git a/src/components/professional/ContactForm.tsx b/src/components/professional/ContactForm.tsx index edf3cbc..3ead27c 100644 --- a/src/components/professional/ContactForm.tsx +++ b/src/components/professional/ContactForm.tsx @@ -223,7 +223,7 @@ export default function ContactForm({ turnstileSiteKey }: Props) {
diff --git a/src/components/professional/EducationHistory.astro b/src/components/professional/EducationHistory.astro
index 3c4c488..c5580a6 100644
--- a/src/components/professional/EducationHistory.astro
+++ b/src/components/professional/EducationHistory.astro
@@ -45,7 +45,7 @@ const entries: EduEntry[] = [
{e.period}
diff --git a/src/components/professional/ProjectCard.astro b/src/components/professional/ProjectCard.astro
index 08641c5..0be0cb3 100644
--- a/src/components/professional/ProjectCard.astro
+++ b/src/components/professional/ProjectCard.astro
@@ -33,7 +33,7 @@ const links = [
+
{d.role}
diff --git a/src/components/store/PricingTable.astro b/src/components/store/PricingTable.astro
index 9313fbf..53f98f8 100644
--- a/src/components/store/PricingTable.astro
+++ b/src/components/store/PricingTable.astro
@@ -60,7 +60,7 @@ const { icon, caption, tiers, priceHeader = 'Price', subtitle } = Astro.props;
({tier.note})
)}
- {d.title}
-
+
Core Competencies
@@ -112,7 +112,7 @@ const techStack = [
Technical Stack
+ Technical Stack
+
-
+
{entry.data.period}
Emerging & Exploring
diff --git a/src/components/professional/Timeline.astro b/src/components/professional/Timeline.astro
index c379bf5..41bbaa5 100644
--- a/src/components/professional/Timeline.astro
+++ b/src/components/professional/Timeline.astro
@@ -50,7 +50,7 @@ const rendered = await Promise.all(
{entry.data.company}
+
Order request sent.
+
{tier.price}
diff --git a/src/components/store/ProductTile.astro b/src/components/store/ProductTile.astro
index e795e25..dcb5cce 100644
--- a/src/components/store/ProductTile.astro
+++ b/src/components/store/ProductTile.astro
@@ -37,8 +37,8 @@ const cover = product.images[0];
/>
{product.images.length > 1 && (