.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg);padding:1.5rem}.login-card{width:100%;max-width:360px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:2rem}.login-title{font-size:1.5rem;font-weight:700;margin-bottom:.25rem}.login-subtitle{color:var(--text-muted);font-size:.9375rem;margin-bottom:1.5rem}.login-form{display:flex;flex-direction:column;gap:1rem}.login-label{font-size:.875rem;font-weight:500;color:var(--text-muted)}.login-input{width:100%;padding:.75rem 1rem;font-size:1rem;font-family:inherit;color:var(--text);background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);outline:none;transition:border-color .2s}.login-input:focus{border-color:var(--accent)}.login-error{font-size:.875rem;color:#f87171}.login-btn{padding:.75rem 1.5rem;font-size:1rem;font-weight:600;color:#fff;background:var(--accent);border:none;border-radius:var(--radius);cursor:pointer;transition:background .2s}.login-btn:hover{background:var(--accent-hover)}.admin-page{min-height:100vh;background:var(--bg);padding-bottom:3rem}.admin-header{position:sticky;top:0;z-index:50;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.5rem;background:var(--bg-elevated);border-bottom:1px solid var(--border)}.admin-header__title{font-size:1.25rem;font-weight:700}.admin-header__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}.admin-save-error{color:var(--danger, #dc2626);font-size:.875rem}.admin-content{max-width:720px;margin:0 auto;padding:1.5rem}.admin-section{margin-bottom:.5rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.admin-section__head{width:100%;padding:1rem 1.25rem;font-size:1rem;font-weight:600;text-align:left;color:var(--text);background:transparent;border:none;cursor:pointer;transition:background .2s}.admin-section__head:hover{background:var(--bg-elevated)}.admin-section__body{padding:0 1.25rem 1.25rem;display:none}.admin-section--open .admin-section__body{display:block}.admin-field,.admin-block{margin-bottom:1rem}.admin-field label,.admin-label{display:block;font-size:.875rem;font-weight:500;color:var(--text-muted);margin-bottom:.35rem}.admin-field input,.admin-field textarea,.admin-full{width:100%;padding:.5rem .75rem;font-size:.9375rem;font-family:inherit;color:var(--text);background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);outline:none;transition:border-color .2s}.admin-field textarea,.admin-full{resize:vertical;min-height:2.5rem}.admin-field input:focus,.admin-field textarea:focus{border-color:var(--accent)}.admin-row{display:flex;gap:.5rem;margin-bottom:.5rem}.admin-row input{flex:1;padding:.5rem .75rem;font-size:.9375rem;font-family:inherit;color:var(--text);background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);outline:none}.admin-block{padding:1rem;background:var(--bg-elevated);border-radius:var(--radius);margin-bottom:1rem}.admin-btn{display:inline-flex;align-items:center;padding:.5rem 1rem;font-size:.875rem;font-weight:600;font-family:inherit;border-radius:var(--radius);border:none;cursor:pointer;transition:background .2s,color .2s}.admin-btn:disabled{opacity:.7;cursor:not-allowed}.admin-btn--primary{background:var(--accent);color:#fff}.admin-btn--primary:hover:not(:disabled){background:var(--accent-hover)}.admin-btn--secondary{background:var(--accent-muted);color:var(--text)}.admin-btn--secondary:hover{background:#6366f140}.admin-btn--ghost{background:transparent;color:var(--text-muted);text-decoration:none}.admin-btn--ghost:hover{color:var(--text)}.admin-btn--danger{background:#ef444426;color:#f87171;margin-top:.5rem}.admin-btn--danger:hover{background:#ef444440}.admin-footer{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--border)}:root{--bg: #0a0a0f;--bg-elevated: #12121a;--bg-card: #16161f;--text: #f4f4f5;--text-muted: #a1a1aa;--accent: #6366f1;--accent-hover: #818cf8;--accent-muted: rgba(99, 102, 241, .15);--border: rgba(255, 255, 255, .06);--font-sans: "Outfit", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--radius: 12px;--radius-lg: 20px;--transition: .2s ease}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}a{color:inherit;text-decoration:none}ul{list-style:none}.container{width:100%;max-width:1100px;margin:0 auto;padding:0 1.5rem}.section{padding:5rem 0}.section-title{font-size:clamp(1.75rem,4vw,2.25rem);font-weight:600;margin-bottom:.5rem;letter-spacing:-.02em}.section-subtitle{color:var(--text-muted);font-size:1rem;margin-bottom:2.5rem}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes gradient{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}.animate-fade-up{animation:fadeUp .6s ease forwards}.scroll-reveal{opacity:0;transform:translateY(28px);transition:opacity .6s ease,transform .6s ease}.scroll-reveal--visible{opacity:1;transform:translateY(0)}.header{position:fixed;top:0;left:0;right:0;z-index:100;padding:1.25rem 0;transition:background var(--transition),box-shadow var(--transition)}.header--scrolled{background:#0a0a0fd9;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 1px 0 var(--border)}.header__inner{display:flex;align-items:center;justify-content:center;gap:2rem}.header__logo{font-size:1.5rem;font-weight:700;letter-spacing:-.03em}.header__logo-accent{color:var(--accent)}.header__nav{display:flex;gap:2rem}.header__link{font-size:.9375rem;font-weight:500;color:var(--text-muted);transition:color var(--transition)}.header__link:hover{color:var(--text)}.header__menu{display:none;flex-direction:column;gap:6px;background:none;border:none;cursor:pointer;padding:8px}.header__menu-bar{width:22px;height:2px;background:var(--text);border-radius:2px;transition:transform var(--transition),opacity var(--transition)}.header__menu-bar--open:nth-child(1){transform:translateY(8px) rotate(45deg)}.header__menu-bar--open:nth-child(2){opacity:0}.header__menu-bar--open:nth-child(3){transform:translateY(-8px) rotate(-45deg)}@media (max-width: 768px){.header__inner{justify-content:flex-end}.header__nav{position:fixed;top:0;right:0;bottom:0;width:280px;background:var(--bg-elevated);flex-direction:column;padding:5rem 2rem 2rem;gap:1.5rem;box-shadow:-4px 0 24px #0000004d;transform:translate(100%);transition:transform var(--transition)}.header__nav--open{transform:translate(0)}.header__link{font-size:1.125rem}.header__menu{display:flex}}.hero{min-height:100vh;display:flex;align-items:center;position:relative;padding:6rem 0 4rem}.hero .container{max-width:1400px}.hero__inner{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:3rem;width:100%}.hero__content{flex:1;min-width:0;text-align:left}.hero__portrait{flex-shrink:0;margin-left:auto;display:flex;align-items:center;justify-content:flex-end;position:relative;border-radius:var(--radius-lg);overflow:hidden}.hero__portrait:after{content:"";position:absolute;bottom:0;left:0;right:0;height:38%;background:linear-gradient(to top,var(--bg) 0%,transparent 100%);pointer-events:none;border-radius:0 0 var(--radius-lg) var(--radius-lg)}.hero__portrait-img{width:auto;height:clamp(380px,70vh,640px);max-height:90vh;object-fit:contain;object-position:right center;border-radius:var(--radius-lg);opacity:0;animation:fadeUp .8s ease .2s forwards;display:block}@media (max-width: 900px){.hero__inner{flex-direction:column;text-align:center}.hero__content{align-self:center}.hero__bio{margin-left:auto;margin-right:auto}.hero__cta{justify-content:center}.hero__portrait{order:-1;margin-left:0;justify-content:center;align-self:center}.hero__portrait-img{height:clamp(280px,50vh,420px);object-position:center center}}.hero__greeting{font-size:1rem;color:var(--accent);font-weight:500;margin-bottom:.5rem;opacity:0}.hero__name{font-size:clamp(3rem,10vw,4.5rem);font-weight:700;letter-spacing:-.04em;line-height:1.1;margin-bottom:.5rem;background:linear-gradient(135deg,#fff,#a1a1aa);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;opacity:0}.hero__tagline{font-size:clamp(1.25rem,3vw,1.5rem);color:var(--text-muted);margin-bottom:1.25rem;opacity:0}.hero__bio{max-width:520px;color:var(--text-muted);font-size:1.0625rem;margin-bottom:2rem;opacity:0}.hero__cta{display:flex;flex-wrap:wrap;gap:1rem;opacity:0}.btn{display:inline-flex;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:600;border-radius:var(--radius);transition:background var(--transition),color var(--transition),transform var(--transition)}.btn--primary{background:var(--accent);color:#fff}.btn--primary:hover{background:var(--accent-hover);transform:translateY(-1px)}.btn--secondary{background:var(--accent-muted);color:var(--text);border:1px solid var(--border)}.btn--secondary:hover{background:#6366f140}.btn--large{padding:1rem 1.75rem;font-size:1rem}.hero__gradient{position:absolute;top:-20%;right:-10%;width:60%;height:80%;background:radial-gradient(ellipse,rgba(99,102,241,.12) 0%,transparent 70%);pointer-events:none}.about__grid{display:grid;gap:2.5rem}.about__text{color:var(--text-muted);margin-bottom:1rem;max-width:560px}.about__links{display:flex;flex-wrap:wrap;gap:1rem;margin-top:1.5rem}.about__link{font-size:.9375rem;font-weight:500;color:var(--accent);transition:color var(--transition)}.about__link:hover{color:var(--accent-hover)}.about__meta{display:flex;flex-wrap:wrap;gap:2rem}.about__meta-item{display:flex;flex-direction:column;gap:.25rem}.about__meta-label{font-size:.8125rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.about__meta-value{font-weight:500;color:var(--text)}.about__meta-value:hover{color:var(--accent)}@media (min-width: 768px){.about__grid{grid-template-columns:1fr auto;align-items:start}}.section--alt{background:var(--bg-elevated)}.exp-timeline{position:relative;padding-left:2.5rem}.exp-timeline__line{position:absolute;left:6px;top:.5rem;bottom:.5rem;width:2px;background:var(--border);border-radius:2px;overflow:hidden}.exp-timeline__line:before{content:"";position:absolute;left:0;top:0;width:100%;height:var(--line-fill, 0);background:var(--accent);border-radius:2px;transition:height 1.5s ease-out}.exp-company{position:relative;margin-bottom:2.5rem}.exp-company:last-child{margin-bottom:0}.exp-company__card{position:relative;padding-left:1.25rem;margin-bottom:1rem;opacity:0;transform:translate(-12px);transition:opacity .5s ease,transform .5s ease;transition-delay:calc(.06s * var(--i, 0))}.exp-node--reached.exp-company__card{opacity:1;transform:translate(0)}.exp-timeline__dot--company{position:absolute;left:calc(-2.5rem + 7px);top:.4rem;width:12px;height:12px;margin-left:-6px;background:var(--border);border:2px solid var(--bg-elevated);border-radius:50%;box-shadow:0 0 0 2px var(--border);transform:scale(.6);opacity:.6;transition:background .4s ease,box-shadow .4s ease,transform .4s ease,opacity .4s ease}.exp-node--reached .exp-timeline__dot--company{background:var(--accent);box-shadow:0 0 0 2px var(--accent-muted);transform:scale(1);opacity:1;animation:exp-dot-pulse 2.5s ease-in-out .5s infinite}@keyframes exp-dot-pulse{0%,to{box-shadow:0 0 0 2px var(--accent-muted);transform:scale(1)}50%{box-shadow:0 0 0 6px #6366f133;transform:scale(1.05)}}.exp-company__name{font-size:.9375rem;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.06em}.exp-role{position:relative;padding-left:1.25rem;margin-bottom:1.5rem;opacity:0;transform:translate(-12px);transition:opacity .5s ease,transform .5s ease;transition-delay:calc(.08s * var(--i, 0))}.exp-role:last-child{margin-bottom:0}.exp-node--reached.exp-role{opacity:1;transform:translate(0)}.exp-timeline__connector{position:absolute;left:calc(-2.5rem + 7px);top:.75rem;width:calc(3.75rem - 6px);height:2px;background:var(--border);border-radius:0 2px 2px 0;pointer-events:none;overflow:hidden}.exp-timeline__connector:before{content:"";position:absolute;left:0;top:0;right:0;height:100%;background:var(--accent);border-radius:0 2px 2px 0;transform-origin:left;transform:scaleX(0);transition:transform .7s ease-out;transition-delay:calc(.1s * var(--i, 0))}.exp-role--connector-reached .exp-timeline__connector:before{transform:scaleX(1)}.exp-role__card{background:var(--bg-card);border:1px solid rgba(99,102,241,.4);border-radius:var(--radius-lg);padding:1.5rem 1.75rem;transition:transform var(--transition)}.exp-role__card:hover{transform:translateY(-2px)}.exp-role__header{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:.5rem;margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.exp-role__title{font-size:1.125rem;font-weight:600;margin:0}.exp-role__period{font-size:.875rem;color:var(--text-muted);font-family:var(--font-mono)}.exp-role__projects{display:flex;flex-direction:column;gap:1.25rem}.exp-project{padding-bottom:1rem}.exp-project:last-child{padding-bottom:0}.exp-project+.exp-project{padding-top:1rem;border-top:1px solid var(--border)}.exp-project__title{font-size:.9375rem;font-weight:600;color:var(--text);margin-bottom:.5rem}.exp-project__bullets{margin:0 0 .5rem;padding-left:1.25rem}.exp-project__bullet{color:var(--text-muted);font-size:.9375rem;line-height:1.65;margin-bottom:.35rem}.exp-project__tech{font-size:.8125rem;color:var(--text-muted);font-family:var(--font-mono);margin:0}.exp-project__tech-label{color:var(--accent);font-weight:500}@media (min-width: 640px){.exp-timeline{padding-left:2.5rem}.exp-timeline__line{left:6px}}.skills-list{display:flex;flex-wrap:wrap;gap:.75rem}.skills-item{padding:.5rem 1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);font-size:.9375rem;font-weight:500;color:var(--text-muted);transition:border-color var(--transition),color var(--transition)}.skills-item:hover{border-color:var(--accent-muted);color:var(--text)}.projects-grid{display:grid;gap:1.5rem}.project-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem 1.75rem;transition:border-color var(--transition)}.project-card:hover{border-color:#6366f14d}.project-card__title{font-size:1.125rem;font-weight:600;margin-bottom:.5rem}.project-card__desc{color:var(--text-muted);font-size:.9375rem;margin-bottom:1rem;line-height:1.6}.project-card__tech{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem}.project-card__tag{font-size:.8125rem;font-family:var(--font-mono);color:var(--accent);background:var(--accent-muted);padding:.25rem .5rem;border-radius:6px}.project-card__links{display:flex;gap:1rem}.project-card__link{font-size:.875rem;font-weight:500;color:var(--accent);transition:color var(--transition)}.project-card__link:hover{color:var(--accent-hover)}@media (min-width: 768px){.projects-grid{grid-template-columns:repeat(2,1fr)}}.edu-list{display:flex;flex-direction:column;gap:1.5rem}.edu-item{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem 1.75rem}.edu-item__degree{font-size:1.125rem;font-weight:600;margin-bottom:.25rem}.edu-item__institution{color:var(--accent);font-size:.9375rem;margin-bottom:.25rem}.edu-item__period{font-size:.875rem;color:var(--text-muted);font-family:var(--font-mono)}.cert-list{display:flex;flex-wrap:wrap;gap:.75rem}.cert-item{display:flex;flex-direction:column;gap:.15rem;padding:.75rem 1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);font-size:.9375rem;transition:border-color var(--transition)}.cert-item:hover{border-color:#6366f14d}.cert-item__name{font-weight:600;color:var(--text)}.cert-item__issuer{color:var(--text-muted);font-size:.8125rem}.contact{text-align:center}.contact__inner{max-width:560px;margin-left:auto;margin-right:auto}.contact .section-subtitle{margin-bottom:2rem}.contact__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:1rem;margin-bottom:2rem}.contact__social{display:flex;justify-content:center;gap:1.5rem}.contact__social-link{font-size:.9375rem;color:var(--text-muted);transition:color var(--transition)}.contact__social-link:hover{color:var(--accent)}
