Baltimore Classical Guitar Society · Design system v2.0

A light system that keeps the concert hall inside the photograph.

This replaces the dark v1.0. The page, every reading surface, and every screen that touches money are warm off-white. Darkness is a material used only inside photographic containers, where it does the work it was always doing: making the stage feel like a stage.

Every text-on-background pairing below carries its measured contrast ratio, computed from the token hex values with the WCAG 2.1 relative-luminance formula. Body copy is held to 7:1, not 4.5:1.

Hard constraints
  • 01Warm off-white, never #FFFFFF
  • 02Body 19px / 1.65, 7:1 minimum
  • 03No grey-on-grey secondary text
  • 0456px ticketing & checkout targets
  • 05Wordmark is a swappable slot
I.

The four page archetypes

Every other page on bcgs.org is a variation of one of these four, so they carry the review. Each is shown at full width in the tokens defined further down; nothing here is drawn outside the system.

PAGE 01

Homepage

The only dark blocks on the page are the hero plate and the footer. Season cards, prices and calls to action all sit on warm off-white.

The 2026–27 season is on sale. Members save 15% on every ticket. Join or renew
The BCGS Guitar Orchestra on stage at UMBC, conductor mid-gesture before two rows of seated players
2026–27 Season

Six concerts, one orchestra, and a room that has been listening since 1987.

Manuel Barrueco, Meng Su, SoloDuo and three more at UMBC and Towson. Subscribers keep their seats year to year.

Meng Su seated with her guitar in an empty auditorium of red seats
Oct 17

Meng Su

Bach, Barrios, and the Baltimore premiere of a new work by Gulli Björnsson.

Sat 7:30 pm · UMBC Concert Hall · reserved seating

$38–$50 Tickets
SoloDuo, two guitarists seated outdoors holding their instruments
Feb 6

SoloDuo

Matteo Mela and Lorenzo Micheli play Scarlatti, Sor, and Castelnuovo-Tedesco.

Sat 3:00 pm · Towson University · reserved seating

$38–$50 Tickets
Manuel Barrueco in white tie holding his guitar against a warm painted backdrop
Apr 24

Manuel Barrueco

The season closer, and the last night subscribers can hold their seats for next year.

Sat 7:30 pm · UMBC Concert Hall · reserved seating

$38–$50 Tickets
The Lullaby Project

Parents write a lullaby. A guitarist helps them finish it.

Since 2019 BCGS has run the Carnegie Hall Lullaby Project across Baltimore with expectant and new parents, pairing each family with a teaching artist. Every session ends with a recording the family keeps.

2025–26 in numbers
41
families served
6
partner sites
41
songs recorded
$0
cost to families
PAGE 02

Concert, with ticketing

The commercial heart. The ticket panel never sits on a dark ground and never sits over a photograph. Steppers and the add-to-cart control are 56px and 60px tall.

Concert one · 2026–27 season

Meng Su

Bach, Barrios, Tárrega, and the Baltimore premiere of a new work written for her by Gulli Björnsson.

Meng Su seated with her guitar in an empty auditorium, rows of red seats behind her
Meng Su at the Kennedy Center, 2024. Photograph by Tianjiao Wang. Captions sit on the light surface below the plate, never over the image.

Programme

Suite BWV 997 J. S. Bach
Recuerdos de la Alhambra Francisco Tárrega
Hlíð (premiere) Gulli Björnsson
La Catedral Agustín Barrios

About the artist

Meng Su was born in Qingdao and came to Baltimore to study with Manuel Barrueco at the Peabody Conservatory, where she now teaches. She has won the Vienna Youth Guitar Competition, the Christopher Parkening International Competition, and, with Yameng Wang as the Beijing Guitar Duo, a Grammy nomination alongside her teacher.

This is her fourth appearance on the BCGS series and her first solo programme here since 2019.

Getting there, and getting in

Venue

UMBC Concert Hall
1000 Hilltop Circle, Baltimore MD 21250

Parking

Free in Lot 8, a four-minute level walk. Accessible spaces at the hall entrance.

Access

Step-free throughout. Hearing loop in rows A–F. Call the box office and we will hold a seat.

Sat 17 Oct 2026
7:30 pm · UMBC Concert Hall
Reserved seating by section
Signed in as a Sustaining member. 15% off is applied below.
Orchestra
$50.00 · rows A–M
{{ qOrch }}
Mezzanine
$38.00 · rows N–T
{{ qMezz }}
Student
$12.00 · collected at will-call with ID
{{ qStudent }}
{{ tixCount }} tickets {{ tixGrossText }}
Member discount, 15% {{ tixDiscountText }}
Total {{ tixTotalText }}
Add to cart

Seats are held for 15 minutes at checkout. Exchanges are free up to 48 hours before the concert.

Sold out. Returns are released the morning of the concert.

We email everyone at once. First to click gets the seat.

Cheaper as a set

A six-concert subscription is $210, keeps the same seat all season, and renews before the public on sale.

Compare subscriptions
PAGE 03

Cart and checkout

A mixed cart: two concerts, a membership and a restricted gift. No photography, no dark ground, no decoration. Switch to the confirmation state in Tweaks.

Baltimore Classical Guitar Society · founded 1987
Trouble checking out? Call the box office, 410-247-5320 Secure checkout
  1. Cart
  2. Details and payment
  3. Confirmation

Your cart

{{ line.title }}
{{ line.meta }}
{{ line.qty }}
{{ line.totalText }}
{{ line.unitText }}

Your details

Your tickets arrive here within a minute of ordering.

Payment

Processed by Stripe. We never see your card.

By ordering you agree to the exchange policy. Membership benefits are intangible, so {{ deductibleText }} of this order is tax-deductible; the itemised split appears on your receipt.

Order summary

Tickets {{ ticketsSubText }}
Member discount, 15% {{ discountText }}
Membership and gifts {{ giftsSubText }}
Total {{ totalText }}
Tax-deductible portion {{ deductibleText }}

You are going. Order 2026-1174.

A receipt and your tickets are on the way to asgerdur@bcgs.org. Print them or show them on your phone; either works at the door.

What you bought

{{ totalText }}
{{ line.title }} × {{ line.qty }}
{{ line.meta }}
{{ line.totalText }}
Tax-deductible portion of this order {{ deductibleText }}

Two things before October

  • Student tickets are held at will-call. Bring a student ID; we cannot release them in advance.
  • Your Sustaining membership starts on 1 September and renews each season. You can cancel it in one click from your account, the same way you started it.
PAGE 04

Lullaby Project

The programme archetype: a page that grows every season. Photography for this programme has not been cleared yet, so the plates show the empty-slot state.

A programme of BCGS since 2019

The Lullaby Project

Expectant and new parents in Baltimore write a lullaby for their child. A teaching artist sits with them, helps finish it, and records it. The family keeps the song.

Photo slot · 4:3 Session at Mercy Medical Center. Needs a signed release from every parent in frame before it ships.

What actually happens in a session

A parent arrives with nothing prepared. Over two hours they talk with a teaching artist about the child they are expecting or have just met, and out of that conversation comes a set of words. The artist finds a melody underneath them, plays it back, changes it until the parent recognises it as theirs.

A second session records it, sometimes with the parent singing and sometimes not. Both versions go home. Nothing is published without written permission, and many families choose to keep the song private, which is a perfectly good outcome.

BCGS runs the project under licence from Carnegie Hall's Weill Music Institute, which originated it in 2011. We work with six partner sites across the city and the programme is free to every family.

Songs the families released

14 of 41 from the 2025–26 season
Sleep Now, Little River
Written by Dana W. with Nathan Chandler · Mercy Medical Center
2:41
Every Small Thing
Written by Tenika B. with Adrienne Park · Baltimore Healthy Start
3:08
Morning Comes Anyway
Written by Rosalie M. with Nathan Chandler · House of Ruth Maryland
2:15
Photo slot · 3:2 Session, spring 2026
Photo slot · 3:2 Recording day, Bayview
Photo slot · 3:2 Teaching artists, 2026

$180 covers one family, start to finish

Two sessions with a teaching artist, studio time, and the recording the family takes home. Gifts made here are restricted to the Lullaby Project fund and are fully tax-deductible.

Choose an amount
Add $180 gift to cart Or call 410-247-5320 and give by phone.
Baltimore Classical Guitar Society · founded 1987
The Lullaby Project is run under licence from Carnegie Hall's Weill Music Institute. © 2026 Baltimore Classical Guitar Society, Inc.
II.

Foundations

Ratios below were computed from these hex values with the WCAG 2.1 relative-luminance formula, against the surface each colour is actually permitted on. Where a pairing falls short it is marked and restricted, not quietly published.

I.

Colour

Two families. A warm off-white ramp that carries all reading and all commerce, and a stage-ink ramp that exists only inside photographic containers, the hero plate, and the footer.

Surfaces

surface-page
#FAF7F1
Default ground. Never #FFFFFF.
surface-raised
#FFFDF8
Cards, panels, headers.
surface-sunken
#F1EAE0
Totals rows, wells, this page.
surface-brass
#F3EAD6
Notices, member strips, bands.
stage-ink
#16120D
Photo plates, hero, footer only.
stage-ink-soft
#241C14
Inset fields inside stage blocks.

Text on light surfaces

Every cell is the real token on the real surface. The floor for running copy is 7:1; the two cells that fall under it are marked and the token is restricted from those surfaces.

Text token
on page
on raised
on sunken
on brass
text-primary
#1F1912 · body, headings
Six concerts
16.28:1
Six concerts
17.13:1
Six concerts
14.58:1
Six concerts
14.55:1
text-secondary
#4A3F32 · supporting copy
Six concerts
9.59:1
Six concerts
10.09:1
Six concerts
8.59:1
Six concerts
8.57:1
text-meta
#5C5044 · dates, captions
Six concerts
7.31:1
Six concerts
7.69:1
Six concerts
6.55:1 · not allowed
Six concerts
6.53:1 · not allowed
text-link
#5E4514 · links, eyebrows
Six concerts
8.40:1
Six concerts
8.84:1
Six concerts
7.52:1
Six concerts
7.51:1

Rule. text-meta is permitted on surface-page and surface-raised only. On sunken and brass grounds it drops below 7:1, so metadata there uses text-secondary at 8.59:1 — which is why the totals rows and member strips in the page examples above are set in #4A3F32, not #5C5044.

Text on stage ink

stage-text · #FBF7EF
Headings and body inside plates.
17.45:1 on stage-ink
stage-text-soft · #DCD2C0
Secondary copy. Still 12:1, so it is not grey-on-grey.
12.45:1 on stage-ink
brass-500 · #C9A96E
Eyebrows, rules, dates. Dark grounds only.
8.33:1 on stage-ink

Brand and functional colour

Brass is the brand. Red is only ever failure, so the primary action can never be mistaken for a warning. Each swatch states what it may and may not be used for.

hall-red · #990000
8.77:1 with #FFFDF8 text 8.34:1 as text on page

Carried over from v1.0 unchanged, and it survives the move to light untouched. The primary action, once per view. Hover #7A0000, active #5E0000.

brass-500 · #C9A96E
8.26:1 with #17130E text 2.10:1 as text on page · never

A fill and a rule, never a letterform on light. Reserved for giving, and for the six-string rule on ink.

brass-800 · #5E4514
8.84:1 with #FFFDF8 text 8.40:1 as text on page

Primary button fill, link text, focus ring. The one colour that means "act".

brass-600 · #8A6C36
4.59:1 as text on page

Prohibited for body copy. Rules, icons, borders, and text at 24px or above only.

error · #9B1C1C
7.62:1 as text on page 8.02:1 with #FFFDF8 text

Field errors, removal, sold-out. Red as text or edge is always a warning; red as a fill is always the primary action. The two never take the same shape, so the hue can carry the institution’s voice without ambiguity.

success · #1F5C3D
7.39:1 as text on page

Money saved, order placed, deductible amounts. Also the "secure checkout" mark.

info · #1D4E6B
8.34:1 as text on page

Policy notes, will-call instructions, seat-hold timers. The only cool colour in the system.

border-control · #8F7F66
3.64:1 against page · WCAG 1.4.11

Every input, stepper and secondary button edge. Separators (#E4DACA) are decorative and carry no meaning.

Prohibitions

  • No pure white (#FFFFFF) as a page or card ground. It glares under the fluorescent lighting most of our audience reads in.
  • No dark ground behind running copy, prices, forms, or any step of checkout. Stage ink is for photographs, the hero, and the footer.
  • No red fill that is not a primary action, and no brass fill that is not a gift. A filled control names its own consequence before the label is read.
  • No new grey. There is no neutral grey in this system; every "muted" colour is a warm brown that stands on its own at 7:1 or better.
  • No colour as the sole carrier of meaning. Discounts, errors and sold-out states each say so in words.
II.

Typography

Libre Caslon Text for anything that names something — the organisation, a concert, an artist, a section. Libre Franklin for everything a reader has to work through. Body is 19px at 1.65, one step above the 18px floor, because that is where the paragraph spacing stops feeling tight.

Display and headings
Aa Bb Cc
Libre Caslon Text · 400, 400 italic, 700

A text-weight Caslon, not a display cut. It holds up at 26px on a concert card and does not thin out at 54px in a hero.

Body and interface
Aa Bb Cc
Libre Franklin · 400, 500, 600, 700

Large x-height and open apertures, which is what keeps 19px readable for eyes that no longer accommodate quickly.

Token
Size / leading
Specimen
display-1
54 / 1.06 / −0.015em
Caslon 400
Meng Su
display-2
38 / 1.12
Caslon 400
You are going.
heading-1
32 / 1.18
Caslon 400
What happens in a session
heading-2
25 / 1.2
Caslon 400
Order summary
heading-3
19 / 1.35
Franklin 600
Orchestra, rows A–M
body-lead
21 / 1.55
Franklin 400
Bach, Barrios, and a Baltimore premiere.
body · default
19 / 1.65
Franklin 400 · 20px below
A parent arrives with nothing prepared. Over two hours they talk with a teaching artist, and out of that conversation comes a set of words.
body-small
17 / 1.55
Franklin 400
Captions, help text, venue lines. The floor for anything written as a sentence.
eyebrow
12 / 1 / 0.22em
Franklin 700 caps
2026–27 Season

Typesetting rules

  • Measure caps at 68 characters for body, 52 for lead. Long lines are the other half of the legibility problem.
  • Paragraph spacing is 20px, slightly more than one line. Never rely on indents.
  • 17px is the absolute floor for anything phrased as a sentence. Below it: single-word labels, table headers, and the eyebrow only.
  • No italic body copy and no all-caps sentences. Caps are for the eyebrow, at 12px with 0.22em tracking, and nowhere else.
  • Prices and totals are Franklin 600, not Caslon, except the one grand total on the order summary, which is Caslon 30px because it should feel like the end of the sentence.
III.

Spacing, radius, elevation

A 4px base. Anything under 16px is spacing inside a component; 24px and above separates components. The scale is deliberately loose at the top — an older reader benefits more from air between blocks than from a tighter grid.

space-14pxIcon to label
space-28pxLabel to field
space-312pxButton to button
space-416pxField to field in a row
space-520pxParagraph to paragraph
space-626pxCard padding
space-740pxBetween cards
space-864pxSection padding
space-996pxHero padding, desktop

Radius

5px
6px
8px
pill

5px inputs, 6px buttons and controls, 8px cards and photo plates, pill for counts and status marks only. Nothing softer — this is a 39-year-old institution, not an app.

Elevation

flat
raised
overlay

Shadows are warm-tinted (rgba of #1F1912) and never the only cue: every raised surface also changes colour or gains a border.

IV.

The six-string rule

Six brass hairlines of graduated weight, thinnest at the top: the six courses of a classical guitar, from the high E down to the low. It replaces every generic divider in the system. Height is fixed at 21px; only the width changes. The geometry is unchanged from v1.0 — the string positions and thicknesses are identical — and only the weights are re-tuned so the courses hold on a warm off-white ground the way they held on ink.

Rule, horizontal — on light

46px beside an eyebrow, 96px under a section label, full width as a section break. Weights run 0.38 → 1.0 of #8A6C36, closing on solid #6E5219.

Rule, horizontal — on stage ink

Unchanged from v1.0: weights 0.28 → 1.0 of #C9A96E. Inside a stage plate the original values are correct as drawn.

Rule, vertical

Rotated, it becomes the leading edge of a quote, a featured card, or a notice. The sixth string sits closest to the content it holds. This is the only decorative left edge the system permits — no plain accent bars.

Masthead strings

Descending 40px courses fading from the top edge of any stage plate. Under 4 percent opacity at the point of fade, so they never compete with the photograph beneath.

VII. Fret markers number sections, doors, and form steps.
Where it does not go
  • Never inside a form, a cart line, or a total. Commerce is unornamented.
  • Never more than once per screenful. It is a signature, not a texture.
  • Never scaled. 21px tall, always; a stretched rule stops reading as strings.
  • Never load-bearing. It is aria-hidden everywhere and carries no meaning a reader needs.
III.

Components

Hover and active states are shown as static replicas so they can be reviewed on paper. The live controls in the page examples above use the same values.

V.

Buttons

Hall red fills the primary action and appears once per view, including navigational primaries. Brass fill is reserved for giving, so a donation never competes with ticketing for the same slot. Labels are uppercase at 0.05em — a programme-note voice, not an app voice. Sizes are set by consequence, not by hierarchy: anything that moves money is 60px tall, ordinary actions are 52px, and 44px is the floor nothing goes below.

Variant
Default
Hover
Active
Focus
Disabled
Primary
#5E4514 fill
Add to cart
Add to cart
Add to cart
Add to cart
Secondary
1.5px #6E5219 edge
Compare
Compare
Compare
Compare
Tertiary
Text only, 44px target
Keep browsing
Keep browsing
Keep browsing
Keep browsing
Destructive
#9B1C1C, never filled
Remove
Remove
Remove
Remove
Inside stage blocks
8.26:1 · #17130E on #C9A96E 8.33:1 · focus ring #C9A96E

Sizes and targets

Place order60px · anything that charges a card
Add to cart52px · standard action
Tickets48px · in cards and headers
+56 × 56px · quantity steppers, both halves

The focus ring, and why it is two-tone

The ring is 3px of the surface colour, then 3px of #5E4514. Brass alone would vanish against a brass-filled primary button; the surface-coloured gap gives the ring an edge to contrast with in both directions — 8.40:1 against the page and 8.84:1 against the button fill. Inside stage blocks the ring inverts to #C9A96E with a #16120D gap, 8.33:1. It is never removed, and it is never the only difference between a focused and unfocused control.

VI.

Form fields

Labels are always visible and always above the field — placeholder-as-label fails the moment someone starts typing, and it fails worst for the readers this system is built for. Fields are 56px tall with 18px text.

Rest, focus, filled

Help text sits under the field at 17px, never inside it.

asgerdur@bcgs.org
Locked after payment

4.34:1 — above AA even though it need not be.

Error state, anatomy
  • Border thickens to 2px and turns #9B1C1C — shape changes, not just colour.
  • Field ground shifts to #FDF6F5, a warm blush that still reads at 15:1.
  • Message carries an icon and says what is wrong, in plain words, at 7.62:1.
  • aria-invalid plus aria-describedby, and role="alert" on the message.
Select and textarea
Choice controls
Delivery

Checkboxes and radios are 24–26px with the whole row as the target, so a 52px-tall label is clickable end to end.

VII.

Photograph handling

This is where the dark version's quality survives. A photograph is never dropped onto the page ground; it sits in a stage plate — a #16120D container that behaves like the darkness around a lit stage. The page stays light; the picture gets the room.

Manuel Barrueco in white tie holding his guitar
Plate, no text

The default. Ink ground, 8px radius, saturate(0.9) contrast(1.05) brightness(0.96). The grade is subtle on purpose — it unifies photographs shot across four decades without looking filtered.

Caption goes here, on the light surface below.

The BCGS Guitar Orchestra on stage
Guitar Orchestra Thirty players, one instrument
Plate with text

Text is only permitted over an image when a directional scrim holds the ink at 0.92 or higher behind the text block, and the image is dropped to brightness 0.82. Measured at the text: 17.45:1.

Example of a treatment that is not permitted: pale text over an unscrimmed photograph
Not permitted
✕ Prohibited
No text on bare photography

A text-shadow is not a contrast strategy. Contrast here varies from about 2:1 to 14:1 depending on where the letterform lands, which is exactly the condition that makes reading tiring.

Rules

  • Ratios: 21:9 hero, 16:9 feature, 3:2 card, 4:3 portrait. No free crops.
  • Faces sit in the upper third; object-position is set per image, not left at centre.
  • Alt text describes what is happening, not who commissioned it. Decorative plates get alt="".
  • An empty plate is a legitimate published state: ink ground, dashed brass outline, and a line saying what belongs there.
  • No photograph behind a form, a price, or any checkout step.
  • No duotone, no sepia, no heavy grade. The concert-hall feeling comes from the ink around the picture, not from wrecking the picture.
  • No stage plate taller than about 62vh. Past that the page starts to read as a dark page.
  • Never more than two stage blocks between the header and the footer.
VIII.

Ticketing and checkout

The rule for every component here: light ground, large targets, and the number the person is about to be charged always visible without scrolling.

Quantity stepper
2 +

56 × 56px per half, 156px overall. The count is aria-live="polite" so screen readers hear the new number, and each button's label names the ticket type rather than saying "plus".

Seat section chips
Orchestra$50 · 34 left Mezzanine$38 · 91 left BoxSold out

Selected is a 2px brass edge and a brass ground — two cues. Sold out says the words; it is never conveyed by dimming alone.

Summary rows
Tickets$176.00
Member discount, 15%−$26.40
Membership and gifts$325.00
Total $474.60
Tax-deductible portion $325.00
Seats held for 14:32

Hold timers are info blue, announced politely, and never flash or turn red. Running out extends once automatically before it releases.

Order placed

Success is stated in words with a mark, not with a colour change alone.

Card declined

Failure keeps the whole cart intact, says what to try, and gives the box office number. It never clears a form.

Commerce rules

  • A mixed cart shows the deductible split before payment, not only on the receipt. Membership benefits are intangible, so the whole contribution qualifies — and saying so is part of why people give.
  • Member pricing is applied automatically and shown as its own line. No promo code stands in for a discount someone has already paid for.
  • Recurring gifts state the cadence at the point of commitment and cancel in one click, with the same effort it took to start.
  • The box office number appears on every checkout screen. A phone call is a supported path, not a failure.
  • Checkout uses a reduced header with no navigation. Nothing competes with finishing.
X.

What was measured

Computed from the token hex values, against every surface each token is permitted on — not only the default one. Two pairings failed and were restricted rather than published.

7.31:1
Lowest ratio of any text actually shipped on a light surface — text-meta on the page ground. The 7:1 floor holds.
8.33:1
Lowest ratio inside a stage block — brass eyebrows and the six-string rule on stage ink.
3.64:1
Input and control borders against the page, clearing the 3:1 required by WCAG 1.4.11.
4.34:1
Disabled controls. Exempt from 1.4.3, measured anyway, and above AA regardless.
2
Failures found: text-meta on sunken (6.55:1) and on brass (6.53:1). Both restricted; text-secondary is used there instead.
0
Reading surfaces, prices, or checkout steps on a dark ground.