: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-toggle-thumb: .3s;--motion-toggle-press: .3s;--motion-toggle-sheen: .34s;--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)}html[data-theme=midnight]{--bg-primary: #000000;--bg-secondary: rgba(3, 5, 8, .94);--hero-start: #080b10;--hero-end: #000000;--text-main: #dce4ee;--text-muted: #a8b5c5;--text-soft: #8897aa;--border-color: rgba(178, 194, 214, .16);--border-hover: rgba(208, 222, 241, .3);--glass-bg: rgba(10, 14, 20, .56);--glass-bg-strong: rgba(4, 6, 10, .9);--ambient-a: rgba(125, 165, 212, .14);--ambient-b: rgba(78, 97, 128, .18);--ambient-c: rgba(164, 186, 214, .1);--shell-border: rgba(180, 198, 220, .16);--shadow-main: rgba(0, 0, 0, .78);--button-bg: rgba(12, 17, 24, .72);--button-bg-hover: rgba(21, 28, 38, .9);--button-bg-active: #e7edf5;--button-text: #c8d4e1;--button-text-active: #0b121a;--button-border: rgba(180, 198, 220, .2);--button-border-strong: rgba(214, 229, 248, .36);--card-glow: rgba(130, 171, 222, .16);--card-sheen: rgba(205, 220, 240, .08);--grain-opacity: .045;--grid-line: rgba(198, 218, 244, .07);--downsampling-mode: boxcar;--downsampling-factor: 1;--downsampling-step: calc(var(--downsampling-factor) * 1px);--pixelize-enabled: 1;--pixelize-opacity: .2;--blur-multiplier: 1;--orb-blur: 126px;--orb-opacity: .86;--atmosphere-blur: 96px}@media(prefers-color-scheme:dark){html:not([data-theme]){--bg-primary: #000000;--bg-secondary: rgba(3, 5, 8, .94);--hero-start: #080b10;--hero-end: #000000;--text-main: #dce4ee;--text-muted: #a8b5c5;--text-soft: #8897aa;--border-color: rgba(178, 194, 214, .16);--border-hover: rgba(208, 222, 241, .3);--glass-bg: rgba(10, 14, 20, .56);--glass-bg-strong: rgba(4, 6, 10, .9);--ambient-a: rgba(125, 165, 212, .14);--ambient-b: rgba(78, 97, 128, .18);--ambient-c: rgba(164, 186, 214, .1);--shell-border: rgba(180, 198, 220, .16);--shadow-main: rgba(0, 0, 0, .78);--button-bg: rgba(12, 17, 24, .72);--button-bg-hover: rgba(21, 28, 38, .9);--button-bg-active: #e7edf5;--button-text: #c8d4e1;--button-text-active: #0b121a;--button-border: rgba(180, 198, 220, .2);--button-border-strong: rgba(214, 229, 248, .36);--card-glow: rgba(130, 171, 222, .16);--card-sheen: rgba(205, 220, 240, .08);--grain-opacity: .045;--grid-line: rgba(198, 218, 244, .07);--downsampling-mode: boxcar;--downsampling-factor: 1;--downsampling-step: calc(var(--downsampling-factor) * 1px);--pixelize-enabled: 1;--pixelize-opacity: .2;--blur-multiplier: 1;--orb-blur: 126px;--orb-opacity: .86;--atmosphere-blur: 96px}}@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 toggleSheenSweep{0%{transform:translate(-102%);opacity:0}25%{opacity:.5}to{transform:translate(102%);opacity:0}}@keyframes togglePress{0%{transform:translateY(0) scale(1)}36%{transform:translateY(.5px) scale(.987)}to{transform:translateY(0) scale(1)}}@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}*{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--text-main);font-family:var(--font-sans);font-size:115%;line-height:1.6;text-rendering:optimizeLegibility;position:relative;isolation:isolate;transition:color var(--motion-fast) ease,background-color var(--motion-fast) ease}body:before{content:none;position:fixed;inset:0;z-index:0;pointer-events:none;background:transparent;transition:background-color var(--motion-fast) ease}body:after{content:none}html[data-theme=midnight] body:before{background:#0000009e}@media(prefers-color-scheme:dark){html:not([data-theme]) body:before{background:#0000009e}}.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:1.08rem;letter-spacing:.01em}.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:.9rem;font-weight:600;letter-spacing:.01em;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)}.theme-toggle{position:relative;display:inline-grid;grid-template-columns:1fr 1fr;align-items:center;appearance:none;border:1px solid var(--button-border);border-radius:999px;background:var(--button-bg);color:var(--button-text);width:9.3rem;min-height:2.15rem;padding:.2rem;cursor:pointer;overflow:hidden;isolation:isolate;transform:translateY(0) scale(1);transition:transform var(--motion-hover) var(--ease-sleek),border-color var(--motion-medium) ease,background-color var(--motion-medium) ease,box-shadow var(--motion-hover) var(--ease-sleek)}.theme-toggle:before{content:"";position:absolute;top:0;left:-125%;width:72%;height:100%;border-radius:inherit;background:linear-gradient(100deg,transparent 0%,color-mix(in srgb,var(--card-sheen) 92%,transparent) 48%,transparent 100%);pointer-events:none;z-index:0}.theme-toggle-label{position:relative;z-index:2;text-align:center;font-size:.66rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;opacity:.78;transform:translateY(0);transition:none}.theme-toggle[data-theme-ready=true] .theme-toggle-label{transition:color var(--motion-fast) ease,opacity var(--motion-fast) ease,transform var(--motion-fast) ease}html[data-theme=ivory] .theme-toggle .theme-toggle-label-ivory{color:var(--button-text-active)}html[data-theme=ivory] .theme-toggle .theme-toggle-label-midnight{color:var(--button-text)}html[data-theme=midnight] .theme-toggle .theme-toggle-label-midnight{color:var(--button-text-active)}html[data-theme=midnight] .theme-toggle .theme-toggle-label-ivory{color:var(--button-text)}@media(prefers-color-scheme:dark){html:not([data-theme]) .theme-toggle .theme-toggle-label-midnight{color:var(--button-text-active)}html:not([data-theme]) .theme-toggle .theme-toggle-label-ivory{color:var(--button-text)}}.theme-toggle-thumb{position:absolute;top:.2rem;left:.2rem;width:calc(50% - .2rem);height:calc(100% - .4rem);border-radius:999px;background:var(--button-bg-active);border:1px solid color-mix(in srgb,var(--button-border-strong) 72%,transparent);box-shadow:inset 0 1px color-mix(in srgb,#ffffff 62%,transparent),0 8px 16px -12px color-mix(in srgb,var(--shadow-main) 88%,transparent);transition:none;z-index:1}.theme-toggle[data-theme-ready=true] .theme-toggle-thumb{transition:transform var(--motion-toggle-thumb) cubic-bezier(.18,.9,.24,1.15),box-shadow var(--motion-fast) ease,background-color var(--motion-fast) ease}html[data-theme=ivory] .theme-toggle .theme-toggle-thumb{transform:translate(0)}html[data-theme=midnight] .theme-toggle .theme-toggle-thumb{transform:translate(100%)}@media(prefers-color-scheme:dark){html:not([data-theme]) .theme-toggle .theme-toggle-thumb{transform:translate(100%)}}.theme-toggle:hover{border-color:var(--button-border-strong);background:var(--button-bg-hover);transform:translateY(-2px) scale(1.012);box-shadow:0 18px 34px -22px var(--shadow-main)}.theme-toggle[data-theme-switching=true]{animation:togglePress var(--motion-toggle-press) var(--ease-sleek)}.theme-toggle[data-theme-switching=true]:before{animation:toggleSheenSweep var(--motion-toggle-sheen) var(--ease-sleek)}.theme-toggle: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)}.theme-toggle[data-theme-state=ivory] .theme-toggle-thumb{transform:translate(0)}.theme-toggle[data-theme-state=midnight] .theme-toggle-thumb{transform:translate(100%)}.theme-toggle[data-theme-state=ivory] .theme-toggle-label-ivory,.theme-toggle[data-theme-state=midnight] .theme-toggle-label-midnight{color:var(--button-text-active);opacity:1;transform:translateY(-.5px)}.theme-toggle[data-theme-state=ivory] .theme-toggle-label-midnight,.theme-toggle[data-theme-state=midnight] .theme-toggle-label-ivory{color:var(--button-text);opacity:.74;transform:translateY(0)}.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:clamp(2rem,5vw,3.4rem);margin-bottom:.35rem}.subtitle{color:var(--text-muted);margin:0}.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:clamp(3.6rem,12vw,7.2rem);line-height:.95;letter-spacing:-.04em;margin-bottom:.4rem;animation:heroTextReveal .7s var(--ease-sleek) both}.home-hero .subtitle{font-size:clamp(1rem,2.4vw,1.28rem);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:1.3rem;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:.98rem;line-height:1;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:1.4rem}.project-card p{margin:0 0 .8rem;color:var(--text-muted)}.projects-showcase{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.15rem;align-items:stretch}.projects-page-header h1{letter-spacing:-.022em;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.3rem 1.18rem 1.22rem;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:3;line-clamp:3;overflow:hidden}.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.6rem;height:2.6rem;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:clamp(1.22rem,2vw,1.36rem);line-height:1.2;letter-spacing:-.014em;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:.9rem;line-height:1;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)}.projects-showcase .project-card p{margin:.18rem 0 .98rem;color:var(--text-muted);line-height:1.56;overflow-wrap:break-word}.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:.8rem;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:-.02em;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:.84rem;font-weight:700;letter-spacing:.04em;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:.78rem;line-height:1;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:.74rem;letter-spacing:.03em}.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:-.012em;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:90%}.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:1rem}.app-controls{gap:.45rem}.app-tab{font-size:.84rem;padding:.42rem .84rem}.theme-toggle{width:8.4rem;min-height:2rem}.theme-toggle-label{font-size:.61rem;letter-spacing:.07em}.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:clamp(3rem,13vw,5rem)}.home-hero .subtitle{font-size:.98rem}.home-link{min-width:10.2rem;min-height:3.2rem;font-size:1.05rem;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:.8rem}.projects-showcase{grid-template-columns:1fr;gap:.86rem}.project-card-head{gap:.66rem}.project-card-icon-box{width:2.35rem;height:2.35rem}.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}}.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]{position:fixed;bottom:1.25rem;left:1.25rem;display:inline-flex;align-items:center;font-size:.75rem;font-weight:500;color:var(--text-muted);text-decoration:none;z-index:50;opacity:.65;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]:hover{opacity:1;color:var(--text-main);background:var(--button-bg-hover);border-color:var(--button-border-strong)}html[data-theme=ivory] .bg-credit-dark[data-astro-cid-37fxchfa],html:not([data-theme]) .bg-credit-dark[data-astro-cid-37fxchfa]{display:none}html[data-theme=midnight] .bg-credit-light[data-astro-cid-37fxchfa]{display:none}@media(prefers-color-scheme:dark){html:not([data-theme]) .bg-credit-light[data-astro-cid-37fxchfa]{display:none}html:not([data-theme]) .bg-credit-dark[data-astro-cid-37fxchfa]{display:inline-flex}}@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}}
