@import"https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400..800&display=swap";body{margin:0;font-family:Schibsted Grotesk,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-behavior:smooth}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}::selection{background-color:var(--accent-color);color:var(--bg-primary)}*{margin:0;padding:0;box-sizing:border-box}:root{--hue: 210;--bg-primary: #121212;--bg-secondary: #1e1e1e;--rule: #2e2e2e;--panel-border: rgba(255, 255, 255, .06);--text-primary: #f0f0f0;--text-secondary: #b0b0b0;--accent-color: oklch(83% .12 var(--hue));--accent-deep: oklch(60% .17 var(--hue));--border-radius: 16px;--box-shadow: 0 4px 20px rgba(0, 0, 0, .2)}html{scrollbar-gutter:stable}body{font-size:1.0625rem;line-height:1.6;color:var(--text-primary);background-color:var(--bg-primary);padding:clamp(1.5rem,4vw,3rem) clamp(1rem,4vw,2.5rem) 6rem}.App{max-width:64rem;margin:0 auto}a{color:inherit}ul{list-style:none}:focus-visible{outline:2px solid var(--accent-color);outline-offset:3px}.Sheet{position:relative;z-index:1;background:var(--bg-secondary);border:1px solid var(--panel-border);border-radius:var(--border-radius);box-shadow:var(--box-shadow);padding:clamp(1.25rem,3.5vw,2.5rem);min-height:34rem}.Pane{animation:fade .2s ease-out}@keyframes fade{0%{opacity:0}to{opacity:1}}.Links{display:flex;flex-wrap:wrap;gap:.25rem 1.5rem}.Links a{text-decoration:underline;text-decoration-color:var(--accent-color);text-decoration-thickness:2px;text-underline-offset:.22em}.Links a:hover{color:var(--accent-color)}.LogoHead{display:flex;align-items:center;gap:1rem}.LogoHead h3{font-size:1.125rem;font-weight:700;letter-spacing:-.01em;line-height:1.3}.Logo{flex:none;width:4.5rem;height:2.75rem;padding:.4rem .5rem;object-fit:contain;background:#fff;border-radius:6px}.EntryMeta{color:var(--text-secondary);font-size:.9375rem;line-height:1.45}.Intro{display:grid;grid-template-columns:auto minmax(0,1fr);gap:1.5rem 2.5rem;align-items:center}.Intro img{width:12rem;height:12rem;border-radius:50%;object-fit:cover;border:3px solid var(--accent-color);box-shadow:var(--box-shadow)}.IntroLede{font-size:clamp(1.35rem,2.6vw,1.75rem);line-height:1.3;font-weight:500;letter-spacing:-.01em;text-wrap:balance}.IntroLikes{color:var(--text-secondary);max-width:48ch;margin-top:.75rem}.Intro .Links{margin-top:1.1rem}.Education{border-top:1px solid var(--rule);margin-top:2.25rem;padding-top:2rem}.Coursework{color:var(--text-secondary);margin-top:.8rem}.Job+.Job{border-top:1px solid var(--rule);margin-top:1.75rem;padding-top:1.75rem}.JobSummary{margin-top:.8rem;max-width:66ch}.Job ul{margin-top:.5rem;max-width:66ch;color:var(--text-secondary)}.Job li{position:relative;padding-left:1.1rem}.Job li+li{margin-top:.3rem}.Job li:before{content:"";position:absolute;left:0;top:.72em;width:.4rem;height:1px;background:var(--text-secondary)}.SkillGroup+.SkillGroup{margin-top:1.5rem}.SkillHeader{font-size:1rem;font-weight:700;color:var(--accent-color);margin-bottom:.6rem}.SkillTags{display:flex;flex-wrap:wrap;gap:.5rem}.SkillTag{background:var(--bg-primary);padding:5px 13px;border-radius:20px;font-size:.875rem;border:1px solid rgba(255,255,255,.1);transition:border-color .3s,transform .3s}.SkillTag:hover{border-color:var(--accent-color);transform:translateY(-2px)}.ContactLede{font-size:clamp(1.35rem,2.6vw,1.75rem);line-height:1.3;font-weight:500;letter-spacing:-.01em;margin-bottom:1.5rem}.ContactGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.ContactCard{display:flex;align-items:center;gap:1rem;padding:1.2rem;background:var(--bg-primary);border:1px solid var(--panel-border);border-radius:14px;box-shadow:var(--box-shadow);text-decoration:none;transition:border-color .2s}.ContactCard:hover{border-color:color-mix(in srgb,var(--accent-color) 45%,transparent)}.ContactCard svg{flex:none;width:1.5rem;height:1.5rem;color:var(--accent-color)}.ContactLabel{display:block;color:var(--text-secondary);font-size:.8125rem}.ContactValue{display:block;font-weight:600;overflow-wrap:anywhere}.ContactCardPrimary{grid-column:1 / -1;padding:1.5rem}.ContactCardPrimary svg{width:1.75rem;height:1.75rem}.ContactCardPrimary .ContactValue{font-size:clamp(1.05rem,2.4vw,1.35rem)}@media(max-width:700px){.Intro{grid-template-columns:1fr}.Intro img{width:8rem;height:8rem}.ContactGrid{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){.Pane{animation:none}.SkillTag,.ContactCard{transition:none}}.Header{text-align:center;padding-bottom:1.25rem;border-bottom:3px solid var(--accent-color)}.Header h1{font-size:clamp(2.25rem,6vw,3.25rem);line-height:1.05;font-weight:750;letter-spacing:-.03em;background:linear-gradient(100deg,var(--text-primary) 15%,var(--accent-color) 95%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.NavigationBar{display:flex;align-items:flex-end;margin-top:2.25rem;padding:0 1.25rem}.Tabs{display:flex;align-items:flex-end;gap:.3rem}.Tabs button{font:inherit;font-weight:600;color:var(--text-secondary);background:#181818;border:1px solid var(--panel-border);border-bottom:0;border-radius:12px 12px 0 0;padding:.7rem 1.3rem;margin-bottom:-1px;transform:translateY(5px);cursor:pointer;transition:color .2s,transform .2s}.Tabs button:hover{color:var(--text-primary)}.Tabs button[aria-selected=true]{color:var(--accent-color);background:var(--bg-secondary);transform:none;position:relative;z-index:2}.ResumeLink{margin-left:auto;align-self:center;font-weight:600;text-decoration:underline;text-decoration-color:var(--accent-color);text-decoration-thickness:2px;text-underline-offset:.22em}.ResumeLink:hover{color:var(--accent-color)}.ProjectsContainer{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(17rem,100%),1fr));gap:1rem}.ProjectCard{position:relative;height:14.5rem;perspective:1000px;cursor:pointer;border-radius:14px}.CardInner{position:absolute;top:0;right:0;bottom:0;left:0;transition:transform .7s;transform-style:preserve-3d}.CardInner.is-flipped{transform:rotateY(180deg)}.CardFront,.CardBack{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;gap:.5rem;padding:1.2rem;background:var(--bg-primary);border:1px solid var(--panel-border);border-radius:14px;box-shadow:var(--box-shadow);backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:visibility 0s .35s}.ProjectCard:hover .CardFront,.ProjectCard:hover .CardBack{border-color:color-mix(in srgb,var(--accent-color) 45%,transparent)}.CardInner:not(.is-flipped) .CardBack,.CardInner.is-flipped .CardFront{visibility:hidden}.CardFront h3{font-size:1.125rem;line-height:1.25;font-weight:700;color:var(--accent-color);padding-right:1.5rem}.CardFront p,.CardBack p{color:var(--text-secondary);font-size:.9rem;line-height:1.5}.CardFront .CardStack{margin-top:auto;font-size:.8125rem}.CardFlipHint{position:absolute;top:1.1rem;right:1.1rem;width:1rem;height:1rem;color:var(--text-secondary);transition:transform .4s,color .2s}.ProjectCard:hover .CardFlipHint{color:var(--accent-color);transform:rotate(180deg)}.CardBack{transform:rotateY(180deg);overflow:auto}.CardBack p{font-size:.84rem}.CardBack a{margin-top:auto;font-weight:600;color:var(--accent-color);text-decoration:none}.CardBack a:hover{text-decoration:underline}.Footer{text-align:center;color:var(--text-secondary);font-size:.875rem;margin-top:2rem}@media(max-width:700px){.NavigationBar{padding:0 .5rem}.Tabs{flex:1;gap:.15rem}.Tabs button{flex:1 1 auto;min-width:0;padding:.6rem .25rem;font-size:clamp(.75rem,3.6vw,.9375rem)}.ResumeLink{display:none}}@media(prefers-reduced-motion:reduce){.CardInner,.CardFront,.CardBack,.CardFlipHint,.Tabs button{transition:none}}.ai-chat-fab{position:fixed;bottom:28px;right:28px;z-index:9999;width:60px;height:60px;border-radius:50%;border:none;cursor:pointer;background:radial-gradient(circle at 40% 40%,rgba(255,255,255,.15),transparent 60%),linear-gradient(135deg,var(--accent-deep),var(--accent-color));box-shadow:0 4px 24px #00000059,0 0 20px color-mix(in srgb,var(--accent-color) 40%,transparent),0 0 40px color-mix(in srgb,var(--accent-color) 15%,transparent);display:flex;align-items:center;justify-content:center;transition:transform .3s cubic-bezier(.34,1.56,.64,1),box-shadow .3s ease;animation:ai-fab-breathe 3s ease-in-out infinite;overflow:visible}.ai-chat-fab:hover{transform:scale(1.1);box-shadow:0 6px 32px #0006,0 0 30px color-mix(in srgb,var(--accent-color) 55%,transparent),0 0 60px color-mix(in srgb,var(--accent-color) 25%,transparent)}.ai-chat-fab:active{transform:scale(.95)}@keyframes ai-fab-breathe{0%,to{box-shadow:0 4px 24px #00000059,0 0 20px color-mix(in srgb,var(--accent-color) 40%,transparent)}50%{box-shadow:0 4px 24px #00000059,0 0 35px color-mix(in srgb,var(--accent-color) 60%,transparent),0 0 60px color-mix(in srgb,var(--accent-color) 20%,transparent)}}.ai-chat-fab svg{width:28px;height:28px;fill:#fff;filter:drop-shadow(0 0 4px rgba(255,255,255,.5));animation:ai-sparkle-rotate 6s linear infinite}@keyframes ai-sparkle-rotate{0%{transform:rotate(0) scale(1)}25%{transform:rotate(5deg) scale(1.05)}50%{transform:rotate(0) scale(1)}75%{transform:rotate(-5deg) scale(1.05)}to{transform:rotate(0) scale(1)}}.ai-fab-sparkle{position:absolute;width:6px;height:6px;border-radius:50%;background:var(--accent-color);pointer-events:none;animation:ai-sparkle-float 3s ease-in-out infinite;opacity:0}.ai-fab-sparkle:nth-child(2){top:-4px;right:8px;animation-delay:0s}.ai-fab-sparkle:nth-child(3){top:8px;right:-6px;animation-delay:.7s;width:4px;height:4px}.ai-fab-sparkle:nth-child(4){bottom:2px;right:-4px;animation-delay:1.4s;width:5px;height:5px}.ai-fab-sparkle:nth-child(5){bottom:-4px;left:12px;animation-delay:2.1s;width:3px;height:3px}.ai-fab-sparkle:nth-child(6){top:-2px;left:4px;animation-delay:.4s;width:4px;height:4px}@keyframes ai-sparkle-float{0%,to{opacity:0;transform:translate(0) scale(.5)}30%{opacity:.9;transform:translate(-3px,-8px) scale(1)}70%{opacity:.6;transform:translate(2px,-14px) scale(.8)}}.ai-chat-fab.hidden{transform:scale(0);opacity:0;pointer-events:none;transition:transform .3s ease,opacity .2s ease}.ai-chat-panel{position:fixed;bottom:28px;right:28px;z-index:10000;width:400px;height:540px;border-radius:20px;display:flex;flex-direction:column;overflow:hidden;background:#1e1e1ed9;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);box-shadow:0 16px 70px #0000008c,0 0 30px color-mix(in srgb,var(--accent-color) 12%,transparent),inset 0 1px #ffffff0f;transform-origin:bottom right;animation:ai-panel-open .35s cubic-bezier(.34,1.56,.64,1) forwards}.ai-chat-panel.closing{animation:ai-panel-close .25s ease-in forwards}@keyframes ai-panel-open{0%{transform:scale(.3) translateY(20px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}@keyframes ai-panel-close{0%{transform:scale(1) translateY(0);opacity:1}to{transform:scale(.3) translateY(20px);opacity:0}}.ai-chat-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#ffffff08;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0}.ai-chat-header-left{display:flex;align-items:center;gap:10px}.ai-chat-header-icon{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,var(--accent-deep),var(--accent-color));display:flex;align-items:center;justify-content:center;flex-shrink:0}.ai-chat-header-icon svg{width:14px;height:14px;fill:#fff}.ai-chat-header h3{margin:0;font-size:.95rem;font-weight:600;color:var(--text-primary);letter-spacing:-.2px}.ai-chat-header-subtitle{font-size:.72rem;color:var(--text-secondary);margin:0;opacity:.7}.ai-chat-close{width:32px;height:32px;border-radius:50%;border:none;background:#ffffff0d;color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:18px;line-height:1}.ai-chat-close:hover{background:#ffffff1a;color:var(--text-primary)}.ai-chat-messages{flex:1;overflow-y:auto;padding:16px 16px 8px;display:flex;flex-direction:column;gap:12px;scroll-behavior:smooth}.ai-chat-messages::-webkit-scrollbar{width:4px}.ai-chat-messages::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:4px;border:none}.ai-chat-messages::-webkit-scrollbar-track{background:transparent}.ai-chat-welcome{text-align:center;padding:30px 20px;display:flex;flex-direction:column;align-items:center;gap:12px;flex:1;justify-content:flex-end}.ai-chat-welcome-icon{width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,var(--accent-deep),var(--accent-color));display:flex;align-items:center;justify-content:center;margin-bottom:4px;box-shadow:0 4px 20px color-mix(in srgb,var(--accent-color) 30%,transparent)}.ai-chat-welcome-icon svg{width:22px;height:22px;fill:#fff}.ai-chat-welcome h4{color:var(--text-primary);font-size:1.05rem;margin:0;font-weight:600}.ai-chat-welcome p{color:var(--text-secondary);font-size:.82rem;margin:0;line-height:1.5;max-width:280px}.ai-chat-suggestions{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:4px}.ai-chat-suggestion{background:#ffffff0d;border:1px solid rgba(255,255,255,.08);border-radius:20px;padding:6px 14px;font-size:.75rem;color:var(--text-secondary);cursor:pointer;transition:all .2s ease;font-family:inherit}.ai-chat-suggestion:hover{background:#ffffff1a;color:var(--text-primary);border-color:var(--accent-color)}.ai-msg{max-width:85%;padding:10px 14px;border-radius:16px;font-size:.88rem;line-height:1.55;word-wrap:break-word;animation:ai-msg-in .25s ease-out}@keyframes ai-msg-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.ai-msg.user{align-self:flex-end;background:var(--accent-color);color:var(--bg-primary);border-bottom-right-radius:4px}.ai-msg.assistant{align-self:flex-start;background:#ffffff12;color:var(--text-primary);border-bottom-left-radius:4px}.ai-msg.error{align-self:flex-start;background:#dc323226;color:#ff8a8a;border-bottom-left-radius:4px;font-size:.82rem}.ai-typing{display:flex;align-items:center;gap:4px;padding:12px 16px;align-self:flex-start}.ai-typing-dot{width:7px;height:7px;border-radius:50%;background:var(--text-secondary);animation:ai-typing-bounce 1.4s ease-in-out infinite}.ai-typing-dot:nth-child(1){animation-delay:0s}.ai-typing-dot:nth-child(2){animation-delay:.2s}.ai-typing-dot:nth-child(3){animation-delay:.4s}@keyframes ai-typing-bounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-6px);opacity:1}}.ai-chat-input-area{padding:12px 16px 16px;border-top:1px solid rgba(255,255,255,.06);display:flex;gap:8px;align-items:flex-end;flex-shrink:0;background:#ffffff05}.ai-chat-input{flex:1;background:#ffffff0f;border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:10px 16px;color:var(--text-primary);font-size:.88rem;font-family:inherit;resize:none;outline:none;min-height:40px;max-height:100px;line-height:1.4;transition:border-color .2s ease}.ai-chat-input::placeholder{color:var(--text-secondary);opacity:.5}.ai-chat-input:focus{border-color:color-mix(in srgb,var(--accent-color) 50%,transparent)}.ai-chat-send{width:40px;height:40px;border-radius:50%;border:none;background:var(--accent-color);color:var(--bg-primary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0}.ai-chat-send:hover:not(:disabled){filter:brightness(1.15);transform:scale(1.05)}.ai-chat-send:disabled{opacity:.4;cursor:not-allowed}.ai-chat-send svg{width:18px;height:18px;fill:var(--bg-primary)}@media(max-width:500px){.ai-chat-panel{width:calc(100vw - 16px);height:calc(100dvh - 16px);bottom:8px;right:8px;border-radius:16px}.ai-chat-fab{bottom:20px;right:20px;width:52px;height:52px}.ai-chat-fab svg{width:24px;height:24px}}
