:root{--pink-50:#FFF0F5;--pink-100:#FFE0EB;--pink-200:#FFB8D9;--pink-300:#FF8AC8;--pink-400:#F45D9E;--pink-500:#D23B80;--sage-200:#B8D1BA;--sage-300:#9BC49E;--sage-400:#6B9A6D;--sage-500:#4A7A4C;--cream-50:#FFFEF5;--cream-100:#FFF9F0;--color-text-primary:#4a4a4a;--color-text-secondary:#6b7280;--color-bg-primary:var(--pink-50);--color-bg-secondary:white;--color-accent-primary:var(--pink-400);--color-accent-secondary:var(--sage-400);--color-border:var(--sage-200);--space-3xs:0.125rem;--space-2xs:0.25rem;--space-xs:0.5rem;--space-sm:0.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:2.5rem;--space-3xl:3rem;--font-size-xs:0.75rem;--font-size-sm:0.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-size-5xl:3rem;--container-max:1200px;--container-padding:var(--space-md);--duration-fast:0.15s;--duration-normal:0.2s;--duration-slow:0.3s;--ease-out:cubic-bezier(0.25,0.46,0.45,0.94);--ease-in-out:cubic-bezier(0.4,0,0.2,1);--shadow-sm:0 1px 2px rgba(0,0,0,0.05);--shadow-md:0 4px 6px rgba(0,0,0,0.07);--shadow-lg:0 10px 15px rgba(0,0,0,0.1);--shadow-xl:0 20px 25px rgba(0,0,0,0.1);--radius-sm:0.25rem;--radius-md:0.5rem;--radius-lg:0.75rem;--radius-xl:1rem;--radius-full:9999px;--focus-ring:0 0 0 3px var(--pink-300)}*,:after,:before{box-sizing:border-box}*{margin:0;padding:0}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;scroll-behavior:smooth}body{line-height:1.6;color:var(--color-text-primary);background-color:var(--color-bg-primary);min-height:100vh;display:flex;flex-direction:column;font-size:var(--font-size-base)}:focus{outline:none;box-shadow:var(--focus-ring);outline-offset:2px}:focus:not(:focus-visible){box-shadow:none}:focus-visible{box-shadow:var(--focus-ring)}.container{width:100%;max-width:var(--container-max);margin-inline:auto;padding-inline:var(--container-padding)}.skip-link{position:absolute;top:-40px;left:0;padding:var(--space-xs) var(--space-md);background-color:var(--color-accent-primary);color:white;z-index:100;transition:top var(--duration-normal) var(--ease-out);border-radius:0 0 var(--radius-md) 0}.skip-link:focus{top:0}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-xs) var(--space-md);border:2px solid transparent;border-radius:var(--radius-full);font-size:var(--font-size-sm);font-weight:500;text-decoration:none;cursor:pointer;transition:all var(--duration-normal) var(--ease-out);-webkit-user-select:none;-moz-user-select:none;user-select:none}.btn:focus,.btn:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.btn--primary{background-color:var(--color-accent-primary);color:white}.btn--secondary{background-color:var(--sage-200);color:var(--color-text-primary)}h1,h2,h3,h4,h5,h6{line-height:1.3;margin-bottom:var(--space-md);font-weight:600;letter-spacing:-.025em}h1{font-size:clamp(var(--font-size-3xl),5vw,var(--font-size-5xl));color:var(--color-accent-primary);font-weight:700}h2{font-size:clamp(var(--font-size-2xl),4vw,var(--font-size-3xl));color:var(--color-accent-secondary)}h3{font-size:clamp(var(--font-size-xl),3vw,var(--font-size-2xl));color:var(--color-accent-primary)}p{margin-bottom:var(--space-md);max-width:65ch}a{color:var(--color-accent-primary);text-decoration:none;transition:all var(--duration-normal) var(--ease-out);position:relative}a:focus,a:hover{color:var(--color-accent-secondary)}a:not(.btn):not(.logo):after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:currentColor;transition:width var(--duration-normal) var(--ease-out)}a:not(.btn):not(.logo):focus:after,a:not(.btn):not(.logo):hover:after{width:100%}header{background-color:var(--color-bg-primary);box-shadow:var(--shadow-sm);position:-webkit-sticky;position:sticky;top:0;z-index:10;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.logo{font-weight:700;font-size:var(--font-size-xl);color:var(--color-accent-primary);letter-spacing:-.025em}.nav-links{display:flex;list-style:none;gap:var(--space-sm);align-items:center}.nav-links a:focus,.nav-links a:hover{background-color:var(--pink-100)}.menu-toggle,.theme-toggle{background-color:var(--pink-300);border:none;color:white;width:36px;height:36px;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all var(--duration-normal) var(--ease-out)}.menu-toggle:focus,.menu-toggle:hover,.theme-toggle:focus,.theme-toggle:hover{background-color:var(--pink-200);transform:translateY(-2px) scale(1.05);box-shadow:var(--shadow-md)}.menu-toggle{display:none}main{flex:1 1;padding-block:var(--space-3xl)}.intro{background-color:var(--color-bg-secondary);border-radius:var(--radius-lg);padding:var(--space-xl);margin-bottom:var(--space-3xl);box-shadow:var(--shadow-md);transition:box-shadow var(--duration-slow) var(--ease-out)}.intro:hover{box-shadow:var(--shadow-lg)}.projects{margin-bottom:var(--space-3xl)}.projects h2{position:relative;margin-bottom:var(--space-xl);display:flex;align-items:center}.projects h2:after{content:"";flex:1 1;height:1px;margin-left:var(--space-md);background:linear-gradient(to right,var(--color-border),transparent)}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));grid-gap:var(--space-lg);gap:var(--space-lg)}.project{background-color:var(--color-bg-secondary);border-radius:var(--radius-md);padding:var(--space-md);box-shadow:var(--shadow-sm);transition:box-shadow var(--duration-normal) var(--ease-out);border:1px solid transparent}.project:focus-within,.project:hover{box-shadow:var(--shadow-lg);border-color:var(--pink-200)}.project h3,.project p{margin-bottom:var(--space-sm)}.project p{color:var(--color-text-secondary)}.project a{display:inline-flex;align-items:center;font-size:var(--font-size-sm);font-weight:500}.icon-small{width:14px;height:14px;margin-left:var(--space-2xs)}.resume-header{flex-direction:column;margin-bottom:var(--space-xl)}.contact-info,.resume-header{display:flex;gap:var(--space-md)}.contact-info{flex-wrap:wrap;font-size:var(--font-size-sm)}.resume-section{background-color:var(--color-bg-secondary);border-radius:var(--radius-lg);padding:var(--space-xl);margin-bottom:var(--space-xl);box-shadow:var(--shadow-md);transition:box-shadow var(--duration-normal) var(--ease-out);border:1px solid transparent}.resume-section:hover{box-shadow:var(--shadow-lg);border-color:var(--pink-100)}.resume-section h2{position:relative;margin-bottom:var(--space-lg);display:flex;align-items:center}.resume-section h2:after{content:"";flex:1 1;height:1px;margin-left:var(--space-md);background:linear-gradient(to right,var(--color-border),transparent)}.education-item,.experience-item{margin-bottom:var(--space-lg)}.education-header,.experience-header{display:flex;justify-content:space-between;flex-wrap:wrap;margin-bottom:var(--space-xs);gap:var(--space-xs)}.location{color:var(--color-accent-primary);font-weight:500}.date{color:var(--color-text-secondary);font-style:italic;font-size:var(--font-size-sm)}.degree,.job-title{font-weight:600;color:var(--color-accent-secondary)}.gpa{margin-bottom:var(--space-md);font-size:var(--font-size-sm)}.NCAE{margin-top:var(--space-md);font-size:x-small}.coursework{margin-top:var(--space-sm)}.bullet-list{padding-left:var(--space-xl);margin-bottom:var(--space-md)}.bullet-list li{margin-bottom:var(--space-xs);line-height:1.7}.skills-sections{display:flex;flex-direction:column;gap:var(--space-2xl)}.skill-heading,.skill-section{position:relative}.skill-heading{font-size:var(--font-size-lg);color:var(--color-accent-primary);margin-bottom:var(--space-lg);border-bottom:2px solid var(--color-border);padding-bottom:var(--space-sm)}.skill-heading:after{content:"";position:absolute;bottom:-2px;left:0;width:60px;height:2px;background-color:var(--color-accent-primary)}.skills-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:var(--space-sm);gap:var(--space-sm)}.skill-category{background:linear-gradient(135deg,var(--pink-50),var(--cream-50));border:1px solid var(--pink-200);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-primary);text-align:center;position:relative;overflow:hidden}.skill-category:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent)}.skill-category:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--color-accent-primary);background:linear-gradient(135deg,var(--pink-100),var(--cream-100))}.skill-category:hover:before{left:100%}footer{padding:var(--space-xl);text-align:center;margin-top:auto}footer,footer a{background-color:var(--pink-100)}.social-links{display:flex;justify-content:center;flex-wrap:wrap;gap:var(--space-md);list-style:none;margin-bottom:var(--space-md)}.social-links li{position:relative}.social-links li:not(:last-child):after{content:"•";position:absolute;right:calc(-1 * var(--space-md) / 2);color:var(--color-text-secondary)}.theme-note{margin-top:var(--space-md);padding:var(--space-sm) var(--space-md);display:inline-block;background-color:rgba(255,255,255,.5);border-radius:var(--radius-md);font-size:var(--font-size-sm)}.back-link:hover{transform:translateX(-4px)}.dark-mode{--pink-50:#3A2A35;--pink-100:#59354B;--pink-200:#8E5773;--pink-300:#B47A93;--pink-400:#D7A1B8;--pink-500:#E9C3D3;--sage-200:#3D5D3E;--sage-300:#7BA97D;--sage-400:#5D8F5F;--sage-500:#4A7A4C;--color-text-primary:#f7fafc;--color-text-secondary:#a0aec0;--color-bg-primary:#1a202c;--color-bg-secondary:#2d3748;--color-border:var(--pink-300)}.dark-mode .projects h2:after,.dark-mode .resume-section h2:after{background:linear-gradient(to right,var(--pink-400),transparent)}.dark-mode .skill-heading{border-bottom-color:var(--pink-300)}.dark-mode .skill-heading:after{background-color:var(--pink-400)}.dark-mode .skill-category{background:linear-gradient(135deg,var(--pink-100),var(--sage-200));border-color:var(--pink-300);color:var(--color-text-primary)}.dark-mode .skill-category:hover{background:linear-gradient(135deg,var(--pink-100),var(--pink-200));border-color:var(--pink-400)}@media (max-width:768px){:root{--container-padding:var(--space-sm)}.menu-toggle{display:flex}.nav-links{position:fixed;top:60px;left:0;right:0;background-color:var(--color-bg-primary);flex-direction:column;padding:var(--space-md);box-shadow:var(--shadow-lg);border-top:1px solid var(--pink-200);transform:translateY(-100%);opacity:0;pointer-events:none;transition:all var(--duration-normal) var(--ease-out);z-index:100}.nav-links.menu-open{transform:translateY(0);opacity:1;pointer-events:auto}.nav-links li{width:100%}.nav-links a{width:100%;justify-content:center;padding:var(--space-md);margin-bottom:var(--space-xs)}.intro{padding:var(--space-lg)}.education-header,.experience-header{flex-direction:column;align-items:flex-start}.resume-section{padding:var(--space-lg)}.skills-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.project-grid{grid-template-columns:1fr}.skills-sections{gap:var(--space-xl)}}@media (min-width:769px){.project-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.skills-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}}@media (min-width:1024px){.project-grid{grid-template-columns:repeat(3,1fr)}.skills-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media print{:root{--color-bg-primary:white;--color-bg-secondary:white;--shadow-sm:none;--shadow-md:none;--shadow-lg:none}body{background-color:white;color:black}.menu-toggle,.theme-toggle,footer,header{display:none}.container{max-width:100%;padding:0}.resume-section{box-shadow:none;page-break-inside:avoid;margin-bottom:var(--space-lg);border:1px solid #ddd}.resume-section:hover{transform:none;box-shadow:none}a{color:black;text-decoration:underline}.project,.skill-category{border:1px solid #ddd}.skill-category{background:#f5f5f5}}.blog-meta{display:flex;gap:var(--space-sm);margin-bottom:var(--space-sm);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.blog-meta .date{font-weight:500}.blog-meta .read-time,.read-more{color:var(--color-accent-primary)}.read-more{display:inline-flex;align-items:center;font-size:var(--font-size-sm);font-weight:500;margin-top:var(--space-sm);transition:all var(--duration-normal) var(--ease-out)}.read-more:focus,.read-more:hover{color:var(--color-accent-secondary);transform:translateX(4px)}.blog-post{background-color:var(--color-bg-secondary);border-radius:var(--radius-lg);padding:var(--space-xl);margin-bottom:var(--space-3xl);box-shadow:var(--shadow-md);transition:box-shadow var(--duration-slow) var(--ease-out)}.blog-post:hover{box-shadow:var(--shadow-lg)}.blog-post-header{margin-bottom:var(--space-2xl);padding-bottom:var(--space-lg);border-bottom:1px solid var(--color-border)}.blog-post-header h1{margin-bottom:var(--space-lg);line-height:1.2}.blog-post-meta{display:flex;gap:var(--space-md);margin-bottom:var(--space-md);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.blog-post-meta .date{font-weight:500}.blog-post-meta .read-time{color:var(--color-accent-primary)}.blog-content{max-width:75ch;line-height:1.7}.blog-content h1,.blog-content h2,.blog-content h3{margin-top:var(--space-2xl);margin-bottom:var(--space-lg)}.blog-content h1:first-child,.blog-content h2:first-child,.blog-content h3:first-child{margin-top:0}.blog-content p{margin-bottom:var(--space-lg)}.blog-content ol,.blog-content ul{margin-bottom:var(--space-lg);padding-left:var(--space-xl)}.blog-content li{margin-bottom:var(--space-xs)}.blog-content blockquote{border-left:4px solid var(--color-accent-primary);padding-left:var(--space-lg);margin:var(--space-lg) 0;font-style:italic;color:var(--color-text-secondary)}.blog-content code{background-color:var(--pink-100);padding:var(--space-3xs) var(--space-2xs);border-radius:var(--radius-sm);font-size:.9em;color:var(--color-accent-primary);border:1px solid var(--pink-200)}.blog-content code,.blog-content pre{font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}.blog-content pre{background-color:var(--color-text-primary);color:var(--color-bg-primary);padding:var(--space-lg);border-radius:var(--radius-md);overflow-x:auto;margin:var(--space-lg) 0;font-size:var(--font-size-sm);line-height:1.5}.blog-content pre code{background:none;padding:0;border:none;color:inherit;font-size:inherit}.blog-content hr{border:none;height:1px;background:linear-gradient(to right,transparent,var(--color-border),transparent);margin:var(--space-2xl) 0}.blog-content img{max-width:100%;height:auto;border-radius:var(--radius-md);box-shadow:var(--shadow-md);margin:var(--space-lg) 0}.blog-content a{color:var(--color-accent-primary);text-decoration:none;border-bottom:1px solid transparent;transition:all var(--duration-normal) var(--ease-out)}.blog-content a:focus,.blog-content a:hover{color:var(--color-accent-secondary);border-bottom-color:currentColor}.blog-content table{width:100%;border-collapse:collapse;margin:var(--space-lg) 0;font-size:var(--font-size-sm)}.blog-content td,.blog-content th{padding:var(--space-sm) var(--space-md);text-align:left;border-bottom:1px solid var(--color-border)}.blog-content th{background-color:var(--pink-100);font-weight:600;color:var(--color-text-primary)}.blog-content tbody tr:hover{background-color:var(--pink-50)}.dark-mode .blog-content code{background-color:var(--pink-200);border-color:var(--pink-300);color:var(--color-text-primary)}.dark-mode .blog-content pre{background-color:#1a1a1a;color:#f0f0f0}.dark-mode .blog-content th{background-color:var(--pink-200);color:var(--color-text-primary)}.dark-mode .blog-content tbody tr:hover{background-color:var(--pink-100)}@media (max-width:768px){.blog-post{padding:var(--space-lg)}.blog-content{max-width:100%}.blog-content pre{padding:var(--space-md);font-size:var(--font-size-xs)}.blog-meta,.blog-post-meta{flex-direction:column;gap:var(--space-xs)}}@media print{.blog-post{box-shadow:none;page-break-inside:avoid}.blog-post-header{border-bottom:1px solid #000}.blog-content pre{color:#000}.blog-content code,.blog-content pre{background-color:#f5f5f5;border:1px solid #ddd}}h1 a:after,h2 a:after,h3 a:after,h4 a:after,h5 a:after,h6 a:after{display:none!important}nav{padding-block:var(--space-md)}nav .container{display:flex;align-items:center;justify-content:space-between}.logo.active{color:var(--color-accent-secondary)}.nav-content{display:flex;align-items:center;justify-content:space-between;flex:1 1;margin-left:var(--space-xl)}.nav-links-external,.nav-links-internal{display:flex;list-style:none;gap:var(--space-sm);align-items:center;margin:0;padding:0}.nav-links-external a:focus,.nav-links-external a:hover,.nav-links-internal a.active,.nav-links-internal a:focus,.nav-links-internal a:hover{background-color:var(--pink-100)}.nav-links-internal a.active{color:var(--color-accent-secondary)}@media (max-width:768px){.menu-toggle{display:flex}.nav-content{position:fixed;top:60px;left:0;right:0;background-color:var(--color-bg-primary);flex-direction:column;gap:var(--space-md);padding:var(--space-md);box-shadow:var(--shadow-lg);border-top:1px solid var(--pink-200);transform:translateY(-100%);opacity:0;pointer-events:none;transition:all var(--duration-normal) var(--ease-out);z-index:100;margin-left:0;justify-content:flex-start}.nav-content.menu-open{transform:translateY(0);opacity:1;pointer-events:auto}.nav-links-external,.nav-links-internal{flex-direction:column;width:100%;gap:0}.nav-links-internal{border-bottom:1px solid var(--pink-200);padding-bottom:var(--space-md)}.nav-links-external{padding-top:var(--space-md)}.nav-links-external li,.nav-links-internal li{width:100%}.nav-links-external a,.nav-links-internal a{width:100%;justify-content:center;padding:var(--space-md);margin-bottom:var(--space-xs)}}.dark-mode .nav-links-external a:focus,.dark-mode .nav-links-external a:hover,.dark-mode .nav-links-internal a.active,.dark-mode .nav-links-internal a:focus,.dark-mode .nav-links-internal a:hover{background-color:var(--pink-100)}