body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}:root{--space-xs:0.5rem;--space-sm:0.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2.5rem;--space-2xl:4rem;--container-width:1200px;--sidebar-width:280px;--font-body:"Avenir Next","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--font-display:Georgia,"Times New Roman",serif;--color-text:#1f2937;--color-heading:#111827;--color-muted:#5b6472;--color-accent:#0f3d6e;--color-accent-strong:#0a2b4e;--color-accent-soft:#e7edf4;--color-surface:#fff;--color-surface-strong:#fff;--color-card-border:#d8dee6;--color-line:#d3dbe4;--color-bg:#f5f5f2;--shadow-soft:0 10px 24px #1118270a;--shadow-card:0 16px 32px #1118270f;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--transition-fast:0.18s ease}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body{background:#f5f5f2;background:var(--color-bg);color:#1f2937;color:var(--color-text);font-family:Avenir Next,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-family:var(--font-body);line-height:1.6;min-height:100vh}a{color:#0f3d6e;color:var(--color-accent);text-decoration:none;transition:color .18s ease;transition:color var(--transition-fast)}a:hover{color:#0a2b4e;color:var(--color-accent-strong)}button,input,select,textarea{font:inherit}#root{min-height:100vh}.container{margin:0 auto;max-width:1200px;max-width:var(--container-width);padding:0 1.5rem;padding:0 var(--space-lg)}.App{min-height:100vh}.layout{align-items:flex-start;display:flex;gap:2.5rem;gap:var(--space-xl);margin:0 auto;max-width:1200px;max-width:var(--container-width);padding:2.5rem 1.5rem 0;padding:var(--space-xl) var(--space-lg) 0}.layout .sidebar{flex:0 0 280px;flex:0 0 var(--sidebar-width);position:-webkit-sticky;position:sticky;top:calc(2.5rem + 78px);top:calc(var(--space-xl) + 78px)}.layout .content{flex:1 1;min-width:0}.content-full{margin:0 auto;max-width:1200px;max-width:var(--container-width);padding:2.5rem 1.5rem 0;padding:var(--space-xl) var(--space-lg) 0;width:100%}.section-heading{grid-gap:.55rem;display:grid;gap:.55rem;margin-bottom:2.25rem}.blog-title,.contact h2,.section-heading h2,.section-title{color:#111827;color:var(--color-heading);font-family:Georgia,Times New Roman,serif;font-family:var(--font-display);font-size:clamp(2.1rem,4vw,3rem);letter-spacing:-.02em;line-height:1.08}.section-eyebrow{color:#0f3d6e;color:var(--color-accent);font-size:.72rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase}.bio,.blog-subtitle,.contact p,.section-lead{color:#5b6472;color:var(--color-muted);font-size:1.05rem;max-width:760px}.surface-panel{background:#fff;background:var(--color-surface);border:1px solid #d8dee6;border:1px solid var(--color-card-border);border-radius:12px;border-radius:var(--radius-lg);box-shadow:0 10px 24px #1118270a;box-shadow:var(--shadow-soft)}@media (max-width:900px){.layout{flex-direction:column;gap:1rem;gap:var(--space-md)}.layout .sidebar{margin:0;max-width:none;position:relative;top:0;width:100%}.layout .content{width:100%}.content-full{padding:1rem;padding:var(--space-md)}}@media (max-width:600px){.container,.content-full,.layout{padding:1rem;padding:var(--space-md)}.section-heading{margin-bottom:2rem}}.header{background:#fbfbf9;border-bottom:1px solid var(--color-line);color:var(--color-heading);padding:1.1rem 0 .95rem;position:-webkit-sticky;position:sticky;top:0;z-index:40}.header .header-inner{gap:var(--space-lg);justify-content:space-between}.brand,.header .header-inner{align-items:center;display:flex}.brand{gap:1rem}.title-logo{border:1px solid var(--color-card-border);border-radius:6px;height:58px;object-fit:contain;width:auto}.brand-text{display:flex;flex-direction:column}.brand .name{font-family:var(--font-display);font-size:clamp(1.9rem,3vw,2.45rem);font-weight:600;letter-spacing:-.03em;line-height:1;margin:0}.brand .title{color:var(--color-muted);font-size:.94rem;margin:.35rem 0 0}.main-nav{display:flex;gap:1.2rem}.main-nav a{border-bottom:2px solid #0000;color:var(--color-muted);font-weight:600;padding:.2rem 0 .35rem;text-decoration:none;transition:color var(--transition-fast),border-color var(--transition-fast)}.main-nav a:focus-visible,.main-nav a:hover{color:var(--color-heading)}.main-nav a.active{border-color:var(--color-accent);color:var(--color-heading)}.socials{align-items:center;display:flex;gap:.75rem}.socials a{color:var(--color-muted);font-size:.94rem;font-weight:600}.socials a:focus-visible,.socials a:hover{color:var(--color-heading)}@media (max-width:800px){.header .header-inner{align-items:flex-start;flex-direction:column;gap:var(--space-md)}.brand{gap:.75rem}.title-logo{height:48px}.socials{margin-top:.1rem}}@media (max-width:420px){.brand{align-items:flex-start;flex-direction:column;gap:.5rem}.title-logo{height:42px}.main-nav{flex-wrap:wrap;gap:.9rem 1.2rem;justify-content:flex-start;width:100%}.main-nav a{flex:0 0 auto;text-align:left}}.sidebar{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);padding:2rem}.sidebar-inner{align-items:center;display:flex;flex-direction:column;gap:1rem;text-align:center}.avatar{border:1px solid var(--color-card-border);border-radius:10px;height:140px;object-fit:cover;width:140px}.sidebar h3{color:var(--color-heading);font-family:var(--font-display);font-size:1.55rem;font-weight:600;letter-spacing:-.025em;margin:.5rem 0 0}.sidebar .location{align-items:center;color:var(--color-muted);display:flex;font-size:.95rem;gap:.5rem;justify-content:center;margin:.25rem 0}.sidebar .location:before{content:"📍";font-size:1rem}.sidebar .email{font-size:.9rem;margin:0}.sidebar .email a{color:var(--color-accent);text-decoration:none;transition:color .2s ease}.sidebar .email a:hover{color:var(--color-accent-strong)}.sidebar-divider{background:var(--color-line);height:1px;margin:.5rem 0;width:100%}.sidebar-actions{display:flex;flex-direction:column;gap:.75rem;margin:.5rem 0;width:100%}.resume-link{align-items:center;background:var(--color-heading);border:1px solid var(--color-heading);border-radius:var(--radius-sm);color:#fff;cursor:pointer;display:flex;font-size:.95rem;font-weight:600;gap:.5rem;justify-content:center;padding:.875rem 1.5rem;text-decoration:none;transition:background .2s ease,border-color .2s ease;width:100%}.resume-link:hover{background:#1f2937;border-color:#1f2937}.resume-link:after{content:"→";font-size:1.1rem}.sidebar-socials{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center;margin-top:.5rem}.sidebar-socials a{align-items:center;background:#fff;border:1px solid var(--color-card-border);border-radius:var(--radius-sm);color:var(--color-muted);display:inline-flex;font-size:.9rem;font-weight:600;justify-content:center;min-width:100px;padding:.5rem 1rem;text-decoration:none;transition:color .2s ease,border-color .2s ease,background .2s ease}.sidebar-socials a:hover{background:#f8fafc;border-color:#b9c4d0;color:var(--color-heading)}@media (max-width:900px){.sidebar{max-width:100%}.sidebar-inner{flex-direction:row;flex-wrap:wrap;justify-content:center;text-align:left}.avatar{height:100px;width:100px}.sidebar h3{font-size:1.25rem}}@media (max-width:600px){.sidebar{padding:1.5rem}.avatar{height:80px;width:80px}.sidebar h3{font-size:1.1rem}.sidebar .email,.sidebar .location{font-size:.85rem}.sidebar-socials a{flex:1 1 120px;min-width:0}}.about{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);padding:2rem}.section-title{margin-bottom:1.5rem}.bio{font-size:1.06rem;line-height:1.8;margin-bottom:2rem}.skills{display:flex;flex-wrap:wrap;gap:.7rem}.skill{background:#f8fafc;border:1px solid var(--color-card-border);border-radius:var(--radius-sm);color:var(--color-heading);font-size:.82rem;font-weight:600;padding:.55rem .85rem;transition:border-color .2s ease,background .2s ease}.skill:hover{background:#f2f5f8;border-color:#c6d0dc}@media (max-width:768px){.about{padding:1.5rem}.bio{font-size:1rem}}.project-card{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);display:flex;flex-direction:column;gap:.9rem;height:100%;padding:1.75rem;transition:border-color .2s ease,box-shadow .2s ease}.project-card:hover{border-color:#c3ccd6;box-shadow:var(--shadow-card)}.project-copy{grid-gap:.9rem;display:grid;gap:.9rem}.project-card h4{color:var(--color-heading);font-family:var(--font-display);font-size:1.35rem;font-weight:600;line-height:1.2;margin:0}.project-tags{display:flex;flex-wrap:wrap;gap:.55rem}.project-tag{align-items:center;background:#f8fafc;border:1px solid var(--color-card-border);border-radius:var(--radius-sm);color:var(--color-muted);display:inline-flex;font-size:.72rem;font-weight:700;letter-spacing:.05em;padding:.28rem .55rem;text-transform:uppercase}.project-desc{color:var(--color-muted);flex-grow:1;line-height:1.6}.project-note{background:#f8fafc;border:1px solid var(--color-card-border);border-radius:var(--radius-md);color:var(--color-text);font-size:.9rem;line-height:1.6;padding:.9rem 1rem}.project-links{display:flex;flex-wrap:wrap;gap:.75rem}.project-links a{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:inline-flex;font-size:.88rem;font-weight:600;gap:.5rem;padding:.6rem 1rem;text-decoration:none;transition:background .2s ease,color .2s ease,border-color .2s ease}.project-links a[href*=http]:not([href*=github]){background:var(--color-heading);border:1px solid var(--color-heading);color:#fff}.project-links a[href*=http]:not([href*=github]):hover{background:#1f2937;border-color:#1f2937}.project-links a[href*=http]:not([href*=github]):before{content:"↗";font-size:.95rem;font-weight:700}.project-links a[href*=github]{background:#fff;border:1px solid var(--color-card-border);color:var(--color-heading)}.project-links a[href*=github]:hover{background:#f8fafc;border-color:#b9c4d0;color:var(--color-heading)}.project-links a[href*=github]:before{content:"</>";font-size:1.1rem;font-weight:700}@media (max-width:768px){.project-card{padding:1.5rem}.project-card h4{font-size:1.25rem}.project-links{flex-direction:column}.project-links a{justify-content:center;width:100%}}.projects{padding:.5rem 0 var(--space-2xl)}.projects-grid{grid-gap:2rem;display:grid;gap:2rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.projects-grid>*{min-height:100%}@media (max-width:768px){.projects{padding-bottom:3rem}.projects-grid{gap:1.5rem;grid-template-columns:1fr}}.blog{margin:0 auto;max-width:800px;padding:.5rem 0 var(--space-2xl)}.blog-header{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);margin-bottom:2.5rem;padding:2rem}.blog-header h1{margin-bottom:.5rem}.blog-subtitle{margin:0 0 1.5rem}.blog-controls{align-items:flex-start;display:flex;flex-direction:column;gap:.5rem;margin-top:1.5rem}.refresh-button{align-items:center;background:var(--color-heading);border:1px solid var(--color-heading);border-radius:var(--radius-sm);color:#fff;cursor:pointer;display:inline-flex;font-size:.95rem;font-weight:600;gap:.5rem;padding:.75rem 1.5rem;transition:background .2s ease,border-color .2s ease}.refresh-button:hover:not(:disabled){background:#1f2937;border-color:#1f2937}.refresh-button:disabled{cursor:not-allowed;opacity:.7}.refresh-icon{display:inline-block;font-size:1.2rem;transition:transform .3s ease}.refresh-button:hover:not(:disabled) .refresh-icon{transform:rotate(180deg)}.spinner{animation:spin .8s linear infinite;border:2px solid #ffffff4d;border-radius:50%;border-top-color:#fff;display:inline-block;height:16px;width:16px}@keyframes spin{to{transform:rotate(1turn)}}.last-updated{color:var(--color-muted);font-size:.85rem;margin:0}.error,.loading,.no-posts{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);color:var(--color-muted);font-size:1.125rem;padding:3rem 2rem;text-align:center}.error{background:#fff2f0eb;border-color:#d92d202e;color:#b42318}.loading{color:var(--color-accent)}.blog-list{display:flex;flex-direction:column;gap:1.5rem}.blog-card{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);padding:1.5rem;transition:border-color .2s ease,box-shadow .2s ease}.blog-card:hover{border-color:#c3ccd6;box-shadow:var(--shadow-card)}.blog-meta{align-items:center;display:flex;gap:.75rem;margin-bottom:.75rem}.blog-date{color:var(--color-muted);font-size:.875rem;font-weight:500}.blog-category{background:#f8fafc;border:1px solid var(--color-card-border);border-radius:var(--radius-sm);color:var(--color-muted);display:inline-block;font-size:.75rem;font-weight:600;letter-spacing:.3px;padding:.2rem .625rem;text-transform:uppercase}.blog-card h3{color:var(--color-heading);font-size:1.25rem;font-weight:600;line-height:1.4;margin:0 0 .75rem}.blog-excerpt{color:var(--color-muted);font-size:.95rem;line-height:1.6;margin-bottom:.75rem}.read-more{align-items:center;color:var(--color-accent);display:inline-flex;font-size:.875rem;font-weight:600;gap:.5rem;text-decoration:none;transition:all .2s ease}.read-more:hover{color:var(--color-accent-strong)}@media (max-width:768px){.blog{padding-bottom:3rem}.blog-header{padding:1.5rem}.blog-list{gap:1.25rem}.blog-card{padding:1.25rem}.blog-card h3{font-size:1.15rem}.blog-excerpt{font-size:.9rem}.refresh-button{font-size:.875rem;padding:.625rem 1.25rem}}.contact{padding:.5rem 0 var(--space-2xl)}.contact p{margin:0}.contact-panel{background:var(--color-surface);border:1px solid var(--color-card-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);padding:2rem}.contact a{color:var(--color-accent);font-weight:600;text-decoration:none;transition:color .2s ease}.contact a:hover{color:var(--color-accent-strong);text-decoration:underline}.contact a:focus{border-radius:2px;outline:2px solid var(--color-accent);outline-offset:2px}@media (max-width:768px){.contact{padding-bottom:3rem}.contact-panel{padding:1.5rem}}.footer{border-top:1px solid var(--color-line);color:var(--color-muted);margin-top:var(--space-xl);padding:1.25rem 0 1.5rem;text-align:center}
/*# sourceMappingURL=main.8f8c21ce.css.map*/