:root{--page: #f4f6ee;--card: #ffffff;--border: #dfe5d2;--text: #1f2a17;--muted: #6b7560;--accent: #556b3f;--onAccent: #ffffff;--soft: #eef1e6;--glow: rgba(190, 228, 110, .55);--radius-card: 28px;--gap: 28px;--sans: "Manrope", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;--water: #cfe4ee;--land: #e6ecd9}:root[data-mode=dark]{--water: #1a2f38;--land: #26301f}*,*:before,*:after{box-sizing:border-box}html,body{margin:0}body{min-height:100vh;font-family:var(--sans);font-size:15px;line-height:1.55;color:var(--text);background:var(--page);-webkit-font-smoothing:antialiased;transition:background-color .2s ease,color .2s ease}button,input{font:inherit;color:inherit}a{color:var(--accent)}h1,h2,h3{margin:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.pill{display:inline-flex;align-items:center;justify-content:center;flex:none;height:34px;padding:0 17px;border:0;border-radius:999px;font-size:14px;font-weight:700;text-decoration:none;white-space:nowrap;color:var(--onAccent);background:var(--accent);cursor:pointer;transition:filter .12s ease,transform .12s ease}.pill:hover{filter:brightness(.92)}.pill:active{transform:scale(.97)}.pill--ghost{color:var(--text);background:var(--soft)}.icon-btn{display:grid;place-items:center;width:36px;height:36px;padding:0;border:1px solid var(--border);border-radius:12px;color:var(--text);background:var(--card);cursor:pointer}.icon-btn svg{width:18px;height:18px}.mode-toggle{position:fixed;z-index:20;top:18px;right:18px}.avatar{flex:none;object-fit:cover;border-radius:24px}.avatar--lg{width:88px;height:88px}.avatar--md{width:80px;height:80px;border-radius:22px}.avatar--mono{display:grid;place-items:center;font-size:30px;font-weight:700;letter-spacing:-.02em;color:var(--onAccent);background:linear-gradient(160deg,color-mix(in srgb,var(--accent) 70%,#fff),var(--accent))}.avatar--md.avatar--mono{font-size:27px}.mark{display:grid;place-items:center;flex:none;width:40px;height:40px;border-radius:12px;font-size:11px;font-weight:800;letter-spacing:.02em;color:#fff;background:var(--tint);box-shadow:0 0 0 3px var(--card),inset 0 0 0 1px #ffffff24}.mark--lg{width:52px;height:52px;border-radius:15px;font-size:13px}.page{width:min(890px,100% - 40px);margin:0 auto;padding:72px 0 40px}.hero{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.hero-text{text-align:right}.hero h1{font-size:32px;font-weight:600;line-height:1.15;letter-spacing:-.02em}.hero p{margin:4px 0 0;color:var(--muted)}.bento{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap);align-items:start}.bento-col{display:grid;gap:var(--gap)}.card{position:relative;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-card);background:var(--card)}.card h2{font-size:18px;font-weight:600;letter-spacing:-.01em}.card--tall{display:flex;flex-direction:column;justify-content:space-between;gap:16px;min-height:200px;padding:20px}.card--row{display:flex;align-items:center;gap:14px;min-height:84px;padding:16px 16px 16px 20px}.card--row h2{flex:1;min-width:0}.card-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}.card-foot--start{justify-content:flex-start}.card-meta{margin:0;font-size:13px;color:var(--muted)}.timeline{position:relative;display:flex;justify-content:space-between;margin:0;padding:0;list-style:none}.timeline:before{content:"";position:absolute;top:20px;left:20px;right:20px;height:1px;background:var(--border)}.timeline li{position:relative;display:grid;justify-items:center;gap:6px}.timeline-year{font-size:11px;font-weight:500;color:var(--muted)}.cert-row{display:flex;justify-content:space-between;margin:0;padding:0;list-style:none}.cert-row li{display:grid;justify-items:center;gap:6px;font-size:11px;font-weight:700;color:var(--muted)}.cert-row-logo{width:44px;height:44px;filter:drop-shadow(0 2px 6px rgba(0,0,0,.12))}.cert-row-logo svg{width:100%;height:100%}.social-stack{display:flex}.social-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:var(--card);box-shadow:0 0 0 3px var(--card)}.social-icon+.social-icon{margin-left:-8px}.social-icon svg{width:40px;height:40px}.social-icon--github svg{width:38px;height:38px}.github-mark svg{width:30px;height:30px}.github-title{margin-top:8px!important;font-size:15px!important}.github-grid{position:absolute;top:20px;right:20px;display:grid;grid-template-columns:repeat(10,15px);gap:5px}.github-grid span{height:15px;border-radius:4px;background:var(--soft)}.card--map{min-height:200px}.map{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.map-water{fill:var(--water)}.map-land{fill:var(--land)}.map-river{fill:none;stroke:var(--water);stroke-width:5;stroke-linecap:round}.map-pin{position:absolute;display:grid;justify-items:center;gap:4px;transform:translate(-50%,-50%)}.map-dot{width:16px;height:16px;border:3px solid #fff;border-radius:50%;background:#2f80ed;box-shadow:0 0 0 10px #2f80ed2e,0 2px 6px #00000040;animation:ping 2.4s ease-out infinite}.map-label{padding:1px 8px;border-radius:999px;font-size:12px;font-weight:700;color:var(--text);background:var(--card)}@keyframes ping{0%{box-shadow:0 0 #2f80ed59,0 2px 6px #00000040}70%,to{box-shadow:0 0 0 18px #2f80ed00,0 2px 6px #00000040}}.card-foot--overlay{position:absolute;right:14px;bottom:14px}.card--projects{justify-content:flex-end;border:0;color:#fff;background:radial-gradient(90% 80% at 20% 0%,rgba(255,255,255,.22),transparent 60%),linear-gradient(180deg,color-mix(in srgb,var(--accent) 80%,#fff 20%),color-mix(in srgb,var(--accent) 55%,#000 45%))}.card--projects .pill{color:#fff;background:#fff3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.row-icon{display:grid;place-items:center;flex:none;width:26px;height:26px}.row-icon svg{width:24px;height:24px}.row-icon--q{font-size:20px;font-weight:500;color:var(--muted)}.row-text{flex:1;min-width:0}.row-text p{margin:0;overflow:hidden;font-size:13px;text-overflow:ellipsis;color:var(--muted)}.stack-chips{display:flex;gap:4px}.stack-chips span{display:grid;place-items:center;min-width:28px;height:28px;padding:0 4px;border-radius:8px;font-size:10px;font-weight:700;color:var(--muted);background:var(--soft)}.ask-section{display:flex;justify-content:center;margin:72px 0}.askbar{display:flex;align-items:center;gap:8px;width:min(410px,100%);padding:6px 6px 6px 22px;border:1px solid var(--border);border-radius:999px;background:var(--card)}.askbar input{flex:1;min-width:0;height:36px;border:0;outline:0;background:transparent}.askbar input::placeholder{color:var(--muted)}.askbar button{display:grid;place-items:center;flex:none;width:40px;height:40px;padding:0;border:0;border-radius:50%;color:var(--onAccent);background:var(--accent);cursor:pointer}.askbar button:disabled{opacity:.55;cursor:default}.askbar button svg{width:18px;height:18px}.askbar--floating{position:fixed;z-index:10;left:50%;bottom:24px;width:min(520px,100% - 32px);transform:translate(-50%);box-shadow:0 10px 40px #00000014}.questions{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap)}.page-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:64px;font-size:13px;color:var(--muted)}.chat{min-height:100vh}.chat:after{content:"";position:fixed;z-index:9;left:0;right:0;bottom:0;height:110px;pointer-events:none;background:linear-gradient(to bottom,transparent,var(--page) 70%)}.chat-glow{position:fixed;z-index:5;top:0;right:0;bottom:0;left:0;pointer-events:none;box-shadow:inset 0 0 70px 14px var(--glow);animation:glow 3.2s ease-in-out infinite alternate}@keyframes glow{0%{opacity:.45}to{opacity:1}}.chat-back{position:fixed;z-index:20;top:18px;left:18px}.chat-inner{display:flex;flex-direction:column;align-items:center;width:min(700px,100% - 40px);margin:0 auto;padding:24px 0 140px}.exchange{width:100%;scroll-margin-top:24px}.bubble{width:fit-content;max-width:90%;margin:18px auto 0;padding:8px 18px;border-radius:999px;font-weight:500;color:var(--onAccent);background:var(--accent)}.answer{margin-top:28px}.answer-text{max-width:64ch;margin:0;font-size:16px;line-height:1.65}.answer-blocks{display:grid;gap:12px;margin-top:18px;animation:rise .26s ease-out}@keyframes rise{0%{opacity:0;transform:translateY(6px)}}.answer-card{padding:16px 18px;border:1px solid var(--border);border-radius:20px;background:var(--card)}.answer-card h3{font-size:15px;font-weight:700}.answer-meta{margin:2px 0 0;font-size:13px;color:var(--muted)}.answer-body{margin:8px 0 0;font-size:14px}.answer-note{margin:0;font-size:13px;color:var(--muted)}.exp-list,.project-list,.cert-cards{display:grid;gap:12px;margin:0;padding:0;list-style:none}.exp-list li{display:grid;grid-template-columns:40px 1fr;gap:14px}.cert-cards{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.cert-card{display:grid;justify-items:center;gap:4px;text-align:center}.cert-card-logo{width:56px;height:56px;margin-bottom:4px;filter:drop-shadow(0 3px 8px rgba(0,0,0,.12))}.cert-card-logo svg{width:100%;height:100%}.cert-card strong{font-size:18px}.cert-card code{margin-top:4px;font-family:var(--mono);font-size:11px;word-break:break-all}.cert-card a{margin-top:4px;font-size:13px;font-weight:700;text-decoration:none}.stack-groups{display:grid;grid-template-columns:1fr 1fr;gap:12px}.chips{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0;padding:0;list-style:none}.chips li{padding:2px 10px;border-radius:999px;font-size:13px;background:var(--soft)}.chips li.is-hit{font-weight:700;color:var(--onAccent);background:var(--accent)}.contact-block,.edu-block{display:flex;flex-wrap:wrap;align-items:center;gap:14px}.contact-actions{display:flex;flex-wrap:wrap;gap:8px}.resume-block{display:grid;gap:12px}.resume-block iframe{width:100%;height:560px;border:1px solid var(--border);border-radius:14px;background:#fff}@media (max-width: 819px){:root{--gap: 16px}.page{padding-top:64px}.hero h1{font-size:26px}.avatar--lg{width:72px;height:72px;border-radius:20px}.questions,.stack-groups{grid-template-columns:1fr}.github-grid{grid-template-columns:repeat(8,13px);gap:4px}.github-grid span{height:13px}.github-grid span:nth-child(n+57){display:none}.ask-section{margin:48px 0}}@media (prefers-reduced-motion: reduce){.chat-glow,.map-dot,.answer-blocks{animation:none}}
