*,:after,:before{box-sizing:border-box}*{margin:0}body,html{height:100%}body{line-height:1.6;-webkit-font-smoothing:antialiased}canvas,img,svg,video{display:block;max-width:100%}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word;word-break:normal;-webkit-hyphens:auto;hyphens:auto}:root{--bg:#0b1220;--panel:#0f172a;--text:#e6edf7;--muted:#a3b2c7;--border:#253147;--radius:16px;--shadow:0 18px 48px rgba(0,0,0,.35);--avatar-size:clamp(180px,42vw,360px);--avatar-ratio:4/5;--accent:#8c1d40;--accent-2:#a78bfa;--accent-3:#0ea5a4;--grad-btn:linear-gradient(135deg,var(--accent),var(--accent-2));--grad-hero:radial-gradient(600px 300px at 12% 6%,rgba(140,29,64,.12) 0%,transparent 60%),radial-gradient(600px 300px at 88% 12%,rgba(14,165,164,.14) 0%,transparent 63%),radial-gradient(700px 320px at 70% 100%,rgba(245,158,11,.1) 0%,transparent 65%),linear-gradient(180deg,#0b1220,#0f172a 45%,#111827);--hero-image:url(/images/hero-photo.jpeg);--hero-image-opacity:0.25}html{color-scheme:light}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,Apple Color Emoji,Segoe UI Emoji;background:var(--bg);color:var(--text)}.container{width:min(1140px,100% - 48px);margin-inline:auto}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:2px}header.nav{position:-webkit-sticky;position:sticky;top:0;z-index:50;-webkit-backdrop-filter:saturate(140%) blur(8px);backdrop-filter:saturate(140%) blur(8px);background:color-mix(in oklab,var(--panel),transparent 20%);border-bottom:1px solid var(--border)}.nav-inner{gap:20px;padding-block:12px}.brand,.nav-inner{display:flex;align-items:center}.brand{gap:12px;font-weight:800;letter-spacing:-.02em;font-size:18px;white-space:nowrap}.nav-links{display:flex;gap:30px}.nav-links a{position:relative;color:var(--muted);font-weight:800;font-size:18px;letter-spacing:-.015em;padding:8px 2px;text-decoration:none;transition:color .2s ease,transform .15s ease}.nav-links a.active,.nav-links a:hover{color:var(--text);text-decoration:none;transform:translateY(-1px)}.nav-links a:after{content:"";position:absolute;left:0;right:0;bottom:2px;height:2px;background:linear-gradient(90deg,var(--accent),var(--accent-2));transform:scaleX(0);transform-origin:0 50%;transition:transform .25s ease;border-radius:2px;opacity:.9}.nav-links a.active:after,.nav-links a:hover:after{transform:scaleX(1)}.btn{display:inline-flex;align-items:center;gap:10px;padding:11px 18px;border-radius:999px;border:1px solid color-mix(in oklab,var(--border),#fff 10%);background:linear-gradient(180deg,color-mix(in oklab,var(--panel),#fff 6%),color-mix(in oklab,var(--panel),#000 6%));box-shadow:var(--shadow);color:var(--text);transition:transform .12s ease,border-color .2s,box-shadow .2s}.btn:hover{transform:translateY(-1px);border-color:color-mix(in oklab,var(--accent),#fff 30%);box-shadow:0 10px 28px color-mix(in oklab,var(--accent),#000 20%)}.btn.primary{background:var(--grad-btn);color:#fff;border:none;box-shadow:0 12px 30px color-mix(in oklab,var(--accent),#000 30%)}.btn.ghost{background:transparent;box-shadow:none;border-color:color-mix(in oklab,var(--border),#fff 5%)}.btn:active,.chip:active{transform:scale(.97)}.chip{transition:transform .18s ease,box-shadow .25s ease,border-color .2s ease,background .2s ease}.section{padding-block:72px}.section-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:28px}.section-title{font-size:clamp(22px,5vw,40px);letter-spacing:-.02em}#skills .section-title{color:var(--accent)}#skills .section-title .gradient-text{background:none;color:var(--accent)}.section-sub{color:var(--muted)}.btn:focus-visible,.focus-ring,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid color-mix(in oklab,var(--accent),#fff 25%);outline-offset:3px;border-radius:10px}.card{border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);padding:28px;box-shadow:var(--shadow)}.card.hoverable{transition:transform .18s ease,box-shadow .2s}.card.hoverable:hover{transform:translateY(-4px);box-shadow:0 16px 44px rgba(2,6,23,.12)}.grid{display:grid;grid-gap:20px;gap:20px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.badge{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--border);border-radius:999px;color:var(--muted);font-size:14px}.gradient-text{background:linear-gradient(90deg,color-mix(in oklab,var(--accent),#fff 35%) 0,color-mix(in oklab,var(--accent-3),#fff 45%) 100%);-webkit-background-clip:text;background-clip:text;color:transparent}.reveal{opacity:0;transform:translateY(12px);animation:revealUp .7s cubic-bezier(.22,.61,.36,1) forwards}.reveal.delay-1{animation-delay:.08s}.reveal.delay-2{animation-delay:.16s}.reveal.delay-3{animation-delay:.24s}@keyframes revealUp{to{opacity:1;transform:translateY(0)}}.page-home{position:relative;isolation:isolate;background:var(--grad-hero)}.page-home:before{background-image:var(--hero-image);background-size:cover;background-position:50% 40%;opacity:var(--hero-image-opacity);filter:saturate(115%) contrast(105%);mix-blend-mode:multiply;animation:heroPan 18s ease-in-out infinite alternate}.page-home:after,.page-home:before{content:"";position:absolute;inset:0;z-index:-1}.page-home:after{background-image:radial-gradient(hsla(0,0%,100%,.06) 1px,transparent 0);background-size:14px 14px;-webkit-mask:linear-gradient(180deg,rgba(0,0,0,.55),transparent 65%);mask:linear-gradient(180deg,rgba(0,0,0,.55),transparent 65%);pointer-events:none}.hero{position:relative;border:1px solid color-mix(in oklab,var(--border),var(--accent) 8%);border-radius:calc(var(--radius) + 12px);padding:clamp(24px,3vw,36px);background:linear-gradient(180deg,rgba(17,24,39,.55),rgba(15,23,42,.75));box-shadow:0 18px 60px rgba(2,6,23,.12);-webkit-backdrop-filter:blur(8px) saturate(110%);backdrop-filter:blur(8px) saturate(110%);transition:transform .18s ease,box-shadow .25s ease,border-color .2s ease}.hero:hover{transform:translateY(-2px);box-shadow:0 20px 60px rgba(2,6,23,.16)}.hero:before{inset:-2px;border-radius:calc(var(--radius) + 14px);background:conic-gradient(from 180deg at 50% 50%,var(--accent),var(--accent-2),var(--accent-3),var(--accent));filter:blur(18px);opacity:.18;z-index:-1}.hero:after,.hero:before{content:"";position:absolute}.hero:after{inset:0;border-radius:calc(var(--radius) + 12px);padding:1px;background:linear-gradient(135deg,color-mix(in oklab,var(--accent),#fff 10%),color-mix(in oklab,var(--accent-2),#fff 10%));-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}.hero-inner{display:grid;grid-template-columns:1.2fr .8fr;grid-gap:32px;gap:32px;align-items:center}.hero-inner>*{min-width:0}@media (max-width:860px){.hero-inner{grid-template-columns:1fr}.card{padding:20px}.section-title{font-size:clamp(22px,6vw,36px)}}@media (max-width:640px){.nav-inner{gap:12px;padding-block:8px}.brand{font-size:16px}.nav-links{gap:12px;flex-wrap:wrap}header.nav .btn{padding:8px 12px;font-size:13px}.nav-links a{font-size:15px;font-weight:700}}@media (max-width:860px){.hero{padding:18px}.hero-inner{gap:18px}.avatar{margin-inline:auto}}@media (max-width:560px){.container{width:min(1140px,100% - 28px)}.section{padding-block:56px}.page-home:after{background-image:radial-gradient(hsla(0,0%,100%,.04) 1px,transparent 0)}.grid{grid-template-columns:1fr}.card{padding:16px}.badge{font-size:12px}.chip{font-size:13px;padding:8px 12px}.gallery-item img{height:160px}}.avatar{width:var(--avatar-size);aspect-ratio:var(--avatar-ratio);height:auto;border-radius:24px;overflow:hidden;position:relative;border:2px solid color-mix(in oklab,var(--accent),#fff 30%);box-shadow:0 18px 50px rgba(140,29,64,.18)}.avatar:after{content:"";position:absolute;inset:-2px;border-radius:26px;background:linear-gradient(135deg,transparent 40%,hsla(0,0%,100%,.12) 60%);pointer-events:none}.avatar img{width:100%;height:100%;object-fit:cover}.avatar.ratio-1-1{--avatar-ratio:1/1}.avatar.ratio-4-5{--avatar-ratio:4/5}.avatar.ratio-3-4{--avatar-ratio:3/4}.avatar.ratio-2-3{--avatar-ratio:2/3}.avatar.ratio-16-9{--avatar-ratio:16/9}.avatar.ratio-3-2{--avatar-ratio:3/2}.avatar.ratio-1-1,.avatar.ratio-1-1:after{border-radius:50%}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.tab{border:1px solid var(--border);border-radius:999px;padding:8px 14px;color:var(--muted);cursor:pointer;background:linear-gradient(180deg,color-mix(in oklab,var(--panel),#fff 4%),color-mix(in oklab,var(--panel),#000 4%));transition:transform .1s ease,border-color .2s,color .2s,box-shadow .2s,background .2s}.tab:hover{transform:translateY(-1px)}.tab.active{background:transparent;color:var(--accent);border-color:color-mix(in oklab,var(--accent),#fff 20%);box-shadow:inset 0 -2px 0 var(--accent)}.chips{display:flex;gap:10px;flex-wrap:wrap}.chip{display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border-radius:999px;font-weight:600;font-size:14px;background:color-mix(in oklab,var(--panel),#fff 4%);color:var(--text);border:1px solid var(--border);transition:transform .12s ease,border-color .2s ease,background .2s ease}.chip:hover{transform:translateY(-2px);border-color:color-mix(in oklab,var(--accent),var(--border) 45%)}.chip[data-group=languages]{background:rgba(244,63,94,.1);border-color:rgba(244,63,94,.35);color:#fca5a5}.chip[data-group=web]{background:rgba(59,130,246,.1);border-color:rgba(147,197,253,.35);color:#93c5fd}.chip[data-group=ml]{background:rgba(16,185,129,.1);border-color:rgba(110,231,183,.35);color:#6ee7b7}.chip[data-group=data]{background:rgba(245,158,11,.1);border-color:hsla(48,97%,77%,.35);color:#fde68a}.gallery-grid{display:grid;grid-gap:12px;gap:12px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.gallery-item{position:relative;border-radius:16px;overflow:hidden;border:1px solid var(--border);background:var(--panel);cursor:zoom-in;transition:transform .2s,box-shadow .2s}.gallery-item:hover{transform:translateY(-3px);box-shadow:0 16px 40px rgba(2,6,23,.1)}.gallery-item img{width:100%;height:200px;object-fit:cover}.lightbox{position:fixed;inset:0;background:rgba(2,6,23,.75);display:none;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.lightbox.open{display:flex}.lightbox-inner{position:relative;width:min(92vw,1100px)}.lightbox img{width:100%;height:auto;border-radius:18px;border:1px solid var(--border)}.lightbox .close,.lightbox .next,.lightbox .prev{position:absolute;top:50%;transform:translateY(-50%);background:var(--panel);border:1px solid var(--border);border-radius:999px;padding:10px 14px;cursor:pointer;text-decoration:none;box-shadow:var(--shadow)}.lightbox .close{top:-18px;right:-18px;transform:none}.lightbox .prev{left:-18px}.lightbox .next{right:-18px}@keyframes heroPan{0%{background-position:50% 40%}to{background-position:48% 44%}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.page-projects .projects-grid{gap:40px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.card.project-card{position:relative;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);box-shadow:0 8px 24px rgba(2,6,23,.12);transition:transform .18s ease,box-shadow .25s ease,border-color .2s ease}.card.project-card:before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2));opacity:.45}.card.project-card:hover{transform:translateY(-3px);box-shadow:0 16px 40px rgba(2,6,23,.16);border-color:color-mix(in oklab,var(--border),var(--accent) 22%)}.page-projects .project-card h3{margin-bottom:15px}.page-projects .project-card p{margin-top:5px}.section.page-projects{padding-top:0}@media (max-width:640px){.section.page-projects{padding-top:10px}}@media (max-width:560px){.page-projects .projects-grid{gap:18px}}.project-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.project-tag{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;font-weight:700;font-size:12px;letter-spacing:.02em;border:1px solid var(--border);background:color-mix(in oklab,var(--panel),#fff 4%)}.project-tag.tag-ml{color:#6ee7b7;border-color:rgba(110,231,183,.35);background:rgba(16,185,129,.1)}.project-tag.tag-cv{color:#93c5fd;border-color:rgba(147,197,253,.35);background:rgba(59,130,246,.1)}.project-tag.tag-web{color:#fca5a5;border-color:rgba(244,63,94,.35);background:rgba(244,63,94,.1)}.project-tag.tag-api{color:#fde68a;border-color:hsla(48,97%,77%,.35);background:rgba(245,158,11,.1)}footer{border-top:1px solid var(--border);padding-block:28px;color:var(--muted)}.page-experience .exp-grid{gap:50px;grid-template-columns:repeat(auto-fit,minmax(380px,1fr))}@media (min-width:1200px){.page-experience .exp-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:560px){.page-experience .exp-grid{gap:18px}}.page-experience .card{position:relative;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);box-shadow:0 8px 24px rgba(2,6,23,.12);transition:transform .18s ease,box-shadow .25s ease,border-color .2s ease;padding:40px}.page-experience .card:before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2));opacity:.45}.page-experience .card:hover{transform:translateY(-3px);box-shadow:0 16px 40px rgba(2,6,23,.16);border-color:color-mix(in oklab,var(--border),var(--accent) 22%)}.section.page-experience{padding-top:10px}@media (max-width:640px){.section.page-experience{padding-top:32px}}.page-experience .exp-grid>* h3,.page-experience .section-title{margin-bottom:10px}.page-experience .exp-grid>* .role,.page-experience .exp-grid>* h4{margin-top:0;margin-bottom:10px;font-weight:700;color:var(--muted)}.page-experience .exp-grid>* p{margin-top:8px}.page-experience .exp-grid>* ul{margin-top:12px}.page-experience .exp-grid>* li+li{margin-top:6px}.page-reveal{opacity:0;transform:translateY(12px);animation:revealUp .7s cubic-bezier(.22,.61,.36,1) forwards}.fade-out{opacity:1;animation:fadeOut .35s ease-out forwards}@keyframes fadeOut{to{opacity:0}}.reveal.delay-4{animation-delay:.32s}.reveal.delay-5{animation-delay:.4s}.reveal.delay-6{animation-delay:.48s}.stagger>*{opacity:0;transform:translateY(10px);animation:revealUp .7s cubic-bezier(.22,.61,.36,1) forwards}.stagger>:first-child{animation-delay:.12s}.stagger>:nth-child(2){animation-delay:.24s}.stagger>:nth-child(3){animation-delay:.36s}.stagger>:nth-child(4){animation-delay:.48s}.stagger>:nth-child(5){animation-delay:.6s}.stagger>:nth-child(6){animation-delay:.72s}