Ulric Design system

Ulric · Eugene, Oregon · Design system handoff · Oct 2026

Make it feel like Eric made it.

This is the style handoff for Ulric and its clients, for outside design teams and AI design agents. Every value here was read from the live sites’ CSS, measured in a headless browser, and captured at 1440px and 390px. Nothing is invented.

5showcase sites
63pages at both widths
66stylesheets read
29/work projects opened

Sources: ulric.studio, ulric.studio/work, mandalamed.com, orcounselors.com, mycomusecolorado.com, mindmorphcolorado.com · fetched Oct 18, 2026

01 · Design principles

What makes it feel like his.

These five come from the code and the copy, not from adjectives. Each one is backed by Eric’s own notes in the stylesheets (comments signed “Eric, 2026-10-…”) or by live page text.

Ink on paper. The brand color marks things; it is never the background.

Every page is near-black ink on white or warm paper. The accents are sampled from the client’s logo and kept for buttons, links, rules and small marks. Ulric itself is #191917 on #faf9f5, with orange kept for one italic word, the eyebrow bar and the call button.

“White paper and near-black ink carry every page; the accent pair is for buttons, links, rules, hover and small marks, never a tinted floor.”mindmorphcolorado.com · tokens.css
“One colour logic for every button … no orange fill anywhere. A solid button is near-black with white type on a light ground.”mandalamed.com · style.css

One voice in the headline: a characterful display face with one marked word.

Every hero runs eyebrow → big display headline with exactly one marked word → one-sentence lede. Ulric marks forty-four-year in orange Newsreader italic. Mandala draws a gold underline under “healing”, orcounselors sets “fits” in Lora italic, and MycoMuse and MindMorph draw a keyword underline (--kw-dur:700ms; --kw-w:2.5px).

“the hero’s entrance: each line rises in turn, then the keyword’s underline draws”mindmorphcolorado.com · tokens.css

Hairlines, not boxes. Nothing moves that doesn’t need to.

Structure comes from thin rules and whitespace. Hover is a small shift. Photos don’t zoom, rows don’t move, and gradients are out (orcounselors allows one, by name). On 2x screens the hairline drops to .5px.

“no box, no border, no fill, on every row.”ulric.studio · swipe.css
“No boxes, discs, rails or fills.”mandalamed.com · lotus.css (FAQ)
“Nothing else moves: no picture zoom, no play-button growth.”orcounselors.com · alder-cards.css

Built for the phone first, and measured to the pixel.

Phone CSS comes first, with layers added at 600px and 921px. Targets are 44px or more, every control is 48px, labels stay on one line, fallback fonts are metric-matched against layout shift, and motion never hides content.

“PRACTITIONERS + 160 GOOGLE REVIEWS + BEST OF PORTLAND measure 293px at 360 against 320px of room”mandalamed.com · home-extras.css
“MOTION NEVER GATES CONTENT.”UlricCMS core · motion.css

Say only what’s true, and show where it came from.

Stats carry a source and a date, prices are published, every clinical search carries the 911/988 line, and the AI guide discloses itself. The copy is first-person and plain, and it never promises outcomes.

“Sources: Google · ulric.studio/work · ulric.studio/about, as of Oct 2026”ulric.studio · hero
“Facilitation is not medical care or psychotherapy, and no outcome is promised.”mycomusecolorado.com · hero
“An AI assistant that answers from our own pages. It cannot give medical advice.”mandalamed.com · Guide

02 · House style vs client flex

What stays, and what changes.

The client themes share one STRUCTURE block word for word. The MindMorph file says: “A sister site (MycoMuse) copies this file and changes values here, never names.” Colour and type change per client; the structure doesn’t.

Constant (Ulric house)Flexes per client
Mobile-first breakpoints at 600px and 921px (“Mobile first; one breakpoint at 921px”, Alder)Palette: two accents sampled from the logo
Gutter of 20px on phones, then 32–40px; column 1120–1280pxTypefaces: one display face and one reading face per client
Ink on white or warm paper; accents as marks; a near-black floor for footer and dark bandsGround: warm cream (Mandala, Ulric), cool off-white (orcounselors), pure white (MycoMuse, MindMorph)
Hero: full-bleed photo or film, dark scrim, eyebrow + H1 with one marked word + one-line lede + Book pill + Ask pill + crisis lineHero media: clinic interior, practitioner film, forest light, illustration, sky and code
Pill buttons, 48px controls (hero 56–60px), 600-weight .875rem labelsButton fill: #1E2119 · #14532D · #4f6b1e · #6a3c5f · #191917
Corners at 6 / 10 / 14px plus the pill; photos slightly roundedPhoto corner: 6px (MycoMuse, MindMorph) or 16px (Mandala, orcounselors)
Sticky frosted header with Book on the right; full-screen phone menu ending on BookAnnouncement bar (Mandala, MindMorph) or none
Stats row: serif number over a one-line tracked label, no boxBrand extras: Tenor Sans licence caps (Mandala), Verified badge (orcounselors)
Phone card rows swipe sideways with a peek; grids from 600px—
Hairline FAQ with a thin plus that turns into a minus; answer around 65ch—
Core motion: fade-up 22px, image settle, line rise, keyword draw; all off under reduced motion—
Guide chat bottom-right; Finder/Ask search with 911/988 links—
Type pairing rule. One face with character for display (often a serif), one quiet face for reading, and the reading face or Inter for “what a visitor presses (menu, buttons, links that stand alone)” (mandalamed.com style.css). orcounselors keeps a third face, Lora, for its h2s and its italic keyword.

The same hero, five brands (390px)

03 · Tokens

The values, as shipped.

Every hex below is copied from a :root block. Contrast ratios are computed from those hex values. Machine-readable copies with a source per value: tokens.json and tokens.css.

Color · Ulric

Source: ulric.studio/themes/ulric/assets/style.css (:root). Orange is 2.96:1 on paper, so it is used for display italics, bars and fills under ink text (ink on orange is 5.64:1), never for small text. Small orange text uses --accent-deep.

--ink#19191716.71:1 on paper
--paper / --bg#faf9f5
--paper-2 / --cream#f0eee6
--stone / --muted#69675f5.38:1
--accent#d977572.96:1, large/marks only
--accent-deep#b258384.59:1
--accent-hover#a14f315.71:1 w/ white
--d-accent#e08a6d7.04:1 on #141413
--d-bg#141413
--d-surface#211f1c
--manilla#ebdbbc
--kraft#d4a27f

Color · Mandala Medicine & Wellness

Source: mandalamed.com/themes/lotus/assets/lotus.css + mandalamedicinepdx/assets/style.css

--cream (page)#F9F6EE
--olive (ink)#383D3110.34:1
--btn-ink#1E2119white 16:1
--paper#F1ECE0
--grey (line)#DDD9D2
--gold / --copper#C58C51decorative
--peri#6D90CAlarge white type only
--sage#5F8B73
--blue / --muted#5F6C804.93:1

Color · orcounselors (Alder)

Source: orcounselors.com/themes/alder/css/alder.css

--al-page#FAFAF8
--al-ink#0E2A1B14.71:1
--al-pill#14532Dwhite 9.11:1
--al-moss#1C6B3C
--al-brand#3D8850
--al-sage#A8DEB5
--al-paper (mint)#E6F5EC
--al-dawn#F7EFDF
--al-body#4A55687.2:1

Color · MycoMuse

Source: mycomusecolorado.com/themes/mycomuse/assets/tokens.css

--white#ffffff
--ink#14151318.32:1
--night#111310
--leaf-ink = --accent#4f6b1e6.08:1
--leaf-deep#3f561a
--leaf#a4bc508.79:1 on night
--violet-ink = --accent-2#6c54786.61:1
--violet#886c94decoration
--quiet#63675f5.78:1

Color · MindMorph

Source: mindmorphcolorado.com/themes/mindmorph/assets/tokens.css

--white#ffffff
--ink#16131418.46:1
--night#121012
--plum = --accent#6a3c5fwhite 8.66:1
--plum-deep#532e4a
--sage-leaf#c3d3a311.88:1 on night
--sage-ink = --accent-2#55653b6.34:1
--lime#a4bc50hero only
--quiet#68626a5.93:1

Type

Ulric

Software with a forty-four-year head start.

The reading face sets the body copy at a comfortable measure, around 65 characters a line.

Newsreader 400–500 + italic · Inter 400–600 · both self-hosted, metric-matched fallbacks
H1 72–88px / 500 / lh 1.02–1.06 / −0.025em · body 15.5px / 24.8px

Mandala

A sanctuary for healing

The reading face sets the body copy at a comfortable measure, around 65 characters a line.

DM Sans 500/700/800 · Alegreya Sans 400/500/700 · Alegreya italic (lede) · Tenor Sans (caps) · Inter (UI)
H1 115px / 800 / lh .96 / −.04em · body 17px / 27.2px

orcounselors

Find a counselor who fits.

The reading face sets the body copy at a comfortable measure, around 65 characters a line.

Golos Text 500/700/800 · Inter 300–700 · Lora (h2 + italic)
H1 108px / 800 / −3.78px · h2 Lora 40px/500 · body 16px/24px

MycoMuse

Steady, psilocybin facilitation

The reading face sets the body copy at a comfortable measure, around 65 characters a line.

Marcellus 400 · Karla 400/500/600 (self-hosted on the site)
H1 75.8px / 400 · body 16px / 26.4px

MindMorph

Integrative psychiatry

The reading face sets the body copy at a comfortable measure, around 65 characters a line.

Spectral 300/400/500 + italic · Montserrat 400–700
H1 75.8px / 400 / lh 1.04 · body 16px / 26.4px

Client faces in these specimens load from Google Fonts when you are online and fall back to system faces offline. Ulric’s faces are bundled in fonts/.

Ulric scale (style.css)

--fs-display
clamp(44px,6.2vw,88px)
Proof, in production.
--fs-h1
clamp(40px,5vw,72px)
Proof, in production.
--fs-h2
clamp(32px,3.6vw,52px)
Proof, in production.
--fs-h3
clamp(22px,2vw,28px)
Proof, in production.
--fs-lede
clamp(18px,1.5vw,21px)
Proof, in production.
--fs-body
16px
Proof, in production.
--fs-small
14px
Proof, in production.
--fs-caption
13px
Proof, in production.
--fs-eyebrow
12px
Proof, in production.

Headings use weight 400, line-height 1.04 and tracking −.022em; the eyebrow is 12px, 600, uppercase, .15em. On the client sites (shared tokens.css) the scale is label .75rem · small .875rem · body 1rem · lede 1.0625rem · h3 1.25rem · h2 clamp(1.65rem,1.2rem+1.9vw,2.4rem) · h1 clamp(2.1rem,1.4rem+3vw,3.4rem) · hero clamp(4.1rem,4.6vw+.6rem,5.4rem), with body line-height 1.65.

Spacing

Ulric --s-1 … --s-11 (style.css)

--s-1 4
--s-2 8
--s-3 12
--s-4 16
--s-5 24
--s-6 32
--s-7 48
--s-8 64
--s-9 80
--s-10 96
--s-11 128

Client sites: 8 · 12 · 16 · 24 · 32 · 48, with sections of 64px rising to 96px from 921px (MindMorph, MycoMuse). Mandala sections run 72 → 120px; the orcounselors rhythm runs 72 → 120px (88px on its home page).

Layout

  • Ulric · max 1120px · gutter clamp(20px,5vw,48px) · header 73px
  • House · max 1180px · gutter 20px, then 32px from 600px · header 68px, then 80px
  • Mandala · max 1280px · gutter 20 → 40px · header 72 → 96px
  • orcounselors · max 1280px · gutter 24 → 40px · header 64 → 72px
  • Controls · --ctl-h 48px · --ctl-h-lg 56px (60px from 921px) · min target 44px

Radii

6px
--radius-sm · nested things
10px
--radius · THE corner (Ulric)
14px
--radius-lg · dialogs, sheets
16px
Mandala photos · orcounselors --al-r
999px
pill · every button

Shadows

Ulric --sh-1
0 1px 2px rgba(25,25,23,.06), 0 1px 1px rgba(25,25,23,.04)
Ulric --sh-2
0 8px 24px rgba(25,25,23,.08), 0 2px 6px rgba(25,25,23,.06)
Ulric --sh-3
0 24px 64px rgba(25,25,23,.14), 0 8px 20px rgba(25,25,23,.08)
Mandala --btn-sh
0 6px 16px -4px rgba(47,51,41,.36),0 2px 4px -1px rgba(47,51,41,.16)
orcounselors --al-raise
0 1px 0 rgba(0,0,0,.06), 0 8px 16px -10px rgba(14,42,27,.45)

MycoMuse and MindMorph mostly use box-shadow:none; their separation comes from 1px rules at 14% ink.

Breakpoints

SitePatternMost-used queries (count in CSS)
Mandalamobile-firstmin-width:921px ×64 · max-width:920px ×18 · min-width:600px ×7 · max-width:359px ×7
orcounselorsmobile-firstmin-width:921px ×36 · min-width:640px ×24 · max-width:920px ×12 · min-width:600px ×6
MindMorphmobile-firstmin-width:921px ×26 · min-width:600px ×12 · max-width:599px ×8
MycoMusemobile-firstmin-width:921px ×21 · min-width:600px ×11 · max-width:767px ×10
Ulricdesktop-first (older)max-width:700px ×14 · 767px ×9 · 719px ×8 · 900px ×5

New work should follow the client pattern: phone first, then 600px and 921px.

Motion

  • Ulric · ease-out cubic-bezier(.2,.7,.2,1) · in-out cubic-bezier(.65,0,.35,1) · 120 / 180 / 260 / 420 / 700ms
  • Scroll reveal (core) · opacity 0 + translateY(22px) → rest · .7s cubic-bezier(.2,.6,.2,1) · stagger 90ms
  • Image settle (core) · clip-path inset(0 0 13% 0) + scale 1.022 → rest · .85s
  • Hero rise (house) · 20px · 800ms · step 110ms (MycoMuse 140ms) · cubic-bezier(.16,1,.3,1)
  • Keyword underline · 700ms · 2.5px
  • Hover and press · .15–.2s ease; Mandala’s link dots draw in “under 300 ms”

Press play to preview each one. Nothing plays under reduced motion.

fade-up
line rise
keyword draw
image settle

“MOTION NEVER GATES CONTENT. Every hidden state below is scoped to html.fx … reduced motion, ?nofx=1, no IntersectionObserver … land in the same place: the page, fully visible, unanimated.” (core motion.css)

04 · Components & patterns

Parts you will see everywhere.

Each pair shows the same component at 1440px and 390px, cropped from the live page. Click any image to open it full size.

Header & navigation

Sticky and frosted, with Book on the right. On phones it holds the logo, a search icon, a short Book pill and the menu button, and it is fixed rather than sticky at 920px and below (“iOS Safari lets a sticky header scroll away”, MindMorph). The phone menu fills the screen and ends on the Book pill.

Mandala header: logo, text links, Find help veil pill, Book online pill at 1440px1440
Mandala header: logo, text links, Find help veil pill, Book online pill at 390px390
Mandala header: logo, text links, Find help veil pill, Book online pillmandalamed.com
Ulric header: compact ink call pill (“OpenAI style”, 40px) at 1440px1440
Ulric header: compact ink call pill (“OpenAI style”, 40px) at 390px390
Ulric header: compact ink call pill (“OpenAI style”, 40px)ulric.studio
MindMorph header: announcement bar + frosted header + plum pill at 1440px1440
MindMorph header: announcement bar + frosted header + plum pill at 390px390
MindMorph header: announcement bar + frosted header + plum pillmindmorphcolorado.com

Hero

Full-bleed media under a dark scrim, with the text anchored low on the left. Eyebrow, then H1 with one marked word, then a one-sentence lede, then Book plus an Ask pill, then the crisis line. On phones nothing is removed: “everything stays, it just stacks tighter”.

MycoMuse hero: film, eyebrow, Marcellus H1 with a drawn leaf underline, Book + Ask pill, crisis line at 1440px1440
MycoMuse hero: film, eyebrow, Marcellus H1 with a drawn leaf underline, Book + Ask pill, crisis line at 390px390
MycoMuse hero: film, eyebrow, Marcellus H1 with a drawn leaf underline, Book + Ask pill, crisis linemycomusecolorado.com (viewport)
orcounselors hero: Golos H1 with a Lora italic keyword, search + chip filters, isometric illustration at 1440px1440
orcounselors hero: Golos H1 with a Lora italic keyword, search + chip filters, isometric illustration at 390px390
orcounselors hero: Golos H1 with a Lora italic keyword, search + chip filters, isometric illustrationorcounselors.com (viewport)

Cards

A 4/3 photo with slightly rounded corners, a serif title, two or three lines of body, then the accent “Read more →”. On phones the row swipes sideways with the next card peeking in (“a deliberate peek that says it scrolls”, orcounselors).

MindMorph service cards: 4/3 photo, serif title, three-line summary, Read more → at 1440px1440
MindMorph service cards: 4/3 photo, serif title, three-line summary, Read more → at 390px390
MindMorph service cards: 4/3 photo, serif title, three-line summary, Read more →mindmorphcolorado.com
Mandala practitioner cards: portrait, DM Sans name + tiny Tenor caps licence, tracked role at 1440px1440
Mandala practitioner cards: portrait, DM Sans name + tiny Tenor caps licence, tracked role at 390px390
Mandala practitioner cards: portrait, DM Sans name + tiny Tenor caps licence, tracked rolemandalamed.com
MycoMuse offering cards on hairlines at 1440px1440
MycoMuse offering cards on hairlines at 390px390
MycoMuse offering cards on hairlinesmycomusecolorado.com

Provider directory & search

One field with an example query, a round go button, and quick-filter chips in “one row at every width”. Provider cards: “a 56px circle on the left and, beside it, exactly two lines that never wrap”, then insurance, fee, Verified, Accepting and “Book via SimplePractice”.

orcounselors search: one field, round go button, one-row chip filters that scroll at 1440px1440
orcounselors search: one field, round go button, one-row chip filters that scroll at 390px390
orcounselors search: one field, round go button, one-row chip filters that scrollorcounselors.com
orcounselors Verified providers: two-line headers, insurance, fee, Verified, Book via SimplePractice at 1440px1440
orcounselors Verified providers: two-line headers, insurance, fee, Verified, Book via SimplePractice at 390px390
orcounselors Verified providers: two-line headers, insurance, fee, Verified, Book via SimplePracticeorcounselors.com
Mandala Finder sheet, “migraines” typed: conditions, services, practitioners, questions; 911/988 links at 1440px1440
Mandala Finder sheet, “migraines” typed: conditions, services, practitioners, questions; 911/988 links at 390px390
Mandala Finder sheet, “migraines” typed: conditions, services, practitioners, questions; 911/988 linksmandalamed.com (typed only, nothing submitted)

Booking CTAs

One verb, “Book”, in the header, the hero, the end of every service page and the phone menu. On a light ground it is a solid near-black (or brand-dark) pill; on dark it is white; the secondary is a ghost. Hover is “a small shift … never a new colour”. The scheduler itself stays in Jane, IntakeQ or SimplePractice.

MindMorph location block: Book an appointment pill + Get directions ghost at 1440px1440
MindMorph location block: Book an appointment pill + Get directions ghost at 390px390
MindMorph location block: Book an appointment pill + Get directions ghostmindmorphcolorado.com
MycoMuse /book: its own booking engine, day columns of time chips (view only) at 1440px1440
MycoMuse /book: its own booking engine, day columns of time chips (view only) at 390px390
MycoMuse /book: its own booking engine, day columns of time chips (view only)mycomusecolorado.com/book
Ulric closing CTA on the dark floor: orange call pill + ghost “Ask the studio assistant” at 1440px1440
Ulric closing CTA on the dark floor: orange call pill + ghost “Ask the studio assistant” at 390px390
Ulric closing CTA on the dark floor: orange call pill + ghost “Ask the studio assistant”ulric.studio

Testimonials

Quotes are set in the display italic, sit under hairlines, and carry the name, role, place and where the review lives. Ulric adds a sourced rating line: “★★★★★ 5.0 on Google · Read the reviews on Google →”.

Ulric: italic Newsreader quotes under hairlines, orange quote mark, “on Google”, dots at 1440px1440
Ulric: italic Newsreader quotes under hairlines, orange quote mark, “on Google”, dots at 390px390
Ulric: italic Newsreader quotes under hairlines, orange quote mark, “on Google”, dotsulric.studio
Mandala “What patients say” at 1440px1440
Mandala “What patients say” at 390px390
Mandala “What patients say”mandalamed.com

Checklists & steps

Stats rows: “a large serif number over a small tracked Inter label. No fill, no tint, no blur, no borders.” Steps and checklists are short, numbered and plain: “Four steps to a first session”.

Mandala first-visit checklist at 1440px1440
Mandala first-visit checklist at 390px390
Mandala first-visit checklistmandalamed.com
orcounselors “Four steps to a first session” at 1440px1440
orcounselors “Four steps to a first session” at 390px390
orcounselors “Four steps to a first session”orcounselors.com

FAQ

Rows between hairlines, the question in the display face at 500, a thin plus that turns into a minus, and the answer at about 65ch. “No boxes, discs, rails or fills.”

MycoMuse “Asked, and answered plainly”: hairline rows, thin plus at 1440px1440
MycoMuse “Asked, and answered plainly”: hairline rows, thin plus at 390px390
MycoMuse “Asked, and answered plainly”: hairline rows, thin plusmycomusecolorado.com

Forms

Labels sit above the inputs, inputs are 48px, and checkboxes are real: “22px, 2px dark border, 3px corners … the whole label row is the 44px tap target”. One primary pill. No health questions in website forms.

MycoMuse “Let’s connect”: labels above, 48px inputs, real 22px checkboxes at 1440px1440
MycoMuse “Let’s connect”: labels above, 48px inputs, real 22px checkboxes at 390px390
MycoMuse “Let’s connect”: labels above, 48px inputs, real 22px checkboxesmycomusecolorado.com (not submitted)
Mandala “Stay in touch”: last-minute openings signup at 1440px1440
Mandala “Stay in touch”: last-minute openings signup at 390px390
Mandala “Stay in touch”: last-minute openings signupmandalamed.com (not submitted)

Footers

A dark floor (Ulric, MycoMuse, MindMorph) or the ground colour (Mandala, orcounselors). It holds the logo, plain link columns, the address and hours, the crisis line, privacy links (“Privacy choices”, “Consumer Health Data Privacy Policy”) and “© 2026 …”.

MycoMuse footer on the dark floor #111310 at 1440px1440
MycoMuse footer on the dark floor #111310 at 390px390
MycoMuse footer on the dark floor #111310mycomusecolorado.com
orcounselors footer on the page colour, with “Built by Ulric” at 1440px1440
orcounselors footer on the page colour, with “Built by Ulric” at 390px390
orcounselors footer on the page colour, with “Built by Ulric”orcounselors.com
Ulric footer floor at 1440px1440
Ulric footer floor at 390px390
Ulric footer floorulric.studio

Ulric-only patterns

A thin orange scroll-progress bar, a vertical side index on wide screens, device-framed work, numbered tiers (“01 · The Blitz”), and “Full breakdown →” links in accent-deep.

Ulric pricing: numbered relay tiers, featured Sprint on the dark surface with the orange CTA at 1440px1440
Ulric pricing: numbered relay tiers, featured Sprint on the dark surface with the orange CTA at 390px390
Ulric pricing: numbered relay tiers, featured Sprint on the dark surface with the orange CTAulric.studio/pricing
Ulric “Proof, in production.”: device frames for the work at 1440px1440
Ulric “Proof, in production.”: device frames for the work at 390px390
Ulric “Proof, in production.”: device frames for the workulric.studio

05 · Therapy & health sites

Safe, private, calm.

Crisis line wherever it matters

“Not medical advice. In an emergency call 911; in a crisis call or text 988.” This sits under every search and ask box and in the footer, as tel:911, tel:988 and sms:988 links (Mandala, MindMorph, MycoMuse, orcounselors). orcounselors footer: “Not a crisis service. In a crisis, call or text 988.”

The AI guide discloses itself

Its first line: “An AI assistant that answers from our own pages. It cannot give medical advice.” (Mandala; MindMorph says “this site’s pages”).

Privacy: no health data on the site

Called to Heal: “a build that keeps health information off the website entirely” (ulric.studio/work). Mandala: a Consumer Health Data Privacy Policy (Washington My Health My Data Act) and “Privacy choices”. orcounselors: “You decide what to share and when.” MindMorph’s case study says “no patient record on the site” and that chats are deleted after 30 days; that comes from the case study and I didn’t check it on the live site.

Booking stays in the practice’s tool

Jane at Mandala (mandalamedicine.janeapp.com) · IntakeQ at MindMorph · SimplePractice per provider on orcounselors (“Book via SimplePractice”) · MycoMuse on Ulric’s own booking module with Google Calendar sync. The work page says: “Booking stays in Jane.” / “Booking stays in IntakeQ.”

Insurance, stated plainly

Mandala /insurance lists coverage by practitioner. MindMorph “Insurance & Payment Options” is by state (“Veterans welcome: in network with TRICARE West, VA Community Care preferred provider”). orcounselors has insurance filters, OHP included. MycoMuse: “Do you accept insurance? No. Facilitation services are private pay and are not covered by insurance.”

Telehealth by state

Mandala /telehealth (naturopathic medicine and mental health therapy) · MindMorph Colorado and Oregon telehealth location pages · a Telehealth chip on orcounselors.

Licensure, verification, eligibility

orcounselors: “A badge means a checked license. No cost to search.” Mandala sets licence letters after each name in Tenor caps. MycoMuse: “NMCF Licensed facilitator, Colorado and Oregon” and a 21+ age gate.

Calm tone

No outcome promises (“no outcome is promised”). Lead with the person’s need (“What do you treat?”, “What is going on?”, “Four steps to a first session”). Hedge the clinical copy (“may help”, “Once a doctor or urgent care has checked you…”).

MindMorph insurance by state at 1440px1440
MindMorph insurance by state at 390px390
MindMorph insurance by statemindmorphcolorado.com/insurance-payment-options
orcounselors: “A badge means a checked license.” at 1440px1440
orcounselors: “A badge means a checked license.” at 390px390
orcounselors: “A badge means a checked license.”orcounselors.com
Mandala telehealth page at 1440px1440
Mandala telehealth page at 390px390
Mandala telehealth pagemandalamed.com/telehealth

06 · Imagery, iconography, voice

Real people. Plain words.

Photography

  • Real practitioners in the real space, in warm natural light with plants (Mandala portraits).
  • A film of the facilitator speaking, as the hero (MycoMuse).
  • Pacific Northwest and Colorado landscapes for services: forest stairs, mountains, dusk water (MindMorph).
  • Eric himself on Ulric (the trail photos in the hero phone).
  • A dark scrim under hero type. Content photos have slightly rounded corners, thumbnails are 4/3 and a lone photo is 3/2.
  • Delivery: webp with srcset, the hero poster preloaded with fetchpriority="high", a separate phone crop.
  • Illustration only where it explains (orcounselors’ isometric figures on a light wash).

Icons

  • Inline SVG line icons in the text colour, stroke 1.5–2.2 (most often 1.6–2.0; orcounselors 1.75).
  • Small chevrons and → arrows end links; a dot or short bar comes before eyebrows.
  • Mandala’s car is “drawn in the text colour”, and its careers icons are “gold drawings”.

Voice and tone

First person, plain, specific, modest. Headlines read like sentences a person would say. Every number has a source and a date. No superlatives, guarantees, outcome or ranking claims, or jargon. A metaphor is fine when it’s carried all the way through (Blitz → Sprint → Relay → Marathon; “Put the baton in good hands.”).

  • “Proof, in production.”
  • “Engineer by upbringing. Counselor by training.”
  • “Every good studio keeps cats.”
  • “you are never in deeper than the phase you are in.” (pricing)
  • “Hi, I’m Masha.” · “Asked, and answered plainly”
  • “Claim your profile. It is free.”
  • “Start with your insurance card or a plain question.”
  • “Guided by skilled clinicians who care deeply about your wellbeing.”
Ulric “Build. Brand. Advise. Run.” at 1440px1440
Ulric “Build. Brand. Advise. Run.” at 390px390
Ulric “Build. Brand. Advise. Run.”ulric.studio

07 · Accessibility, performance, mobile-first

The bar is already in the code.

Accessibility

  • Text contrast of at least 4.5:1, with the measured ratio in the token comments (“--accent 6.08:1 on white”, MycoMuse).
  • Low-contrast brand colours (Ulric orange 2.96:1, Mandala periwinkle 3.23:1, gold 2.68:1) only for large type, fills under ink, or decoration.
  • Targets of 44px or more (19–53 rules per site); controls are 48px.
  • :focus-visible rings everywhere (42–78 rules per site).
  • prefers-reduced-motion handled (21–28 blocks per site); motion never hides content.
  • A skip link and lang="en" on every site; balanced headings; real checkboxes; aria-disabled arrows; inert inactive slides.
  • “nothing depends on hover.” Browser floor: Chrome 79 (“the studio gets read from a Tesla car browser”).

Mobile-first rules

  1. Write the phone first; add min-width:600px and min-width:921px.
  2. Keep every element on phones and stack it tighter.
  3. One line, never two, for labels, stats and announcement bars; important words first.
  4. Card rows swipe with a peek; no arrows under 900px (“a finger swipes”).
  5. Fixed header on phones; viewport-fit=cover and safe-area insets.
  6. The phone menu fills the screen and ends on Book.
  7. Hairlines are .5px on 2x and 3x screens.

Performance, as measured

One phone-viewport run from the box on Oct 18, 2026, unthrottled. Use these for comparison, not as lab or field data.

SiteLCPCLSRequestsTransferredNote
ulric.studio0.95s0.00651602 KBself-hosted fonts, no third-party font request
mandalamed.com0.88s0.02344227 KB31 of 37 images lazy
orcounselors.com1.05s01731.86 MB195 lazy provider images
mycomusecolorado.com1.70s0401.41 MB1.08 MB is the hero film
mindmorphcolorado.com0.79s0.02141760 KBmetric-matched fallbacks
Targets to hold: CLS under 0.05 (metric-matched fallback fonts, fixed heights on rows that load late). LCP under 2.5s on a mid-range phone. Self-host or preconnect fonts. Lazy-load everything below the fold. Use webp/avif with srcset and preload the hero poster.

08 · Do and don’t

Twelve calls Eric has already made.

Near-black solid buttons, a ghost secondary, and the accent for one mark

Fill buttons or bands with a loud accent (“no orange fill anywhere”)

White or warm paper with ink; a dark floor for the footer

Tinted section floors or gradients (orcounselors allows one, by name)

Mark one word in the headline: italic, or a drawn underline

Mark several words, or colour each line differently

Hairline rows for FAQs, lists and stats

Boxes, discs, rails or fills around rows

Hover as a small shift: a step lighter, or an underline

Zooming photos, recolouring titles, moving rows

Numbers with a source and a date

Unsourced outcome, traffic or ranking claims

911 and 988 as real tel: and sms: links under every clinical search

Crisis info as plain text, or only in the footer

White on periwinkle or orange only at large size

Small text on a 3:1 accent

Motion as an extra; content visible without JS; off under reduced motion

Content hidden until an animation runs; auto-advance with no pause

A sideways swipe row with a peek on phones

Ellipsizing the important words; arrows on phones

Booking in Jane, IntakeQ or SimplePractice

Health questions in website forms

Ulric orange only on Ulric

Ulric orange on a client site

Mandala What do you treat: hairline groups, chips, no boxes
Do: Mandala’s “What do you treat?” uses hairline groups and veil chips, a near-black ink button and no fills.
Ulric CTA on dark floor
Do: one accent action on a dark floor, with a ghost secondary and one line of copy.

I haven’t drawn “don’t” mockups. Each don’t above is a rule written in the sites’ own CSS comments; see DESIGN.md §8 for the sources.

09 · Brief template & AI prompt

Hand this to the next team.

Brief template for design teams

Fill it in and send it back with the first concepts.

PROJECT           [Client name] · [practice type] · [city, state]
LICENSED IN       [states]  · Telehealth in: [states or "none"]
AUDIENCE          [who is looking, what state they are in when they arrive]
PRIMARY ACTION    Book via [Jane / SimplePractice / IntakeQ / Ulric booking / phone]
                  Exact CTA label: "[Book an appointment]"
INSURANCE         [in network with ... / private pay only / superbills]; say it in one sentence
CRISIS LINE       Yes, on every clinical page and under every search (911 / 988 links)
PRIVACY           No health information collected on the site. Privacy policy + [state law page]
BRAND INPUTS      Logo file; 2 accent colours SAMPLED FROM THE LOGO; display face + reading face
                  Ground: [white / warm paper]. Footer: dark floor or ground colour
PHOTOGRAPHY       [real practitioners / real space / landscape set]; hero film or still
PAGES             Home, Services (x n), Practitioners (x n), New patients, Insurance,
                  Telehealth, FAQ, Contact, Privacy
VOICE SAMPLES     3 sentences the client actually says or writes
HOUSE RULES       Ulric house style (DESIGN.md sections 1, 2, 8): 600/921 mobile-first,
                  44px targets, pill buttons 48px, 6/10/14 radii, hairlines not boxes,
                  one marked headline word, accents as marks only
DELIVERABLES      390px and 1440px comps for home + one inner page; token sheet in
                  tokens.css names (--accent, --accent-2, --ink, --serif, --sans ...)
ACCEPTANCE        Contrast >= 4.5:1 body; no layout shift on font swap; works with JS off;
                  reduced motion respected; every claim has a source

Prompt for AI design agents

Paste it as the system or first message, with DESIGN.md and tokens.css attached.

You are designing for Ulric (Eric Richers, Eugene, Oregon) or one of his clients. Follow DESIGN.md exactly.
- Mobile first: write 390px first, add min-width 600px and 921px. Keep every element on phones; stack it tighter.
- Ink on paper. Ground #ffffff or a warm paper; text near-black. Two accents sampled from the client logo,
  used only for buttons, links, rules, focus rings and one marked word. Never a tinted section floor, never a gradient.
- Type: one characterful display face + one quiet reading face; UI labels in the reading face (or Inter).
  Headline = eyebrow (dot or bar + tracked caps) + display H1 with ONE marked word (italic or drawn underline) + one-sentence lede.
- Shape: radii 6 / 10 / 14 and 999px pills; controls 48px (hero 56-60px); tap targets >= 44px.
- Structure with hairlines and whitespace, not boxes. Hover = small shift only. No picture zoom.
- Motion: fade-up 22px over .7s cubic-bezier(.2,.6,.2,1), 90ms stagger; all off under prefers-reduced-motion; content visible without JS.
- Clinical sites: "Not medical advice. In an emergency call 911; in a crisis call or text 988." with tel:/sms: links under every search;
  AI guide discloses "cannot give medical advice"; booking stays in Jane / SimplePractice / IntakeQ; no health data in site forms;
  insurance and telehealth stated plainly by state.
- Voice: first person, plain, specific, modest. No superlatives, no outcome or ranking claims. Every number has a source and date.
- Ulric's own brand only: Newsreader + Inter, ink #191917 on paper #faf9f5, orange #d97757 (deep #b25838, hover #a14f31, dark #e08a6d).
  Don't put Ulric orange on client sites.
Deliver tokens using the names in tokens.css and show 390px and 1440px.

10 · Per-site cases

Five sites, one hand.

One panel per site: home at both widths, palette, type, signature moves, and a strip of inner pages at 390px.

Mandala Medicine & Wellness

mandalamed.com ↗

Integrative clinic on East Burnside, Portland. Lotus theme over the base theme; moved off Wix in nine days (ulric.studio/work).

Mandala Medicine & Wellness home at 1440px1440
Mandala Medicine & Wellness home at 390px390
Mandala Medicine & Wellness homemandalamed.com
--cream (page)#F9F6EE
--olive (ink)#383D3110.34:1
--btn-ink#1E2119white 16:1
--paper#F1ECE0
--grey (line)#DDD9D2
--gold / --copper#C58C51decorative
--peri#6D90CAlarge white type only
--sage#5F8B73
--blue / --muted#5F6C804.93:1
A sanctuary for healingDM Sans 500/700/800 · display
Guided by skilled cliniciansAlegreya Sans · body 17px; Alegreya italic lede; Tenor caps; Inter UI

Signature moves: The Finder sheet, the drawn underline on “healing”, the italic service marquee, the white-on-periwinkle accident band, 16px photo corners, Jane booking.

mandala practitioners at 390pxmandala acupuncture at 390pxmandala newpatients at 390pxmandala insurance at 390pxmandala provider at 390px

Full home page at 390px ↗ · at 1440px ↗

orcounselors.com

orcounselors.com ↗

The Oregon Counselors directory, built and run by Eric. Alder theme.

orcounselors.com home at 1440px1440
orcounselors.com home at 390px390
orcounselors.com homeorcounselors.com
--al-page#FAFAF8
--al-ink#0E2A1B14.71:1
--al-pill#14532Dwhite 9.11:1
--al-moss#1C6B3C
--al-brand#3D8850
--al-sage#A8DEB5
--al-paper (mint)#E6F5EC
--al-dawn#F7EFDF
--al-body#4A55687.2:1
Find a counselorGolos Text 800 · display
who fits.Lora (h2 + italic keyword) · Inter body 16px

Signature moves: Search with chip filters, two-line provider card headers, the Verified badge, “Book via SimplePractice”, the iPhone app band, a 16px radius.

orc providers at 390pxorc provider at 390pxorc specialty at 390pxorc ask at 390pxorc app at 390px

Full home page at 390px ↗ · at 1440px ↗

Maria “Masha” Steiner-Renoir’s licensed psilocybin facilitation practice, Colorado and Oregon.

MycoMuse home at 1440px1440
MycoMuse home at 390px390
MycoMuse homemycomusecolorado.com
--white#ffffff
--ink#14151318.32:1
--night#111310
--leaf-ink = --accent#4f6b1e6.08:1
--leaf-deep#3f561a
--leaf#a4bc508.79:1 on night
--violet-ink = --accent-2#6c54786.61:1
--violet#886c94decoration
--quiet#63675f5.78:1
Steady, psilocybin facilitationMarcellus 400 · display
Preparation, a facilitated session and integrationKarla 400/500/600 · body 16px

Signature moves: Film hero with a leaf underline, the 21+ age gate, the “Asked, and answered plainly” FAQ, its own booking engine, “no outcome is promised”.

myco offering at 390pxmyco book at 390pxmyco journal at 390px

Full home page at 390px ↗ · at 1440px ↗

Holistic psychiatry in Lakewood, Colorado, with telehealth across Colorado and Oregon. Sister tokens file to MycoMuse. (mindmorph.mycomusecolorado.com redirects here.)

MindMorph home at 1440px1440
MindMorph home at 390px390
MindMorph homewww.mindmorphcolorado.com
--white#ffffff
--ink#16131418.46:1
--night#121012
--plum = --accent#6a3c5fwhite 8.66:1
--plum-deep#532e4a
--sage-leaf#c3d3a311.88:1 on night
--sage-ink = --accent-2#55653b6.34:1
--lime#a4bc50hero only
--quiet#68626a5.93:1
Integrative psychiatrySpectral 300–500 · display
Ketamine & Spravato therapyMontserrat 400–700 · body 16px

Signature moves: Forest-light hero, plum pills, lime hero accents, insurance by state, IntakeQ booking.

mindmorph conditions at 390pxmindmorph insurance at 390pxmindmorph providers at 390pxmindmorph locations at 390px

Full home page at 390px ↗ · at 1440px ↗

Eric Richers’ studio, Eugene, Oregon. Newsreader and Inter, self-hosted.

Ulric home at 1440px1440
Ulric home at 390px390
Ulric homeulric.studio
--ink#19191716.71:1 on paper
--paper / --bg#faf9f5
--paper-2 / --cream#f0eee6
--stone / --muted#69675f5.38:1
--accent#d977572.96:1, large/marks only
--accent-deep#b258384.59:1
--accent-hover#a14f315.71:1 w/ white
--d-accent#e08a6d7.04:1 on #141413
--d-bg#141413
--d-surface#211f1c
--manilla#ebdbbc
--kraft#d4a27f
Software with a forty-four-year head start.Newsreader 400–500 + italic · display
Fixed prices, published up front.Inter 400–600 · body

Signature moves: An orange bar before each eyebrow, the italic orange keyword, sourced stats, device-framed work, numbered relay pricing tiers, the dark footer floor, the side index.

ulric work at 390pxulric pricing at 390pxulric contact at 390pxulric case mandala at 390px

Full home page at 390px ↗ · at 1440px ↗

Appendix · Everything on /work

All deployed sites and demos.

Every project listed on ulric.studio/work was opened, plus the other live client sites they link to. Viewport captures at 1440px (390px versions are in img/); click for full size.

What I couldn’t capture

  • The Mandala brand book (IsaMadeThis_MandalaMedicine_BrandBook.pdf) is on Eric’s Mac and wasn’t available. Mandala values come from the live CSS.
  • MycoMuse’s 21+ gate and the consent banners were hidden in my own browser only, so I could capture the page behind them. I didn’t click them, so the gate itself isn’t shown. On MycoMuse I also removed a rise-hold class locally so the hero text would render.
  • No booking flow past its first screen, no logged-in dashboard or CMS, no iOS apps, no walkthrough videos. I submitted no forms.
  • The orcounselors /providers results render in JS and my card crop failed, so provider cards are shown from the home page “Verified providers” section.
  • Ulric has no OS-level dark mode I could trigger. Its --d-* tokens style the .dark sections (footer, CTA, featured tier).
  • Performance comes from one unthrottled run from the box, not field data.
  • /work projects with no live site (Jev, Clip Calendar, ADU Builder and others) were captured only as their case pages.