@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}:root,html[data-theme=ivory]{--bg-primary:#ece9e3;--bg-secondary:#f9f6f1d6;--hero-start:#fffaf4;--hero-end:#d8c9b2;--text-main:#181d25;--text-muted:#495566;--text-soft:#5f6f83;--border-color:#485c772e;--border-hover:#485c7757;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-sans:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--glass-bg:#f8f5f0a8;--glass-bg-strong:#fffcf7c7;--ambient-a:#f4be826b;--ambient-b:#7e9cc63d;--ambient-c:#769fd924;--shell-border:#485c7738;--shadow-main:#27314033;--button-bg:#f9f6f1b3;--button-bg-hover:#ffffffdb;--button-bg-active:#253243;--button-text:#3f4e62;--button-text-active:#f4f7fb;--button-border:#485c7738;--button-border-strong:#485c7761;--card-glow:#81a0cd33;--card-sheen:#ffffff8f;--grain-opacity:.065;--grid-line:#485c7717;--page-max:1520px;--page-max-plain:1360px;--home-links-max:1400px;--reading-max:1080px;--downsampling-mode:boxcar;--downsampling-factor:1;--downsampling-step:calc(var(--downsampling-factor) * 1px);--pixelize-enabled:1;--pixelize-opacity:.22;--blur-multiplier:1;--orb-blur:118px;--orb-opacity:.72;--atmosphere-blur:82px;--motion-fast:.18s;--motion-medium:.26s;--motion-slow:.38s;--motion-hover:.34s;--motion-enter:.3s;--motion-nav:.18s;--motion-stagger-1:55ms;--motion-stagger-2:.11s;--motion-stagger-3:.165s;--motion-stagger-4:.22s;--motion-stagger-5:.275s;--ease-sleek:cubic-bezier(.22, .61, .36, 1);--text-xs:clamp(.75rem, 1vw, .8rem);--text-sm:clamp(.85rem, 1.2vw, .95rem);--text-base:1rem;--text-lg:clamp(1.1rem, 2vw, 1.2rem);--text-xl:clamp(1.25rem, 2.5vw, 1.4rem);--text-2xl:clamp(1.5rem, 3.5vw, 1.8rem);--text-3xl:clamp(2rem, 5vw, 2.6rem);--text-4xl:clamp(2.5rem, 7vw, 3.4rem);--text-hero:clamp(3.6rem, 12vw, 7.2rem);--leading-none:1;--leading-tight:1.2;--leading-snug:1.4;--leading-relaxed:1.6;--leading-loose:1.8;--tracking-tighter:-.04em;--tracking-tight:-.02em;--tracking-normal:0em;--tracking-wide:.02em;--tracking-wider:.04em}@keyframes fadeRise{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translate(0,0)}}@keyframes projectCardEnter{0%{opacity:0;transform:translateY(22px)scale(.985)}to{opacity:1;transform:translate(0,0)scale(1)}}@keyframes projectDetailReveal{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translate(0,0)}}@keyframes heroTextReveal{0%{opacity:0;filter:blur(6px);transform:translateY(28px)}to{opacity:1;filter:blur();transform:translate(0,0)}}@keyframes headingUnderline{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes orbDrift1{0%,to{transform:translate(0,0)scale(1)}25%{transform:translate(8vw,-6vh)scale(1.08)}50%{transform:translate(-4vw,4vh)scale(.95)}75%{transform:translate(5vw,8vh)scale(1.04)}}@keyframes orbDrift2{0%,to{transform:translate(0,0)scale(1)}25%{transform:translate(-6vw,5vh)scale(.96)}50%{transform:translate(7vw,-3vh)scale(1.06)}75%{transform:translate(-3vw,-7vh)scale(.98)}}html,body,#root{min-height:100%}html{scroll-behavior:smooth;background-color:var(--bg-primary);overflow-x:hidden}#scene-bg{z-index:-2;background-image:var(--scene-image);pointer-events:none;filter:blur();background-position:50%;background-repeat:no-repeat;background-size:cover;transition:filter .6s cubic-bezier(.22,.61,.36,1);position:fixed;inset:0}html[data-scene-quality=tiny] #scene-bg{filter:blur(16px);transform:scale(1.04)}*{box-sizing:border-box}body{min-height:100vh;color:var(--text-main);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-relaxed);text-rendering:optimizelegibility;isolation:isolate;transition:color var(--motion-fast) ease, background-color var(--motion-fast) ease;margin:0;position:relative}body:before{content:"";z-index:-1;pointer-events:none;transition:background-color var(--motion-fast) ease;background:#ece9e326;position:fixed;inset:0}body:after{content:none}.ambient-orb{pointer-events:none;z-index:-1;filter:blur(var(--orb-blur));opacity:var(--orb-opacity,.2);will-change:transform;border-radius:50%;position:fixed}.ambient-orb-one{background:radial-gradient(circle, var(--ambient-a), transparent 72%);width:clamp(280px,36vw,520px);height:clamp(280px,36vw,520px);animation:28s ease-in-out infinite orbDrift1;top:-8%;right:-6%}.ambient-orb-two{background:radial-gradient(circle, var(--ambient-b), transparent 72%);width:clamp(220px,28vw,420px);height:clamp(220px,28vw,420px);animation:24s ease-in-out infinite orbDrift2;bottom:-4%;left:-8%}.page-shell{z-index:2;width:min(var(--page-max), 100% - 2rem);animation:pageEnter var(--motion-nav) var(--ease-sleek);will-change:opacity, transform;transition:opacity var(--motion-nav) var(--ease-sleek), transform var(--motion-nav) var(--ease-sleek);margin:0 auto;padding:1.4rem 0 3rem;position:relative}html.is-nav-exiting .page-shell{opacity:.65;transform:translateY(2px)}@keyframes pageEnter{0%{opacity:.9;transform:translateY(2px)}to{opacity:1;transform:translate(0,0)}}.page-shell-plain{width:min(var(--page-max-plain), 100% - 2rem)}.app-shell{border:1px solid var(--shell-border);background:linear-gradient(180deg, var(--bg-secondary), var(--glass-bg-strong));-webkit-backdrop-filter:none;box-shadow:0 30px 80px -32px var(--shadow-main), inset 0 1px 0 #ffffff14, 0 0 0 1px #ffffff05;will-change:auto;border-radius:22px;position:relative;overflow:hidden}.app-shell:before{content:"";filter:none;pointer-events:none;background:radial-gradient(circle at 24% 18%,#ffffff26,#0000 70%);height:46%;position:absolute;inset:-28% -16% auto}.app-topbar{z-index:3;border-bottom:1px solid var(--border-color);background:linear-gradient(180deg, var(--bg-secondary), var(--glass-bg-strong));-webkit-backdrop-filter:none;will-change:auto;justify-content:center;align-items:center;gap:1rem;padding:.9rem 1.1rem;display:flex;position:sticky;top:0}.app-topbar-plain{-webkit-backdrop-filter:none;background:0 0;border-bottom:0;padding-left:0;padding-right:0}.app-brand{font-family:var(--font-serif);font-size:var(--text-lg);letter-spacing:var(--tracking-wide);margin:0}.app-controls{align-items:center;gap:.55rem;margin-inline:auto;display:inline-flex}.app-nav{flex-wrap:wrap;gap:.45rem;display:flex}.app-tab{color:var(--button-text);border:1px solid var(--button-border);background:var(--button-bg);font-size:var(--text-sm);letter-spacing:var(--tracking-wide);transition:transform var(--motion-hover) var(--ease-sleek), border-color var(--motion-medium) ease, color var(--motion-medium) ease, background-color var(--motion-medium) ease, box-shadow var(--motion-hover) var(--ease-sleek);border-radius:999px;justify-content:center;align-items:center;padding:.62rem .92rem;font-weight:600;text-decoration:none;display:inline-flex;transform:translateY(0)scale(1)}.app-tab:hover{color:var(--text-main);border-color:var(--button-border-strong);background:var(--button-bg-hover);box-shadow:0 18px 32px -20px var(--shadow-main);transform:translateY(-2px)scale(1.026)}.app-tab:focus-visible{border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb, var(--ambient-a) 35%, transparent);outline:none}.app-tab.is-active{color:var(--button-text-active);border-color:var(--button-border-strong);background:var(--button-bg-active)}.app-content{padding:1.45rem 1.15rem 2rem;position:relative}.app-content-plain{padding-left:0;padding-right:0}h1,h2,h3{font-family:var(--font-serif);color:var(--text-main);font-weight:400}header.page-header h1{font-size:var(--text-4xl);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);margin-bottom:.35rem}.subtitle{color:var(--text-muted);letter-spacing:var(--tracking-wide);margin:0}.article-content h2,.project-detail-content h2{padding-bottom:.55rem;position:relative}.article-content h2:after,.project-detail-content h2:after{content:"";background:linear-gradient(90deg, var(--ambient-a), var(--ambient-b));transform-origin:0;width:38%;height:2px;transition:transform .5s var(--ease-sleek);border-radius:2px;position:absolute;bottom:0;left:0;transform:scaleX(0)}.article-content h2.is-revealed:after,.project-detail-content h2.is-revealed:after{transform:scaleX(1)}.nav-back{color:var(--text-muted);transition:color var(--motion-medium) ease, transform var(--motion-hover) var(--ease-sleek), box-shadow var(--motion-hover) var(--ease-sleek);align-items:center;margin-bottom:1.25rem;text-decoration:none;display:inline-flex;transform:translateY(0)scale(1)}.nav-back:hover{color:var(--text-main);box-shadow:0 14px 26px -22px var(--shadow-main);transform:translateY(-2px)scale(1.01)}.link-grid,.project-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin-top:1.5rem;display:grid}.home-links{flex-wrap:wrap;gap:.7rem;margin-top:1.25rem;display:flex}.home-stage{flex-direction:column;justify-content:center;align-items:center;min-height:clamp(26rem,100vh - 8.5rem,54rem);padding-top:0;display:flex}.home-hero{text-align:center;width:min(900px,100%);margin:0 auto}.home-hero h1{font-size:var(--text-hero);line-height:var(--leading-none);letter-spacing:var(--tracking-tighter);animation:heroTextReveal .7s var(--ease-sleek) both;margin-bottom:.4rem}.home-hero .subtitle{font-size:var(--text-lg);animation:heroTextReveal .7s var(--ease-sleek) .18s both}.home-links-centered{width:min(var(--home-links-max), 100%);justify-content:center;margin:clamp(1.2rem,3.8vh,2.4rem) auto 0}.home-link{color:var(--button-text);letter-spacing:.008em;border:1.2px solid var(--button-border);background:color-mix(in srgb, var(--bg-secondary) 64%, transparent);min-width:14.8rem;min-height:5.1rem;font-weight:550;font-size:var(--text-xl);text-align:center;-webkit-backdrop-filter:blur(8px)saturate(112%);will-change:auto;isolation:isolate;transform-origin:50% 100%;box-shadow:0 12px 24px -24px var(--shadow-main), inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 58%, transparent);transition:color var(--motion-medium) ease, border-color var(--motion-medium) ease, background-color var(--motion-medium) ease, transform var(--motion-hover) var(--ease-sleek), box-shadow var(--motion-hover) var(--ease-sleek);border-radius:12px;justify-content:center;align-items:center;gap:.74rem;padding:.9rem 2.26rem;text-decoration:none;display:inline-flex;position:relative;overflow:hidden;transform:translateY(0)scale(1)}.home-link:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--ambient-a) 26%, transparent), transparent 74%);filter:blur(14px);opacity:.12;pointer-events:none;border-radius:999px;width:74%;height:84%;transition:opacity .2s,transform .2s;position:absolute;top:18%;left:-10%;transform:translate(0,0)scale(1)}.home-link:after{content:"↗";opacity:0;color:var(--text-soft);font-size:var(--text-sm);line-height:var(--leading-none);transition:transform .2s,opacity .2s,color .2s;position:absolute;top:50%;right:.84rem;transform:translate(8px,-50%)}.home-link:hover{color:var(--text-main);border-color:var(--button-border-strong);background:color-mix(in srgb, var(--button-bg-hover) 66%, transparent);box-shadow:0 46px 70px -26px var(--shadow-main), 0 0 28px color-mix(in srgb, var(--ambient-a) 30%, transparent), inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 74%, transparent);transform:translateY(-8px)scale(1.12)}.home-link:hover:before{opacity:.24;transform:translate(7%,-3%)scale(1.04)}.home-link:hover:after{opacity:.9;color:var(--text-main);transform:translateY(-50%)}.home-link-icon{width:3.2rem;height:3.2rem;color:var(--home-icon-color,color-mix(in srgb, var(--text-soft) 88%, var(--button-text) 12%));box-shadow:none;opacity:.98;filter:drop-shadow(0 4px 8px color-mix(in srgb, var(--shadow-main) 26%, transparent));background:0 0;border:none;border-radius:0;flex:none;justify-content:center;align-items:center;transition:color .2s,transform .3s cubic-bezier(.22,1,.36,1),filter .3s cubic-bezier(.22,1,.36,1);display:inline-flex;transform:translateY(0)scale(1)}.home-link-icon svg{fill:currentColor;width:2.4rem;height:2.4rem;display:block;overflow:visible}.home-link-label{z-index:1;line-height:1.04;position:relative}.home-link:hover .home-link-icon{color:var(--home-icon-color-hover,color-mix(in srgb, var(--text-main) 78%, var(--ambient-a) 22%));filter:drop-shadow(0 12px 16px color-mix(in srgb, var(--ambient-a) 34%, transparent));transition:color .2s,transform .4s cubic-bezier(.34,1.56,.64,1),filter .3s cubic-bezier(.22,1,.36,1);transform:translateY(-3px)scale(1.15)}.home-link[data-icon=projects]{--home-icon-color:color-mix(in srgb, #f59e0b 72%, var(--text-main) 28%);--home-icon-color-hover:color-mix(in srgb, #fbbf24 78%, var(--text-main) 22%)}.home-link[data-icon=github]{--home-icon-color:color-mix(in srgb, var(--text-main) 86%, #6e7681 14%);--home-icon-color-hover:color-mix(in srgb, var(--text-main) 94%, #24292f 6%)}.home-link[data-icon=github] .home-link-icon svg{width:2.25rem;height:2.25rem}.home-link[data-icon=linkedin]{--home-icon-color:color-mix(in srgb, #0a66c2 76%, var(--text-main) 24%);--home-icon-color-hover:color-mix(in srgb, #1282f0 82%, var(--text-main) 18%)}.home-link[data-icon=unsplash]{--home-icon-color:color-mix(in srgb, var(--text-main) 94%, #000 6%);--home-icon-color-hover:var(--text-main)}.home-link[data-icon=unsplash] .home-link-icon svg{width:2.15rem;height:2.15rem}.home-link[data-icon=instagram]{--home-icon-color:color-mix(in srgb, #e1306c 76%, var(--text-main) 24%);--home-icon-color-hover:color-mix(in srgb, #ff4f8b 82%, var(--text-main) 18%)}.home-links .home-link,.project-grid>.project-card,.project-grid>.section-card,.app-content>section,.app-content>article,.app-content>header{animation:fadeRise var(--motion-enter) var(--ease-sleek) both}.home-links .home-link:nth-child(2),.project-grid>:nth-child(2),.app-content>:nth-child(2){animation-delay:var(--motion-stagger-1)}.home-links .home-link:nth-child(3),.project-grid>:nth-child(3),.app-content>:nth-child(3){animation-delay:var(--motion-stagger-2)}.home-links .home-link:nth-child(4),.project-grid>:nth-child(4),.app-content>:nth-child(4){animation-delay:var(--motion-stagger-3)}.home-link:focus-visible{border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb, var(--ambient-a) 35%, transparent), 0 18px 34px -24px var(--shadow-main);outline:none}.page-shell-plain .project-grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.page-shell-plain .project-card,.page-shell-plain .section-card{border:1px solid var(--button-border);background:var(--button-bg);-webkit-backdrop-filter:none;box-shadow:none;border-radius:1.1rem/.95rem}.page-shell-plain .project-card:hover,.page-shell-plain .section-card:hover{border-color:var(--button-border-strong);background:var(--button-bg-hover);box-shadow:none}.page-shell-plain .data-table{-webkit-backdrop-filter:none;background:0 0}.page-shell-plain .data-table th,.page-shell-plain .data-table td{background:color-mix(in srgb, var(--button-bg) 82%, transparent)}.page-shell-plain .nav-back,.page-shell-plain .meta-row a:not(.project-action-button){border:1px solid var(--button-border);background:var(--button-bg);color:var(--button-text);transition:color var(--motion-medium) ease, border-color var(--motion-medium) ease, background-color var(--motion-medium) ease, transform var(--motion-hover) var(--ease-sleek), box-shadow var(--motion-hover) var(--ease-sleek);border-radius:1rem/.9rem;align-items:center;padding:.36rem .68rem;text-decoration:none;display:inline-flex;transform:translateY(0)scale(1)}.page-shell-plain .nav-back:hover,.page-shell-plain .meta-row a:not(.project-action-button):hover{color:var(--text-main);border-color:var(--button-border-strong);background:var(--button-bg-hover);box-shadow:0 18px 34px -24px var(--shadow-main);transform:translateY(-2px)scale(1.012)}.link-card,.project-card,.section-card{border:1px solid var(--border-color);background:linear-gradient(180deg, var(--bg-secondary), var(--glass-bg-strong));-webkit-backdrop-filter:none;will-change:auto;color:inherit;transition:transform var(--motion-hover) var(--ease-sleek), border-color var(--motion-medium) ease, box-shadow var(--motion-hover) var(--ease-sleek);border-radius:14px;padding:1.15rem;text-decoration:none;display:block;transform:translateY(0)scale(1)}.link-card:focus-visible,.project-card:focus-visible,.section-card:focus-visible,.nav-back:focus-visible,.meta-row a:focus-visible{border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb, var(--ambient-a) 35%, transparent);outline:none}.link-card:hover,.project-card:hover,.section-card:hover{border-color:var(--border-hover);box-shadow:0 36px 78px -36px var(--shadow-main);transform:translateY(-4px)scale(1.008)}.link-grid .link-card{text-align:center;letter-spacing:.01em;background:var(--button-bg);border:1px solid var(--button-border);border-radius:999px;padding:.82rem 1rem;font-weight:600}.link-grid .link-card:hover{background:var(--button-bg-hover);border-color:var(--button-border-strong)}.project-card h2{font-size:var(--text-xl);line-height:var(--leading-tight);margin:0 0 .4rem}.project-card p{color:var(--text-muted);margin:0 0 .8rem}.project-grid.projects-showcase{grid-template-columns:repeat(auto-fit,minmax(420px,1fr));align-items:stretch;gap:1.15rem}.projects-page-header h1{letter-spacing:var(--tracking-tight);overflow-wrap:anywhere}.projects-page-subtitle{overflow-wrap:break-word;max-width:58ch}.projects-showcase .project-card{border:1px solid color-mix(in srgb, var(--button-border) 82%, transparent);background:linear-gradient(155deg, color-mix(in srgb, var(--button-bg) 74%, transparent), color-mix(in srgb, var(--glass-bg-strong) 86%, transparent)), radial-gradient(circle at 8% 0%, var(--card-glow), transparent 58%);-webkit-backdrop-filter:none;min-height:100%;box-shadow:0 24px 54px -34px var(--shadow-main), inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 78%, transparent);isolation:isolate;transform-origin:50% 14%;animation:projectCardEnter var(--motion-enter) var(--ease-sleek) both;transition:transform var(--motion-slow) var(--ease-sleek), border-color var(--motion-medium) ease, box-shadow var(--motion-slow) var(--ease-sleek), background-color var(--motion-medium) ease;border-radius:1.24rem;flex-direction:column;gap:.28rem;padding:1.6rem 1.5rem 1.5rem;display:flex;position:relative;overflow:hidden}.projects-showcase .project-card p{-webkit-line-clamp:6;line-clamp:6;color:var(--text-soft);line-height:var(--leading-relaxed);overflow-wrap:break-word;-webkit-box-orient:vertical;margin:.35rem 0 1.25rem;display:-webkit-box;overflow:hidden}.projects-showcase .project-card:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--card-sheen) 88%, transparent), transparent 74%);opacity:.38;pointer-events:none;width:84%;height:56%;position:absolute;inset:-34% auto auto -16%}.projects-showcase .project-card:after{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--ambient-b) 48%, transparent), transparent 72%);opacity:.8;pointer-events:none;border-radius:50%;width:58%;height:58%;position:absolute;inset:auto -14% -44% auto}.projects-showcase .project-card:hover{border-color:var(--button-border-strong);box-shadow:0 64px 104px -36px var(--shadow-main), 0 0 26px color-mix(in srgb, var(--ambient-b) 22%, transparent), inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 96%, transparent);transform:translateY(-14px)scale(1.03)}.projects-showcase .project-card:hover:before{opacity:.62;transition:opacity .4s ease, transform .6s var(--ease-sleek);transform:translate(6%,-4%)}.projects-showcase .project-card:nth-child(2){animation-delay:var(--motion-stagger-1)}.projects-showcase .project-card:nth-child(3){animation-delay:var(--motion-stagger-2)}.projects-showcase .project-card:nth-child(4){animation-delay:var(--motion-stagger-3)}.projects-showcase .project-card:nth-child(5){animation-delay:var(--motion-stagger-4)}.projects-showcase .project-card:nth-child(6){animation-delay:var(--motion-stagger-5)}.project-card-title-row{justify-content:space-between;align-items:baseline;gap:.8rem;display:flex}.project-card-head{align-items:center;gap:.78rem;margin-bottom:.3rem;display:flex}.project-card-icon-box{border:1px solid color-mix(in srgb, var(--button-border) 86%, transparent);background:color-mix(in srgb, var(--button-bg) 82%, transparent);width:2.9rem;height:2.9rem;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 80%, transparent);border-radius:.78rem;flex:none;overflow:hidden}.project-card-icon{object-fit:cover;width:100%;height:100%;display:block}.project-card-icon-fallback,.project-detail-icon-fallback{width:100%;height:100%;color:var(--text-soft);justify-content:center;align-items:center;font-weight:700;display:inline-flex}.projects-showcase .project-card h2{font-size:var(--text-xl);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);overflow-wrap:anywhere;margin:0}.project-card-arrow{border:1px solid color-mix(in srgb, var(--button-border) 86%, transparent);background:color-mix(in srgb, var(--button-bg) 84%, transparent);min-width:1.8rem;min-height:1.8rem;color:var(--text-soft);font-size:var(--text-sm);line-height:var(--leading-none);transition:transform var(--motion-hover) var(--ease-sleek), color var(--motion-medium) ease, border-color var(--motion-medium) ease, background-color var(--motion-medium) ease;border-radius:999px;justify-content:center;align-items:center;display:inline-flex}.projects-showcase .project-card:hover .project-card-arrow{color:var(--text-main);border-color:var(--button-border-strong);background:color-mix(in srgb, var(--button-bg-hover) 82%, transparent);transform:translate(10px)scale(1.1)rotate(-10deg)}.project-tag-list{margin-top:auto}.projects-showcase .project-card .tag{border-color:color-mix(in srgb, var(--border-color) 74%, transparent);background:color-mix(in srgb, var(--button-bg) 88%, transparent);color:var(--text-soft)}.tag-list{flex-wrap:wrap;gap:.45rem;display:flex}.tag{border:1px solid var(--border-color);background:var(--button-bg);font-size:var(--text-xs);color:var(--text-muted);border-radius:999px;padding:.2rem .6rem}.meta-row{color:var(--text-muted);flex-wrap:wrap;gap:.7rem 1rem;margin:.5rem 0 1.3rem;display:flex}.article{max-width:var(--reading-max)}.project-detail-card{border:1px solid color-mix(in srgb, var(--button-border) 84%, transparent);background:linear-gradient(168deg, color-mix(in srgb, var(--button-bg) 72%, transparent), color-mix(in srgb, var(--glass-bg-strong) 92%, transparent)), radial-gradient(circle at 8% 0%, color-mix(in srgb, var(--card-glow) 84%, transparent), transparent 62%);-webkit-backdrop-filter:none;box-shadow:0 24px 60px -36px var(--shadow-main), inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 88%, transparent);animation:projectDetailReveal .56s var(--ease-sleek) both;border-radius:1.3rem;padding:1.2rem 1.3rem 1.32rem}.project-detail-header h1{letter-spacing:var(--tracking-tight);overflow-wrap:anywhere;margin-top:0;margin-bottom:.42rem}.project-detail-title-wrap{align-items:center;gap:.92rem;margin-bottom:.24rem;display:flex}.project-detail-icon-box{border:1px solid color-mix(in srgb, var(--button-border) 84%, transparent);background:color-mix(in srgb, var(--button-bg) 84%, transparent);width:3.2rem;height:3.2rem;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--card-sheen) 88%, transparent);border-radius:.88rem;flex:none;overflow:hidden}.project-detail-icon{object-fit:cover;width:100%;height:100%;display:block}.project-detail-icon-box:has(img[src*=mimick]),.project-card-icon-box:has(img[src*=mimick]){box-shadow:none;background:0 0;border-color:#0000}.project-detail-card .meta-row{gap:.62rem;margin:.6rem 0 1.08rem;display:grid}.project-action-row{flex-wrap:wrap;gap:.58rem;display:flex}.project-action-button{min-height:2.16rem;font-size:var(--text-sm);letter-spacing:var(--tracking-wider);text-transform:uppercase;border:1px solid color-mix(in srgb, var(--button-border) 82%, transparent);background:linear-gradient(155deg, color-mix(in srgb, var(--button-bg) 82%, transparent), color-mix(in srgb, var(--glass-bg-strong) 90%, transparent));color:var(--button-text);transition:color var(--motion-medium) ease, border-color var(--motion-medium) ease, background-color var(--motion-medium) ease, transform .46s var(--ease-sleek), box-shadow .46s var(--ease-sleek);border-radius:999px;justify-content:center;align-items:center;gap:.44rem;padding:.38rem .84rem;font-weight:700;text-decoration:none;display:inline-flex;transform:translateY(0)scale(1)}.project-action-button:after{content:"↗";font-size:var(--text-xs);line-height:var(--leading-none);color:var(--text-soft);transition:transform .42s var(--ease-sleek), color var(--motion-medium) ease}.project-action-button:hover{color:var(--text-main);border-color:var(--button-border-strong);background:color-mix(in srgb, var(--button-bg-hover) 84%, transparent);box-shadow:0 24px 44px -28px var(--shadow-main);transform:translateY(-3px)scale(1.016)}.project-action-button:hover:after{color:var(--text-main);transform:translate(5px)}.project-action-button:focus-visible{border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb, var(--ambient-a) 35%, transparent);outline:none}.project-action-primary{background:color-mix(in srgb, var(--button-bg-active) 88%, transparent);color:var(--button-text-active);border-color:color-mix(in srgb, var(--button-border-strong) 82%, transparent)}.project-action-primary:after{color:currentColor}.project-meta-row{flex-wrap:wrap;gap:.42rem;display:flex}.project-meta-chip{border:1px solid color-mix(in srgb, var(--button-border) 84%, transparent);background:color-mix(in srgb, var(--button-bg) 82%, transparent);color:var(--text-soft);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);border-radius:999px;align-items:center;padding:.24rem .62rem;display:inline-flex}.project-detail-card .article-content{border-top:1px solid color-mix(in srgb, var(--border-color) 72%, transparent);margin-top:.2rem}.project-detail-content p{overflow-wrap:break-word;line-height:1.68}.project-detail-content h2,.project-detail-content h3{letter-spacing:var(--tracking-normal);overflow-wrap:anywhere}.article-content{border-top:1px solid var(--border-color);padding-top:1rem}.article-content h2{margin-top:2rem}.article-content p,.article-content li{color:var(--text-main)}.data-table{border-collapse:collapse;background:linear-gradient(180deg, var(--glass-bg-strong), var(--glass-bg));-webkit-backdrop-filter:none;width:100%;margin-top:1rem}.data-table th,.data-table td{border:1px solid var(--border-color);text-align:left;padding:.7rem}.data-table th{width:30%;color:var(--text-muted);font-weight:600}.data-table caption{caption-side:top;text-align:left;color:var(--text-soft);margin-bottom:.55rem}@supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.app-shell,.app-topbar,.link-card,.project-card,.section-card,.data-table,.app-tab,.link-grid .link-card,.tag{background:var(--bg-secondary)}}@media (width<=720px){html,body{background-attachment:scroll}body{font-size:var(--text-sm)}.ambient-orb{filter:none;opacity:calc(var(--orb-opacity) * .88)}.page-shell{width:min(var(--page-max), 100% - 1rem);padding-top:.8rem}.app-topbar{padding:.72rem .78rem}.app-topbar-plain{padding-left:0;padding-right:0}.app-brand{font-size:var(--text-base)}.app-controls{gap:.45rem}.app-tab{font-size:var(--text-sm);padding:.42rem .84rem}.theme-toggle{width:8.4rem;min-height:2rem}.theme-toggle-label{font-size:var(--text-xs);letter-spacing:var(--tracking-wider)}.app-content{padding:1.05rem .82rem 1.45rem}.app-content-plain{padding-left:0;padding-right:0}body:after{filter:none;opacity:.6}.home-links{gap:.58rem}.home-stage{min-height:clamp(20rem,100vh - 8.2rem,44rem);padding-top:0}.home-hero{margin-top:0}.home-hero h1{font-size:var(--text-4xl)}.home-hero .subtitle{font-size:var(--text-base)}.home-link{min-width:10.2rem;min-height:3.2rem;font-size:var(--text-lg);gap:.52rem;padding:.68rem 1.28rem}.home-link-icon{width:1.9rem;height:1.9rem}.home-link-icon svg{width:1.34rem;height:1.34rem}.home-link[data-icon=github] .home-link-icon svg{width:1.26rem;height:1.26rem}.home-link[data-icon=unsplash] .home-link-icon svg{width:1.22rem;height:1.22rem}.home-link:after{font-size:var(--text-xs);right:.66rem}.projects-showcase{grid-template-columns:1fr;gap:.86rem}.project-card-head{gap:.66rem}.project-card-icon-box{width:2.6rem;height:2.6rem}.project-detail-title-wrap{align-items:flex-start}.project-detail-icon-box{width:2.75rem;height:2.75rem}.projects-showcase .project-card{-webkit-backdrop-filter:none;padding:1.02rem .95rem 1.04rem}.project-detail-card{padding:1.04rem .95rem 1.1rem}.page-shell-plain .project-card,.page-shell-plain .section-card,.link-card,.project-card,.section-card,.data-table{-webkit-backdrop-filter:none}}[data-reveal],[data-reveal-stagger]>*{opacity:0;transition:opacity .48s var(--ease-sleek), transform .48s var(--ease-sleek);transform:translateY(22px)}[data-reveal].is-revealed,[data-reveal-stagger].is-revealed>.is-revealed{opacity:1;transform:translate(0,0)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.page-shell,.theme-toggle[data-theme-switching=true],.theme-toggle[data-theme-switching=true]:before,.home-links .home-link,.projects-showcase .project-card,.project-detail-card{animation:none!important}.home-hero h1,.home-hero .subtitle{opacity:1;filter:none;animation:none!important}.ambient-orb{animation:none!important}[data-reveal],[data-reveal-stagger]>*{opacity:1!important;transition:none!important;transform:none!important}.article-content h2:after,.project-detail-content h2:after{transform:scaleX(1);transition:none!important}.project-action-button,.home-link,.link-card,.project-card,.section-card,.app-tab,.theme-toggle,.nav-back{transition-duration:var(--motion-fast)!important;transition-delay:0s!important}}@media (width<=520px){.app-topbar,.app-topbar-plain{align-items:flex-start}.app-controls{flex-direction:column;align-items:flex-end}.home-links{justify-content:center;width:100%}.home-link{text-align:center;width:min(44vw,11.5rem)}}.attribution-badge{text-align:center;background-color:var(--button-bg);border:1px solid var(--button-border);font-size:var(--text-sm);color:var(--text-soft);letter-spacing:var(--tracking-normal);font-weight:500;line-height:var(--leading-relaxed);transition:background-color var(--motion-fast) ease, border-color var(--motion-fast) ease;border-radius:8px;margin-top:1.5rem;margin-bottom:1.25rem;padding:.4rem .8rem;display:inline-block;position:relative}.attribution-badge:hover{background-color:var(--button-bg-hover);border-color:var(--button-border-strong)}.attribution-badge a{color:inherit;text-decoration:none}.attribution-badge a:hover{text-decoration:underline}.attribution-badge a:first-of-type{position:static}.attribution-badge a:first-of-type:after{content:"";z-index:1;border-radius:inherit;position:absolute;inset:0}.attribution-badge a:not(:first-of-type){z-index:2;position:relative}.project-detail-content img,.project-detail-content video{vertical-align:middle;border:1px solid var(--border-color);background:var(--bg-secondary);border-radius:8px;max-width:100%;height:auto;margin:1rem .5rem;display:inline-block}.project-detail-content p:has(img:not([src*=shields\.io])){text-align:center}.project-detail-content p:has(img[src*=shields\.io]){flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:2rem;display:flex}.project-detail-content p:has(img[src*=shields\.io]) a,.project-detail-content p:has(img[src*=shields\.io]) img{display:inline-block;margin:0!important}.project-detail-content table{border-collapse:collapse;background:linear-gradient(180deg, var(--glass-bg-strong), var(--glass-bg));width:100%;box-shadow:0 4px 6px var(--shadow-main);border-radius:8px;margin:2rem 0;overflow:hidden}.project-detail-content th,.project-detail-content td{border:1px solid var(--border-color);text-align:left;padding:.85rem 1.15rem}.project-detail-content th{color:var(--text-main);background:var(--bg-secondary);font-weight:600}.project-detail-content tr:nth-child(2n){background:#00000008}.project-detail-content pre{border:1px solid var(--border-color);box-shadow:0 12px 32px -12px var(--shadow-main);font-size:var(--text-sm);line-height:var(--leading-relaxed);border-radius:12px;margin:2.5rem 0;overflow-x:auto;padding:1.25rem 1.5rem!important}.project-detail-content pre code{color:inherit;background:0 0!important;border-radius:0!important;padding:0!important}.project-detail-content :not(pre)>code{background:var(--bg-secondary);border:1px solid var(--border-color);font-size:var(--text-xs);color:var(--text-main);border-radius:6px;padding:.2rem .4rem;font-family:monospace}.project-detail-content pre::-webkit-scrollbar{height:8px}.project-detail-content pre::-webkit-scrollbar-track{background:#00000026;border-radius:0 0 12px 12px}.project-detail-content pre::-webkit-scrollbar-thumb{background:#ffffff40;border-radius:4px}.project-detail-content pre::-webkit-scrollbar-thumb:hover{background:#fff6}.code-wrapper{margin:2.5rem 0;position:relative}.code-wrapper pre{margin:0!important}.copy-code-btn{color:var(--text-soft);cursor:pointer;opacity:0;-webkit-backdrop-filter:blur(4px);background:#ffffff1a;border:1px solid #fff3;border-radius:6px;justify-content:center;align-items:center;padding:6px;transition:all .2s;display:flex;position:absolute;top:12px;right:12px}.code-wrapper:hover .copy-code-btn,.copy-code-btn:focus-visible{opacity:1}.copy-code-btn:hover{color:var(--text-main);background:#fff3}.copy-code-btn.copied{color:#10b981;border-color:#10b98166}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}.bg-credit[data-astro-cid-z4jru4n3],.site-footer[data-astro-cid-z4jru4n3]{color:var(--text-main);z-index:50;opacity:.85;transition:opacity var(--motion-medium) ease, color var(--motion-medium) ease, background-color var(--motion-medium) ease, border-color var(--motion-medium) ease;background:var(--glass-bg);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);border-radius:8px;align-items:center;padding:.45rem .85rem;font-size:.75rem;font-weight:500;text-decoration:none;display:inline-flex;position:fixed;bottom:1.25rem}.bg-credit[data-astro-cid-z4jru4n3]{left:1.25rem}.site-footer[data-astro-cid-z4jru4n3]{right:1.25rem}.bg-credit[data-astro-cid-z4jru4n3]:hover,.site-footer[data-astro-cid-z4jru4n3]:hover{opacity:1;color:var(--text-main);background:var(--button-bg-hover);border-color:var(--button-border-strong)}
