A bryn is a hill. From the high ground you see the whole field before you move. Every mark, token, and idiom on this page is the one civic.com renders today: the swatches paint from the live tokens, the type is the live scale, the motion is the live contract.
01 ⬩ Marks
The horizon mark, the lockup, the Civic mark
One glyph carries the brand: a figure on a hill, watching the horizon. The hill fills with the stones gradient, the brand purple family stepped from soft to tint. Figure, ridge, and horizon line take the ink of the ground they sit on.
--text
--brand
Horizon mark
symbol#horizon ⬩ 300 × 300
Inline as <use href="#horizon">, the mark inherits currentColor for figure, ridge, and horizon line, so it is brand purple in the header, ink in the footer, and white on the drench. The standalone SVG pins the same paths for places that cannot inherit page CSS.
bryn-lockup-civic-ink.svg
bryn-lockup-civic.svg
Lockup
BRYN ⬩ by Civic
Glyph at 24px in brand purple, BRYN in Geist extrabold at 17px, a 1px hairline, then by Civic with Civic in medium weight. This is the header composition on every page. The SVG lockups ship with the type outlined, one drawn for light grounds and one for dark.
--text
--text
Civic mark
civic-mark.svg ⬩ currentColor
The company mark. It rides the Company menu at 18px and links to civic.com. Inline it with fill="currentColor" so it takes the ink of its surface.
Use it like this
BRYNby CivicHeader lockup, light
BRYNby CivicHeader lockup, dark
Mark in ink, light
Mark in brand, dark
Bryn delivers revenue.
Watermark, border-strong
Bryn delivers revenue.
Drench glyph, on-brand
Clear space
The unit is x, the head of the figure: one quarter of the mark's width. The mark keeps at least 1x clear on every side. The lockup keeps at least the glyph's height, 4x, clear on every side.
xx
mark 96px ⬩ x = 24px
xx
mark 48px ⬩ x = 12px
xxBRYNby Civic
glyph 24px ⬩ 4x = 24px
x = head Ø 76 / 300 box = 0.25 × mark width ⬩ lockup clear = glyph height = 4x
Sizes in use
18pxCivic mark, Company menu.nav-civic__mark
24pxHorizon glyph, header lockup.brand__glyph
40pxFooter mark.mark
180 to 340pxSection watermark, border-strong at 50%.glyph-watermark
220 to 340pxDrench glyph, on-brand at 18%.drench-glyph
02 ⬩ Color
Palette D
Warm paper in the light register, deep violet-black in the dark. Three accents, each with one job. The light theme is the base; dark applies through data-bryn-theme="dark" on .bryn-site, and any band can go dark on its own with data-band="dark".
Bryn delivers revenue.
--brand
Purple is impact and brand
The delivered word renders brand purple. Buttons, the drench, the hill fill, the noun the hero lands on.
visit/pricing
signalpricing → compare
composite76
--signal
Teal is the caught signal
Resolution, live data, the thing Bryn saw. It lights the hit in a sparkline, the numeral in a kicker, the tick in a progress track.
watching ⬩ 00:04:35Template
--warn
Coral is the cost of waiting
The watching clock, the template flag. Sparse by design.
Light ⬩ base
Accents
Brand--brand#7C3AED
Brand hover--brand-hover#6D28D9
Brand soft--brand-soft#9993FF
Brand shade--brand-shade#3E1973
Brand tint--brand-tint#1E1033
Brand on light--brand-on-light#5B1FA8text on the ground
Signal--signal#2FD9C2
Signal soft--signal-soft#7FF0E2
Signal on light--signal-on-light#0C6D60text on the ground
Warn--warn#FF7E5F
Warn on light--warn-on-light#A5330Etext on the ground
Ground and ink
Background--bg#FAF9F5
Background alt--bg-alt#F3F1EA
Surface--surface#FFFFFF
Surface alt--surface-alt#F1EFE7
Border--border#E7E4DB
Border strong--border-strong#C7C2B3
Text--text#211B12
Text secondary--text-secondary#5B5541
Text muted--text-muted#6A6249
Dark ⬩ data-bryn-theme="dark"
Accents
Brand--brand#7C3AED
Brand hover--brand-hover#6D28D9
Brand soft--brand-soft#9993FF
Brand shade--brand-shade#3E1973
Brand tint--brand-tint#1E1033
Brand on light--brand-on-light#9993FFtext on the ground
Signal--signal#2FD9C2
Signal soft--signal-soft#7FF0E2
Signal on light--signal-on-light#2FD9C2text on the ground
Warn--warn#FF7E5F
Warn on light--warn-on-light#FF7E5Ftext on the ground
Ground and ink
Background--bg#07050E
Background alt--bg-alt#0C0918
Surface--surface#191327
Surface alt--surface-alt#120C20
Border--border#2C2444
Border strong--border-strong#3D3360
Text--text#E2E8F0
Text secondary--text-secondary#94A3B8
Text muted--text-muted#7B8794
On brand
Text on purple is white, dimmed to 90% for secondary lines. The drench adds a radial white sheen at 18% from the lower right.
--on-brand
#FFFFFF
--on-brand-dim
rgba(255, 255, 255, 0.90)
03 ⬩ Type
Geist takes stances. Geist Mono speaks for the product.
Headings and prose set in Geist. Everything the product itself says sets in Geist Mono: readouts, cites, chips, stamps, Play names, log lines. Body letter-spacing runs at -0.005em site-wide. The scale is fluid and ramps again above 90rem, so the numbers below are the 1440 landing.
Geist
Buyers send signals. Bryn delivers pipeline.
--font-sansStance, headings, prose
Geist Mono
Run #0001 ⬩ demo.follow-up ⬩ 10:02:11 → 10:06:46 UTC
--font-monoReadouts, stamps, chips, cites
StanceSize ⬩ weight ⬩ track ⬩ leading
Display.t-54.50rem ⬩ 900 ⬩ -0.035em ⬩ 1.02
Bryn.
Display 4.t-43.60rem ⬩ 800 ⬩ -0.035em ⬩ 1.02
Buyers send signals.
Page h1.t-33.40rem ⬩ 700 ⬩ -0.025em ⬩ 1.15
Bryn watches. You decide.
Section h2.t-21.90rem ⬩ 600 ⬩ -0.025em ⬩ 1.15
Bryn Watches, Scores, Acts, Logs
Lede.t-11.20rem ⬩ 500 ⬩ -0.005em ⬩ 1.45
Under 10 minutes to your first identified, scored and recorded visitor.
Body.t-01.05rem ⬩ 400 ⬩ -0.005em ⬩ 1.60
A rule set once: when this happens, on an account like this, do that.
Small.t--10.92rem ⬩ 400 ⬩ -0.005em ⬩ 1.45
Bounded writes. Only the channels the Play names.
Stamp.t--20.78rem ⬩ 500 ⬩ 0.08em ⬩ 1.45
S3 ⬩ BOUNDED WRITES
04 ⬩ Register
Stamps, hairlines, hills
The instrument-panel voice: mono uppercase stamps at 0.08em tracking, 1px hairline seams between bands, and the hill as section punctuation. Elevation is one hairline and a soft shadow, never a heavy card.
S3 ⬩ Bounded writesscore⬩7d
Mono stamp
card-ord ⬩ fig-stamp ⬩ pg-stamp
Uppercase Geist Mono at step -2, muted ink, a ⬩ separator, and a hairline that runs out to the right. Section ordinals, figure stamps, and metadata rows all wear it.
Composite over the weekscore ⬩ 7d
Hairline and fig panel
fig ⬩ radius-lg ⬩ shadow-sm
Surface, 1px border, 20px radius, 24px padding, the small shadow. Adjacent bands seam with a 1px hairline; a dark band swallows the seams around it.
pricing →comparison →repeat (7d)
5Plays ship today
Chip pill and kicker
chip-pill ⬩ kicker__num
Chips are mono at step -2 with a border-strong edge and a teal arrow. The kicker is a sans label whose numeral sets tabular in teal ink.
Start the trialSee a live run
Buttons
btn--primary ⬩ btn--ghost
Semibold at step 0, 12px by 32px padding, 11px radius, 1px press. Primary is the brand fill; ghost is transparent with a border-strong edge.
The hill set
Three pieces in light and dark: a hero atmosphere, a section divider, and an ambient texture. The divider is the cheap one; it can repeat down a long page. The signal line traces the nearest ridge in teal.
Content enters with a 22px rise over 600ms on the rise curve, staggered in four steps. Anything that starts below the fold holds its entrance until it is 35% in view, then plays once. Under prefers-reduced-motion every duration collapses to zero and nothing moves.
.reveal rises 22px over --dur-reveal on --ease-rise; .seg rises 10px over --dur-base. .s1 to .s4 add the staggers below.
Staggers
--stagger-150ms
--stagger-2160ms
--stagger-3300ms
--stagger-4460ms
06 ⬩ Voice
Two names, one register
The company is Civic. The product is Bryn, by Civic. The category is signal-based GTM: go-to-market driven by what a buyer actually does on your site and in your product.
Builder-native, confident, plain-spoken. Contractions are the rule. Outcomes lead; tools, mechanism, and price appear as proof of an outcome claim.
Punctuation is periods, commas, and colons. The ⬩ separator joins stamps and ordinals.
Prose takes stances in Geist. The product speaks in Geist Mono, byte-exact: Play names, readouts, log lines, chip grammar. Fit, Intent, Timing, and Composite are the score dimensions; Play is the product noun.
Bryn watches. You decide the Play. Bryn runs it.
Product h1, as shipped
07 ⬩ Downloads
Assets
Every file below is the one the site serves. SVGs carry explicit hex for places that cannot read the tokens.