@font-face{font-family:sans;src:url(../media/ibm_plex_sans_latin_400_normal-s.p.1xf5nwxyfigak.woff2)format("woff2");font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:sans;src:url(../media/ibm_plex_sans_latin_500_normal-s.p.2i4a1iuj6lbvw.woff2)format("woff2");font-display:swap;font-weight:500;font-style:normal}@font-face{font-family:sans;src:url(../media/ibm_plex_sans_latin_600_normal-s.p.2ovda_azncp9b.woff2)format("woff2");font-display:swap;font-weight:600;font-style:normal}@font-face{font-family:sans Fallback;src:local(Arial);ascent-override:101.35%;descent-override:27.19%;line-gap-override:0.0%;size-adjust:101.13%}.sans_e1a04134-module__DzLl-G__className{font-family:sans,sans Fallback}.sans_e1a04134-module__DzLl-G__variable{--font-sans-family:"sans", "sans Fallback"}
@font-face{font-family:mono;src:url(../media/ibm_plex_mono_latin_400_normal-s.p.3xdfs0-p_zi4c.woff2)format("woff2");font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:mono;src:url(../media/ibm_plex_mono_latin_500_normal-s.p.11q3guvgd1r20.woff2)format("woff2");font-display:swap;font-weight:500;font-style:normal}@font-face{font-family:mono Fallback;src:local(Arial);ascent-override:77.95%;descent-override:20.91%;line-gap-override:0.0%;size-adjust:131.49%}.mono_4e80290d-module__UNGs9q__className{font-family:mono,mono Fallback}.mono_4e80290d-module__UNGs9q__variable{--font-mono-family:"mono", "mono Fallback"}
:root{--bg:#fff;--bg-soft:#f7f8fa;--surface:#fff;--surface-2:#f2f4f7;--border:#dfe3e8;--border-soft:#eaecef;--text:#15191f;--text-muted:#4d555f;--text-dim:#636b76;--accent:#14416b;--accent-strong:#0e3052;--accent-contrast:#fff;--accent-soft:#eef2f6;--success:#15724b;--danger:#a4262c;--radius-sm:8px;--radius:12px;--radius-lg:18px;--shadow-sm:none;--shadow:none;--container:1080px;--gutter:clamp(1rem, 4vw, 2.5rem);--section-y:clamp(3.5rem, 7vw, 5.5rem);--font-sans:var(--font-sans-family), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-display:var(--font-sans);--font-mono:var(--font-mono-family), ui-monospace, "SF Mono", "Cascadia Mono", monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=dark]{--bg:#111418;--bg-soft:#16191e;--surface:#181c22;--surface-2:#1f242b;--border:#2c333c;--border-soft:#242a32;--text:#eceef1;--text-muted:#aeb6c0;--text-dim:#8e97a2;--accent:#8fb6d9;--accent-strong:#a9c8e3;--accent-contrast:#111418;--accent-soft:#1d232b;--success:#6cc39b;--danger:#e08c8c;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:88px}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0;font-size:1rem;line-height:1.65;transition:background-color .3s,color .3s}.lead,.hero__text,.card__body,.prose p,.prose li,.timeline li,.skill__items,.footer p,.notfound .lead,.notice{text-align:justify;text-align-last:start;-webkit-hyphens:auto;hyphens:auto}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.015em;text-wrap:balance;margin:0 0 .5em;font-weight:600;line-height:1.2}h1{font-size:clamp(2rem,4.2vw,2.85rem)}h2{font-size:clamp(1.45rem,2.8vw,1.9rem)}h3{font-size:1.1rem}p{text-wrap:pretty;margin:0 0 1.1em}a{color:inherit;text-decoration:none}img,svg,video{max-width:100%;height:auto;display:block}ul,ol{margin:0 0 1.1em;padding-inline-start:1.2em}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.container{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--section-y)}.section--tight{padding-block:clamp(2.5rem,5vw,3.5rem)}.section--alt{background:var(--bg-soft);border-block:1px solid var(--border-soft)}.section__head{max-width:60ch;margin-bottom:clamp(1.75rem,3vw,2.5rem)}.eyebrow{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);margin-bottom:.7rem;font-size:.76rem;font-weight:500;display:block}body{counter-reset:section}.section{counter-increment:section}.section__head .eyebrow:before{content:counter(section, decimal-leading-zero) " / ";color:var(--accent)}.timeline__period,.skill__level,.project-card__meta,.hero__stat span,.tag,.breadcrumb,.footer h4{font-family:var(--font-mono)}.lead{color:var(--text-muted);font-size:1.02rem}.grid{gap:clamp(1rem,2vw,1.5rem);display:grid}.grid--2{grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}.grid--3{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr))}.stack{flex-direction:column;gap:1rem;display:flex}.row{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{inset-inline-start:1rem;z-index:100;background:var(--accent);color:var(--accent-contrast);border-radius:var(--radius-sm);padding:.6rem 1rem;font-weight:600;position:absolute;top:-4rem}.skip-link:focus{top:1rem}.btn{border-radius:var(--radius-sm);border:1px solid var(--accent);background:var(--accent);color:var(--accent-contrast);font:inherit;cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:.5rem;padding:.65rem 1.15rem;font-size:.93rem;font-weight:500;transition:background .15s,border-color .15s,color .15s,transform .15s;display:inline-flex}.btn:hover{background:var(--accent-strong);border-color:var(--accent-strong);transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn--ghost{color:var(--text);border-color:var(--border);background:0 0}.btn--ghost:hover{background:var(--surface-2);border-color:var(--border);color:var(--text)}.btn--subtle{background:var(--surface-2);color:var(--text);border-color:var(--border)}.btn--sm{padding:.45rem .85rem;font-size:.86rem}.btn--danger{color:var(--danger);border-color:var(--border);background:0 0}.btn--danger:hover{background:var(--surface-2);border-color:var(--danger);color:var(--danger)}.btn[disabled]{opacity:.55;cursor:not-allowed}@property --glow{syntax:"<percentage>";inherits:true;initial-value:0%}.card{--lift:0px;--edge:color-mix(in srgb, var(--text) 11%, transparent);--face:var(--surface);isolation:isolate;background:var(--edge);border-radius:var(--radius-lg);transform:translateY(var(--lift));padding:clamp(1.15rem,2.2vw,1.6rem);transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .3s,--glow .35s;position:relative;box-shadow:0 10px 28px -20px #0000008c}.card:after{content:"";z-index:-2;border-radius:calc(var(--radius-lg) - 1px);pointer-events:none;background:radial-gradient(300px circle at var(--mx,50%) var(--my,0%), color-mix(in srgb, var(--accent) var(--glow), transparent), transparent 70%), linear-gradient(180deg, color-mix(in srgb, var(--face) 84%, transparent), color-mix(in srgb, var(--face) 93%, transparent));position:absolute;inset:1px}.card:before{content:"";z-index:-3;border-radius:inherit;pointer-events:none;background:radial-gradient(closest-side, var(--fx-outline-b,var(--accent)), var(--fx-outline-a,var(--accent)) 18%, color-mix(in srgb, var(--fx-outline-a,var(--accent)) 50%, transparent) 40%, color-mix(in srgb, var(--fx-outline-a,var(--accent)) 15%, transparent) 65%, transparent) no-repeat;opacity:0;background-position:-120px -120px;background-size:240px 240px;transition:opacity .4s;position:absolute;inset:0}html[data-effects="1"][data-outline=always] .card:before{opacity:1;animation:9s linear infinite orbit;animation-delay:calc(var(--n,0) * -2.3s)}@media (hover:hover) and (pointer:fine){html[data-effects="1"][data-outline=hover] .card:hover:before{opacity:1;animation:5s linear infinite orbit}html[data-effects="1"] .card:hover{--glow:22%}a.card:hover,.card--hover:hover{--lift:-4px;box-shadow:0 24px 40px -24px #000000a6}html[data-effects="1"] .project-card{transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) translateY(var(--lift))}}@media (hover:none){html[data-effects="1"][data-outline=hover] .card:before{opacity:1;animation:9s linear infinite orbit;animation-delay:calc(var(--n,0) * -2.3s)}}html[data-effects="1"] .card[data-pressed]{--glow:26%}a.card:active{--lift:1px}@keyframes orbit{0%,to{background-position:-120px -120px}25%{background-position:calc(100% + 120px) -120px}50%{background-position:calc(100% + 120px) calc(100% + 120px)}75%{background-position:-120px calc(100% + 120px)}}[data-theme=light] .card{--edge:color-mix(in srgb, var(--text) 13%, transparent);box-shadow:0 12px 28px -22px #141e2d59}.card__icon{width:46px;height:46px;color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--accent) 28%, transparent);border-radius:12px;place-items:center;margin-bottom:1rem;display:inline-grid}[data-theme=dark] .card__icon{color:var(--accent-strong)}.card__title{margin-bottom:.4rem;font-size:1.05rem}.card__body{color:var(--text-muted);margin:0;font-size:.94rem}.tag{background:var(--surface-2);border:1px solid var(--border-soft);color:var(--text-muted);border-radius:999px;padding:.15rem .65rem;font-size:.78rem;display:inline-block}.tag--accent{background:var(--accent-soft);color:var(--accent);border-color:var(--border-soft)}.header{z-index:50;pointer-events:none;padding-top:10px;transition:padding-top .4s cubic-bezier(.22,1,.36,1);position:sticky;top:0}.island{--edge:color-mix(in srgb, var(--text) 10%, transparent);isolation:isolate;pointer-events:auto;background:0 0;border:1px solid #0000;border-radius:20px;align-items:center;gap:.75rem;min-height:60px;padding:0 .5rem 0 .75rem;transition:background-color .4s,border-color .4s,box-shadow .4s,min-height .4s cubic-bezier(.22,1,.36,1);display:flex;position:relative}.header[data-scrolled=true] .island,.header[data-open=true] .island{border-color:var(--edge);background:color-mix(in srgb, var(--bg) 72%, transparent);-webkit-backdrop-filter:blur(18px)saturate(1.5);backdrop-filter:blur(18px)saturate(1.5);min-height:56px;box-shadow:0 18px 40px -24px #000000a6,inset 0 1px #ffffff0d}html[data-effects="1"] .island:before{content:"";z-index:-1;border-radius:inherit;pointer-events:none;background:radial-gradient(closest-side, var(--fx-outline-b,var(--accent)), var(--fx-outline-a,var(--accent)) 25%, transparent) no-repeat;-webkit-mask-composite:xor;opacity:0;background-position:-130px -130px;background-size:260px 260px;padding:1px;transition:opacity .5s;animation:14s linear infinite island-orbit;position:absolute;inset:-1px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}html[data-effects="1"] .header[data-scrolled=true] .island:before{opacity:.9}@keyframes island-orbit{0%,to{background-position:-130px -130px}45%{background-position:calc(100% + 130px) -130px}50%{background-position:calc(100% + 130px) calc(100% + 130px)}95%{background-position:-130px calc(100% + 130px)}}[data-theme=light] .header[data-scrolled=true] .island,[data-theme=light] .header[data-open=true] .island{background:color-mix(in srgb, var(--bg) 80%, transparent);box-shadow:0 16px 36px -24px #141e2d59}.brand{letter-spacing:-.01em;flex-shrink:0;align-items:center;gap:.6rem;font-weight:600;display:inline-flex}.brand__mark{background:var(--accent);width:32px;height:32px;color:var(--accent-contrast);box-shadow:0 0 22px -6px color-mix(in srgb, var(--accent) 80%, transparent);border-radius:10px;place-items:center;font-size:.8rem;font-weight:600;transition:transform .6s cubic-bezier(.22,1,.36,1),border-radius .4s;display:grid}.brand:hover .brand__mark{border-radius:50%;transform:rotate(-8deg)scale(1.06)}.nav{margin-inline:auto}.nav__inner{align-items:center;gap:.15rem;display:flex;position:relative}.nav__lens{height:36px;width:var(--lens-w,0px);background:color-mix(in srgb, var(--accent) 13%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--accent) 26%, transparent), 0 0 24px -8px color-mix(in srgb, var(--accent) 70%, transparent);transform:translate(var(--lens-x,0px), -50%);opacity:0;pointer-events:none;border-radius:999px;transition:transform .45s cubic-bezier(.22,1,.36,1),width .45s cubic-bezier(.22,1,.36,1),opacity .3s;position:absolute;top:50%;left:0}.nav__inner[data-lens=on] .nav__lens{opacity:1}.nav a{z-index:1;color:var(--text-muted);white-space:nowrap;border-radius:999px;align-items:baseline;gap:.35rem;padding:.45rem .85rem;font-size:.9rem;transition:color .25s;display:inline-flex;position:relative}.nav a:hover,.nav a[data-active]{color:var(--text)}.nav__num{font-family:var(--font-mono-family), ui-monospace, monospace;color:var(--accent);opacity:.75;font-size:.66rem;transition:opacity .25s}[data-theme=dark] .nav__num{color:var(--accent-strong)}.nav a:hover .nav__num,.nav a[data-active] .nav__num{opacity:1}.header__actions{flex-shrink:0;align-items:center;gap:.4rem;display:flex}.icon-btn{border:1px solid var(--border-soft);background:color-mix(in srgb, var(--surface) 70%, transparent);width:38px;height:38px;color:var(--text-muted);cursor:pointer;border-radius:999px;place-items:center;transition:color .2s,border-color .2s,background-color .2s,transform .2s;display:grid}.icon-btn:hover{color:var(--text);border-color:color-mix(in srgb, var(--accent) 45%, transparent);background:color-mix(in srgb, var(--accent) 10%, transparent)}.icon-btn:active{transform:scale(.94)}.theme-toggle__sun{display:none}.theme-toggle__moon,[data-theme=dark] .theme-toggle__sun{display:grid}[data-theme=dark] .theme-toggle__moon,.nav-toggle{display:none}.nav-toggle__lines{gap:4px;width:16px;display:grid}.nav-toggle__lines span{transform-origin:50%;background:currentColor;border-radius:1px;height:2px;transition:transform .3s cubic-bezier(.22,1,.36,1),opacity .2s;display:block}.header[data-open=true] .nav-toggle__lines span:first-child{transform:translateY(6px)rotate(45deg)}.header[data-open=true] .nav-toggle__lines span:nth-child(2){opacity:0;transform:scaleX(0)}.header[data-open=true] .nav-toggle__lines span:nth-child(3){transform:translateY(-6px)rotate(-45deg)}@media (max-width:1100px){.nav__num{display:none}.nav a{padding-inline:.7rem}}@media (max-width:880px){.brand__name{display:none}}@media (max-width:960px){.nav a{padding-inline:.6rem;font-size:.86rem}}@media (max-width:760px){.brand__name{display:inline}.nav-toggle{display:grid}.island{grid-template-columns:1fr auto;grid-template-areas:"brand actions""nav nav";row-gap:0;display:grid}.island>.brand{grid-area:brand;min-height:56px}.island>.header__actions{grid-area:actions}.island>.nav{grid-area:nav;grid-template-rows:0fr;margin-inline:0;transition:grid-template-rows .4s cubic-bezier(.22,1,.36,1);display:grid}.header[data-open=true] .nav{grid-template-rows:1fr}.header[data-open=true] .island{background:color-mix(in srgb, var(--bg) 94%, transparent)}.nav__inner{visibility:hidden;flex-direction:column;align-items:stretch;gap:.15rem;min-height:0;transition:visibility 0s linear .4s;overflow:hidden}.header[data-open=true] .nav__inner{visibility:visible;padding:.25rem 0 .75rem;transition-delay:0s}.nav__lens{display:none}.nav a{opacity:0;border-radius:12px;align-items:baseline;padding:.75rem .8rem;font-size:1rem;display:flex;transform:translateY(-6px)}.nav a[data-active]{background:color-mix(in srgb, var(--accent) 12%, transparent)}.nav__num{display:inline}.header[data-open=true] .nav a{opacity:1;transition:opacity .35s,transform .35s cubic-bezier(.22,1,.36,1);transition-delay:calc(60ms + var(--i,0) * 45ms);transform:none}}@media (max-width:340px){.brand__name{display:none}}.hero{border-bottom:1px solid var(--border-soft);isolation:isolate;padding-block:clamp(3rem,6vw,4.5rem);position:relative;overflow:hidden}.hero:before{content:"";z-index:0;pointer-events:none;background:radial-gradient(ellipse 55% 60% at 50% -10%, color-mix(in srgb, var(--fx,var(--accent)) 14%, transparent), transparent 70%), radial-gradient(ellipse 35% 45% at 80% 55%, color-mix(in srgb, var(--fx,var(--accent)) 8%, transparent), transparent 70%);position:absolute;inset:0}.hero{margin-top:-70px;padding-top:calc(clamp(3rem,6vw,4.5rem) + 70px)}.hero__horizon{z-index:0;pointer-events:none;opacity:0;width:100%;height:100%;transition:opacity .9s;position:absolute;inset:0}.hero[data-horizon] .hero__horizon{opacity:1}.hero[data-horizon] .hero__grid>:first-child{position:relative}.hero[data-horizon] .hero__grid>:first-child:before{content:"";z-index:-1;pointer-events:none;background:radial-gradient(ellipse 70% 60% at 40% 50%, color-mix(in srgb, var(--bg) 70%, transparent), transparent 75%);position:absolute;inset:-12% -8% -12% -30%}.hero__grid{z-index:1;grid-template-columns:minmax(0,1.4fr) minmax(0,.6fr);align-items:center;gap:clamp(2rem,5vw,3.5rem);display:grid;position:relative}.hero__grid--solo{grid-template-columns:minmax(0,1fr)}.hero__grid--solo>:first-child{max-width:700px}@media (max-width:860px){.hero__grid{grid-template-columns:1fr}.hero__grid--solo{padding-bottom:5.5rem}}.hero__title{margin-bottom:.8rem}.hero__text{color:var(--text-muted);max-width:56ch;font-size:1.05rem}.hero__actions{margin-top:1.5rem}.hero__meta{border-top:1px solid var(--border-soft);grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1.1rem clamp(1.25rem,3vw,2.5rem);margin-top:2.25rem;padding-top:1.25rem;display:grid}.hero__stat strong{font-size:1rem;font-weight:600;line-height:1.3;display:block}.hero__stat span{color:var(--text-dim);font-size:.8rem}.about__head{align-items:center;gap:clamp(1rem,3vw,1.5rem);margin-bottom:1.25rem;display:flex}.about__photo{aspect-ratio:1;flex-shrink:0;width:clamp(88px,12vw,120px);position:relative}.about__photo img{z-index:1;object-fit:cover;background:var(--surface-2);width:100%;height:100%;box-shadow:0 0 0 3px var(--bg-soft), 0 0 0 4px color-mix(in srgb, var(--accent) 45%, transparent), 0 14px 40px -16px color-mix(in srgb, var(--accent) 70%, transparent);border-radius:50%;position:relative}.project-card{flex-direction:column;gap:.6rem;height:100%;display:flex}.project-card__media{aspect-ratio:16/9;border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border-soft);color:var(--text-dim);isolation:isolate;place-items:center;font-size:.8rem;display:grid;position:relative;overflow:hidden}.project-card__media img{width:100%;height:100%;position:absolute;inset:0}.project-card__backdrop{object-fit:cover;filter:blur(18px)saturate(1.3);opacity:.65;z-index:0;transform:scale(1.2)}.project-card__img{object-fit:contain;z-index:1;transition:transform .4s cubic-bezier(.22,1,.36,1)}a.card:hover .project-card__img{transform:scale(1.025)}.project-card__meta{color:var(--text-dim);flex-wrap:wrap;gap:.35rem .6rem;font-size:.82rem;display:flex}.project-card__link{color:var(--accent);align-items:center;gap:.35rem;margin-top:auto;padding-top:.5rem;font-size:.89rem;font-weight:500;display:inline-flex}[data-theme=dark] .project-card__link{color:var(--accent-strong)}.timeline{gap:1rem;display:grid}.timeline__item h3{font-size:1.05rem}.timeline__period{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--accent);border-radius:999px;padding:.1rem .55rem;display:inline-block}[data-theme=dark] .timeline__period{color:var(--accent-strong)}.timeline__head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.4rem;display:flex}.timeline__period{color:var(--text-dim);font-size:.85rem}.timeline__org{color:var(--text-muted);font-weight:500}.timeline ul{color:var(--text-muted);margin:.5rem 0 0;padding-inline-start:1.1rem;font-size:.94rem}.timeline li{margin-bottom:.3rem}.skill{gap:.35rem;display:grid}.skill__head{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.skill__level{color:var(--text-dim);font-size:.8rem}.skill__bar{background:var(--surface-2);border-radius:2px;height:4px;overflow:hidden}.skill__fill{background:var(--accent);transform-origin:0;height:100%;transition:transform 1.1s cubic-bezier(.22,1,.36,1);position:relative;overflow:hidden}.skill__fill:after{content:"";background:linear-gradient(90deg,#0000,#ffffff8c,#0000);position:absolute;inset:0;transform:translate(-100%)}@keyframes shimmer{to{transform:translate(100%)}}.skill__items{color:var(--text-muted);margin:.25rem 0 0;font-size:.9rem}.form{gap:1rem;display:grid}.field{gap:.35rem;display:grid}.field label{color:var(--text);font-size:.86rem;font-weight:500}.field input,.field textarea,.field select{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg);width:100%;color:var(--text);font:inherit;padding:.6rem .75rem;font-size:.94rem;transition:border-color .15s}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--accent);outline:none}.field textarea{resize:vertical;min-height:140px}.field__hint{color:var(--text-dim);font-size:.8rem}.alert{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface-2);padding:.75rem .9rem;font-size:.9rem}.alert--ok{border-color:var(--success);color:var(--success);background:0 0}.alert--error{border-color:var(--danger);color:var(--danger);background:0 0}.contact-list{gap:.6rem;padding:0;list-style:none;display:grid}.contact-list a,.contact-list li{color:var(--text-muted);align-items:center;gap:.65rem;display:flex}.contact-list a:hover{color:var(--text)}.contact-list span{color:var(--text-dim);flex-shrink:0}.footer{border-top:1px solid var(--border-soft);background:var(--bg-soft);color:var(--text-muted);padding-block:clamp(2.25rem,4vw,3rem);font-size:.91rem}.footer__grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:2rem;margin-bottom:1.75rem;display:grid}.footer h4{letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin-bottom:.7rem;font-size:.78rem;font-weight:600}.footer ul{gap:.4rem;padding:0;list-style:none;display:grid}.footer a:hover{color:var(--text)}.footer__aka{color:var(--text-dim);font-size:.85rem}.footer__bottom{border-top:1px solid var(--border-soft);color:var(--text-dim);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding-top:1.25rem;font-size:.85rem;display:flex}.prose{max-width:68ch;color:var(--text-muted);font-size:1rem}.prose h2{color:var(--text);margin-top:2em;font-size:1.35rem}.prose h3{color:var(--text);margin-top:1.6em}.prose a{color:var(--accent);background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:100% 1px;padding-bottom:1px;text-decoration:none;transition:background-size .2s}.prose a:hover{background-size:100% 2px}[data-theme=dark] .prose a{color:var(--accent-strong)}.prose blockquote{border-inline-start:2px solid var(--border);color:var(--text);margin:1.4em 0;padding-block:.3em;padding-inline-start:1.1em}.prose code{font-family:var(--font-mono);background:var(--surface-2);border-radius:3px;padding:.1em .35em;font-size:.88em}.prose pre{background:var(--surface-2);border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:1rem;overflow-x:auto}.prose pre code{background:0 0;padding:0}.prose img{border-radius:var(--radius-sm);border:1px solid var(--border)}.page-head{border-bottom:1px solid var(--border-soft);margin-bottom:clamp(1.5rem,3vw,2.5rem);padding-block:clamp(2.5rem,5vw,3.5rem) clamp(1.25rem,2.5vw,2rem)}.breadcrumb{color:var(--text-dim);margin-bottom:.75rem;font-size:.85rem}.breadcrumb ol{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.breadcrumb li+li:before{content:"/";color:var(--border);margin-inline-end:.35rem}.breadcrumb li[aria-current]{text-overflow:ellipsis;white-space:nowrap;max-width:48ch;overflow:hidden}.breadcrumb a:hover{color:var(--text)}.notice{border:1px dashed var(--border);border-radius:var(--radius-sm);color:var(--text-dim);margin-bottom:.9rem;padding:.45rem .8rem;font-size:.86rem;display:inline-block}.container--narrow{max-width:820px}.cover-wrap{margin-bottom:2rem}.cover{border-radius:var(--radius);border:1px solid var(--border-soft);background:var(--surface-2);width:100%;height:auto}.cert-link{color:var(--accent);text-underline-offset:2px;align-items:center;gap:.25rem;font-size:.86rem;text-decoration:underline;display:inline-flex}[data-theme=dark] .cert-link{color:var(--accent-strong)}@media (min-width:861px){.grid--article{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}}.empty{text-align:center;color:var(--text-dim);border:1px solid var(--border);border-radius:var(--radius);padding:2.5rem 1rem}.notfound{place-items:center;min-height:80vh;padding-block:clamp(3rem,8vw,6rem);display:grid}.notfound__inner{text-align:start;max-width:620px}.notfound__code{font-family:var(--font-mono);letter-spacing:.2em;color:var(--text-dim);margin-bottom:1rem;font-size:.85rem}.terminal{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);margin-bottom:2rem;overflow:hidden}.terminal__bar{background:var(--bg-soft);border-bottom:1px solid var(--border-soft);align-items:center;gap:.4rem;padding:.55rem .8rem;display:flex}.terminal__bar span{background:var(--border);border-radius:50%;width:9px;height:9px}.terminal__bar em{font-style:normal;font-family:var(--font-mono);color:var(--text-dim);margin-inline-start:auto;font-size:.72rem}.terminal__body{font-family:var(--font-mono);color:var(--text-muted);padding:1rem 1.1rem 1.2rem;font-size:.85rem;line-height:1.9}.terminal__line{white-space:nowrap;width:0;margin:0;animation:.7s steps(34,end) forwards type;overflow:hidden}.terminal__line--1{animation-delay:.2s}.terminal__line--2{color:var(--danger);animation-delay:1s}.terminal__line--3{animation-delay:1.7s}.terminal__prompt{color:var(--accent)}[data-theme=dark] .terminal__prompt{color:var(--accent-strong)}.caret{vertical-align:text-bottom;background:currentColor;width:.5em;height:1em;margin-inline-start:.3em;animation:1.1s step-end infinite blink;display:inline-block}@keyframes type{to{width:100%}}@keyframes blink{50%{opacity:0}}.hero__title,.hero__text,.hero__actions,.hero__meta,.hero__portrait{animation:.5s cubic-bezier(.22,1,.36,1) both rise}.hero__text{animation-delay:60ms}.hero__actions{animation-delay:.12s}.hero__meta{animation-delay:.18s}.hero__portrait{animation-delay:.1s}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}[data-reveal]{isolation:isolate;position:relative}[data-reveal]:before{content:"";z-index:-1;pointer-events:none;background:linear-gradient(180deg, var(--accent-soft) 0%, transparent 38%);opacity:0;transition:opacity 1.4s;position:absolute;inset:0}[data-reveal].is-in:before{opacity:1}html[data-rv] .rv:not(.is-in){opacity:0}html[data-rv] .rv.is-in{animation:rv-in .85s cubic-bezier(.22, 1, .36, 1) var(--d,0s) backwards}@keyframes rv-in{0%{opacity:0;translate:0 34px;scale:.97}}html[data-rv] .rv:not(.is-in) .skill__fill{transform:scaleX(0)}html[data-rv] .rv.is-in .skill__fill{transition-delay:calc(var(--d,0s) + .25s)}.skill__fill:after{animation:1.3s ease-out 1.2s shimmer}.decode{position:relative}.decode__live{color:var(--text);position:absolute;inset:0;overflow:hidden}.decode__glyph{color:var(--accent);opacity:.5}.decode__ok{animation:.6s ease-out settle}@keyframes settle{0%{color:var(--accent);text-shadow:0 0 14px color-mix(in srgb, var(--accent) 80%, transparent)}}html[data-js] .decode[data-decode=on] .decode__text{visibility:hidden}html:not([data-js]) .decode__live{display:none}.intro{z-index:200;padding:var(--gutter);background:radial-gradient(ellipse 60% 50% at 50% 45%, color-mix(in srgb, var(--fx,var(--accent)) 9%, transparent), transparent 70%), var(--bg);cursor:pointer;clip-path:circle(150vmax at var(--cx,50%) var(--cy,50%));place-items:center;transition:clip-path 1.15s cubic-bezier(.7,0,.2,1),opacity .35s .85s;display:grid;position:fixed;inset:0}.intro[data-leaving]{clip-path:circle(0px at var(--cx,50%) var(--cy,50%));opacity:0;pointer-events:none}.intro[data-leaving] .intro__terminal{filter:blur(2px);transition:transform 1s cubic-bezier(.7,0,.2,1),filter 1s;transform:scale(.92)}html[data-intro=skip] .intro{display:none}.intro__terminal{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);width:min(560px,100%);animation:.7s cubic-bezier(.22,1,.36,1) both rise;overflow:hidden;box-shadow:0 40px 80px -40px #00000080}.intro__body{min-height:7.5em}.intro__line{white-space:nowrap;width:0;animation:type calc(var(--chars,28) * 22ms) steps(var(--chars,28), end) forwards;margin:0;overflow:hidden}.intro__skip{inset-inline-end:calc(var(--gutter) + env(safe-area-inset-right,0px));bottom:calc(1.5rem + env(safe-area-inset-bottom,0px));border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text-muted);font:inherit;cursor:pointer;padding:.55rem .95rem;font-size:.86rem;position:absolute}.intro__skip:hover{color:var(--text);border-color:var(--text-dim)}.share{border-top:1px solid var(--border-soft);flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:2.25rem;padding-top:1.25rem;display:flex}.share--compact{border-top:0;margin-top:1rem;padding-top:0}.share__label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);margin-inline-end:.35rem;font-size:.76rem}.grid>:nth-child(2),.timeline__item:nth-child(2){--n:1}.grid>:nth-child(3),.timeline__item:nth-child(3){--n:2}.grid>:nth-child(4),.timeline__item:nth-child(4){--n:3}.grid>:nth-child(5),.timeline__item:nth-child(5){--n:4}.grid>:nth-child(6),.timeline__item:nth-child(6){--n:5}.grid>:nth-child(7),.timeline__item:nth-child(7){--n:6}.grid>:nth-child(n+8),.timeline__item:nth-child(n+8){--n:7}.stack-strip{background:var(--bg-soft);border-bottom:1px solid var(--border-soft);padding-block:1.1rem 1.25rem;position:relative;overflow:hidden}.stack-strip__head{margin-bottom:.75rem}.stack-strip__label{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);font-size:.74rem;font-weight:500}.stack-strip__prompt{color:var(--accent)}.stack-strip__viewport{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000);mask-image:linear-gradient(90deg,#0000,#000 6% 94%,#0000)}.stack-strip__track{width:max-content;animation:marquee calc(var(--items,12) * 2.4s) linear infinite;display:flex}@media (hover:hover){.stack-strip__viewport:hover .stack-strip__track{animation-play-state:paused}}.stack-strip__row{gap:.7rem;margin:0;padding:.15rem .7rem .15rem 0;list-style:none;display:flex}.stack-chip{border:1px solid var(--border-soft);background:var(--surface);color:var(--text);white-space:nowrap;border-radius:999px;align-items:center;gap:.55rem;padding:.5rem .95rem .5rem .75rem;font-size:.92rem;font-weight:500;transition:border-color .2s,transform .2s;display:inline-flex}.stack-chip svg{width:18px;height:18px;fill:var(--brand,currentColor);flex-shrink:0}.stack-chip__code{font-family:var(--font-mono);color:var(--accent);font-size:.8rem}@media (hover:hover){.stack-chip:hover{border-color:color-mix(in srgb, var(--brand,var(--accent)) 60%, transparent);transform:translateY(-2px)}}@keyframes marquee{to{transform:translate(-50%)}}.to-top{inset-inline-end:calc(1rem + env(safe-area-inset-right,0px));bottom:calc(1rem + env(safe-area-inset-bottom,0px));z-index:40;border:1px solid color-mix(in srgb, var(--text) 12%, transparent);background:color-mix(in srgb, var(--surface) 72%, transparent);-webkit-backdrop-filter:blur(16px)saturate(1.4);backdrop-filter:blur(16px)saturate(1.4);max-width:min(62vw,260px);color:var(--text);font:inherit;cursor:pointer;opacity:0;pointer-events:none;border-radius:999px;align-items:center;gap:.6rem;padding:.35rem .95rem .35rem .35rem;transition:opacity .4s,transform .5s cubic-bezier(.22,1,.36,1),border-color .25s;display:inline-flex;position:fixed;transform:translateY(18px)scale(.96);box-shadow:0 16px 36px -18px #000000a6}.to-top[data-shown]{opacity:1;pointer-events:auto;transform:none}.to-top:hover{border-color:color-mix(in srgb, var(--accent) 50%, transparent)}.to-top__arrow{background:var(--accent);width:32px;height:32px;color:var(--accent-contrast);box-shadow:0 0 18px -4px color-mix(in srgb, var(--accent) 80%, transparent);border-radius:50%;flex-shrink:0;place-items:center;transition:transform .35s cubic-bezier(.22,1,.36,1);display:grid}.to-top__arrow svg{transform:rotate(-90deg)}.to-top:hover .to-top__arrow{transform:translateY(-3px)}.to-top__where{white-space:nowrap;align-items:baseline;gap:.45rem;min-width:0;font-size:.82rem;font-weight:500;animation:.45s cubic-bezier(.22,1,.36,1) where-in;display:inline-flex}.to-top__num{font-family:var(--font-mono-family), ui-monospace, monospace;color:var(--accent);font-size:.7rem}[data-theme=dark] .to-top__num{color:var(--accent-strong)}.to-top__text{text-overflow:ellipsis;overflow:hidden}@keyframes where-in{0%{opacity:0;transform:translateY(6px)}}.clock{font-variant-numeric:tabular-nums;align-items:center;gap:.45rem;display:inline-flex}.clock__dot{background:var(--success);width:8px;height:8px;box-shadow:0 0 0 0 color-mix(in srgb, var(--success) 45%, transparent);border-radius:50%;animation:2.2s ease-out infinite pulse}.clock__zone{font-family:var(--font-mono);color:var(--text-dim);font-size:.72rem;font-weight:400}@keyframes pulse{70%{box-shadow:0 0 0 8px #0000}to{box-shadow:0 0 #0000}}.copy-btn{border-radius:var(--radius-sm);border:1px solid var(--border-soft);background:var(--surface);width:30px;height:30px;color:var(--text-dim);cursor:pointer;flex-shrink:0;place-items:center;margin-inline-start:.1rem;transition:color .15s,border-color .15s;display:inline-grid;position:relative}.copy-btn:hover,.copy-btn[data-copied]{color:var(--text);border-color:var(--text-dim)}.copy-btn__tip{bottom:calc(100% + 6px);background:var(--text);white-space:nowrap;opacity:0;pointer-events:none;border-radius:4px;padding:.15rem .5rem;font-size:.72rem;transition:opacity .2s;position:absolute;inset-inline-start:50%;transform:translate(-50%);color:var(--bg)!important}.copy-btn[data-copied] .copy-btn__tip{opacity:1}.sent{align-items:center;gap:.8rem;display:flex}.sent__mark{flex-shrink:0}.sent__circle,.sent__check{fill:none;stroke:var(--success);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.sent__circle{stroke-dasharray:151;stroke-dashoffset:151px;animation:.7s forwards draw}.sent__check{stroke-width:2.5px;stroke-dasharray:36;stroke-dashoffset:36px;animation:.45s .55s forwards draw}@keyframes draw{to{stroke-dashoffset:0}}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:9999}.term{z-index:300;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#00000073;place-items:center;padding:1rem;animation:.2s fade-in;display:grid;position:fixed;inset:0}.term__panel{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;width:min(720px,100%);max-height:min(70vh,560px);animation:.3s cubic-bezier(.22,1,.36,1) rise;display:flex;overflow:hidden;box-shadow:0 40px 80px -40px #0009}.term__body{min-height:220px;font-family:var(--font-mono);color:var(--text-muted);overscroll-behavior:contain;flex:1;padding:.9rem 1.1rem;font-size:.85rem;line-height:1.7;overflow:auto}.term__line{white-space:pre-wrap;word-break:break-word;margin:0}.term__line--in{color:var(--text)}.term__line--ok{color:var(--success)}.term__line--err{color:var(--danger)}.term__input{align-items:center;gap:.5rem;display:flex}.term__input input{min-width:0;color:var(--text);font:inherit;caret-color:var(--accent);background:0 0;border:0;outline:0;flex:1;padding:.2rem 0}.term__close{width:28px;height:28px;color:var(--text-dim);cursor:pointer;background:0 0;border:0;border-radius:4px;place-items:center;margin-inline-start:.5rem;display:grid}.term__close:hover{color:var(--text);background:var(--surface)}.term__hint{padding:.5rem 1.1rem calc(.6rem + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-soft);font-family:var(--font-mono);color:var(--text-dim);margin:0;font-size:.74rem}.term-open{border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-dim);font-family:var(--font-mono);cursor:pointer;padding:.15rem .5rem;font-size:.8rem;transition:color .15s,border-color .15s}.term-open:hover{color:var(--text);border-color:var(--text-dim)}@media (max-width:700px){.term{padding:calc(.5rem + env(safe-area-inset-top,0px)) .5rem .5rem;place-items:start center}.term__panel{max-height:min(52vh,420px)}.term__body{min-height:160px;font-size:.82rem}}@keyframes fade-in{0%{opacity:0}}.about{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);align-items:start;gap:clamp(1.75rem,4vw,3.5rem);display:grid}@media (min-width:901px){.about>:last-child{position:sticky;top:96px}}@media (max-width:900px){.about{grid-template-columns:1fr}}.term-inline{border-radius:var(--radius-lg);border:1px solid var(--border);background:color-mix(in srgb, var(--surface-2) 70%, #05070a);box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 10%, transparent), 0 30px 60px -32px #000000b3, 0 0 60px -30px color-mix(in srgb, var(--accent) 60%, transparent);flex-direction:column;display:flex;position:relative;overflow:hidden}[data-theme=light] .term-inline{--text:#eceef1;--text-muted:#aeb6c0;--text-dim:#8e97a2;--border-soft:#242a32;--bg-soft:#1b2027;--surface:#1f242b;--accent:#8fb6d9;--accent-strong:#a9c8e3;--success:#6cc39b;--danger:#e08c8c;color:var(--text);background:#161b22;border-color:#2c333c}.term-inline .term__body{cursor:text;flex:none;height:clamp(260px,40vh,360px);min-height:0}.terminal__bar span:first-child{background:#ff5f57}.terminal__bar span:nth-child(2){background:#febc2e}.terminal__bar span:nth-child(3){background:#28c840}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}html[data-rv] .rv.is-in{animation-name:rv-fade;animation-duration:.5s}.clock__dot,.skill__fill:after,.sent__circle,.sent__check,.term,.term__panel{animation:none}html[data-effects="1"] .card:before{animation:none!important}.stack-strip__track{animation-duration:calc(var(--items,12) * 4.8s)}.sent__circle,.sent__check{stroke-dashoffset:0}.brand__mark,.to-top,.copy-btn__tip{transition:none}.terminal__line,.caret,.intro__line,.intro__terminal,.hero__title,.hero__text,.hero__actions,.hero__meta,.hero__portrait{opacity:1;width:auto;animation:none;transform:none}.nav a,.nav__cta{opacity:1;transition:none;transform:none}.island>.nav,.card,.btn,.project-card__img,.intro{transition:none}}@keyframes rv-fade{0%{opacity:0}}
