@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@400;500;600;700&display=swap";*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{background-color:#0a0a0a;min-height:100vh}a{text-decoration:none;color:inherit}::selection{background:#3b82f64d;color:#fff}:root{--bg: #050505;--surface: #0e0e0e;--surface-2: #161616;--border: rgba(255,255,255,.05);--border-hover: rgba(255,255,255,.1);--text: #f0f0f0;--text-dim: #666;--accent: #e4e4e4;--pop: #c8ff00;--pop-dim: rgba(200,255,0,.08)}.portfolio:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:200px}.portfolio{background:var(--bg);color:var(--text);min-height:100vh;font-family:Inter,-apple-system,system-ui,sans-serif;-webkit-font-smoothing:antialiased;position:relative}.portfolio>*:not(:before){position:relative;z-index:1}.wrap{max-width:1100px;margin:0 auto;padding:3rem 2rem 2rem}::selection{background:var(--pop);color:#000}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:2.5rem}.topbar-name{font-family:Space Grotesk,sans-serif;font-size:1.1rem;font-weight:700;letter-spacing:-.02em}.topbar-links{display:flex;gap:.25rem}.topbar-links a{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;color:var(--text-dim);transition:all .2s ease}.topbar-links a:hover{color:var(--text);background:var(--surface-2)}.topbar-links a svg{width:16px;height:16px}.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:.75rem;margin-bottom:2rem}.cell{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:1.5rem;transition:border-color .25s ease,transform .25s ease;overflow:hidden}.cell:hover{border-color:var(--border-hover);box-shadow:0 4px 20px #00000040}.cell--hero{grid-column:span 8;display:flex;align-items:center;gap:2rem;padding:2.25rem 2.5rem;background:var(--surface)}.hero-img{width:120px;height:120px;border-radius:20px;object-fit:cover;flex-shrink:0;filter:grayscale(30%) contrast(1.05);transition:filter .4s ease}.hero-img:hover{filter:grayscale(0%)}.hero-text h1{font-family:Space Grotesk,sans-serif;font-size:2.4rem;font-weight:700;letter-spacing:-.04em;line-height:1.05;margin:0 0 .5rem}.hero-text h1 span{color:var(--pop)}.hero-subtitle{font-family:JetBrains Mono,monospace;font-size:.82rem;color:var(--text-dim);margin:0 0 .75rem;letter-spacing:-.01em}.hero-status{display:inline-flex;align-items:center;gap:.4rem;font-family:JetBrains Mono,monospace;font-size:.72rem;color:var(--pop);background:var(--pop-dim);padding:.3rem .7rem;border-radius:100px;border:1px solid rgba(200,255,0,.1)}.hero-status:before{content:"";width:5px;height:5px;background:var(--pop);border-radius:50%;animation:blink 2.5s ease-in-out infinite}@keyframes blink{0%,to{opacity:1}50%{opacity:.2}}.cell--about{grid-column:span 4;display:flex;flex-direction:column;justify-content:center}.cell-label{font-family:JetBrains Mono,monospace;font-size:.65rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--text-dim);margin-bottom:.75rem}.cell--about p{font-size:.88rem;line-height:1.65;color:#999}.cell--exp{grid-column:span 12;padding:1.75rem 2rem}.exp-timeline{display:flex;flex-direction:column;gap:0}.exp-row{display:grid;grid-template-columns:140px 24px 1fr;gap:0 1rem;min-height:0}.exp-left{display:flex;flex-direction:column;align-items:flex-end;padding-top:.15rem;gap:.35rem}.exp-date{font-family:JetBrains Mono,monospace;font-size:.68rem;color:var(--text-dim);white-space:nowrap;text-align:right}.exp-loc-pill{font-family:JetBrains Mono,monospace;font-size:.6rem;color:#555;background:var(--surface-2);border:1px solid var(--border);padding:.15rem .5rem;border-radius:100px}.exp-line{display:flex;flex-direction:column;align-items:center;position:relative}.exp-dot{width:10px;height:10px;border-radius:50%;background:var(--bg);border:2px solid var(--pop);flex-shrink:0;margin-top:.3rem;z-index:1}.exp-connector{width:1px;flex:1;background:var(--border)}.exp-content{padding-bottom:2rem}.exp-role{font-size:.92rem;font-weight:600;margin:0 0 .2rem;color:var(--text)}.exp-company{font-size:.84rem;color:var(--pop);margin:0 0 .5rem;font-weight:500}.exp-company a{color:var(--pop);text-decoration:none;display:inline-flex;align-items:center;gap:.2rem;transition:opacity .2s ease}.exp-company a:hover{opacity:.7}.exp-company a svg{width:12px;height:12px}.exp-desc{font-size:.84rem;color:#888;line-height:1.65;margin:0;max-width:520px}.exp-row:last-child .exp-content{padding-bottom:0}.cell--skills{grid-column:span 7}.skills-block{margin-bottom:.9rem}.skills-block:last-child{margin-bottom:0}.skill-cat{font-family:JetBrains Mono,monospace;font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);margin-bottom:.4rem}.skill-tags{display:flex;flex-wrap:wrap;gap:.35rem}.tag{font-family:JetBrains Mono,monospace;font-size:.72rem;padding:.25rem .6rem;border-radius:6px;background:var(--surface-2);border:1px solid var(--border);color:#888;transition:all .2s ease;cursor:default}.tag:hover{color:var(--pop);border-color:#c8ff0033;background:var(--pop-dim)}.cell--edu{grid-column:span 5;display:flex;flex-direction:column;justify-content:center}.edu-school{font-family:Space Grotesk,sans-serif;font-size:1.05rem;font-weight:600;margin:0 0 .2rem}.edu-degree{font-size:.85rem;color:#888;margin:0 0 .15rem}.edu-badge{display:inline-flex;align-items:center;gap:.3rem;font-family:JetBrains Mono,monospace;font-size:.7rem;color:var(--pop);background:var(--pop-dim);padding:.25rem .6rem;border-radius:6px;margin-top:.6rem;border:1px solid rgba(200,255,0,.08);width:fit-content}.edu-divider{height:1px;background:var(--border);margin:1rem 0}.cell--proj,.cell--hacks{grid-column:span 6}.hack-items{display:flex;flex-direction:column;gap:.6rem}.hack-item{display:flex;justify-content:space-between;align-items:baseline;padding:.6rem 0;border-bottom:1px solid var(--border)}.hack-item:last-child{border-bottom:none;padding-bottom:0}.hack-name{font-size:.88rem;font-weight:600;margin:0}.hack-result{font-family:JetBrains Mono,monospace;font-size:.72rem;color:var(--pop);white-space:nowrap}.hack-desc{font-size:.78rem;color:#888;margin:.2rem 0 0}.proj-list{display:flex;flex-direction:column}.proj-header{display:flex;align-items:center;justify-content:space-between}.proj-link{color:var(--text-dim);display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;border:1px solid var(--border);transition:all .2s ease}.proj-link:hover{color:var(--pop);border-color:#c8ff0033;background:var(--pop-dim)}.proj-link svg{width:14px;height:14px}.proj-divider{height:1px;background:var(--border);margin:1rem 0}.proj-name{font-family:Space Grotesk,sans-serif;font-size:1rem;font-weight:600;margin:0 0 .15rem}.proj-tech{font-family:JetBrains Mono,monospace;font-size:.72rem;color:var(--pop);margin:0 0 .5rem}.proj-desc{font-size:.85rem;color:#888;line-height:1.6;margin:0}.cell--game{grid-column:span 12;padding:0;background:none;border:none}.cell--game:hover{box-shadow:none}.game-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:.6rem;padding:1rem;background:var(--surface);border:1px solid var(--border);border-radius:16px;color:var(--text-dim);font-family:JetBrains Mono,monospace;font-size:.8rem;cursor:pointer;transition:all .25s ease}.game-btn svg{width:16px;height:16px}.game-btn:hover{color:var(--pop);border-color:#c8ff0026;background:var(--pop-dim)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#000000bf;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;padding:1.5rem;animation:fadeIn .2s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-box{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:1.5rem;width:100%;max-width:740px;animation:slideUp .25s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.modal-title{display:flex;align-items:center;gap:.5rem;font-family:Space Grotesk,sans-serif;font-size:1rem;font-weight:600;color:var(--text)}.modal-icon{width:18px;height:18px;color:var(--pop)}.modal-right{display:flex;align-items:center;gap:.75rem}.modal-score{font-family:JetBrains Mono,monospace;font-size:.78rem;color:var(--pop)}.modal-close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:1px solid var(--border);background:var(--surface-2);color:var(--text-dim);cursor:pointer;transition:all .2s ease}.modal-close:hover{color:var(--text);border-color:var(--border-hover)}.modal-close svg{width:16px;height:16px}.geodash-canvas{width:100%;height:auto;border-radius:12px;background:#080808;border:1px solid var(--border);cursor:pointer;display:block}.modal-hint{font-family:JetBrains Mono,monospace;font-size:.65rem;color:var(--text-dim);text-align:center;margin:.75rem 0 0}.foot{text-align:center;padding:2rem 0 2.5rem;position:relative}.foot p{font-family:JetBrains Mono,monospace;font-size:.68rem;color:var(--text-dim);letter-spacing:.03em}@media(max-width:768px){.wrap{padding:2rem 1rem 1.5rem}.bento{grid-template-columns:1fr}.cell--hero{grid-column:span 1;flex-direction:column;text-align:center}.hero-text h1{font-size:1.8rem}.hero-status{margin:0 auto}.cell--about{grid-column:span 1}.cell--exp{grid-column:span 1;padding:1.25rem}.cell--skills,.cell--edu,.cell--proj,.cell--hacks,.cell--game{grid-column:span 1}.exp-row{grid-template-columns:1fr;gap:0}.exp-left{flex-direction:row;align-items:center;gap:.5rem;margin-bottom:.5rem}.exp-line{display:none}.exp-content{padding-bottom:1.5rem;padding-left:0;border-left:none}.exp-row:not(:last-child) .exp-content{border-bottom:1px solid var(--border)}}
