:root{--bg:#faf8f5;--bg-alt:#f5f1eb;--white:#fff;--brown:#8b5e3c;--brown-dark:#5c3a21;--accent:#c89b6d;--text:#1f1f1f;--text-soft:#6b645c;--border:#e9e1d8;--danger:#a34c3f;--serif:"Fraunces", serif;--sans:"Inter", sans-serif;--mono:"IBM Plex Mono", monospace}[data-theme=dark]{--bg:#17140f;--bg-alt:#1e1a14;--white:#221d16;--text:#f3eee6;--text-soft:#b8ae9e;--border:#332c22}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--sans);line-height:1.6;transition:background .4s,color .4s;overflow-x:hidden}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:#fff}.eyebrow{font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--brown);align-items:center;gap:10px;font-size:.72rem;display:flex}.eyebrow:before{content:"";background:var(--brown);width:22px;height:1px;display:inline-block}h1,h2,h3{font-family:var(--serif);letter-spacing:-.01em;font-weight:500}.container{max-width:1180px;margin:0 auto;padding:0 32px}section{padding:140px 0;position:relative}#progress{background:var(--brown);z-index:999;width:0%;height:2px;transition:width .1s linear;position:fixed;top:0;left:0}nav{z-index:900;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#faf8f5bf;border-bottom:1px solid #0000;justify-content:space-between;align-items:center;padding:20px 40px;transition:border-color .3s,background .3s;display:flex;position:fixed;top:0;left:0;right:0}[data-theme=dark] nav{background:#17140fbf}nav.scrolled{border-bottom:1px solid var(--border)}.logo{font-family:var(--serif);letter-spacing:.02em;font-size:1.25rem;font-weight:600}.logo span{color:var(--brown)}.nav-links{gap:34px;list-style:none;display:flex}.nav-links a{color:var(--text-soft);padding:4px 0;font-size:.86rem;transition:color .25s;position:relative}.nav-links a:after{content:"";background:var(--brown);width:0%;height:1px;transition:width .3s;position:absolute;bottom:-2px;left:0}.nav-links a.active,.nav-links a:hover{color:var(--text)}.nav-links a.active:after,.nav-links a:hover:after{width:100%}.nav-right{align-items:center;gap:18px;display:flex}.theme-toggle,.cmd-btn{border:1px solid var(--border);background:var(--white);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;font-size:.85rem;transition:transform .3s,border-color .3s;display:flex}.cmd-btn{width:auto;font-family:var(--mono);color:var(--text-soft);border-radius:20px;gap:8px;padding:0 14px;font-size:.72rem}.theme-toggle:hover,.cmd-btn:hover{border-color:var(--brown);transform:translateY(-2px)}.btn{cursor:pointer;border:1px solid #0000;border-radius:999px;align-items:center;gap:8px;padding:14px 26px;font-size:.88rem;font-weight:500;transition:transform .3s,box-shadow .3s,background .3s;display:inline-flex}.btn-primary{background:var(--brown-dark);color:#fff}.btn-primary:hover{transform:translateY(-3px);box-shadow:0 14px 28px -12px #5c3a2180}.btn-ghost{border-color:var(--border);color:var(--text);background:0 0}.btn-ghost:hover{border-color:var(--brown);transform:translateY(-3px)}.reveal{opacity:0;transform:translateY(28px)}.sec-head{max-width:640px;margin-bottom:56px}.sec-head h2{margin-top:14px;font-size:clamp(1.9rem,3.4vw,2.6rem)}.sec-head p{color:var(--text-soft);margin-top:14px;font-size:.98rem}.hero{align-items:center;min-height:100vh;padding-top:120px;display:flex}.hero-grid{grid-template-columns:1.15fr .85fr;align-items:center;gap:60px;display:grid}.hero-title{margin-bottom:26px;font-size:clamp(2.6rem,5.4vw,4.6rem);line-height:1.05}.hero-title em{color:var(--brown);font-style:normal}.rotating-wrap{font-family:var(--mono);color:var(--text-soft);align-items:center;height:28px;margin-bottom:30px;font-size:1.05rem;display:flex;overflow:hidden}.rotating-wrap b{color:var(--brown-dark);font-weight:500}#rotate-role{margin-left:6px;transition:opacity .25s;display:inline-block}.hero p.desc{max-width:480px;color:var(--text-soft);margin-bottom:40px;font-size:1.02rem}.cta-row{flex-wrap:wrap;gap:16px;display:flex}.id-card{aspect-ratio:1;background:linear-gradient(160deg, var(--white), var(--bg-alt));border:1px solid var(--border);border-radius:28px;justify-content:center;align-items:center;width:100%;max-width:420px;margin-left:auto;display:flex;position:relative;overflow:hidden}.id-card svg{width:78%;height:78%}.float-particle{animation:6s ease-in-out infinite float}.float-particle2{animation:7.5s ease-in-out .8s infinite float}.float-particle3{animation:5.2s ease-in-out 1.6s infinite float}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-14px)}}.pulse-line{animation:3.5s linear infinite dash}@keyframes dash{to{stroke-dashoffset:-40px}}.id-tag{font-family:var(--mono);color:var(--text-soft);justify-content:space-between;align-items:flex-end;font-size:.7rem;display:flex;position:absolute;bottom:22px;left:22px;right:22px}.about-grid{grid-template-columns:.9fr 1.1fr;gap:70px;display:grid}.stat-row{grid-template-columns:repeat(4,1fr);gap:20px;margin-top:44px;display:grid}.stat{border-top:1px solid var(--border);padding-top:14px}.stat .num{font-family:var(--serif);color:var(--brown-dark);font-size:1.9rem}.stat .label{color:var(--text-soft);margin-top:4px;font-size:.76rem}.timeline{padding-left:28px;position:relative}.timeline:before{content:"";background:var(--border);width:1px;position:absolute;top:6px;bottom:6px;left:5px}.t-item{padding-bottom:38px;position:relative}.t-item:last-child{padding-bottom:0}.t-item:before{content:"";background:var(--bg);border:2px solid var(--brown);border-radius:50%;width:11px;height:11px;position:absolute;top:4px;left:-28px}.t-item .yr{font-family:var(--mono);color:var(--brown);letter-spacing:.06em;font-size:.72rem}.t-item h3{margin:6px 0;font-size:1.08rem;font-weight:600}.t-item p{color:var(--text-soft);font-size:.9rem}.filter-row{flex-wrap:wrap;gap:10px;margin-bottom:38px;display:flex}.filter-chip{border:1px solid var(--border);cursor:pointer;background:var(--white);color:var(--text-soft);border-radius:999px;padding:8px 18px;font-size:.8rem;transition:all .25s}.filter-chip.active,.filter-chip:hover{background:var(--brown-dark);color:#fff;border-color:var(--brown-dark)}.skill-grid{grid-template-columns:repeat(4,1fr);gap:16px;display:grid}.skill-groups{flex-direction:column;gap:48px;display:flex}.skill-group-head{border-bottom:1px solid var(--border);align-items:baseline;gap:12px;margin-bottom:20px;padding-bottom:12px;display:flex}.skill-group-head h3{font-family:var(--serif);font-size:1.2rem;font-weight:500}.skill-group-head .count{font-family:var(--mono);color:var(--text-soft);font-size:.7rem}.skill-group .skill-grid{grid-template-columns:repeat(3,1fr);gap:18px}.skill-card{perspective:1000px;cursor:pointer;height:216px}.skill-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .6s;position:relative}.skill-card.flipped .skill-inner{transform:rotateY(180deg)}.skill-face{backface-visibility:hidden;border:1px solid var(--border);border-radius:16px;flex-direction:column;justify-content:space-between;padding:22px;display:flex;position:absolute;inset:0}.skill-front{background:var(--white);gap:14px}.skill-back{background:var(--bg-alt);transform:rotateY(180deg)}.skill-icon{background:var(--bg-alt);width:44px;height:44px;font-family:var(--serif);color:var(--brown-dark);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;font-size:.95rem;font-weight:600;display:flex}.skill-top-row{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.skill-name-block{flex:1;min-width:0}.skill-pct{font-family:var(--mono);color:var(--accent);white-space:nowrap;padding-top:4px;font-size:.72rem}.skill-card .sname{font-size:.98rem;font-weight:600}.skill-card .scat{font-family:var(--mono);color:var(--brown);text-transform:uppercase;letter-spacing:.06em;margin-top:4px;font-size:.66rem;display:block}.skill-bar-track{background:var(--border);border-radius:2px;height:4px;overflow:hidden}.skill-bar-fill{background:linear-gradient(90deg,var(--accent),var(--brown-dark));border-radius:2px;height:100%}.skill-desc{color:var(--text-soft);font-size:.83rem}.skill-used{color:var(--text-soft);font-size:.78rem}.skill-used b{color:var(--brown-dark);font-weight:600}.skill-note{color:var(--text-soft);font-size:.83rem;line-height:1.55}.flip-hint{color:var(--brown);font-size:.72rem}.see-more-link{text-align:center;color:var(--brown-dark);cursor:pointer;text-underline-offset:3px;margin-top:22px;font-size:.86rem;text-decoration:underline}.see-more-link:hover{opacity:.75}.skill-search{max-width:340px;margin-bottom:26px;position:relative}.skill-search input{border:1px solid var(--border);background:var(--white);width:100%;font-family:var(--sans);color:var(--text);border-radius:12px;padding:12px 16px 12px 40px;font-size:.88rem;transition:border-color .25s}.skill-search input:focus{border-color:var(--brown);outline:none}.skill-search:before{content:"⌕";color:var(--text-soft);font-size:1rem;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.skill-empty{text-align:center;color:var(--text-soft);padding:40px 0;font-size:.9rem;display:none}.skill-empty.show{display:block}.project-card{border:1px solid var(--border);background:var(--white);cursor:pointer;border-radius:22px;margin-bottom:22px;padding:34px;transition:transform .35s,box-shadow .35s}.project-card:hover{transform:translateY(-4px);box-shadow:0 26px 46px -30px #5c3a214d}.p-top{justify-content:space-between;align-items:flex-start;gap:20px;display:flex}.p-tag{font-family:var(--mono);color:var(--brown);letter-spacing:.06em;text-transform:uppercase;font-size:.68rem}.p-title{margin-top:8px;font-size:1.4rem}.p-desc{color:var(--text-soft);max-width:640px;margin-top:10px;font-size:.92rem}.p-meta{font-family:var(--mono);color:var(--text-soft);flex-wrap:wrap;gap:22px;margin-top:20px;font-size:.7rem;display:flex}.p-body{max-height:0;transition:max-height .5s,margin-top .5s;overflow:hidden}.project-card.open .p-body{max-height:500px;margin-top:22px}.p-body-inner{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:24px;padding-top:20px;display:grid}.p-col h4{text-transform:uppercase;letter-spacing:.05em;color:var(--brown-dark);margin-bottom:8px;font-size:.78rem}.p-col p,.p-col li{color:var(--text-soft);font-size:.86rem}.p-col ul{padding-left:18px}.stack-pill{font-family:var(--mono);border:1px solid var(--border);border-radius:999px;margin:3px 4px 0 0;padding:4px 10px;font-size:.68rem;display:inline-block}.p-links{gap:14px;margin-top:18px;display:flex}.p-links a{color:var(--brown-dark);border-bottom:1px solid var(--brown-dark);padding-bottom:1px;font-size:.78rem}.cert-grid{grid-template-columns:repeat(3,1fr);gap:20px;display:grid}.cert-card{border:1px solid var(--border);background:var(--white);perspective:1000px;border-radius:18px;height:220px;padding:26px;position:relative}.cert-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .6s;position:relative}.cert-card.flipped .cert-inner{transform:rotateY(180deg)}.cert-face{backface-visibility:hidden;flex-direction:column;justify-content:space-between;display:flex;position:absolute;inset:0}.cert-back{transform:rotateY(180deg)}.cert-face h3{font-size:1.02rem}.cert-face .issuer{color:var(--text-soft);margin-top:4px;font-size:.78rem}.badge{background:var(--bg-alt);border:1px solid var(--border);border-radius:12px;justify-content:center;align-items:center;width:52px;height:52px;margin-bottom:14px;display:flex;overflow:hidden}.badge img{object-fit:contain;width:100%;height:100%;padding:6px}.badge .logo-fallback{font-family:var(--mono);letter-spacing:.03em;color:var(--brown-dark);text-align:center;padding:0 4px;font-size:.62rem;font-weight:600}.cert-face .idline{font-family:var(--mono);color:var(--text-soft);font-size:.68rem}.contact-grid{grid-template-columns:1fr 1fr;gap:70px;display:grid}.field{margin-bottom:20px}.field label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-soft);margin-bottom:8px;font-size:.76rem;display:block}.field input,.field textarea{background:var(--white);border:1px solid var(--border);width:100%;font-family:var(--sans);color:var(--text);border-radius:10px;padding:13px 16px;font-size:.92rem;transition:border-color .25s}.field input:focus,.field textarea:focus{border-color:var(--brown);outline:none}.contact-list{list-style:none}.contact-list li{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 0;font-size:.92rem;display:flex}.contact-list li span:first-child{color:var(--text-soft);text-transform:uppercase;letter-spacing:.05em;font-size:.76rem}.copy-btn{font-family:var(--mono);color:var(--brown);cursor:pointer;font-size:.68rem}footer{border-top:1px solid var(--border);text-align:center;padding:50px 0}footer p{color:var(--text-soft);font-size:.8rem}#toTop{background:var(--brown-dark);color:#fff;cursor:pointer;opacity:0;pointer-events:none;z-index:800;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;font-size:1rem;transition:opacity .3s,transform .3s;display:flex;position:fixed;bottom:28px;right:28px}#toTop.show{opacity:1;pointer-events:auto}#toTop:hover{transform:translateY(-4px)}.chapter{justify-content:center;align-items:center;padding:54px 0;display:flex}.chapter .cline{font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--text-soft);font-size:.72rem}.toast{background:var(--brown-dark);color:#fff;opacity:0;z-index:9999;border-radius:10px;padding:12px 22px;font-size:.86rem;transition:opacity .3s,transform .3s;position:fixed;bottom:24px;left:50%;transform:translate(-50%)translateY(20px);box-shadow:0 14px 30px -14px #00000059}.toast.show{opacity:1;transform:translate(-50%)translateY(0)}.toast-error{background:var(--danger)}.search-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;background:#1f1f1f66;justify-content:center;align-items:flex-start;padding-top:12vh;display:none;position:fixed;inset:0}.search-overlay.open{display:flex}.search-modal{background:var(--white);border:1px solid var(--border);border-radius:16px;width:560px;max-width:90vw;overflow:hidden;box-shadow:0 30px 60px -20px #00000059}.search-modal input{border:none;border-bottom:1px solid var(--border);width:100%;color:var(--text);font-size:1.05rem;font-family:var(--sans);background:0 0;padding:18px 20px}.search-modal input:focus{outline:none}.search-results{max-height:360px;overflow-y:auto}.search-result-item{cursor:pointer;border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 20px;transition:background .15s;display:flex}.search-result-item:hover,.search-result-item.active{background:var(--bg-alt)}.search-result-item .rname{font-size:.92rem;font-weight:600}.search-result-item .rtype{font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--brown);font-size:.66rem}.search-empty{text-align:center;color:var(--text-soft);padding:28px 20px;font-size:.88rem}.search-hint{color:var(--text-faint);border-top:1px solid var(--border);padding:10px 20px;font-size:.7rem}.search-hint kbd{background:var(--bg-alt);border:1px solid var(--border);font-family:var(--mono);border-radius:4px;padding:1px 6px}.mobile-menu-btn{display:none}@media (width<=920px){.hero-grid,.about-grid,.contact-grid{grid-template-columns:1fr}.skill-grid{grid-template-columns:repeat(2,1fr)}.cert-grid{grid-template-columns:1fr}.stat-row{grid-template-columns:repeat(2,1fr)}.p-body-inner{grid-template-columns:1fr}.mobile-menu-btn{all:unset;cursor:pointer;color:var(--text);border:1px solid var(--border);background:var(--white);border-radius:8px;padding:6px 10px;font-size:1.2rem}.nav-links{background:var(--white);border-top:1px solid var(--border);flex-direction:column;gap:0;display:none;position:absolute;top:100%;left:0;right:0;box-shadow:0 12px 24px -12px #00000026}.nav-links.open{display:flex}.nav-links li{border-bottom:1px solid var(--border)}.nav-links a{padding:16px 24px;display:block}nav{position:relative}}@media (width<=480px){.skill-group .skill-grid{grid-template-columns:1fr}.skill-card{height:auto;min-height:200px}.skill-top-row{flex-wrap:wrap}.skill-name-block{min-width:0}.skill-card .sname{word-break:break-word}}#idPhotoFull{object-fit:cover;border-radius:28px;width:100%;height:100%;position:absolute;inset:0}
