/* style.css - theme variables, layout, components */
:root{--bg:#1e1e1e;--bg2:#252526;--bg3:#2d2d30;--line:#3c3c3c;--text:#d4d4d4;--dim:#8b8b8b;--a1:#569cd6;--a2:#ce9178;--a3:#4ec9b0;--a4:#dcdcaa;--cm:#6a9955;--shadow:rgba(0,0,0,.45)}
[data-theme=light]{--bg:#ffffff;--bg2:#f3f3f3;--bg3:#e8e8e8;--line:#d0d0d0;--text:#1f1f1f;--dim:#666;--a1:#0451a5;--a2:#a31515;--a3:#267f99;--a4:#795e26;--cm:#008000;--shadow:rgba(0,0,0,.15)}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{background:var(--bg);color:var(--text);font-family:'IBM Plex Sans',system-ui,sans-serif;line-height:1.65;overflow-x:hidden;transition:background .4s,color .4s;cursor:none}
@media(hover:none){body{cursor:auto}.cur{display:none}}
a,button,input,textarea{cursor:none}
@media(hover:none){a,button,input,textarea{cursor:auto}}
.mono,h1,h2,h3,nav,.btn{font-family:'JetBrains Mono',monospace}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--a1);outline-offset:3px}
#bg{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:.75}
main,footer{position:relative;z-index:1}
.bar{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,var(--a1),var(--a3),var(--a4));z-index:100}
.cur{position:fixed;width:34px;height:34px;border:1.5px solid var(--a3);border-radius:50%;pointer-events:none;z-index:99;transform:translate(-50%,-50%);transition:width .2s,height .2s,background .2s}
.cur.big{width:60px;height:60px;background:color-mix(in srgb,var(--a3) 15%,transparent)}
.cur i{position:absolute;left:50%;top:50%;width:5px;height:5px;margin:-2.5px;background:var(--a3);border-radius:50%}
#boot{position:fixed;inset:0;background:#0c0c0c;color:#8ae234;z-index:200;padding:8vh 6vw;font:14px/1.7 'JetBrains Mono',monospace;transition:opacity .6s,visibility .6s;overflow:hidden}
#boot.off{opacity:0;visibility:hidden}
#boot b{color:#729fcf;font-weight:400}
nav{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;align-items:stretch;background:var(--bg2);border-bottom:1px solid var(--line);font-size:.85rem;overflow-x:auto;scrollbar-width:none;transition:background .4s}
nav .logo{padding:12px 20px;color:var(--a3);font-weight:700;white-space:nowrap}
nav a.t{padding:12px 18px;border-right:1px solid var(--line);color:var(--dim);white-space:nowrap;position:relative;transition:.2s}
nav a.t:hover,nav a.t.on{background:var(--bg);color:var(--text)}
nav a.t.on::after{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:var(--a1)}
nav a.t::before{content:"\25CF ";color:var(--a4);font-size:.6rem;margin-right:4px}
.sp{flex:1}
#tg{background:none;border:none;border-left:1px solid var(--line);color:var(--text);padding:0 20px;font-size:1.1rem;transition:.2s}
#tg:hover{background:var(--bg);color:var(--a4)}
section{min-height:100vh;padding:110px 5vw 60px;max-width:1180px;margin:auto}
h2{font-size:clamp(1.7rem,4.5vw,2.6rem);margin-bottom:34px;font-weight:700}
h2 em{font-style:normal;color:var(--cm)}
h2 .k{color:var(--a1)}
.hero{display:grid;grid-template-columns:1.15fr 1fr;gap:44px;align-items:center}
.hi{color:var(--cm);font-size:.95rem}
h1{font-size:clamp(2.4rem,6.5vw,4.6rem);line-height:1.05;margin:10px 0 14px;font-weight:700;color:var(--text)}
h1 span{color:var(--a1)}
.code{background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:16px 18px;font-size:.9rem;margin:18px 0;max-width:520px;box-shadow:0 10px 30px var(--shadow);transition:background .4s}
.code .k{color:var(--a1)}.code .s{color:var(--a2)}.code .f{color:var(--a4)}.code .c{color:var(--cm)}.code .t{color:var(--a3)}
.caret{display:inline-block;width:8px;height:1.05em;background:var(--a3);vertical-align:-3px;animation:bl 1s steps(2) infinite}
@keyframes bl{50%{opacity:0}}
.btns{display:flex;gap:12px;margin-top:22px;flex-wrap:wrap}
.btn{padding:11px 22px;border-radius:6px;font-size:.9rem;border:1px solid var(--a1);background:none;color:var(--text);transition:background .25s,color .25s,box-shadow .25s;display:inline-block}
.btn.p{background:var(--a1);color:#fff;border-color:var(--a1)}
.btn:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--a1) 30%,transparent)}
.pw{perspective:1000px;display:grid;place-items:center}
.win{width:min(380px,86vw);background:var(--bg2);border:1px solid var(--line);border-radius:12px;box-shadow:0 30px 60px var(--shadow);transform-style:preserve-3d;transition:transform .15s,background .4s;animation:fl 6s ease-in-out infinite}
@keyframes fl{50%{translate:0 -12px}}
.win .tb{display:flex;align-items:center;gap:7px;padding:10px 14px;border-bottom:1px solid var(--line);font-size:.75rem;color:var(--dim)}
.dot{width:11px;height:11px;border-radius:50%;display:inline-block}
.shot{position:relative;margin:14px;aspect-ratio:1;border-radius:8px;overflow:hidden;background:linear-gradient(135deg,var(--a1),var(--a3));display:grid;place-items:center;font:700 4.5rem 'JetBrains Mono',monospace;color:#fff;transform:translateZ(20px)}
.shot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.shot::after{content:"";position:absolute;left:0;right:0;height:3px;background:var(--a3);box-shadow:0 0 18px var(--a3);animation:scan 3.5s linear infinite;opacity:.8}
@keyframes scan{from{top:-4px}to{top:100%}}
.chip{position:absolute;padding:5px 11px;border-radius:6px;background:var(--bg);border:1px solid var(--line);font:.75rem 'JetBrains Mono',monospace;color:var(--a3);transform:translateZ(70px);box-shadow:0 8px 20px var(--shadow);animation:fl 4s ease-in-out infinite}
.chip:nth-of-type(1){top:44px;right:-26px}.chip:nth-of-type(2){bottom:60px;left:-30px;animation-delay:-1.3s}.chip:nth-of-type(3){bottom:-14px;right:30px;animation-delay:-2.6s}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:16px;margin-top:28px}
.stat{padding:20px;border:1px solid var(--line);border-radius:10px;background:var(--bg2);text-align:center;transition:background .4s}
.stat b{display:block;font:700 2.2rem 'JetBrains Mono',monospace;color:var(--a1)}
.lead{color:var(--dim);max-width:62ch;font-size:1.05rem}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px}
.card{background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:24px;transform-style:preserve-3d;transition:transform .15s,border-color .3s,background .4s;position:relative;overflow:hidden}
.card::before{content:"";position:absolute;inset:0;background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),color-mix(in srgb,var(--a1) 18%,transparent),transparent 70%);opacity:0;transition:opacity .3s}
.card:hover{border-color:var(--a1)}.card:hover::before{opacity:1}
.card>*{position:relative}
.card h3{margin-bottom:8px;color:var(--a4);font-size:1.05rem;transform:translateZ(26px)}
.card p{color:var(--dim);font-size:.93rem}
.tags{display:flex;gap:7px;flex-wrap:wrap;margin-top:14px;font:.72rem 'JetBrains Mono',monospace;color:var(--a3)}
.tags span{border:1px solid var(--line);padding:2px 9px;border-radius:4px}
.tl{border-left:2px solid var(--line);padding-left:28px;display:grid;gap:28px}
.tl>div{position:relative}
.tl>div::before{content:"";position:absolute;left:-37px;top:8px;width:12px;height:12px;border-radius:50%;background:var(--bg);border:3px solid var(--a3)}
.tl small{color:var(--a3);font-family:'JetBrains Mono',monospace}
.tl h3{font-size:1.05rem}
.term{background:#0c0c0c;border:1px solid #333;border-radius:10px;box-shadow:0 24px 60px var(--shadow);overflow:hidden;font:14px/1.55 'JetBrains Mono',monospace;color:#d3d7cf;position:relative}
.term .tb{background:#2c2c2c;padding:8px 14px;display:flex;align-items:center;gap:7px;color:#aaa;font-size:.78rem}
.term .tb span.ti{margin:0 auto}
#term input,
#term input:focus,
#term input:active {
  border: 0 !important;
  outline: none !important;
  box-shadow: none !important;
  -webkit-appearance: none;
  appearance: none;
}
#tb{scrollbar-width:thin;scrollbar-color:#3a3a3a transparent;scroll-behavior:smooth}
#tb::-webkit-scrollbar{width:6px}
#tb::-webkit-scrollbar-track{background:transparent;margin:6px 0}
#tb::-webkit-scrollbar-thumb{background:#3a3a3a;border-radius:8px;border:2px solid #0c0c0c;transition:background .2s}
#tb::-webkit-scrollbar-thumb:hover{background:#8ae234}
#tb::-webkit-scrollbar-thumb:active{background:#34e2e2}
#tb::-webkit-scrollbar-corner{background:transparent}
#tb{height:380px;overflow-y:auto;padding:14px 16px;white-space:pre-wrap;word-break:break-word}
#tb .g{color:#8ae234}#tb .b{color:#729fcf}#tb .y{color:#fce94f}#tb .r{color:#ef2929}#tb .m{color:#ad7fa8}#tb .c{color:#34e2e2}#tb .d{color:#888}
.ln{display:flex;gap:8px;align-items:center}
#ti{flex:1;background:none;border:none;color:#d3d7cf;font:inherit;outline:none;caret-color:#8ae234;cursor:text}
#mx{position:absolute;left:0;right:0;top:34px;bottom:0;display:none}
form{display:grid;gap:12px;max-width:540px}
input,textarea{width:100%;padding:13px;border-radius:6px;border:1px solid var(--line);background:var(--bg2);color:var(--text);font:inherit;transition:.25s}
input:focus,textarea:focus{border-color:var(--a1);outline:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--a1) 25%,transparent)}
footer{text-align:center;padding:36px;color:var(--dim);font:.82rem 'JetBrains Mono',monospace;border-top:1px solid var(--line);background:var(--bg2)}
.rv{opacity:0;transform:translateY(30px) scale(.98);transition:opacity .8s,transform .8s}
.rv.in{opacity:1;transform:none}
@media(max-width:820px){.hero{grid-template-columns:1fr}.pw{order:-1}nav .logo-text{display:none}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.rv{opacity:1;transform:none}html{scroll-behavior:auto}}

.mq{overflow:hidden;border-block:1px solid var(--line);background:var(--bg2);position:relative;z-index:1;padding:12px 0;transition:background .4s}
.mt{display:flex;gap:44px;width:max-content;animation:mq 30s linear infinite;font:.85rem 'JetBrains Mono',monospace;color:var(--dim)}
.mq:hover .mt{animation-play-state:paused}
.mt span::before{content:"{ } ";color:var(--a3)}
@keyframes mq{to{transform:translateX(-50%)}}
.flow{display:flex;align-items:center;margin:10px 0 34px;overflow-x:auto;padding:8px 2px}
.nd{padding:10px 16px;border:1px solid var(--a1);border-radius:8px;background:var(--bg2);white-space:nowrap;color:var(--a4);font:.85rem 'JetBrains Mono',monospace}
.ln2{flex:1;min-width:50px;height:2px;background:repeating-linear-gradient(90deg,var(--line) 0 6px,transparent 6px 12px);position:relative}
.ln2 i{position:absolute;top:-4px;left:0;width:10px;height:10px;border-radius:50%;background:var(--a3);box-shadow:0 0 10px var(--a3);animation:pk 2.4s linear infinite}
.ln2:nth-of-type(2) i{animation-delay:.6s}.ln2:nth-of-type(3) i{animation-delay:1.2s}
@keyframes pk{to{left:calc(100% - 10px)}}
.feat{position:relative;border-radius:12px;padding:2px;overflow:hidden;background:var(--line)}
.feat::before{content:"";position:absolute;inset:-60%;background:conic-gradient(from 0deg,transparent 0 60%,var(--a3),var(--a1),transparent);animation:spin 5s linear infinite}
@keyframes spin{to{rotate:360deg}}
.feat .card{border-radius:10px;position:relative;z-index:1}
.fg{display:grid;grid-template-columns:1.4fr 1fr;gap:30px;align-items:center}
.steps{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px;font-size:.75rem}
.steps span{padding:3px 10px;border:1px solid var(--line);border-radius:4px;color:var(--dim);animation:hl 5s infinite}
.steps span:nth-child(2){animation-delay:1s}.steps span:nth-child(3){animation-delay:2s}.steps span:nth-child(4){animation-delay:3s}.steps span:nth-child(5){animation-delay:4s}
@keyframes hl{0%,16%{color:var(--bg);background:var(--a3);border-color:var(--a3)}20%,100%{color:var(--dim);background:none}}
.gauge{position:relative;width:min(220px,60vw);margin:auto}
.gauge svg{transform:rotate(-90deg);width:100%}
.gauge circle{fill:none;stroke-width:9;stroke-linecap:round}
.gauge .bgc{stroke:var(--line)}
.gauge .v{stroke:var(--a3);stroke-dasharray:327;stroke-dashoffset:327;filter:drop-shadow(0 0 6px var(--a3))}
.rv.in .gauge .v{animation:gf 2s .3s ease forwards}
@keyframes gf{to{stroke-dashoffset:72}}
.gv{position:absolute;inset:0;display:grid;place-content:center;text-align:center}
.gv b{font:700 2.4rem 'JetBrains Mono',monospace;color:var(--a3)}.gv b::after{content:"%"}
.gv small{color:var(--dim);font-size:.75rem}
.tr,.bu{position:fixed;left:0;top:0;pointer-events:none;border-radius:50%}
.tr{width:10px;height:10px;margin:-5px;background:var(--a3);z-index:97}
.bu{width:6px;height:6px;background:var(--a4);z-index:98;animation:bst .7s ease-out forwards}
@keyframes bst{from{transform:translate(0,0);opacity:1}to{transform:translate(var(--dx),var(--dy)) scale(.2);opacity:0}}
h1 span{background:linear-gradient(90deg,var(--a1),var(--a3),var(--a4),var(--a1));background-size:300%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:gs 6s linear infinite}
@keyframes gs{to{background-position:300%}}
@media(max-width:820px){.fg{grid-template-columns:1fr}}
@media(hover:none),(prefers-reduced-motion:reduce){.tr,.bu{display:none}}
.shot img.real{opacity:0;transition:opacity .6s;background:linear-gradient(135deg,var(--a1),var(--a3))}
.shot:hover img.real,.shot.show img.real{opacity:1}

/* ---- v2 additions: live canvas portrait + letter wave ---- */
.shot canvas,.shot .bin-fb{position:absolute;inset:0;width:100%;height:100%}
.shot canvas{background:#080c0e}
.shot.live .bin-fb{display:none}

/* ---- v3: clean background, real photo, skills, education ---- */
@media(max-width:820px){.chip:nth-of-type(1){right:-6px}.chip:nth-of-type(2){left:-6px}}

/* ---- v4: clean motion effects ---- */
.hud{position:fixed;left:14px;bottom:14px;z-index:60;font:.72rem 'JetBrains Mono',monospace;color:var(--a3);background:var(--bg2);border:1px solid var(--line);padding:4px 10px;border-radius:4px;opacity:.9}
h2{position:relative}
h2::after{content:"";display:block;height:2px;width:0;margin-top:12px;background:linear-gradient(90deg,var(--a1),var(--a3),transparent);transition:width 1.1s cubic-bezier(.2,.8,.3,1) .25s}
h2.in::after{width:140px}
.card.in .tags span{animation:tagIn .5s ease both}
.card.in .tags span:nth-child(2){animation-delay:.08s}
.card.in .tags span:nth-child(3){animation-delay:.16s}
.card.in .tags span:nth-child(4){animation-delay:.24s}
.card.in .tags span:nth-child(5){animation-delay:.32s}
.card.in .tags span:nth-child(6){animation-delay:.4s}
@keyframes tagIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.tl::before{content:"";position:absolute;left:-2px;top:0;width:2px;height:0;background:linear-gradient(var(--a3),var(--a1));transition:height 1.8s ease .2s}
.tl.in::before{height:100%}
.btn{position:relative;overflow:hidden}
.btn::after{content:"";position:absolute;top:0;left:-80%;width:45%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.22),transparent);transform:skewX(-20deg);transition:left .7s ease;pointer-events:none}
.btn:hover::after{left:130%}
footer{position:relative}
footer::before{content:"";position:absolute;top:-1px;left:50%;height:2px;width:20%;transform:translateX(-50%);background:linear-gradient(90deg,var(--a1),var(--a3),var(--a4));animation:footline 4s ease-in-out infinite}
@keyframes footline{0%,100%{width:20%;opacity:.6}50%{width:70%;opacity:1}}
.form-note{margin-top:14px;font:.8rem 'JetBrains Mono',monospace;color:var(--dim);max-width:540px}
.form-note a{color:var(--a1);border-bottom:1px dashed var(--a1)}
nav .logo{display:flex;align-items:center;gap:10px}
.logo-img{width:30px;height:30px;border-radius:50%;object-fit:cover;border:1.5px solid var(--a3);background:var(--bg2);flex:none}
.menu-btn{display:none;background:none;border:1px solid var(--line);color:inherit;font-size:1.2rem;border-radius:6px;padding:4px 10px;cursor:pointer;min-height:40px}

.menu-btn{display:none;background:none;border:1px solid var(--line);color:inherit;font-size:1.2rem;border-radius:6px;padding:4px 10px;cursor:pointer;min-height:40px}

/* desktop: keep the tabs in the same row as before */
/* Desktop: keep tabs in the same row */
nav .menu{display:contents}

@media (max-width:768px){
  nav{position:relative;overflow:visible;flex-wrap:wrap;background:transparent!important;backdrop-filter:none;-webkit-backdrop-filter:none;border-bottom-color:transparent}
  nav .menu-btn{display:inline-block;order:1;margin-right:10px;background:transparent!important;color:whitesmoke!important;border:none!important;box-shadow:none!important;outline:none}  nav .menu-btn:hover,nav .menu-btn:focus,nav .menu-btn:active{background:transparent!important;box-shadow:none!important}
  nav .logo-img{display:none}
  nav .menu{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;background:var(--bg)!important;border-bottom:1px solid var(--line);padding:8px 0;z-index:100;backdrop-filter:none;-webkit-backdrop-filter:none}
  nav .menu.open{display:flex}
  nav .menu .t{display:block;padding:12px 20px;border-bottom:1px solid var(--line)}
}
