@import url(https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap);@tailwind base;@tailwind components;@tailwind utilities;*{box-sizing:border-box;margin:0;padding:0}:root{--header-bg:#f8e8e8;--bg-primary:#fff;--bg-secondary:#fafafa;--text-primary:#1a1a1a;--text-secondary:#666;--text-light:#999;--accent-pink:#f5c2c2;--accent-blue:#4a90e2;--border-color:#e8e8e8;--card-bg:#fff;--card-border:#f0f0f0;--shadow-sm:0 2px 8px #0000000a;--shadow-md:0 4px 16px #00000014;--shadow-lg:0 8px 24px #0000001f;--border-radius:12px;--toggle-bg:#f5f5f5;--toggle-bg-hover:#e8e8e8;--toggle-border:#e0e0e0}[data-theme=dark]{--header-bg:#1a1a1a;--bg-primary:#121212;--bg-secondary:#1e1e1e;--text-primary:#fff;--text-secondary:#b0b0b0;--text-light:grey;--accent-pink:#c98787;--accent-blue:#6bb3ff;--border-color:#2a2a2a;--card-bg:#1e1e1e;--card-border:#2a2a2a;--shadow-sm:0 2px 8px #0000004d;--shadow-md:0 4px 16px #0006;--shadow-lg:0 8px 24px #00000080;--toggle-bg:#2a2a2a;--toggle-bg-hover:#353535;--toggle-border:#3a3a3a}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#fff;background:var(--bg-primary);color:#1a1a1a;color:var(--text-primary);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:16px;line-height:1.7;margin:0;min-height:100vh}code{font-family:SF Mono,Monaco,Inconsolata,Roboto Mono,Courier New,monospace}.App{background:var(--bg-primary);margin:0 auto;max-width:1200px;min-height:100vh;padding:0;position:relative;z-index:1}.error-container,.loading-container{align-items:center;color:var(--text-primary);display:flex;flex-direction:column;justify-content:center;min-height:100vh}.error-in-main,.loading-in-main{min-height:40vh;padding:2rem 1rem}.error-hint{color:var(--text-secondary);font-size:.9rem;font-weight:400;margin-top:.75rem}.spinner{animation:spin .8s linear infinite;border-top:3px solid var(--border-color);border:3px solid var(--border-color);border-radius:50%;border-top-color:var(--accent-pink);height:50px;margin-bottom:24px;width:50px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.error-container{color:#e74c3c}main{background:var(--bg-primary);padding:0;position:relative}@media (max-width:768px){.App{padding:0}}.theme-toggle{align-items:center;background:var(--toggle-bg);border:1px solid var(--toggle-border);border-radius:50%;color:var(--text-primary);cursor:pointer;display:flex;height:40px;justify-content:center;margin-left:16px;outline:none;padding:0;transition:all .3s ease;width:40px}.theme-toggle:hover{background:var(--toggle-bg-hover);transform:scale(1.1)}.theme-toggle:active{transform:scale(.95)}.theme-icon{font-size:18px;transition:transform .3s ease}.theme-toggle:hover .theme-icon{transform:rotate(15deg)}@media (max-width:768px){.theme-toggle{height:36px;margin-left:12px;width:36px}.theme-icon{font-size:16px}}.header{background:var(--header-bg);border-bottom:1px solid var(--border-color);position:-webkit-sticky;position:sticky;top:0;width:100%;z-index:100}.header-container{justify-content:space-between;margin:0 auto;max-width:1200px;padding:16px 24px}.header-container,.header-left{align-items:center;display:flex}.header-left{color:inherit;gap:12px;text-decoration:none;transition:opacity .2s ease}.header-left:hover{opacity:.8}.avatar-circle,.header-avatar{align-items:center;display:flex}.avatar-circle{background:var(--accent-pink);border:2px solid #fffc;border-radius:50%;font-weight:600;height:40px;justify-content:center;width:40px}.avatar-circle,.header-name{color:var(--text-primary);font-size:18px}.header-name{font-weight:500;letter-spacing:-.01em;text-transform:lowercase}.header-nav-wrapper{align-items:center;display:flex;gap:12px}.header-mobile-theme{display:none}.header-menu-btn{align-items:center;background:#f5f5f5;background:var(--toggle-bg,#f5f5f5);border:1px solid var(--border-color);border-radius:8px;border-radius:var(--border-radius,8px);color:var(--text-primary);cursor:pointer;display:none;font-size:1.1rem;height:38px;justify-content:center;line-height:1;padding:0;transition:background .2s ease,color .2s ease;width:38px}.header-menu-btn:hover{background:#e8e8e8;background:var(--toggle-bg-hover,#e8e8e8)}.header-menu-btn:focus{outline:2px solid var(--accent-pink);outline-offset:2px}.header-nav{align-items:center;display:flex;flex-wrap:nowrap;gap:24px}.nav-link{color:var(--text-primary);font-size:16px;font-weight:400;padding:4px 0;position:relative;text-decoration:none;text-transform:lowercase;transition:color .2s ease}.nav-link:hover{color:var(--text-secondary)}.nav-link.active{color:var(--text-primary);font-weight:600}.nav-link.active:after{background:var(--text-primary);bottom:0;content:"";height:2px;left:0;position:absolute;right:0}.hero-section{background:var(--bg-primary);margin:0 auto;max-width:1200px;padding:80px 24px 60px;text-align:center}.hero-title{color:var(--text-primary);font-size:3rem;font-weight:700;letter-spacing:-.02em;line-height:1.2}@media (max-width:768px){.header-container{flex-wrap:wrap;gap:12px;padding:12px 16px}.header-menu-btn{display:flex}.header-mobile-theme{display:block}.header-nav .theme-toggle{display:none}.header-nav-wrapper{align-items:center;flex-wrap:wrap;justify-content:flex-end}.header-nav-wrapper-open{order:3;width:100%}.header-nav{align-items:stretch;border-top:1px solid var(--border-color);display:none;flex-direction:column;gap:0;margin-top:8px;padding:16px 0 8px;width:100%}.header-nav-wrapper-open .header-nav{display:flex}.header-nav .nav-link{border-bottom:none;font-size:1rem;padding:12px 0}.header-nav .nav-link.active:after{display:none}.header-nav .nav-link.active{color:var(--accent-pink);font-weight:600}.hero-section{padding:60px 16px 40px}.hero-title{font-size:2rem}}.section{background:var(--bg-primary);margin:0 auto;max-width:1200px;padding:80px 24px}.section-content{margin:0 auto;max-width:900px}.section .section-title{text-align:center}.about-section{overflow:hidden;position:relative;scroll-margin-top:80px}.about-section .section-content{animation:aboutFadeIn .6s ease-out;position:relative;z-index:1}@keyframes aboutFadeIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.about-section .section-title.about-title{color:var(--text-primary);font-size:1.5rem;font-weight:700;letter-spacing:-.02em;line-height:1.2;margin-bottom:12px;text-align:center}.about-tagline{color:var(--text-secondary);font-size:1.1rem;font-style:italic;margin-bottom:28px;margin-left:auto;margin-right:auto;max-width:600px;text-align:center}.about-bio{color:var(--text-primary);font-size:1.125rem;font-weight:400;line-height:1.8;margin:0 auto 36px;max-width:800px;text-align:left}.about-highlights{display:flex;flex-wrap:wrap;gap:20px 32px;justify-content:center;margin-bottom:40px}.about-highlight-item{align-items:center;background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);color:var(--text-primary);display:flex;font-size:.95rem;gap:10px;padding:10px 18px;transition:all .2s ease}.about-highlight-item:hover{border-color:var(--accent-pink);box-shadow:var(--shadow-sm);transform:translateY(-2px)}.about-highlight-icon{color:var(--accent-pink);flex-shrink:0;font-size:1.1rem}.about-looking-for{background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);margin-bottom:40px;padding:24px}.about-subtitle{color:var(--text-primary);font-size:1rem;font-weight:600;margin:0 0 12px}.about-looking-for-text{color:var(--text-secondary);font-size:1rem;line-height:1.7;margin:0}.about-accordion{margin-bottom:40px}.about-accordion-item{background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);margin-bottom:12px;overflow:hidden}.about-accordion-item:last-child{margin-bottom:0}.about-accordion-trigger{align-items:center;background:#0000;border:none;color:var(--text-primary);cursor:pointer;display:flex;font-family:inherit;font-size:1rem;font-weight:600;justify-content:space-between;padding:16px 20px;text-align:left;transition:background .2s ease;width:100%}.about-accordion-trigger:hover{background:#f5c2c21a}.about-accordion-icon{color:var(--text-secondary);flex-shrink:0;font-size:1.25rem;font-weight:300;transition:transform .2s ease}.about-accordion-content{max-height:0;overflow:hidden;transition:max-height .3s ease}.about-accordion-content.about-accordion-expanded{max-height:2000px}.about-accordion-content p{border-top:1px solid var(--card-border);color:var(--text-secondary);font-size:.95rem;line-height:1.7;margin:0;padding:16px 20px 20px}.about-links{display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-bottom:32px}.about-link{align-items:center;background:var(--text-primary);border:1px solid var(--text-primary);border-radius:var(--border-radius);color:var(--bg-primary);display:inline-flex;font-size:.9rem;font-weight:500;padding:10px 20px;text-decoration:none;transition:all .2s ease}.about-link:hover{background:var(--accent-pink);border-color:var(--accent-pink);box-shadow:var(--shadow-md);color:var(--text-primary);transform:translateY(-2px)}.about-link-resume{background:var(--bg-secondary);border-color:var(--card-border);color:var(--text-primary)}.about-link-resume:hover{background:var(--accent-pink);border-color:var(--accent-pink)}.about-resume-cta{margin-bottom:32px;text-align:center}.about-resume-btn{align-items:center;background:var(--accent-pink);border:1px solid var(--accent-pink);border-radius:var(--border-radius);color:var(--bg-primary);display:inline-flex;font-size:1rem;font-weight:600;padding:12px 24px;text-decoration:none;transition:all .2s ease}.about-resume-btn:hover{background:var(--accent-blue);border-color:var(--accent-blue);box-shadow:var(--shadow-md);color:var(--bg-primary);transform:translateY(-2px)}@media (max-width:768px){.section{padding:60px 16px}.about-section .section-title.about-title{font-size:1.5rem;margin-bottom:10px}.about-tagline{font-size:1rem;margin-bottom:24px}.about-bio{font-size:1rem;line-height:1.7;margin-bottom:28px}.about-highlights{gap:12px;margin-bottom:32px}.about-highlight-item{font-size:.9rem;padding:8px 14px}.about-looking-for{margin-bottom:32px;padding:20px}.about-accordion-trigger{font-size:.95rem;padding:14px 16px}.about-accordion-content p{padding:12px 16px 16px}.about-links{gap:10px;margin-bottom:28px}.about-link{font-size:.85rem;padding:10px 16px}}.footer{background:var(--bg-secondary);border-top:1px solid var(--border-color);margin-left:auto;margin-right:auto;margin-top:0;max-width:1200px;padding:60px 24px;text-align:center}.footer,.footer p{color:var(--text-secondary)}.footer p{font-size:.95rem;margin:6px 0}.footer-subtitle{color:var(--text-light);font-size:.85rem;font-weight:400;margin-top:8px}@media (max-width:768px){.footer{padding:40px 16px}.footer p{font-size:.9rem}.footer-subtitle{font-size:.8rem}}.projects-intro{color:var(--text-secondary);font-size:1.125rem;line-height:1.8;margin-bottom:40px;margin-left:auto;margin-right:auto;max-width:800px;text-align:center}.projects-grid{grid-gap:18px;display:grid;gap:18px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));margin-top:40px}.project-card{background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);display:flex;flex-direction:column;overflow:visible;padding:0;position:relative;transition:all .3s ease}.project-card:hover{border-color:var(--accent-pink);box-shadow:var(--shadow-lg);transform:translateY(-4px)}.project-image-container{align-items:center;background:var(--bg-primary);border-radius:var(--border-radius) var(--border-radius) 0 0;display:flex;height:140px;justify-content:center;overflow:hidden;position:relative;width:100%;z-index:1}.project-image{display:block;height:100%;object-fit:cover;object-position:top;transition:transform .3s ease;width:100%}.project-card:hover .project-image{transform:scale(1.05)}.project-title-container{align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-bottom:0;padding:14px 16px;text-align:center}.project-title{color:var(--text-primary);font-size:1.2rem;font-weight:700;letter-spacing:-.01em;margin:0}.project-badge{align-items:center;box-shadow:0 2px 6px #0003;display:inline-flex;font-size:.68rem;font-weight:800;justify-content:center;left:-2px;letter-spacing:.12em;line-height:1.2;padding:6px 14px 6px 18px;position:absolute;text-transform:uppercase;top:12px;z-index:100}.project-badge-wip{background:#c00;border:none;border-radius:0 4px 4px 0;color:#fff;padding-right:18px;text-shadow:0 1px 1px #0000004d}.project-badge-wip:after{border-bottom:10px solid #0000;border-left:8px solid #c00;border-top:10px solid #0000;content:"";filter:drop-shadow(1px 0 2px rgba(0,0,0,.15));height:0;position:absolute;right:-8px;top:50%;transform:translateY(-50%);width:0}.project-description{color:var(--text-secondary);font-size:.9rem;line-height:1.6;margin-bottom:16px;min-height:60px}.project-description-preview{font-size:.85rem;margin-bottom:8px;min-height:48px}.project-description strong{color:var(--text-primary);font-weight:600}.project-links{display:flex;flex-wrap:wrap;gap:12px;margin-top:auto}.project-link{align-items:center;background:var(--text-primary);border:1px solid var(--text-primary);border-radius:8px;color:var(--bg-primary);display:inline-flex;font-size:.9rem;font-weight:500;justify-content:center;padding:10px 20px;text-decoration:none;transition:all .2s ease}.project-link:hover{background:var(--accent-pink);border-color:var(--accent-pink);color:var(--text-primary);transform:translateY(-1px)}.projects-section{scroll-margin-top:80px}.expandable-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);inset:0;position:fixed;z-index:1000}.expandable-grid{position:relative}.expandable-card-wrapper{align-items:center;display:flex;inset:0;justify-content:center;padding:24px;pointer-events:none;position:fixed;z-index:1001}.expandable-card-wrapper .expandable-card-content{border:1px solid;border-radius:var(--border-radius);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:calc(100vh - 48px);max-width:560px;overflow:hidden;pointer-events:auto;width:100%}.expandable-close{align-items:center;border:1px solid var(--card-border);border-radius:50%;cursor:pointer;display:flex;height:36px;justify-content:center;position:absolute;right:12px;top:12px;transition:all .2s ease;width:36px;z-index:10}.expandable-close:hover{background:var(--accent-pink)!important;border-color:var(--accent-pink)}.expandable-card-inner{overflow-y:auto;padding:24px}.expandable-card-image-wrap{background:var(--bg-primary);border-radius:var(--border-radius);height:220px;margin-bottom:20px;overflow:hidden;position:relative;width:100%}.expandable-card-image{display:block;height:100%;object-fit:cover;object-position:top;width:100%}.expandable-card-body{padding:0}.expandable-card-title{color:var(--text-primary);font-size:1.5rem;font-weight:700;margin:0 0 12px}.expandable-card-description{color:var(--text-secondary);font-size:.95rem;line-height:1.7;margin-bottom:16px}.expandable-card-tech{color:var(--text-secondary);font-size:.9rem;line-height:1.6;margin-bottom:20px}.expandable-card-tech strong{color:var(--text-primary);font-weight:600}.expandable-card-links{display:flex;flex-wrap:wrap;gap:12px}.expandable-trigger{cursor:pointer}.expandable-hint{color:var(--text-light);font-size:.75rem;margin-top:auto;padding-top:8px}@media (max-width:768px){.projects-grid{gap:16px;grid-template-columns:1fr;margin-top:32px}.project-title-container{padding:12px 14px}.project-title{font-size:1.1rem}}.resume-section{scroll-margin-top:80px}.resume-content{max-width:720px}.resume-title{font-size:1.5rem;font-weight:700;margin-bottom:24px}.resume-name,.resume-title{color:var(--text-primary);text-align:center}.resume-name{font-size:1.25rem;font-weight:600;margin:0 0 8px}.resume-summary{color:var(--text-secondary);font-size:1rem;line-height:1.7;margin:0 0 40px;text-align:center}.resume-block{margin-bottom:40px}.resume-block:last-child{margin-bottom:0}.resume-block-title{border-bottom:1px solid var(--card-border);color:var(--text-primary);font-size:1rem;font-weight:600;letter-spacing:.04em;margin:0 0 20px;padding-bottom:8px;text-transform:uppercase}.resume-entry{margin-bottom:28px}.resume-entry:last-child{margin-bottom:0}.resume-entry-header{align-items:baseline;display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between;margin-bottom:4px}.resume-entry-role{color:var(--text-primary);font-size:1.05rem;font-weight:600}.resume-entry-dates{color:var(--text-secondary);font-size:.9rem;white-space:nowrap}.resume-entry-company{color:var(--text-secondary);font-size:.95rem;margin:0 0 8px}.resume-entry-description{color:var(--text-primary);font-size:.95rem;line-height:1.6;margin:0 0 8px}.resume-entry-bullets{color:var(--text-primary);font-size:.95rem;line-height:1.65;margin:0;padding-left:1.25rem}.resume-entry-bullets li{margin-bottom:4px}.resume-placeholder{color:var(--text-secondary);font-size:1rem;line-height:1.7;margin:24px 0;text-align:center}.resume-skills-grid{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.resume-skill-category{background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);padding:20px}.resume-skill-category-title{color:var(--text-primary);font-size:.95rem;font-weight:600;margin:0 0 12px}.resume-skill-tags{display:flex;flex-wrap:wrap;gap:8px}.resume-skill-tag{background:var(--bg-primary);border:1px solid var(--card-border);border-radius:20px;color:var(--text-primary);font-size:.85rem;font-weight:500;padding:6px 12px}@media (max-width:768px){.resume-entry-header{align-items:flex-start;flex-direction:column}.resume-entry-dates{white-space:normal}}.contact-description{color:var(--text-secondary);font-size:1.125rem;line-height:1.8;margin-bottom:40px;margin-left:auto;margin-right:auto;max-width:700px;text-align:center}.contact-links{display:flex;flex-wrap:wrap;gap:20px;justify-content:center}.contact-link{align-items:center;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--border-radius);color:var(--text-primary);display:flex;font-size:1rem;font-weight:500;gap:8px;padding:16px 24px;text-decoration:none;transition:all .2s ease}.contact-link:hover{background:var(--accent-pink);border-color:var(--accent-pink);box-shadow:var(--shadow-md);transform:translateY(-2px)}.contact-icon{color:var(--text-primary);font-size:1.5rem}.contact-icon-strava{flex-shrink:0;height:1.5rem;width:1.5rem}.contact-section{scroll-margin-top:80px}@media (max-width:768px){.contact-description{font-size:1rem;margin-bottom:32px}.contact-links{align-items:stretch;flex-direction:column;gap:12px}.contact-link{font-size:.95rem;justify-content:center;padding:14px 20px}.contact-icon{font-size:1.1rem}}.books-section{padding-top:40px;scroll-margin-top:80px}.books-intro{color:var(--text-secondary);font-size:1rem;line-height:1.7;margin-bottom:24px;margin-left:auto;margin-right:auto;max-width:700px;text-align:center}.books-setup{margin:0 auto 40px;max-width:600px}.goodreads-form{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px}.goodreads-input{background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);color:var(--text-primary);flex:1 1;font-family:inherit;font-size:1rem;min-width:200px;padding:12px 16px;transition:border-color .3s ease,box-shadow .3s ease}.goodreads-input:focus{border-color:var(--accent-pink);box-shadow:0 0 0 3px #ec48991a;outline:none}.goodreads-refresh-btn,.goodreads-submit-btn{background:var(--accent-pink);border:none;border-radius:var(--border-radius);color:var(--text-primary);cursor:pointer;font-family:inherit;font-size:1rem;font-weight:600;padding:12px 24px;transition:all .3s ease;white-space:nowrap}.goodreads-refresh-btn:hover:not(:disabled),.goodreads-submit-btn:hover:not(:disabled){box-shadow:var(--shadow-md);transform:translateY(-2px)}.goodreads-refresh-btn:active:not(:disabled),.goodreads-submit-btn:active:not(:disabled){transform:translateY(0)}.goodreads-refresh-btn:disabled,.goodreads-submit-btn:disabled{cursor:not-allowed;opacity:.6}.goodreads-refresh-btn{display:block;margin:0 auto}.books-error,.goodreads-refresh-btn{background:var(--bg-secondary);border:1px solid var(--card-border)}.books-error{border-radius:var(--border-radius);margin-bottom:40px;margin-left:auto;margin-right:auto;max-width:600px;padding:24px;text-align:center}.books-error p{color:var(--text-primary);margin-bottom:8px}.books-error-help{color:var(--text-secondary);font-size:.9rem;margin-bottom:0!important}.books-loading{padding:40px;text-align:center}.books-loading p{color:var(--text-secondary);margin-top:16px}.books-count{color:var(--text-secondary);font-size:.95rem;margin-bottom:32px;text-align:center}.books-grid{grid-gap:24px;display:grid;gap:24px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));margin:0 auto;max-width:1200px}.book-card{background:var(--bg-secondary);border:1px solid var(--card-border);border-radius:var(--border-radius);color:inherit;cursor:pointer;display:flex;flex-direction:column;overflow:hidden;text-decoration:none;transition:all .3s ease}.book-card:hover{border-color:var(--accent-pink);box-shadow:var(--shadow-lg);transform:translateY(-4px)}.book-cover{aspect-ratio:2/3;background:var(--bg-primary);object-fit:cover;width:100%}.book-cover-placeholder{align-items:center;aspect-ratio:2/3;background:var(--accent-pink);color:var(--text-primary);display:flex;font-size:3rem;font-weight:700;justify-content:center;width:100%}.book-info{display:flex;flex:1 1;flex-direction:column;padding:16px}.book-title{-webkit-line-clamp:2;color:var(--text-primary);font-size:1rem;font-weight:600;line-height:1.3}.book-author,.book-title{-webkit-box-orient:vertical;display:-webkit-box;margin:0 0 8px;overflow:hidden}.book-author{-webkit-line-clamp:1;color:var(--text-secondary);font-size:.85rem}.book-rating{color:#f5c842;font-size:.9rem;letter-spacing:2px;margin-top:auto}.books-empty{color:var(--text-secondary);padding:40px;text-align:center}@media (max-width:768px){.books-section{padding:20px 16px;scroll-margin-top:60px}.goodreads-form{flex-direction:column}.goodreads-input,.goodreads-refresh-btn,.goodreads-submit-btn{width:100%}.books-grid{gap:16px;grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}.book-info{padding:12px}.book-title{font-size:.9rem}.book-author{font-size:.8rem}}
/*# sourceMappingURL=main.cf0a295e.css.map*/