:root,html[data-theme=ivory]{--bg-primary: #ece9e3;--bg-secondary: rgba(249, 246, 241, .84);--hero-start: #fffaf4;--hero-end: #d8c9b2;--text-main: #181d25;--text-muted: #495566;--text-soft: #5f6f83;--border-color: rgba(72, 92, 119, .18);--border-hover: rgba(72, 92, 119, .34);--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: rgba(248, 245, 240, .66);--glass-bg-strong: rgba(255, 252, 247, .78);--ambient-a: rgba(244, 190, 130, .42);--ambient-b: rgba(126, 156, 198, .24);--ambient-c: rgba(118, 159, 217, .14);--shell-border: rgba(72, 92, 119, .22);--shadow-main: rgba(39, 49, 64, .2);--button-bg: rgba(249, 246, 241, .7);--button-bg-hover: rgba(255, 255, 255, .86);--button-bg-active: #253243;--button-text: #3f4e62;--button-text-active: #f4f7fb;--button-border: rgba(72, 92, 119, .22);--button-border-strong: rgba(72, 92, 119, .38);--card-glow: rgba(129, 160, 205, .2);--card-sheen: rgba(255, 255, 255, .56);--grain-opacity: .065;--grid-line: rgba(72, 92, 119, .09);--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: 165ms;--motion-stagger-4: .22s;--motion-stagger-5: 275ms;--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:translate3d(0,16px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes projectCardEnter{0%{opacity:0;transform:translate3d(0,22px,0) scale(.985)}to{opacity:1;transform:translateZ(0) scale(1)}}@keyframes projectDetailReveal{0%{opacity:0;transform:translate3d(0,16px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes heroTextReveal{0%{opacity:0;transform:translate3d(0,28px,0);filter:blur(6px)}to{opacity:1;transform:translateZ(0);filter:blur(0)}}@keyframes headingUnderline{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes orbDrift1{0%,to{transform:translateZ(0) scale(1)}25%{transform:translate3d(8vw,-6vh,0) scale(1.08)}50%{transform:translate3d(-4vw,4vh,0) scale(.95)}75%{transform:translate3d(5vw,8vh,0) scale(1.04)}}@keyframes orbDrift2{0%,to{transform:translateZ(0) scale(1)}25%{transform:translate3d(-6vw,5vh,0) scale(.96)}50%{transform:translate3d(7vw,-3vh,0) scale(1.06)}75%{transform:translate3d(-3vw,-7vh,0) scale(.98)}}html,body,#root{min-height:100%}html{scroll-behavior:smooth;overflow-x:hidden;background-color:var(--bg-primary)}#scene-bg{position:fixed;inset:0;z-index:-2;background-image:var(--scene-image);background-position:center center;background-size:cover;background-repeat:no-repeat;pointer-events:none;filter:blur(0px);transition:filter .6s cubic-bezier(.22,.61,.36,1)}html[data-scene-quality=tiny] #scene-bg{filter:blur(16px);transform:scale(1.04)}*{box-sizing:border-box}body{margin:0;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;position:relative;isolation:isolate;transition:color var(--motion-fast) ease,background-color var(--motion-fast) ease}body:before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:#ece9e326;transition:background-color var(--motion-fast) ease}body:after{content:none}.ambient-orb{position:fixed;border-radius:50%;pointer-events:none;z-index:-1;filter:blur(var(--orb-blur));opacity:var(--orb-opacity, .2);will-change:transform}.ambient-orb-one{width:clamp(280px,36vw,520px);height:clamp(280px,36vw,520px);top:-8%;right:-6%;background:radial-gradient(circle,var(--ambient-a),transparent 72%);animation:orbDrift1 28s ease-in-out infinite}.ambient-orb-two{width:clamp(220px,28vw,420px);height:clamp(220px,28vw,420px);bottom:-4%;left:-8%;background:radial-gradient(circle,var(--ambient-b),transparent 72%);animation:orbDrift2 24s ease-in-out infinite}.page-shell{position:relative;z-index:2;width:min(var(--page-max),100% - 2rem);margin:0 auto;padding:1.4rem 0 3rem;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)}html.is-nav-exiting .page-shell{opacity:.65;transform:translate3d(0,2px,0)}@keyframes pageEnter{0%{opacity:.9;transform:translate3d(0,2px,0)}to{opacity:1;transform:translateZ(0)}}.page-shell-plain{width:min(var(--page-max-plain),100% - 2rem)}.app-shell{position:relative;border:1px solid var(--shell-border);border-radius:22px;overflow:hidden;background:linear-gradient(180deg,var(--bg-secondary),var(--glass-bg-strong));backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:0 30px 80px -32px var(--shadow-main),inset 0 1px #ffffff14,0 0 0 1px #ffffff05;will-change:auto}.app-shell:before{content:"";position:absolute;inset:-28% -16% auto;height:46%;background:radial-gradient(circle at 24% 18%,rgba(255,255,255,.15),transparent 70%);filter:none;pointer-events:none}.app-topbar{position:sticky;top:0;z-index:3;display:flex;justify-content:center;align-items:center;gap:1rem;padding:.9rem 1.1rem;border-bottom:1px solid var(--border-color);background:linear-gradient(180deg,var(--bg-secondary),var(--glass-bg-strong));backdrop-filter:none;-webkit-backdrop-filter:none;will-change:auto}.app-topbar-plain{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border-bottom:0;padding-left:0;padding-right:0}.app-brand{margin:0;font-family:var(--font-serif);font-size:var(--text-lg);letter-spacing:var(--tracking-wide)}.app-controls{display:inline-flex;align-items:center;gap:.55rem;margin-inline:auto}.app-nav{display:flex;gap:.45rem;flex-wrap:wrap}.app-tab{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--button-text);border:1px solid var(--button-border);border-radius:999px;background:var(--button-bg);padding:.62rem .92rem;font-size:var(--text-sm);font-weight:600;letter-spacing:var(--tracking-wide);transform:translateY(0) scale(1);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)}.app-tab:hover{color:var(--text-main);border-color:var(--button-border-strong);background:var(--button-bg-hover);transform:translateY(-2px) scale(1.026);box-shadow:0 18px 32px -20px var(--shadow-main)}.app-tab:focus-visible{outline:none;border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb,var(--ambient-a) 35%,transparent)}.app-tab.is-active{color:var(--button-text-active);border-color:var(--button-border-strong);background:var(--button-bg-active)}.app-content{position:relative;padding:1.45rem 1.15rem 2rem}.app-content-plain{padding-left:0;padding-right:0}h1,h2,h3{font-family:var(--font-serif);font-weight:400;color:var(--text-main)}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);margin:0;letter-spacing:var(--tracking-wide)}.article-content h2,.project-detail-content h2{position:relative;padding-bottom:.55rem}.article-content h2:after,.project-detail-content h2:after{content:"";position:absolute;bottom:0;left:0;width:38%;height:2px;background:linear-gradient(90deg,var(--ambient-a),var(--ambient-b));border-radius:2px;transform-origin:left center;transform:scaleX(0);transition:transform .5s var(--ease-sleek)}.article-content h2.is-revealed:after,.project-detail-content h2.is-revealed:after{transform:scaleX(1)}.nav-back{display:inline-flex;align-items:center;margin-bottom:1.25rem;text-decoration:none;color:var(--text-muted);transform:translateY(0) scale(1);transition:color var(--motion-medium) ease,transform var(--motion-hover) var(--ease-sleek),box-shadow var(--motion-hover) var(--ease-sleek)}.nav-back:hover{color:var(--text-main);transform:translateY(-2px) scale(1.01);box-shadow:0 14px 26px -22px var(--shadow-main)}.link-grid,.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin-top:1.5rem}.home-links{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:1.25rem}.home-stage{min-height:clamp(26rem,calc(100vh - 8.5rem),54rem);display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:0}.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);margin-bottom:.4rem;animation:heroTextReveal .7s var(--ease-sleek) both}.home-hero .subtitle{font-size:var(--text-lg);animation:heroTextReveal .7s var(--ease-sleek) .18s both}.home-links-centered{justify-content:center;width:min(var(--home-links-max),100%);margin:clamp(1.2rem,3.8vh,2.4rem) auto 0}.home-link{display:inline-flex;align-items:center;justify-content:center;gap:.74rem;position:relative;text-decoration:none;color:var(--button-text);font-weight:550;letter-spacing:.008em;border:1.2px solid var(--button-border);background:color-mix(in srgb,var(--bg-secondary) 64%,transparent);border-radius:12px;min-width:14.8rem;min-height:5.1rem;padding:.9rem 2.26rem;font-size:var(--text-xl);text-align:center;backdrop-filter:blur(8px) saturate(112%);-webkit-backdrop-filter:blur(8px) saturate(112%);will-change:auto;overflow:hidden;isolation:isolate;transform-origin:50% 100%;transform:translateY(0) scale(1);box-shadow:0 12px 24px -24px var(--shadow-main),inset 0 1px 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)}.home-link:before{content:"";position:absolute;width:74%;height:84%;left:-10%;top:18%;border-radius:999px;background:radial-gradient(circle,color-mix(in srgb,var(--ambient-a) 26%,transparent),transparent 74%);filter:blur(14px);opacity:.12;transform:translateZ(0) scale(1);pointer-events:none;transition:opacity .2s ease,transform .2s ease}.home-link:after{content:"↗";position:absolute;right:.84rem;top:50%;transform:translate3d(8px,-50%,0);opacity:0;color:var(--text-soft);font-size:var(--text-sm);line-height:var(--leading-none);transition:transform .2s ease,opacity .2s ease,color .2s ease}.home-link:hover{color:var(--text-main);border-color:var(--button-border-strong);background:color-mix(in srgb,var(--button-bg-hover) 66%,transparent);transform:translateY(-8px) scale(1.12);box-shadow:0 46px 70px -26px var(--shadow-main),0 0 28px color-mix(in srgb,var(--ambient-a) 30%,transparent),inset 0 1px color-mix(in srgb,var(--card-sheen) 74%,transparent)}.home-link:hover:before{opacity:.24;transform:translate3d(7%,-3%,0) scale(1.04)}.home-link:hover:after{opacity:.9;transform:translate3d(0,-50%,0);color:var(--text-main)}.home-link-icon{width:3.2rem;height:3.2rem;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;border:none;border-radius:0;background:transparent;color:var( --home-icon-color, color-mix(in srgb, var(--text-soft) 88%, var(--button-text) 12%) );box-shadow:none;opacity:.98;transform:translateY(0) scale(1);filter:drop-shadow(0 4px 8px color-mix(in srgb,var(--shadow-main) 26%,transparent));transition:color .2s ease,transform .3s cubic-bezier(.22,1,.36,1),filter .3s cubic-bezier(.22,1,.36,1)}.home-link-icon svg{width:2.4rem;height:2.4rem;fill:currentColor;display:block;overflow:visible}.home-link-label{position:relative;z-index:1;line-height:1.04}.home-link:hover .home-link-icon{color:var( --home-icon-color-hover, color-mix(in srgb, var(--text-main) 78%, var(--ambient-a) 22%) );transform:translateY(-3px) scale(1.15);filter:drop-shadow(0 12px 16px color-mix(in srgb,var(--ambient-a) 34%,transparent));transition:color .2s ease,transform .4s cubic-bezier(.34,1.56,.64,1),filter .3s cubic-bezier(.22,1,.36,1)}.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{outline:none;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)}.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-radius:1.1rem/.95rem;border:1px solid var(--button-border);background:var(--button-bg);backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:none}.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{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.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){display:inline-flex;align-items:center;text-decoration:none;border:1px solid var(--button-border);border-radius:1rem/.9rem;background:var(--button-bg);color:var(--button-text);padding:.36rem .68rem;transform:translateY(0) scale(1);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)}.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);transform:translateY(-2px) scale(1.012);box-shadow:0 18px 34px -24px var(--shadow-main)}.link-card,.project-card,.section-card{display:block;border:1px solid var(--border-color);border-radius:14px;background:linear-gradient(180deg,var(--bg-secondary),var(--glass-bg-strong));backdrop-filter:none;-webkit-backdrop-filter:none;will-change:auto;padding:1.15rem;text-decoration:none;color:inherit;transform:translateY(0) scale(1);transition:transform var(--motion-hover) var(--ease-sleek),border-color var(--motion-medium) ease,box-shadow var(--motion-hover) var(--ease-sleek)}.link-card:focus-visible,.project-card:focus-visible,.section-card:focus-visible,.nav-back:focus-visible,.meta-row a:focus-visible{outline:none;border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb,var(--ambient-a) 35%,transparent)}.link-card:hover,.project-card:hover,.section-card:hover{transform:translateY(-4px) scale(1.008);border-color:var(--border-hover);box-shadow:0 36px 78px -36px var(--shadow-main)}.link-grid .link-card{border-radius:999px;text-align:center;font-weight:600;letter-spacing:.01em;padding:.82rem 1rem;background:var(--button-bg);border:1px solid var(--button-border)}.link-grid .link-card:hover{background:var(--button-bg-hover);border-color:var(--button-border-strong)}.project-card h2{margin:0 0 .4rem;font-size:var(--text-xl);line-height:var(--leading-tight)}.project-card p{margin:0 0 .8rem;color:var(--text-muted)}.project-grid.projects-showcase{grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:1.15rem;align-items:stretch}.projects-page-header h1{letter-spacing:var(--tracking-tight);overflow-wrap:anywhere}.projects-page-subtitle{max-width:58ch;overflow-wrap:break-word}.projects-showcase .project-card{position:relative;min-height:100%;display:flex;flex-direction:column;gap:.28rem;border-radius:1.24rem;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%);backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:0 24px 54px -34px var(--shadow-main),inset 0 1px color-mix(in srgb,var(--card-sheen) 78%,transparent);padding:1.6rem 1.5rem 1.5rem;overflow:hidden;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}.projects-showcase .project-card p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:6;line-clamp:6;overflow:hidden;margin:.35rem 0 1.25rem;color:var(--text-soft);line-height:var(--leading-relaxed);overflow-wrap:break-word}.projects-showcase .project-card:before{content:"";position:absolute;inset:-34% auto auto -16%;width:84%;height:56%;background:radial-gradient(circle,color-mix(in srgb,var(--card-sheen) 88%,transparent),transparent 74%);opacity:.38;pointer-events:none}.projects-showcase .project-card:after{content:"";position:absolute;inset:auto -14% -44% auto;width:58%;height:58%;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--ambient-b) 48%,transparent),transparent 72%);opacity:.8;pointer-events:none}.projects-showcase .project-card:hover{transform:translateY(-14px) scale(1.03);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 color-mix(in srgb,var(--card-sheen) 96%,transparent)}.projects-showcase .project-card:hover:before{opacity:.62;transform:translate(6%,-4%);transition:opacity .4s ease,transform .6s var(--ease-sleek)}.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{display:flex;align-items:baseline;justify-content:space-between;gap:.8rem}.project-card-head{display:flex;align-items:center;gap:.78rem;margin-bottom:.3rem}.project-card-icon-box{width:2.9rem;height:2.9rem;border-radius:.78rem;border:1px solid color-mix(in srgb,var(--button-border) 86%,transparent);background:color-mix(in srgb,var(--button-bg) 82%,transparent);box-shadow:inset 0 1px color-mix(in srgb,var(--card-sheen) 80%,transparent);overflow:hidden;flex:0 0 auto}.project-card-icon{width:100%;height:100%;object-fit:cover;display:block}.project-card-icon-fallback,.project-detail-icon-fallback{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-weight:700;color:var(--text-soft)}.projects-showcase .project-card h2{margin:0;font-size:var(--text-xl);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);overflow-wrap:anywhere}.project-card-arrow{display:inline-flex;align-items:center;justify-content:center;min-width:1.8rem;min-height:1.8rem;border-radius:999px;border:1px solid color-mix(in srgb,var(--button-border) 86%,transparent);background:color-mix(in srgb,var(--button-bg) 84%,transparent);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}.projects-showcase .project-card:hover .project-card-arrow{transform:translate(10px) scale(1.1) rotate(-10deg);color:var(--text-main);border-color:var(--button-border-strong);background:color-mix(in srgb,var(--button-bg-hover) 82%,transparent)}.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{display:flex;flex-wrap:wrap;gap:.45rem}.tag{border:1px solid var(--border-color);border-radius:999px;background:var(--button-bg);padding:.2rem .6rem;font-size:var(--text-xs);color:var(--text-muted)}.meta-row{display:flex;flex-wrap:wrap;gap:.7rem 1rem;margin:.5rem 0 1.3rem;color:var(--text-muted)}.article{max-width:var(--reading-max)}.project-detail-card{border:1px solid color-mix(in srgb,var(--button-border) 84%,transparent);border-radius:1.3rem;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%);backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:0 24px 60px -36px var(--shadow-main),inset 0 1px color-mix(in srgb,var(--card-sheen) 88%,transparent);padding:1.2rem 1.3rem 1.32rem;animation:projectDetailReveal .56s var(--ease-sleek) both}.project-detail-header h1{margin-top:0;margin-bottom:.42rem;letter-spacing:var(--tracking-tight);overflow-wrap:anywhere}.project-detail-title-wrap{display:flex;align-items:center;gap:.92rem;margin-bottom:.24rem}.project-detail-icon-box{width:3.2rem;height:3.2rem;border-radius:.88rem;border:1px solid color-mix(in srgb,var(--button-border) 84%,transparent);background:color-mix(in srgb,var(--button-bg) 84%,transparent);box-shadow:inset 0 1px color-mix(in srgb,var(--card-sheen) 88%,transparent);overflow:hidden;flex:0 0 auto}.project-detail-icon{width:100%;height:100%;object-fit:cover;display:block}.project-detail-icon-box:has(img[src*=mimick]),.project-card-icon-box:has(img[src*=mimick]){border-color:transparent;background:transparent;box-shadow:none}.project-detail-card .meta-row{margin:.6rem 0 1.08rem;display:grid;gap:.62rem}.project-action-row{display:flex;flex-wrap:wrap;gap:.58rem}.project-action-button{display:inline-flex;align-items:center;justify-content:center;gap:.44rem;min-height:2.16rem;padding:.38rem .84rem;text-decoration:none;font-size:var(--text-sm);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:uppercase;border:1px solid color-mix(in srgb,var(--button-border) 82%,transparent);border-radius:999px;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);transform:translateY(0) scale(1);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)}.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);transform:translateY(-3px) scale(1.016);box-shadow:0 24px 44px -28px var(--shadow-main)}.project-action-button:hover:after{transform:translate(5px);color:var(--text-main)}.project-action-button:focus-visible{outline:none;border-color:var(--button-border-strong);box-shadow:0 0 0 3px color-mix(in srgb,var(--ambient-a) 35%,transparent)}.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{display:flex;flex-wrap:wrap;gap:.42rem}.project-meta-chip{display:inline-flex;align-items:center;border:1px solid color-mix(in srgb,var(--button-border) 84%,transparent);border-radius:999px;background:color-mix(in srgb,var(--button-bg) 82%,transparent);color:var(--text-soft);padding:.24rem .62rem;font-size:var(--text-xs);letter-spacing:var(--tracking-wider)}.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{line-height:1.68;overflow-wrap:break-word}.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{width:100%;border-collapse:collapse;margin-top:1rem;background:linear-gradient(180deg,var(--glass-bg-strong),var(--glass-bg));backdrop-filter:none;-webkit-backdrop-filter:none}.data-table th,.data-table td{border:1px solid var(--border-color);padding:.7rem;text-align:left}.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 ((backdrop-filter: blur(1px)) or (-webkit-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(max-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,calc(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);padding:.68rem 1.28rem;gap:.52rem}.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{right:.66rem;font-size:var(--text-xs)}.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{padding:1.02rem .95rem 1.04rem;backdrop-filter:none;-webkit-backdrop-filter:none}.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{backdrop-filter:none;-webkit-backdrop-filter:none}}[data-reveal],[data-reveal-stagger]>*{opacity:0;transform:translate3d(0,22px,0);transition:opacity .48s var(--ease-sleek),transform .48s var(--ease-sleek)}[data-reveal].is-revealed,[data-reveal-stagger].is-revealed>.is-revealed{opacity:1;transform:translateZ(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{animation:none!important;opacity:1;filter:none}.ambient-orb{animation:none!important}[data-reveal],[data-reveal-stagger]>*{opacity:1!important;transform:none!important;transition: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:0ms!important}}@media(max-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{width:min(44vw,11.5rem);text-align:center}}.attribution-badge{display:inline-block;text-align:center;position:relative;background-color:var(--button-bg);border:1px solid var(--button-border);border-radius:8px;padding:.4rem .8rem;font-size:var(--text-sm);font-weight:500;color:var(--text-soft);margin-top:1.5rem;margin-bottom:1.25rem;letter-spacing:var(--tracking-normal);line-height:var(--leading-relaxed);transition:background-color var(--motion-fast) ease,border-color var(--motion-fast) ease}.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:"";position:absolute;inset:0;z-index:1;border-radius:inherit}.attribution-badge a:not(:first-of-type){position:relative;z-index:2}.project-detail-content img,.project-detail-content video{max-width:100%;height:auto;border-radius:8px;display:inline-block;margin:1rem .5rem;vertical-align:middle;border:1px solid var(--border-color);background:var(--bg-secondary)}.project-detail-content p:has(img:not([src*="shields.io"])){text-align:center}.project-detail-content p:has(img[src*="shields.io"]){display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin-bottom:2rem}.project-detail-content p:has(img[src*="shields.io"]) a,.project-detail-content p:has(img[src*="shields.io"]) img{margin:0!important;display:inline-block}.project-detail-content table{width:100%;border-collapse:collapse;margin:2rem 0;background:linear-gradient(180deg,var(--glass-bg-strong),var(--glass-bg));border-radius:8px;overflow:hidden;box-shadow:0 4px 6px var(--shadow-main)}.project-detail-content th,.project-detail-content td{border:1px solid var(--border-color);padding:.85rem 1.15rem;text-align:left}.project-detail-content th{color:var(--text-main);font-weight:600;background:var(--bg-secondary)}.project-detail-content tr:nth-child(2n){background:#00000008}.project-detail-content pre{padding:1.25rem 1.5rem!important;border-radius:12px;margin:2.5rem 0;border:1px solid var(--border-color);box-shadow:0 12px 32px -12px var(--shadow-main);overflow-x:auto;font-size:var(--text-sm);line-height:var(--leading-relaxed)}.project-detail-content pre code{background:transparent!important;padding:0!important;border-radius:0!important;color:inherit}.project-detail-content :not(pre)>code{background:var(--bg-secondary);border:1px solid var(--border-color);padding:.2rem .4rem;border-radius:6px;font-size:var(--text-xs);font-family:monospace;color:var(--text-main)}.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{position:relative;margin:2.5rem 0}.code-wrapper pre{margin:0!important}.copy-code-btn{position:absolute;top:12px;right:12px;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:6px;color:var(--text-soft);padding:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:all .2s ease;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.code-wrapper:hover .copy-code-btn,.copy-code-btn:focus-visible{opacity:1}.copy-code-btn:hover{background:#fff3;color:var(--text-main)}.copy-code-btn.copied{color:#10b981;border-color:#10b98166}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}.bg-credit[data-astro-cid-37fxchfa],.site-footer[data-astro-cid-37fxchfa]{position:fixed;bottom:1.25rem;display:inline-flex;align-items:center;font-size:.75rem;font-weight:500;color:var(--text-main);text-decoration:none;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;padding:.45rem .85rem;background:var(--glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);border-radius:8px}.bg-credit[data-astro-cid-37fxchfa]{left:1.25rem}.site-footer[data-astro-cid-37fxchfa]{right:1.25rem}.bg-credit[data-astro-cid-37fxchfa]:hover,.site-footer[data-astro-cid-37fxchfa]:hover{opacity:1;color:var(--text-main);background:var(--button-bg-hover);border-color:var(--button-border-strong)}@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(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
