Index · CSS *,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#111;--bg-secondary:#1c1c1e;--text-primary:#f0f0f0;--text-secondary:#888;--border:#ffffff1a;--border-md:#ffffff38;--radius-md:8px;--radius-lg:12px;--font:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--glow-a:#6366f12e;--glow-b:#8b5cf624;--glow-c:#ec48991f}[data-theme=light]{--bg:#fff;--bg-secondary:#f6f6f7;--text-primary:#111;--text-secondary:#6b6b6b;--border:#0000001a;--border-md:#0003}.theme-switch{cursor:pointer;flex-shrink:0;align-items:center;margin-left:1rem;display:inline-flex}.theme-switch input{opacity:0;width:0;height:0;position:absolute}.theme-switch-track{border:.5px solid var(--border-md);background:#111;border-radius:20px;width:52px;height:28px;transition:background .2s;position:relative}.theme-switch-thumb{background:#fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:12px;transition:transform .2s;display:flex;position:absolute;top:2px;left:2px}.icon-sun{display:none}.icon-moon{display:block}.theme-switch input:checked~.theme-switch-track .theme-switch-thumb{transform:translate(24px)}.theme-switch input:checked~.theme-switch-track .icon-moon{display:none}.theme-switch input:checked~.theme-switch-track .icon-sun{display:block}html{scroll-behavior:smooth}body{font-family:var(--font);background:var(--bg);color:var(--text-primary);line-height:1.6}.portfolio{max-width:860px;margin:0 auto;padding:2rem 1.5rem 5rem}.lang-toggle{border:.5px solid var(--border-md);border-radius:var(--radius-md);cursor:pointer;color:var(--text-primary);font-size:12px;font-weight:500;font-family:var(--font);background:0 0;margin-left:.75rem;padding:4px 10px}.lang-toggle:hover{background:var(--bg-secondary)}.logo,a.logo{color:var(--text-primary);letter-spacing:-.3px;font-size:15px;font-weight:500;text-decoration:none}.logo span{color:var(--text-secondary);font-weight:400}.site-header{border-bottom:.5px solid var(--border);margin-bottom:4rem;padding-bottom:1.5rem}.nav-row{justify-content:space-between;align-items:center;display:flex}.nav-row__right{align-items:center;gap:.75rem;display:flex}.nav-close-btn{border:.5px solid var(--border-md);border-radius:var(--radius-md);cursor:pointer;color:var(--text-primary);font-family:var(--font);background:0 0;align-items:center;gap:8px;padding:6px 12px;display:flex}.menu-button-text{height:16px;position:relative;overflow:hidden}.menu-button-text p{height:16px;margin:0;font-size:13px;line-height:16px}.icon-wrap{justify-content:center;align-items:center;width:14px;height:14px;display:flex}.fullscreen-menu-container{position:relative}.nav-overlay-wrapper{z-index:100;display:none;position:fixed;inset:0}.overlay{opacity:0;pointer-events:none;background:#0006;transition:opacity .4s;position:absolute;inset:0}.nav-overlay-wrapper[data-nav=open] .overlay{opacity:1;pointer-events:auto}.menu-content{background:var(--bg);box-sizing:border-box;align-items:center;width:min(480px,100vw);max-width:100vw;height:100%;transition:transform .5s cubic-bezier(.65,.05,0,1);display:flex;position:absolute;top:0;right:0;overflow:hidden;transform:translate(100%)}.nav-overlay-wrapper[data-nav=open] .menu-content{transform:translate(0)}.menu-bg{position:absolute;inset:0}.backdrop-layer{background:var(--bg-secondary);position:absolute;inset:0}.backdrop-layer.first{opacity:.6}.backdrop-layer.second{opacity:.8}.ambient-background-shapes{position:absolute;inset:0}.bg-shape{opacity:0;width:100%;height:100%;position:absolute;inset:0}.bg-shape.active{opacity:1}.menu-content-wrapper{z-index:2;box-sizing:border-box;width:100%;padding:0 3rem;position:relative}.menu-list{flex-direction:column;gap:.5rem;width:100%;margin:0;padding:0;list-style:none;display:flex}.menu-list-item{width:100%;overflow:hidden}.nav-link{width:100%;padding:.5rem 0;text-decoration:none;display:block}.nav-link-text{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:clamp(1.25rem,3vw,2.2rem);font-weight:500;transition:color .2s;overflow:hidden}.nav-link:hover .nav-link-text{color:var(--text-secondary)}.hero{margin-bottom:5rem}.hero-tag{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);border:.5px solid var(--border-md);border-radius:20px;margin-bottom:1.5rem;padding:4px 12px;font-size:11px;font-weight:500;display:inline-block}.hero-title{letter-spacing:-1.5px;color:var(--text-primary);max-width:600px;margin-bottom:1.25rem;font-size:clamp(2rem,5vw,3.2rem);font-weight:500;line-height:1.15}.hero-title em{color:var(--text-secondary);font-style:normal}.hero p{color:var(--text-secondary);max-width:480px;margin-bottom:2rem;font-size:15px;line-height:1.7}.split-word{display:inline-block}.hero-cta{flex-wrap:wrap;gap:.75rem;display:flex}.btn-primary{border-radius:var(--radius-md);border:.5px solid var(--border-md);background:var(--text-primary);color:var(--bg);cursor:pointer;padding:10px 20px;font-size:13px;font-weight:500;text-decoration:none;transition:opacity .15s;display:inline-block}.btn-primary:hover{opacity:.75}.btn-secondary{border-radius:var(--radius-md);border:.5px solid var(--border-md);color:var(--text-primary);cursor:pointer;background:0 0;padding:10px 20px;font-size:13px;font-weight:400;text-decoration:none;transition:background .15s;display:inline-block}.btn-secondary:hover{background:var(--bg-secondary)}section{margin-bottom:4.5rem}.section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);border-bottom:.5px solid var(--border);margin-bottom:1.75rem;padding-bottom:.75rem;font-size:11px;font-weight:500}.about-grid{grid-template-columns:1fr 1fr;align-items:start;gap:2rem;display:grid}.about-text{color:var(--text-secondary);font-size:15px;line-height:1.75}.about-stats{flex-direction:column;gap:.75rem;display:flex}.stat-item{background:var(--bg-secondary);border-radius:var(--radius-md);padding:1rem 1.25rem}.stat-num{color:var(--text-primary);font-size:22px;font-weight:500}.stat-desc{color:var(--text-secondary);margin-top:2px;font-size:12px}.projects-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;display:grid}.project-card{background:var(--bg);border:.5px solid var(--border);border-radius:var(--radius-lg);padding:1.25rem;text-decoration:none;transition:border-color .2s;display:block}.project-card:hover{border-color:var(--border-md)}.project-icon{border-radius:var(--radius-md);background:var(--bg-secondary);justify-content:center;align-items:center;width:36px;height:36px;margin-bottom:1rem;font-size:16px;display:flex}.project-title{color:var(--text-primary);margin-bottom:6px;font-size:14px;font-weight:500}.project-desc{color:var(--text-secondary);margin-bottom:1rem;font-size:12px;line-height:1.6}.project-tags{flex-wrap:wrap;gap:6px;display:flex}.tag{background:var(--bg-secondary);color:var(--text-secondary);border:.5px solid var(--border);border-radius:20px;padding:3px 9px;font-size:11px}.skills-grid{grid-template-columns:repeat(3,1fr);gap:.75rem;display:grid}.skill-group{background:var(--bg-secondary);border-radius:var(--radius-md);flex-direction:column;padding:1rem 1.25rem;display:flex}.skill-group-title{color:var(--text-primary);margin-bottom:.6rem;font-size:12px;font-weight:500}.skill-tags{flex-wrap:wrap;gap:6px;display:flex}.contact-box{background:var(--bg-secondary);border-radius:var(--radius-lg);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1.5rem;padding:2rem;display:flex}.contact-text h3{color:var(--text-primary);margin-bottom:6px;font-size:18px;font-weight:500}.contact-text p{color:var(--text-secondary);font-size:13px}.contact-links{flex-wrap:wrap;gap:.75rem;display:flex}.carousel-track{scroll-snap-type:x mandatory;scrollbar-width:none;gap:1rem;padding:4px;display:flex;overflow-x:auto}.carousel-track::-webkit-scrollbar{display:none}.carousel-item{scroll-snap-align:start;flex:0 0 260px}.carousel-dots{justify-content:center;gap:8px;margin-top:1rem;display:flex}.carousel-dot{background:var(--border-md);cursor:pointer;border:none;border-radius:50%;width:8px;height:8px;padding:0;transition:background .2s,transform .2s}.carousel-dot.active{background:var(--text-primary);transform:scale(1.3)}.blog-list{flex-direction:column;gap:1rem;display:flex}.back-link{margin-bottom:2rem}.back-link a{color:var(--text-secondary);font-size:13px;text-decoration:none;transition:color .15s}.back-link a:hover{color:var(--text-primary)}.article-content{max-width:680px;margin:0 auto}.article-title{margin:1rem 0 2rem;font-size:clamp(1.75rem,4vw,2.5rem)}.article-body{color:var(--text-secondary);font-size:15px;line-height:1.8}.article-body h2{color:var(--text-primary);border-bottom:.5px solid var(--border);margin:2.5rem 0 1rem;padding-bottom:.5rem;font-size:1.3rem;font-weight:500}.article-body h2:first-child{margin-top:0}.article-body h3{color:var(--text-primary);margin:1.5rem 0 .75rem;font-size:1.05rem;font-weight:500}.article-body p{margin-bottom:1.25rem}.article-body strong{color:var(--text-primary);font-weight:600}.article-body ul,.article-body ol{margin:0 0 1.25rem 1.25rem;padding:0}.article-body li{margin-bottom:.5rem;padding-left:.25rem}.article-body li::marker{color:var(--text-secondary)}.article-body code{background:var(--bg-secondary);color:var(--text-primary);border-radius:4px;padding:2px 6px;font-size:13px}.article-body pre{background:var(--bg-secondary);border-radius:var(--radius-md);margin-bottom:1.25rem;padding:1rem;overflow-x:auto}.article-body pre code{background:0 0;padding:0}.article-body a{color:var(--text-primary);text-decoration:underline}.lock-screen{text-align:center;max-width:400px;margin:4rem auto}.lock-form{gap:.5rem;margin-top:1.5rem;display:flex}.lock-form input{font-family:var(--font);border:.5px solid var(--border-md);border-radius:var(--radius-md);background:var(--bg);color:var(--text-primary);flex:1;padding:10px 14px;font-size:14px}.admin-form{flex-direction:column;gap:1rem;max-width:600px;margin-top:1.5rem;display:flex}.admin-form input,.admin-form textarea{box-sizing:border-box;width:100%;font-family:var(--font);border:.5px solid var(--border-md);border-radius:var(--radius-md);background:var(--bg);color:var(--text-primary);padding:10px 14px;font-size:14px}.feedback-text{color:var(--text-secondary);margin-top:1rem;font-size:13px}.admin-article-row{margin-bottom:.75rem}.glow-card{position:relative;overflow:hidden}.glow-card:before{content:"";border-radius:inherit;background:radial-gradient(200px circle at var(--glow-x,50%) var(--glow-y,50%), hsl(var(--glow-hue,220) 80% 60% / .15), transparent 70%);opacity:0;pointer-events:none;transition:opacity .3s;position:absolute;inset:0}.glow-card:hover:before{opacity:1}.glow-card:after{content:"";border-radius:inherit;background:radial-gradient(150px circle at var(--glow-x,50%) var(--glow-y,50%), hsl(var(--glow-hue,220) 80% 60% / .5), transparent 70%);-webkit-mask-composite:xor;opacity:0;pointer-events:none;padding:1px;transition:opacity .3s;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-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}.glow-card:hover:after{opacity:1}@media (hover:none) and (pointer:coarse){.glow-card:before{background:radial-gradient(circle at 50% 50%, hsl(var(--glow-hue,220) 80% 60% / .1), transparent 70%);opacity:0}.glow-card:active:before{opacity:1}.glow-card:after{display:none}}@media (width<=600px){.about-grid,.skills-grid,.projects-grid{grid-template-columns:1fr}.contact-box{flex-direction:column;align-items:flex-start}.site-header{margin-bottom:2.5rem;padding-bottom:1rem}.nav-row__right{gap:.5rem}.nav-close-btn{padding:6px 10px}.menu-button-text p{font-size:12px}.menu-content{width:100%}.menu-content-wrapper{max-height:100vh;padding:0 1.5rem;overflow-y:auto}.menu-list{gap:.25rem;padding:5rem 0 2rem}.nav-link-text{font-size:clamp(1.25rem,8vw,2rem)}.nav-link{padding:.65rem 0}}
