Austin Things To Do v2: Upgrade Design Spec¶
Hybrid of Direction 2 (Sun-Drenched Grid) + Direction 1 (dark section alternation). Concrete px/hex/asset assignments for UI implementation.
Palette Additions (extends existing tokens)¶
:root {
/* Existing tokens — unchanged */
--bg: #F7F4EF;
--surface: #FFFFFF;
--ink: #1A1714;
--ink-muted: #6B6560;
--accent: #C45C2E;
--accent-hover: #A44A22;
--highlight: #F2C94C;
--border: #E2DDD7;
/* New tokens for v2 */
--section-dark: #0F0D0B; /* near-black section panels */
--section-dark-2: #1A1410; /* alternate dark for calendar */
--teal: #0D9488; /* music/events badge */
--amber: #D97706; /* food/happy hour badge */
--overlay-mid: rgba(15,13,11,0.55); /* photo overlays, mid */
--overlay-heavy: rgba(15,13,11,0.72); /* photo overlays, text-on-photo */
--overlay-light: rgba(15,13,11,0.25); /* photo overlays, decorative only */
--card-glow: rgba(196,92,46,0.12); /* accent glow on dark cards */
}
Typography Refinements¶
No new typefaces. Additions:
- Section H2 on dark backgrounds: color: #F7F4EF (warm white), retains Fraunces 600 32px
- Section kicker (eyebrow line above H2): Inter 500, 11px, uppercase, letter-spacing 0.12em, color: var(--accent)
- Calendar day label: Fraunces 600, 24px, color: #F7F4EF
- Calendar event title: Inter 500, 13px
- Happy Hour / Sushi card name: Fraunces 600, 18px
- Price tier badge: Inter 700, 10px, uppercase
Hero Section (upgraded)¶
Asset: assets/hero/austin-skyline-lady-bird-lake.jpg as background-image
Fallback (if no image): gradient linear-gradient(160deg, #1A1410 0%, #2C1A0E 100%)
.hero {
min-height: min(85vh, 700px);
background-image:
linear-gradient(to bottom, rgba(15,13,11,0.45) 0%, rgba(15,13,11,0.65) 100%),
url('assets/hero/austin-skyline-lady-bird-lake.jpg');
background-size: cover;
background-position: center 40%;
display: flex;
align-items: flex-end;
padding-bottom: 80px;
}
- H1: Fraunces italic 600,
clamp(52px, 9vw, 96px), white, left-aligned - Subtitle: Inter 400, 20px,
rgba(247,244,239,0.85) - Bottom-right decorative PNG:
assets/icons/longhorn-photo.jpg— treated as<img>withmix-blend-mode: screen; opacity: 0.18; width: 260pxanchored bottom-right, clipped by wave divider - Wave divider color:
--bg(#F7F4EF), not midnight (preserve warm-paper landing for content sections)
Sticky Navigation¶
No structural change. Add active state scroll-spy via Intersection Observer.
Pills: Restaurants, Outdoors, Music, Nightlife, Events, Map, Happy Hour, Sushi
Section Rhythm (background alternation)¶
| Section | Background Strategy | Photo Asset |
|---|---|---|
| Things To Do (existing) | --bg warm paper |
none |
| Live Events Calendar | --section-dark + photo bg |
assets/sections/events-festival.jpg |
| Map | --bg warm paper |
none (Leaflet map is the visual) |
| Happy Hour | --section-dark + photo bg |
assets/sections/happy-hour-cocktails.jpg |
| Sushi | --bg warm paper |
none (card images carry it) |
| Food (existing) | --bg warm paper |
none |
| Music (existing) | --section-dark + photo bg |
assets/sections/music-live.jpg |
| Outdoors (existing) | --bg warm paper |
none |
| Nightlife (existing) | --section-dark + photo bg |
assets/sections/6th-street.jpg |
Dark sections use:
.section--dark {
background-image:
linear-gradient(to bottom, var(--overlay-mid) 0%, var(--overlay-heavy) 100%),
url('[section-photo]');
background-size: cover;
background-position: center;
background-attachment: fixed; /* parallax on desktop only */
}
@media (max-width: 768px) {
.section--dark { background-attachment: scroll; }
}
Live Event Calendar Section¶
Section background: --section-dark + assets/sections/events-festival.jpg overlay at var(--overlay-heavy)
Layout: Masonry grid (Direction 2)¶
.calendar-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--space-6);
}
/* mobile: 1col, tablet 768+: 2col, desktop 1024+: 3col */
Month filter strip¶
- Sticky at top of calendar section: dark frosted bar
rgba(15,13,11,0.85)backdrop-filter blur(8px) - Filter chips: Week 1 / Week 2 / Week 3 / Week 4 of the month
- Active chip:
background: var(--accent),color: white
Event card (on dark background)¶
.event-card {
background: rgba(30, 22, 14, 0.85);
border: 1px solid rgba(196,92,46,0.25);
border-radius: 8px;
overflow: hidden;
}
.event-card:hover {
border-color: var(--accent);
box-shadow: 0 0 20px var(--card-glow);
}
- Date chip:
--highlight(#F2C94C) background,--inktext, top-left badge - Category badge: teal for music, amber for food, accent for arts
- Event title: Fraunces 600 18px,
color: #F7F4EF - Venue/time: Inter 400 13px,
rgba(247,244,239,0.65) - Source link: Inter 500 12px,
color: var(--accent)
Twemoji icons used in calendar¶
- Music events:
assets/icons/musical-notes.png20px - Food events:
assets/icons/fork-knife.png20px - Tickets/all:
assets/icons/ticket.png20px
Map Section¶
Background: --bg warm paper (the Leaflet map is the hero visual here)
Leaflet map¶
#event-map {
width: 100%;
height: 440px;
border-radius: 12px;
border: 1px solid var(--border);
}
@media (max-width: 768px) {
#event-map { height: 300px; border-radius: 0; }
}
- Tile layer: CartoDB Positron (
https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png) — minimal, warm-paper compatible - Custom marker: burnt-sienna circle
#C45C2E, 12px, white border 2px, radius 8 for regular events; 14px for featured - Cluster styling:
--accentbackground, white text
Filter tabs (below map)¶
.map-tabs {
display: flex;
gap: var(--space-3);
flex-wrap: wrap;
margin-top: var(--space-6);
}
.map-tab {
padding: 6px 16px;
border-radius: 20px;
border: 1px solid var(--border);
background: var(--surface);
font: 500 12px/1 var(--font-body);
letter-spacing: 0.06em;
text-transform: uppercase;
cursor: pointer;
}
.map-tab.active { background: var(--accent); color: white; border-color: var(--accent); }
- Map pin icon:
assets/icons/map-pin.pngrendered at 18px next to "Map" section H2 - Calendar icon:
assets/icons/calendar.png18px next to event count summary
Happy Hour Section¶
Background: --section-dark + assets/sections/happy-hour-cocktails.jpg at var(--overlay-heavy)
Fallback background: assets/sections/martini-bar.jpg
Layout: Magazine spread (Direction 1)¶
On desktop (1024px+):
.happyhour-inner {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-12);
align-items: start;
}
Left column: section intro + emoji icons + pull-quote (what is happy hour in Austin) Right column: card grid 2-col
On mobile: single column, section intro above cards
Happy Hour card¶
.happyhour-card {
background: rgba(30,22,14,0.88);
border-left: 3px solid var(--accent);
border-radius: 8px;
padding: var(--space-4) var(--space-6);
}
- Bar name: Fraunces 600, 18px,
color: #F7F4EF - Neighborhood pill:
--highlightbackground,--inktext, 10px Inter 700 uppercase, border-radius 4px - Hours: Inter 400, 13px,
rgba(247,244,239,0.65), clock icon emoji prefix - Deal highlight: Inter 500, 13px,
color: var(--highlight), leadingassets/icons/beer.png16px - Price tier:
$/$$/$$$badges in Inter 700 10px, aligned right
Section kicker icon: assets/icons/cocktail-glass.png + assets/icons/clinking-glasses.png displayed 32px, side by side, in section header area
Sushi Section¶
Background: --bg warm paper (photo lives inside cards)
Layout: Photo-card grid (Direction 2)¶
.sushi-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: var(--space-6);
}
Sushi card¶
.sushi-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
}
.sushi-card__img {
width: 100%;
aspect-ratio: 16/9;
object-fit: cover;
}
.sushi-card__body { padding: var(--space-4) var(--space-6); }
- Card image:
assets/sections/sushi-plate.jpgfor all cards initially (UI team: map to individual URLs from JSON when available) - Restaurant name: Fraunces 600, 18px,
--ink - Neighborhood pill:
--teal(#0D9488) background, white text, Inter 700 10px uppercase - Signature dish: Inter 400, 14px,
--ink-muted, italic - Price tier: colored dots (green=
$, yellow=$$, red=$$$) - "View Menu" link: Inter 500, 13px,
--accent, no decoration, hover underline
Section kicker icon: assets/icons/sushi-roll.png 28px in section header
Existing Section Upgrades¶
Food section (warm paper bg)¶
- Section kicker:
assets/icons/taco.png28px +assets/icons/fire.png24px in header area - Card grid unchanged; no photo needed per card (food description is text-dominant)
Outdoors section (warm paper bg)¶
- Section kicker:
assets/icons/cactus.png28px - Pull photo:
assets/sections/texas-hill-country.jpgas decorative right-floated 40% column image, border-radius 12px, on desktop only - Image treatment:
border: 4px solid var(--border),box-shadow: 8px 8px 0 var(--highlight)(print-inspired offset shadow)
Music section (dark bg with assets/sections/music-live.jpg)¶
- Section kicker:
assets/icons/guitar.png28px +assets/icons/musical-notes.png24px - Card background:
rgba(30,22,14,0.88), same dark card style as Events
Nightlife section (dark bg with assets/sections/6th-street.jpg)¶
- Section kicker:
assets/icons/moon.png28px +assets/icons/sparkles.png24px - Same dark card treatment
Transparent PNG / Decorative Asset Usage Summary¶
| Asset | Where used | Display size | Treatment |
|---|---|---|---|
icons/longhorn-photo.jpg |
Hero, bottom-right | 260px wide | opacity: 0.18; mix-blend-mode: screen |
icons/taco.png |
Food section kicker | 28px | Inline with H2 |
icons/sushi-roll.png |
Sushi section kicker | 28px | Inline with H2 |
icons/guitar.png |
Music section kicker | 28px | Inline with H2 |
icons/cocktail-glass.png |
Happy Hour kicker | 32px | Inline with H2 |
icons/clinking-glasses.png |
Happy Hour kicker | 32px | Inline with H2 |
icons/cactus.png |
Outdoors kicker | 28px | Inline with H2 |
icons/bat.png |
Footer / Congress Bridge callout | 24px | Decorative |
icons/map-pin.png |
Map section H2 | 18px | Inline |
icons/calendar.png |
Events section H2 | 18px | Inline |
icons/musical-notes.png |
Music events in calendar | 20px | Card category icon |
icons/fork-knife.png |
Food events in calendar | 20px | Card category icon |
icons/ticket.png |
General events in calendar | 20px | Card category icon |
icons/beer.png |
Happy Hour deals | 16px | Inline with deal text |
icons/moon.png |
Nightlife section kicker | 28px | Inline with H2 |
icons/sparkles.png |
Nightlife kicker | 24px | Inline with H2 |
icons/fire.png |
BBQ / Food kicker | 24px | Inline |
icons/prickly-pear.jpg |
Texas flavor callout | 48px | Decorative sidebar |
icons/armadillo.jpg |
Fun fact callout | 48px | Decorative |
icons/star.png |
Rating indicators | 14px | Repeated for star ratings |
icons/sun.png |
Outdoors / Daytime events | 20px | Category badge |
Photo Background Spec (CSS template)¶
/* All dark sections follow this pattern */
.section--dark {
position: relative;
background-color: var(--section-dark); /* fallback */
background-image:
linear-gradient(
to bottom,
rgba(15,13,11,0.50) 0%,
rgba(15,13,11,0.75) 60%,
rgba(15,13,11,0.90) 100%
),
url('[photo-path]');
background-size: cover;
background-position: center center;
background-attachment: fixed;
color: #F7F4EF;
}
@media (max-width: 768px) {
.section--dark {
background-attachment: scroll; /* iOS parallax fix */
}
}
/* Section headings on dark backgrounds */
.section--dark .section-title { color: #F7F4EF; }
.section--dark .section-kicker { color: var(--accent); }
.section--dark .card { background: rgba(30,22,14,0.88); border-color: rgba(196,92,46,0.25); }
.section--dark .card-title { color: #F7F4EF; }
.section--dark .card-desc { color: rgba(247,244,239,0.70); }
Texture Usage¶
| Asset | Where | CSS |
|---|---|---|
textures/dark-concrete.jpg |
Behind --section-dark panels as subtle grain |
background-blend-mode: multiply; opacity: 0.08 on a pseudo-element |
textures/paper-vintage.jpg |
Behind --bg sections as parchment grain |
Same, opacity: 0.04 |
textures/bokeh-dark.jpg |
Hero alternative / large screen ambient bg | Decorative only, heavy overlay masks it |
/* Texture grain overlay — apply to any section needing depth */
.section::before {
content: '';
position: absolute;
inset: 0;
background-image: url('assets/textures/paper-vintage.jpg');
background-size: 400px 400px;
background-repeat: repeat;
opacity: 0.04;
pointer-events: none;
z-index: 0;
}
.section--dark::before {
background-image: url('assets/textures/dark-concrete.jpg');
opacity: 0.06;
}
Responsive Breakpoints¶
/* Mobile-first */
/* Default: 1 column, full-width sections */
/* 640px: 2-col card grids */
/* 768px: parallax disabled, nav scrollable */
/* 1024px: 3-col card grids, happy hour magazine split */
/* 1280px: max-width container kicks in */
Hero Image Fallback Chain¶
If austin-skyline-lady-bird-lake.jpg fails to load:
1. Try austin-6th-night.jpg (darker, neon, still strong)
2. Try austin-skyline-acl.jpg (daylight but workable)
3. Final CSS fallback: linear-gradient(160deg, #1A1410 0%, #2C1A0E 60%, #C45C2E 100%)
Use <picture> element with srcset for the hero image for performance:
<picture>
<source media="(max-width: 768px)" srcset="assets/hero/austin-skyline-acl.jpg">
<source media="(min-width: 769px)" srcset="assets/hero/austin-skyline-lady-bird-lake.jpg">
<img src="assets/hero/austin-skyline-lady-bird-lake.jpg" alt="Austin skyline at Lady Bird Lake" class="hero__bg-img">
</picture>
Asset Coverage by Section¶
| Section | Hero/BG Photo | Card Photos | Decorative PNGs |
|---|---|---|---|
| Hero | austin-skyline-lady-bird-lake.jpg | - | longhorn silhouette |
| Events Calendar | events-festival.jpg | none (text cards) | ticket, musical-notes, fork-knife |
| Map | none (Leaflet) | - | map-pin, calendar |
| Happy Hour | happy-hour-cocktails.jpg | none (text cards) | cocktail-glass, clinking-glasses, beer |
| Sushi | none (warm paper) | sushi-plate.jpg | sushi-roll |
| Food | none | none | taco, fire |
| Music | music-live.jpg | none | guitar, musical-notes |
| Outdoors | none | texas-hill-country.jpg (floated) | cactus, sun |
| Nightlife | 6th-street.jpg | none | moon, sparkles |
Handoff for UI (s8): implement this spec in styles.css + index.html. All assets are at assets/ relative to index.html. Twemoji PNGs are 72x72 and should be displayed at the sizes listed above (browser scales them with image-rendering: auto). All photo assets have been downloaded and verified.