.bg-grid{background-image:linear-gradient(var(--grid-color) 1px, transparent 1px), linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);background-size:40px 40px}.gradient-text{background:linear-gradient(135deg, var(--grad-start) 0%, var(--grad-mid) 50%, var(--grad-end) 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.underline-accent{display:inline-block;position:relative}.underline-accent:after{content:"";background:linear-gradient(90deg, var(--grad-start), var(--grad-mid));border-radius:2px;width:100%;height:3px;position:absolute;bottom:-3px;left:0}[data-reveal=pending]{opacity:0;transform:translateY(20px)}[data-reveal=pending][data-reveal-dir=down]{transform:translateY(-20px)}[data-reveal=pending][data-reveal-dir=left]{transform:translate(20px)}[data-reveal=pending][data-reveal-dir=right]{transform:translate(-20px)}[data-reveal=pending][data-reveal-dir=none]{transform:none}[data-reveal=in]{opacity:1;transition:opacity .6s cubic-bezier(.21, .47, .32, .98) var(--reveal-delay,0s), transform .6s cubic-bezier(.21, .47, .32, .98) var(--reveal-delay,0s);transform:none}@keyframes enter{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}.enter{animation:.6s cubic-bezier(.21,.47,.32,.98) both enter}.lift{transition:transform .2s ease-out,box-shadow .3s,border-color .3s}.lift:hover{transform:translateY(-4px)}.skill-mark{color:var(--mark,var(--text-primary))}[data-theme=dark] .skill-mark{color:color-mix(in oklab, var(--mark,var(--text-primary)) 62%, white)}@media (prefers-reduced-motion:reduce){.lift:hover{transform:none}}.container-main{width:100%;max-width:1280px;margin-left:auto;margin-right:auto;padding-left:clamp(1.25rem,4vw,5rem);padding-right:clamp(1.25rem,4vw,5rem)}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}html.lenis,html.lenis body{height:auto}.lenis.lenis-smooth{scroll-behavior:auto!important}
.wrap{max-width:var(--max);padding-left:max(20px, env(safe-area-inset-left,0px));padding-right:max(20px, env(safe-area-inset-right,0px));margin-inline:auto}.site{z-index:2;position:relative}.site section[id]{scroll-margin-top:calc(var(--nav-h) + 12px)}.kick{font:600 var(--t-cap) var(--f-body);letter-spacing:.16em;text-transform:uppercase;color:var(--a1)}.site h1,.site h2,.site h3{text-wrap:balance}.h2{font:700 var(--t-h2) / 1.14 var(--f-display);letter-spacing:-.03em;margin:10px 0 0}.g{background:linear-gradient(100deg, var(--a1), var(--a2));color:#0000;-webkit-background-clip:text;background-clip:text}.lead{color:var(--mute);max-width:56ch;margin:14px 0 0}.sec{padding-block:clamp(80px,11vh,120px)}.shead{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:16px 40px;margin-bottom:44px;display:flex}.row{flex-wrap:wrap;gap:12px;display:flex}.btn{font:600 14.5px var(--f-body);border:1px solid var(--line);background:var(--glass);-webkit-backdrop-filter:blur(12px);color:var(--ink);cursor:pointer;transition:transform .25s var(--ease-out), background .25s, border-color .25s;border-radius:999px;align-items:center;gap:10px;padding:11px 19px;text-decoration:none;display:inline-flex}.btn:hover{border-color:color-mix(in srgb, var(--ink) 30%, transparent);transform:translateY(-2px)}.btn.pri{background:var(--ink);color:var(--bg);border-color:var(--ink)}.btn .ar{transition:transform .25s var(--ease-out)}.btn:hover .ar{transform:translate(4px)}.btn.sm{padding:8px 15px;font-size:13.5px}.glass{background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:blur(16px);border-radius:22px;position:relative;overflow:hidden}.glass:after{content:"";border-radius:inherit;pointer-events:none;opacity:0;background:radial-gradient(360px circle at var(--mx,50%) var(--my,50%), var(--glow), transparent 60%);transition:opacity .3s;position:absolute;inset:0}.glass:hover:after{opacity:1}.chip{font:500 13.5px var(--f-body);background:var(--glass);border:1px solid var(--line);-webkit-backdrop-filter:blur(10px);border-radius:999px;align-items:center;gap:10px;padding:7px 14px;display:inline-flex}.chip i{background:var(--a1);width:7px;height:7px;box-shadow:0 0 0 4px color-mix(in srgb, var(--a1) 22%, transparent);border-radius:50%}.skip{z-index:60;background:var(--ink);color:var(--bg);border-radius:999px;padding:10px 16px;font-weight:600;text-decoration:none;position:fixed;top:-60px;left:12px}.skip:focus{top:calc(12px + env(safe-area-inset-top,0px))}body:before{content:"";height:env(safe-area-inset-top,0px);z-index:45;background:var(--bg);position:fixed;inset:0 0 auto}.nav{left:0;right:0;top:env(safe-area-inset-top,0px);z-index:40;border-bottom:1px solid #0000;transition:background .3s,border-color .3s;position:fixed}.nav.solid,.nav.open{background:color-mix(in srgb, var(--bg) 93%, transparent);-webkit-backdrop-filter:blur(14px);border-color:var(--line)}.nav .wrap{min-height:var(--nav-h);align-items:center;gap:18px;display:flex}.logo{font:700 15px var(--f-display);letter-spacing:-.01em;text-decoration:none}.logo i{color:var(--a1);font-style:normal}.links{gap:24px;margin-left:auto;font-size:14.5px;font-weight:500;display:flex}.links a{color:var(--mute);text-decoration:none;transition:color .2s}.links a:hover{color:var(--ink)}.icon-btn{border:1px solid var(--line);background:var(--glass);width:38px;height:38px;color:var(--ink);cursor:pointer;border-radius:50%;place-items:center;display:grid}.burger,.mnav{display:none}@media (max-width:820px){.links,.nav .resume{display:none}.nav .tools{margin-left:auto}.burger{display:grid}.mnav{gap:4px;padding:8px 20px 18px;display:grid}.mnav[hidden]{display:none}.mnav a{color:var(--ink);border-bottom:1px solid var(--line);padding:10px 0;font-weight:500;text-decoration:none}.mnav a:last-child{border-bottom:0}}.tools{align-items:center;gap:10px;display:flex}.pal{z-index:30;right:max(12px, env(safe-area-inset-right,0px));font:500 12.5px var(--f-body);flex-direction:row-reverse;align-items:center;gap:8px;display:flex;position:fixed;top:50%;transform:translateY(-50%)}.pal-toggle{border:1px solid var(--line);background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(14px);cursor:pointer;border-radius:50%;place-items:center;width:40px;height:40px;display:grid;box-shadow:0 12px 30px -16px #00000080}.pal-list{border:1px solid var(--line);background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(14px);border-radius:16px;gap:2px;padding:6px;display:grid;box-shadow:0 18px 40px -20px #00000080}.pal-list[hidden]{display:none}.pal-list button{color:var(--ink);font:inherit;cursor:pointer;text-align:left;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:8px;padding:7px 12px 7px 7px;display:flex}.pal-list button:hover{background:var(--glass)}.pal-list button[aria-pressed=true]{border-color:var(--ink)}.pal-list em{font-style:normal}.pal .sw{border-radius:999px;width:26px;height:16px;display:inline-flex;overflow:hidden;box-shadow:inset 0 0 0 1px #7f7f7f4d}.pal .sw b{flex:1}.pal-hint{border:1px solid var(--line);background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(14px);color:var(--ink);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:7px 8px 7px 12px;animation:.35s cubic-bezier(.2,.8,.2,1) both pal-hint-in;display:flex;position:relative;box-shadow:0 12px 30px -16px #00000080}.pal-hint[hidden],[data-palette-locked] .pal{display:none}.pal-hint-x{width:24px;height:24px;color:var(--ink);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;font-size:15px;line-height:1;display:grid}.pal-hint-x:hover{background:var(--glass)}@keyframes pal-hint-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.pal-hint{animation:none}}.backdrop,.backdrop-fallback{z-index:0;pointer-events:none;width:100%;height:100%;display:block;position:fixed;inset:0}.backdrop-fallback{background:radial-gradient(70% 60% at 75% 30%, color-mix(in srgb, var(--a1) 22%, transparent), transparent 70%), radial-gradient(60% 60% at 15% 85%, color-mix(in srgb, var(--a2) 22%, transparent), transparent 70%), var(--bg)}.site-foot{z-index:2;padding-block:28px calc(92px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);background:color-mix(in srgb, var(--bg) 85%, transparent);position:relative}.site-foot .wrap{color:var(--mute);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px;font-size:14px;display:flex}.site-foot p{margin:0}.site-foot nav{flex-wrap:wrap;gap:18px;display:flex}.site-foot a{color:var(--mute);text-decoration:none}.site-foot a:hover{color:var(--ink)}
.chat-launch{z-index:35;right:max(16px, env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));border:1px solid color-mix(in srgb, var(--a1) 40%, var(--line));background:color-mix(in srgb, var(--bg) 88%, transparent);color:var(--ink);font:600 14px var(--f-body);cursor:pointer;-webkit-backdrop-filter:blur(14px);box-shadow:0 18px 40px -18px #0000008c, 0 0 0 4px color-mix(in srgb, var(--a1) 10%, transparent);transition:transform .25s var(--ease-out);border-radius:999px;align-items:center;gap:8px;padding:12px 18px;display:inline-flex;position:fixed}.chat-launch:hover{transform:translateY(-2px)}.chat-launch svg{color:var(--a1)}.chat-launch.hidden-when-open{visibility:hidden}.chat{z-index:50;right:max(16px, env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));border:1px solid var(--line);background:color-mix(in srgb, var(--bg) 94%, transparent);-webkit-backdrop-filter:blur(18px);width:min(400px,100vw - 32px);height:min(580px,100svh - 110px);animation:chat-in .28s var(--ease-out);border-radius:22px;grid-template-rows:auto 1fr auto auto;display:grid;position:fixed;overflow:hidden;box-shadow:0 30px 80px -30px #0009}.chat[hidden]{display:none}@keyframes chat-in{0%{opacity:0;transform:translateY(12px)scale(.98)}}.chat-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:start;gap:12px;padding:16px 16px 12px 18px;display:flex}.chat-head h2{font:700 15px var(--f-display);letter-spacing:-.01em;margin:0}.chat-head p{color:var(--mute);margin:2px 0 0;font-size:12.5px}.chat-log{overscroll-behavior:contain;flex-direction:column;gap:10px;padding:14px 16px;display:flex;overflow-y:auto}.starters{gap:8px;margin:0;padding:0;list-style:none;display:grid}.starters button{text-align:left;border:1px solid var(--line);background:var(--glass);width:100%;color:var(--ink);font:500 14px var(--f-body);cursor:pointer;border-radius:12px;padding:10px 12px}.starters button:hover{border-color:color-mix(in srgb, var(--a1) 50%, var(--line))}.msg{border-radius:14px;max-width:88%;padding:10px 13px;font-size:14.5px;line-height:1.55}.msg p{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.msg.user{background:var(--ink);color:var(--bg);border-bottom-right-radius:4px;align-self:flex-end}.msg.assistant{background:var(--glass);border:1px solid var(--line);border-bottom-left-radius:4px;align-self:flex-start}.msg.thinking{color:var(--mute)}.msg.error{border:1px solid var(--danger);align-self:stretch;justify-items:start;gap:8px;max-width:none;display:grid}.srcs{flex-wrap:wrap;gap:6px 10px;font-size:13px;display:flex;margin-top:8px!important}.srcs span{color:var(--mute)}.srcs a{color:var(--a1)}.chat-form{border-top:1px solid var(--line);align-items:end;gap:8px;padding:10px 12px;display:flex}.chat-form textarea{resize:none;min-height:42px;max-height:120px;font:400 16px var(--f-body);color:var(--ink);background:color-mix(in srgb, var(--bg) 70%, transparent);border:1px solid var(--line);field-sizing:content;border-radius:12px;flex:1;padding:10px 12px}.chat-form textarea:focus-visible{border-color:var(--a1);box-shadow:0 0 0 3px color-mix(in srgb, var(--a1) 22%, transparent);outline:none}.chat-form .send{background:var(--ink);height:42px;color:var(--bg);cursor:pointer;border:0;border-radius:12px;flex:0 0 42px;place-items:center;display:grid}.chat-form .send[disabled]{opacity:.45;cursor:not-allowed}.chat-note{color:var(--mute);margin:0;padding:0 14px 12px;font-size:11.5px}@media (max-width:560px){.chat{inset:env(safe-area-inset-top,0px) 0 0 0;border:0;border-radius:0;width:100%;height:auto}.chat-launch span{display:none}.chat-launch{padding:13px}}
