Updated links
This commit is contained in:
@@ -74,7 +74,7 @@ export function CardHeader({ dotColor, title, rightText }: CardHeaderProps) {
|
||||
textTransform: 'none',
|
||||
letterSpacing: 'normal',
|
||||
color: 'var(--text-tertiary)',
|
||||
fontFamily: "'Geist Mono', monospace",
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
marginLeft: 'auto',
|
||||
}
|
||||
|
||||
|
||||
@@ -233,7 +233,7 @@ export function DashboardLayout() {
|
||||
case 'download': {
|
||||
// For now, open the CV file or trigger a download
|
||||
// This can be wired to an actual PDF when available
|
||||
window.open('/References/CV_v4.md', '_blank')
|
||||
window.open('/Andrew_Charlwood_CV.pdf', '_blank')
|
||||
break
|
||||
}
|
||||
case 'panel': {
|
||||
|
||||
@@ -252,7 +252,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
||||
style={{
|
||||
width: '100%',
|
||||
padding: '9px 11px',
|
||||
fontFamily: "'Geist Mono', 'Fira Code', monospace",
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
fontSize: 'clamp(13px, 1.2vw, 15px)',
|
||||
backgroundColor: activeField === 'username' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
|
||||
border: activeField === 'username' ? '1px solid var(--accent, #0D6E6E)' : '1px solid var(--border-light, #E4EDEB)',
|
||||
@@ -294,7 +294,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
||||
style={{
|
||||
width: '100%',
|
||||
padding: '9px 11px',
|
||||
fontFamily: "'Geist Mono', 'Fira Code', monospace",
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
fontSize: 'clamp(13px, 1.2vw, 15px)',
|
||||
backgroundColor: activeField === 'password' ? 'var(--surface, #FFFFFF)' : 'var(--bg-dashboard, #F0F5F4)',
|
||||
border: activeField === 'password' ? '1px solid var(--accent, #0D6E6E)' : '1px solid var(--border-light, #E4EDEB)',
|
||||
@@ -370,7 +370,7 @@ export function LoginScreen({ onComplete }: LoginScreenProps) {
|
||||
/>
|
||||
<span
|
||||
style={{
|
||||
fontFamily: "var(--font-geist-mono, 'Geist Mono', monospace)",
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
fontSize: '12px',
|
||||
color: connectionState === 'connected' ? 'var(--success, #059669)' : 'var(--alert, #DC2626)',
|
||||
transition: prefersReducedMotion ? 'none' : 'color 300ms ease',
|
||||
|
||||
@@ -115,7 +115,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
|
||||
<div style={{ fontSize: '15px', fontWeight: 700, color: 'var(--text-primary)' }}>
|
||||
CHARLWOOD, Andrew
|
||||
</div>
|
||||
<div style={{ fontSize: '12px', fontFamily: 'Geist Mono, monospace', color: 'var(--text-secondary)' }}>
|
||||
<div style={{ fontSize: '12px', fontFamily: 'var(--font-geist-mono)', color: 'var(--text-secondary)' }}>
|
||||
{sidebarCopy.roleTitle}
|
||||
</div>
|
||||
</div>
|
||||
@@ -130,7 +130,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
|
||||
].map(({ label, value, mono }) => (
|
||||
<div key={label} style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', fontSize: '13px', padding: '2px 0' }}>
|
||||
<span style={{ color: 'var(--text-tertiary)' }}>{label}</span>
|
||||
<span style={{ color: 'var(--text-primary)', fontWeight: 500, textAlign: 'right', fontFamily: mono ? 'Geist Mono, monospace' : undefined, fontSize: mono ? '12px' : undefined, letterSpacing: mono ? '0.12em' : undefined }}>
|
||||
<span style={{ color: 'var(--text-primary)', fontWeight: 500, textAlign: 'right', fontFamily: mono ? 'var(--font-geist-mono)' : undefined, fontSize: mono ? '12px' : undefined, letterSpacing: mono ? '0.12em' : undefined }}>
|
||||
{value}
|
||||
</span>
|
||||
</div>
|
||||
@@ -167,7 +167,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>
|
||||
{/* Download CV — full width */}
|
||||
<a
|
||||
href="/References/CV_v4.md"
|
||||
href="/Andrew_Charlwood_CV.pdf"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="Download CV"
|
||||
@@ -214,7 +214,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
|
||||
<Send size={16} />
|
||||
</button>
|
||||
<a
|
||||
href="https://linkedin.com/in/andycharlwood"
|
||||
href="https://www.linkedin.com/in/andrewcharlwood/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="LinkedIn profile"
|
||||
@@ -233,7 +233,7 @@ export function MobileOverviewHeader({ onSearchClick }: MobileOverviewHeaderProp
|
||||
<Linkedin size={16} />
|
||||
</a>
|
||||
<a
|
||||
href="https://github.com/andycharlwood"
|
||||
href="https://github.com/andrewcharlwood"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
aria-label="GitHub profile"
|
||||
|
||||
@@ -77,7 +77,7 @@ export function PhoneCaptcha({ phone }: PhoneCaptchaProps) {
|
||||
style={{
|
||||
fontSize: '11px',
|
||||
color: error ? 'var(--alert, #e53935)' : 'var(--text-tertiary)',
|
||||
fontFamily: 'Geist Mono, monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
transition: 'color 150ms',
|
||||
}}
|
||||
>
|
||||
@@ -99,7 +99,7 @@ export function PhoneCaptcha({ phone }: PhoneCaptchaProps) {
|
||||
width: '36px',
|
||||
padding: '3px 4px',
|
||||
fontSize: '12px',
|
||||
fontFamily: 'Geist Mono, monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
border: `1px solid ${error ? 'var(--alert, #e53935)' : 'var(--border)'}`,
|
||||
borderRadius: '4px',
|
||||
background: 'var(--surface)',
|
||||
|
||||
@@ -100,7 +100,7 @@ function SkillRow({ skill, yearsSuffix, onClick, onHighlight, isDimmedByFocus =
|
||||
style={{
|
||||
fontSize: '12px',
|
||||
color: 'var(--text-tertiary)',
|
||||
fontFamily: '"Geist Mono", monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
}}
|
||||
>
|
||||
{skill.frequency} · {skill.yearsOfExperience} {yearsSuffix}
|
||||
@@ -182,7 +182,7 @@ function CategorySection({
|
||||
style={{
|
||||
fontSize: '11px',
|
||||
color: 'var(--text-tertiary)',
|
||||
fontFamily: '"Geist Mono", monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
whiteSpace: 'nowrap',
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -310,7 +310,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
|
||||
<div
|
||||
style={{
|
||||
fontSize: '13px',
|
||||
fontFamily: 'Geist Mono, monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
fontWeight: 400,
|
||||
color: 'var(--text-secondary)',
|
||||
marginTop: '2px',
|
||||
@@ -341,7 +341,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
|
||||
style={{
|
||||
color: 'var(--text-primary)',
|
||||
fontWeight: 500,
|
||||
fontFamily: 'Geist Mono, monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
fontSize: '12px',
|
||||
letterSpacing: '0.12em',
|
||||
}}
|
||||
@@ -434,7 +434,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
|
||||
</div>
|
||||
</div>
|
||||
<a
|
||||
href="/References/CV_v4.md"
|
||||
href="/Andrew_Charlwood_CV.pdf"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
style={{
|
||||
@@ -543,7 +543,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
|
||||
</button>
|
||||
<div style={{ display: 'flex', gap: '6px' }}>
|
||||
<a
|
||||
href="https://linkedin.com/in/andycharlwood"
|
||||
href="https://www.linkedin.com/in/andrewcharlwood/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="sidebar-control"
|
||||
@@ -568,7 +568,7 @@ export default function Sidebar({ activeSection, onNavigate, onSearchClick }: Si
|
||||
LinkedIn
|
||||
</a>
|
||||
<a
|
||||
href="https://github.com/andycharlwood"
|
||||
href="https://github.com/andrewcharlwood"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="sidebar-control"
|
||||
|
||||
@@ -91,7 +91,7 @@ export function SkillsAllDetail({ category }: SkillsAllDetailProps) {
|
||||
style={{
|
||||
fontSize: '10px',
|
||||
color: 'var(--text-tertiary)',
|
||||
fontFamily: '"Geist Mono", monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
whiteSpace: 'nowrap',
|
||||
}}
|
||||
>
|
||||
@@ -193,7 +193,7 @@ function SkillRow({ skill, yearsSuffix, onClick }: SkillRowProps) {
|
||||
style={{
|
||||
fontSize: '10.5px',
|
||||
color: 'var(--text-tertiary)',
|
||||
fontFamily: '"Geist Mono", monospace',
|
||||
fontFamily: 'var(--font-geist-mono)',
|
||||
}}
|
||||
>
|
||||
{skill.frequency} · {skill.yearsOfExperience} {yearsSuffix}
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ export const patient: Patient = {
|
||||
address: 'Norwich, UK',
|
||||
phone: '07795553088',
|
||||
email: 'andy@charlwood.xyz',
|
||||
linkedin: 'linkedin.com/in/andycharlwood',
|
||||
linkedin: 'linkedin.com/in/andrewcharlwood',
|
||||
status: 'Active',
|
||||
badge: 'Open to opportunities',
|
||||
qualification: 'MPharm (Hons) 2:1',
|
||||
|
||||
@@ -120,14 +120,14 @@ export const profileContent: DeepReadonly<ProfileContent> = {
|
||||
subtitle: 'Professional profile',
|
||||
keywords: 'view linkedin professional profile social networking',
|
||||
type: 'link',
|
||||
url: 'https://linkedin.com/in/andycharlwood',
|
||||
url: 'https://www.linkedin.com/in/andrewcharlwood/',
|
||||
},
|
||||
{
|
||||
title: 'View Projects',
|
||||
subtitle: 'GitHub & portfolio',
|
||||
keywords: 'view projects github portfolio code repositories open source',
|
||||
type: 'link',
|
||||
url: 'https://github.com/andycharlwood',
|
||||
url: 'https://github.com/andrewcharlwood',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
+31
-3
@@ -66,6 +66,34 @@
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
/* Monospace — Interval Mono */
|
||||
@font-face {
|
||||
font-family: 'Interval Mono';
|
||||
src: url('/Fonts/IntervalMono/WOFF/TBJInterval-Light.woff2') format('woff2'),
|
||||
url('/Fonts/IntervalMono/WOFF/TBJInterval-Light.woff') format('woff');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Interval Mono';
|
||||
src: url('/Fonts/IntervalMono/WOFF/TBJInterval-Regular.woff2') format('woff2'),
|
||||
url('/Fonts/IntervalMono/WOFF/TBJInterval-Regular.woff') format('woff');
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Interval Mono';
|
||||
src: url('/Fonts/IntervalMono/WOFF/TBJInterval-Bold.woff2') format('woff2'),
|
||||
url('/Fonts/IntervalMono/WOFF/TBJInterval-Bold.woff') format('woff');
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
/* Premium UI fonts — Blumir (alternative) */
|
||||
@font-face {
|
||||
font-family: 'Blumir';
|
||||
@@ -89,8 +117,8 @@
|
||||
--muted: #94A3B8;
|
||||
--card-bg: #FFFFFF;
|
||||
--radius: 16px;
|
||||
--font-primary: 'Plus Jakarta Sans', system-ui, sans-serif;
|
||||
--font-secondary: 'Inter Tight', system-ui, sans-serif;
|
||||
--font-primary: 'Elvaro Grotesque', system-ui, sans-serif;
|
||||
--font-secondary: 'Blumir', system-ui, sans-serif;
|
||||
|
||||
/* Typography — Elvaro Grotesque primary, Blumir alternative */
|
||||
--font-ui: 'Elvaro Grotesque', system-ui, sans-serif;
|
||||
@@ -131,7 +159,7 @@
|
||||
--shadow-md: 0 2px 8px rgba(26,43,42,0.08);
|
||||
--shadow-lg: 0 8px 32px rgba(26,43,42,0.12);
|
||||
--font-body: var(--font-ui);
|
||||
--font-mono-dashboard: 'Geist Mono', 'Fira Code', monospace;
|
||||
--font-mono-dashboard: 'Interval Mono', 'Fira Code', monospace;
|
||||
|
||||
/* Detail panel */
|
||||
--panel-narrow: 400px;
|
||||
|
||||
Reference in New Issue
Block a user