diff --git a/CLAUDE.md b/CLAUDE.md index 0266967..014dc72 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,8 +38,12 @@ unchanged. The build is a static export deployed to GitHub Pages. (`work.html`, `assets/css/style.css`, `favicon.svg`) so the site works under both the GitHub Pages subpath and the apex domain. `base` stays `/`; do not switch to root-absolute asset paths. -- **House voice uses em dashes** and all-caps letter-spaced labels. Match the existing - editorial tone; do not strip em dashes in this repo (content or code). +- **Never use em dashes in copy** — not in page content, titles, metadata, alt text, + UI strings, or anything else that ships. Restructure the sentence instead: a comma, + colon, or period in prose, a pipe in titles. `tools/validate_site.py` fails CI on + any em dash (or `—` entity) in the built output. The house voice keeps the + all-caps letter-spaced labels and the editorial tone; it just makes its cuts with + other punctuation. - Keep metadata honest and present-day. No Wix boilerplate ("Mysite", "Cordan", lorem ipsum) — CI fails on it. @@ -149,7 +153,8 @@ Two dependency-free validators guard the repo; they read the build output. Run (`.github/workflows/ci.yml`) builds then runs both on every push and PR: - `python3 tools/validate_site.py [dir]` — internal links and anchors resolve, gallery - keys match their JSON, no template junk. Reports unfilled `assets/img/` slots as INFO. + keys match their JSON, no template junk, and no em dashes (literal or entity) in any + shipped text file. Reports unfilled `assets/img/` slots as INFO. - `python3 tools/seo_check.py [dir]` — the SEO invariants (one `
I earned a BFA in acting before I ever pulled a rack of clothes. When I fell into fashion, I fell hard — and I brought the actor's toolkit with me. I still work a shoot the way I'd work a role, asking three questions: what story am I telling, who is the person wearing the clothes, and how do the clothes change them? An editorial isn't an outfit. It's a mini-play.
-That instinct got noticed early. Nikki Fowler, editor-in-chief of Glitter Magazine, was the first to believe in me as an editorial stylist — she let me style the spreads, art direct, and produce the shoots. I joined the developmental creative team at Ladygunn, sharpened my styling and my art direction, and became fashion editor at Sheen Magazine and host of The Journey on Sheen Talk Live.
+I earned a BFA in acting before I ever pulled a rack of clothes. When I fell into fashion, I fell hard, and I brought the actor's toolkit with me. I still work a shoot the way I'd work a role, asking three questions: what story am I telling, who is the person wearing the clothes, and how do the clothes change them? An editorial isn't an outfit. It's a mini-play.
+That instinct got noticed early. Nikki Fowler, editor-in-chief of Glitter Magazine, was the first to believe in me as an editorial stylist: she let me style the spreads, art direct, and produce the shoots. I joined the developmental creative team at Ladygunn, sharpened my styling and my art direction, and became fashion editor at Sheen Magazine and host of The Journey on Sheen Talk Live.
Then came the work most people know me for: celebrity and red-carpet styling for Macy Gray, Skai Jackson, Norman Reedus, Keesha Sharp, EJ Johnson, and Garcelle Beauvais; editorial and commercial campaigns; and commentary in TIME and Glamour on how clothes shape the way we're read.
-These days I work upstream. I lead visual merchandising and styling in enterprise fashion at Walmart — the largest retailer in the world. I develop the central concept, set the point of view, turn business goals into a visual language, and direct the teams that execute it at national scale. I didn't leave styling behind. I built on top of it. The years of sourcing, fitting, and producing are exactly what make my direction credible: I know what it takes to turn an idea into clothes, sets, people, stores, and campaigns.
-The through-line hasn't changed since the acting classroom. Style is how people and brands tell the world who they are — and who they intend to become. My job is to help them tell it well.
+These days I work upstream. I lead visual merchandising and styling in enterprise fashion at Walmart, the largest retailer in the world. I develop the central concept, set the point of view, turn business goals into a visual language, and direct the teams that execute it at national scale. I didn't leave styling behind. I built on top of it. The years of sourcing, fitting, and producing are exactly what make my direction credible: I know what it takes to turn an idea into clothes, sets, people, stores, and campaigns.
+The through-line hasn't changed since the acting classroom. Style is how people and brands tell the world who they are, and who they intend to become. My job is to help them tell it well.
arc: eyebrow: "The arc" heading: "Executor to leader." items: - year: "Start" title: "Trained as an actor" - body: "BFA in acting — the origin of a story-first method." + body: "BFA in acting: the origin of a story-first method." - year: "Editorial" title: "Glitter Magazine" body: "First championed as an editorial stylist, art director, and producer by EIC Nikki Fowler." @@ -34,13 +34,13 @@ arc: body: "Honed styling and art direction on the developmental creative team." - year: "Voice" title: "Sheen Magazine & Sheen Talk Live" - body: "Fashion editor, and host of The Journey — building the on-camera voice." + body: "Fashion editor and host of The Journey, building the on-camera voice." - year: "Profile" title: "Celebrity styling · TIME · Glamour" body: "Red-carpet and editorial work, plus national commentary on style and perception." - year: "Now" title: "Enterprise fashion leadership" - body: "I lead visual merchandising and styling at Walmart — creative direction at national retail scale." + body: "I lead visual merchandising and styling at Walmart: creative direction at national retail scale." cta: heading: "Work with me." body: "Creative direction, visual strategy, speaking, hosting, or personal styling." diff --git a/content/contact.yaml b/content/contact.yaml index 0c62995..cbda758 100644 --- a/content/contact.yaml +++ b/content/contact.yaml @@ -1,13 +1,13 @@ seo: - title: "Contact & Book — Quentin Fears" + title: "Contact & Book | Quentin Fears" description: "Contact Quentin Fears for corporate creative direction, speaking, media and hosting, or personal styling. One form, routed to the right conversation." - ogTitle: "Contact & Book — Quentin Fears" + ogTitle: "Contact & Book | Quentin Fears" ogDescription: "Corporate creative direction, speaking, media, or personal styling." ogType: "website" hero: eyebrow: "Contact & book" heading: "Tell me what you have in mind." - intro: "Shaping a brand, programming an event, casting a host, or investing in how you show up — whatever it is, tell me about it and I'll come back to you." + intro: "Shaping a brand, programming an event, casting a host, or investing in how you show up. Whatever it is, tell me about it and I'll come back to you." inquiries: - asideTitle: "Corporate & enterprise" asideBody: "Creative direction, visual strategy, and campaign consulting." diff --git a/content/home.yaml b/content/home.yaml index 66063c6..ad0be3a 100644 --- a/content/home.yaml +++ b/content/home.yaml @@ -1,13 +1,13 @@ seo: - title: "Quentin Fears — Fashion Creative Leader & Visual Strategist" - description: "Quentin Fears is a fashion creative leader, visual strategist, speaker, and host — helping brands and people communicate who they are through style." - ogTitle: "Quentin Fears — Fashion Creative Leader & Visual Strategist" - ogDescription: "Helping brands and people communicate who they are — and who they're becoming — through style." + title: "Quentin Fears | Fashion Creative Leader & Visual Strategist" + description: "Quentin Fears is a fashion creative leader, visual strategist, speaker, and host, helping brands and people communicate who they are through style." + ogTitle: "Quentin Fears | Fashion Creative Leader & Visual Strategist" + ogDescription: "Helping brands and people communicate who they are, and who they're becoming, through style." ogType: "website" hero: eyebrow: "Fashion creative leadership & visual strategy" role: "Fashion creative leader, visual strategist, speaker & host." - philosophy: "I help brands and people use style to say who they are — and who they're becoming. I've spent a decade proving it look by look. Now I direct the vision." + philosophy: "I help brands and people use style to say who they are, and who they're becoming. I've spent a decade proving it look by look. Now I direct the vision." buttons: - label: "Start a project" href: "contact.html" @@ -25,11 +25,11 @@ hero: src: "assets/img/hero-portrait.jpg" alt: "Quentin Fears" tag: "Portrait" - label: "Quentin Fears — directing on set" + label: "Quentin Fears directing on set" proof: - num: "01" title: "I lead at scale" - body: "I direct visual merchandising and styling in enterprise fashion at Walmart — the largest retailer in the world." + body: "I direct visual merchandising and styling in enterprise fashion at Walmart, the largest retailer in the world." - num: "02" title: "I'm quoted on it" body: "TIME and Glamour have come to me on how what you wear changes the way you're read at work." @@ -47,7 +47,7 @@ selectedWork: cards: - tag: "Enterprise" title: "Making an everyday brand feel intentional" - body: "I turn business goals into a visual language — across campaigns, store floors, and the teams who build them." + body: "I turn business goals into a visual language across campaigns, store floors, and the teams who build them." href: "work.html" - tag: "Point of view" title: "The office dress code, after it broke" @@ -55,7 +55,7 @@ selectedWork: href: "ideas.html" - tag: "Editorial" title: "Styling as a mini-play" - body: "I treat a shoot like a role — story, character, and what the clothes do to the person wearing them." + body: "I treat a shoot like a role: story, character, and what the clothes do to the person wearing them." href: "work.html" moreLabel: "See the full body of work" moreHref: "work.html" @@ -77,7 +77,7 @@ testimonials: - quote: "He listens first, then translates exactly what you're trying to say into something you can see and wear." name: "Santana Dempsey" role: "Actor & client" - - quote: "Reliable on set and a real collaborator on the design — he understands what it takes to actually produce the work." + - quote: "Reliable on set and a real collaborator on the design. He understands what it takes to actually produce the work." name: "Brian S." role: "Photographer & collaborator" - quote: "He stepped into a mentor role and taught me a whole language of how to dress." diff --git a/content/ideas.yaml b/content/ideas.yaml index 102a24a..300969a 100644 --- a/content/ideas.yaml +++ b/content/ideas.yaml @@ -1,7 +1,7 @@ seo: - title: "Ideas — Quentin Fears | Style, identity & perception" - description: "Quentin Fears on style as strategy: how clothing shapes identity, perception, and possibility — with his TIME commentary and closet-cleanse thesis." - ogTitle: "Ideas — Quentin Fears" + title: "Ideas | Quentin Fears | Style, identity & perception" + description: "Quentin Fears on style as strategy: how clothing shapes identity, perception, and possibility, with his TIME commentary and closet-cleanse thesis." + ogTitle: "Ideas | Quentin Fears" ogDescription: "Style as strategy: identity, perception, and possibility." ogType: "website" hero: @@ -14,11 +14,11 @@ timeFeature: alt: "Quentin Fears in TIME" tag: "TIME" label: "Featured in TIME Magazine" - eyebrow: "Featured — TIME" + eyebrow: "Featured in TIME" heading: "New rules for office dressing" - pullquote: "Before, there was a stuffy sort of, \"we all need to dress this one way\" as part of what it means to be a professional. You would assume someone wearing a suit has a lot of money. Now that's been flipped on its head — the guy in the hoodie makes just as much, or maybe more." - attribution: "Quentin Fears — TIME, \"The Return to the Workplace Means New Rules for Office Dressing\"" - lead: "The real subject isn't hemlines. It's how dress, identity, race, and perception tangle together. Clothing is never neutral. It gets read — and it gets read differently depending on who's wearing it. That's the territory I speak and write about." + pullquote: "Before, there was a stuffy sort of, \"we all need to dress this one way\" as part of what it means to be a professional. You would assume someone wearing a suit has a lot of money. Now that's been flipped on its head: the guy in the hoodie makes just as much, or maybe more." + attribution: "Quentin Fears in TIME, \"The Return to the Workplace Means New Rules for Office Dressing\"" + lead: "The real subject isn't hemlines. It's how dress, identity, race, and perception tangle together. Clothing is never neutral. It gets read, and it gets read differently depending on who's wearing it. That's the territory I speak and write about." thesis: eyebrow: "A recurring thesis" quote: "Making room in your closet is making room in your life." @@ -34,31 +34,31 @@ notes: - title: "Aspiration without intimidation" body: "Good style work makes people reach higher without making them feel shut out. Accessible and aspirational are not opposites." - title: "Confidence is a skill" - body: "How you walk into a room can be practiced. Clothing is the fastest lever I know — and it works before you say a word." + body: "How you walk into a room can be practiced. Clothing is the fastest lever I know, and it works before you say a word." reels: eyebrow: "In motion" heading: "Short reels, same throughline." - intro: "Quick style ideas from the feed — tap to play." + intro: "Quick style ideas from the feed. Tap to play." items: - poster: src: "assets/img/reel-possibilities.jpg" - alt: "Quentin Fears reel — style is about possibilities" + alt: "Quentin Fears reel: style is about possibilities" tag: "Reel" label: "Instagram reel" - caption: "Style isn't about outfits — it's about possibilities. Every piece has more than one life." + caption: "Style isn't about outfits. It's about possibilities. Every piece has more than one life." permalink: "https://www.instagram.com/p/DaiPc-DhCht/" videoSrc: "assets/video/reel-possibilities.mp4" - poster: src: "assets/img/reel-character.jpg" - alt: "Quentin Fears reel — character development, not outfit changes" + alt: "Quentin Fears reel: character development, not outfit changes" tag: "Reel" label: "Instagram reel" - caption: "Not outfit changes — character development. Same person, different edit." + caption: "Not outfit changes. Character development. Same person, different edit." permalink: "https://www.instagram.com/p/DZ5BlpcRzZv/" videoSrc: "assets/video/reel-character.mp4" - poster: src: "assets/img/reel-closet.jpg" - alt: "Quentin Fears reel — a closet cleanse can be a soul cleanse" + alt: "Quentin Fears reel: a closet cleanse can be a soul cleanse" tag: "Reel" label: "Instagram reel" caption: "Sometimes making room in your closet is the first step to making room in your life." @@ -67,7 +67,7 @@ reels: formats: eyebrow: "Signature formats" heading: "Three series I keep coming back to." - intro: "The recurring formats that carry these ideas across social, speaking, and — eventually — a book." + intro: "The recurring formats that carry these ideas across social, speaking, and eventually a book." items: - tag: "Series 01" title: "Dress With Intent" @@ -77,7 +77,7 @@ formats: body: "I take a finished piece of work apart: the problem, the story, the constraints, the calls I made." - tag: "Series 03" title: "The Come-Up" - body: "Letters to people starting out in fashion — and the working notebook for a book I'm going to write." + body: "Letters to people starting out in fashion, and the working notebook for a book I'm going to write." cta: heading: "I bring these ideas to stages, panels, and classrooms." body: "Keynotes, panels, and workshops built from this point of view." diff --git a/content/settings.yaml b/content/settings.yaml index 7d8f391..5fc002f 100644 --- a/content/settings.yaml +++ b/content/settings.yaml @@ -2,7 +2,7 @@ email: "hello@quentinfears.com" instagram: "https://www.instagram.com/mrqfears/" instagramHandle: "@mrqfears" linkedin: "https://www.linkedin.com/in/quentin-fears-158a5024/" -footerBlurb: "I help brands and people use style to say who they are — and who they're becoming." -tagline: "Don't just wear clothes — wear confidence." +footerBlurb: "I help brands and people use style to say who they are, and who they're becoming." +tagline: "Don't just wear clothes, wear confidence." copyrightName: "Quentin Fears" copyrightYear: "2026" diff --git a/content/speak.yaml b/content/speak.yaml index e825ed3..60cd67b 100644 --- a/content/speak.yaml +++ b/content/speak.yaml @@ -1,20 +1,20 @@ seo: - title: "Speak & Host — Quentin Fears | Keynotes, panels, hosting" + title: "Speak & Host | Quentin Fears | Keynotes, panels, hosting" description: "Book Quentin Fears to speak and host: keynotes, panels, workshops, and on-camera hosting on style, perception, and creative leadership." - ogTitle: "Speak & Host — Quentin Fears" + ogTitle: "Speak & Host | Quentin Fears" ogDescription: "Keynotes, panels, workshops, and on-camera hosting on style, identity, and creative leadership." ogType: "website" hero: eyebrow: "Speak & host" heading: "A fashion voice, on any stage." - intro: "I make style make sense — for a leadership summit, a fashion school, a panel, a podcast, or a camera. I keynote, moderate, teach, and host, and I bring both a point of view and the on-set years to back it up." + intro: "I make style make sense for a leadership summit, a fashion school, a panel, a podcast, or a camera. I keynote, moderate, teach, and host, and I bring both a point of view and the on-set years to back it up." buttonLabel: "Book Quentin" stage: image: src: "assets/img/speak-stage.jpg" alt: "Quentin Fears speaking on stage at the 100 Black Men of America national conference" tag: "On stage" - label: "100 Black Men of America — National Conference" + label: "100 Black Men of America National Conference" caption: "On stage at the 100 Black Men of America National Conference." reel: youtubeId: "7EeeYig__4o" @@ -23,23 +23,23 @@ reel: src: "assets/img/speak-reel.jpg" alt: "Quentin Fears hosting on Sheen Talk Live" tag: "Sheen Talk Live" - label: "Hosting — Quentin Fears" + label: "Quentin Fears hosting" caption: "Hosting The Journey on Sheen Talk Live. Full episodes below." topics: eyebrow: "Talk topics" heading: "Six talks, one throughline." - intro: "Each flexes from a 15-minute fireside to a half-day workshop. I'll tailor the framing to your audience — corporate, education, or industry." + intro: "Each flexes from a 15-minute fireside to a half-day workshop. I'll tailor the framing to your audience: corporate, education, or industry." items: - title: "How style shapes perception" - body: "Why what we wear is read as data — and how to control the signal on purpose." + body: "Why what we wear is read as data, and how to control the signal on purpose." - title: "Dressing with intent" body: "A practical, psychological framework for using clothing to support who you're becoming." - title: "From executor to creative leader" - body: "The shift from doing the work to directing it — how I made it, and how you can." + body: "The shift from doing the work to directing it: how I made it, and how you can." - title: "Building a career in fashion" body: "Honest lessons on breaking in, standing out, and advancing in a crowded creative industry." - title: "Visual identity & professional growth" - body: "How presentation affects advancement — and what it means to dress for the room you want." + body: "How presentation affects advancement, and what it means to dress for the room you want." - title: "Aspiration without intimidation" body: "Making fashion accessible to everyone without stripping out the magic that makes it aspirational." formats: @@ -57,7 +57,7 @@ formats: media: eyebrow: "On camera" heading: "This isn't a claim. The footage exists." - intro: "I host The Journey on Sheen Talk Live — long-form conversations with people who shape culture. A few episodes:" + intro: "I host The Journey on Sheen Talk Live: long-form conversations with people who shape culture. A few episodes:" episodes: - href: "https://www.youtube.com/watch?v=WR8hbFuHeqg" thumbSrc: "assets/img/media-larry.jpg" diff --git a/content/work.yaml b/content/work.yaml index 975ad91..d3c36ad 100644 --- a/content/work.yaml +++ b/content/work.yaml @@ -1,13 +1,13 @@ seo: - title: "Work — Quentin Fears | Fashion direction case studies" - description: "Selected work by Quentin Fears — enterprise visual merchandising, cultural commentary, editorial art direction, and celebrity styling, told as case studies." - ogTitle: "Work — Quentin Fears" + title: "Work | Quentin Fears | Fashion direction case studies" + description: "Selected work by Quentin Fears: enterprise visual merchandising, cultural commentary, editorial art direction, and celebrity styling, told as case studies." + ogTitle: "Work | Quentin Fears" ogDescription: "Case studies in fashion direction, visual strategy, and styling." ogType: "website" hero: eyebrow: "Work" heading: "Selected work" - intro: "Not galleries — cases. For each one: the problem I walked into, the story we had to tell, the calls I made, and what came out the other side. The pictures are proof. The thinking is the point." + intro: "Not galleries. Cases. For each one: the problem I walked into, the story we had to tell, the calls I made, and what came out the other side. The pictures are proof. The thinking is the point." cases: - tag: "Enterprise · Visual strategy" title: "Making an everyday brand feel intentional" @@ -15,17 +15,17 @@ cases: src: "assets/img/work-enterprise.jpg" alt: "Enterprise visual merchandising work" tag: "Enterprise" - label: "National retail campaign — creative direction" + label: "National retail campaign: creative direction" gallery: "commercial" meta: - dt: "The problem" - dd: "A Fortune 1 retailer needed one fashion point of view — across campaigns, store floors, and every place a customer sees it." + dd: "A Fortune 1 retailer needed one fashion point of view across campaigns, store floors, and every place a customer sees it." - dt: "The story" dd: "Everyday doesn't have to mean afterthought. I wanted the clothes to look chosen: aspirational, but never out of reach." - dt: "What I did" dd: "Set the visual language, directed how looks read on the floor and on camera, and guided teams across merchandising, marketing, and production." - dt: "The result" - dd: "Execution that holds the vision at scale — led, not just staffed." + dd: "Execution that holds the vision at scale. Led, not just staffed." footerKind: "note" footerText: "I keep the specifics generic out of respect for my employer. Happy to say more with approval." footerHref: "" @@ -35,13 +35,13 @@ cases: src: "assets/img/work-time.jpg" alt: "TIME feature on office dressing" tag: "Point of view" - label: "TIME — new rules for office dressing" + label: "TIME: new rules for office dressing" gallery: "editorial" meta: - dt: "The problem" dd: "Offices reopened and nobody knew what \"professional\" meant anymore. TIME asked me to explain it to a national audience." - dt: "The story" - dd: "A suit used to signal money and seriousness. After 2020 that signal broke — and it never read the same for everyone wearing it." + dd: "A suit used to signal money and seriousness. After 2020 that signal broke, and it never read the same for everyone wearing it." - dt: "What I said" dd: "\"You would assume someone wearing a suit has a lot of money. Now that's been flipped on its head. The guy in the hoodie makes just as much, or maybe more.\"" - dt: "The result" @@ -55,15 +55,15 @@ cases: src: "assets/img/work-editorial.jpg" alt: "Editorial art direction" tag: "Editorial" - label: "Editorial art direction — Glitter & Ladygunn" + label: "Editorial art direction: Glitter & Ladygunn" gallery: "editorial" meta: - dt: "The problem" - dd: "An editorial page is blank until someone decides what it's about. At Glitter and Ladygunn, that was my call — as stylist and art director both." + dd: "An editorial page is blank until someone decides what it's about. At Glitter and Ladygunn, that was my call, as stylist and art director both." - dt: "The story" dd: "I treat a shoot like a role. What story are we telling, who is this person, and what do the clothes do to them?" - dt: "What I did" - dd: "Ran concept, mood, styling, and art direction as one authored point of view — not four separate jobs." + dd: "Ran concept, mood, styling, and art direction as one authored point of view, not four separate jobs." - dt: "The result" dd: "A method I still use, narrative first, now scaled from a single spread to a national campaign." footerKind: "none" @@ -81,18 +81,18 @@ cases: - dt: "The problem" dd: "On a carpet or a cover, the image is the whole message, and there's exactly one chance to get it right." - dt: "The story" - dd: "I dress the person, not the trend — so the look says something true about who they are and where they're headed." + dd: "I dress the person, not the trend, so the look says something true about who they are and where they're headed." - dt: "What I did" dd: "Sourcing, fittings, and on-the-day calls under real limits of time, body, and press." - dt: "The result" - dd: "Work for Macy Gray, Skai Jackson, Norman Reedus, Keesha Sharp, EJ Johnson, and Garcelle Beauvais — plus covers including Sheen." + dd: "Work for Macy Gray, Skai Jackson, Norman Reedus, Keesha Sharp, EJ Johnson, and Garcelle Beauvais, plus covers including Sheen." footerKind: "none" footerText: "" footerHref: "" archive: eyebrow: "Selected styling archive" heading: "A decade of execution." - intro: "Celebrity, red carpet, editorial, commercial. It's here so you know the opinions are earned — I've done the work they're built on." + intro: "Celebrity, red carpet, editorial, commercial. It's here so you know the opinions are earned. I've done the work they're built on." items: - src: "assets/img/archive-01.jpg" alt: "Menswear styling" diff --git a/keystatic.config.ts b/keystatic.config.ts index 918548d..f28679c 100644 --- a/keystatic.config.ts +++ b/keystatic.config.ts @@ -10,8 +10,8 @@ import { config, fields, singleton } from '@keystatic/core'; * no-code-editable at /keystatic. * * Storage selects automatically: - * - `astro dev` (local editing): `local` — edits write the content/ files here. - * - any build (the hosted admin): `github` — commits straight to the repo via the + * - `astro dev` (local editing): `local`; edits write the content/ files here. + * - any build (the hosted admin): `github`; commits straight to the repo via the * GitHub App, which triggers the GitHub Pages deploy. See docs/hosted-admin.md. * * This uses `import.meta.env.DEV` (not process.env): Vite inlines it into the @@ -87,7 +87,7 @@ const textItem = (label = 'Value') => fields.text({ label }); export default config({ storage, ui: { - brand: { name: 'Quentin Fears — site content' }, + brand: { name: 'Quentin Fears site content' }, navigation: { Pages: ['home', 'work', 'ideas', 'speak', 'about', 'contact'], Shared: ['settings', 'galleries'], @@ -339,7 +339,7 @@ export default config({ caption: fields.text({ label: 'Caption / idea', multiline: true }), permalink: fields.text({ label: 'Instagram permalink', - description: 'https://www.instagram.com/p// — used as the link when no self-hosted video is set',
+ description: 'https://www.instagram.com/p//, used as the link when no self-hosted video is set',
}),
videoSrc: fields.text({
label: 'Self-hosted video path (optional)',
diff --git a/public/assets/css/style.css b/public/assets/css/style.css
index 9a2c06b..69a0b90 100644
--- a/public/assets/css/style.css
+++ b/public/assets/css/style.css
@@ -1,5 +1,5 @@
/* ============================================================
- Quentin Fears — repositioned site
+ Quentin Fears repositioned site
Design system: dark editorial base carried over from the
current site, elevated for a creative-leadership platform.
Self-contained: system font stacks, no external dependencies.
@@ -416,7 +416,7 @@ button { font: inherit; cursor: pointer; }
.reel__play svg { width: 22px; height: 22px; margin-left: 3px; }
.reel:hover .reel__play svg path { fill: #0b0b0c; }
-/* Reels: vertical cards — self-hosted video (curated) or a link to Instagram */
+/* Reels: vertical cards, self-hosted video (curated) or a link to Instagram */
.reels { display: grid; gap: 1.4rem 1rem; grid-template-columns: repeat(2, 1fr); }
@media (min-width: 640px) { .reels { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 900px) { .reels { grid-template-columns: repeat(4, 1fr); } }
@@ -531,7 +531,7 @@ button { font: inherit; cursor: pointer; }
Reveal on scroll
============================================================ */
/* Reveal is a progressive enhancement: only hidden once JS confirms support
- (html.js). Without JS — or with reduced motion — everything is visible. */
+ (html.js). Without JS, or with reduced motion, everything is visible. */
.js .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.8s var(--ease), transform 0.8s var(--ease); }
.js .reveal.is-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
@@ -544,7 +544,7 @@ button { font: inherit; cursor: pointer; }
.skip:focus { left: 0.5rem; top: 0.5rem; }
/* ============================================================
- Portfolio link overlay — click a tile to see more on the site
+ Portfolio link overlay: click a tile to see more on the site
============================================================ */
.ph-link { position: absolute; inset: 0; z-index: 4; cursor: pointer; display: block;
background: none; border: 0; padding: 0; width: 100%; height: 100%; font: inherit; color: inherit; }
@@ -592,7 +592,7 @@ button { font: inherit; cursor: pointer; }
}
/* ============================================================
- Password gate (soft, client-side — not real security)
+ Password gate (soft, client-side, not real security)
============================================================ */
.locked body { overflow: hidden; }
.locked .site-head, .locked main, .locked .site-foot { visibility: hidden; }
diff --git a/public/assets/img/README.md b/public/assets/img/README.md
index 7f2b85d..dd99936 100644
--- a/public/assets/img/README.md
+++ b/public/assets/img/README.md
@@ -4,4 +4,4 @@ Drop real image files here using the exact filenames listed in
[`../../ASSETS.md`](../../ASSETS.md).
Until a file exists, its `
` tag removes itself and a labeled placeholder
-shows in its place — so the layout stays intact while you gather assets.
+shows in its place, so the layout stays intact while you gather assets.
diff --git a/public/assets/js/gate.js b/public/assets/js/gate.js
index 90e475f..17f70d9 100644
--- a/public/assets/js/gate.js
+++ b/public/assets/js/gate.js
@@ -1,5 +1,5 @@
/* Soft password gate. NOTE: this is a client-side gate for keeping a
- work-in-progress out of casual view — it is NOT real security. The password
+ work-in-progress out of casual view; it is NOT real security. The password
is present in this file, so anyone who reads the source can bypass it. For
true protection, use host-level auth (Cloudflare Access, Netlify password,
a server, etc.). */
diff --git a/public/assets/js/main.js b/public/assets/js/main.js
index 30175e8..fe15d6a 100644
--- a/public/assets/js/main.js
+++ b/public/assets/js/main.js
@@ -1,4 +1,4 @@
-/* Quentin Fears — site interactions. Dependency-free, progressive. */
+/* Quentin Fears site interactions. Dependency-free, progressive. */
(function () {
"use strict";
@@ -57,7 +57,7 @@
}
var btn = form.querySelector('button[type="submit"]');
var data = new FormData(form);
- data.set("_subject", "[" + (data.get("inquiry") || "General") + "] New inquiry — quentinfears.com");
+ data.set("_subject", "[" + (data.get("inquiry") || "General") + "] New inquiry via quentinfears.com");
var label = btn ? btn.innerHTML : "";
if (btn) { btn.disabled = true; btn.textContent = "Sending…"; }
if (status) { status.textContent = ""; status.className = "form-status"; }
@@ -66,11 +66,11 @@
.then(function (res) {
if (res && (res.success === true || res.success === "true")) {
form.reset();
- if (status) { status.textContent = "Thanks — your message is on its way. I'll be in touch soon."; status.className = "form-status form-status--ok"; }
+ if (status) { status.textContent = "Thanks, your message is on its way. I'll be in touch soon."; status.className = "form-status form-status--ok"; }
} else { throw new Error((res && res.message) || "failed"); }
})
.catch(function () {
- if (status) { status.textContent = "Something went wrong — please email hello@quentinfears.com directly."; status.className = "form-status form-status--err"; }
+ if (status) { status.textContent = "Something went wrong. Please email hello@quentinfears.com directly."; status.className = "form-status form-status--err"; }
})
.finally(function () { if (btn) { btn.disabled = false; btn.innerHTML = label; } });
});
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index bf38653..0bd90d6 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -72,12 +72,12 @@ const mainSrc = 'assets/js/main.js';
-
+
-
+
diff --git a/src/pages/contact.astro b/src/pages/contact.astro
index 8fdc110..137da75 100644
--- a/src/pages/contact.astro
+++ b/src/pages/contact.astro
@@ -60,12 +60,12 @@ const jsonLd = {