Skip to content

Commit b95a670

Browse files
ux: full ui/ux audit — consistent back buttons, clean about page, css cleanup
- SubpageShell: replace absolute-positioned box back button with inline text link (matches certificate style) - SubpageShell: hide floating emoji on subpages (cleaner hero for About/Privacy/Terms) - About: update card borders to 2px solid #1a1a1a matching home card style - ErrorDisplay: remove mixed Tailwind classes, use inline styles only - globals.css: remove orphaned certificate action button CSS (old top-bar buttons) - globals.css: remove unused modal-fadein animation - globals.css: clean up orphaned mobile overrides for removed elements Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 94c4be5 commit b95a670

4 files changed

Lines changed: 58 additions & 117 deletions

File tree

src/app/about/page.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,14 @@ export default function AboutPage() {
3939
microcopy="Last updated March 2026"
4040
>
4141
<div className="about-cards" style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>
42-
{SECTIONS.map(({ title, body, email, coffee }, i) => (
42+
{SECTIONS.map(({ title, body, email, coffee }) => (
4343
<div
4444
key={title}
4545
style={{
46-
padding: '18px 16px',
47-
border: '1px solid #c9c9c9',
46+
padding: '20px 18px',
47+
border: '2px solid #1a1a1a',
4848
borderRadius: '0',
49-
background: '#f3f3f3',
50-
boxShadow: i === 0 ? '0 1px 6px rgba(0,0,0,0.04)' : 'none',
49+
background: '#f2f2f2',
5150
}}
5251
>
5352
<p style={{ fontFamily: UI, fontSize: 'clamp(16px, 4.2vw, 17px)', fontWeight: 700, color: '#160A06', margin: '0 0 10px 0' }}>

src/app/globals.css

Lines changed: 9 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -210,40 +210,20 @@
210210
}
211211

212212
/* Subpage ← back link */
213-
.subpage-back-link,
214-
.certificate-action-back-link,
215-
.certificate-action-a4,
216-
.certificate-action-share {
213+
.subpage-back-link {
217214
font-family: var(--font-dm), -apple-system, sans-serif;
218-
font-size: 20px;
215+
font-size: 13px;
216+
font-weight: 600;
219217
color: #0a0a0a;
220218
text-decoration: none;
221219
display: inline-flex;
222220
align-items: center;
223-
justify-content: center;
224-
width: 44px;
225-
height: 44px;
226-
padding: 0;
227-
border: 1px solid #0a0a0a;
228-
border-radius: 0;
229-
background: #f6f6f6;
230-
transition: color 0.15s, background 0.15s;
231-
font-weight: 500;
232-
line-height: 1;
233-
}
234-
235-
.subpage-back-link {
236-
position: absolute;
237-
top: 0;
238-
left: 0;
239-
z-index: 2;
240-
}
241-
.subpage-back-link:hover,
242-
.certificate-action-back-link:hover,
243-
.certificate-action-a4:hover,
244-
.certificate-action-share:hover {
245-
color: #0a0a0a;
246-
background: #e9e9e9;
221+
gap: 6px;
222+
padding: 4px 0;
223+
background: none;
224+
border: none;
225+
-webkit-tap-highlight-color: transparent;
226+
letter-spacing: 0.02em;
247227
}
248228

249229
/* ── Base interaction defaults ── */
@@ -283,11 +263,6 @@ button {
283263
flex-shrink: 0;
284264
}
285265

286-
/* ── Share modal fade-in ── */
287-
@keyframes modal-fadein {
288-
from { opacity: 0; transform: translateY(8px) scale(0.98); }
289-
to { opacity: 1; transform: translateY(0) scale(1); }
290-
}
291266

292267
/* ── Stamp: rubber-stamp impact animation ── */
293268
@keyframes stamp-in {
@@ -489,15 +464,6 @@ a.subpage-inline-mail {
489464
width: min(100%, 480px);
490465
}
491466

492-
.certificate-top-actions {
493-
width: 100%;
494-
}
495-
496-
.certificate-actions-right {
497-
min-width: 0;
498-
justify-content: flex-end;
499-
}
500-
501467
.site-footer-source-link {
502468
opacity: 0.9;
503469
}
@@ -508,12 +474,6 @@ a.subpage-inline-mail {
508474
100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(10,10,10,0); }
509475
}
510476

511-
.certificate-action-a4:hover,
512-
.certificate-action-share:hover,
513-
.certificate-action-back-link:hover {
514-
box-shadow: 0 0 0 1px rgba(0,0,0,0.2);
515-
}
516-
517477
.input-submit-button:hover {
518478
box-shadow: 0 0 0 1px rgba(0,0,0,0.22);
519479
}
@@ -522,9 +482,6 @@ a.subpage-inline-mail {
522482
opacity: 0.9;
523483
}
524484

525-
.certificate-action-a4:active,
526-
.certificate-action-share:active,
527-
.certificate-action-back-link:active,
528485
.site-footer-nav a:active,
529486
.site-footer-source-link:active {
530487
opacity: 0.82;
@@ -579,10 +536,6 @@ a.subpage-inline-mail {
579536
animation: section-fade-up 420ms ease-out both;
580537
}
581538

582-
.certificate-top-actions {
583-
animation: section-fade-up 280ms ease-out both;
584-
}
585-
586539
.certificate-card-shell {
587540
animation: section-fade-up 380ms ease-out both;
588541
}
@@ -609,7 +562,6 @@ a.subpage-inline-mail {
609562
.page-hero,
610563
.input-block,
611564
.chips-section,
612-
.certificate-top-actions,
613565
.certificate-card-shell,
614566
.site-footer,
615567
.about-cards > div,
@@ -673,44 +625,6 @@ a.subpage-inline-mail {
673625
margin: 0 auto !important;
674626
}
675627

676-
.certificate-top-actions {
677-
gap: 8px !important;
678-
align-items: center !important;
679-
justify-content: space-between !important;
680-
}
681-
682-
.certificate-actions-right {
683-
display: flex !important;
684-
align-items: center !important;
685-
justify-content: flex-end !important;
686-
flex-wrap: nowrap !important;
687-
gap: 8px !important;
688-
min-width: 0 !important;
689-
flex: 1 1 auto !important;
690-
}
691-
692-
.certificate-action-a4,
693-
.certificate-action-share {
694-
min-height: 44px !important;
695-
height: 44px !important;
696-
}
697-
698-
.certificate-action-share {
699-
width: 44px !important;
700-
min-width: 44px !important;
701-
}
702-
703-
.certificate-action-a4 {
704-
min-width: 92px !important;
705-
padding: 0 10px !important;
706-
flex: 0 0 auto !important;
707-
}
708-
709-
710-
/* Certificate action buttons: outside zoom wrapper, full width */
711-
.cert-actions { flex-direction: column !important; width: 100% !important; }
712-
.cert-buy-btn, .cert-share-btn { width: 100% !important; }
713-
714628
/* Hero: keep CTA above the fold on small screens */
715629
.page-hero { padding-bottom: 10px; }
716630
.page-hero-emoji { margin-bottom: 8px; }

src/components/ErrorDisplay.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { AnalysisError } from '@/hooks/useRepoAnalysis'
44

5-
const GH_FONT = `var(--font-dm), -apple-system, sans-serif`
5+
const FONT = `var(--font-dm), -apple-system, sans-serif`
66

77
interface Props {
88
error: AnalysisError
@@ -11,20 +11,28 @@ interface Props {
1111

1212
export default function ErrorDisplay({ error, onRetry }: Props) {
1313
return (
14-
<div className="w-full max-w-2xl mx-auto mt-6" style={{ fontFamily: GH_FONT }}>
15-
<div style={{
16-
borderLeft: '3px solid #8B1A1A',
17-
paddingLeft: '16px',
18-
}}>
19-
<p style={{ fontSize: '14px', fontWeight: 600, color: '#8B1A1A', marginBottom: '4px' }}>
14+
<div style={{ width: '100%', marginTop: '24px', fontFamily: FONT }}>
15+
<div style={{ borderLeft: '3px solid #8B1A1A', paddingLeft: '16px' }}>
16+
<p style={{ fontSize: '14px', fontWeight: 600, color: '#8B1A1A', margin: '0 0 4px 0' }}>
2017
{error.message}
2118
</p>
2219
{error.retryAfter ? (
23-
<p style={{ fontSize: '13px', color: '#7A5C38' }}>retry in {error.retryAfter}s</p>
20+
<p style={{ fontSize: '13px', color: '#7A5C38', margin: 0 }}>retry in {error.retryAfter}s</p>
2421
) : (
2522
<button
2623
onClick={onRetry}
27-
style={{ fontSize: '13px', color: '#7A5C38', background: 'none', border: 'none', cursor: 'pointer', padding: 0, transition: 'color 0.15s' }}
24+
style={{
25+
fontFamily: FONT,
26+
fontSize: '13px',
27+
color: '#7A5C38',
28+
background: 'none',
29+
border: 'none',
30+
padding: 0,
31+
cursor: 'pointer',
32+
textDecoration: 'underline',
33+
textUnderlineOffset: '3px',
34+
transition: 'color 0.15s',
35+
}}
2836
onMouseEnter={e => (e.currentTarget.style.color = '#2A1A0E')}
2937
onMouseLeave={e => (e.currentTarget.style.color = '#7A5C38')}
3038
>

src/components/SubpageShell.tsx

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ import Link from 'next/link'
33
import SiteFooter from '@/components/SiteFooter'
44
import PageHero from '@/components/PageHero'
55

6+
const UI = `var(--font-dm), -apple-system, sans-serif`
7+
68
type Props = {
79
subtitle: ReactNode
810
title?: string
911
microcopy?: ReactNode | null
10-
/** Primary CTA under the two-line hero (e.g. FAQ) */
1112
headerExtra?: ReactNode
1213
children: ReactNode
1314
}
@@ -16,13 +17,32 @@ export default function SubpageShell({ subtitle, title, microcopy, headerExtra,
1617
return (
1718
<main className="page-shell-main">
1819
<div className="page-shell-inner">
19-
<Link href="/" className="subpage-back-link" aria-label="Back">
20-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0a0a0a" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round" aria-hidden>
21-
<path d="M15 18l-6-6 6-6"></path>
22-
<path d="M9 12h12"></path>
23-
</svg>
24-
</Link>
25-
<PageHero subtitle={subtitle} title={title} microcopy={microcopy} brandHref="/" />
20+
<div style={{ paddingBottom: '4px', marginBottom: '2px' }}>
21+
<Link
22+
href="/"
23+
aria-label="Back to home"
24+
style={{
25+
fontFamily: UI,
26+
display: 'inline-flex',
27+
alignItems: 'center',
28+
gap: '6px',
29+
color: '#0a0a0a',
30+
textDecoration: 'none',
31+
fontSize: '13px',
32+
fontWeight: 600,
33+
letterSpacing: '0.02em',
34+
padding: '4px 0',
35+
WebkitTapHighlightColor: 'transparent',
36+
}}
37+
>
38+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round" aria-hidden>
39+
<path d="M15 18l-6-6 6-6"></path>
40+
</svg>
41+
back
42+
</Link>
43+
</div>
44+
45+
<PageHero subtitle={subtitle} title={title} microcopy={microcopy} brandHref="/" hideEmoji />
2646
{headerExtra ? <div className="page-hero-extra">{headerExtra}</div> : null}
2747

2848
<div className="page-shell-body page-shell-body--subpage">{children}</div>

0 commit comments

Comments
 (0)